var e=e=>`cloud_ai_fallback_mode_v2_${String(e||`public`).trim()||`public`}`,t=e=>`cloud_ai_fallback_consent_v1_${String(e||`public`).trim()||`public`}`,n=`llm_web_`,r=e=>{let t=String(e??``).trim().toLowerCase();return t===`auto`?`auto`:t===`manual`?`manual`:t===`1`||t===`true`?`auto`:t===`0`||t===`false`?`manual`:null},i=(e,t)=>{try{let t=r(localStorage.getItem(n+e));if(t)return t}catch{}try{let e=r(localStorage.getItem(n+t));if(e)return e}catch{}return null},a=(e,t)=>{try{localStorage.setItem(n+e,t)}catch{}},o=async n=>{let o=e(n),s=t(n);try{return await new Promise(e=>{let t=!1,n=n=>{t||(t=!0,e(n))},c=()=>n(i(o,s)),l=chrome.storage?.local?.get;if(!l)return c();let u=setTimeout(()=>c(),450);l.call(chrome.storage.local,{[o]:null,[s]:null},n=>{if(t)return;t=!0,clearTimeout(u);let i=r(n?.[o]);if(i){a(o,i),e(i);return}let c=r(n?.[s]);if(c){a(o,c),e(c);return}e(null)})})}catch{return null}},s=async(t,n)=>{let r=e(t);try{await new Promise(e=>{let t=chrome.storage?.local?.set;if(!t)return e();let i=!1,a=()=>{i||(i=!0,e())},o=setTimeout(()=>a(),450);t.call(chrome.storage.local,{[r]:n},()=>{clearTimeout(o),a()})})}catch{}a(r,n)},c=async e=>{let t=await o(e);if(t)return t;let n=window.confirm(`提示：当你选择的模型超时、限流或暂时不可用时，系统可以自动尝试同档位或更合适的替代模型继续完成请求；如果自动兜底仍失败，再提示你手动处理。

计费说明：
- 当前失败模型的本次生成不会按失败模型扣积分；
- 若该次请求已产生预扣，会先退回，再按你实际成功使用的模型重新扣积分；
- 切换后会按成功模型的 Token、阶梯价格和统一安全系数重新计算积分。

选择方式：
- 点击“确定”：以后优先自动尝试替代模型，减少你手动重试；
- 点击“取消”：以后每次失败都先征求你，由你决定是否切换。

该设置仅对当前账号生效，可后续再调整。`)?`auto`:`manual`;return await s(e,n),n},l=async e=>{let t=await o(e);return t?t===`auto`:null},u=async(e,t)=>{await s(e,t?`auto`:`manual`)},d=async e=>await c(e)===`auto`;export{d as ensureModelFallbackConsent,c as ensureModelFallbackMode,l as getModelFallbackConsent,o as getModelFallbackMode,u as setModelFallbackConsent,s as setModelFallbackMode};