murmur-rag 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -17
- package/dist/cdn/{anthropic-dc7h9prc.js → anthropic-ynz7717b.js} +2 -2
- package/dist/cdn/{embed-acjpjh6t.js → embed-0m8xctqy.js} +1 -1
- package/dist/cdn/{embed-ssqsb38w.js → embed-7pk91zq8.js} +2 -2
- package/dist/cdn/embed-dbkjhg16.js +83 -0
- package/dist/cdn/{embed-z32y952f.js → embed-n5nzhrf2.js} +3 -3
- package/dist/cdn/{embed-6gef7ym5.js → embed-rp9gb1qq.js} +2 -2
- package/dist/cdn/{embed-fd96s8qk.js → embed-xtkxyrpe.js} +9 -9
- package/dist/cdn/{google-yywkqdph.js → google-k5kwa54v.js} +8 -8
- package/dist/cdn/{index-jt6n0d28.js → index-db4ne93m.js} +1 -1
- package/dist/cdn/{index-nesgnf2n.js → index-qc8kgsdt.js} +1 -1
- package/dist/cdn/{index-bq0x71h1.js → index-t0qn2m4r.js} +1 -1
- package/dist/cdn/index-y0faj89r.js +1 -0
- package/dist/cdn/mistral-p2qcnn42.js +3 -0
- package/dist/cdn/{murmur-j1ky5vmr.js → murmur-d6t6cjc7.js} +2 -2
- package/dist/cdn/murmur.js +6 -6
- package/dist/cdn/{openai-compatible-zhaj1r43.js → openai-compatible-psnkrpxy.js} +6 -6
- package/dist/cdn/{openai-g1685z9v.js → openai-d3q1d6cz.js} +10 -10
- package/dist/cdn/retriever-6qvn2maq.js +1 -0
- package/dist/cdn/{transformers.web-3kmbvcbt.js → transformers.web-xn16v7pz.js} +5 -5
- package/dist/lib/chunks/{index-92w507gk.js → index-y3v46yjp.js} +44 -34
- package/dist/lib/embed.js +4 -4
- package/dist/lib/widget/index.js +2 -2
- package/dist/types/widget/session.d.ts +16 -4
- package/package.json +1 -1
- package/dist/cdn/embed-jdraznwg.js +0 -83
- package/dist/cdn/index-wgzgvzaf.js +0 -1
- package/dist/cdn/mistral-0mg4kk7s.js +0 -3
- package/dist/cdn/retriever-dqxzjaqk.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
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-
|
|
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-
|
|
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{
|
|
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=
|
|
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};
|
package/dist/cdn/murmur.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{
|
|
2
|
-
var
|
|
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
|
-
`),
|
|
5
|
-
`),
|
|
6
|
-
`),s),o.appendChild(f);continue}let
|
|
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
|
|
4
|
-
${
|
|
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
|
|
7
|
-
${
|
|
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};
|