murmur-rag 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -17
- package/dist/cdn/{anthropic-dc7h9prc.js → anthropic-ynz7717b.js} +2 -2
- package/dist/cdn/{embed-acjpjh6t.js → embed-0m8xctqy.js} +1 -1
- package/dist/cdn/{embed-ssqsb38w.js → embed-7pk91zq8.js} +2 -2
- package/dist/cdn/embed-dbkjhg16.js +83 -0
- package/dist/cdn/{embed-z32y952f.js → embed-n5nzhrf2.js} +3 -3
- package/dist/cdn/{embed-6gef7ym5.js → embed-rp9gb1qq.js} +2 -2
- package/dist/cdn/{embed-fd96s8qk.js → embed-xtkxyrpe.js} +9 -9
- package/dist/cdn/{google-yywkqdph.js → google-k5kwa54v.js} +8 -8
- package/dist/cdn/{index-jt6n0d28.js → index-db4ne93m.js} +1 -1
- package/dist/cdn/{index-nesgnf2n.js → index-qc8kgsdt.js} +1 -1
- package/dist/cdn/{index-bq0x71h1.js → index-t0qn2m4r.js} +1 -1
- package/dist/cdn/index-y0faj89r.js +1 -0
- package/dist/cdn/mistral-p2qcnn42.js +3 -0
- package/dist/cdn/{murmur-j1ky5vmr.js → murmur-d6t6cjc7.js} +2 -2
- package/dist/cdn/murmur.js +6 -6
- package/dist/cdn/{openai-compatible-zhaj1r43.js → openai-compatible-psnkrpxy.js} +6 -6
- package/dist/cdn/{openai-g1685z9v.js → openai-d3q1d6cz.js} +10 -10
- package/dist/cdn/retriever-6qvn2maq.js +1 -0
- package/dist/cdn/{transformers.web-3kmbvcbt.js → transformers.web-xn16v7pz.js} +5 -5
- package/dist/lib/chunks/{index-92w507gk.js → index-y3v46yjp.js} +44 -34
- package/dist/lib/embed.js +4 -4
- package/dist/lib/widget/index.js +2 -2
- package/dist/types/widget/session.d.ts +16 -4
- package/package.json +1 -1
- package/dist/cdn/embed-jdraznwg.js +0 -83
- package/dist/cdn/index-wgzgvzaf.js +0 -1
- package/dist/cdn/mistral-0mg4kk7s.js +0 -3
- package/dist/cdn/retriever-dqxzjaqk.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{q}from"./embed-n5nzhrf2.js";var re=["@ai-sdk/anthropic","@ai-sdk/google","@ai-sdk/mistral","@ai-sdk/openai","@ai-sdk/openai-compatible"];function K(e){if(!e)return;if(e.defaultModel&&e.models[e.defaultModel])return e.defaultModel;return Object.keys(e.models)[0]}function ne(e,t=""){if(!e)return[];let r=Object.values(e.models),n=t.trim().toLowerCase();if(!n)return r;return r.filter((i)=>i.name.toLowerCase().includes(n)||i.id.toLowerCase().includes(n))}var se="llm-connect-catalog",ce=3600000;var Ke=["content-type","etag","last-modified"];function Fe(){try{return globalThis.caches}catch{return}}function Ge(e){let t=globalThis.location;if(!t)return!0;try{return new URL(e,t.href).origin===t.origin}catch{return!1}}function He(e){if(typeof e==="string")return e;if(e instanceof URL)return e.href;return e.url}function ae(e){if(!e?.aborted)return!1;return e.reason?.name!=="TimeoutError"}async function ie(e,t,r,n){let i=new Headers({["x-llm-connect-stored-at"]:String(Date.now())});for(let l of Ke){let d=n.get(l);if(d)i.set(l,d)}try{await e.put(t,new Response(r,{headers:i}))}catch{}return new Response(r,{status:200,headers:i})}function le(e={}){let{cacheName:t="llm-connect-catalog",ttlMs:r=3600000}=e,n=(d,f)=>(e.fetch??globalThis.fetch)(d,f),i,l=()=>(i??=(async()=>{let d=e.caches??Fe();if(!d)return null;try{return await d.open(t)}catch{return null}})(),i);return async(d,f)=>{let m=(f?.method??(d instanceof Request?d.method:"GET")).toUpperCase()==="GET"?await l():null;if(!m)return n(d,f);let p=He(d),c=await m.match(p).catch(()=>{return}),h=Number(c?.headers.get("x-llm-connect-stored-at"));if(c&&Date.now()-h<r)return c;let b=new Headers(f?.headers),w=c?.headers.get("etag");if(w&&Ge(p))b.set("If-None-Match",w);let E;try{E=await n(p,{...f,headers:b})}catch(a){if(c&&!ae(f?.signal))return c;throw a}if(c&&E.status===304)return ie(m,p,await c.text(),c.headers);if(!E.ok)return c??E;let o;try{o=await E.text()}catch(a){if(c&&!ae(f?.signal))return c;throw a}return ie(m,p,o,E.headers)}}var Re=["openai","anthropic","google","mistral"],F=new Map;function M(e,t=globalThis.fetch){let r=F.get(e);if(!r)r=t(e).then((n)=>{if(!n.ok)throw Error(`Model list unavailable (${n.status})`);return n.json()}).catch((n)=>{throw F.delete(e),n}),F.set(e,r);return r}async function qe(e){let{buildSlimCatalog:t}=await (q("t87kf8t0"),import("./browser-t87kf8t0.js"));return t(e)}function ft(e={}){let{fallbackUrl:t,npm:r=re,required:n,build:i=qe,cacheName:l=se,cacheTtlMs:d=ce}=e,f=(c,h)=>(e.fetch??globalThis.fetch)(c,h),u=l===!1?f:le({cacheName:l,ttlMs:d,fetch:f,...e.cacheStorage?{caches:e.cacheStorage}:{}}),m=null;async function p(){try{let c=await i({npm:r,...n?{required:n}:{},fetch:u});if(Object.keys(c).length===0)throw Error("Empty catalog");return c}catch(c){if(!t)throw c;return M(t,e.fetch)}}return()=>{if(!m)m=p().catch((c)=>{throw m=null,c});return m}}function B(e,t){if(!e)return{recommended:[],others:[]};let r=t.map((i)=>e[i]).filter((i)=>!!i),n=Object.values(e).filter((i)=>!t.includes(i.id)).sort((i,l)=>i.name.localeCompare(l.name));return{recommended:r,others:n}}var G={providerId:"openai",providerName:"OpenAI",providerNpm:"@ai-sdk/openai",providerApi:"https://api.openai.com/v1"};function H(e,t){let r=e?.[t];if(!r)return null;return{providerId:r.id,providerName:r.name,providerNpm:r.npm,providerApi:r.api??""}}var R={authentication_error:"auth",permission_error:"auth",rate_limit_error:"rate-limit",overloaded_error:"overloaded",api_error:"server",not_found_error:"not-found",invalid_request_error:"invalid-request",request_too_large:"invalid-request",context_length_exceeded:"context-length",insufficient_quota:"rate-limit"},je=/prompt is too long|context[ _-]?length|context window|maximum context|too many (input )?tokens|input is too long|exceeds the model'?s? (maximum|context)/i,We=/api key not valid|invalid api key|incorrect api key|invalid x-api-key/i,$e=/failed to fetch|fetch failed|networkerror|network error|load failed|cannot connect|network connection/i,Je=new Set(["auth-or-network","rate-limit","overloaded","server"]);function T(e,t){let r=e;if(t&&t.length>=4)r=r.split(t).join("***");return r.length>500?`${r.slice(0,500)}…`:r}function S(e){return typeof e==="object"&&e!==null}function ue(e,t){if(!S(e))return!1;return e[Symbol.for(`vercel.ai.error.${t}`)]===!0}var y=(e)=>typeof e==="string"&&e.length>0?e:void 0;function Ve(e){let t=Array.isArray(e)?e[0]:e;if(!S(t))return{};let r=S(t.error)?t.error:t,n=y(r.message)??y(r.msg)??y(t.message)??y(t.msg)??(typeof t.error==="string"?t.error:void 0);return{type:y(r.type)??y(r.status),code:y(r.code),message:n}}var Ye=["choices","content","candidates","output","data","models"];function j(e){let t=typeof e==="string"?Number(e):e;return typeof t==="number"&&Number.isInteger(t)&&t>=400&&t<=599?t:void 0}function L(e){let t=Array.isArray(e)&&e.length===1?e[0]:e;if(!S(t)||Array.isArray(t))return null;if(Ye.some((l)=>t[l]!==void 0))return null;let r=S(t.error)?t.error:void 0,n=y(t.msg)!==void 0||y(t.message)!==void 0;if(!(r!==void 0||y(t.error)!==void 0||t.type==="error"||t.success===!1||j(t.code)!==void 0&&n))return null;return j(t.code)??j(r?.code)??502}function ze(e){if(typeof e!=="string"||!e)return;try{return JSON.parse(e)}catch{return}}function Xe(e,t){let r=t.code&&R[t.code]||t.type&&R[t.type]||void 0;if(r==="context-length"||je.test(t.message)){if(e===400||e===413||e===422||r==="context-length")return"context-length"}if(e===401||e===403)return"auth";if(e===429)return r==="overloaded"?"overloaded":"rate-limit";if(e===529||e===503||r==="overloaded")return"overloaded";if(e===404)return"not-found";if(e>=500)return"server";if(e===400||e===413||e===422)return r==="auth"||We.test(t.message)?"auth":"invalid-request";return r??"unknown"}function O(e,t,r,n){return{code:e,message:T(t,r),...n===void 0?{}:{status:n},retryable:Je.has(e)}}function Ze(e){let t=e;for(let r=0;r<5&&t instanceof Error;r++){if($e.test(t.message))return!0;t=t.cause}return!1}function De(e,t){if(ue(e,"AI_RetryError")&&S(e)&&e.lastError!==void 0)return De(e.lastError,t);if(S(e)){let r=ue(e,"AI_APICallError"),n=r?ze(e.responseBody):void 0,i=Ve(e.data??n),l=y(e.type)??i.type,d=y(e.code)??i.code,f=typeof e.statusCode==="number"?e.statusCode:void 0,u=i.message??y(e.message)??"";if(f!==void 0)return O(Xe(f,{type:l,code:d,message:u}),u,t,r?f:void 0);let m=l&&R[l]||d&&R[d]||void 0;if(m)return O(m,u,t)}if(Ze(e))return O("auth-or-network",e instanceof Error?e.message:"",t);return O("unknown",e instanceof Error?e.message:String(e),t)}var de=Symbol.for("llm-connect.registry"),fe=globalThis;fe[de]??=new Map;var W=fe[de],et={"@ai-sdk/openai":"openai","@ai-sdk/anthropic":"anthropic","@ai-sdk/google":"google","@ai-sdk/mistral":"mistral","@ai-sdk/openai-compatible":"openai-compatible"};function v(e){return et[e]??e}function oe(e,t){W.set(v(e),t)}var C="https://api.openai.com/v1";function tt(e){return e.trim().replace(/\/+$/,"")===C}function Ie(e){return(t)=>{let r=e({apiKey:t.apiKey,...t.baseURL&&{baseURL:t.baseURL},...t.headers&&{headers:t.headers},...t.fetch&&{fetch:t.fetch}});if(t.baseURL&&!tt(t.baseURL)&&typeof r.chat==="function")return r.chat(t.model);return r(t.model)}}function me(e){return W.has(v(e))}var rt={openai:"openai",anthropic:"anthropic",google:"google",mistral:"mistral","openai-compatible":"openai-compatible"};function pe(e){let t=v(e),r=W.get(t);if(r)return r;let n=rt[t],i=n?` import { register } from "llm-connect/providers/${n}";
|
|
2
2
|
register();
|
|
3
3
|
|
|
4
4
|
or let loadModel() import it on demand.`:` import { registerProvider } from "llm-connect";
|
|
@@ -7,4 +7,4 @@ or let loadModel() import it on demand.`:` import { registerProvider } from "ll
|
|
|
7
7
|
Register it before calling AI functions:
|
|
8
8
|
|
|
9
9
|
${i}
|
|
10
|
-
`)}var qt={anthropic:"https://api.anthropic.com/v1",openai:C,google:"https://generativelanguage.googleapis.com/v1beta",mistral:"https://api.mistral.ai/v1"},ot="api.anthropic.com";function he(e){return e.trim().replace(/\/+$/,"")}function ge(e){if(e.customEndpoint)return"openai-compatible";let t=v(e.providerNpm||"openai");if(t==="openai"&&e.providerApi&&he(e.providerApi)!==C)return"openai-compatible";return t}function Be(e){if(!e)return!1;try{return new URL(e).hostname===ot}catch{return!1}}function ht(e){let t=he(e);try{let{pathname:r}=new URL(t);return/\/v\d+$/.test(r)?t:`${t}/v1`}catch{return t}}var gt="anthropic-dangerous-direct-browser-access",nt={anthropic:["x-api-key","anthropic-version","anthropic-beta",gt],openai:["authorization"],google:["x-goog-api-key"],mistral:["authorization"],"openai-compatible":["authorization"]},at="server-side-fallback-2026-06-01";function it(e){return typeof Request<"u"&&e instanceof Request?e.url:String(e)}function st(e,t){let r=t["anthropic-beta"];if(r===void 0||typeof e!=="string"||!e.includes('"fallbacks"'))return;let n;try{n=JSON.parse(e)}catch{return}if(n?.fallbacks!=="default")return;let i=r.split(",").filter((l)=>l.trim()!==at);if(i.length>0)t["anthropic-beta"]=i.join(",");else delete t["anthropic-beta"]}async function ct(e){if(!e.ok||!(e.headers.get("content-type")??"").includes("json"))return e;let t,r;try{t=await e.clone().text(),r=L(JSON.parse(t))}catch{return e}if(r===null)return e;return new Response(t,{status:r,headers:e.headers})}function Ee(e,t={}){let r=nt[e],n=t.strictHeaders&&r?new Set(["content-type","accept",...r]):void 0;return(i,l)=>{let d=it(i),f=l?.headers??(typeof Request<"u"&&i instanceof Request?i.headers:void 0),u={};if(new Headers(f).forEach((p,c)=>{if(c==="user-agent")return;if(n&&!n.has(c))return;if(c===gt&&!Be(d))return;u[c]=p}),e==="anthropic")st(l?.body,u);return(t.fetch??globalThis.fetch)(i instanceof URL||typeof i==="string"?d:i,{...l,headers:u}).then(ct)}}function J(e){if(e.customEndpoint)return"openai";return v(e.providerNpm||"openai")}function ye(e,t={}){let r=pe(J(e)),n=Ee(ge(e),t);if(e.customEndpoint)return r({apiKey:e.apiKey||"",model:e.customModel||e.model||"",baseURL:e.customEndpoint,...e.headers&&{headers:e.headers},fetch:n});return r({apiKey:e.apiKey,model:e.model||"",...e.providerApi&&{baseURL:e.providerApi},...e.headers&&{headers:e.headers},fetch:n})}async function lt(e){switch(e){case"openai":(await (F("g1685z9v"),import("./openai-g1685z9v.js"))).register();return;case"anthropic":(await (F("dc7h9prc"),import("./anthropic-dc7h9prc.js"))).register();return;case"google":(await (F("yywkqdph"),import("./google-yywkqdph.js"))).register();return;case"mistral":(await (F("0mg4kk7s"),import("./mistral-0mg4kk7s.js"))).register();return;case"openai-compatible":(await (F("zhaj1r43"),import("./openai-compatible-zhaj1r43.js"))).register();return}}async function Qe(e,t={}){let r=J(e);if(!me(r))await lt(r);return ye(e,t)}function Le(e){if(e?.customEndpoint?.trim())return!!e.customModel?.trim();return!!e?.apiKey?.trim()}function k(e){return e.custom?e.customApiKey:e.apiKey}function N(e){return e.custom?!!e.customEndpoint.trim()&&!!e.customModel.trim():!!e.apiKey.trim()&&!!e.model}function V(e){return e.custom?!!e.customEndpoint.trim():!!e.apiKey.trim()}function be(e){let t=e.toLowerCase();return t==="localhost"||t.endsWith(".localhost")||t==="[::1]"||/^127(?:\.\d{1,3}){3}$/.test(t)}function _(e){let t;try{t=new URL(e.trim())}catch{return"invalid-endpoint"}if(t.username||t.password)return"invalid-endpoint";if(t.protocol==="https:")return null;if(t.protocol!=="http:")return"invalid-endpoint";return be(t.hostname)?null:"insecure-endpoint"}function Ue(e){if(_(e))return null;return e.trim().replace(/\/+$/,"")}var gn={ollama:{id:"ollama",name:"Ollama",endpoint:"http://localhost:11434/v1",model:"llama3.2"},lmstudio:{id:"lmstudio",name:"LM Studio",endpoint:"http://localhost:1234/v1",model:"local-model"},jan:{id:"jan",name:"Jan",endpoint:"http://localhost:1337/v1"}};function Y(e){try{return globalThis[e]??null}catch{return null}}function z(e,t){try{return Y(e)?.getItem(t)??null}catch{return null}}function X(e,t,r){try{Y(e)?.setItem(t,r)}catch{}}function I(e,t){try{Y(e)?.removeItem(t)}catch{}}var ut=["model","providerId","providerName","providerNpm","providerApi","customEndpoint","customModel","language"];function Ae(e){let t=z("localStorage",e);if(t===null)return null;let r={};try{let i=JSON.parse(t);if(i&&typeof i==="object"&&!Array.isArray(i))r=i}catch{}let n={...r,apiKey:"",model:""};for(let i of ut){let l=r[i];if(typeof l==="string"&&l)n[i]=l;else if(i!=="model")delete n[i]}return n.rememberKey=r.rememberKey===!0,n}var Q="kv",Z="crypto-key",P="api-key";function ee(){try{return!!globalThis.indexedDB&&!!globalThis.crypto?.subtle}catch{return!1}}function Se(e){let t="";for(let r of e)t+=String.fromCharCode(r);return btoa(t)}function ve(e){let t=atob(e),r=new Uint8Array(new ArrayBuffer(t.length));for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function _t({prefsKey:e,dbName:t,sessionKey:r=`${e}-key`}){let n=null;function i(){return new Promise((o,a)=>{let s=indexedDB.open(t,1);s.onupgradeneeded=()=>s.result.createObjectStore(Q),s.onsuccess=()=>o(s.result),s.onerror=()=>a(s.error)})}async function l(o,a){let s=await i();try{return await new Promise((g,A)=>{let x=s.transaction(Q,o),Pe=a(x.objectStore(Q));x.oncomplete=()=>g(Pe.result),x.onerror=()=>A(x.error),x.onabort=()=>A(x.error)})}finally{s.close()}}let d=(o)=>l("readonly",(a)=>a.get(o)),f=(o,a)=>l("readwrite",(s)=>s.put(a,o)),u=(o)=>l("readwrite",(a)=>a.delete(o));async function m(o){let a=await d(Z);if(a||!o)return a;let s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await f(Z,s),s}async function p(o){let a=await m(!0);if(!a)throw Error("No encryption key");let s=crypto.getRandomValues(new Uint8Array(new ArrayBuffer(12))),g=await crypto.subtle.encrypt({name:"AES-GCM",iv:s},a,new TextEncoder().encode(o));return{iv:s,ciphertext:g}}async function c(o){let a=o&&await m(!1);if(!o||!a)return"";let s=await crypto.subtle.decrypt({name:"AES-GCM",iv:o.iv},a,o.ciphertext);return new TextDecoder().decode(s)}function h(){let o=z("sessionStorage",r);if(!o)return;try{let{iv:a,ciphertext:s}=JSON.parse(o);return{iv:ve(a),ciphertext:ve(s).buffer}}catch{return}}async function b(o){if(!ee())return"";try{return await c(o?await d(P):h())}catch{return""}}async function w(o,a){if(I("sessionStorage",r),!ee())return;try{if(!o||!a)await u(P);if(!o)return;let s=await p(o);if(a)await f(P,s);else X("sessionStorage",r,JSON.stringify({iv:Se(s.iv),ciphertext:Se(new Uint8Array(s.ciphertext))}))}catch{}}async function E(){let o=Ae(e);if(!o)return null;if(n===null)n=await b(o.rememberKey===!0);return{...o,apiKey:n}}return{loadDraft:E,async load(){let o=await E();return Le(o)?o:null},async save(o,{rememberKey:a}){let{apiKey:s,...g}=o;X("localStorage",e,JSON.stringify({...g,rememberKey:a})),n=s,await w(s,a)},async clear(){if(n=null,I("localStorage",e),I("sessionStorage",r),!ee())return;try{await u(P),await u(Z)}catch{}}}}var xe=5000,dt=1e4;function _e(e){return e.trim().replace(/\/+$/,"")}function Te(e,t,r){let n=t.trim();if(!n)return{};if(e==="@ai-sdk/anthropic")return{"x-api-key":n,"anthropic-version":"2023-06-01",...Be(r)&&{"anthropic-dangerous-direct-browser-access":"true"}};if(e==="@ai-sdk/google")return{"x-goog-api-key":n};return{Authorization:`Bearer ${n}`}}function D(e,t){return e instanceof Error&&e.name===t}function mt(e){let t=e;if(Array.isArray(t?.data))return t.data.map((r)=>r?.id).filter((r)=>typeof r==="string");if(Array.isArray(t?.models))return t.models.map((r)=>r?.name).filter((r)=>typeof r==="string").map((r)=>r.replace(/^models\//,""));return[]}function te(e,t){return{ok:!1,reason:e===401||e===403?"auth":"http",status:e,...t?{message:t}:{}}}function pt(e){if(typeof AbortSignal.any==="function")return AbortSignal.any(e);let t=new AbortController;for(let r of e){if(r.aborted){t.abort(r.reason);break}r.addEventListener("abort",()=>t.abort(r.reason),{once:!0})}return t.signal}function Me(e,t){let r=t?AbortSignal.timeout(t):void 0;if(e&&r)return pt([e,r]);return e??r}async function Oe(e,t,r,n){let i=r.fetch??globalThis.fetch;try{let l=await i(e,{headers:t,signal:Me(r.signal,r.timeoutMs)});if(!l.ok)return te(l.status);let d=await l.json().catch(()=>null),f=L(d);if(f!==null){let{message:m}=De({statusCode:f,data:d},n.trim());return te(f,m||void 0)}let u=mt(d);return{ok:!0,modelCount:u.length,models:u}}catch(l){if(r.signal?.aborted)throw l;if(D(l,"TimeoutError")||D(l,"AbortError"))return{ok:!1,reason:"timeout"};return{ok:!1,reason:"cors",...l instanceof Error?{message:T(l.message,n.trim())}:{}}}}function Et(e,t="",r={}){let n=`${_e(e)}/models`;return Oe(n,Te(void 0,t,n),{timeoutMs:xe,...r},t)}function bt(e){let t=[];for(let r=e;r instanceof Error&&t.length<4;r=r.cause)t.push(r.message);return t.some((r)=>/failed to fetch|fetch failed|networkerror|load failed|cannot connect to api/i.test(r))}async function we(e,t){try{let[{generateText:r},n]=await Promise.all([(F("wgzgvzaf"),import("./index-wgzgvzaf.js")),Qe(e,t.fetch?{fetch:t.fetch}:{})]);return await r({model:n,prompt:"Reply with OK.",maxOutputTokens:16,maxRetries:0,abortSignal:Me(t.signal,t.timeoutMs)}),{ok:!0}}catch(r){if(t.signal?.aborted)throw r;if(D(r,"TimeoutError")||D(r,"AbortError"))return{ok:!1,reason:"timeout"};let n=T(r instanceof Error?r.message:String(r),e.apiKey?.trim()),i=r?.statusCode;if(typeof i==="number")return te(i,n);if(bt(r))return{ok:!1,reason:"cors",message:n};return{ok:!1,reason:"config",message:n}}}var At=new Set([404,405,501]);function St(e){if(e.ok)return!1;if(e.reason==="cors")return!0;return e.reason==="http"&&e.status!==void 0&&At.has(e.status)}async function vt(e,t){if(e.customEndpoint)return Et(e.customEndpoint,e.apiKey,{signal:t.signal,fetch:t.fetch,timeoutMs:t.timeoutMs??xe});let r=_e(e.providerApi??""),n=r&&e.providerNpm==="@ai-sdk/anthropic"?ht(r):r;if(!n)return null;let i=`${n}/models`;return Oe(i,Te(e.providerNpm,e.apiKey,i),{signal:t.signal,fetch:t.fetch,timeoutMs:t.timeoutMs??dt},e.apiKey)}async function Ce(e,t={}){if(e.customEndpoint){let n=_(e.customEndpoint);if(n==="insecure-endpoint")return{ok:!1,reason:"insecure",message:"Plain http is only allowed to this machine: use https"};if(n)return{ok:!1,reason:"config",message:"Invalid endpoint URL"}}if(t.mode==="generate")return we(e,t);let r=await vt(e,t);if(t.mode==="auto"&&(!r||St(r)))return we(e,t);return r??{ok:!1,reason:"config",message:"No API URL for this provider"}}var wt=[{code:"en",name:"English",label:"English"},{code:"fr",name:"French",label:"Français"},{code:"es",name:"Spanish",label:"Español"},{code:"de",name:"German",label:"Deutsch"},{code:"it",name:"Italian",label:"Italiano"},{code:"pt",name:"Portuguese",label:"Português"},{code:"nl",name:"Dutch",label:"Nederlands"},{code:"ru",name:"Russian",label:"Русский"},{code:"zh",name:"Chinese",label:"中文"},{code:"ja",name:"Japanese",label:"日本語"},{code:"ko",name:"Korean",label:"한국어"},{code:"ar",name:"Arabic",label:"العربية"},{code:"hi",name:"Hindi",label:"हिन्दी"},{code:"tr",name:"Turkish",label:"Türkçe"},{code:"pl",name:"Polish",label:"Polski"},{code:"sv",name:"Swedish",label:"Svenska"}];function ke(e){let t=e?.trim().toLowerCase();if(!t)return;let r=t.split(/[-_]/)[0];return wt.find((n)=>n.code===r||n.name.toLowerCase()===t||n.label.toLowerCase()===t)}function U(e){return ke(e)?.code??"en"}function Ne(){try{let e=globalThis.navigator?.languages??[globalThis.navigator?.language];for(let t of e){let r=ke(t);if(r)return r.code}}catch{}return"en"}function yt(e){let t=e.recommended??Re,r=e.catalog??e.catalogUrl;if(!r)throw Error("createLlmSettingsStore: `catalog` is required");let n=r,i={providerId:e.defaults?.providerId??t[0]??"openai",model:e.defaults?.model??"",rememberKey:e.defaults?.rememberKey??!1},l=()=>e.defaults?.language?U(e.defaults.language):Ne();function d(o){let a=!!o?.customEndpoint,s=o?.apiKey??"";return{custom:a,providerId:o?.providerId||i.providerId,model:o?.model||i.model,apiKey:a?"":s,customApiKey:a?s:"",customEndpoint:o?.customEndpoint??"",customModel:o?.customModel??"",rememberKey:o?.rememberKey??i.rememberKey,language:o?.language?U(o.language):l()}}function f(o){let a=o.catalog?.[o.draft.providerId]??null,s=ne(a,o.search),g=a?.defaultModel;return{...o,provider:a,providers:G(o.catalog,t),isRecommendedProvider:t.includes(o.draft.providerId),models:s,recommendedModel:g?s.find((A)=>A.id===g)??null:null,apiKey:k(o.draft),canSave:N(o.draft),canTest:V(o.draft)}}let u=f({catalog:null,catalogStatus:"idle",catalogError:null,saved:null,draft:d(null),search:"",testing:!1,testResult:null}),m=new Set,p=!1;function c(o){let a={...u,...o};if(!a.draft.model&&a.catalog){let s=K(a.catalog[a.draft.providerId]);if(s)a.draft={...a.draft,model:s}}u=f(a);for(let s of m)s(u)}function h(o){p=!0,c({draft:{...u.draft,...o},testResult:null})}function b(){if(u.catalogStatus==="loading"||u.catalogStatus==="ready")return;c({catalogStatus:"loading",catalogError:null}),(typeof n==="string"?M(n,e.fetch):n()).then((a)=>c({catalog:a,catalogStatus:"ready",catalogError:null}),(a)=>c({catalogStatus:"error",catalogError:a instanceof Error?a.message:"Model list unavailable"}))}function w(){let{draft:o,catalog:a,saved:s}=u,g=q(a,o.providerId);if(g)return g;if(s?.providerId===o.providerId)return{providerId:o.providerId,providerName:s.providerName??o.providerId,providerNpm:s.providerNpm??"",providerApi:s.providerApi??""};return H}function E(){let{draft:o}=u;return{apiKey:k(o),model:o.model,...w(),language:o.language,...o.custom?{customEndpoint:Ue(o.customEndpoint)??o.customEndpoint.trim(),customModel:o.customModel.trim()}:{}}}return{getState:()=>u,subscribe(o){return m.add(o),o(u),()=>{m.delete(o)}},async load(){let o=await(e.storage.loadDraft??e.storage.load)();if(p)c({saved:o});else c({saved:o,draft:d(o),search:"",testResult:null});return o},reset(o){p=!1,c({saved:o,draft:d(o),search:"",testResult:null})},open(){p=!1,c({draft:d(u.saved),search:"",testing:!1,testResult:null}),b()},retryCatalog:b,selectProvider(o){let a=K(u.catalog?.[o])??"";p=!0,c({draft:{...u.draft,providerId:o,model:a},search:"",testResult:null})},selectModel:(o)=>h({model:o}),setApiKey(o){h(u.draft.custom?{customApiKey:o}:{apiKey:o})},setSearch:(o)=>c({search:o}),toggleCustom(o){h({custom:o??!u.draft.custom})},applyPreset(o){h({customEndpoint:o.endpoint,...!u.draft.customModel.trim()&&o.model?{customModel:o.model}:{}})},setEndpoint:(o)=>h({customEndpoint:o}),setCustomModel:(o)=>h({customModel:o}),setRememberKey:(o)=>h({rememberKey:o}),setLanguage:(o)=>h({language:U(o)}),settings:E,async test(o={}){c({testing:!0,testResult:null});try{let a=await Ce(E(),{mode:e.testMode??"models",signal:o.signal,fetch:e.fetch});return c({testing:!1,testResult:a}),a}catch(a){throw c({testing:!1}),a}},async save(o){let{draft:a}=u;if(!N(a))return{ok:!1,reason:"incomplete"};let s=a.custom?_(a.customEndpoint):null;if(s)return{ok:!1,reason:s};let g={...E(),...o};await e.storage.save(g,{rememberKey:a.rememberKey});let A={...g,rememberKey:a.rememberKey};return c({saved:A}),{ok:!0,settings:A}},async clear(){await e.storage.clear(),c({saved:null,draft:{...u.draft,custom:!1,apiKey:"",customApiKey:"",customEndpoint:"",customModel:"",language:l()},testResult:null})}}}export{Re,ft,De,oe,Ie,qt,Be,ht,gt,Qe,Le,Ue,gn,_t,yt};
|
|
10
|
+
`)}var qt={anthropic:"https://api.anthropic.com/v1",openai:C,google:"https://generativelanguage.googleapis.com/v1beta",mistral:"https://api.mistral.ai/v1"},ot="api.anthropic.com";function he(e){return e.trim().replace(/\/+$/,"")}function ge(e){if(e.customEndpoint)return"openai-compatible";let t=v(e.providerNpm||"openai");if(t==="openai"&&e.providerApi&&he(e.providerApi)!==C)return"openai-compatible";return t}function Be(e){if(!e)return!1;try{return new URL(e).hostname===ot}catch{return!1}}function ht(e){let t=he(e);try{let{pathname:r}=new URL(t);return/\/v\d+$/.test(r)?t:`${t}/v1`}catch{return t}}var gt="anthropic-dangerous-direct-browser-access",nt={anthropic:["x-api-key","anthropic-version","anthropic-beta",gt],openai:["authorization"],google:["x-goog-api-key"],mistral:["authorization"],"openai-compatible":["authorization"]},at="server-side-fallback-2026-06-01";function it(e){return typeof Request<"u"&&e instanceof Request?e.url:String(e)}function st(e,t){let r=t["anthropic-beta"];if(r===void 0||typeof e!=="string"||!e.includes('"fallbacks"'))return;let n;try{n=JSON.parse(e)}catch{return}if(n?.fallbacks!=="default")return;let i=r.split(",").filter((l)=>l.trim()!==at);if(i.length>0)t["anthropic-beta"]=i.join(",");else delete t["anthropic-beta"]}async function ct(e){if(!e.ok||!(e.headers.get("content-type")??"").includes("json"))return e;let t,r;try{t=await e.clone().text(),r=L(JSON.parse(t))}catch{return e}if(r===null)return e;return new Response(t,{status:r,headers:e.headers})}function Ee(e,t={}){let r=nt[e],n=t.strictHeaders&&r?new Set(["content-type","accept",...r]):void 0;return(i,l)=>{let d=it(i),f=l?.headers??(typeof Request<"u"&&i instanceof Request?i.headers:void 0),u={};if(new Headers(f).forEach((p,c)=>{if(c==="user-agent")return;if(n&&!n.has(c))return;if(c===gt&&!Be(d))return;u[c]=p}),e==="anthropic")st(l?.body,u);return(t.fetch??globalThis.fetch)(i instanceof URL||typeof i==="string"?d:i,{...l,headers:u}).then(ct)}}function J(e){if(e.customEndpoint)return"openai";return v(e.providerNpm||"openai")}function ye(e,t={}){let r=pe(J(e)),n=Ee(ge(e),t);if(e.customEndpoint)return r({apiKey:e.apiKey||"",model:e.customModel||e.model||"",baseURL:e.customEndpoint,...e.headers&&{headers:e.headers},fetch:n});return r({apiKey:e.apiKey,model:e.model||"",...e.providerApi&&{baseURL:e.providerApi},...e.headers&&{headers:e.headers},fetch:n})}async function lt(e){switch(e){case"openai":(await (q("d3q1d6cz"),import("./openai-d3q1d6cz.js"))).register();return;case"anthropic":(await (q("ynz7717b"),import("./anthropic-ynz7717b.js"))).register();return;case"google":(await (q("k5kwa54v"),import("./google-k5kwa54v.js"))).register();return;case"mistral":(await (q("p2qcnn42"),import("./mistral-p2qcnn42.js"))).register();return;case"openai-compatible":(await (q("psnkrpxy"),import("./openai-compatible-psnkrpxy.js"))).register();return}}async function Qe(e,t={}){let r=J(e);if(!me(r))await lt(r);return ye(e,t)}function Le(e){if(e?.customEndpoint?.trim())return!!e.customModel?.trim();return!!e?.apiKey?.trim()}function k(e){return e.custom?e.customApiKey:e.apiKey}function N(e){return e.custom?!!e.customEndpoint.trim()&&!!e.customModel.trim():!!e.apiKey.trim()&&!!e.model}function V(e){return e.custom?!!e.customEndpoint.trim():!!e.apiKey.trim()}function be(e){let t=e.toLowerCase();return t==="localhost"||t.endsWith(".localhost")||t==="[::1]"||/^127(?:\.\d{1,3}){3}$/.test(t)}function _(e){let t;try{t=new URL(e.trim())}catch{return"invalid-endpoint"}if(t.username||t.password)return"invalid-endpoint";if(t.protocol==="https:")return null;if(t.protocol!=="http:")return"invalid-endpoint";return be(t.hostname)?null:"insecure-endpoint"}function Ue(e){if(_(e))return null;return e.trim().replace(/\/+$/,"")}var gn={ollama:{id:"ollama",name:"Ollama",endpoint:"http://localhost:11434/v1",model:"llama3.2"},lmstudio:{id:"lmstudio",name:"LM Studio",endpoint:"http://localhost:1234/v1",model:"local-model"},jan:{id:"jan",name:"Jan",endpoint:"http://localhost:1337/v1"}};function Y(e){try{return globalThis[e]??null}catch{return null}}function z(e,t){try{return Y(e)?.getItem(t)??null}catch{return null}}function X(e,t,r){try{Y(e)?.setItem(t,r)}catch{}}function I(e,t){try{Y(e)?.removeItem(t)}catch{}}var ut=["model","providerId","providerName","providerNpm","providerApi","customEndpoint","customModel","language"];function Ae(e){let t=z("localStorage",e);if(t===null)return null;let r={};try{let i=JSON.parse(t);if(i&&typeof i==="object"&&!Array.isArray(i))r=i}catch{}let n={...r,apiKey:"",model:""};for(let i of ut){let l=r[i];if(typeof l==="string"&&l)n[i]=l;else if(i!=="model")delete n[i]}return n.rememberKey=r.rememberKey===!0,n}var Q="kv",Z="crypto-key",P="api-key";function ee(){try{return!!globalThis.indexedDB&&!!globalThis.crypto?.subtle}catch{return!1}}function Se(e){let t="";for(let r of e)t+=String.fromCharCode(r);return btoa(t)}function ve(e){let t=atob(e),r=new Uint8Array(new ArrayBuffer(t.length));for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function _t({prefsKey:e,dbName:t,sessionKey:r=`${e}-key`}){let n=null;function i(){return new Promise((o,a)=>{let s=indexedDB.open(t,1);s.onupgradeneeded=()=>s.result.createObjectStore(Q),s.onsuccess=()=>o(s.result),s.onerror=()=>a(s.error)})}async function l(o,a){let s=await i();try{return await new Promise((g,A)=>{let x=s.transaction(Q,o),Pe=a(x.objectStore(Q));x.oncomplete=()=>g(Pe.result),x.onerror=()=>A(x.error),x.onabort=()=>A(x.error)})}finally{s.close()}}let d=(o)=>l("readonly",(a)=>a.get(o)),f=(o,a)=>l("readwrite",(s)=>s.put(a,o)),u=(o)=>l("readwrite",(a)=>a.delete(o));async function m(o){let a=await d(Z);if(a||!o)return a;let s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await f(Z,s),s}async function p(o){let a=await m(!0);if(!a)throw Error("No encryption key");let s=crypto.getRandomValues(new Uint8Array(new ArrayBuffer(12))),g=await crypto.subtle.encrypt({name:"AES-GCM",iv:s},a,new TextEncoder().encode(o));return{iv:s,ciphertext:g}}async function c(o){let a=o&&await m(!1);if(!o||!a)return"";let s=await crypto.subtle.decrypt({name:"AES-GCM",iv:o.iv},a,o.ciphertext);return new TextDecoder().decode(s)}function h(){let o=z("sessionStorage",r);if(!o)return;try{let{iv:a,ciphertext:s}=JSON.parse(o);return{iv:ve(a),ciphertext:ve(s).buffer}}catch{return}}async function b(o){if(!ee())return"";try{return await c(o?await d(P):h())}catch{return""}}async function w(o,a){if(I("sessionStorage",r),!ee())return;try{if(!o||!a)await u(P);if(!o)return;let s=await p(o);if(a)await f(P,s);else X("sessionStorage",r,JSON.stringify({iv:Se(s.iv),ciphertext:Se(new Uint8Array(s.ciphertext))}))}catch{}}async function E(){let o=Ae(e);if(!o)return null;if(n===null)n=await b(o.rememberKey===!0);return{...o,apiKey:n}}return{loadDraft:E,async load(){let o=await E();return Le(o)?o:null},async save(o,{rememberKey:a}){let{apiKey:s,...g}=o;X("localStorage",e,JSON.stringify({...g,rememberKey:a})),n=s,await w(s,a)},async clear(){if(n=null,I("localStorage",e),I("sessionStorage",r),!ee())return;try{await u(P),await u(Z)}catch{}}}}var xe=5000,dt=1e4;function _e(e){return e.trim().replace(/\/+$/,"")}function Te(e,t,r){let n=t.trim();if(!n)return{};if(e==="@ai-sdk/anthropic")return{"x-api-key":n,"anthropic-version":"2023-06-01",...Be(r)&&{"anthropic-dangerous-direct-browser-access":"true"}};if(e==="@ai-sdk/google")return{"x-goog-api-key":n};return{Authorization:`Bearer ${n}`}}function D(e,t){return e instanceof Error&&e.name===t}function mt(e){let t=e;if(Array.isArray(t?.data))return t.data.map((r)=>r?.id).filter((r)=>typeof r==="string");if(Array.isArray(t?.models))return t.models.map((r)=>r?.name).filter((r)=>typeof r==="string").map((r)=>r.replace(/^models\//,""));return[]}function te(e,t){return{ok:!1,reason:e===401||e===403?"auth":"http",status:e,...t?{message:t}:{}}}function pt(e){if(typeof AbortSignal.any==="function")return AbortSignal.any(e);let t=new AbortController;for(let r of e){if(r.aborted){t.abort(r.reason);break}r.addEventListener("abort",()=>t.abort(r.reason),{once:!0})}return t.signal}function Me(e,t){let r=t?AbortSignal.timeout(t):void 0;if(e&&r)return pt([e,r]);return e??r}async function Oe(e,t,r,n){let i=r.fetch??globalThis.fetch;try{let l=await i(e,{headers:t,signal:Me(r.signal,r.timeoutMs)});if(!l.ok)return te(l.status);let d=await l.json().catch(()=>null),f=L(d);if(f!==null){let{message:m}=De({statusCode:f,data:d},n.trim());return te(f,m||void 0)}let u=mt(d);return{ok:!0,modelCount:u.length,models:u}}catch(l){if(r.signal?.aborted)throw l;if(D(l,"TimeoutError")||D(l,"AbortError"))return{ok:!1,reason:"timeout"};return{ok:!1,reason:"cors",...l instanceof Error?{message:T(l.message,n.trim())}:{}}}}function Et(e,t="",r={}){let n=`${_e(e)}/models`;return Oe(n,Te(void 0,t,n),{timeoutMs:xe,...r},t)}function bt(e){let t=[];for(let r=e;r instanceof Error&&t.length<4;r=r.cause)t.push(r.message);return t.some((r)=>/failed to fetch|fetch failed|networkerror|load failed|cannot connect to api/i.test(r))}async function we(e,t){try{let[{generateText:r},n]=await Promise.all([(q("y0faj89r"),import("./index-y0faj89r.js")),Qe(e,t.fetch?{fetch:t.fetch}:{})]);return await r({model:n,prompt:"Reply with OK.",maxOutputTokens:16,maxRetries:0,abortSignal:Me(t.signal,t.timeoutMs)}),{ok:!0}}catch(r){if(t.signal?.aborted)throw r;if(D(r,"TimeoutError")||D(r,"AbortError"))return{ok:!1,reason:"timeout"};let n=T(r instanceof Error?r.message:String(r),e.apiKey?.trim()),i=r?.statusCode;if(typeof i==="number")return te(i,n);if(bt(r))return{ok:!1,reason:"cors",message:n};return{ok:!1,reason:"config",message:n}}}var At=new Set([404,405,501]);function St(e){if(e.ok)return!1;if(e.reason==="cors")return!0;return e.reason==="http"&&e.status!==void 0&&At.has(e.status)}async function vt(e,t){if(e.customEndpoint)return Et(e.customEndpoint,e.apiKey,{signal:t.signal,fetch:t.fetch,timeoutMs:t.timeoutMs??xe});let r=_e(e.providerApi??""),n=r&&e.providerNpm==="@ai-sdk/anthropic"?ht(r):r;if(!n)return null;let i=`${n}/models`;return Oe(i,Te(e.providerNpm,e.apiKey,i),{signal:t.signal,fetch:t.fetch,timeoutMs:t.timeoutMs??dt},e.apiKey)}async function Ce(e,t={}){if(e.customEndpoint){let n=_(e.customEndpoint);if(n==="insecure-endpoint")return{ok:!1,reason:"insecure",message:"Plain http is only allowed to this machine: use https"};if(n)return{ok:!1,reason:"config",message:"Invalid endpoint URL"}}if(t.mode==="generate")return we(e,t);let r=await vt(e,t);if(t.mode==="auto"&&(!r||St(r)))return we(e,t);return r??{ok:!1,reason:"config",message:"No API URL for this provider"}}var wt=[{code:"en",name:"English",label:"English"},{code:"fr",name:"French",label:"Français"},{code:"es",name:"Spanish",label:"Español"},{code:"de",name:"German",label:"Deutsch"},{code:"it",name:"Italian",label:"Italiano"},{code:"pt",name:"Portuguese",label:"Português"},{code:"nl",name:"Dutch",label:"Nederlands"},{code:"ru",name:"Russian",label:"Русский"},{code:"zh",name:"Chinese",label:"中文"},{code:"ja",name:"Japanese",label:"日本語"},{code:"ko",name:"Korean",label:"한국어"},{code:"ar",name:"Arabic",label:"العربية"},{code:"hi",name:"Hindi",label:"हिन्दी"},{code:"tr",name:"Turkish",label:"Türkçe"},{code:"pl",name:"Polish",label:"Polski"},{code:"sv",name:"Swedish",label:"Svenska"}];function ke(e){let t=e?.trim().toLowerCase();if(!t)return;let r=t.split(/[-_]/)[0];return wt.find((n)=>n.code===r||n.name.toLowerCase()===t||n.label.toLowerCase()===t)}function U(e){return ke(e)?.code??"en"}function Ne(){try{let e=globalThis.navigator?.languages??[globalThis.navigator?.language];for(let t of e){let r=ke(t);if(r)return r.code}}catch{}return"en"}function yt(e){let t=e.recommended??Re,r=e.catalog??e.catalogUrl;if(!r)throw Error("createLlmSettingsStore: `catalog` is required");let n=r,i={providerId:e.defaults?.providerId??t[0]??"openai",model:e.defaults?.model??"",rememberKey:e.defaults?.rememberKey??!1},l=()=>e.defaults?.language?U(e.defaults.language):Ne();function d(o){let a=!!o?.customEndpoint,s=o?.apiKey??"";return{custom:a,providerId:o?.providerId||i.providerId,model:o?.model||i.model,apiKey:a?"":s,customApiKey:a?s:"",customEndpoint:o?.customEndpoint??"",customModel:o?.customModel??"",rememberKey:o?.rememberKey??i.rememberKey,language:o?.language?U(o.language):l()}}function f(o){let a=o.catalog?.[o.draft.providerId]??null,s=ne(a,o.search),g=a?.defaultModel;return{...o,provider:a,providers:B(o.catalog,t),isRecommendedProvider:t.includes(o.draft.providerId),models:s,recommendedModel:g?s.find((A)=>A.id===g)??null:null,apiKey:k(o.draft),canSave:N(o.draft),canTest:V(o.draft)}}let u=f({catalog:null,catalogStatus:"idle",catalogError:null,saved:null,draft:d(null),search:"",testing:!1,testResult:null}),m=new Set,p=!1;function c(o){let a={...u,...o};if(!a.draft.model&&a.catalog){let s=K(a.catalog[a.draft.providerId]);if(s)a.draft={...a.draft,model:s}}u=f(a);for(let s of m)s(u)}function h(o){p=!0,c({draft:{...u.draft,...o},testResult:null})}function b(){if(u.catalogStatus==="loading"||u.catalogStatus==="ready")return;c({catalogStatus:"loading",catalogError:null}),(typeof n==="string"?M(n,e.fetch):n()).then((a)=>c({catalog:a,catalogStatus:"ready",catalogError:null}),(a)=>c({catalogStatus:"error",catalogError:a instanceof Error?a.message:"Model list unavailable"}))}function w(){let{draft:o,catalog:a,saved:s}=u,g=H(a,o.providerId);if(g)return g;if(s?.providerId===o.providerId)return{providerId:o.providerId,providerName:s.providerName??o.providerId,providerNpm:s.providerNpm??"",providerApi:s.providerApi??""};return G}function E(){let{draft:o}=u;return{apiKey:k(o),model:o.model,...w(),language:o.language,...o.custom?{customEndpoint:Ue(o.customEndpoint)??o.customEndpoint.trim(),customModel:o.customModel.trim()}:{}}}return{getState:()=>u,subscribe(o){return m.add(o),o(u),()=>{m.delete(o)}},async load(){let o=await(e.storage.loadDraft??e.storage.load)();if(p)c({saved:o});else c({saved:o,draft:d(o),search:"",testResult:null});return o},reset(o){p=!1,c({saved:o,draft:d(o),search:"",testResult:null})},open(){p=!1,c({draft:d(u.saved),search:"",testing:!1,testResult:null}),b()},retryCatalog:b,selectProvider(o){let a=K(u.catalog?.[o])??"";p=!0,c({draft:{...u.draft,providerId:o,model:a},search:"",testResult:null})},selectModel:(o)=>h({model:o}),setApiKey(o){h(u.draft.custom?{customApiKey:o}:{apiKey:o})},setSearch:(o)=>c({search:o}),toggleCustom(o){h({custom:o??!u.draft.custom})},applyPreset(o){h({customEndpoint:o.endpoint,...!u.draft.customModel.trim()&&o.model?{customModel:o.model}:{}})},setEndpoint:(o)=>h({customEndpoint:o}),setCustomModel:(o)=>h({customModel:o}),setRememberKey:(o)=>h({rememberKey:o}),setLanguage:(o)=>h({language:U(o)}),settings:E,async test(o={}){c({testing:!0,testResult:null});try{let a=await Ce(E(),{mode:e.testMode??"models",signal:o.signal,fetch:e.fetch});return c({testing:!1,testResult:a}),a}catch(a){throw c({testing:!1}),a}},async save(o){let{draft:a}=u;if(!N(a))return{ok:!1,reason:"incomplete"};let s=a.custom?_(a.customEndpoint):null;if(s)return{ok:!1,reason:s};let g={...E(),...o};await e.storage.save(g,{rememberKey:a.rememberKey});let A={...g,rememberKey:a.rememberKey};return c({saved:A}),{ok:!0,settings:A}},async clear(){await e.storage.clear(),c({saved:null,draft:{...u.draft,custom:!1,apiKey:"",customApiKey:"",customEndpoint:"",customModel:"",language:l()},testResult:null})}}}export{Re,ft,De,oe,Ie,qt,Be,ht,gt,Qe,Le,Ue,gn,_t,yt};
|