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.
Files changed (29) hide show
  1. package/README.md +17 -17
  2. package/dist/cdn/{anthropic-dc7h9prc.js → anthropic-ynz7717b.js} +2 -2
  3. package/dist/cdn/{embed-acjpjh6t.js → embed-0m8xctqy.js} +1 -1
  4. package/dist/cdn/{embed-ssqsb38w.js → embed-7pk91zq8.js} +2 -2
  5. package/dist/cdn/embed-dbkjhg16.js +83 -0
  6. package/dist/cdn/{embed-z32y952f.js → embed-n5nzhrf2.js} +3 -3
  7. package/dist/cdn/{embed-6gef7ym5.js → embed-rp9gb1qq.js} +2 -2
  8. package/dist/cdn/{embed-fd96s8qk.js → embed-xtkxyrpe.js} +9 -9
  9. package/dist/cdn/{google-yywkqdph.js → google-k5kwa54v.js} +8 -8
  10. package/dist/cdn/{index-jt6n0d28.js → index-db4ne93m.js} +1 -1
  11. package/dist/cdn/{index-nesgnf2n.js → index-qc8kgsdt.js} +1 -1
  12. package/dist/cdn/{index-bq0x71h1.js → index-t0qn2m4r.js} +1 -1
  13. package/dist/cdn/index-y0faj89r.js +1 -0
  14. package/dist/cdn/mistral-p2qcnn42.js +3 -0
  15. package/dist/cdn/{murmur-j1ky5vmr.js → murmur-d6t6cjc7.js} +2 -2
  16. package/dist/cdn/murmur.js +6 -6
  17. package/dist/cdn/{openai-compatible-zhaj1r43.js → openai-compatible-psnkrpxy.js} +6 -6
  18. package/dist/cdn/{openai-g1685z9v.js → openai-d3q1d6cz.js} +10 -10
  19. package/dist/cdn/retriever-6qvn2maq.js +1 -0
  20. package/dist/cdn/{transformers.web-3kmbvcbt.js → transformers.web-xn16v7pz.js} +5 -5
  21. package/dist/lib/chunks/{index-92w507gk.js → index-y3v46yjp.js} +44 -34
  22. package/dist/lib/embed.js +4 -4
  23. package/dist/lib/widget/index.js +2 -2
  24. package/dist/types/widget/session.d.ts +16 -4
  25. package/package.json +1 -1
  26. package/dist/cdn/embed-jdraznwg.js +0 -83
  27. package/dist/cdn/index-wgzgvzaf.js +0 -1
  28. package/dist/cdn/mistral-0mg4kk7s.js +0 -3
  29. package/dist/cdn/retriever-dqxzjaqk.js +0 -1
@@ -1 +1 @@
1
- import{F}from"./embed-z32y952f.js";var k={id:"onnx-community/LFM3-1.7B-ONNX",dtype:"q4f16",name:"LFM3 1.7B",sizeMB:1090};async function L(){let e=globalThis.navigator?.gpu;if(!e)return!1;try{return!!await e.requestAdapter()}catch{return!1}}function M(e){return e.flatMap((t)=>{if(t.role==="system")return[{role:"system",content:t.content}];if(t.role==="tool")return[];let o=t.content.map((n)=>n.type==="text"?n.text:"").join("").trim();return o?[{role:t.role,content:o}]:[]})}var d=new Map,f=new Map;function x(e=k,t){let o=`${e.id}@${e.dtype}`,n=f.get(o)??new Set;if(f.set(o,n),t)n.add(t);let a=d.get(o);if(!a)a=(async()=>{if(!await L())throw new b("webgpu","This browser has no WebGPU.");let{pipeline:r}=await (F("3kmbvcbt"),import("./transformers.web-3kmbvcbt.js"));return await r("text-generation",e.id,{dtype:e.dtype,device:"webgpu",progress_callback:(i)=>{if(i.status!=="progress_total")return;let p={loaded:i.loaded??0,total:i.total??0,progress:Math.min(1,(i.progress??0)/100)};for(let u of n)u(p)}})})(),a.catch(()=>d.delete(o)),d.set(o,a);return a}class b extends Error{code;constructor(e,t){super(t);this.code=e;this.name="LocalModelError"}}var w=(e,t)=>({inputTokens:{total:e,noCache:e,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:t,text:t,reasoning:void 0}});function _(e={}){let t=e.spec??k;async function o(n,a){let r=await x(t,e.onProgress),{TextStreamer:s,InterruptableStoppingCriteria:i,StoppingCriteriaList:p}=await (F("3kmbvcbt"),import("./transformers.web-3kmbvcbt.js")),u=new i,c=new p;c.push(u);let g=()=>u.interrupt();n.abortSignal?.addEventListener("abort",g,{once:!0});let l=0,y=new s(r.tokenizer,{skip_prompt:!0,skip_special_tokens:!0,decode_kwargs:{clean_up_tokenization_spaces:!1},callback_function:(m)=>{if(m)a(m)},token_callback_function:()=>{l++}});try{await r(M(n.prompt),{max_new_tokens:n.maxOutputTokens??e.maxNewTokens??512,do_sample:!0,temperature:n.temperature??0.1,top_k:50,repetition_penalty:1.1,streamer:y,stopping_criteria:c,tokenizer_encode_kwargs:{enable_thinking:!1}})}finally{n.abortSignal?.removeEventListener("abort",g)}return{tokens:l,interrupted:u.interrupted}}return{specificationVersion:"v4",provider:"murmur-local",modelId:t.id,supportedUrls:{},async doGenerate(n){let a="",{tokens:r,interrupted:s}=await o(n,(i)=>{a+=i});return{content:[{type:"text",text:a}],finishReason:{unified:s?"other":"stop",raw:void 0},usage:w(0,r),warnings:[]}},async doStream(n){return{stream:new ReadableStream({start(r){r.enqueue({type:"stream-start",warnings:[]}),r.enqueue({type:"text-start",id:"0"}),o(n,(s)=>r.enqueue({type:"text-delta",id:"0",delta:s})).then(({tokens:s,interrupted:i})=>{r.enqueue({type:"text-end",id:"0"}),r.enqueue({type:"finish",finishReason:{unified:i?"other":"stop",raw:void 0},usage:w(0,s)}),r.close()},(s)=>{r.enqueue({type:"error",error:s}),r.close()})}})}}}}export{k as DEFAULT_LOCAL_MODEL,L as hasWebGPU,_ as localModel};
1
+ import{q}from"./embed-n5nzhrf2.js";var k={id:"onnx-community/LFM3-1.7B-ONNX",dtype:"q4f16",name:"LFM3 1.7B",sizeMB:1090};async function L(){let e=globalThis.navigator?.gpu;if(!e)return!1;try{return!!await e.requestAdapter()}catch{return!1}}function M(e){return e.flatMap((t)=>{if(t.role==="system")return[{role:"system",content:t.content}];if(t.role==="tool")return[];let o=t.content.map((n)=>n.type==="text"?n.text:"").join("").trim();return o?[{role:t.role,content:o}]:[]})}var d=new Map,f=new Map;function x(e=k,t){let o=`${e.id}@${e.dtype}`,n=f.get(o)??new Set;if(f.set(o,n),t)n.add(t);let a=d.get(o);if(!a)a=(async()=>{if(!await L())throw new b("webgpu","This browser has no WebGPU.");let{pipeline:r}=await (q("xn16v7pz"),import("./transformers.web-xn16v7pz.js"));return await r("text-generation",e.id,{dtype:e.dtype,device:"webgpu",progress_callback:(i)=>{if(i.status!=="progress_total")return;let p={loaded:i.loaded??0,total:i.total??0,progress:Math.min(1,(i.progress??0)/100)};for(let u of n)u(p)}})})(),a.catch(()=>d.delete(o)),d.set(o,a);return a}class b extends Error{code;constructor(e,t){super(t);this.code=e;this.name="LocalModelError"}}var w=(e,t)=>({inputTokens:{total:e,noCache:e,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:t,text:t,reasoning:void 0}});function _(e={}){let t=e.spec??k;async function o(n,a){let r=await x(t,e.onProgress),{TextStreamer:s,InterruptableStoppingCriteria:i,StoppingCriteriaList:p}=await (q("xn16v7pz"),import("./transformers.web-xn16v7pz.js")),u=new i,c=new p;c.push(u);let g=()=>u.interrupt();n.abortSignal?.addEventListener("abort",g,{once:!0});let l=0,y=new s(r.tokenizer,{skip_prompt:!0,skip_special_tokens:!0,decode_kwargs:{clean_up_tokenization_spaces:!1},callback_function:(m)=>{if(m)a(m)},token_callback_function:()=>{l++}});try{await r(M(n.prompt),{max_new_tokens:n.maxOutputTokens??e.maxNewTokens??512,do_sample:!0,temperature:n.temperature??0.1,top_k:50,repetition_penalty:1.1,streamer:y,stopping_criteria:c,tokenizer_encode_kwargs:{enable_thinking:!1}})}finally{n.abortSignal?.removeEventListener("abort",g)}return{tokens:l,interrupted:u.interrupted}}return{specificationVersion:"v4",provider:"murmur-local",modelId:t.id,supportedUrls:{},async doGenerate(n){let a="",{tokens:r,interrupted:s}=await o(n,(i)=>{a+=i});return{content:[{type:"text",text:a}],finishReason:{unified:s?"other":"stop",raw:void 0},usage:w(0,r),warnings:[]}},async doStream(n){return{stream:new ReadableStream({start(r){r.enqueue({type:"stream-start",warnings:[]}),r.enqueue({type:"text-start",id:"0"}),o(n,(s)=>r.enqueue({type:"text-delta",id:"0",delta:s})).then(({tokens:s,interrupted:i})=>{r.enqueue({type:"text-end",id:"0"}),r.enqueue({type:"finish",finishReason:{unified:i?"other":"stop",raw:void 0},usage:w(0,s)}),r.close()},(s)=>{r.enqueue({type:"error",error:s}),r.close()})}})}}}}export{k as DEFAULT_LOCAL_MODEL,L as hasWebGPU,_ as localModel};
@@ -1 +1 @@
1
- import{Re,ft,De,Qe,Le,Ue,gn,_t,yt}from"./embed-6gef7ym5.js";export{Re as DEFAULT_RECOMMENDED,gn as ENDPOINT_PRESETS,yt as createLlmSettingsStore,De as describeError,Le as isConfigured,ft as liveCatalog,Qe as loadModel,_t as secureStorage,Ue as validateEndpoint};
1
+ import{Re,ft,De,Qe,Le,Ue,gn,_t,yt}from"./embed-rp9gb1qq.js";export{Re as DEFAULT_RECOMMENDED,gn as ENDPOINT_PRESETS,yt as createLlmSettingsStore,De as describeError,Le as isConfigured,ft as liveCatalog,Qe as loadModel,_t as secureStorage,Ue as validateEndpoint};
@@ -1 +1 @@
1
- import{Re,ft,De,Qe,Le,Ue,_t,yt}from"./embed-6gef7ym5.js";var i="https://maxgfr.github.io/murmur/cdn/models.json";function l(e){let r=e.endpoint?Ue(e.endpoint):null;if(!r)return null;let o=e.model||"default",t={apiKey:"",model:o,customEndpoint:r,customModel:o};if(e.headers)t.headers=e.headers;return t}function d(e,r={}){let o=r.storageKey??"murmur",t={};if(e.provider)t.providerId=e.provider;if(e.model)t.model=e.model;return yt({catalog:ft({fallbackUrl:r.catalogUrl??i}),storage:_t({prefsKey:`${o}-llm`,dbName:`${o}-secrets`}),recommended:e.provider?[e.provider,...Re.filter((n)=>n!==e.provider)]:Re,defaults:t})}async function m(e,r){let o=l(e);if(o)return o;let t=r?await r.load():null;return t&&Le(t)?t:null}export{De as describeError,Qe as loadModel,m as resolveSettings,d as visitorStore};
1
+ import{Re,ft,De,Qe,Le,Ue,_t,yt}from"./embed-rp9gb1qq.js";var i="https://maxgfr.github.io/murmur/cdn/models.json";function l(e){let r=e.endpoint?Ue(e.endpoint):null;if(!r)return null;let o=e.model||"default",t={apiKey:"",model:o,customEndpoint:r,customModel:o};if(e.headers)t.headers=e.headers;return t}function d(e,r={}){let o=r.storageKey??"murmur",t={};if(e.provider)t.providerId=e.provider;if(e.model)t.model=e.model;return yt({catalog:ft({fallbackUrl:r.catalogUrl??i}),storage:_t({prefsKey:`${o}-llm`,dbName:`${o}-secrets`}),recommended:e.provider?[e.provider,...Re.filter((n)=>n!==e.provider)]:Re,defaults:t})}async function m(e,r){let o=l(e);if(o)return o;let t=r?await r.load():null;return t&&Le(t)?t:null}export{De as describeError,Le as isConfigured,Qe as loadModel,m as resolveSettings,d as visitorStore};
@@ -0,0 +1 @@
1
+ import{xn,At}from"./embed-xtkxyrpe.js";export{xn as generateText,At as streamText};
@@ -0,0 +1,3 @@
1
+ import{oe,Ie}from"./embed-rp9gb1qq.js";import{b,Ge,me,u,e,r,c,ie,o,t,l,f,y,i,n,G,k,T,d,N,M,ee,te,le,F,z,C,Nt,he,W,Se,lt,a,s,h,g,ne,ve,S,O,I,D,p,E,Ce,Y}from"./embed-dbkjhg16.js";var xe=t({messages:o(G()).nullish(),cached_tokens:r().nullish(),audio_tokens:r().nullish()}).catchall(G()),Ue=t({reasoning_tokens:r().nullish()}).catchall(G()),_e=t({prompt_tokens:r(),completion_tokens:r(),total_tokens:r(),prompt_audio_seconds:r().nullish(),request_count:r().nullish(),service_tier:e().nullish(),num_cached_tokens:r().nullish(),prompt_tokens_details:xe.nullish(),prompt_token_details:xe.nullish(),completion_tokens_details:Ue.nullish()}).catchall(G());function pe(w){if(w==null)return te();let{prompt_tokens:m,completion_tokens:_}=w,H=w.num_cached_tokens??w.prompt_tokens_details?.cached_tokens??w.prompt_token_details?.cached_tokens??0;return{inputTokens:{total:m,noCache:m-H,cacheRead:H||void 0,cacheWrite:void 0},outputTokens:{total:_,text:_,reasoning:void 0},raw:w}}function ke({part:w}){if(w.data.type==="url")return w.data.url.toString();if(w.data.type==="data")return`data:${O({part:w})};base64,${M(w.data.data)}`;throw new u({functionality:`file part data type ${w.data.type}`})}function be(w){let m=[];for(let _=0;_<w.length;_++){let{role:H,content:q}=w[_],v=_===w.length-1;switch(H){case"system":m.push({role:"system",content:q});break;case"user":m.push({role:"user",content:q.map((R)=>{switch(R.type){case"text":return{type:"text",text:R.text};case"file":switch(R.data.type){case"reference":throw new u({functionality:"file parts with provider references"});case"text":throw new u({functionality:"text file parts"});case"url":case"data":if(z(R.mediaType)==="image")return{type:"image_url",image_url:ke({part:R})};else{if(R.data.type==="data"){if(O({part:R})!=="application/pdf")throw new u({functionality:"Only images and PDF file parts are supported"})}else if(R.mediaType!=="application/pdf")throw new u({functionality:"Only images and PDF file parts are supported"});return{type:"document_url",document_url:ke({part:R})}}}}})});break;case"assistant":{let R="",A=!1,x=[],j=[];for(let L of q)switch(L.type){case"text":R+=L.text,x.push({type:"text",text:L.text});break;case"tool-call":j.push({id:L.toolCallId,type:"function",function:{name:L.toolName,arguments:JSON.stringify(L.input)}});break;case"reasoning":A=!0,x.push({type:"thinking",thinking:[{type:"text",text:L.text}],closed:!0});break;default:throw Error(`Unsupported content type in assistant message: ${L.type}`)}m.push({role:"assistant",content:A?x:R,prefix:v?!0:void 0,tool_calls:j.length>0?j:void 0});break}case"tool":for(let R of q){if(R.type==="tool-approval-response")continue;let A=R.output,x;switch(A.type){case"text":case"error-text":x=A.value;break;case"execution-denied":x=A.reason??"Tool call execution denied.";break;case"content":case"json":case"error-json":x=JSON.stringify(A.value)}m.push({role:"tool",name:R.toolName,tool_call_id:R.toolCallId,content:x})}break;default:throw Error(`Unsupported role: ${H}`)}}return m}function je(w){switch(w){case"stop":return"stop";case"length":case"model_length":return"length";case"tool_calls":return"tool-calls";case"error":return"error";default:return"other"}}var Ee=()=>t({safePrompt:c().optional(),documentImageLimit:r().optional(),documentPageLimit:r().optional(),structuredOutputs:c().optional(),strictJsonSchema:c().optional(),parallelToolCalls:c().optional(),promptCacheKey:e().optional(),reasoningEffort:i(["high","none","low","max"]).optional()}),$e=a(()=>s(Ee())),De=a(()=>s(t({object:n("error"),message:e(),type:e(),param:e().nullable(),code:e().nullable()}))),ce=I({errorSchema:De,errorToMessage:(w)=>w.message});function Pe({tools:w,toolChoice:m}){w=w?.length?w:void 0;let _=[];if(w==null)return{tools:void 0,toolChoice:void 0,toolWarnings:_};let H=[];for(let v of w)if(v.type==="provider")_.push({type:"unsupported",feature:`provider-defined tool ${v.id}`});else H.push({type:"function",function:{name:v.name,description:v.description,parameters:v.inputSchema,...v.strict!=null?{strict:v.strict}:{}}});if(m==null)return{tools:H,toolChoice:void 0,toolWarnings:_};let q=m.type;switch(q){case"auto":case"none":return{tools:H,toolChoice:q,toolWarnings:_};case"required":return{tools:H,toolChoice:"any",toolWarnings:_};case"tool":return{tools:H.filter((v)=>v.function.name===m.toolName),toolChoice:"any",toolWarnings:_};default:throw new u({functionality:`tool choice type: ${q}`})}}var Ve=new Set(["codestral-2508","codestral-latest","ministral-14b-2512","ministral-14b-latest","ministral-3b-2512","ministral-3b-latest","ministral-8b-2512","ministral-8b-latest","mistral-code-fim-latest","mistral-code-latest","mistral-large-latest","mistral-large-2512","voxtral-small-2507","voxtral-small-latest"]),Je=new Set(["zai-glm-5","zai-glm-5-3","zai-glm-5-3-flash","zai-glm-latest"]),ze=class w{static[k](m){return E({modelId:m.modelId,config:m.config})}static[T](m){return new w(m.modelId,m.config)}constructor(m,_){this.specificationVersion="v4",this.supportedUrls={"application/pdf":[/^https:\/\/.*$/]},this.modelId=m,this.config=_,this.generateId=_.generateId??C}get provider(){return this.config.provider}async getArgs({prompt:m,maxOutputTokens:_,temperature:H,topP:q,topK:v,frequencyPenalty:R,presencePenalty:A,reasoning:x,stopSequences:j,responseFormat:L,seed:U,providerOptions:X,tools:se,toolChoice:Q}){let Z=[],V=await h({provider:"mistral",providerOptions:X,schema:$e})??{};if(v!=null)Z.push({type:"unsupported",feature:"topK"});let re=!Ve.has(this.modelId),K;if(re){let de=Je.has(this.modelId);if(V.reasoningEffort==null&&x==="none"&&de)Z.push({type:"compatibility",feature:"reasoning",details:'reasoning "none" is not directly supported by this model. mapped to effort "low".'});K=V.reasoningEffort??(W(x)?x==="none"?de?"low":"none":Se({reasoning:x,effortMap:de?{minimal:"low",low:"low",medium:"high",high:"high",xhigh:"max",max:"max"}:{minimal:"high",low:"high",medium:"high",high:"high",xhigh:"high",max:"high"},warnings:Z}):void 0)}else if(W(x))Z.push({type:"unsupported",feature:"reasoning",details:"This model does not support reasoning configuration."});let J=V.structuredOutputs??!0,P=V.strictJsonSchema??!1;if(L?.type==="json"&&(!J||L.schema==null))m=Nt({messages:m,schema:L.schema});let B={model:this.modelId,safe_prompt:V.safePrompt,max_tokens:_,temperature:H,top_p:q,...R!=null?{frequency_penalty:R}:{},...A!=null?{presence_penalty:A}:{},stop:j,random_seed:U,reasoning_effort:K,response_format:L?.type==="json"?J&&L?.schema!=null?{type:"json_schema",json_schema:{schema:L.schema,strict:P,name:L.name??"response",description:L.description}}:{type:"json_object"}:void 0,document_image_limit:V.documentImageLimit,document_page_limit:V.documentPageLimit,...V.promptCacheKey!==void 0?{prompt_cache_key:V.promptCacheKey}:{},messages:be(m)},{tools:ae,toolChoice:fe,toolWarnings:ye}=Pe({tools:se,toolChoice:Q});return{args:{...B,tools:ae,tool_choice:fe,...ae!=null&&V.parallelToolCalls!==void 0?{parallel_tool_calls:V.parallelToolCalls}:{}},warnings:[...Z,...ye]}}async doGenerate(m){let{args:_,warnings:H}=await this.getArgs(m),{responseHeaders:q,value:v,rawValue:R}=await g({url:`${this.config.baseURL}/chat/completions`,headers:d(this.config.headers?.(),m.headers),body:_,failedResponseHandler:ce,successfulResponseHandler:p(Ke),abortSignal:m.abortSignal,fetch:this.config.fetch}),A=v.choices[0],x=[];if(A.message.content!=null&&Array.isArray(A.message.content)){for(let j of A.message.content)if(j.type==="thinking"){let L=Te(j.thinking);if(L.length>0)x.push({type:"reasoning",text:L})}else if(j.type==="text"){if(j.text.length>0)x.push({type:"text",text:j.text})}}else{let j=Me(A.message.content);if(j!=null&&j.length>0)x.push({type:"text",text:j})}if(A.message.tool_calls!=null)for(let j of A.message.tool_calls)x.push({type:"tool-call",toolCallId:j.id,toolName:j.function.name,input:j.function.arguments});return{content:x,finishReason:{unified:je(A.finish_reason),raw:A.finish_reason??void 0},usage:pe(v.usage),request:{body:_},response:{...ee(v),headers:q,body:R},warnings:H}}async doStream(m){let{args:_,warnings:H}=await this.getArgs(m),q={..._,stream:!0},{responseHeaders:v,value:R}=await g({url:`${this.config.baseURL}/chat/completions`,headers:d(this.config.headers?.(),m.headers),body:q,failedResponseHandler:ce,successfulResponseHandler:D(Be),abortSignal:m.abortSignal,fetch:this.config.fetch}),A={unified:"interrupted",raw:void 0},x=void 0,j=!0,L=!1,U=null,X,se=this.generateId;return{stream:R.pipeThrough(new TransformStream({start(Q){X=new Ce(Q,{generateId:se}),Q.enqueue({type:"stream-start",warnings:H})},transform(Q,Z){if(m.includeRawChunks)Z.enqueue({type:"raw",rawValue:Q.rawValue});if(!Q.success){A={unified:"error",raw:void 0},Z.enqueue({type:"error",error:Q.error});return}let V=Q.value;if(j)j=!1,Z.enqueue({type:"response-metadata",...ee(V)});if(V.usage!=null)x=V.usage;let re=V.choices[0],K=re.delta,J=Me(K.content);if(K.content!=null&&Array.isArray(K.content)){for(let P of K.content)if(P.type==="thinking"){let B=Te(P.thinking);if(B.length>0){if(U==null){if(L)Z.enqueue({type:"text-end",id:"0"}),L=!1;U=se(),Z.enqueue({type:"reasoning-start",id:U})}Z.enqueue({type:"reasoning-delta",id:U,delta:B})}}}if(J!=null&&J.length>0){if(!L){if(U!=null)Z.enqueue({type:"reasoning-end",id:U}),U=null;Z.enqueue({type:"text-start",id:"0"}),L=!0}Z.enqueue({type:"text-delta",id:"0",delta:J})}if(K?.tool_calls!=null)for(let P of K.tool_calls)X.processDelta(P);if(re.finish_reason!=null)A={unified:je(re.finish_reason),raw:re.finish_reason}},flush(Q){if(U!=null)Q.enqueue({type:"reasoning-end",id:U});if(L)Q.enqueue({type:"text-end",id:"0"});X.flush(),Q.enqueue({type:"finish",finishReason:A,usage:pe(x)})}})),request:{body:q},response:{headers:v}}}};function Te(w){return w.filter((m)=>m.type==="text").map((m)=>m.text).join("")}function Me(w){if(typeof w==="string")return w;if(w==null)return;let m=[];for(let _ of w){let{type:H}=_;switch(H){case"text":m.push(_.text);break;case"thinking":case"image_url":case"reference":break;default:throw Error(`Unsupported type: ${H}`)}}return m.length?m.join(""):void 0}var qe=()=>l([e(),o(f("type",[t({type:n("text"),text:e()}),t({type:n("image_url"),image_url:l([e(),t({url:e(),detail:e().nullable()})])}),t({type:n("reference"),reference_ids:o(l([e(),r()]))}),t({type:n("thinking"),thinking:o(t({type:n("text"),text:e()}))})]))]).nullish(),Ke=a(()=>s(t({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({message:t({role:n("assistant"),content:qe(),tool_calls:o(t({id:e(),function:t({name:e(),arguments:e()})})).nullish()}),index:r(),finish_reason:e().nullish()})),object:n("chat.completion"),usage:_e}))),Be=a(()=>s(t({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({delta:t({role:i(["assistant"]).optional(),content:qe(),tool_calls:o(t({index:r().nullish(),id:e().nullish(),function:t({name:e().nullish(),arguments:e().nullish()})})).nullish()}),finish_reason:e().nullish(),index:r()})),usage:_e.nullish()})));function We(w,m){let _=[],H=[],q=new Set,v=(R)=>{if(q.has(R.toolCallId)){let x=null;if(R.output.type==="json"){let j=R.output.value,L=j!=null&&typeof j==="object"&&"info"in j?j.info:void 0;if(L!=null&&typeof L==="object"&&!Array.isArray(L))x="result"in L?L.result??L:L}_.push({type:"function.result",tool_call_id:R.toolCallId,result:typeof x==="string"?x:JSON.stringify(x)});return}let A=be([{role:"tool",content:[R]}])[0];_.push({type:"function.result",tool_call_id:R.toolCallId,result:A.content})};for(let R of w)switch(R.role){case"system":H.push(R.content);break;case"user":{let A=be([R])[0];if(A.role==="user")_.push({type:"message.input",role:"user",content:A.content});break}case"assistant":{let A=[],x=()=>{if(A.length>0)_.push({type:"message.input",role:"assistant",content:A}),A=[]};for(let j of R.content)switch(j.type){case"text":A.push({type:"text",text:j.text});break;case"reasoning":A.push({type:"thinking",thinking:[{type:"text",text:j.text}],closed:!0});break;case"tool-call":if(x(),j.providerExecuted){let L=j.providerOptions?.mistral?.function??j.providerOptions?.mistral?.name,U=j.input;_.push({type:"function.call",tool_call_id:j.toolCallId,name:typeof L==="string"?L:m.toProviderToolName(j.toolName),arguments:typeof U?.arguments==="string"?U.arguments:JSON.stringify(j.input)}),q.add(j.toolCallId)}else _.push({type:"function.call",tool_call_id:j.toolCallId,name:j.toolName,arguments:JSON.stringify(j.input)});break;case"tool-result":x(),v(j);break;default:throw new u({functionality:`assistant content type: ${j.type}`})}x();break}case"tool":for(let A of R.content){if(A.type==="tool-approval-response")continue;v(A)}}return{inputs:_,instructions:H.length>0?H.join(`
2
+
3
+ `):void 0}}var Fe=a(()=>s(Ee())),ge={"mistral.web_search":"web_search","mistral.web_search_premium":"web_search_premium"};function Ze({tools:w,toolChoice:m}){w=w?.length?w:void 0;let _=[];if(w==null)return{tools:void 0,toolChoice:void 0,toolWarnings:_};let H=[];for(let v of w)if(v.type==="provider"){if(v.id==="mistral.web_search"||v.id==="mistral.web_search_premium"){H.push({type:ge[v.id]});continue}_.push({type:"unsupported",feature:`provider-defined tool ${v.id}`})}else H.push({type:"function",function:{name:v.name,description:v.description,parameters:v.inputSchema,...v.strict!=null?{strict:v.strict}:{}}});if(m==null)return{tools:H,toolChoice:void 0,toolWarnings:_};let q=m.type;switch(q){case"auto":case"none":return{tools:H,toolChoice:q,toolWarnings:_};case"required":return{tools:H,toolChoice:"any",toolWarnings:_};case"tool":{let v=le({tools:w,providerToolNames:ge}).toProviderToolName(m.toolName);return{tools:H.filter((R)=>R.type==="function"?R.function.name===v:R.type===v),toolChoice:"any",toolWarnings:_}}default:throw new u({functionality:`tool choice type: ${q}`})}}var Ye=new Set(["glm-5-2","labs-leanstral-1-5","labs-leanstral-1-5-1","magistral-medium-latest","magistral-small-latest","mistral-large-4","mistral-large-4-0","mistral-medium","mistral-medium-2604","mistral-medium-3","mistral-medium-3-5","mistral-medium-3.5","mistral-medium-latest","mistral-small-2603","mistral-small-latest","mistral-vibe-cli-fast","mistral-vibe-cli-latest","mistral-vibe-cli-with-tools","zai-glm-5-2"]),Qe=class w{static[k](m){return E({modelId:m.modelId,config:m.config})}static[T](m){return new w(m.modelId,m.config)}constructor(m,_){this.specificationVersion="v4",this.supportedUrls={"application/pdf":[/^https:\/\/.*$/]},this.modelId=m,this.config=_,this.generateId=_.generateId??C}get provider(){return this.config.provider}async getArgs({prompt:m,maxOutputTokens:_,temperature:H,topP:q,topK:v,frequencyPenalty:R,presencePenalty:A,reasoning:x,stopSequences:j,responseFormat:L,seed:U,providerOptions:X,tools:se,toolChoice:Q}){let Z=[],V=await h({provider:"mistral",providerOptions:X,schema:Fe})??{};if(v!=null)Z.push({type:"unsupported",feature:"topK"});let re=Ye.has(this.modelId),K;if(re)K=V.reasoningEffort??(W(x)?x==="none"?"none":Se({reasoning:x,effortMap:{minimal:"high",low:"high",medium:"high",high:"high",xhigh:"high",max:"high"},warnings:Z}):void 0);else if(W(x))Z.push({type:"unsupported",feature:"reasoning",details:"This model does not support reasoning configuration."});let J=V.structuredOutputs??!0,P=V.strictJsonSchema??!1;if(L?.type==="json"&&(!J||L.schema==null))m=Nt({messages:m,schema:L.schema});let B={max_tokens:_,temperature:H,top_p:q,...R!=null?{frequency_penalty:R}:{},...A!=null?{presence_penalty:A}:{},stop:j,random_seed:U,reasoning_effort:K,response_format:L?.type==="json"?J&&L?.schema!=null?{type:"json_schema",json_schema:{schema:L.schema,strict:P,name:L.name??"response",description:L.description}}:{type:"json_object"}:void 0},{tools:ae,toolChoice:fe,toolWarnings:ye}=Ze({tools:se,toolChoice:Q});for(let[de,He]of Object.entries({safePrompt:V.safePrompt,documentImageLimit:V.documentImageLimit,documentPageLimit:V.documentPageLimit,promptCacheKey:V.promptCacheKey,parallelToolCalls:V.parallelToolCalls}))if(He!=null)Z.push({type:"unsupported",feature:de,details:"Not supported by the Mistral Conversations API."});return{args:{model:this.modelId,store:!1,...We(m,le({tools:se,providerToolNames:ge})),tools:ae,completion_args:{...B,tool_choice:fe}},warnings:[...Z,...ye]}}async doGenerate(m){let{args:_,warnings:H}=await this.getArgs(m),{value:q,rawValue:v,responseHeaders:R}=await g({url:`${this.config.baseURL}/conversations`,headers:d(this.config.headers?.(),m.headers),body:_,failedResponseHandler:ce,successfulResponseHandler:p(nt),abortSignal:m.abortSignal,fetch:this.config.fetch}),A=Re({tools:m.tools,generateId:this.generateId}),x=[],j=!1,L;for(let U of q.outputs)switch(U.type){case"tool.execution":x.push(...A.convertTool(U));break;case"function.call":j=!0,x.push({type:"tool-call",toolCallId:U.tool_call_id,toolName:U.name,input:typeof U.arguments==="string"?U.arguments:JSON.stringify(U.arguments)});break;case"message.output":L=U.model??L;for(let X of typeof U.content==="string"?[{type:"text",text:U.content}]:U.content)x.push(...A.convertChunk(X))}return{content:x,finishReason:{unified:j?"tool-calls":"stop",raw:void 0},usage:pe(q.usage),request:{body:_},response:{id:q.conversation_id,modelId:L,headers:R,body:v},warnings:H}}async doStream(m){let{args:_,warnings:H}=await this.getArgs(m),q={..._,stream:!0},{value:v,responseHeaders:R}=await g({url:`${this.config.baseURL}/conversations`,headers:d(this.config.headers?.(),m.headers),body:q,failedResponseHandler:ce,successfulResponseHandler:D(st),abortSignal:m.abortSignal,fetch:this.config.fetch}),A=Re({tools:m.tools,generateId:this.generateId}),x=new Map,j,L,U,X=!1,se=!1,Q=!1,Z=!1,V=(K)=>{if(L!=null)K.enqueue({type:L.type==="text"?"text-end":"reasoning-end",id:L.id}),L=void 0},re=this.generateId;return{stream:v.pipeThrough(new TransformStream({start(K){j=new Ce(K,{generateId:re}),K.enqueue({type:"stream-start",warnings:H})},transform(K,J){if(m.includeRawChunks)J.enqueue({type:"raw",rawValue:K.rawValue});if(!K.success){se=!0,J.enqueue({type:"error",error:K.error});return}let P=K.value;switch(P.type){case"conversation.response.started":J.enqueue({type:"response-metadata",id:P.conversation_id,...P.created_at!=null?{timestamp:new Date(P.created_at)}:{}});break;case"conversation.response.done":U=P.usage??void 0,Q=!0;break;case"conversation.response.error":se=!0,J.enqueue({type:"error",error:P});break;case"message.output.delta":if(!Z&&P.model!=null)Z=!0,J.enqueue({type:"response-metadata",modelId:P.model});for(let B of A.convertChunk(typeof P.content==="string"?{type:"text",text:P.content}:P.content))if(B.type==="text"||B.type==="reasoning"){let ae=`${P.id}-${P.content_index??0}`;if(L?.id!==ae||L.type!==B.type)V(J),L={id:ae,type:B.type},J.enqueue({type:B.type==="text"?"text-start":"reasoning-start",id:ae});J.enqueue({type:B.type==="text"?"text-delta":"reasoning-delta",id:ae,delta:B.text})}else if(B.type==="source")J.enqueue(B);break;case"function.call.delta":V(J),X=!0,j.processDelta({id:P.tool_call_id,index:P.output_index,function:{name:P.name,arguments:P.arguments}});break;case"tool.execution.started":case"tool.execution.delta":{V(J);let B=x.get(P.id);if(B==null)x.set(P.id,{name:P.name,arguments:P.arguments,function:P.function}),J.enqueue({type:"tool-input-start",id:P.id,toolName:A.toolNameMapping.toCustomToolName(P.name),providerExecuted:!0});else B.arguments+=P.arguments;break}case"tool.execution.done":{let B=x.get(P.id);if(B==null){se=!0,J.enqueue({type:"error",error:Error(`Missing tool execution start for ${P.id}`)});break}J.enqueue({type:"tool-input-delta",id:P.id,delta:JSON.stringify({arguments:B.arguments})}),J.enqueue({type:"tool-input-end",id:P.id});for(let ae of A.convertTool({type:"tool.execution",id:P.id,name:B.name,arguments:B.arguments,function:P.function??B.function,info:P.info}))J.enqueue(ae);x.delete(P.id);break}}},flush(K){V(K),j.flush(),K.enqueue({type:"finish",finishReason:{unified:se||!Q||x.size>0?"error":X?"tool-calls":"stop",raw:void 0},usage:pe(U)})}})),request:{body:q},response:{headers:R}}}};function Re({tools:w,generateId:m}){let _=le({tools:w,providerToolNames:ge}),H=new Set;return{toolNameMapping:_,convertChunk(q){switch(q.type){case"text":return q.text.length>0?[{type:"text",text:q.text}]:[];case"thinking":{let R=q.thinking.map((A)=>A.text).join("");return R.length>0?[{type:"reasoning",text:R}]:[]}case"tool_reference":if(q.url==null||H.has(q.url))return[];let v=m();return H.add(q.url),[{type:"source",sourceType:"url",id:v,url:q.url,title:q.title??q.url}]}},convertTool(q){let v=_.toCustomToolName(q.name);return[{type:"tool-call",toolCallId:q.id,toolName:v,input:JSON.stringify({arguments:q.arguments}),providerExecuted:!0,providerMetadata:{mistral:{type:"tool.execution",name:q.name,...q.function!=null?{function:q.function}:{}}}},{type:"tool-result",toolCallId:q.id,toolName:v,result:{...q.info!=null?{info:q.info}:{}}}]}}}var Oe=()=>f("type",[t({type:n("text"),text:e()}),t({type:n("thinking"),thinking:o(t({type:n("text"),text:e()}))}),t({type:n("tool_reference"),tool:e().nullish(),title:e().nullish(),url:e().nullish()})]),Xe=()=>l([e(),o(Oe())]),et=()=>t({type:n("tool.execution"),id:e(),name:e(),arguments:e(),function:e().nullish(),info:y(e(),G()).nullish()}),tt=()=>t({type:n("function.call"),tool_call_id:e(),name:e(),arguments:l([e(),y(e(),G())])}),Le=()=>_e.extend({prompt_tokens:r().default(0),completion_tokens:r().default(0),total_tokens:r().default(0)}),nt=a(()=>s(t({conversation_id:e(),outputs:o(f("type",[et(),tt(),t({type:n("message.output"),content:Xe(),model:e().nullish()})])),usage:Le().nullish()}))),st=a(()=>s(f("type",[t({type:n("conversation.response.started"),conversation_id:e(),created_at:e().nullish()}),t({type:n("conversation.response.done"),usage:Le().nullish()}),t({type:n("conversation.response.error"),message:e(),code:r()}),t({type:n("message.output.delta"),id:e(),content_index:r().nullish(),content:l([e(),Oe()]),model:e().nullish()}),t({type:n("function.call.delta"),tool_call_id:e(),name:e(),arguments:e(),output_index:r().nullish()}),t({type:i(["tool.execution.started","tool.execution.delta"]),id:e(),name:e(),arguments:e(),function:e().nullish()}),t({type:n("tool.execution.done"),id:e(),name:e(),function:e().nullish(),info:y(e(),G()).nullish()})]))),ot=t({metadata:y(e(),ie()).optional(),outputDimension:r().int().positive().optional(),outputDtype:i(["float","int8","uint8","binary","ubinary"]).optional()}),at=class w{get provider(){return this.config.provider}static[k](m){return E({modelId:m.modelId,config:m.config})}static[T](m){return new w(m.modelId,m.config)}constructor(m,_){this.specificationVersion="v4",this.maxEmbeddingsPerCall=32,this.supportsParallelCalls=!1,this.modelId=m,this.config=_}async doEmbed({values:m,dimensions:_,abortSignal:H,headers:q,providerOptions:v}){if(m.length>this.maxEmbeddingsPerCall)throw new me({provider:this.provider,modelId:this.modelId,maxEmbeddingsPerCall:this.maxEmbeddingsPerCall,values:m});let R=await h({provider:"mistral",providerOptions:v,schema:ot})??{},{responseHeaders:A,value:x,rawValue:j}=await g({url:`${this.config.baseURL}/embeddings`,headers:d(this.config.headers?.(),q),body:{model:this.modelId,input:m,metadata:R.metadata,output_dimension:R.outputDimension??_,output_dtype:R.outputDtype,encoding_format:"float"},failedResponseHandler:ce,successfulResponseHandler:p(it),abortSignal:H,fetch:this.config.fetch});return{warnings:[],embeddings:x.data.map((L)=>L.embedding),usage:x.usage?{tokens:x.usage.prompt_tokens}:void 0,response:{headers:A,body:j}}}},it=a(()=>s(t({data:o(t({embedding:o(r())})),usage:t({prompt_tokens:r()}).nullish()}))),rt=a(()=>s(t({refAudio:e().min(1).optional(),expressiveness:r().min(1).max(5).optional(),phonemeHints:y(e().min(1),o(e().min(1)).min(1)).optional()}))),ct=class w{static[k](m){return E({modelId:m.modelId,config:m.config})}static[T](m){return new w(m.modelId,m.config)}get provider(){return this.config.provider}constructor(m,_){this.modelId=m,this.config=_,this.specificationVersion="v4"}async getArgs({text:m,voice:_,outputFormat:H="mp3",instructions:q,speed:v,language:R,providerOptions:A}){let x=[],j=await h({provider:"mistral",providerOptions:A,schema:rt}),L="mp3";if(["pcm","wav","mp3","flac","opus"].includes(H))L=H;else x.push({type:"unsupported",feature:"outputFormat",details:`Unsupported output format: ${H}. Using mp3 instead.`});if(q!=null)x.push({type:"unsupported",feature:"instructions",details:"Mistral speech models do not support the `instructions` option. Use a reference audio clip to guide delivery."});if(v!=null)x.push({type:"unsupported",feature:"speed",details:"Mistral speech models do not support the `speed` option. It was ignored."});if(R!=null)x.push({type:"unsupported",feature:"language",details:"Mistral speech models do not support the `language` option. Language is inferred from the input text and voice."});let U=j?.refAudio,X={model:this.modelId,input:m,voice_id:U==null?_:void 0,ref_audio:U,expressiveness:j?.expressiveness,phoneme_hints:j?.phonemeHints,response_format:L,stream:!1};return{requestBody:X,requestBodyValues:{...X,ref_audio:U==null?void 0:"[redacted]"},warnings:x}}async doGenerate(m){let _=this.config._internal?.currentDate?.()??new Date,{requestBody:H,requestBodyValues:q,warnings:v}=await this.getArgs(m),{value:R,responseHeaders:A,rawValue:x}=await ve({url:`${this.config.baseURL}/audio/speech`,headers:d({"Content-Type":"application/json"},this.config.headers?.(),m.headers),body:{content:JSON.stringify(H),values:q},failedResponseHandler:ce,successfulResponseHandler:p(ut),abortSignal:m.abortSignal,fetch:this.config.fetch});return{audio:R.audio_data,warnings:v,request:{body:JSON.stringify(q)},response:{timestamp:_,modelId:this.modelId,headers:A,body:x}}}},ut=a(()=>s(t({audio_data:e()}))),dt=a(()=>s(t({language:e().min(1).optional(),returnLanguage:c().optional(),temperature:r().optional(),timestampGranularities:o(i(["segment","word"])).min(1).optional(),diarize:c().optional(),contextBias:o(e().min(1)).optional()}))),pt=class w{static[k](m){return E({modelId:m.modelId,config:m.config})}static[T](m){return new w(m.modelId,m.config)}get provider(){return this.config.provider}constructor(m,_){this.modelId=m,this.config=_,this.specificationVersion="v4"}async getArgs({audio:m,mediaType:_,providerOptions:H}){let q=[],v=await h({provider:"mistral",providerOptions:H,schema:dt});if(["voxtral-mini-2507","voxtral-mini-2602","voxtral-mini-latest"].includes(this.modelId)&&v?.language!=null&&v.timestampGranularities!=null)throw new b({argument:"providerOptions",message:"providerOptions.mistral.language cannot be combined with providerOptions.mistral.timestampGranularities"});if(v?.language!=null&&v.returnLanguage)throw new b({argument:"providerOptions",message:"providerOptions.mistral.language cannot be combined with providerOptions.mistral.returnLanguage"});let R=new FormData,A=m instanceof Uint8Array?new Blob([m]):new Blob([N(m)]);if(R.append("model",this.modelId),R.append("file",new File([A],"audio",{type:_}),`audio.${lt(_)}`),v!=null)ue(R,"language",v.language),ue(R,"return_language",v.returnLanguage),ue(R,"temperature",v.temperature),ue(R,"timestamp_granularities",v.timestampGranularities),ue(R,"diarize",v.diarize),ue(R,"context_bias",v.contextBias);return{formData:R,warnings:q}}async doGenerate(m){let _=this.config._internal?.currentDate?.()??new Date,{formData:H,warnings:q}=await this.getArgs(m),{value:v,responseHeaders:R,rawValue:A}=await ne({url:`${this.config.baseURL}/audio/transcriptions`,headers:d(this.config.headers?.(),m.headers),formData:H,failedResponseHandler:ce,successfulResponseHandler:p(mt),abortSignal:m.abortSignal,fetch:this.config.fetch}),x=v.segments?.map((U)=>({text:U.text,startSecond:U.start,endSecond:U.end}))??[],j={};if(v.usage!=null)j.usage={...v.usage.prompt_tokens!=null&&{promptTokens:v.usage.prompt_tokens},...v.usage.completion_tokens!=null&&{completionTokens:v.usage.completion_tokens},...v.usage.total_tokens!=null&&{totalTokens:v.usage.total_tokens},...v.usage.prompt_audio_seconds!=null&&{promptAudioSeconds:v.usage.prompt_audio_seconds},...v.usage.request_count!=null&&{requestCount:v.usage.request_count}};let L=v.segments?.filter((U)=>U.type!=null||U.score!=null||U.speaker_id!=null).map((U)=>({text:U.text,startSecond:U.start,endSecond:U.end,...U.type!=null&&{type:U.type},...U.score!=null&&{score:U.score},...U.speaker_id!=null&&{speakerId:U.speaker_id}}));if(L!=null&&L.length>0)j.segments=L;return{text:v.text,segments:x,language:v.language??void 0,durationInSeconds:v.usage?.prompt_audio_seconds??x.at(-1)?.endSecond??void 0,warnings:q,...v.usage!=null&&{usage:v.usage},response:{timestamp:_,modelId:v.model,headers:R,body:A},...Object.keys(j).length>0&&{providerMetadata:{mistral:j}}}}};function ue(w,m,_){if(_==null)return;if(Array.isArray(_)){for(let H of _)w.append(m,H);return}w.append(m,String(_))}var mt=a(()=>s(t({model:e(),text:e(),language:e().nullish(),segments:o(t({type:n("transcription_segment").nullish(),text:e(),start:r(),end:r(),score:r().nullish(),speaker_id:e().nullish()})).nullish(),usage:t({prompt_tokens:r().nullish(),completion_tokens:r().nullish(),total_tokens:r().nullish(),prompt_audio_seconds:r().nullish(),request_count:r().nullish()}).nullish()}))),gt="4.0.74",Ae=a(()=>s(t({arguments:e()}))),Ne=a(()=>s(t({info:y(e(),G()).optional()}))),ht=S({id:"mistral.web_search",inputSchema:Ae,outputSchema:Ne}),ft=S({id:"mistral.web_search_premium",inputSchema:Ae,outputSchema:Ne}),yt=(w={})=>ht(w),bt=(w={})=>ft(w),vt={webSearch:yt,webSearchPremium:bt};function we(w={}){let m=Y(w.baseURL)??"https://api.mistral.ai/v1",_=()=>F({Authorization:`Bearer ${he({apiKey:w.apiKey,environmentVariableName:"MISTRAL_API_KEY",description:"Mistral"})}`,...w.headers},`ai-sdk-mistral/${gt}`),H=(j)=>new ze(j,{provider:"mistral.chat",baseURL:m,headers:_,fetch:w.fetch,generateId:w.generateId}),q=(j)=>new at(j,{provider:"mistral.embedding",baseURL:m,headers:_,fetch:w.fetch}),v=(j)=>new Qe(j,{provider:"mistral.conversation",baseURL:m,headers:_,fetch:w.fetch,generateId:w.generateId}),R=(j)=>new ct(j,{provider:"mistral.speech",baseURL:m,headers:_,fetch:w.fetch}),A=(j)=>new pt(j,{provider:"mistral.transcription",baseURL:m,headers:_,fetch:w.fetch}),x=function(j){if(new.target)throw Error("The Mistral model function cannot be called with the new keyword.");return H(j)};return x.specificationVersion="v4",x.languageModel=H,x.chat=H,x.conversation=v,x.tools=vt,x.embedding=q,x.embeddingModel=q,x.textEmbedding=q,x.textEmbeddingModel=q,x.speech=R,x.speechModel=R,x.transcription=A,x.transcriptionModel=A,x.imageModel=(j)=>{throw new Ge({modelId:j,modelType:"imageModel"})},x}var St=we();var _t=Ie(we);function Mt(){oe("mistral",_t)}export{Mt as register};
@@ -1,5 +1,5 @@
1
- import{Mt}from"./embed-fd96s8qk.js";import{St}from"./embed-ssqsb38w.js";import{Ye,Ft,zt,Xe,Dt}from"./embed-z32y952f.js";function M(e,s){let t=[...s].reverse().find((o)=>o.role==="user");return Ye(e)<12&&t?`${t.content} ${e}`:e}function T(e){let s=e.retriever??(e.index?St(e.index):null)??(()=>{throw Error("murmur: pass `index` or `retriever`.")})();return{retriever:s,async ask(t,{history:o=[],signal:u}={}){let a={};if(e.limit!==void 0)a.limit=e.limit;if(e.budgetTokens!==void 0)a.budgetTokens=e.budgetTokens;let i=await s.search(M(t,o),a),d=[e.instructions?.trim(),zt(e.language),i.length?`Sources:
1
+ import{At}from"./embed-xtkxyrpe.js";import{Mt}from"./embed-7pk91zq8.js";import{Ye,Ft,zt,Xe,Dt}from"./embed-n5nzhrf2.js";function M(e,s){let t=[...s].reverse().find((o)=>o.role==="user");return Ye(e)<12&&t?`${t.content} ${e}`:e}function T(e){let s=e.retriever??(e.index?Mt(e.index):null)??(()=>{throw Error("murmur: pass `index` or `retriever`.")})();return{retriever:s,async ask(t,{history:o=[],signal:u}={}){let a={};if(e.limit!==void 0)a.limit=e.limit;if(e.budgetTokens!==void 0)a.budgetTokens=e.budgetTokens;let i=await s.search(M(t,o),a),d=[e.instructions?.trim(),zt(e.language),i.length?`Sources:
2
2
 
3
3
  ${Ft(i)}`:"Sources: none matched this question. Say you could not find it on this site."].filter(Boolean).join(`
4
4
 
5
- `),g=[...o.slice(-(e.historyTurns??6)*2).map((r)=>({role:r.role,content:r.content})),{role:"user",content:t}],f=typeof e.model==="function"?await e.model():e.model,x=Mt({model:f,instructions:d,messages:g,onError:()=>{},...u?{abortSignal:u}:{}}),n="",c=()=>{},m=()=>{},l=new Promise((r,b)=>{c=r,m=b});l.catch(()=>{});async function*y(){try{for await(let r of x.stream){if(r.type==="error")throw r.error;if(r.type!=="text-delta")continue;n+=r.text,yield r.text}n=Xe(n),c({text:n,cited:Dt(n,i.length)})}catch(r){throw m(r),r}}return{passages:i,textStream:y(),done:l}}}}export{T as createMurmur};
5
+ `),g=[...o.slice(-(e.historyTurns??6)*2).map((r)=>({role:r.role,content:r.content})),{role:"user",content:t}],f=typeof e.model==="function"?await e.model():e.model,x=At({model:f,instructions:d,messages:g,onError:()=>{},...u?{abortSignal:u}:{}}),n="",c=()=>{},m=()=>{},l=new Promise((r,b)=>{c=r,m=b});l.catch(()=>{});async function*y(){try{for await(let r of x.stream){if(r.type==="error")throw r.error;if(r.type!=="text-delta")continue;n+=r.text,yield r.text}n=Xe(n),c({text:n,cited:Dt(n,i.length)})}catch(r){throw m(r),r}}return{passages:i,textStream:y(),done:l}}}}export{T as createMurmur};
@@ -1,9 +1,9 @@
1
- import{F,yn,Xe,At}from"./embed-z32y952f.js";yn(import.meta.url,["cztxc0wh","bq0x71h1","hpx6rpea","gyd02jvt","j1ky5vmr","dqxzjaqk","nesgnf2n","jt6n0d28","z32y952f","6gef7ym5","krrjjyf5","fd96s8qk","ssqsb38w","3kmbvcbt","zhaj1r43","wgzgvzaf","t87kf8t0","g1685z9v","dc7h9prc","yywkqdph","0mg4kk7s","jdraznwg","acjpjh6t"],[["./murmur.js",8],["./index-bq0x71h1.js",9],["./chunk-hpx6rpea.js",10],["./index-gyd02jvt.js",10],["./murmur-j1ky5vmr.js",11,12,8],["./retriever-dqxzjaqk.js",12],["./index-nesgnf2n.js",9],["./index-jt6n0d28.js",8],["./embed-z32y952f.js"],["./embed-6gef7ym5.js",8],["./embed-krrjjyf5.js"],["./embed-fd96s8qk.js",8,21],["./embed-ssqsb38w.js",8],["./transformers.web-3kmbvcbt.js",8],["./openai-compatible-zhaj1r43.js",9,21],["./index-wgzgvzaf.js",11],["./browser-t87kf8t0.js"],["./openai-g1685z9v.js",9,8,21],["./anthropic-dc7h9prc.js",9,22,21],["./google-yywkqdph.js",9,22,21],["./mistral-0mg4kk7s.js",9,21],["./embed-jdraznwg.js"],["./embed-acjpjh6t.js",21]],0);
2
- var J={open:"Ask a question",close:"Close",title:"Ask this site",greeting:"Hi! Ask me anything about this site. I answer from its pages and link to them.",placeholder:"Your question…",send:"Send",stop:"Stop",settings:"AI settings",back:"Back to chat",sources:"Sources",notFound:"Nothing on this site matched. Try other words?",thinking:"Looking through the site…",newChat:"New conversation",poweredBy:"Answers from this site's pages, by murmur",errorAuth:"The key was refused. Check it in the AI settings.",errorNetwork:"No answer from the AI provider: key refused or network down.",errorRate:"The AI provider is busy or rate-limited. Try again in a moment.",errorOther:"The answer failed:",retry:"Try again",setupTitle:"Connect an AI model",setupIntro:"Pick how this site answers you: a model that runs in your browser, or your own AI key, kept encrypted in your browser and sent only to the provider you pick.",provider:"Provider",model:"Model",apiKey:"API key",apiKeyHint:"Sent only to the provider, never to this site.",remember:"Remember on this device",local:"Local server (Ollama, LM Studio)",localHint:"The server must allow this site's origin (CORS).",endpoint:"Server URL",test:"Test",testing:"Testing…",testOk:"Connected.",testFail:"Connection failed:",save:"Save and chat",forget:"Forget my key",loadingCatalog:"Loading models…",catalogError:"Could not load the model list.",searchModels:"Search models",recommended:"Recommended",otherProviders:"Other providers",localOption:"Run a model in this browser",localOptionHint:"{name}, about {size} downloaded once, then kept in this browser. Needs WebGPU; nothing you type leaves your device.",localActive:"Running in this browser",orKey:"or connect a provider with your key",useKey:"Use an API key instead",localConsent:"This assistant can run entirely in your browser with {name}, an AI model of about {size}. It downloads once, then stays in this browser; your questions never leave your device.",localDownload:"Download and answer",localLoading:"Downloading the model…",localLoadingLabel:"Model download",localPreparing:"Preparing the model on your GPU…",localNoWebGPU:"This browser cannot run the model locally (no WebGPU). Try a recent Chrome, Edge or Safari, or use an API key.",localLoadFailed:"The model could not be loaded in this browser.",gigabytes:"GB",megabytes:"MB"},le={open:"Poser une question",close:"Fermer",title:"Demandez au site",greeting:"Bonjour ! Posez-moi une question sur ce site. Je réponds à partir de ses pages, avec les liens.",placeholder:"Votre question…",send:"Envoyer",stop:"Arrêter",settings:"Réglages IA",back:"Retour au chat",sources:"Sources",notFound:"Rien sur ce site ne correspond. Essayez d'autres mots ?",thinking:"Je cherche dans le site…",newChat:"Nouvelle conversation",poweredBy:"Réponses tirées des pages de ce site, par murmur",errorAuth:"La clé a été refusée. Vérifiez-la dans les réglages IA.",errorNetwork:"Pas de réponse du fournisseur d'IA : clé refusée ou réseau coupé.",errorRate:"Le fournisseur d'IA est saturé ou limite les appels. Réessayez dans un instant.",errorOther:"La réponse a échoué :",retry:"Réessayer",setupTitle:"Connecter un modèle d'IA",setupIntro:"Choisissez comment ce site vous répond : un modèle qui tourne dans votre navigateur, ou votre propre clé d'IA, gardée chiffrée dans votre navigateur et envoyée seulement au fournisseur choisi.",provider:"Fournisseur",model:"Modèle",apiKey:"Clé API",apiKeyHint:"Envoyée uniquement au fournisseur, jamais à ce site.",remember:"Mémoriser sur cet appareil",local:"Serveur local (Ollama, LM Studio)",localHint:"Le serveur doit autoriser l'origine de ce site (CORS).",endpoint:"URL du serveur",test:"Tester",testing:"Test…",testOk:"Connecté.",testFail:"Échec de la connexion :",save:"Enregistrer et discuter",forget:"Oublier ma clé",loadingCatalog:"Chargement des modèles…",catalogError:"Impossible de charger la liste des modèles.",searchModels:"Chercher un modèle",recommended:"Recommandés",otherProviders:"Autres fournisseurs",localOption:"Faire tourner un modèle dans ce navigateur",localOptionHint:"{name}, environ {size} téléchargés une fois puis gardés dans ce navigateur. Nécessite WebGPU ; rien de ce que vous tapez ne quitte votre appareil.",localActive:"Modèle actif dans ce navigateur",orKey:"ou connectez un fournisseur avec votre clé",useKey:"Utiliser une clé API à la place",localConsent:"Cet assistant peut fonctionner entièrement dans votre navigateur avec {name}, un modèle d'IA d'environ {size}. Il se télécharge une fois puis reste dans ce navigateur ; vos questions ne quittent jamais votre appareil.",localDownload:"Télécharger et répondre",localLoading:"Téléchargement du modèle…",localLoadingLabel:"Téléchargement du modèle",localPreparing:"Préparation du modèle sur votre GPU…",localNoWebGPU:"Ce navigateur ne peut pas faire tourner le modèle en local (pas de WebGPU). Essayez un Chrome, Edge ou Safari récent, ou utilisez une clé API.",localLoadFailed:"Le modèle n'a pas pu être chargé dans ce navigateur.",gigabytes:"Go",megabytes:"Mo"},Z={en:J,fr:le};function Q(...e){for(let n of e){let s=n?.toLowerCase().split(/[-_]/)[0];if(s&&s in Z)return s}return"en"}function K(e,n={}){return{...Z[e]??J,...n}}var ce={chat:'<path d="M4 6.5A2.5 2.5 0 0 1 6.5 4h11A2.5 2.5 0 0 1 20 6.5v7a2.5 2.5 0 0 1-2.5 2.5H10l-4.2 3.4c-.5.4-1.3 0-1.3-.6V6.5Z"/><path d="M8.5 9h7M8.5 12h4.5"/>',close:'<path d="M6 6l12 12M18 6 6 18"/>',send:'<path d="M12 19V5M6 11l6-6 6 6"/>',stop:'<rect x="7" y="7" width="10" height="10" rx="1.5"/>',settings:'<path d="M4 7h9M17 7h3M4 17h3M11 17h9"/><circle cx="15" cy="7" r="2"/><circle cx="9" cy="17" r="2"/>',reset:'<path d="M5 12a7 7 0 1 0 2.1-5"/><path d="M5 4.5V8h3.5"/>',back:'<path d="M14.5 6 8.5 12l6 6"/>',check:'<path d="m5.5 12.5 4 4 9-9"/>',key:'<circle cx="8" cy="15" r="3.5"/><path d="m10.5 12.5 8-8M16 7l2 2M14 9l1.5 1.5"/>'};function B(e,n){let s=e.createElement("template");return s.innerHTML=`<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${ce[n]??""}</svg>`,s.content.firstElementChild}var de=/^(https?:\/\/|\/|#|\.\/|mailto:)/i;function S(e,n,s,t){let o=/(`[^`]+`)|(\*\*[^*]+\*\*)|(\*[^*\s][^*]*\*|_[^_\s][^_]*_)|(\[[^\]]+\]\([^)\s]+\))|(\[\d{1,2}\])/g,i=0;for(let l of n.matchAll(o)){let p=l.index??0;if(p>i)t.appendChild(e.createTextNode(n.slice(i,p)));i=p+l[0].length;let c=l[0];if(l[1]){let d=e.createElement("code");d.textContent=c.slice(1,-1),t.appendChild(d)}else if(l[2]){let d=e.createElement("strong");S(e,c.slice(2,-2),s,d),t.appendChild(d)}else if(l[3]){let d=e.createElement("em");S(e,c.slice(1,-1),s,d),t.appendChild(d)}else if(l[4]){let d=c.indexOf("]("),r=c.slice(1,d),u=c.slice(d+2,-1);if(de.test(u)){let h=e.createElement("a");if(h.href=u,h.textContent=r,/^https?:/i.test(u))h.target="_blank",h.rel="noopener noreferrer";t.appendChild(h)}else t.appendChild(e.createTextNode(r))}else{let d=s(Number(c.slice(1,-1)));t.appendChild(d??e.createTextNode(c))}}if(i<n.length)t.appendChild(e.createTextNode(n.slice(i)))}var pe=/^\s*\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)*\|?\s*$/;function X(e,n){return/ {2,}$|\\$/.test(n)?e.createElement("br"):e.createTextNode(" ")}function ee(e){return e.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map((n)=>n.trim())}function U(e,n,s){let t=e.ownerDocument,o=t.createDocumentFragment(),i=n.replace(/\r\n?/g,`
1
+ import{q,yn,Xe,Et}from"./embed-n5nzhrf2.js";yn(import.meta.url,["cbd6yp41","t0qn2m4r","db4ne93m","hpx6rpea","gyd02jvt","d6t6cjc7","6qvn2maq","qc8kgsdt","n5nzhrf2","rp9gb1qq","xn16v7pz","krrjjyf5","xtkxyrpe","7pk91zq8","t87kf8t0","d3q1d6cz","ynz7717b","k5kwa54v","p2qcnn42","psnkrpxy","y0faj89r","dbkjhg16","0m8xctqy"],[["./murmur.js",8],["./index-t0qn2m4r.js",9],["./index-db4ne93m.js",8],["./chunk-hpx6rpea.js",11],["./index-gyd02jvt.js",11],["./murmur-d6t6cjc7.js",12,13,8],["./retriever-6qvn2maq.js",13],["./index-qc8kgsdt.js",9],["./embed-n5nzhrf2.js"],["./embed-rp9gb1qq.js",8],["./transformers.web-xn16v7pz.js",8],["./embed-krrjjyf5.js"],["./embed-xtkxyrpe.js",8,21],["./embed-7pk91zq8.js",8],["./browser-t87kf8t0.js"],["./openai-d3q1d6cz.js",9,8,21],["./anthropic-ynz7717b.js",9,22,21],["./google-k5kwa54v.js",9,22,21],["./mistral-p2qcnn42.js",9,21],["./openai-compatible-psnkrpxy.js",9,21],["./index-y0faj89r.js",12],["./embed-dbkjhg16.js"],["./embed-0m8xctqy.js",21]],0);
2
+ var X={open:"Ask a question",close:"Close",title:"Ask this site",greeting:"Hi! Ask me anything about this site. I answer from its pages and link to them.",placeholder:"Your question…",send:"Send",stop:"Stop",settings:"AI settings",back:"Back to chat",sources:"Sources",notFound:"Nothing on this site matched. Try other words?",thinking:"Looking through the site…",newChat:"New conversation",poweredBy:"Answers from this site's pages, by murmur",errorAuth:"The key was refused. Check it in the AI settings.",errorNetwork:"No answer from the AI provider: key refused or network down.",errorRate:"The AI provider is busy or rate-limited. Try again in a moment.",errorOther:"The answer failed:",retry:"Try again",setupTitle:"Connect an AI model",setupIntro:"Pick how this site answers you: a model that runs in your browser, or your own AI key, kept encrypted in your browser and sent only to the provider you pick.",provider:"Provider",model:"Model",apiKey:"API key",apiKeyHint:"Sent only to the provider, never to this site.",remember:"Remember on this device",local:"Local server (Ollama, LM Studio)",localHint:"The server must allow this site's origin (CORS).",endpoint:"Server URL",test:"Test",testing:"Testing…",testOk:"Connected.",testFail:"Connection failed:",save:"Save and chat",forget:"Forget my key",loadingCatalog:"Loading models…",catalogError:"Could not load the model list.",searchModels:"Search models",recommended:"Recommended",otherProviders:"Other providers",localOption:"Run a model in this browser",localOptionHint:"{name}, about {size} downloaded once, then kept in this browser. Needs WebGPU; nothing you type leaves your device.",localActive:"Running in this browser",orKey:"or connect a provider with your key",useKey:"Use an API key instead",localConsent:"This assistant can run entirely in your browser with {name}, an AI model of about {size}. It downloads once, then stays in this browser; your questions never leave your device.",localDownload:"Download and answer",localLoading:"Downloading the model…",localLoadingLabel:"Model download",localPreparing:"Preparing the model on your GPU…",localNoWebGPU:"This browser cannot run the model locally (no WebGPU). Try a recent Chrome, Edge or Safari, or use an API key.",localLoadFailed:"The model could not be loaded in this browser.",gigabytes:"GB",megabytes:"MB"},ce={open:"Poser une question",close:"Fermer",title:"Demandez au site",greeting:"Bonjour ! Posez-moi une question sur ce site. Je réponds à partir de ses pages, avec les liens.",placeholder:"Votre question…",send:"Envoyer",stop:"Arrêter",settings:"Réglages IA",back:"Retour au chat",sources:"Sources",notFound:"Rien sur ce site ne correspond. Essayez d'autres mots ?",thinking:"Je cherche dans le site…",newChat:"Nouvelle conversation",poweredBy:"Réponses tirées des pages de ce site, par murmur",errorAuth:"La clé a été refusée. Vérifiez-la dans les réglages IA.",errorNetwork:"Pas de réponse du fournisseur d'IA : clé refusée ou réseau coupé.",errorRate:"Le fournisseur d'IA est saturé ou limite les appels. Réessayez dans un instant.",errorOther:"La réponse a échoué :",retry:"Réessayer",setupTitle:"Connecter un modèle d'IA",setupIntro:"Choisissez comment ce site vous répond : un modèle qui tourne dans votre navigateur, ou votre propre clé d'IA, gardée chiffrée dans votre navigateur et envoyée seulement au fournisseur choisi.",provider:"Fournisseur",model:"Modèle",apiKey:"Clé API",apiKeyHint:"Envoyée uniquement au fournisseur, jamais à ce site.",remember:"Mémoriser sur cet appareil",local:"Serveur local (Ollama, LM Studio)",localHint:"Le serveur doit autoriser l'origine de ce site (CORS).",endpoint:"URL du serveur",test:"Tester",testing:"Test…",testOk:"Connecté.",testFail:"Échec de la connexion :",save:"Enregistrer et discuter",forget:"Oublier ma clé",loadingCatalog:"Chargement des modèles…",catalogError:"Impossible de charger la liste des modèles.",searchModels:"Chercher un modèle",recommended:"Recommandés",otherProviders:"Autres fournisseurs",localOption:"Faire tourner un modèle dans ce navigateur",localOptionHint:"{name}, environ {size} téléchargés une fois puis gardés dans ce navigateur. Nécessite WebGPU ; rien de ce que vous tapez ne quitte votre appareil.",localActive:"Modèle actif dans ce navigateur",orKey:"ou connectez un fournisseur avec votre clé",useKey:"Utiliser une clé API à la place",localConsent:"Cet assistant peut fonctionner entièrement dans votre navigateur avec {name}, un modèle d'IA d'environ {size}. Il se télécharge une fois puis reste dans ce navigateur ; vos questions ne quittent jamais votre appareil.",localDownload:"Télécharger et répondre",localLoading:"Téléchargement du modèle…",localLoadingLabel:"Téléchargement du modèle",localPreparing:"Préparation du modèle sur votre GPU…",localNoWebGPU:"Ce navigateur ne peut pas faire tourner le modèle en local (pas de WebGPU). Essayez un Chrome, Edge ou Safari récent, ou utilisez une clé API.",localLoadFailed:"Le modèle n'a pas pu être chargé dans ce navigateur.",gigabytes:"Go",megabytes:"Mo"},ee={en:X,fr:ce};function te(...e){for(let n of e){let s=n?.toLowerCase().split(/[-_]/)[0];if(s&&s in ee)return s}return"en"}function D(e,n={}){return{...ee[e]??X,...n}}var de={chat:'<path d="M4 6.5A2.5 2.5 0 0 1 6.5 4h11A2.5 2.5 0 0 1 20 6.5v7a2.5 2.5 0 0 1-2.5 2.5H10l-4.2 3.4c-.5.4-1.3 0-1.3-.6V6.5Z"/><path d="M8.5 9h7M8.5 12h4.5"/>',close:'<path d="M6 6l12 12M18 6 6 18"/>',send:'<path d="M12 19V5M6 11l6-6 6 6"/>',stop:'<rect x="7" y="7" width="10" height="10" rx="1.5"/>',settings:'<path d="M4 7h9M17 7h3M4 17h3M11 17h9"/><circle cx="15" cy="7" r="2"/><circle cx="9" cy="17" r="2"/>',reset:'<path d="M5 12a7 7 0 1 0 2.1-5"/><path d="M5 4.5V8h3.5"/>',back:'<path d="M14.5 6 8.5 12l6 6"/>',check:'<path d="m5.5 12.5 4 4 9-9"/>',key:'<circle cx="8" cy="15" r="3.5"/><path d="m10.5 12.5 8-8M16 7l2 2M14 9l1.5 1.5"/>'};function B(e,n){let s=e.createElement("template");return s.innerHTML=`<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${de[n]??""}</svg>`,s.content.firstElementChild}var pe=/^(https?:\/\/|\/|#|\.\/|mailto:)/i;function S(e,n,s,t){let o=/(`[^`]+`)|(\*\*[^*]+\*\*)|(\*[^*\s][^*]*\*|_[^_\s][^_]*_)|(\[[^\]]+\]\([^)\s]+\))|(\[\d{1,2}\])/g,i=0;for(let c of n.matchAll(o)){let p=c.index??0;if(p>i)t.appendChild(e.createTextNode(n.slice(i,p)));i=p+c[0].length;let r=c[0];if(c[1]){let d=e.createElement("code");d.textContent=r.slice(1,-1),t.appendChild(d)}else if(c[2]){let d=e.createElement("strong");S(e,r.slice(2,-2),s,d),t.appendChild(d)}else if(c[3]){let d=e.createElement("em");S(e,r.slice(1,-1),s,d),t.appendChild(d)}else if(c[4]){let d=r.indexOf("]("),a=r.slice(1,d),h=r.slice(d+2,-1);if(pe.test(h)){let u=e.createElement("a");if(u.href=h,u.textContent=a,/^https?:/i.test(h))u.target="_blank",u.rel="noopener noreferrer";t.appendChild(u)}else t.appendChild(e.createTextNode(a))}else{let d=s(Number(r.slice(1,-1)));t.appendChild(d??e.createTextNode(r))}}if(i<n.length)t.appendChild(e.createTextNode(n.slice(i)))}var ue=/^\s*\|?\s*:?-{3,}:?\s*(?:\|\s*:?-{3,}:?\s*)*\|?\s*$/;function ne(e,n){return/ {2,}$|\\$/.test(n)?e.createElement("br"):e.createTextNode(" ")}function se(e){return e.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map((n)=>n.trim())}function F(e,n,s){let t=e.ownerDocument,o=t.createDocumentFragment(),i=n.replace(/\r\n?/g,`
3
3
  `).split(`
4
- `),l=[],p=null,c=()=>{if(!l.length)return;let r=t.createElement("p");l.forEach((u,h)=>{if(h)r.appendChild(X(t,l[h-1]??""));S(t,u.trim(),s,r)}),o.appendChild(r),l=[]},d=()=>{p=null};for(let r=0;r<i.length;r++){let u=i[r]??"",h=/^(\s*)```/.exec(u);if(h){c();let m=h[1]?.length??0,f=m>=2&&p?p.lastElementChild:null;if(!f)d();let y=[];for(r++;r<i.length&&!/^\s*```/.test(i[r]??"");r++){let w=i[r]??"";y.push(w.startsWith(" ".repeat(m))?w.slice(m):w.trimStart())}let L=t.createElement("pre");L.tabIndex=0;let C=t.createElement("code");C.textContent=y.join(`
5
- `),L.appendChild(C),(f??o).appendChild(L);continue}if(/^\s*([-*_])(?:\s*\1){2,}\s*$/.test(u)){c(),d(),o.appendChild(t.createElement("hr"));continue}if(u.includes("|")&&pe.test(i[r+1]??"")){c(),d();let m=[ee(u)];for(r+=2;r<i.length&&(i[r]??"").includes("|");r++)m.push(ee(i[r]??""));r--;let f=t.createElement("div");f.className="table",f.tabIndex=0;let y=t.createElement("table");m.forEach((L,C)=>{let w=t.createElement("tr");for(let T of L){let A=t.createElement(C===0?"th":"td");S(t,T,s,A),w.appendChild(A)}y.appendChild(w)}),f.appendChild(y),o.appendChild(f);continue}let x=/^\s*>\s?(.*)$/.exec(u);if(x){c(),d();let m=[x[1]??""];for(;/^\s*>/.test(i[r+1]??"");r++)m.push((i[r+1]??"").replace(/^\s*>\s?/,""));let f=t.createElement("blockquote");U(f,m.join(`
6
- `),s),o.appendChild(f);continue}let b=/^\s*(?:([-*+])|(\d+)[.)])\s+(.*)$/.exec(u);if(b){c();let m=b[1]?"ul":"ol";if(!p||p.tagName.toLowerCase()!==m){if(p=t.createElement(m),m==="ol"&&b[2]&&b[2]!=="1")p.setAttribute("start",b[2]);o.appendChild(p)}let f=t.createElement("li");S(t,(b[3]??"").trimEnd(),s,f),p.appendChild(f);continue}let k=/^\s*#{1,6}\s+(.*)$/.exec(u);if(k){c(),d();let m=t.createElement("p"),f=t.createElement("strong");S(t,k[1]??"",s,f),m.appendChild(f),o.appendChild(m);continue}if(!u.trim()){c();let m=i.slice(r+1).find((y)=>y.trim())??"",f=p?.tagName.toLowerCase()==="ol"?/^\s*\d+[.)]\s+/:/^\s*[-*+]\s+/;if(!p||!f.test(m))d();continue}if(p&&/^\s{2,}\S/.test(u)){let m=p.lastElementChild;if(m){m.appendChild(X(t,i[r-1]??"")),S(t,u.trim(),s,m);continue}}d(),l.push(u)}c(),e.replaceChildren(o)}var ue={limit:4,budgetTokens:1500};class W{options;turns=[];engine=null;storePromise=null;historyKey;key;onProgress=null;constructor(e){this.options=e;this.key=e.storageKey??"murmur",this.historyKey=`${e.storageKey??"murmur"}-chat:${location.pathname.split("/")[1]??""}`;try{let n=sessionStorage.getItem(this.historyKey);if(n)this.turns=JSON.parse(n)}catch{this.turns=[]}}get mode(){if(this.options.model)return"custom";if(this.options.local||this.visitorChoseLocal)return"local";return this.options.llm?.endpoint?"proxy":"visitor"}async localSpec(){let{local:e}=this.options;if(e&&typeof e==="object")return e;return(await (F("jt6n0d28"),import("./index-jt6n0d28.js"))).DEFAULT_LOCAL_MODEL}get visitorChoseLocal(){return te(`${this.key}-local`)==="1"}useLocal(e){ne(`${this.key}-local`,e?"1":null),this.engine=null}get needsDownloadConsent(){return this.mode==="local"&&te(`${this.key}-local-consent`)!=="1"}agreeToDownload(){ne(`${this.key}-local-consent`,"1")}persist(){try{sessionStorage.setItem(this.historyKey,JSON.stringify(this.turns.slice(-30)))}catch{}}clear(){this.turns=[],this.persist()}store(){return this.storePromise??=(F("bq0x71h1"),import("./index-bq0x71h1.js")).then((e)=>{let n={};if(this.options.catalogUrl)n.catalogUrl=this.options.catalogUrl;if(this.options.storageKey)n.storageKey=this.options.storageKey;return e.visitorStore(this.options.llm??{},n)}),this.storePromise}async settings(){if(this.mode==="custom")return null;let e=await (F("bq0x71h1"),import("./index-bq0x71h1.js"));return e.resolveSettings(this.options.llm??{},this.mode==="visitor"?await this.store():null)}async needsSetup(){return this.mode==="visitor"&&!await this.settings()}async canRunLocally(){return(await (F("jt6n0d28"),import("./index-jt6n0d28.js"))).hasWebGPU()}async loadIndex(){let{index:e}=this.options;if(e&&typeof e!=="string")return e;let{isMurmurIndex:n}=await (F("hpx6rpea"),import("./chunk-hpx6rpea.js"));if(e){let t=await fetch(new URL(e,location.href));if(!t.ok)throw Error(`murmur: index ${t.status}`);let o=await t.json();if(!n(o))throw Error("murmur: not a murmur index");return o}let{indexDocument:s}=await (F("gyd02jvt"),import("./index-gyd02jvt.js"));return s(document,location.pathname+location.search)}createEngine(){return(async()=>{let[{createMurmur:e},n]=await Promise.all([(F("j1ky5vmr"),import("./murmur-j1ky5vmr.js")),this.options.retriever??(F("dqxzjaqk"),import("./retriever-dqxzjaqk.js")).then(async(i)=>i.bm25Retriever(await this.loadIndex()))]),s=this.mode==="local",t=this.options.model??(s?async()=>{let{localModel:i}=await (F("jt6n0d28"),import("./index-jt6n0d28.js"));return i({spec:await this.localSpec(),onProgress:(l)=>this.onProgress?.(l)})}:async()=>{let i=await this.settings();if(!i)throw new P;let{loadModel:l}=await (F("bq0x71h1"),import("./index-bq0x71h1.js"));return l(i)}),o={retriever:n,model:t,...s?ue:{}};if(this.options.instructions)o.instructions=this.options.instructions;if(this.options.lang)o.language=this.options.lang;return e(o)})()}async ask(e,n,s){let t=this.turns.filter((i)=>!i.error).map(({role:i,content:l})=>({role:i,content:l}));this.turns.push({role:"user",content:e});let o={role:"assistant",content:""};this.turns.push(o),this.persist();try{this.engine??=this.createEngine();let l=await(await this.engine.catch((c)=>{throw this.engine=null,c})).ask(e,{history:t,signal:s});o.passages=l.passages.map(({url:c,anchor:d,title:r,heading:u})=>({url:c,anchor:d,title:r,heading:u}));for await(let c of l.textStream)o.content+=c,n(o.content,o);let p=await l.done;o.content=p.text,o.cited=p.cited}catch(i){if(s.aborted)o.cited=[];else if(i instanceof P)throw this.turns.splice(-2,2),i;else o.error=await this.describe(i)}finally{this.persist()}return o}async describe(e){if(e instanceof Error&&e.name==="LocalModelError")return`local-${e.code??"load"}|${e.message}`;try{let{describeError:n}=await (F("bq0x71h1"),import("./index-bq0x71h1.js")),s=this.mode==="custom"||this.mode==="local"?null:await this.settings(),t=n(e,s?.apiKey);return`${t.code}|${t.message}`}catch{return`unknown|${e instanceof Error?e.message:String(e)}`}}}function te(e){try{return localStorage.getItem(e)}catch{return null}}function ne(e,n){try{if(n===null)localStorage.removeItem(e);else localStorage.setItem(e,n)}catch{}}class P extends Error{constructor(){super("murmur: no model set up")}}var se=`
4
+ `),c=[],p=null,r=()=>{if(!c.length)return;let a=t.createElement("p");c.forEach((h,u)=>{if(u)a.appendChild(ne(t,c[u-1]??""));S(t,h.trim(),s,a)}),o.appendChild(a),c=[]},d=()=>{p=null};for(let a=0;a<i.length;a++){let h=i[a]??"",u=/^(\s*)```/.exec(h);if(u){r();let m=u[1]?.length??0,f=m>=2&&p?p.lastElementChild:null;if(!f)d();let y=[];for(a++;a<i.length&&!/^\s*```/.test(i[a]??"");a++){let w=i[a]??"";y.push(w.startsWith(" ".repeat(m))?w.slice(m):w.trimStart())}let E=t.createElement("pre");E.tabIndex=0;let C=t.createElement("code");C.textContent=y.join(`
5
+ `),E.appendChild(C),(f??o).appendChild(E);continue}if(/^\s*([-*_])(?:\s*\1){2,}\s*$/.test(h)){r(),d(),o.appendChild(t.createElement("hr"));continue}if(h.includes("|")&&ue.test(i[a+1]??"")){r(),d();let m=[se(h)];for(a+=2;a<i.length&&(i[a]??"").includes("|");a++)m.push(se(i[a]??""));a--;let f=t.createElement("div");f.className="table",f.tabIndex=0;let y=t.createElement("table");m.forEach((E,C)=>{let w=t.createElement("tr");for(let T of E){let A=t.createElement(C===0?"th":"td");S(t,T,s,A),w.appendChild(A)}y.appendChild(w)}),f.appendChild(y),o.appendChild(f);continue}let x=/^\s*>\s?(.*)$/.exec(h);if(x){r(),d();let m=[x[1]??""];for(;/^\s*>/.test(i[a+1]??"");a++)m.push((i[a+1]??"").replace(/^\s*>\s?/,""));let f=t.createElement("blockquote");F(f,m.join(`
6
+ `),s),o.appendChild(f);continue}let g=/^\s*(?:([-*+])|(\d+)[.)])\s+(.*)$/.exec(h);if(g){r();let m=g[1]?"ul":"ol";if(!p||p.tagName.toLowerCase()!==m){if(p=t.createElement(m),m==="ol"&&g[2]&&g[2]!=="1")p.setAttribute("start",g[2]);o.appendChild(p)}let f=t.createElement("li");S(t,(g[3]??"").trimEnd(),s,f),p.appendChild(f);continue}let L=/^\s*#{1,6}\s+(.*)$/.exec(h);if(L){r(),d();let m=t.createElement("p"),f=t.createElement("strong");S(t,L[1]??"",s,f),m.appendChild(f),o.appendChild(m);continue}if(!h.trim()){r();let m=i.slice(a+1).find((y)=>y.trim())??"",f=p?.tagName.toLowerCase()==="ol"?/^\s*\d+[.)]\s+/:/^\s*[-*+]\s+/;if(!p||!f.test(m))d();continue}if(p&&/^\s{2,}\S/.test(h)){let m=p.lastElementChild;if(m){m.appendChild(ne(t,i[a-1]??"")),S(t,h.trim(),s,m);continue}}d(),c.push(h)}r(),e.replaceChildren(o)}var he={limit:4,budgetTokens:1500};class V{options;turns=[];engine=null;storePromise=null;historyKey;key;onProgress=null;constructor(e){this.options=e;this.key=e.storageKey??"murmur",this.historyKey=`${e.storageKey??"murmur"}-chat:${location.pathname.split("/")[1]??""}`;try{let n=sessionStorage.getItem(this.historyKey);if(n)this.turns=JSON.parse(n)}catch{this.turns=[]}}get mode(){if(this.options.model)return"custom";if(this.options.llm?.endpoint)return"proxy";if(!this.localAllowed)return"visitor";return U(`${this.key}-local`)==="0"?"visitor":"local"}get localAllowed(){return!this.options.model&&!this.options.llm?.endpoint&&this.options.local!==!1}async settleChoice(){if(!this.localAllowed||U(`${this.key}-local`)!==null)return;let[{isConfigured:e},n]=await Promise.all([(q("t0qn2m4r"),import("./index-t0qn2m4r.js")),this.store()]),s=await n.load();if(s&&e(s))W(`${this.key}-local`,"0")}async localSpec(){let{local:e}=this.options;if(e&&typeof e==="object")return e;return(await (q("db4ne93m"),import("./index-db4ne93m.js"))).DEFAULT_LOCAL_MODEL}useLocal(e){W(`${this.key}-local`,e?"1":"0"),this.engine=null}get needsDownloadConsent(){return this.mode==="local"&&U(`${this.key}-local-consent`)!=="1"}agreeToDownload(){W(`${this.key}-local-consent`,"1")}persist(){try{sessionStorage.setItem(this.historyKey,JSON.stringify(this.turns.slice(-30)))}catch{}}clear(){this.turns=[],this.persist()}store(){return this.storePromise??=(q("t0qn2m4r"),import("./index-t0qn2m4r.js")).then((e)=>{let n={};if(this.options.catalogUrl)n.catalogUrl=this.options.catalogUrl;if(this.options.storageKey)n.storageKey=this.options.storageKey;return e.visitorStore(this.options.llm??{},n)}),this.storePromise}async settings(){if(this.mode==="custom")return null;let e=await (q("t0qn2m4r"),import("./index-t0qn2m4r.js"));return e.resolveSettings(this.options.llm??{},this.mode==="visitor"?await this.store():null)}async needsSetup(){return this.mode==="visitor"&&!await this.settings()}async canRunLocally(){return(await (q("db4ne93m"),import("./index-db4ne93m.js"))).hasWebGPU()}async loadIndex(){let{index:e}=this.options;if(e&&typeof e!=="string")return e;let{isMurmurIndex:n}=await (q("hpx6rpea"),import("./chunk-hpx6rpea.js"));if(e){let t=await fetch(new URL(e,location.href));if(!t.ok)throw Error(`murmur: index ${t.status}`);let o=await t.json();if(!n(o))throw Error("murmur: not a murmur index");return o}let{indexDocument:s}=await (q("gyd02jvt"),import("./index-gyd02jvt.js"));return s(document,location.pathname+location.search)}createEngine(){return(async()=>{let[{createMurmur:e},n]=await Promise.all([(q("d6t6cjc7"),import("./murmur-d6t6cjc7.js")),this.options.retriever??(q("6qvn2maq"),import("./retriever-6qvn2maq.js")).then(async(i)=>i.bm25Retriever(await this.loadIndex()))]),s=this.mode==="local",t=this.options.model??(s?async()=>{let{localModel:i}=await (q("db4ne93m"),import("./index-db4ne93m.js"));return i({spec:await this.localSpec(),onProgress:(c)=>this.onProgress?.(c)})}:async()=>{let i=await this.settings();if(!i)throw new P;let{loadModel:c}=await (q("t0qn2m4r"),import("./index-t0qn2m4r.js"));return c(i)}),o={retriever:n,model:t,...s?he:{}};if(this.options.instructions)o.instructions=this.options.instructions;if(this.options.lang)o.language=this.options.lang;return e(o)})()}async ask(e,n,s){let t=this.turns.filter((i)=>!i.error).map(({role:i,content:c})=>({role:i,content:c}));this.turns.push({role:"user",content:e});let o={role:"assistant",content:""};this.turns.push(o),this.persist();try{this.engine??=this.createEngine();let c=await(await this.engine.catch((r)=>{throw this.engine=null,r})).ask(e,{history:t,signal:s});o.passages=c.passages.map(({url:r,anchor:d,title:a,heading:h})=>({url:r,anchor:d,title:a,heading:h}));for await(let r of c.textStream)o.content+=r,n(o.content,o);let p=await c.done;o.content=p.text,o.cited=p.cited}catch(i){if(s.aborted)o.cited=[];else if(i instanceof P)throw this.turns.splice(-2,2),i;else o.error=await this.describe(i)}finally{this.persist()}return o}async describe(e){if(e instanceof Error&&e.name==="LocalModelError")return`local-${e.code??"load"}|${e.message}`;try{let{describeError:n}=await (q("t0qn2m4r"),import("./index-t0qn2m4r.js")),s=this.mode==="custom"||this.mode==="local"?null:await this.settings(),t=n(e,s?.apiKey);return`${t.code}|${t.message}`}catch{return`unknown|${e instanceof Error?e.message:String(e)}`}}}function U(e){try{return localStorage.getItem(e)}catch{return null}}function W(e,n){try{if(n===null)localStorage.removeItem(e);else localStorage.setItem(e,n)}catch{}}class P extends Error{constructor(){super("murmur: no model set up")}}var oe=`
7
7
  :host {
8
8
  --accent: var(--murmur-accent, #211c17);
9
9
  --accent-ink: var(--murmur-accent-ink, #f6efe0);
@@ -220,4 +220,4 @@ progress::-moz-progress-bar { background: var(--lamp); }
220
220
  @media (prefers-reduced-motion: reduce) {
221
221
  *, .panel { animation: none !important; transition: none !important; }
222
222
  }
223
- `;var he={auth:"errorAuth","auth-or-network":"errorNetwork","rate-limit":"errorRate",overloaded:"errorRate","local-webgpu":"localNoWebGPU","local-load":"localLoadFailed"};function V(e,n,s){if(e>=1000)return`${(e/1000).toLocaleString(n,{maximumFractionDigits:1})} ${s.gigabytes}`;return`${Math.round(e).toLocaleString(n)} ${s.megabytes}`}var me=typeof HTMLElement>"u"?class{}:HTMLElement;class j extends me{options={};session=null;t=K("en");uiLang="en";root;launcher;panel;log;chatView;setupView;input;sendBtn;settingsBtn;controller=null;built=!1;unsubscribe=null;constructor(){super();this.root=this.attachShadow({mode:"open"})}configure(e){if(this.options={...this.options,...e},this.isConnected)this.build();return this}get isOpen(){return this.hasAttribute("inline")||this.launcher?.getAttribute("aria-expanded")==="true"}connectedCallback(){this.build()}disconnectedCallback(){this.controller?.abort(),this.unsubscribe?.()}async open(){if(!this.built)this.build();this.launcher.setAttribute("aria-expanded","true"),this.panel.hidden=!1,this.session?.persist(),G("set",this.openKey),this.input.focus()}close(){if(this.hasAttribute("inline"))return;this.launcher.setAttribute("aria-expanded","false"),this.panel.hidden=!0,G("remove",this.openKey),this.launcher.focus()}async ask(e){if(!this.isOpen)await this.open();this.input.value=e,await this.submit()}get openKey(){return`${this.options.storageKey??"murmur"}-open`}build(){let e=this.options,n=Q(e.lang,document.documentElement.lang,navigator.language);this.uiLang=n;let s={...e.messages};if(this.t=K(n,s),e.position)this.setAttribute("position",e.position);if(e.theme&&e.theme!=="auto")this.setAttribute("theme",e.theme);if(e.accent)this.style.setProperty("--murmur-accent",e.accent);this.controller?.abort(),this.unsubscribe?.();let t=this.ownerDocument,o=t.createElement("style");o.textContent=se,this.launcher=a(t,"button",{class:"launcher",type:"button","aria-expanded":"false"}),this.launcher.setAttribute("aria-controls","murmur-panel"),this.launcher.append(a(t,"span",{class:"lamp","aria-hidden":"true"}),v(t,"span",this.t.open)),this.launcher.addEventListener("click",()=>void this.open()),this.panel=a(t,"section",{class:"panel",id:"murmur-panel",role:"dialog"}),this.panel.setAttribute("aria-label",this.t.title),this.panel.hidden=!this.hasAttribute("inline"),this.panel.addEventListener("keydown",(h)=>{if(h.key==="Escape")this.close()});let i=a(t,"header"),l=v(t,"h2",this.t.title),p=q(t,"reset",this.t.newChat);p.addEventListener("click",()=>{this.controller?.abort(),this.session?.clear(),this.renderChat(),this.input.focus()}),this.settingsBtn=q(t,"settings",this.t.settings),this.settingsBtn.hidden=!!e.model||!!e.llm?.endpoint||!!e.local,this.settingsBtn.addEventListener("click",()=>void this.showSetup());let c=q(t,"close",this.t.close);c.hidden=this.hasAttribute("inline"),c.addEventListener("click",()=>this.close()),i.append(l,p,this.settingsBtn,c),this.chatView=a(t,"div",{class:"chat"}),this.chatView.style.cssText="display:flex;flex-direction:column;flex:1;min-height:0",this.log=a(t,"div",{class:"log",role:"log","aria-live":"polite","aria-relevant":"additions"});let d=a(t,"form",{class:"composer"});this.input=a(t,"textarea",{rows:"1",placeholder:this.t.placeholder}),this.input.setAttribute("aria-label",this.t.placeholder),this.input.addEventListener("input",()=>this.autosize()),this.input.addEventListener("keydown",(h)=>{if(h.key==="Enter"&&!h.shiftKey&&!h.isComposing)h.preventDefault(),this.submit()}),this.sendBtn=a(t,"button",{class:"send",type:"submit"}),this.setSendMode("send"),d.addEventListener("submit",(h)=>{if(h.preventDefault(),this.controller)this.controller.abort();else this.submit()}),d.append(this.input,this.sendBtn);let r=a(t,"footer"),u=a(t,"a",{href:"https://maxgfr.github.io/murmur/",target:"_blank",rel:"noopener"});if(u.textContent=this.t.poweredBy,r.append(u),this.chatView.append(this.log,d,r),this.setupView=a(t,"div",{class:"setup"}),this.setupView.hidden=!0,this.panel.append(i,this.chatView,this.setupView),this.root.replaceChildren(o,this.launcher,this.panel),this.hasAttribute("inline"))this.launcher.hidden=!0;if(this.built=!0,this.session=new W({...e,lang:n}),this.renderChat(),e.open||!this.hasAttribute("inline")&&G("get",this.openKey))this.open()}autosize(){this.input.style.height="auto",this.input.style.height=`${Math.min(this.input.scrollHeight,140)}px`}setSendMode(e){this.sendBtn.replaceChildren(B(this.ownerDocument,e)),this.sendBtn.setAttribute("aria-label",e==="send"?this.t.send:this.t.stop)}emit(e){this.dispatchEvent(new CustomEvent("murmur:state",{detail:e,bubbles:!0,composed:!0}))}renderChat(){let e=this.ownerDocument,n=this.session?.turns??[],s=[],t=a(e,"div",{class:"msg bot greeting"});t.append(v(e,"p",this.t.greeting)),s.push(t);for(let o of n)s.push(this.turnNode(o));this.log.replaceChildren(...s),this.log.scrollTop=this.log.scrollHeight}turnNode(e){let n=this.ownerDocument;if(e.role==="user"){let t=a(n,"div",{class:"msg user"});return t.textContent=e.content,t}let s=a(n,"div",{class:"msg bot"});return this.fillAnswer(s,e,!0),s}fillAnswer(e,n,s){let t=this.ownerDocument;if(n.error){let[c="unknown",...d]=n.error.split("|"),r=he[c],u=a(t,"div",{class:"error",role:"alert"});u.append(v(t,"p",r?this.t[r]:`${this.t.errorOther} ${d.join("|")}`));let h=a(t,"div",{class:"row"}),x=a(t,"button",{class:"text-btn",type:"button"});if(x.textContent=this.t.retry,x.addEventListener("click",()=>{let b=this.session?.turns??[],k=b.at(-2)?.content??"";if(b.splice(-2,2),this.renderChat(),k)this.ask(k)}),h.append(x),c==="auth"||c==="auth-or-network"){if(!this.settingsBtn.hidden){let b=a(t,"button",{class:"text-btn",type:"button"});b.textContent=this.t.settings,b.addEventListener("click",()=>void this.showSetup()),h.append(b)}}u.append(h),e.replaceChildren(u);return}let o=n.passages??[],i=a(t,"div");U(i,Xe(n.content),(c)=>{let d=o[c-1];if(!d)return null;let r=a(t,"a",{class:"cite",href:At(d)});return r.textContent=String(c),r.setAttribute("aria-label",`${this.t.sources} ${c}: ${d.title}`),r});let l=[i];if(s&&!n.content.trim()&&!o.length){let c=a(t,"p",{class:"status"});c.append(a(t,"span",{class:"lamp off","aria-hidden":"true"}),t.createTextNode(this.t.notFound)),l.push(c)}let p=n.cited??[];if(s&&p.length){l.push(v(t,"p",this.t.sources,"sources-label"));let c=a(t,"ol",{class:"sources"});for(let d of p){let r=o[d-1];if(!r)continue;let u=a(t,"li"),h=a(t,"a",{href:At(r)}),x=v(t,"span",String(d),"cite");x.setAttribute("aria-hidden","true");let b=a(t,"span",{class:"where"});if(b.append(t.createTextNode(r.title||r.url)),r.heading&&r.heading!==r.title)b.append(v(t,"span",` › ${r.heading}`));h.append(x,b),u.append(h),c.append(u)}l.push(c)}e.replaceChildren(...l)}async submit(){let e=this.input.value.trim();if(!e||this.controller||!this.session)return;if(this.session.needsDownloadConsent){await this.showConsent(e);return}if(await this.session.needsSetup()){await this.showSetup(e);return}let n=this.ownerDocument;this.input.value="",this.autosize(),this.log.append(this.turnNode({role:"user",content:e}));let s=a(n,"div",{class:"msg bot"}),t=a(n,"p",{class:"status"});t.append(a(n,"span",{class:"lamp busy","aria-hidden":"true"}),n.createTextNode(this.t.thinking)),s.append(t),this.log.append(s),this.log.scrollTop=this.log.scrollHeight,this.log.setAttribute("aria-busy","true"),this.session.onProgress=(l)=>{if(!t.isConnected)return;let p=a(n,"progress",{max:"1",value:String(l.progress)});p.setAttribute("aria-label",this.t.localLoadingLabel);let c=l.progress>=1?this.t.localPreparing:`${this.t.localLoading} ${Math.round(l.progress*100)} % · ${Math.round(l.loaded/1e6).toLocaleString(this.uiLang)} / ${V(l.total/1e6,this.uiLang,this.t)}`;t.replaceChildren(a(n,"span",{class:"lamp busy","aria-hidden":"true"}),a(n,"span",{class:"grow"})),t.lastElementChild?.append(n.createTextNode(c),p)};let o=new AbortController;this.controller=o,this.setSendMode("stop"),this.emit({state:"searching"});let i=!1;try{let l=await this.session.ask(e,(p,c)=>{if(!i)i=!0,this.emit({state:"streaming",passages:c.passages??[]});let d=this.log.scrollHeight-this.log.scrollTop-this.log.clientHeight<40;if(this.fillAnswer(s,c,!1),d)this.log.scrollTop=this.log.scrollHeight},o.signal);this.fillAnswer(s,l,!0),this.emit(l.error?{state:"error"}:{state:"done",passages:l.passages??[],cited:l.cited??[]})}catch(l){if(s.remove(),this.log.lastElementChild?.remove(),this.emit({state:"idle"}),l instanceof P)await this.showSetup(e);else throw l}finally{this.controller=null,this.setSendMode("send"),this.log.setAttribute("aria-busy","false"),this.log.scrollTop=this.log.scrollHeight}}async showConsent(e){if(!this.session)return;let n=this.ownerDocument,s=this.t,t=this.session,o=await t.localSpec(),i=a(n,"div",{class:"msg bot consent"}),l=a(n,"div",{class:"row"}),p=!!this.options.local,c=()=>{i.remove(),t.useLocal(!1),this.showSetup(e)};if(!await t.canRunLocally()){if(i.append(v(n,"p",s.localNoWebGPU)),!p){let d=a(n,"button",{class:"text-btn",type:"button"});d.textContent=s.useKey,d.addEventListener("click",c),l.append(d)}}else{i.append(v(n,"p",s.localConsent.replace("{name}",o.name).replace("{size}",V(o.sizeMB,this.uiLang,s))));let d=a(n,"button",{class:"primary",type:"button"});if(d.textContent=s.localDownload,d.addEventListener("click",()=>{t.agreeToDownload(),i.remove(),this.input.value=e,this.submit()}),l.append(d),!p){let r=a(n,"button",{class:"link-btn",type:"button"});r.textContent=s.useKey,r.addEventListener("click",c),l.append(r)}}i.append(l),this.log.append(i),this.log.scrollTop=this.log.scrollHeight,l.querySelector("button")?.focus()}async showSetup(e){if(!this.session)return;let n=this.ownerDocument,s=await this.session.store();await s.load(),s.open(),this.chatView.hidden=!0,this.setupView.hidden=!1;let t=this.t,o=a(n,"button",{class:"link-btn",type:"button"});o.textContent=t.back,o.addEventListener("click",()=>this.hideSetup());let i=v(n,"h3",t.setupTitle);i.style.cssText="margin:0;font-size:17px;font-weight:650";let l=v(n,"p",t.setupIntro,"intro"),p=this.session,c=await p.localSpec(),d=a(n,"div",{class:"local-choice"}),r=a(n,"button",{class:"primary",type:"button"});r.textContent=t.localOption;let u=v(n,"small",t.localOptionHint.replace("{name}",c.name).replace("{size}",V(c.sizeMB,this.uiLang,t)));if(d.append(r,u),r.addEventListener("click",()=>{if(p.useLocal(!0),this.hideSetup(),e)this.input.value=e,this.submit()}),p.canRunLocally().then((g)=>{if(r.disabled=!g,!g)u.textContent=t.localNoWebGPU}),p.mode==="local"){r.textContent=t.localActive,r.disabled=!0;let g=a(n,"button",{class:"link-btn",type:"button"});g.textContent=t.useKey,g.addEventListener("click",()=>{p.useLocal(!1),r.textContent=t.localOption,r.disabled=!1,g.remove()}),d.append(g)}let h=v(n,"p",t.orKey,"or"),x=oe(n,t.local),b=I(n,t.provider,a(n,"select")),k=b.control,m=I(n,t.model,a(n,"select")),f=m.control,y=I(n,t.endpoint,a(n,"input",{type:"url",inputmode:"url"}),t.localHint),L=y.control,C=I(n,t.model,a(n,"input",{type:"text",autocomplete:"off"})),w=C.control,T=a(n,"div",{class:"presets"});for(let g of["ollama","lmstudio"]){let E=a(n,"button",{class:"text-btn",type:"button"});E.textContent=g==="ollama"?"Ollama":"LM Studio",E.addEventListener("click",async()=>{let{ENDPOINT_PRESETS:M}=await (F("nesgnf2n"),import("./index-nesgnf2n.js"));s.applyPreset(M[g])}),T.append(E)}let A=I(n,t.apiKey,a(n,"input",{type:"password",autocomplete:"off",spellcheck:"false"}),t.apiKeyHint),O=A.control,R=oe(n,t.remember),H=a(n,"button",{class:"text-btn",type:"button"});H.textContent=t.test;let N=a(n,"p",{class:"result",role:"status"});N.style.margin="0";let z=a(n,"button",{class:"primary",type:"button"});z.textContent=t.save;let D=a(n,"button",{class:"link-btn",type:"button"});D.textContent=t.forget,x.input.addEventListener("change",()=>s.toggleCustom(x.input.checked)),k.addEventListener("change",()=>s.selectProvider(k.value)),f.addEventListener("change",()=>s.selectModel(f.value)),L.addEventListener("input",()=>s.setEndpoint(L.value)),w.addEventListener("input",()=>s.setCustomModel(w.value)),O.addEventListener("input",()=>s.setApiKey(O.value)),R.input.addEventListener("change",()=>s.setRememberKey(R.input.checked)),H.addEventListener("click",()=>void s.test()),z.addEventListener("click",async()=>{if(!(await s.save()).ok)return;if(p.useLocal(!1),this.hideSetup(),e)this.input.value=e,this.submit()}),D.addEventListener("click",()=>void s.clear());let Y=a(n,"div",{class:"row"});Y.append(H,N),this.setupView.replaceChildren(o,i,l,d,h,x.label,b.label,m.label,T,y.label,C.label,A.label,R.label,Y,z,D);let ae=(g)=>{let E=g.draft.custom;if(x.input.checked=E,b.label.hidden=E,m.label.hidden=E,T.hidden=!E,y.label.hidden=!E,C.label.hidden=!E,g.catalogStatus==="ready")ge(n,k,g,t),fe(n,f,g);else k.replaceChildren(_(n,"",g.catalogStatus==="error"?t.catalogError:t.loadingCatalog)),f.replaceChildren();if(L!==this.root.activeElement)L.value=g.draft.customEndpoint;if(w!==this.root.activeElement)w.value=g.draft.customModel;if(O!==this.root.activeElement)O.value=g.apiKey;R.input.checked=g.draft.rememberKey,H.disabled=!g.canTest||g.testing,H.textContent=g.testing?t.testing:t.test,z.disabled=!g.canSave;let M=g.testResult;N.className=M?M.ok?"result ok":"result fail":"result",N.textContent=!M?"":M.ok?t.testOk:`${t.testFail} ${M.reason}${M.message?` (${M.message})`:""}`};this.unsubscribe?.(),this.unsubscribe=s.subscribe(ae),this.setupView.scrollTop=0,o.focus()}hideSetup(){this.unsubscribe?.(),this.unsubscribe=null,this.setupView.hidden=!0,this.chatView.hidden=!1,this.input.focus()}}function ge(e,n,s,t){let o=[[t.recommended,s.providers.recommended],[t.otherProviders,s.providers.others]],i=`${s.draft.providerId}|${s.providers.recommended.length+s.providers.others.length}`;if(n.dataset.sig===i)return;n.dataset.sig=i,n.replaceChildren(...o.filter(([,l])=>l.length).map(([l,p])=>{let c=e.createElement("optgroup");return c.label=l,c.append(...p.map((d)=>_(e,d.id,d.name))),c})),n.value=s.draft.providerId}function fe(e,n,s){let t=`${s.draft.providerId}|${s.draft.model}|${s.models.length}`;if(n.dataset.sig===t)return;n.dataset.sig=t;let o=s.recommendedModel?.id;n.replaceChildren(...s.models.map((i)=>_(e,i.id,i.id===o?`${i.name} ★`:i.name))),n.value=s.draft.model}function G(e,n){try{if(e==="set")sessionStorage.setItem(n,"1");else if(e==="remove")sessionStorage.removeItem(n);else return sessionStorage.getItem(n)!==null}catch{}return!1}function a(e,n,s={}){let t=e.createElement(n);for(let[o,i]of Object.entries(s))t.setAttribute(o,i);return t}function v(e,n,s,t){let o=e.createElement(n);if(o.textContent=s,t)o.className=t;return o}function _(e,n,s){let t=e.createElement("option");return t.value=n,t.textContent=s,t}function q(e,n,s){let t=a(e,"button",{class:"icon-btn",type:"button",title:s});return t.setAttribute("aria-label",s),t.append(B(e,n)),t}function I(e,n,s,t){let o=a(e,"label",{class:"field"});if(o.append(v(e,"span",n),s),t)o.append(v(e,"small",t));return{label:o,control:s}}function oe(e,n){let s=a(e,"label",{class:"check"}),t=a(e,"input",{type:"checkbox"});return s.append(t,e.createTextNode(n)),{label:s,input:t}}function be(e="murmur-chat"){if(!customElements.get(e))customElements.define(e,class extends j{});return customElements.get(e)}function ie(e={}){be();let{target:n,inline:s,...t}=e,o=document.createElement("murmur-chat");if(s)o.setAttribute("inline","");return o.configure(t),(n??document.body).append(o),o}function ve(e,n){let s={};if(e.index)s.index=new URL(e.index,n).href;let t={};if(e.provider)t.provider=e.provider;if(e.model)t.model=e.model;if(e.endpoint)t.endpoint=e.endpoint;if(Object.keys(t).length)s.llm=t;if(e.instructions)s.instructions=e.instructions;if(e.lang)s.lang=e.lang;let o={};if(e.title)o.title=e.title;if(e.greeting)o.greeting=e.greeting;if(e.placeholder)o.placeholder=e.placeholder;if(e.button)o.open=e.button;if(Object.keys(o).length)s.messages=o;if(e.position==="bottom-left"||e.position==="bottom-right")s.position=e.position;if(e.theme==="light"||e.theme==="dark"||e.theme==="auto")s.theme=e.theme;if(e.accent)s.accent=e.accent;if(e.catalog)s.catalogUrl=new URL(e.catalog,n).href;if(e.storageKey)s.storageKey=e.storageKey;if(e.open==="true")s.open=!0;if(e.local==="true")s.local=!0;return s}function re(){let e=import.meta.url,n=[...document.querySelectorAll("script[src]")].find((t)=>t.src===e&&!t.dataset.murmurReady);if(n)n.dataset.murmurReady="true";let s=ve(n?.dataset??{},location.href);s.catalogUrl??=new URL("./models.json",e).href,ie(s)}if(typeof document<"u"&&!document.querySelector("murmur-chat:not([inline])"))if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",re,{once:!0});else re();export{ve as optionsFromDataset};
223
+ `;var me={auth:"errorAuth","auth-or-network":"errorNetwork","rate-limit":"errorRate",overloaded:"errorRate","local-webgpu":"localNoWebGPU","local-load":"localLoadFailed"};function G(e,n,s){if(e>=1000)return`${(e/1000).toLocaleString(n,{maximumFractionDigits:1})} ${s.gigabytes}`;return`${Math.round(e).toLocaleString(n)} ${s.megabytes}`}var ge=typeof HTMLElement>"u"?class{}:HTMLElement;class Y extends ge{options={};session=null;t=D("en");uiLang="en";root;launcher;panel;log;chatView;setupView;input;sendBtn;settingsBtn;controller=null;built=!1;unsubscribe=null;constructor(){super();this.root=this.attachShadow({mode:"open"})}configure(e){if(this.options={...this.options,...e},this.isConnected)this.build();return this}get isOpen(){return this.hasAttribute("inline")||this.launcher?.getAttribute("aria-expanded")==="true"}connectedCallback(){this.build()}disconnectedCallback(){this.controller?.abort(),this.unsubscribe?.()}async open(){if(!this.built)this.build();this.launcher.setAttribute("aria-expanded","true"),this.panel.hidden=!1,this.session?.persist(),j("set",this.openKey),this.input.focus()}close(){if(this.hasAttribute("inline"))return;this.launcher.setAttribute("aria-expanded","false"),this.panel.hidden=!0,j("remove",this.openKey),this.launcher.focus()}async ask(e){if(!this.isOpen)await this.open();this.input.value=e,await this.submit()}get openKey(){return`${this.options.storageKey??"murmur"}-open`}build(){let e=this.options,n=te(e.lang,document.documentElement.lang,navigator.language);this.uiLang=n;let s={...e.messages};if(this.t=D(n,s),e.position)this.setAttribute("position",e.position);if(e.theme&&e.theme!=="auto")this.setAttribute("theme",e.theme);if(e.accent)this.style.setProperty("--murmur-accent",e.accent);this.controller?.abort(),this.unsubscribe?.();let t=this.ownerDocument,o=t.createElement("style");o.textContent=oe,this.launcher=l(t,"button",{class:"launcher",type:"button","aria-expanded":"false"}),this.launcher.setAttribute("aria-controls","murmur-panel"),this.launcher.append(l(t,"span",{class:"lamp","aria-hidden":"true"}),v(t,"span",this.t.open)),this.launcher.addEventListener("click",()=>void this.open()),this.panel=l(t,"section",{class:"panel",id:"murmur-panel",role:"dialog"}),this.panel.setAttribute("aria-label",this.t.title),this.panel.hidden=!this.hasAttribute("inline"),this.panel.addEventListener("keydown",(u)=>{if(u.key==="Escape")this.close()});let i=l(t,"header"),c=v(t,"h2",this.t.title),p=_(t,"reset",this.t.newChat);p.addEventListener("click",()=>{this.controller?.abort(),this.session?.clear(),this.renderChat(),this.input.focus()}),this.settingsBtn=_(t,"settings",this.t.settings),this.settingsBtn.hidden=!!e.model||!!e.llm?.endpoint,this.settingsBtn.addEventListener("click",()=>void this.showSetup());let r=_(t,"close",this.t.close);r.hidden=this.hasAttribute("inline"),r.addEventListener("click",()=>this.close()),i.append(c,p,this.settingsBtn,r),this.chatView=l(t,"div",{class:"chat"}),this.chatView.style.cssText="display:flex;flex-direction:column;flex:1;min-height:0",this.log=l(t,"div",{class:"log",role:"log","aria-live":"polite","aria-relevant":"additions"});let d=l(t,"form",{class:"composer"});this.input=l(t,"textarea",{rows:"1",placeholder:this.t.placeholder}),this.input.setAttribute("aria-label",this.t.placeholder),this.input.addEventListener("input",()=>this.autosize()),this.input.addEventListener("keydown",(u)=>{if(u.key==="Enter"&&!u.shiftKey&&!u.isComposing)u.preventDefault(),this.submit()}),this.sendBtn=l(t,"button",{class:"send",type:"submit"}),this.setSendMode("send"),d.addEventListener("submit",(u)=>{if(u.preventDefault(),this.controller)this.controller.abort();else this.submit()}),d.append(this.input,this.sendBtn);let a=l(t,"footer"),h=l(t,"a",{href:"https://maxgfr.github.io/murmur/",target:"_blank",rel:"noopener"});if(h.textContent=this.t.poweredBy,a.append(h),this.chatView.append(this.log,d,a),this.setupView=l(t,"div",{class:"setup"}),this.setupView.hidden=!0,this.panel.append(i,this.chatView,this.setupView),this.root.replaceChildren(o,this.launcher,this.panel),this.hasAttribute("inline"))this.launcher.hidden=!0;if(this.built=!0,this.session=new V({...e,lang:n}),this.renderChat(),e.open||!this.hasAttribute("inline")&&j("get",this.openKey))this.open()}autosize(){this.input.style.height="auto",this.input.style.height=`${Math.min(this.input.scrollHeight,140)}px`}setSendMode(e){this.sendBtn.replaceChildren(B(this.ownerDocument,e)),this.sendBtn.setAttribute("aria-label",e==="send"?this.t.send:this.t.stop)}emit(e){this.dispatchEvent(new CustomEvent("murmur:state",{detail:e,bubbles:!0,composed:!0}))}renderChat(){let e=this.ownerDocument,n=this.session?.turns??[],s=[],t=l(e,"div",{class:"msg bot greeting"});t.append(v(e,"p",this.t.greeting)),s.push(t);for(let o of n)s.push(this.turnNode(o));this.log.replaceChildren(...s),this.log.scrollTop=this.log.scrollHeight}turnNode(e){let n=this.ownerDocument;if(e.role==="user"){let t=l(n,"div",{class:"msg user"});return t.textContent=e.content,t}let s=l(n,"div",{class:"msg bot"});return this.fillAnswer(s,e,!0),s}fillAnswer(e,n,s){let t=this.ownerDocument;if(n.error){let[r="unknown",...d]=n.error.split("|"),a=me[r],h=l(t,"div",{class:"error",role:"alert"});h.append(v(t,"p",a?this.t[a]:`${this.t.errorOther} ${d.join("|")}`));let u=l(t,"div",{class:"row"}),x=l(t,"button",{class:"text-btn",type:"button"});if(x.textContent=this.t.retry,x.addEventListener("click",()=>{let g=this.session?.turns??[],L=g.at(-2)?.content??"";if(g.splice(-2,2),this.renderChat(),L)this.ask(L)}),u.append(x),r==="auth"||r==="auth-or-network"){if(!this.settingsBtn.hidden){let g=l(t,"button",{class:"text-btn",type:"button"});g.textContent=this.t.settings,g.addEventListener("click",()=>void this.showSetup()),u.append(g)}}h.append(u),e.replaceChildren(h);return}let o=n.passages??[],i=l(t,"div");F(i,Xe(n.content),(r)=>{let d=o[r-1];if(!d)return null;let a=l(t,"a",{class:"cite",href:Et(d)});return a.textContent=String(r),a.setAttribute("aria-label",`${this.t.sources} ${r}: ${d.title}`),a});let c=[i];if(s&&!n.content.trim()&&!o.length){let r=l(t,"p",{class:"status"});r.append(l(t,"span",{class:"lamp off","aria-hidden":"true"}),t.createTextNode(this.t.notFound)),c.push(r)}let p=n.cited??[];if(s&&p.length){c.push(v(t,"p",this.t.sources,"sources-label"));let r=l(t,"ol",{class:"sources"});for(let d of p){let a=o[d-1];if(!a)continue;let h=l(t,"li"),u=l(t,"a",{href:Et(a)}),x=v(t,"span",String(d),"cite");x.setAttribute("aria-hidden","true");let g=l(t,"span",{class:"where"});if(g.append(t.createTextNode(a.title||a.url)),a.heading&&a.heading!==a.title)g.append(v(t,"span",` › ${a.heading}`));u.append(x,g),h.append(u),r.append(h)}c.push(r)}e.replaceChildren(...c)}async submit(){let e=this.input.value.trim();if(!e||this.controller||!this.session)return;if(await this.session.settleChoice(),this.session.needsDownloadConsent){await this.showConsent(e);return}if(await this.session.needsSetup()){await this.showSetup(e);return}let n=this.ownerDocument;this.input.value="",this.autosize(),this.log.append(this.turnNode({role:"user",content:e}));let s=l(n,"div",{class:"msg bot"}),t=l(n,"p",{class:"status"});t.append(l(n,"span",{class:"lamp busy","aria-hidden":"true"}),n.createTextNode(this.t.thinking)),s.append(t),this.log.append(s),this.log.scrollTop=this.log.scrollHeight,this.log.setAttribute("aria-busy","true"),this.session.onProgress=(c)=>{if(!t.isConnected)return;let p=l(n,"progress",{max:"1",value:String(c.progress)});p.setAttribute("aria-label",this.t.localLoadingLabel);let r=c.progress>=1?this.t.localPreparing:`${this.t.localLoading} ${Math.round(c.progress*100)} % · ${Math.round(c.loaded/1e6).toLocaleString(this.uiLang)} / ${G(c.total/1e6,this.uiLang,this.t)}`;t.replaceChildren(l(n,"span",{class:"lamp busy","aria-hidden":"true"}),l(n,"span",{class:"grow"})),t.lastElementChild?.append(n.createTextNode(r),p)};let o=new AbortController;this.controller=o,this.setSendMode("stop"),this.emit({state:"searching"});let i=!1;try{let c=await this.session.ask(e,(p,r)=>{if(!i)i=!0,this.emit({state:"streaming",passages:r.passages??[]});let d=this.log.scrollHeight-this.log.scrollTop-this.log.clientHeight<40;if(this.fillAnswer(s,r,!1),d)this.log.scrollTop=this.log.scrollHeight},o.signal);this.fillAnswer(s,c,!0),this.emit(c.error?{state:"error"}:{state:"done",passages:c.passages??[],cited:c.cited??[]})}catch(c){if(s.remove(),this.log.lastElementChild?.remove(),this.emit({state:"idle"}),c instanceof P)await this.showSetup(e);else throw c}finally{this.controller=null,this.setSendMode("send"),this.log.setAttribute("aria-busy","false"),this.log.scrollTop=this.log.scrollHeight}}async showConsent(e){if(!this.session)return;let n=this.ownerDocument,s=this.t,t=this.session,o=await t.localSpec(),i=l(n,"div",{class:"msg bot consent"}),c=l(n,"div",{class:"row"}),p=()=>{i.remove(),t.useLocal(!1),this.showSetup(e)};if(!await t.canRunLocally()){i.append(v(n,"p",s.localNoWebGPU));let r=l(n,"button",{class:"primary",type:"button"});r.textContent=s.useKey,r.addEventListener("click",p),c.append(r)}else{i.append(v(n,"p",s.localConsent.replace("{name}",o.name).replace("{size}",G(o.sizeMB,this.uiLang,s))));let r=l(n,"button",{class:"primary",type:"button"});r.textContent=s.localDownload,r.addEventListener("click",()=>{t.agreeToDownload(),i.remove(),this.input.value=e,this.submit()}),c.append(r);let d=l(n,"button",{class:"link-btn",type:"button"});d.textContent=s.useKey,d.addEventListener("click",p),c.append(d)}i.append(c),this.log.append(i),this.log.scrollTop=this.log.scrollHeight,c.querySelector("button")?.focus()}async showSetup(e){if(!this.session)return;let n=this.ownerDocument,s=await this.session.store();await s.load(),s.open(),this.chatView.hidden=!0,this.setupView.hidden=!1;let t=this.t,o=l(n,"button",{class:"link-btn",type:"button"});o.textContent=t.back,o.addEventListener("click",()=>this.hideSetup());let i=v(n,"h3",t.setupTitle);i.style.cssText="margin:0;font-size:17px;font-weight:650";let c=v(n,"p",t.setupIntro,"intro"),p=this.session,r=await p.localSpec(),d=l(n,"div",{class:"local-choice"}),a=l(n,"button",{class:"primary",type:"button"});a.textContent=t.localOption;let h=v(n,"small",t.localOptionHint.replace("{name}",r.name).replace("{size}",G(r.sizeMB,this.uiLang,t)));d.append(a,h),a.addEventListener("click",()=>{if(p.useLocal(!0),this.hideSetup(),e)this.input.value=e,this.submit()});let u=l(n,"button",{class:"link-btn",type:"button"});if(u.textContent=t.useKey,u.addEventListener("click",()=>{p.useLocal(!1),a.textContent=t.localOption,a.disabled=!1,u.remove()}),p.mode==="local")a.textContent=t.localActive,a.disabled=!0,d.append(u);p.canRunLocally().then((b)=>{if(b)return;a.textContent=t.localOption,a.disabled=!0,h.textContent=t.localNoWebGPU,u.remove()});let x=v(n,"p",t.orKey,"or");d.hidden=x.hidden=!p.localAllowed;let g=ie(n,t.local),L=I(n,t.provider,l(n,"select")),m=L.control,f=I(n,t.model,l(n,"select")),y=f.control,E=I(n,t.endpoint,l(n,"input",{type:"url",inputmode:"url"}),t.localHint),C=E.control,w=I(n,t.model,l(n,"input",{type:"text",autocomplete:"off"})),T=w.control,A=l(n,"div",{class:"presets"});for(let b of["ollama","lmstudio"]){let k=l(n,"button",{class:"text-btn",type:"button"});k.textContent=b==="ollama"?"Ollama":"LM Studio",k.addEventListener("click",async()=>{let{ENDPOINT_PRESETS:M}=await (q("qc8kgsdt"),import("./index-qc8kgsdt.js"));s.applyPreset(M[b])}),A.append(k)}let Z=I(n,t.apiKey,l(n,"input",{type:"password",autocomplete:"off",spellcheck:"false"}),t.apiKeyHint),O=Z.control,R=ie(n,t.remember),H=l(n,"button",{class:"text-btn",type:"button"});H.textContent=t.test;let N=l(n,"p",{class:"result",role:"status"});N.style.margin="0";let z=l(n,"button",{class:"primary",type:"button"});z.textContent=t.save;let K=l(n,"button",{class:"link-btn",type:"button"});K.textContent=t.forget,g.input.addEventListener("change",()=>s.toggleCustom(g.input.checked)),m.addEventListener("change",()=>s.selectProvider(m.value)),y.addEventListener("change",()=>s.selectModel(y.value)),C.addEventListener("input",()=>s.setEndpoint(C.value)),T.addEventListener("input",()=>s.setCustomModel(T.value)),O.addEventListener("input",()=>s.setApiKey(O.value)),R.input.addEventListener("change",()=>s.setRememberKey(R.input.checked)),H.addEventListener("click",()=>void s.test()),z.addEventListener("click",async()=>{if(!(await s.save()).ok)return;if(p.useLocal(!1),this.hideSetup(),e)this.input.value=e,this.submit()}),K.addEventListener("click",()=>void s.clear());let Q=l(n,"div",{class:"row"});Q.append(H,N),this.setupView.replaceChildren(o,i,c,d,x,g.label,L.label,f.label,A,E.label,w.label,Z.label,R.label,Q,z,K);let le=(b)=>{let k=b.draft.custom;if(g.input.checked=k,L.label.hidden=k,f.label.hidden=k,A.hidden=!k,E.label.hidden=!k,w.label.hidden=!k,b.catalogStatus==="ready")fe(n,m,b,t),be(n,y,b);else m.replaceChildren(J(n,"",b.catalogStatus==="error"?t.catalogError:t.loadingCatalog)),y.replaceChildren();if(C!==this.root.activeElement)C.value=b.draft.customEndpoint;if(T!==this.root.activeElement)T.value=b.draft.customModel;if(O!==this.root.activeElement)O.value=b.apiKey;R.input.checked=b.draft.rememberKey,H.disabled=!b.canTest||b.testing,H.textContent=b.testing?t.testing:t.test,z.disabled=!b.canSave;let M=b.testResult;N.className=M?M.ok?"result ok":"result fail":"result",N.textContent=!M?"":M.ok?t.testOk:`${t.testFail} ${M.reason}${M.message?` (${M.message})`:""}`};this.unsubscribe?.(),this.unsubscribe=s.subscribe(le),this.setupView.scrollTop=0,o.focus()}hideSetup(){this.unsubscribe?.(),this.unsubscribe=null,this.setupView.hidden=!0,this.chatView.hidden=!1,this.input.focus()}}function fe(e,n,s,t){let o=[[t.recommended,s.providers.recommended],[t.otherProviders,s.providers.others]],i=`${s.draft.providerId}|${s.providers.recommended.length+s.providers.others.length}`;if(n.dataset.sig===i)return;n.dataset.sig=i,n.replaceChildren(...o.filter(([,c])=>c.length).map(([c,p])=>{let r=e.createElement("optgroup");return r.label=c,r.append(...p.map((d)=>J(e,d.id,d.name))),r})),n.value=s.draft.providerId}function be(e,n,s){let t=`${s.draft.providerId}|${s.draft.model}|${s.models.length}`;if(n.dataset.sig===t)return;n.dataset.sig=t;let o=s.recommendedModel?.id;n.replaceChildren(...s.models.map((i)=>J(e,i.id,i.id===o?`${i.name} ★`:i.name))),n.value=s.draft.model}function j(e,n){try{if(e==="set")sessionStorage.setItem(n,"1");else if(e==="remove")sessionStorage.removeItem(n);else return sessionStorage.getItem(n)!==null}catch{}return!1}function l(e,n,s={}){let t=e.createElement(n);for(let[o,i]of Object.entries(s))t.setAttribute(o,i);return t}function v(e,n,s,t){let o=e.createElement(n);if(o.textContent=s,t)o.className=t;return o}function J(e,n,s){let t=e.createElement("option");return t.value=n,t.textContent=s,t}function _(e,n,s){let t=l(e,"button",{class:"icon-btn",type:"button",title:s});return t.setAttribute("aria-label",s),t.append(B(e,n)),t}function I(e,n,s,t){let o=l(e,"label",{class:"field"});if(o.append(v(e,"span",n),s),t)o.append(v(e,"small",t));return{label:o,control:s}}function ie(e,n){let s=l(e,"label",{class:"check"}),t=l(e,"input",{type:"checkbox"});return s.append(t,e.createTextNode(n)),{label:s,input:t}}function ve(e="murmur-chat"){if(!customElements.get(e))customElements.define(e,class extends Y{});return customElements.get(e)}function re(e={}){ve();let{target:n,inline:s,...t}=e,o=document.createElement("murmur-chat");if(s)o.setAttribute("inline","");return o.configure(t),(n??document.body).append(o),o}function xe(e,n){let s={};if(e.index)s.index=new URL(e.index,n).href;let t={};if(e.provider)t.provider=e.provider;if(e.model)t.model=e.model;if(e.endpoint)t.endpoint=e.endpoint;if(Object.keys(t).length)s.llm=t;if(e.instructions)s.instructions=e.instructions;if(e.lang)s.lang=e.lang;let o={};if(e.title)o.title=e.title;if(e.greeting)o.greeting=e.greeting;if(e.placeholder)o.placeholder=e.placeholder;if(e.button)o.open=e.button;if(Object.keys(o).length)s.messages=o;if(e.position==="bottom-left"||e.position==="bottom-right")s.position=e.position;if(e.theme==="light"||e.theme==="dark"||e.theme==="auto")s.theme=e.theme;if(e.accent)s.accent=e.accent;if(e.catalog)s.catalogUrl=new URL(e.catalog,n).href;if(e.storageKey)s.storageKey=e.storageKey;if(e.open==="true")s.open=!0;if(e.local==="false")s.local=!1;return s}function ae(){let e=import.meta.url,n=[...document.querySelectorAll("script[src]")].find((t)=>t.src===e&&!t.dataset.murmurReady);if(n)n.dataset.murmurReady="true";let s=xe(n?.dataset??{},location.href);s.catalogUrl??=new URL("./models.json",e).href,re(s)}if(typeof document<"u"&&!document.querySelector("murmur-chat:not([inline])"))if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",ae,{once:!0});else ae();export{xe as optionsFromDataset};
@@ -1,11 +1,11 @@
1
- import{oe}from"./embed-6gef7ym5.js";import{ye,P,me,u,e,r,c,ie,o,t,U,l,y,i,n,k,T,d,N,M,ot,ee,te,q,z,Me,C,R,W,a,s,h,g,ne,O,H,I,D,p,dt,an,E,Ce,Y}from"./embed-jdraznwg.js";function ce(m){return m.replace(/[_-]([a-z])/g,(f)=>f[1].toUpperCase())}function Ne(m,f){let b=ce(m);if(b!==m&&f?.[b]!=null)return b;return m}function be({rawName:m,providerOptions:f,warnings:b}){let _=ce(m);if(_!==m&&f?.[m]!=null)b.push({type:"deprecated",setting:`providerOptions key '${m}'`,message:`Use '${_}' instead.`})}var ge={errorSchema:t({error:t({message:e(),type:e().nullish(),param:ie().nullish(),code:l([e(),r()]).nullish()})}),errorToMessage:(m)=>m.error.message};function $e(m){if(m==null)return te();let f=m.prompt_tokens??0,b=m.completion_tokens??0,_=m.prompt_tokens_details?.cached_tokens??0,w=m.completion_tokens_details?.reasoning_tokens??0;return{inputTokens:{total:f,noCache:f-_,cacheRead:_,cacheWrite:void 0},outputTokens:{total:b,text:Math.max(0,b-w),reasoning:w},raw:m}}function he(m){return m?.providerOptions?.openaiCompatible??{}}function Le(m){switch(m){case"audio/wav":return"wav";case"audio/mp3":case"audio/mpeg":return"mp3";default:return null}}function Ae(m,f){let b=he(m);switch(m.type){case"text":return{type:"text",text:m.text,...b};case"file":switch(m.data.type){case"reference":return{type:"file",file:{file_id:H({reference:m.data.reference,provider:f})},...b};case"text":throw new u({functionality:"text file parts"});case"url":case"data":{let _=z(m.mediaType);if(_==="image")return{type:"image_url",image_url:{url:m.data.type==="url"?m.data.url.toString():`data:${O({part:m})};base64,${M(m.data.data)}`},...b};if(_==="video")return{type:"video_url",video_url:{url:m.data.type==="url"?m.data.url.toString():`data:${O({part:m})};base64,${M(m.data.data)}`},...b};if(_==="audio"){if(m.data.type==="url")throw new u({functionality:"audio file parts with URLs"});let w=O({part:m}),j=Le(w);if(j===null)throw new u({functionality:`audio media type ${w}`});return{type:"input_audio",input_audio:{data:M(m.data.data),format:j},...b}}if(_==="application"){if(m.data.type==="url")throw new u({functionality:"PDF file parts with URLs"});let w=O({part:m});if(w!=="application/pdf")throw new u({functionality:`file part media type ${w}`});return{type:"file",file:{filename:m.filename??"document.pdf",file_data:`data:application/pdf;base64,${M(m.data.data)}`},...b}}if(_==="text")return{type:"text",text:m.data.type==="url"?m.data.url.toString():typeof m.data.data==="string"?new TextDecoder().decode(N(m.data.data)):new TextDecoder().decode(m.data.data),...b};throw new u({functionality:`file part media type ${m.mediaType}`})}}}}function Be(m,f){if(m.type==="custom")throw new u({functionality:"custom tool content parts"});return Ae(m,f)}function Ke(m,{provider:f="openaiCompatible",providerOptionsKey:b="google",supportsMultiPartToolContent:_=!1}={}){let w=[];for(let{role:j,content:L,...B}of m){let V=he({...B});switch(j){case"system":w.push({role:"system",content:L,...V});break;case"user":if(L.length===1&&L[0].type==="text"){w.push({role:"user",content:L[0].text,...he(L[0])});break}w.push({role:"user",content:L.map((A)=>Ae(A,f)),...V});break;case"assistant":{let A="",x="",v=[];for(let S of L){let Z=he(S);switch(S.type){case"text":A+=S.text;break;case"reasoning":x+=S.text;break;case"tool-call":{let F=S.providerOptions?.[b]?.thoughtSignature??S.providerOptions?.google?.thoughtSignature;v.push({id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)},...Z,...F?{extra_content:{google:{thought_signature:String(F)}}}:{}});break}}}w.push({role:"assistant",content:v.length>0?A||null:A,...x.length>0?{reasoning_content:x}:{},tool_calls:v.length>0?v:void 0,...V});break}case"tool":for(let A of L){if(A.type==="tool-approval-response")continue;let x=A.output,v;switch(x.type){case"text":case"error-text":v=x.value;break;case"execution-denied":v=x.reason??"Tool call execution denied.";break;case"json":case"error-json":v=JSON.stringify(x.value);break;case"content":v=_?x.value.map((Z)=>Be(Z,f)):JSON.stringify(x.value)}let S=he(A);w.push({role:"tool",tool_call_id:A.toolCallId,content:v,...S})}break;default:throw Error(`Unsupported role: ${j}`)}}return w}function we({id:m,model:f,created:b}){return ee({id:m,model:f,created:b||void 0})}function xe(m){switch(m){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}var pe=t({user:e().optional(),reasoningEffort:e().optional(),textVerbosity:e().optional(),strictJsonSchema:c().optional()});function Ve({tools:m,toolChoice:f}){m=m?.length?m:void 0;let b=[];if(m==null)return{tools:void 0,toolChoice:void 0,toolWarnings:b};let _=[];for(let j of m)if(j.type==="provider")b.push({type:"unsupported",feature:`provider-defined tool ${j.id}`});else _.push({type:"function",function:{name:j.name,description:j.description,parameters:j.inputSchema,...j.strict!=null?{strict:j.strict}:{}}});if(f==null)return{tools:_,toolChoice:void 0,toolWarnings:b};let w=f.type;switch(w){case"auto":case"none":case"required":return{tools:_,toolChoice:w,toolWarnings:b};case"tool":return{tools:_,toolChoice:{type:"function",function:{name:f.toolName}},toolWarnings:b};default:throw new u({functionality:`tool choice type: ${w}`})}}var Je=class m{static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.specificationVersion="v4",this.modelId=f,this.config=b;let _=b.errorStructure??ge;this.chunkSchema=We(_.errorSchema),this.failedResponseHandler=I(_),this.supportsStructuredOutputs=b.supportsStructuredOutputs??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}get supportedUrls(){return this.config.supportedUrls?.()??{}}transformRequestBody(f,b){return this.config.transformRequestBody?.(f,b)??f}convertUsage(f){return this.config.convertUsage?.(f)??$e(f)}async getArgs({prompt:f,maxOutputTokens:b,temperature:_,topP:w,topK:j,frequencyPenalty:L,presencePenalty:B,reasoning:V,providerOptions:A,stopSequences:x,responseFormat:v,seed:S,toolChoice:Z,tools:F}){let G=[],se=await h({provider:"openai-compatible",providerOptions:A,schema:pe});if(se!=null)G.push({type:"deprecated",setting:"providerOptions key 'openai-compatible'",message:"Use 'openaiCompatible' instead."});be({rawName:this.providerOptionsName,providerOptions:A,warnings:G});let X=Object.assign(se??{},await h({provider:"openaiCompatible",providerOptions:A,schema:pe})??{},await h({provider:this.providerOptionsName,providerOptions:A,schema:pe})??{},await h({provider:ce(this.providerOptionsName),providerOptions:A,schema:pe})??{}),ae=X?.strictJsonSchema??!0;if(j!=null)G.push({type:"unsupported",feature:"topK"});if(v?.type==="json"&&v.schema!=null&&!this.supportsStructuredOutputs)G.push({type:"unsupported",feature:"responseFormat",details:"JSON response format schema is only supported with structuredOutputs"});let{tools:de,toolChoice:K,toolWarnings:J}=Ve({tools:F,toolChoice:Z}),Q=Ne(this.providerOptionsName,A);return{metadataKey:Q,args:{model:this.modelId,user:X.user,max_tokens:b,temperature:_,top_p:w,frequency_penalty:L,presence_penalty:B,response_format:v?.type==="json"?this.supportsStructuredOutputs===!0&&v.schema!=null?{type:"json_schema",json_schema:{schema:v.schema,strict:ae,name:v.name??"response",description:v.description}}:{type:"json_object"}:void 0,stop:x,seed:S,...Object.fromEntries(Object.entries({...A?.[this.providerOptionsName],...A?.[ce(this.providerOptionsName)]}).filter(([re])=>!Object.keys(pe.shape).includes(re))),reasoning_effort:X.reasoningEffort??(W(V)?V:void 0),verbosity:X.textVerbosity,messages:Ke(f,{provider:this.providerOptionsName,providerOptionsKey:Q,supportsMultiPartToolContent:this.config.supportsMultiPartToolContent}),tools:de,tool_choice:K},warnings:[...G,...J]}}async doGenerate(f){let{args:b,warnings:_,metadataKey:w}=await this.getArgs({...f}),j=this.transformRequestBody(b,_),L=JSON.stringify(j),{responseHeaders:B,value:V,rawValue:A}=await g({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:j,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:p(De),abortSignal:f.abortSignal,fetch:this.config.fetch}),x=V.choices[0];if(x==null)throw new P({data:A,message:"Response did not contain any choices."});let v=[],S=x.message.reasoning_content??x.message.reasoning;if(S!=null&&S.length>0)v.push({type:"reasoning",text:S});if(v.push(...Ie(x.message.content)),x.message.tool_calls!=null)for(let G of x.message.tool_calls){let se=G.extra_content?.google?.thought_signature;v.push({type:"tool-call",toolCallId:G.id||C(),toolName:G.function.name,input:G.function.arguments,...se?{providerMetadata:{[w]:{thoughtSignature:se}}}:{}})}let Z={[w]:{},...await this.config.metadataExtractor?.extractMetadata?.({parsedBody:A})},F=V.usage?.completion_tokens_details;if(F?.accepted_prediction_tokens!=null)Z[w].acceptedPredictionTokens=F?.accepted_prediction_tokens;if(F?.rejected_prediction_tokens!=null)Z[w].rejectedPredictionTokens=F?.rejected_prediction_tokens;return{content:v,finishReason:{unified:xe(x.finish_reason),raw:x.finish_reason??void 0},usage:this.convertUsage(V.usage),providerMetadata:Z,request:{body:L},response:{...we(V),headers:B,body:A},warnings:_}}async doStream(f){let{args:b,warnings:_,metadataKey:w}=await this.getArgs({...f}),j=this.transformRequestBody({...b,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},_),L=this.config.metadataExtractor?.createStreamExtractor(),{responseHeaders:B,value:V}=await g({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:j,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:D(this.chunkSchema),abortSignal:f.abortSignal,fetch:this.config.fetch}),A=w,x,v=new Map,S=new Set,Z=(K)=>{let J=K.index;if(J==null||S.has(J)){x.processDelta(K);return}let Q=v.get(J);if(Q==null)Q={id:K.id??null,bufferedArguments:"",extraContent:K.extra_content??null},v.set(J,Q);else{if(Q.id==null&&K.id!=null)Q.id=K.id;if(Q.extraContent==null&&K.extra_content!=null)Q.extraContent=K.extra_content}let re=K.function?.arguments;if(re!=null)Q.bufferedArguments+=re;let ue=K.function?.name;if(ue!=null){let fe={index:J,id:Q.id,function:{name:ue,arguments:Q.bufferedArguments},extra_content:Q.extraContent??void 0};x.processDelta(fe),v.delete(J),S.add(J)}},F,G=void 0,se=!1,X=!1,ae=!1,de=(K)=>this.convertUsage(K);return{stream:V.pipeThrough(new TransformStream({start(K){x=new Ce(K,{generateId:C,extractMetadata:(J)=>{let Q=J.extra_content?.google?.thought_signature;return Q?{[A]:{thoughtSignature:Q}}:void 0},buildToolCallProviderMetadata:(J)=>J}),K.enqueue({type:"stream-start",warnings:_})},transform(K,J){if(f.includeRawChunks)J.enqueue({type:"raw",rawValue:K.rawValue});if(!K.success){F={unified:"error",raw:void 0},J.enqueue({type:"error",error:K.error});return}if(L?.processChunk(K.rawValue),"error"in K.value){F={unified:"error",raw:void 0},J.enqueue({type:"error",error:K.value.error});return}let Q=K.value;if(!se){let le=we(Q);if(Object.values(le).some(Boolean))se=!0,J.enqueue({type:"response-metadata",...le})}if(Q.usage!=null)G=Q.usage;let re=Q.choices[0];if(re?.finish_reason!=null)F={unified:xe(re.finish_reason),raw:re.finish_reason??void 0};if(re?.delta==null)return;let ue=re.delta,fe=(le)=>{if(ae)J.enqueue({type:"text-end",id:"txt-0"}),ae=!1;if(!X)J.enqueue({type:"reasoning-start",id:"reasoning-0"}),X=!0;J.enqueue({type:"reasoning-delta",id:"reasoning-0",delta:le})},Pe=(le)=>{if(X)J.enqueue({type:"reasoning-end",id:"reasoning-0"}),X=!1;if(!ae)J.enqueue({type:"text-start",id:"txt-0"}),ae=!0;J.enqueue({type:"text-delta",id:"txt-0",delta:le})},ve=ue.reasoning_content??ue.reasoning;if(ve)fe(ve);for(let le of Ie(ue.content))if(le.type==="reasoning")fe(le.text);else Pe(le.text);if(ue.tool_calls!=null&&ue.tool_calls.length>0){if(X)J.enqueue({type:"reasoning-end",id:"reasoning-0"}),X=!1;for(let le of ue.tool_calls)Z(le)}},flush(K){if(X)K.enqueue({type:"reasoning-end",id:"reasoning-0"});if(ae)K.enqueue({type:"text-end",id:"txt-0"});for(let[Q,re]of v)x.processDelta({index:Q,id:re.id,function:{arguments:re.bufferedArguments}});if(v.clear(),x.flush(),F==null)F={unified:"error",raw:void 0},K.enqueue({type:"error",error:new P({data:void 0,message:"Response stream ended without a finish reason."})});let J={[A]:{},...L?.buildMetadata()};if(G?.completion_tokens_details?.accepted_prediction_tokens!=null)J[A].acceptedPredictionTokens=G?.completion_tokens_details?.accepted_prediction_tokens;if(G?.completion_tokens_details?.rejected_prediction_tokens!=null)J[A].rejectedPredictionTokens=G?.completion_tokens_details?.rejected_prediction_tokens;K.enqueue({type:"finish",finishReason:F,usage:de(G),providerMetadata:J})}})),request:{body:j},response:{headers:B}}}},Ue=()=>U({prompt_tokens:r().nullish(),completion_tokens:r().nullish(),total_tokens:r().nullish(),prompt_tokens_details:U({cached_tokens:r().nullish()}).nullish(),completion_tokens_details:U({reasoning_tokens:r().nullish(),accepted_prediction_tokens:r().nullish(),rejected_prediction_tokens:r().nullish()}).nullish()}).nullish(),qe=()=>l([e(),o(U({type:e()}))]).nullish();function Ie(m){if(m==null)return[];if(typeof m==="string")return m.length>0?[{type:"text",text:m}]:[];let f=[];for(let b of m)if(b.type==="text"&&typeof b.text==="string"){if(b.text.length>0)f.push({type:"text",text:b.text})}else if(b.type==="thinking"&&Array.isArray(b.thinking)){let _=b.thinking.filter((w)=>w!=null&&typeof w==="object"&&("type"in w)&&w.type==="text"&&("text"in w)&&typeof w.text==="string").map((w)=>w.text).join("");if(_.length>0)f.push({type:"reasoning",text:_})}return f}var De=a(()=>s(U({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({message:t({role:n("assistant").nullish(),content:qe(),reasoning_content:e().nullish(),reasoning:e().nullish(),tool_calls:o(t({id:e().nullish(),function:t({name:e(),arguments:e()}),extra_content:t({google:t({thought_signature:e().nullish()}).nullish()}).nullish()})).nullish()}),finish_reason:e().nullish()})),usage:Ue()}))),Fe=()=>U({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({delta:t({role:i(["assistant",""]).nullish(),content:qe(),reasoning_content:e().nullish(),reasoning:e().nullish(),tool_calls:o(t({index:r().nullish(),id:e().nullish(),function:t({name:e().nullish(),arguments:e().nullish()}),extra_content:t({google:t({thought_signature:e().nullish()}).nullish()}).nullish()})).nullish()}).nullish(),finish_reason:e().nullish()})),usage:Ue()}),We=(m)=>l([Fe(),m]);function Oe(m){if(m==null)return te();let f=m.prompt_tokens??0,b=m.completion_tokens??0;return{inputTokens:{total:f,noCache:f,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:b,text:b,reasoning:void 0},raw:m}}function ze({prompt:m,user:f="user",assistant:b="assistant"}){let _="";if(m[0].role==="system")_+=`${m[0].content}
1
+ import{oe}from"./embed-rp9gb1qq.js";import{ye,P,me,u,e,r,c,ie,o,t,U,l,y,i,n,k,T,d,N,M,ot,ee,te,F,z,Me,C,R,W,a,s,h,g,ne,O,H,I,D,p,dt,an,E,Ce,Y}from"./embed-dbkjhg16.js";function ce(m){return m.replace(/[_-]([a-z])/g,(f)=>f[1].toUpperCase())}function Ne(m,f){let b=ce(m);if(b!==m&&f?.[b]!=null)return b;return m}function be({rawName:m,providerOptions:f,warnings:b}){let _=ce(m);if(_!==m&&f?.[m]!=null)b.push({type:"deprecated",setting:`providerOptions key '${m}'`,message:`Use '${_}' instead.`})}var ge={errorSchema:t({error:t({message:e(),type:e().nullish(),param:ie().nullish(),code:l([e(),r()]).nullish()})}),errorToMessage:(m)=>m.error.message};function $e(m){if(m==null)return te();let f=m.prompt_tokens??0,b=m.completion_tokens??0,_=m.prompt_tokens_details?.cached_tokens??0,w=m.completion_tokens_details?.reasoning_tokens??0;return{inputTokens:{total:f,noCache:f-_,cacheRead:_,cacheWrite:void 0},outputTokens:{total:b,text:Math.max(0,b-w),reasoning:w},raw:m}}function he(m){return m?.providerOptions?.openaiCompatible??{}}function Le(m){switch(m){case"audio/wav":return"wav";case"audio/mp3":case"audio/mpeg":return"mp3";default:return null}}function Ae(m,f){let b=he(m);switch(m.type){case"text":return{type:"text",text:m.text,...b};case"file":switch(m.data.type){case"reference":return{type:"file",file:{file_id:H({reference:m.data.reference,provider:f})},...b};case"text":throw new u({functionality:"text file parts"});case"url":case"data":{let _=z(m.mediaType);if(_==="image")return{type:"image_url",image_url:{url:m.data.type==="url"?m.data.url.toString():`data:${O({part:m})};base64,${M(m.data.data)}`},...b};if(_==="video")return{type:"video_url",video_url:{url:m.data.type==="url"?m.data.url.toString():`data:${O({part:m})};base64,${M(m.data.data)}`},...b};if(_==="audio"){if(m.data.type==="url")throw new u({functionality:"audio file parts with URLs"});let w=O({part:m}),j=Le(w);if(j===null)throw new u({functionality:`audio media type ${w}`});return{type:"input_audio",input_audio:{data:M(m.data.data),format:j},...b}}if(_==="application"){if(m.data.type==="url")throw new u({functionality:"PDF file parts with URLs"});let w=O({part:m});if(w!=="application/pdf")throw new u({functionality:`file part media type ${w}`});return{type:"file",file:{filename:m.filename??"document.pdf",file_data:`data:application/pdf;base64,${M(m.data.data)}`},...b}}if(_==="text")return{type:"text",text:m.data.type==="url"?m.data.url.toString():typeof m.data.data==="string"?new TextDecoder().decode(N(m.data.data)):new TextDecoder().decode(m.data.data),...b};throw new u({functionality:`file part media type ${m.mediaType}`})}}}}function Be(m,f){if(m.type==="custom")throw new u({functionality:"custom tool content parts"});return Ae(m,f)}function Ke(m,{provider:f="openaiCompatible",providerOptionsKey:b="google",supportsMultiPartToolContent:_=!1}={}){let w=[];for(let{role:j,content:q,...L}of m){let K=he({...L});switch(j){case"system":w.push({role:"system",content:q,...K});break;case"user":if(q.length===1&&q[0].type==="text"){w.push({role:"user",content:q[0].text,...he(q[0])});break}w.push({role:"user",content:q.map((A)=>Ae(A,f)),...K});break;case"assistant":{let A="",x="",v=[];for(let S of q){let Z=he(S);switch(S.type){case"text":A+=S.text;break;case"reasoning":x+=S.text;break;case"tool-call":{let J=S.providerOptions?.[b]?.thoughtSignature??S.providerOptions?.google?.thoughtSignature;v.push({id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)},...Z,...J?{extra_content:{google:{thought_signature:String(J)}}}:{}});break}}}w.push({role:"assistant",content:v.length>0?A||null:A,...x.length>0?{reasoning_content:x}:{},tool_calls:v.length>0?v:void 0,...K});break}case"tool":for(let A of q){if(A.type==="tool-approval-response")continue;let x=A.output,v;switch(x.type){case"text":case"error-text":v=x.value;break;case"execution-denied":v=x.reason??"Tool call execution denied.";break;case"json":case"error-json":v=JSON.stringify(x.value);break;case"content":v=_?x.value.map((Z)=>Be(Z,f)):JSON.stringify(x.value)}let S=he(A);w.push({role:"tool",tool_call_id:A.toolCallId,content:v,...S})}break;default:throw Error(`Unsupported role: ${j}`)}}return w}function we({id:m,model:f,created:b}){return ee({id:m,model:f,created:b||void 0})}function xe(m){switch(m){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}var pe=t({user:e().optional(),reasoningEffort:e().optional(),textVerbosity:e().optional(),strictJsonSchema:c().optional()});function Ve({tools:m,toolChoice:f}){m=m?.length?m:void 0;let b=[];if(m==null)return{tools:void 0,toolChoice:void 0,toolWarnings:b};let _=[];for(let j of m)if(j.type==="provider")b.push({type:"unsupported",feature:`provider-defined tool ${j.id}`});else _.push({type:"function",function:{name:j.name,description:j.description,parameters:j.inputSchema,...j.strict!=null?{strict:j.strict}:{}}});if(f==null)return{tools:_,toolChoice:void 0,toolWarnings:b};let w=f.type;switch(w){case"auto":case"none":case"required":return{tools:_,toolChoice:w,toolWarnings:b};case"tool":return{tools:_,toolChoice:{type:"function",function:{name:f.toolName}},toolWarnings:b};default:throw new u({functionality:`tool choice type: ${w}`})}}var Je=class m{static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.specificationVersion="v4",this.modelId=f,this.config=b;let _=b.errorStructure??ge;this.chunkSchema=We(_.errorSchema),this.failedResponseHandler=I(_),this.supportsStructuredOutputs=b.supportsStructuredOutputs??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}get supportedUrls(){return this.config.supportedUrls?.()??{}}transformRequestBody(f,b){return this.config.transformRequestBody?.(f,b)??f}convertUsage(f){return this.config.convertUsage?.(f)??$e(f)}async getArgs({prompt:f,maxOutputTokens:b,temperature:_,topP:w,topK:j,frequencyPenalty:q,presencePenalty:L,reasoning:K,providerOptions:A,stopSequences:x,responseFormat:v,seed:S,toolChoice:Z,tools:J}){let G=[],se=await h({provider:"openai-compatible",providerOptions:A,schema:pe});if(se!=null)G.push({type:"deprecated",setting:"providerOptions key 'openai-compatible'",message:"Use 'openaiCompatible' instead."});be({rawName:this.providerOptionsName,providerOptions:A,warnings:G});let X=Object.assign(se??{},await h({provider:"openaiCompatible",providerOptions:A,schema:pe})??{},await h({provider:this.providerOptionsName,providerOptions:A,schema:pe})??{},await h({provider:ce(this.providerOptionsName),providerOptions:A,schema:pe})??{}),ae=X?.strictJsonSchema??!0;if(j!=null)G.push({type:"unsupported",feature:"topK"});if(v?.type==="json"&&v.schema!=null&&!this.supportsStructuredOutputs)G.push({type:"unsupported",feature:"responseFormat",details:"JSON response format schema is only supported with structuredOutputs"});let{tools:de,toolChoice:B,toolWarnings:V}=Ve({tools:J,toolChoice:Z}),Q=Ne(this.providerOptionsName,A);return{metadataKey:Q,args:{model:this.modelId,user:X.user,max_tokens:b,temperature:_,top_p:w,frequency_penalty:q,presence_penalty:L,response_format:v?.type==="json"?this.supportsStructuredOutputs===!0&&v.schema!=null?{type:"json_schema",json_schema:{schema:v.schema,strict:ae,name:v.name??"response",description:v.description}}:{type:"json_object"}:void 0,stop:x,seed:S,...Object.fromEntries(Object.entries({...A?.[this.providerOptionsName],...A?.[ce(this.providerOptionsName)]}).filter(([re])=>!Object.keys(pe.shape).includes(re))),reasoning_effort:X.reasoningEffort??(W(K)?K:void 0),verbosity:X.textVerbosity,messages:Ke(f,{provider:this.providerOptionsName,providerOptionsKey:Q,supportsMultiPartToolContent:this.config.supportsMultiPartToolContent}),tools:de,tool_choice:B},warnings:[...G,...V]}}async doGenerate(f){let{args:b,warnings:_,metadataKey:w}=await this.getArgs({...f}),j=this.transformRequestBody(b,_),q=JSON.stringify(j),{responseHeaders:L,value:K,rawValue:A}=await g({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:j,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:p(De),abortSignal:f.abortSignal,fetch:this.config.fetch}),x=K.choices[0];if(x==null)throw new P({data:A,message:"Response did not contain any choices."});let v=[],S=x.message.reasoning_content??x.message.reasoning;if(S!=null&&S.length>0)v.push({type:"reasoning",text:S});if(v.push(...Ie(x.message.content)),x.message.tool_calls!=null)for(let G of x.message.tool_calls){let se=G.extra_content?.google?.thought_signature;v.push({type:"tool-call",toolCallId:G.id||C(),toolName:G.function.name,input:G.function.arguments,...se?{providerMetadata:{[w]:{thoughtSignature:se}}}:{}})}let Z={[w]:{},...await this.config.metadataExtractor?.extractMetadata?.({parsedBody:A})},J=K.usage?.completion_tokens_details;if(J?.accepted_prediction_tokens!=null)Z[w].acceptedPredictionTokens=J?.accepted_prediction_tokens;if(J?.rejected_prediction_tokens!=null)Z[w].rejectedPredictionTokens=J?.rejected_prediction_tokens;return{content:v,finishReason:{unified:xe(x.finish_reason),raw:x.finish_reason??void 0},usage:this.convertUsage(K.usage),providerMetadata:Z,request:{body:q},response:{...we(K),headers:L,body:A},warnings:_}}async doStream(f){let{args:b,warnings:_,metadataKey:w}=await this.getArgs({...f}),j=this.transformRequestBody({...b,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},_),q=this.config.metadataExtractor?.createStreamExtractor(),{responseHeaders:L,value:K}=await g({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:j,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:D(this.chunkSchema),abortSignal:f.abortSignal,fetch:this.config.fetch}),A=w,x,v=new Map,S=new Set,Z=(B)=>{let V=B.index;if(V==null||S.has(V)){x.processDelta(B);return}let Q=v.get(V);if(Q==null)Q={id:B.id??null,bufferedArguments:"",extraContent:B.extra_content??null},v.set(V,Q);else{if(Q.id==null&&B.id!=null)Q.id=B.id;if(Q.extraContent==null&&B.extra_content!=null)Q.extraContent=B.extra_content}let re=B.function?.arguments;if(re!=null)Q.bufferedArguments+=re;let ue=B.function?.name;if(ue!=null){let fe={index:V,id:Q.id,function:{name:ue,arguments:Q.bufferedArguments},extra_content:Q.extraContent??void 0};x.processDelta(fe),v.delete(V),S.add(V)}},J,G=void 0,se=!1,X=!1,ae=!1,de=(B)=>this.convertUsage(B);return{stream:K.pipeThrough(new TransformStream({start(B){x=new Ce(B,{generateId:C,extractMetadata:(V)=>{let Q=V.extra_content?.google?.thought_signature;return Q?{[A]:{thoughtSignature:Q}}:void 0},buildToolCallProviderMetadata:(V)=>V}),B.enqueue({type:"stream-start",warnings:_})},transform(B,V){if(f.includeRawChunks)V.enqueue({type:"raw",rawValue:B.rawValue});if(!B.success){J={unified:"error",raw:void 0},V.enqueue({type:"error",error:B.error});return}if(q?.processChunk(B.rawValue),"error"in B.value){J={unified:"error",raw:void 0},V.enqueue({type:"error",error:B.value.error});return}let Q=B.value;if(!se){let le=we(Q);if(Object.values(le).some(Boolean))se=!0,V.enqueue({type:"response-metadata",...le})}if(Q.usage!=null)G=Q.usage;let re=Q.choices[0];if(re?.finish_reason!=null)J={unified:xe(re.finish_reason),raw:re.finish_reason??void 0};if(re?.delta==null)return;let ue=re.delta,fe=(le)=>{if(ae)V.enqueue({type:"text-end",id:"txt-0"}),ae=!1;if(!X)V.enqueue({type:"reasoning-start",id:"reasoning-0"}),X=!0;V.enqueue({type:"reasoning-delta",id:"reasoning-0",delta:le})},Pe=(le)=>{if(X)V.enqueue({type:"reasoning-end",id:"reasoning-0"}),X=!1;if(!ae)V.enqueue({type:"text-start",id:"txt-0"}),ae=!0;V.enqueue({type:"text-delta",id:"txt-0",delta:le})},ve=ue.reasoning_content??ue.reasoning;if(ve)fe(ve);for(let le of Ie(ue.content))if(le.type==="reasoning")fe(le.text);else Pe(le.text);if(ue.tool_calls!=null&&ue.tool_calls.length>0){if(X)V.enqueue({type:"reasoning-end",id:"reasoning-0"}),X=!1;for(let le of ue.tool_calls)Z(le)}},flush(B){if(X)B.enqueue({type:"reasoning-end",id:"reasoning-0"});if(ae)B.enqueue({type:"text-end",id:"txt-0"});for(let[Q,re]of v)x.processDelta({index:Q,id:re.id,function:{arguments:re.bufferedArguments}});if(v.clear(),x.flush(),J==null)J={unified:"error",raw:void 0},B.enqueue({type:"error",error:new P({data:void 0,message:"Response stream ended without a finish reason."})});let V={[A]:{},...q?.buildMetadata()};if(G?.completion_tokens_details?.accepted_prediction_tokens!=null)V[A].acceptedPredictionTokens=G?.completion_tokens_details?.accepted_prediction_tokens;if(G?.completion_tokens_details?.rejected_prediction_tokens!=null)V[A].rejectedPredictionTokens=G?.completion_tokens_details?.rejected_prediction_tokens;B.enqueue({type:"finish",finishReason:J,usage:de(G),providerMetadata:V})}})),request:{body:j},response:{headers:L}}}},Ue=()=>U({prompt_tokens:r().nullish(),completion_tokens:r().nullish(),total_tokens:r().nullish(),prompt_tokens_details:U({cached_tokens:r().nullish()}).nullish(),completion_tokens_details:U({reasoning_tokens:r().nullish(),accepted_prediction_tokens:r().nullish(),rejected_prediction_tokens:r().nullish()}).nullish()}).nullish(),qe=()=>l([e(),o(U({type:e()}))]).nullish();function Ie(m){if(m==null)return[];if(typeof m==="string")return m.length>0?[{type:"text",text:m}]:[];let f=[];for(let b of m)if(b.type==="text"&&typeof b.text==="string"){if(b.text.length>0)f.push({type:"text",text:b.text})}else if(b.type==="thinking"&&Array.isArray(b.thinking)){let _=b.thinking.filter((w)=>w!=null&&typeof w==="object"&&("type"in w)&&w.type==="text"&&("text"in w)&&typeof w.text==="string").map((w)=>w.text).join("");if(_.length>0)f.push({type:"reasoning",text:_})}return f}var De=a(()=>s(U({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({message:t({role:n("assistant").nullish(),content:qe(),reasoning_content:e().nullish(),reasoning:e().nullish(),tool_calls:o(t({id:e().nullish(),function:t({name:e(),arguments:e()}),extra_content:t({google:t({thought_signature:e().nullish()}).nullish()}).nullish()})).nullish()}),finish_reason:e().nullish()})),usage:Ue()}))),Fe=()=>U({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({delta:t({role:i(["assistant",""]).nullish(),content:qe(),reasoning_content:e().nullish(),reasoning:e().nullish(),tool_calls:o(t({index:r().nullish(),id:e().nullish(),function:t({name:e().nullish(),arguments:e().nullish()}),extra_content:t({google:t({thought_signature:e().nullish()}).nullish()}).nullish()})).nullish()}).nullish(),finish_reason:e().nullish()})),usage:Ue()}),We=(m)=>l([Fe(),m]);function Oe(m){if(m==null)return te();let f=m.prompt_tokens??0,b=m.completion_tokens??0;return{inputTokens:{total:f,noCache:f,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:b,text:b,reasoning:void 0},raw:m}}function ze({prompt:m,user:f="user",assistant:b="assistant"}){let _="";if(m[0].role==="system")_+=`${m[0].content}
2
2
 
3
- `,m=m.slice(1);for(let{role:w,content:j}of m)switch(w){case"system":throw new ye({message:`Unexpected system message in prompt: ${j}`,prompt:m});case"user":{let L=j.map((B)=>{switch(B.type){case"text":return B.text}}).filter(Boolean).join("");_+=`${f}:
4
- ${L}
3
+ `,m=m.slice(1);for(let{role:w,content:j}of m)switch(w){case"system":throw new ye({message:`Unexpected system message in prompt: ${j}`,prompt:m});case"user":{let q=j.map((L)=>{switch(L.type){case"text":return L.text}}).filter(Boolean).join("");_+=`${f}:
4
+ ${q}
5
5
 
6
- `;break}case"assistant":{let L=j.map((B)=>{switch(B.type){case"text":return B.text;case"tool-call":throw new u({functionality:"tool-call messages"})}}).join("");_+=`${b}:
7
- ${L}
6
+ `;break}case"assistant":{let q=j.map((L)=>{switch(L.type){case"text":return L.text;case"tool-call":throw new u({functionality:"tool-call messages"})}}).join("");_+=`${b}:
7
+ ${q}
8
8
 
9
9
  `;break}case"tool":throw new u({functionality:"tool messages"});default:throw Error(`Unsupported role: ${w}`)}return _+=`${b}:
10
10
  `,{prompt:_,stopSequences:[`
11
- ${f}:`]}}function ke(m){switch(m){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}var Se=a(()=>s(t({echo:c().optional(),logitBias:y(e(),r()).optional(),suffix:e().optional(),user:e().optional()}))),Ge=class m{static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.specificationVersion="v4",this.modelId=f,this.config=b;let _=b.errorStructure??ge;this.chunkSchema=Qe(_.errorSchema),this.failedResponseHandler=I(_)}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}get supportedUrls(){return this.config.supportedUrls?.()??{}}async getArgs({prompt:f,maxOutputTokens:b,temperature:_,topP:w,topK:j,frequencyPenalty:L,presencePenalty:B,stopSequences:V,responseFormat:A,seed:x,providerOptions:v,tools:S,toolChoice:Z}){let F=[];be({rawName:this.providerOptionsName,providerOptions:v,warnings:F});let G=Object.assign(await h({provider:this.providerOptionsName,providerOptions:v,schema:Se})??{},await h({provider:ce(this.providerOptionsName),providerOptions:v,schema:Se})??{});if(j!=null)F.push({type:"unsupported",feature:"topK"});if(S?.length)F.push({type:"unsupported",feature:"tools"});if(Z!=null)F.push({type:"unsupported",feature:"toolChoice"});if(A!=null&&A.type!=="text")F.push({type:"unsupported",feature:"responseFormat",details:"JSON response format is not supported."});let{prompt:se,stopSequences:X}=ze({prompt:f}),ae=[...X??[],...V??[]];return{args:{model:this.modelId,echo:G.echo,logit_bias:G.logitBias,suffix:G.suffix,user:G.user,max_tokens:b,temperature:_,top_p:w,frequency_penalty:L,presence_penalty:B,seed:x,...v?.[this.providerOptionsName],...v?.[ce(this.providerOptionsName)],prompt:se,stop:ae.length>0?ae:void 0},warnings:F}}async doGenerate(f){let{args:b,warnings:_}=await this.getArgs(f),{responseHeaders:w,value:j,rawValue:L}=await g({url:this.config.url({path:"/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:b,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:p(Ze),abortSignal:f.abortSignal,fetch:this.config.fetch}),B=j.choices[0],V=[];if(B.text!=null&&B.text.length>0)V.push({type:"text",text:B.text});return{content:V,usage:Oe(j.usage),finishReason:{unified:ke(B.finish_reason),raw:B.finish_reason},request:{body:b},response:{...ee(j),headers:w,body:L},warnings:_}}async doStream(f){let{args:b,warnings:_}=await this.getArgs(f),w={...b,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},{responseHeaders:j,value:L}=await g({url:this.config.url({path:"/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:w,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:D(this.chunkSchema),abortSignal:f.abortSignal,fetch:this.config.fetch}),B={unified:"other",raw:void 0},V=void 0,A=!0;return{stream:L.pipeThrough(new TransformStream({start(x){x.enqueue({type:"stream-start",warnings:_})},transform(x,v){if(f.includeRawChunks)v.enqueue({type:"raw",rawValue:x.rawValue});if(!x.success){B={unified:"error",raw:void 0},v.enqueue({type:"error",error:x.error});return}let S=x.value;if("error"in S){B={unified:"error",raw:void 0},v.enqueue({type:"error",error:S.error});return}if(A)A=!1,v.enqueue({type:"response-metadata",...ee(S)}),v.enqueue({type:"text-start",id:"0"});if(S.usage!=null)V=S.usage;let Z=S.choices[0];if(Z?.finish_reason!=null)B={unified:ke(Z.finish_reason),raw:Z.finish_reason??void 0};if(Z?.text!=null)v.enqueue({type:"text-delta",id:"0",delta:Z.text})},flush(x){if(!A)x.enqueue({type:"text-end",id:"0"});x.enqueue({type:"finish",finishReason:B,usage:Oe(V)})}})),request:{body:w},response:{headers:j}}}},Ee=()=>U({prompt_tokens:r(),completion_tokens:r(),total_tokens:r()}),Ze=a(()=>s(t({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({text:e(),finish_reason:e()})),usage:Ee().nullish()}))),Qe=(m)=>l([t({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({text:e(),finish_reason:e().nullish(),index:r()})),usage:Ee().nullish()}),m]),_e=a(()=>s(t({dimensions:r().optional(),user:e().optional()}))),Xe=class m{get provider(){return this.config.provider}get maxEmbeddingsPerCall(){return this.config.maxEmbeddingsPerCall??2048}get supportsParallelCalls(){return this.config.supportsParallelCalls??!0}static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.specificationVersion="v4",this.modelId=f,this.config=b}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}async doEmbed({values:f,dimensions:b,headers:_,abortSignal:w,providerOptions:j}){let L=[],B=await h({provider:"openai-compatible",providerOptions:j,schema:_e});if(B!=null)L.push({type:"deprecated",setting:"providerOptions key 'openai-compatible'",message:"Use 'openaiCompatible' instead."});be({rawName:this.providerOptionsName,providerOptions:j,warnings:L});let V=Object.assign(B??{},await h({provider:"openaiCompatible",providerOptions:j,schema:_e})??{},await h({provider:this.providerOptionsName,providerOptions:j,schema:_e})??{});if(f.length>this.maxEmbeddingsPerCall)throw new me({provider:this.provider,modelId:this.modelId,maxEmbeddingsPerCall:this.maxEmbeddingsPerCall,values:f});let{responseHeaders:A,value:x,rawValue:v}=await g({url:this.config.url({path:"/embeddings",modelId:this.modelId}),headers:d(this.config.headers?.(),_),body:{model:this.modelId,input:f,encoding_format:"float",dimensions:V.dimensions??b,user:V.user},failedResponseHandler:I(this.config.errorStructure??ge),successfulResponseHandler:p(Ye),abortSignal:w,fetch:this.config.fetch});return{warnings:L,embeddings:x.data.map((S)=>S.embedding),usage:x.usage?{tokens:x.usage.prompt_tokens}:void 0,providerMetadata:x.providerMetadata,response:{headers:A,body:v}}}},Ye=a(()=>s(t({data:o(t({embedding:o(r())})),usage:t({prompt_tokens:r()}).nullish(),providerMetadata:y(e(),y(e(),ie())).optional()}))),et=class m{get provider(){return this.config.provider}get providerOptionsKey(){return this.config.provider.split(".")[0].trim()}static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.modelId=f,this.config=b,this.specificationVersion="v4",this.maxImagesPerCall=10,this.supportsFileInputs=void 0,this.supportsMaskInputs=void 0}getArgs(f,b){return be({rawName:this.providerOptionsKey,providerOptions:f,warnings:b}),{...f[this.providerOptionsKey],...f[ce(this.providerOptionsKey)]}}async doGenerate({prompt:f,n:b,size:_,aspectRatio:w,seed:j,providerOptions:L,headers:B,abortSignal:V,files:A,mask:x}){let v=[];if(w!=null)v.push({type:"unsupported",feature:"aspectRatio",details:"This model does not support aspect ratio. Use `size` instead."});if(j!=null)v.push({type:"unsupported",feature:"seed"});let S=this.config._internal?.currentDate?.()??new Date,Z=this.getArgs(L,v),F=A!=null&&A.length>0,G=this.config.url({path:F?"/images/edits":"/images/generations",modelId:this.modelId}),se=d(this.config.headers?.(),B);if(F){let{value:de,responseHeaders:K}=await ne({url:G,headers:se,formData:ot({model:this.modelId,prompt:f,image:await Promise.all(A.map((J)=>Te(J))),mask:x!=null?await Te(x):void 0,n:b,size:_,...Z}),failedResponseHandler:I(this.config.errorStructure??ge),successfulResponseHandler:p(je),abortSignal:V,fetch:this.config.fetch});return{images:await this.getImages(de.data,{url:G,headers:se,abortSignal:V}),warnings:v,usage:Re(de.usage),response:{timestamp:S,modelId:this.modelId,headers:K}}}let{value:X,responseHeaders:ae}=await g({url:G,headers:se,body:{model:this.modelId,prompt:f,n:b,size:_,...Z},failedResponseHandler:I(this.config.errorStructure??ge),successfulResponseHandler:p(je),abortSignal:V,fetch:this.config.fetch});return{images:await this.getImages(X.data,{url:G,headers:se,abortSignal:V}),warnings:v,usage:Re(X.usage),response:{timestamp:S,modelId:this.modelId,headers:ae}}}async getImages(f,b){if(f.every((_)=>_.b64_json!=null))return f.map((_)=>_.b64_json);return Promise.all(f.map(async(_)=>{if(_.b64_json!=null)return N(_.b64_json);if(_.url==null)throw new P({data:_,message:"Expected url in the image response"});let{value:w}=await R({url:_.url,validateUrl:!0,trustedOrigin:b.url,credentialedOrigin:b.url,headers:b.headers,abortSignal:b.abortSignal,fetch:this.config.fetch,successfulResponseHandler:dt(),failedResponseHandler:an()});return w}))}};function Re(m){return m==null?void 0:{inputTokens:m.input_tokens??void 0,outputTokens:m.output_tokens??void 0,totalTokens:m.total_tokens??void 0}}var je=a(()=>s(t({data:o(t({b64_json:e().nullish(),url:e().nullish()}).refine((m)=>m.b64_json!=null||m.url!=null,{message:"Expected b64_json or url in the image response"})),usage:t({input_tokens:r().nullish(),output_tokens:r().nullish(),total_tokens:r().nullish()}).nullish()})));async function Te(m){if(m.type==="url")return Me(m.url);let f=m.data instanceof Uint8Array?m.data:N(m.data);return new Blob([f],{type:m.mediaType})}var tt="3.0.80";function He(m){let f=Y(m.baseURL),b=m.name,_={...m.apiKey&&{Authorization:`Bearer ${m.apiKey}`},...m.headers},w=()=>q(_,`ai-sdk-openai-compatible/${tt}`),j=(S)=>({provider:`${b}.${S}`,url:({path:Z})=>{let F=new URL(`${f}${Z}`);if(m.queryParams)F.search=new URLSearchParams(m.queryParams).toString();return F.toString()},headers:w,fetch:m.fetch}),L=(S)=>B(S),B=(S)=>new Je(S,{...j("chat"),includeUsage:m.includeUsage,supportsStructuredOutputs:m.supportsStructuredOutputs,supportsMultiPartToolContent:m.supportsMultiPartToolContent,supportedUrls:m.supportedUrls,transformRequestBody:m.transformRequestBody,metadataExtractor:m.metadataExtractor,convertUsage:m.convertUsage}),V=(S)=>new Ge(S,{...j("completion"),includeUsage:m.includeUsage}),A=(S)=>new Xe(S,{...j("embedding")}),x=(S)=>new et(S,j("image")),v=(S)=>L(S);return v.specificationVersion="v4",v.languageModel=L,v.chatModel=B,v.completionModel=V,v.embeddingModel=A,v.textEmbeddingModel=A,v.imageModel=x,v}var nt=(m)=>{if(!m.baseURL)throw Error("This provider has no API URL. Select it again in the settings or configure a custom endpoint.");return He({name:"openai-compatible",baseURL:m.baseURL,apiKey:m.apiKey,headers:m.headers,...m.fetch&&{fetch:m.fetch},includeUsage:!0,supportsStructuredOutputs:!0,transformRequestBody:(f)=>{let b=f.response_format;if(b?.type!=="json_schema"||!b.json_schema)return f;return{...f,response_format:{type:"json_object"},messages:[{role:"system",content:`Return only a JSON object matching this JSON schema: ${JSON.stringify(b.json_schema.schema)}`},...f.messages]}}}).chatModel(m.model)};function pt(){oe("openai-compatible",nt)}export{pt as register};
11
+ ${f}:`]}}function ke(m){switch(m){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}var Se=a(()=>s(t({echo:c().optional(),logitBias:y(e(),r()).optional(),suffix:e().optional(),user:e().optional()}))),Ge=class m{static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.specificationVersion="v4",this.modelId=f,this.config=b;let _=b.errorStructure??ge;this.chunkSchema=Qe(_.errorSchema),this.failedResponseHandler=I(_)}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}get supportedUrls(){return this.config.supportedUrls?.()??{}}async getArgs({prompt:f,maxOutputTokens:b,temperature:_,topP:w,topK:j,frequencyPenalty:q,presencePenalty:L,stopSequences:K,responseFormat:A,seed:x,providerOptions:v,tools:S,toolChoice:Z}){let J=[];be({rawName:this.providerOptionsName,providerOptions:v,warnings:J});let G=Object.assign(await h({provider:this.providerOptionsName,providerOptions:v,schema:Se})??{},await h({provider:ce(this.providerOptionsName),providerOptions:v,schema:Se})??{});if(j!=null)J.push({type:"unsupported",feature:"topK"});if(S?.length)J.push({type:"unsupported",feature:"tools"});if(Z!=null)J.push({type:"unsupported",feature:"toolChoice"});if(A!=null&&A.type!=="text")J.push({type:"unsupported",feature:"responseFormat",details:"JSON response format is not supported."});let{prompt:se,stopSequences:X}=ze({prompt:f}),ae=[...X??[],...K??[]];return{args:{model:this.modelId,echo:G.echo,logit_bias:G.logitBias,suffix:G.suffix,user:G.user,max_tokens:b,temperature:_,top_p:w,frequency_penalty:q,presence_penalty:L,seed:x,...v?.[this.providerOptionsName],...v?.[ce(this.providerOptionsName)],prompt:se,stop:ae.length>0?ae:void 0},warnings:J}}async doGenerate(f){let{args:b,warnings:_}=await this.getArgs(f),{responseHeaders:w,value:j,rawValue:q}=await g({url:this.config.url({path:"/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:b,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:p(Ze),abortSignal:f.abortSignal,fetch:this.config.fetch}),L=j.choices[0],K=[];if(L.text!=null&&L.text.length>0)K.push({type:"text",text:L.text});return{content:K,usage:Oe(j.usage),finishReason:{unified:ke(L.finish_reason),raw:L.finish_reason},request:{body:b},response:{...ee(j),headers:w,body:q},warnings:_}}async doStream(f){let{args:b,warnings:_}=await this.getArgs(f),w={...b,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},{responseHeaders:j,value:q}=await g({url:this.config.url({path:"/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:w,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:D(this.chunkSchema),abortSignal:f.abortSignal,fetch:this.config.fetch}),L={unified:"other",raw:void 0},K=void 0,A=!0;return{stream:q.pipeThrough(new TransformStream({start(x){x.enqueue({type:"stream-start",warnings:_})},transform(x,v){if(f.includeRawChunks)v.enqueue({type:"raw",rawValue:x.rawValue});if(!x.success){L={unified:"error",raw:void 0},v.enqueue({type:"error",error:x.error});return}let S=x.value;if("error"in S){L={unified:"error",raw:void 0},v.enqueue({type:"error",error:S.error});return}if(A)A=!1,v.enqueue({type:"response-metadata",...ee(S)}),v.enqueue({type:"text-start",id:"0"});if(S.usage!=null)K=S.usage;let Z=S.choices[0];if(Z?.finish_reason!=null)L={unified:ke(Z.finish_reason),raw:Z.finish_reason??void 0};if(Z?.text!=null)v.enqueue({type:"text-delta",id:"0",delta:Z.text})},flush(x){if(!A)x.enqueue({type:"text-end",id:"0"});x.enqueue({type:"finish",finishReason:L,usage:Oe(K)})}})),request:{body:w},response:{headers:j}}}},Ee=()=>U({prompt_tokens:r(),completion_tokens:r(),total_tokens:r()}),Ze=a(()=>s(t({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({text:e(),finish_reason:e()})),usage:Ee().nullish()}))),Qe=(m)=>l([t({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({text:e(),finish_reason:e().nullish(),index:r()})),usage:Ee().nullish()}),m]),_e=a(()=>s(t({dimensions:r().optional(),user:e().optional()}))),Xe=class m{get provider(){return this.config.provider}get maxEmbeddingsPerCall(){return this.config.maxEmbeddingsPerCall??2048}get supportsParallelCalls(){return this.config.supportsParallelCalls??!0}static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.specificationVersion="v4",this.modelId=f,this.config=b}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}async doEmbed({values:f,dimensions:b,headers:_,abortSignal:w,providerOptions:j}){let q=[],L=await h({provider:"openai-compatible",providerOptions:j,schema:_e});if(L!=null)q.push({type:"deprecated",setting:"providerOptions key 'openai-compatible'",message:"Use 'openaiCompatible' instead."});be({rawName:this.providerOptionsName,providerOptions:j,warnings:q});let K=Object.assign(L??{},await h({provider:"openaiCompatible",providerOptions:j,schema:_e})??{},await h({provider:this.providerOptionsName,providerOptions:j,schema:_e})??{});if(f.length>this.maxEmbeddingsPerCall)throw new me({provider:this.provider,modelId:this.modelId,maxEmbeddingsPerCall:this.maxEmbeddingsPerCall,values:f});let{responseHeaders:A,value:x,rawValue:v}=await g({url:this.config.url({path:"/embeddings",modelId:this.modelId}),headers:d(this.config.headers?.(),_),body:{model:this.modelId,input:f,encoding_format:"float",dimensions:K.dimensions??b,user:K.user},failedResponseHandler:I(this.config.errorStructure??ge),successfulResponseHandler:p(Ye),abortSignal:w,fetch:this.config.fetch});return{warnings:q,embeddings:x.data.map((S)=>S.embedding),usage:x.usage?{tokens:x.usage.prompt_tokens}:void 0,providerMetadata:x.providerMetadata,response:{headers:A,body:v}}}},Ye=a(()=>s(t({data:o(t({embedding:o(r())})),usage:t({prompt_tokens:r()}).nullish(),providerMetadata:y(e(),y(e(),ie())).optional()}))),et=class m{get provider(){return this.config.provider}get providerOptionsKey(){return this.config.provider.split(".")[0].trim()}static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.modelId=f,this.config=b,this.specificationVersion="v4",this.maxImagesPerCall=10,this.supportsFileInputs=void 0,this.supportsMaskInputs=void 0}getArgs(f,b){return be({rawName:this.providerOptionsKey,providerOptions:f,warnings:b}),{...f[this.providerOptionsKey],...f[ce(this.providerOptionsKey)]}}async doGenerate({prompt:f,n:b,size:_,aspectRatio:w,seed:j,providerOptions:q,headers:L,abortSignal:K,files:A,mask:x}){let v=[];if(w!=null)v.push({type:"unsupported",feature:"aspectRatio",details:"This model does not support aspect ratio. Use `size` instead."});if(j!=null)v.push({type:"unsupported",feature:"seed"});let S=this.config._internal?.currentDate?.()??new Date,Z=this.getArgs(q,v),J=A!=null&&A.length>0,G=this.config.url({path:J?"/images/edits":"/images/generations",modelId:this.modelId}),se=d(this.config.headers?.(),L);if(J){let{value:de,responseHeaders:B}=await ne({url:G,headers:se,formData:ot({model:this.modelId,prompt:f,image:await Promise.all(A.map((V)=>Te(V))),mask:x!=null?await Te(x):void 0,n:b,size:_,...Z}),failedResponseHandler:I(this.config.errorStructure??ge),successfulResponseHandler:p(je),abortSignal:K,fetch:this.config.fetch});return{images:await this.getImages(de.data,{url:G,headers:se,abortSignal:K}),warnings:v,usage:Re(de.usage),response:{timestamp:S,modelId:this.modelId,headers:B}}}let{value:X,responseHeaders:ae}=await g({url:G,headers:se,body:{model:this.modelId,prompt:f,n:b,size:_,...Z},failedResponseHandler:I(this.config.errorStructure??ge),successfulResponseHandler:p(je),abortSignal:K,fetch:this.config.fetch});return{images:await this.getImages(X.data,{url:G,headers:se,abortSignal:K}),warnings:v,usage:Re(X.usage),response:{timestamp:S,modelId:this.modelId,headers:ae}}}async getImages(f,b){if(f.every((_)=>_.b64_json!=null))return f.map((_)=>_.b64_json);return Promise.all(f.map(async(_)=>{if(_.b64_json!=null)return N(_.b64_json);if(_.url==null)throw new P({data:_,message:"Expected url in the image response"});let{value:w}=await R({url:_.url,validateUrl:!0,trustedOrigin:b.url,credentialedOrigin:b.url,headers:b.headers,abortSignal:b.abortSignal,fetch:this.config.fetch,successfulResponseHandler:dt(),failedResponseHandler:an()});return w}))}};function Re(m){return m==null?void 0:{inputTokens:m.input_tokens??void 0,outputTokens:m.output_tokens??void 0,totalTokens:m.total_tokens??void 0}}var je=a(()=>s(t({data:o(t({b64_json:e().nullish(),url:e().nullish()}).refine((m)=>m.b64_json!=null||m.url!=null,{message:"Expected b64_json or url in the image response"})),usage:t({input_tokens:r().nullish(),output_tokens:r().nullish(),total_tokens:r().nullish()}).nullish()})));async function Te(m){if(m.type==="url")return Me(m.url);let f=m.data instanceof Uint8Array?m.data:N(m.data);return new Blob([f],{type:m.mediaType})}var tt="3.0.80";function He(m){let f=Y(m.baseURL),b=m.name,_={...m.apiKey&&{Authorization:`Bearer ${m.apiKey}`},...m.headers},w=()=>F(_,`ai-sdk-openai-compatible/${tt}`),j=(S)=>({provider:`${b}.${S}`,url:({path:Z})=>{let J=new URL(`${f}${Z}`);if(m.queryParams)J.search=new URLSearchParams(m.queryParams).toString();return J.toString()},headers:w,fetch:m.fetch}),q=(S)=>L(S),L=(S)=>new Je(S,{...j("chat"),includeUsage:m.includeUsage,supportsStructuredOutputs:m.supportsStructuredOutputs,supportsMultiPartToolContent:m.supportsMultiPartToolContent,supportedUrls:m.supportedUrls,transformRequestBody:m.transformRequestBody,metadataExtractor:m.metadataExtractor,convertUsage:m.convertUsage}),K=(S)=>new Ge(S,{...j("completion"),includeUsage:m.includeUsage}),A=(S)=>new Xe(S,{...j("embedding")}),x=(S)=>new et(S,j("image")),v=(S)=>q(S);return v.specificationVersion="v4",v.languageModel=q,v.chatModel=L,v.completionModel=K,v.embeddingModel=A,v.textEmbeddingModel=A,v.imageModel=x,v}var nt=(m)=>{if(!m.baseURL)throw Error("This provider has no API URL. Select it again in the settings or configure a custom endpoint.");return He({name:"openai-compatible",baseURL:m.baseURL,apiKey:m.apiKey,headers:m.headers,...m.fetch&&{fetch:m.fetch},includeUsage:!0,supportsStructuredOutputs:!0,transformRequestBody:(f)=>{let b=f.response_format;if(b?.type!=="json_schema"||!b.json_schema)return f;return{...f,response_format:{type:"json_object"},messages:[{role:"system",content:`Return only a JSON object matching this JSON schema: ${JSON.stringify(b.json_schema.schema)}`},...f.messages]}}}).chatModel(m.model)};function pt(){oe("openai-compatible",nt)}export{pt as register};