murmur-rag 1.2.0 → 1.3.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 +26 -17
- package/dist/cdn/{anthropic-ynz7717b.js → anthropic-tw416spz.js} +2 -2
- package/dist/cdn/chunk-xyp6nm65.js +1 -0
- package/dist/cdn/{embed-xtkxyrpe.js → embed-3am76qfd.js} +6 -6
- package/dist/cdn/embed-50pfy67v.js +83 -0
- package/dist/cdn/{embed-n5nzhrf2.js → embed-cx1r66ch.js} +6 -6
- package/dist/cdn/{embed-7pk91zq8.js → embed-g0p6yc29.js} +2 -2
- package/dist/cdn/{embed-krrjjyf5.js → embed-q81wdr1z.js} +4 -4
- package/dist/cdn/embed-rjpq8psf.js +10 -0
- package/dist/cdn/{embed-0m8xctqy.js → embed-yz75savs.js} +3 -3
- package/dist/cdn/{google-k5kwa54v.js → google-556tp13p.js} +8 -8
- package/dist/cdn/index-8r44b2wt.js +1 -0
- package/dist/cdn/index-a5j4aat5.js +1 -0
- package/dist/cdn/index-ft8r539a.js +1 -0
- package/dist/cdn/index-pjxy71n5.js +1 -0
- package/dist/cdn/{index-gyd02jvt.js → index-qpy1k923.js} +2 -2
- package/dist/cdn/{mistral-p2qcnn42.js → mistral-25w1nsx5.js} +2 -2
- package/dist/cdn/{murmur-d6t6cjc7.js → murmur-1a55et82.js} +3 -3
- package/dist/cdn/murmur.js +7 -7
- package/dist/cdn/{openai-d3q1d6cz.js → openai-bjrbem49.js} +12 -12
- package/dist/cdn/{openai-compatible-psnkrpxy.js → openai-compatible-sg25g0vj.js} +6 -6
- package/dist/cdn/retriever-06ybegpd.js +1 -0
- package/dist/cdn/{transformers.web-xn16v7pz.js → transformers.web-49m0ht4a.js} +7 -7
- package/dist/lib/chunks/{index-y3v46yjp.js → index-4ftk20yq.js} +143 -39
- package/dist/lib/embed.js +8 -2
- package/dist/lib/llm/index.js +23 -0
- package/dist/lib/local/index.js +38 -2
- package/dist/lib/widget/index.js +2 -2
- package/dist/types/llm/index.d.ts +8 -0
- package/dist/types/local/index.d.ts +12 -0
- package/dist/types/widget/element.d.ts +4 -0
- package/dist/types/widget/i18n.d.ts +1 -0
- package/dist/types/widget/session.d.ts +43 -7
- package/dist/types/widget/styles.d.ts +1 -1
- package/package.json +1 -1
- package/dist/cdn/chunk-hpx6rpea.js +0 -1
- package/dist/cdn/embed-dbkjhg16.js +0 -83
- package/dist/cdn/embed-rp9gb1qq.js +0 -10
- package/dist/cdn/index-db4ne93m.js +0 -1
- package/dist/cdn/index-qc8kgsdt.js +0 -1
- package/dist/cdn/index-t0qn2m4r.js +0 -1
- package/dist/cdn/index-y0faj89r.js +0 -1
- package/dist/cdn/retriever-6qvn2maq.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{N}from"./embed-cx1r66ch.js";var l={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,x=new Set,y=new Map,_=(e)=>`${e.id}@${e.dtype}`,h="transformers-cache";async function S(e=l){try{if(typeof caches>"u"||!await caches.has(h))return!1;let t=await caches.open(h),o=`/${e.id}/resolve/`,n=`model_${e.dtype}.onnx`;return(await t.keys()).some((a)=>a.url.includes(o)&&a.url.includes(n))}catch{return!1}}async function P(){try{let e=globalThis.navigator?.storage;if(!e?.persist)return!1;return await e.persisted?.()||await e.persist()}catch{return!1}}function v(e=l,t){let o=_(e),n=y.get(o)??new Set;if(y.set(o,n),t)n.add(t);let a=d.get(o);if(!a)a=(async()=>{if(!await L())throw new p("webgpu","This browser has no WebGPU.");if(!await S(e))P();let{pipeline:r}=await (N("49m0ht4a"),import("./transformers.web-49m0ht4a.js")),i=await r("text-generation",e.id,{dtype:e.dtype,device:"webgpu",progress_callback:(s)=>{if(s.status!=="progress_total")return;let u={loaded:s.loaded??0,total:s.total??0,progress:Math.min(1,(s.progress??0)/100)};for(let c of n)c(u)}}).catch((s)=>{throw new p("load",s instanceof Error?s.message:String(s))});return x.add(o),i})(),a.catch(()=>d.delete(o)),d.set(o,a);return a}class p extends Error{code;constructor(e,t){super(t);this.code=e;this.name="LocalModelError"}}var k=(e,t)=>({inputTokens:{total:e,noCache:e,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:t,text:t,reasoning:void 0}});function q(e={}){let t=e.spec??l;async function o(n,a){let r=await v(t,e.onProgress),{TextStreamer:i,InterruptableStoppingCriteria:s,StoppingCriteriaList:u}=await (N("49m0ht4a"),import("./transformers.web-49m0ht4a.js")),c=new s,g=new u;g.push(c);let m=()=>c.interrupt();n.abortSignal?.addEventListener("abort",m,{once:!0});let f=0,b=new i(r.tokenizer,{skip_prompt:!0,skip_special_tokens:!0,decode_kwargs:{clean_up_tokenization_spaces:!1},callback_function:(w)=>{if(w)a(w)},token_callback_function:()=>{f++}});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:b,stopping_criteria:g,tokenizer_encode_kwargs:{enable_thinking:!1}})}finally{n.abortSignal?.removeEventListener("abort",m)}return{tokens:f,interrupted:c.interrupted}}return{specificationVersion:"v4",provider:"murmur-local",modelId:t.id,supportedUrls:{},async doGenerate(n){let a="",{tokens:r,interrupted:i}=await o(n,(s)=>{a+=s});return{content:[{type:"text",text:a}],finishReason:{unified:i?"other":"stop",raw:void 0},usage:k(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,(i)=>r.enqueue({type:"text-delta",id:"0",delta:i})).then(({tokens:i,interrupted:s})=>{r.enqueue({type:"text-end",id:"0"}),r.enqueue({type:"finish",finishReason:{unified:s?"other":"stop",raw:void 0},usage:k(0,i)}),r.close()},(i)=>{r.enqueue({type:"error",error:i}),r.close()})}})}}}}export{l as DEFAULT_LOCAL_MODEL,L as hasWebGPU,S as isLocalModelCached,v as loadLocalModel,q as localModel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Re,Le,$e,_t,Ue,Ge,et,Ne,We,bn,wt,vt}from"./embed-rjpq8psf.js";export{Le as DEFAULT_RECOMMENDED,bn as ENDPOINT_PRESETS,vt as createLlmSettingsStore,Re as defaultModelOf,Ge as describeError,Ne as isConfigured,_t as liveCatalog,$e as loadCatalog,et as loadModel,Ue as providerMeta,wt as secureStorage,We as validateEndpoint};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Re,Le,$e,_t,Ue,Ge,et,Ne,We,wt,vt}from"./embed-rjpq8psf.js";var l="https://maxgfr.github.io/murmur/cdn/models.json";function d(e){let o=e.endpoint?We(e.endpoint):null;if(!o)return null;let r=e.model||"default",t={apiKey:"",model:r,customEndpoint:o,customModel:r};if(e.headers)t.headers=e.headers;return t}var s=!1;async function p(e,o=l){if(!e.apiKey)return null;if(!s&&typeof console<"u")s=!0,console.warn("murmur: the API key in this page can be read by anyone. Use a key with a spending limit, or a proxy (data-endpoint).");let r=e.provider||"openai",t=await $e(o),n=Ue(t,r);if(!n)throw Error(`murmur: unknown provider "${r}"`);let a=e.model||Re(t[r])||"",i={apiKey:e.apiKey,model:a,...n};if(e.headers)i.headers=e.headers;return i}function u(e,o={}){let r=o.storageKey??"murmur",t={};if(e.provider)t.providerId=e.provider;if(e.model)t.model=e.model;return vt({catalog:_t({fallbackUrl:o.catalogUrl??l}),storage:wt({prefsKey:`${r}-llm`,dbName:`${r}-secrets`}),recommended:e.provider?[e.provider,...Le.filter((n)=>n!==e.provider)]:Le,defaults:t})}async function g(e,o){let r=d(e);if(r)return r;let t=o?await o.load():null;return t&&Ne(t)?t:null}export{Ge as describeError,Ne as isConfigured,et as loadModel,p as ownerKeySettings,d as proxySettings,g as resolveSettings,u as visitorStore};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Mn,It}from"./embed-3am76qfd.js";export{Mn as generateText,It as streamText};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{St,gt,Ct}from"./embed-q81wdr1z.js";var E="script,style,noscript,template,svg,canvas,iframe,nav,header,footer,aside,form,button,dialog,[hidden],[aria-hidden='true'],[data-murmur-ignore],murmur-chat",O="main,article,[role='main'],body",D=/^(P|LI|DT|DD|PRE|BLOCKQUOTE|TABLE|TR|FIGCAPTION|DIV|SECTION|ARTICLE|UL|OL|DL|MAIN|H[1-6])$/;function g(o,{root:l=O,exclude:s=E}={}){let r=l.split(",").map((t)=>o.querySelector(t.trim())).find((t)=>!!t),p=r?.querySelector("h1")?.textContent?.replace(/\s+/g," ").trim()||o.querySelector("title")?.textContent?.trim()||"";if(!r)return{title:p,sections:[]};let u=[],e={heading:"",anchor:"",text:""},d=new Map,f=(t)=>{if(t.nodeType===3){e.text+=(t.textContent??"").replace(/\s+/g," ");return}if(t.nodeType!==1)return;let n=t;if(n.matches(s))return;let i=n.tagName.toUpperCase();if(/^H[1-3]$/.test(i)){u.push(e);let c=(n.textContent??"").replace(/\s+/g," ").trim(),m=n.id||n.closest("[id]")?.id||"";if(!m){let a=gt(c),x=d.get(a)??0;d.set(a,x+1),m=x?`${a}-${x}`:a}e={heading:c,anchor:m,text:""};return}if(i==="BR")e.text+=`
|
|
2
2
|
`;if((i==="TD"||i==="TH")&&!/(^|\n)\s*$/.test(e.text))e.text+=" | ";let h=D.test(i);if(h)e.text+=`
|
|
3
3
|
|
|
4
4
|
`;if(i==="LI")e.text+="- ";for(let c of Array.from(n.childNodes))f(c);if(h)e.text+=`
|
|
@@ -6,4 +6,4 @@ import{kt,mt,Tt}from"./embed-krrjjyf5.js";var E="script,style,noscript,template,
|
|
|
6
6
|
`};for(let t of Array.from(r.childNodes))f(t);return u.push(e),{title:p,sections:u.map((t)=>({...t,text:t.text.replace(/[ \t]+\n/g,`
|
|
7
7
|
`).replace(/\n{3,}/g,`
|
|
8
8
|
|
|
9
|
-
`).trim()})).filter((t)=>t.text)}}function L(o,l=o.location?.href??"",s={}){let r=g(o,s);return
|
|
9
|
+
`).trim()})).filter((t)=>t.text)}}function L(o,l=o.location?.href??"",s={}){let r=g(o,s);return Ct([{url:l,title:r.title,sections:r.sections}],s.maxChunk??St)}export{L as indexDocument};
|
|
@@ -1,3 +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(`
|
|
1
|
+
import{oe,Ie}from"./embed-rjpq8psf.js";import{b,He,me,u,e,r,c,ie,o,t,l,f,y,i,n,G,k,T,d,j,M,ee,te,le,F,z,C,Ft,he,W,Se,dt,a,s,h,g,ne,ve,S,O,I,D,p,E,Ce,Y}from"./embed-50pfy67v.js";var xe=t({messages:o(G()).nullish(),cached_tokens:r().nullish(),audio_tokens:r().nullish()}).catchall(G()),$e=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:$e.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:L}=w[_],v=_===w.length-1;switch(H){case"system":m.push({role:"system",content:L});break;case"user":m.push({role:"user",content:L.map((q)=>{switch(q.type){case"text":return{type:"text",text:q.text};case"file":switch(q.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(q.mediaType)==="image")return{type:"image_url",image_url:ke({part:q})};else{if(q.data.type==="data"){if(O({part:q})!=="application/pdf")throw new u({functionality:"Only images and PDF file parts are supported"})}else if(q.mediaType!=="application/pdf")throw new u({functionality:"Only images and PDF file parts are supported"});return{type:"document_url",document_url:ke({part:q})}}}}})});break;case"assistant":{let q="",N=!1,x=[],R=[];for(let A of L)switch(A.type){case"text":q+=A.text,x.push({type:"text",text:A.text});break;case"tool-call":R.push({id:A.toolCallId,type:"function",function:{name:A.toolName,arguments:JSON.stringify(A.input)}});break;case"reasoning":N=!0,x.push({type:"thinking",thinking:[{type:"text",text:A.text}],closed:!0});break;default:throw Error(`Unsupported content type in assistant message: ${A.type}`)}m.push({role:"assistant",content:N?x:q,prefix:v?!0:void 0,tool_calls:R.length>0?R:void 0});break}case"tool":for(let q of L){if(q.type==="tool-approval-response")continue;let N=q.output,x;switch(N.type){case"text":case"error-text":x=N.value;break;case"execution-denied":x=N.reason??"Tool call execution denied.";break;case"content":case"json":case"error-json":x=JSON.stringify(N.value)}m.push({role:"tool",name:q.toolName,tool_call_id:q.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()}),De=a(()=>s(Ee())),Pe=a(()=>s(t({object:n("error"),message:e(),type:e(),param:e().nullable(),code:e().nullable()}))),ce=I({errorSchema:Pe,errorToMessage:(w)=>w.message});function Ve({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 L=m.type;switch(L){case"auto":case"none":return{tools:H,toolChoice:L,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: ${L}`})}}var Je=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"]),ze=new Set(["zai-glm-5","zai-glm-5-3","zai-glm-5-3-flash","zai-glm-latest"]),Ke=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:L,topK:v,frequencyPenalty:q,presencePenalty:N,reasoning:x,stopSequences:R,responseFormat:A,seed:U,providerOptions:X,tools:se,toolChoice:Q}){let Z=[],V=await h({provider:"mistral",providerOptions:X,schema:De})??{};if(v!=null)Z.push({type:"unsupported",feature:"topK"});let re=!Je.has(this.modelId),K;if(re){let de=ze.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(A?.type==="json"&&(!J||A.schema==null))m=Ft({messages:m,schema:A.schema});let B={model:this.modelId,safe_prompt:V.safePrompt,max_tokens:_,temperature:H,top_p:L,...q!=null?{frequency_penalty:q}:{},...N!=null?{presence_penalty:N}:{},stop:R,random_seed:U,reasoning_effort:K,response_format:A?.type==="json"?J&&A?.schema!=null?{type:"json_schema",json_schema:{schema:A.schema,strict:P,name:A.name??"response",description:A.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}=Ve({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:L,value:v,rawValue:q}=await g({url:`${this.config.baseURL}/chat/completions`,headers:d(this.config.headers?.(),m.headers),body:_,failedResponseHandler:ce,successfulResponseHandler:p(Be),abortSignal:m.abortSignal,fetch:this.config.fetch}),N=v.choices[0],x=[];if(N.message.content!=null&&Array.isArray(N.message.content)){for(let R of N.message.content)if(R.type==="thinking"){let A=Te(R.thinking);if(A.length>0)x.push({type:"reasoning",text:A})}else if(R.type==="text"){if(R.text.length>0)x.push({type:"text",text:R.text})}}else{let R=Me(N.message.content);if(R!=null&&R.length>0)x.push({type:"text",text:R})}if(N.message.tool_calls!=null)for(let R of N.message.tool_calls)x.push({type:"tool-call",toolCallId:R.id,toolName:R.function.name,input:R.function.arguments});return{content:x,finishReason:{unified:je(N.finish_reason),raw:N.finish_reason??void 0},usage:pe(v.usage),request:{body:_},response:{...ee(v),headers:L,body:q},warnings:H}}async doStream(m){let{args:_,warnings:H}=await this.getArgs(m),L={..._,stream:!0},{responseHeaders:v,value:q}=await g({url:`${this.config.baseURL}/chat/completions`,headers:d(this.config.headers?.(),m.headers),body:L,failedResponseHandler:ce,successfulResponseHandler:D(We),abortSignal:m.abortSignal,fetch:this.config.fetch}),N={unified:"interrupted",raw:void 0},x=void 0,R=!0,A=!1,U=null,X,se=this.generateId;return{stream:q.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){N={unified:"error",raw:void 0},Z.enqueue({type:"error",error:Q.error});return}let V=Q.value;if(R)R=!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(A)Z.enqueue({type:"text-end",id:"0"}),A=!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(!A){if(U!=null)Z.enqueue({type:"reasoning-end",id:U}),U=null;Z.enqueue({type:"text-start",id:"0"}),A=!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)N={unified:je(re.finish_reason),raw:re.finish_reason}},flush(Q){if(U!=null)Q.enqueue({type:"reasoning-end",id:U});if(A)Q.enqueue({type:"text-end",id:"0"});X.flush(),Q.enqueue({type:"finish",finishReason:N,usage:pe(x)})}})),request:{body:L},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(),Be=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}))),We=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 Ge(w,m){let _=[],H=[],L=new Set,v=(q)=>{if(L.has(q.toolCallId)){let x=null;if(q.output.type==="json"){let R=q.output.value,A=R!=null&&typeof R==="object"&&"info"in R?R.info:void 0;if(A!=null&&typeof A==="object"&&!Array.isArray(A))x="result"in A?A.result??A:A}_.push({type:"function.result",tool_call_id:q.toolCallId,result:typeof x==="string"?x:JSON.stringify(x)});return}let N=be([{role:"tool",content:[q]}])[0];_.push({type:"function.result",tool_call_id:q.toolCallId,result:N.content})};for(let q of w)switch(q.role){case"system":H.push(q.content);break;case"user":{let N=be([q])[0];if(N.role==="user")_.push({type:"message.input",role:"user",content:N.content});break}case"assistant":{let N=[],x=()=>{if(N.length>0)_.push({type:"message.input",role:"assistant",content:N}),N=[]};for(let R of q.content)switch(R.type){case"text":N.push({type:"text",text:R.text});break;case"reasoning":N.push({type:"thinking",thinking:[{type:"text",text:R.text}],closed:!0});break;case"tool-call":if(x(),R.providerExecuted){let A=R.providerOptions?.mistral?.function??R.providerOptions?.mistral?.name,U=R.input;_.push({type:"function.call",tool_call_id:R.toolCallId,name:typeof A==="string"?A:m.toProviderToolName(R.toolName),arguments:typeof U?.arguments==="string"?U.arguments:JSON.stringify(R.input)}),L.add(R.toolCallId)}else _.push({type:"function.call",tool_call_id:R.toolCallId,name:R.toolName,arguments:JSON.stringify(R.input)});break;case"tool-result":x(),v(R);break;default:throw new u({functionality:`assistant content type: ${R.type}`})}x();break}case"tool":for(let N of q.content){if(N.type==="tool-approval-response")continue;v(N)}}return{inputs:_,instructions:H.length>0?H.join(`
|
|
2
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};
|
|
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 L=m.type;switch(L){case"auto":case"none":return{tools:H,toolChoice:L,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((q)=>q.type==="function"?q.function.name===v:q.type===v),toolChoice:"any",toolWarnings:_}}default:throw new u({functionality:`tool choice type: ${L}`})}}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:L,topK:v,frequencyPenalty:q,presencePenalty:N,reasoning:x,stopSequences:R,responseFormat:A,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(A?.type==="json"&&(!J||A.schema==null))m=Ft({messages:m,schema:A.schema});let B={max_tokens:_,temperature:H,top_p:L,...q!=null?{frequency_penalty:q}:{},...N!=null?{presence_penalty:N}:{},stop:R,random_seed:U,reasoning_effort:K,response_format:A?.type==="json"?J&&A?.schema!=null?{type:"json_schema",json_schema:{schema:A.schema,strict:P,name:A.name??"response",description:A.description}}:{type:"json_object"}:void 0},{tools:ae,toolChoice:fe,toolWarnings:ye}=Ze({tools:se,toolChoice:Q});for(let[de,Ue]of Object.entries({safePrompt:V.safePrompt,documentImageLimit:V.documentImageLimit,documentPageLimit:V.documentPageLimit,promptCacheKey:V.promptCacheKey,parallelToolCalls:V.parallelToolCalls}))if(Ue!=null)Z.push({type:"unsupported",feature:de,details:"Not supported by the Mistral Conversations API."});return{args:{model:this.modelId,store:!1,...Ge(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:L,rawValue:v,responseHeaders:q}=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}),N=Re({tools:m.tools,generateId:this.generateId}),x=[],R=!1,A;for(let U of L.outputs)switch(U.type){case"tool.execution":x.push(...N.convertTool(U));break;case"function.call":R=!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":A=U.model??A;for(let X of typeof U.content==="string"?[{type:"text",text:U.content}]:U.content)x.push(...N.convertChunk(X))}return{content:x,finishReason:{unified:R?"tool-calls":"stop",raw:void 0},usage:pe(L.usage),request:{body:_},response:{id:L.conversation_id,modelId:A,headers:q,body:v},warnings:H}}async doStream(m){let{args:_,warnings:H}=await this.getArgs(m),L={..._,stream:!0},{value:v,responseHeaders:q}=await g({url:`${this.config.baseURL}/conversations`,headers:d(this.config.headers?.(),m.headers),body:L,failedResponseHandler:ce,successfulResponseHandler:D(st),abortSignal:m.abortSignal,fetch:this.config.fetch}),N=Re({tools:m.tools,generateId:this.generateId}),x=new Map,R,A,U,X=!1,se=!1,Q=!1,Z=!1,V=(K)=>{if(A!=null)K.enqueue({type:A.type==="text"?"text-end":"reasoning-end",id:A.id}),A=void 0},re=this.generateId;return{stream:v.pipeThrough(new TransformStream({start(K){R=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 N.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(A?.id!==ae||A.type!==B.type)V(J),A={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,R.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:N.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 N.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),R.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:L},response:{headers:q}}}};function Re({tools:w,generateId:m}){let _=le({tools:w,providerToolNames:ge}),H=new Set;return{toolNameMapping:_,convertChunk(L){switch(L.type){case"text":return L.text.length>0?[{type:"text",text:L.text}]:[];case"thinking":{let q=L.thinking.map((N)=>N.text).join("");return q.length>0?[{type:"reasoning",text:q}]:[]}case"tool_reference":if(L.url==null||H.has(L.url))return[];let v=m();return H.add(L.url),[{type:"source",sourceType:"url",id:v,url:L.url,title:L.title??L.url}]}},convertTool(L){let v=_.toCustomToolName(L.name);return[{type:"tool-call",toolCallId:L.id,toolName:v,input:JSON.stringify({arguments:L.arguments}),providerExecuted:!0,providerMetadata:{mistral:{type:"tool.execution",name:L.name,...L.function!=null?{function:L.function}:{}}}},{type:"tool-result",toolCallId:L.id,toolName:v,result:{...L.info!=null?{info:L.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:L,providerOptions:v}){if(m.length>this.maxEmbeddingsPerCall)throw new me({provider:this.provider,modelId:this.modelId,maxEmbeddingsPerCall:this.maxEmbeddingsPerCall,values:m});let q=await h({provider:"mistral",providerOptions:v,schema:ot})??{},{responseHeaders:N,value:x,rawValue:R}=await g({url:`${this.config.baseURL}/embeddings`,headers:d(this.config.headers?.(),L),body:{model:this.modelId,input:m,metadata:q.metadata,output_dimension:q.outputDimension??_,output_dtype:q.outputDtype,encoding_format:"float"},failedResponseHandler:ce,successfulResponseHandler:p(it),abortSignal:H,fetch:this.config.fetch});return{warnings:[],embeddings:x.data.map((A)=>A.embedding),usage:x.usage?{tokens:x.usage.prompt_tokens}:void 0,response:{headers:N,body:R}}}},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()}))),lt=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:L,speed:v,language:q,providerOptions:N}){let x=[],R=await h({provider:"mistral",providerOptions:N,schema:rt}),A="mp3";if(["pcm","wav","mp3","flac","opus"].includes(H))A=H;else x.push({type:"unsupported",feature:"outputFormat",details:`Unsupported output format: ${H}. Using mp3 instead.`});if(L!=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(q!=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=R?.refAudio,X={model:this.modelId,input:m,voice_id:U==null?_:void 0,ref_audio:U,expressiveness:R?.expressiveness,phoneme_hints:R?.phonemeHints,response_format:A,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:L,warnings:v}=await this.getArgs(m),{value:q,responseHeaders:N,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:L},failedResponseHandler:ce,successfulResponseHandler:p(ct),abortSignal:m.abortSignal,fetch:this.config.fetch});return{audio:q.audio_data,warnings:v,request:{body:JSON.stringify(L)},response:{timestamp:_,modelId:this.modelId,headers:N,body:x}}}},ct=a(()=>s(t({audio_data:e()}))),ut=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 L=[],v=await h({provider:"mistral",providerOptions:H,schema:ut});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 q=new FormData,N=m instanceof Uint8Array?new Blob([m]):new Blob([j(m)]);if(q.append("model",this.modelId),q.append("file",new File([N],"audio",{type:_}),`audio.${dt(_)}`),v!=null)ue(q,"language",v.language),ue(q,"return_language",v.returnLanguage),ue(q,"temperature",v.temperature),ue(q,"timestamp_granularities",v.timestampGranularities),ue(q,"diarize",v.diarize),ue(q,"context_bias",v.contextBias);return{formData:q,warnings:L}}async doGenerate(m){let _=this.config._internal?.currentDate?.()??new Date,{formData:H,warnings:L}=await this.getArgs(m),{value:v,responseHeaders:q,rawValue:N}=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}))??[],R={};if(v.usage!=null)R.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 A=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(A!=null&&A.length>0)R.segments=A;return{text:v.text,segments:x,language:v.language??void 0,durationInSeconds:v.usage?.prompt_audio_seconds??x.at(-1)?.endSecond??void 0,warnings:L,...v.usage!=null&&{usage:v.usage},response:{timestamp:_,modelId:v.model,headers:q,body:N},...Object.keys(R).length>0&&{providerMetadata:{mistral:R}}}}};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=(R)=>new Ke(R,{provider:"mistral.chat",baseURL:m,headers:_,fetch:w.fetch,generateId:w.generateId}),L=(R)=>new at(R,{provider:"mistral.embedding",baseURL:m,headers:_,fetch:w.fetch}),v=(R)=>new Qe(R,{provider:"mistral.conversation",baseURL:m,headers:_,fetch:w.fetch,generateId:w.generateId}),q=(R)=>new lt(R,{provider:"mistral.speech",baseURL:m,headers:_,fetch:w.fetch}),N=(R)=>new pt(R,{provider:"mistral.transcription",baseURL:m,headers:_,fetch:w.fetch}),x=function(R){if(new.target)throw Error("The Mistral model function cannot be called with the new keyword.");return H(R)};return x.specificationVersion="v4",x.languageModel=H,x.chat=H,x.conversation=v,x.tools=vt,x.embedding=L,x.embeddingModel=L,x.textEmbedding=L,x.textEmbeddingModel=L,x.speech=q,x.speechModel=q,x.transcription=N,x.transcriptionModel=N,x.imageModel=(R)=>{throw new He({modelId:R,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{It}from"./embed-3am76qfd.js";import{Et}from"./embed-g0p6yc29.js";import{tt,Bt,Ut,nt,Gt}from"./embed-cx1r66ch.js";function M(e,s){let t=[...s].reverse().find((o)=>o.role==="user");return tt(e)<12&&t?`${t.content} ${e}`:e}function T(e){let s=e.retriever??(e.index?Et(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(),Ut(e.language),i.length?`Sources:
|
|
2
2
|
|
|
3
|
-
${
|
|
3
|
+
${Bt(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=It({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=nt(n),c({text:n,cited:Gt(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 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
|
|
1
|
+
import{N,vn,nt,Rt}from"./embed-cx1r66ch.js";vn(import.meta.url,["e5y3vjha","ft8r539a","xyp6nm65","qpy1k923","1a55et82","06ybegpd","a5j4aat5","8r44b2wt","cx1r66ch","rjpq8psf","q81wdr1z","3am76qfd","g0p6yc29","49m0ht4a","sg25g0vj","pjxy71n5","t87kf8t0","bjrbem49","tw416spz","556tp13p","25w1nsx5","50pfy67v","yz75savs"],[["./murmur.js",8],["./index-ft8r539a.js",9],["./chunk-xyp6nm65.js",10],["./index-qpy1k923.js",10],["./murmur-1a55et82.js",11,12,8],["./retriever-06ybegpd.js",12],["./index-a5j4aat5.js",9],["./index-8r44b2wt.js",8],["./embed-cx1r66ch.js"],["./embed-rjpq8psf.js",8],["./embed-q81wdr1z.js"],["./embed-3am76qfd.js",8,21],["./embed-g0p6yc29.js",8],["./transformers.web-49m0ht4a.js",8],["./openai-compatible-sg25g0vj.js",9,21],["./index-pjxy71n5.js",11],["./browser-t87kf8t0.js"],["./openai-bjrbem49.js",9,8,21],["./anthropic-tw416spz.js",9,22,21],["./google-556tp13p.js",9,22,21],["./mistral-25w1nsx5.js",9,21],["./embed-50pfy67v.js"],["./embed-yz75savs.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.",localNoWebGPUOnly:"This site answers with an AI model that runs in your browser, and this browser cannot run it (no WebGPU). Try a recent Chrome, Edge or Safari.",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.",localNoWebGPUOnly:"Ce site répond avec un modèle d'IA qui tourne dans votre navigateur, et ce navigateur ne peut pas le faire tourner (pas de WebGPU). Essayez un Chrome, Edge ou Safari récent.",gigabytes:"Go",megabytes:"Mo"},ee={en:X,fr:ce};function te(...e){for(let n of e){let o=n?.toLowerCase().split(/[-_]/)[0];if(o&&o in ee)return o}return"en"}function B(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 U(e,n){let o=e.createElement("template");return o.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>`,o.content.firstElementChild}var pe=/^(https?:\/\/|\/|#|\.\/|mailto:)/i;function S(e,n,o,t){let s=/(`[^`]+`)|(\*\*[^*]+\*\*)|(\*[^*\s][^*]*\*|_[^_\s][^_]*_)|(\[[^\]]+\]\([^)\s]+\))|(\[\d{1,2}\])/g,i=0;for(let c of n.matchAll(s)){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),o,d),t.appendChild(d)}else if(c[3]){let d=e.createElement("em");S(e,r.slice(1,-1),o,d),t.appendChild(d)}else if(c[4]){let d=r.indexOf("]("),a=r.slice(1,d),u=r.slice(d+2,-1);if(pe.test(u)){let h=e.createElement("a");if(h.href=u,h.textContent=a,/^https?:/i.test(u))h.target="_blank",h.rel="noopener noreferrer";t.appendChild(h)}else t.appendChild(e.createTextNode(a))}else{let d=o(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 oe(e){return e.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map((n)=>n.trim())}function W(e,n,o){let t=e.ownerDocument,s=t.createDocumentFragment(),i=n.replace(/\r\n?/g,`
|
|
3
3
|
`).split(`
|
|
4
|
-
`),c=[],p=null,r=()=>{if(!c.length)return;let a=t.createElement("p");c.forEach((h
|
|
5
|
-
`),E.appendChild(C),(
|
|
6
|
-
`),
|
|
4
|
+
`),c=[],p=null,r=()=>{if(!c.length)return;let a=t.createElement("p");c.forEach((u,h)=>{if(h)a.appendChild(ne(t,c[h-1]??""));S(t,u.trim(),o,a)}),s.appendChild(a),c=[]},d=()=>{p=null};for(let a=0;a<i.length;a++){let u=i[a]??"",h=/^(\s*)```/.exec(u);if(h){r();let m=h[1]?.length??0,b=m>=2&&p?p.lastElementChild:null;if(!b)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),(b??s).appendChild(E);continue}if(/^\s*([-*_])(?:\s*\1){2,}\s*$/.test(u)){r(),d(),s.appendChild(t.createElement("hr"));continue}if(u.includes("|")&&ue.test(i[a+1]??"")){r(),d();let m=[oe(u)];for(a+=2;a<i.length&&(i[a]??"").includes("|");a++)m.push(oe(i[a]??""));a--;let b=t.createElement("div");b.className="table",b.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,o,A),w.appendChild(A)}y.appendChild(w)}),b.appendChild(y),s.appendChild(b);continue}let g=/^\s*>\s?(.*)$/.exec(u);if(g){r(),d();let m=[g[1]??""];for(;/^\s*>/.test(i[a+1]??"");a++)m.push((i[a+1]??"").replace(/^\s*>\s?/,""));let b=t.createElement("blockquote");W(b,m.join(`
|
|
6
|
+
`),o),s.appendChild(b);continue}let f=/^\s*(?:([-*+])|(\d+)[.)])\s+(.*)$/.exec(u);if(f){r();let m=f[1]?"ul":"ol";if(!p||p.tagName.toLowerCase()!==m){if(p=t.createElement(m),m==="ol"&&f[2]&&f[2]!=="1")p.setAttribute("start",f[2]);s.appendChild(p)}let b=t.createElement("li");S(t,(f[3]??"").trimEnd(),o,b),p.appendChild(b);continue}let k=/^\s*#{1,6}\s+(.*)$/.exec(u);if(k){r(),d();let m=t.createElement("p"),b=t.createElement("strong");S(t,k[1]??"",o,b),m.appendChild(b),s.appendChild(m);continue}if(!u.trim()){r();let m=i.slice(a+1).find((y)=>y.trim())??"",b=p?.tagName.toLowerCase()==="ol"?/^\s*\d+[.)]\s+/:/^\s*[-*+]\s+/;if(!p||!b.test(m))d();continue}if(p&&/^\s{2,}\S/.test(u)){let m=p.lastElementChild;if(m){m.appendChild(ne(t,i[a-1]??"")),S(t,u.trim(),o,m);continue}}d(),c.push(u)}r(),e.replaceChildren(s)}var he={limit:4,budgetTokens:1500};class q{options;turns=[];engine=null;storePromise=null;historyKey;key;local={status:"idle"};localListeners=new Set;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 configured(){return this.options.mode??"auto"}get mode(){let e=this.configured;if(this.options.model)return"custom";if(e==="proxy"||e==="auto"&&this.options.llm?.endpoint)return"proxy";if((e==="auto"||e==="key")&&this.options.llm?.apiKey)return"owner";if(e==="local")return"local";if(e==="key"||!this.localAllowed)return"visitor";return F(`${this.key}-local`)==="0"?"visitor":"local"}get localAllowed(){let e=this.configured;if(this.options.model||e==="proxy"||e==="key")return!1;if(e==="local")return!0;return!this.options.llm?.endpoint&&!this.options.llm?.apiKey&&this.options.local!==!1}get keyAllowed(){let e=this.configured;if(this.options.model||e==="proxy"||e==="local")return!1;return!this.options.llm?.endpoint&&!this.options.llm?.apiKey}get localState(){return this.local}onLocalState(e){return this.localListeners.add(e),()=>this.localListeners.delete(e)}setLocal(e){this.local=e;for(let n of this.localListeners)n(e)}async warmUp(){if(this.mode!=="local"||this.local.status!=="idle")return;if(!await this.canRunLocally())return;let{loadLocalModel:e}=await (N("8r44b2wt"),import("./index-8r44b2wt.js"));this.setLocal({status:"loading"});try{await e(await this.localSpec(),(n)=>this.setLocal({status:"loading",progress:n})),this.setLocal({status:"ready"})}catch{this.setLocal({status:"error"})}}async warmUpIfCached(){if(this.mode!=="local"||this.preload==="consent")return;let{isLocalModelCached:e}=await (N("8r44b2wt"),import("./index-8r44b2wt.js"));if(await e(await this.localSpec()))await this.warmUp()}get preload(){return this.options.preload??"question"}async settleChoice(){if(!this.localAllowed||!this.keyAllowed||F(`${this.key}-local`)!==null)return;let[{isConfigured:e},n]=await Promise.all([(N("ft8r539a"),import("./index-ft8r539a.js")),this.store()]),o=await n.load();if(o&&e(o))G(`${this.key}-local`,"0")}async localSpec(){let{local:e}=this.options;if(e&&typeof e==="object")return e;return(await (N("8r44b2wt"),import("./index-8r44b2wt.js"))).DEFAULT_LOCAL_MODEL}useLocal(e){G(`${this.key}-local`,e?"1":"0"),this.engine=null}get needsDownloadConsent(){return this.mode==="local"&&this.preload==="consent"&&this.local.status!=="ready"&&F(`${this.key}-local-consent`)!=="1"}agreeToDownload(){G(`${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??=(N("ft8r539a"),import("./index-ft8r539a.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(){let e=this.mode;if(e==="custom"||e==="local")return null;let n=await (N("ft8r539a"),import("./index-ft8r539a.js")),o=this.options.llm??{};if(e==="proxy")return n.proxySettings(o);if(e==="owner")return n.ownerKeySettings(o,this.options.catalogUrl);return n.resolveSettings({...o,endpoint:""},await this.store())}async needsSetup(){return this.mode==="visitor"&&!await this.settings()}async canRunLocally(){return(await (N("8r44b2wt"),import("./index-8r44b2wt.js"))).hasWebGPU()}async loadIndex(){let{index:e}=this.options;if(e&&typeof e!=="string")return e;let{isMurmurIndex:n}=await (N("xyp6nm65"),import("./chunk-xyp6nm65.js"));if(e){let t=await fetch(new URL(e,location.href));if(!t.ok)throw Error(`murmur: index ${t.status}`);let s=await t.json();if(!n(s))throw Error("murmur: not a murmur index");return s}let{indexDocument:o}=await (N("qpy1k923"),import("./index-qpy1k923.js"));return o(document,location.pathname+location.search)}createEngine(){return(async()=>{let[{createMurmur:e},n]=await Promise.all([(N("1a55et82"),import("./murmur-1a55et82.js")),this.options.retriever??(N("06ybegpd"),import("./retriever-06ybegpd.js")).then(async(i)=>i.bm25Retriever(await this.loadIndex()))]),o=this.mode==="local",t=this.options.model??(o?async()=>{let{localModel:i}=await (N("8r44b2wt"),import("./index-8r44b2wt.js"));return i({spec:await this.localSpec(),onProgress:(c)=>this.setLocal({status:"loading",progress:c})})}:async()=>{let i=await this.settings();if(!i)throw new H;let{loadModel:c}=await (N("ft8r539a"),import("./index-ft8r539a.js"));return c(i)}),s={retriever:n,model:t,...o?he:{}};if(this.options.instructions)s.instructions=this.options.instructions;if(this.options.lang)s.language=this.options.lang;return e(s)})()}async ask(e,n,o){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 s={role:"assistant",content:""};this.turns.push(s),this.persist();try{if(this.mode==="local")this.warmUp();this.engine??=this.createEngine();let c=await(await this.engine.catch((r)=>{throw this.engine=null,r})).ask(e,{history:t,signal:o});s.passages=c.passages.map(({url:r,anchor:d,title:a,heading:u})=>({url:r,anchor:d,title:a,heading:u}));for await(let r of c.textStream)s.content+=r,n(s.content,s);let p=await c.done;if(this.mode==="local")this.setLocal({status:"ready"});s.content=p.text,s.cited=p.cited}catch(i){if(o.aborted)s.cited=[];else if(i instanceof H)throw this.turns.splice(-2,2),i;else s.error=await this.describe(i)}finally{this.persist()}return s}async describe(e){if(e instanceof Error&&e.name==="LocalModelError")return`local-${e.code??"load"}|${e.message}`;try{let{describeError:n}=await (N("ft8r539a"),import("./index-ft8r539a.js")),o=this.mode==="custom"||this.mode==="local"?null:await this.settings(),t=n(e,o?.apiKey);return`${t.code}|${t.message}`}catch{return`unknown|${e instanceof Error?e.message:String(e)}`}}}function F(e){try{return localStorage.getItem(e)}catch{return null}}function G(e,n){try{if(n===null)localStorage.removeItem(e);else localStorage.setItem(e,n)}catch{}}class H extends Error{constructor(){super("murmur: no model set up")}}var se=`
|
|
7
7
|
:host {
|
|
8
8
|
--accent: var(--murmur-accent, #211c17);
|
|
9
9
|
--accent-ink: var(--murmur-accent-ink, #f6efe0);
|
|
@@ -208,7 +208,7 @@ footer a:hover { text-decoration: underline; }
|
|
|
208
208
|
p.or { margin: 0; color: var(--muted); font-size: 13px; text-align: center; }
|
|
209
209
|
.consent { display: grid; gap: 10px; padding: 14px; border-radius: 12px; background: var(--raised); }
|
|
210
210
|
.consent p { margin: 0; }
|
|
211
|
-
.
|
|
211
|
+
.loadbar { display: grid; gap: 6px; margin: 4px 12px 0; padding: 8px 12px; border-radius: 10px; background: var(--raised); color: var(--muted); font-size: 13px; }
|
|
212
212
|
progress { width: 100%; height: 6px; appearance: none; border: 0; border-radius: 3px; background: var(--line); overflow: hidden; }
|
|
213
213
|
progress::-webkit-progress-bar { background: var(--line); }
|
|
214
214
|
progress::-webkit-progress-value { background: var(--lamp); }
|
|
@@ -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 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};
|
|
223
|
+
`;var me={auth:"errorAuth","auth-or-network":"errorNetwork","rate-limit":"errorRate",overloaded:"errorRate","local-webgpu":"localNoWebGPU","local-load":"localLoadFailed"};function V(e,n,o){if(e>=1000)return`${(e/1000).toLocaleString(n,{maximumFractionDigits:1})} ${o.gigabytes}`;return`${Math.round(e).toLocaleString(n)} ${o.megabytes}`}var ge=typeof HTMLElement>"u"?class{}:HTMLElement;class Y extends ge{options={};session=null;t=B("en");uiLang="en";root;launcher;panel;log;chatView;setupView;input;sendBtn;settingsBtn;controller=null;built=!1;unsubscribe=null;unsubscribeLocal=null;loadbar;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?.(),this.unsubscribeLocal?.(),this.unsubscribeLocal?.()}async open(){if(!this.built)this.build();if(this.launcher.setAttribute("aria-expanded","true"),this.panel.hidden=!1,this.session?.preload==="open")this.session.warmUp();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 o={...e.messages};if(this.t=B(n,o),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,s=t.createElement("style");s.textContent=se,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"}),x(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",(g)=>{if(g.key==="Escape")this.close()});let i=l(t,"header"),c=x(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",(g)=>{if(g.key==="Enter"&&!g.shiftKey&&!g.isComposing)g.preventDefault(),this.submit()}),this.sendBtn=l(t,"button",{class:"send",type:"submit"}),this.setSendMode("send"),d.addEventListener("submit",(g)=>{if(g.preventDefault(),this.controller)this.controller.abort();else this.submit()}),d.append(this.input,this.sendBtn),this.loadbar=l(t,"div",{class:"loadbar",role:"status"}),this.loadbar.hidden=!0;let a=l(t,"footer"),u=l(t,"a",{href:"https://maxgfr.github.io/murmur/",target:"_blank",rel:"noopener"});if(u.textContent=this.t.poweredBy,a.append(u),this.chatView.append(this.log,this.loadbar,d,a),this.setupView=l(t,"div",{class:"setup"}),this.setupView.hidden=!0,this.panel.append(i,this.chatView,this.setupView),this.root.replaceChildren(s,this.launcher,this.panel),this.hasAttribute("inline"))this.launcher.hidden=!0;this.built=!0;let h=new q({...e,lang:n});if(this.session=h,this.settingsBtn.hidden=!h.keyAllowed,this.unsubscribeLocal=h.onLocalState((g)=>this.drawLocal(g)),ve(()=>{if(h.preload==="idle")h.warmUp();else h.warmUpIfCached()}),this.renderChat(),e.open||!this.hasAttribute("inline")&&j("get",this.openKey))this.open()}drawLocal(e){let n=this.ownerDocument;if(this.launcher.querySelector(".lamp")?.classList.toggle("busy",e.status==="loading"),e.status!=="loading"){this.loadbar.hidden=!0;return}let t=e.progress,s=!t?this.t.localLoading:t.progress>=1?this.t.localPreparing:`${this.t.localLoading} ${Math.round(t.progress*100)} % · ${Math.round(t.loaded/1e6).toLocaleString(this.uiLang)} / ${V(t.total/1e6,this.uiLang,this.t)}`,i=l(n,"progress",{max:"1"});if(t&&t.progress<1)i.setAttribute("value",String(t.progress));i.setAttribute("aria-label",this.t.localLoadingLabel),this.loadbar.replaceChildren(x(n,"span",s),i),this.loadbar.hidden=!1}autosize(){this.input.style.height="auto",this.input.style.height=`${Math.min(this.input.scrollHeight,140)}px`}setSendMode(e){this.sendBtn.replaceChildren(U(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??[],o=[],t=l(e,"div",{class:"msg bot greeting"});t.append(x(e,"p",this.t.greeting)),o.push(t);for(let s of n)o.push(this.turnNode(s));this.log.replaceChildren(...o),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 o=l(n,"div",{class:"msg bot"});return this.fillAnswer(o,e,!0),o}fillAnswer(e,n,o){let t=this.ownerDocument;if(n.error){let[r="unknown",...d]=n.error.split("|"),a=me[r],u=l(t,"div",{class:"error",role:"alert"});u.append(x(t,"p",a?this.t[a]:`${this.t.errorOther} ${d.join("|")}`));let h=l(t,"div",{class:"row"}),g=l(t,"button",{class:"text-btn",type:"button"});if(g.textContent=this.t.retry,g.addEventListener("click",()=>{let f=this.session?.turns??[],k=f.at(-2)?.content??"";if(f.splice(-2,2),this.renderChat(),k)this.ask(k)}),h.append(g),r==="auth"||r==="auth-or-network"){if(!this.settingsBtn.hidden){let f=l(t,"button",{class:"text-btn",type:"button"});f.textContent=this.t.settings,f.addEventListener("click",()=>void this.showSetup()),h.append(f)}}u.append(h),e.replaceChildren(u);return}let s=n.passages??[],i=l(t,"div");W(i,nt(n.content),(r)=>{let d=s[r-1];if(!d)return null;let a=l(t,"a",{class:"cite",href:Rt(d)});return a.textContent=String(r),a.setAttribute("aria-label",`${this.t.sources} ${r}: ${d.title}`),a});let c=[i];if(o&&!n.content.trim()&&!s.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(o&&p.length){c.push(x(t,"p",this.t.sources,"sources-label"));let r=l(t,"ol",{class:"sources"});for(let d of p){let a=s[d-1];if(!a)continue;let u=l(t,"li"),h=l(t,"a",{href:Rt(a)}),g=x(t,"span",String(d),"cite");g.setAttribute("aria-hidden","true");let f=l(t,"span",{class:"where"});if(f.append(t.createTextNode(a.title||a.url)),a.heading&&a.heading!==a.title)f.append(x(t,"span",` › ${a.heading}`));h.append(g,f),u.append(h),r.append(u)}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||this.session.mode==="local"&&!await this.session.canRunLocally()){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 o=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)),o.append(t),this.log.append(o),this.log.scrollTop=this.log.scrollHeight,this.log.setAttribute("aria-busy","true");let s=new AbortController;this.controller=s,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(o,r,!1),d)this.log.scrollTop=this.log.scrollHeight},s.signal);this.fillAnswer(o,c,!0),this.emit(c.error?{state:"error"}:{state:"done",passages:c.passages??[],cited:c.cited??[]})}catch(c){if(o.remove(),this.log.lastElementChild?.remove(),this.emit({state:"idle"}),c instanceof H)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,o=this.t,t=this.session,s=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()){if(i.append(x(n,"p",t.keyAllowed?o.localNoWebGPU:o.localNoWebGPUOnly)),t.keyAllowed){let r=l(n,"button",{class:"primary",type:"button"});r.textContent=o.useKey,r.addEventListener("click",p),c.append(r)}}else{i.append(x(n,"p",o.localConsent.replace("{name}",s.name).replace("{size}",V(s.sizeMB,this.uiLang,o))));let r=l(n,"button",{class:"primary",type:"button"});if(r.textContent=o.localDownload,r.addEventListener("click",()=>{t.agreeToDownload(),i.remove(),this.input.value=e,this.submit()}),c.append(r),t.keyAllowed){let d=l(n,"button",{class:"link-btn",type:"button"});d.textContent=o.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,o=await this.session.store();await o.load(),o.open(),this.chatView.hidden=!0,this.setupView.hidden=!1;let t=this.t,s=l(n,"button",{class:"link-btn",type:"button"});s.textContent=t.back,s.addEventListener("click",()=>this.hideSetup());let i=x(n,"h3",t.setupTitle);i.style.cssText="margin:0;font-size:17px;font-weight:650";let c=x(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 u=x(n,"small",t.localOptionHint.replace("{name}",r.name).replace("{size}",V(r.sizeMB,this.uiLang,t)));d.append(a,u),a.addEventListener("click",()=>{if(p.useLocal(!0),this.hideSetup(),e)this.input.value=e,this.submit()});let h=l(n,"button",{class:"link-btn",type:"button"});if(h.textContent=t.useKey,h.addEventListener("click",()=>{p.useLocal(!1),a.textContent=t.localOption,a.disabled=!1,h.remove()}),p.mode==="local")a.textContent=t.localActive,a.disabled=!0,d.append(h);p.canRunLocally().then((v)=>{if(v)return;a.textContent=t.localOption,a.disabled=!0,u.textContent=t.localNoWebGPU,h.remove()});let g=x(n,"p",t.orKey,"or");d.hidden=g.hidden=!p.localAllowed;let f=ie(n,t.local),k=I(n,t.provider,l(n,"select")),m=k.control,b=I(n,t.model,l(n,"select")),y=b.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 v of["ollama","lmstudio"]){let L=l(n,"button",{class:"text-btn",type:"button"});L.textContent=v==="ollama"?"Ollama":"LM Studio",L.addEventListener("click",async()=>{let{ENDPOINT_PRESETS:M}=await (N("a5j4aat5"),import("./index-a5j4aat5.js"));o.applyPreset(M[v])}),A.append(L)}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),P=l(n,"button",{class:"text-btn",type:"button"});P.textContent=t.test;let K=l(n,"p",{class:"result",role:"status"});K.style.margin="0";let z=l(n,"button",{class:"primary",type:"button"});z.textContent=t.save;let D=l(n,"button",{class:"link-btn",type:"button"});D.textContent=t.forget,f.input.addEventListener("change",()=>o.toggleCustom(f.input.checked)),m.addEventListener("change",()=>o.selectProvider(m.value)),y.addEventListener("change",()=>o.selectModel(y.value)),C.addEventListener("input",()=>o.setEndpoint(C.value)),T.addEventListener("input",()=>o.setCustomModel(T.value)),O.addEventListener("input",()=>o.setApiKey(O.value)),R.input.addEventListener("change",()=>o.setRememberKey(R.input.checked)),P.addEventListener("click",()=>void o.test()),z.addEventListener("click",async()=>{if(!(await o.save()).ok)return;if(p.useLocal(!1),this.hideSetup(),e)this.input.value=e,this.submit()}),D.addEventListener("click",()=>void o.clear());let Q=l(n,"div",{class:"row"});Q.append(P,K),this.setupView.replaceChildren(s,i,c,d,g,f.label,k.label,b.label,A,E.label,w.label,Z.label,R.label,Q,z,D);let le=(v)=>{let L=v.draft.custom;if(f.input.checked=L,k.label.hidden=L,b.label.hidden=L,A.hidden=!L,E.label.hidden=!L,w.label.hidden=!L,v.catalogStatus==="ready")fe(n,m,v,t),be(n,y,v);else m.replaceChildren(J(n,"",v.catalogStatus==="error"?t.catalogError:t.loadingCatalog)),y.replaceChildren();if(C!==this.root.activeElement)C.value=v.draft.customEndpoint;if(T!==this.root.activeElement)T.value=v.draft.customModel;if(O!==this.root.activeElement)O.value=v.apiKey;R.input.checked=v.draft.rememberKey,P.disabled=!v.canTest||v.testing,P.textContent=v.testing?t.testing:t.test,z.disabled=!v.canSave;let M=v.testResult;K.className=M?M.ok?"result ok":"result fail":"result",K.textContent=!M?"":M.ok?t.testOk:`${t.testFail} ${M.reason}${M.message?` (${M.message})`:""}`};this.unsubscribe?.(),this.unsubscribe=o.subscribe(le),this.setupView.scrollTop=0,s.focus()}hideSetup(){this.unsubscribe?.(),this.unsubscribe=null,this.setupView.hidden=!0,this.chatView.hidden=!1,this.input.focus()}}function fe(e,n,o,t){let s=[[t.recommended,o.providers.recommended],[t.otherProviders,o.providers.others]],i=`${o.draft.providerId}|${o.providers.recommended.length+o.providers.others.length}`;if(n.dataset.sig===i)return;n.dataset.sig=i,n.replaceChildren(...s.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=o.draft.providerId}function be(e,n,o){let t=`${o.draft.providerId}|${o.draft.model}|${o.models.length}`;if(n.dataset.sig===t)return;n.dataset.sig=t;let s=o.recommendedModel?.id;n.replaceChildren(...o.models.map((i)=>J(e,i.id,i.id===s?`${i.name} ★`:i.name))),n.value=o.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 ve(e){let n=globalThis.requestIdleCallback;if(n)n(e,{timeout:4000});else setTimeout(e,1500)}function l(e,n,o={}){let t=e.createElement(n);for(let[s,i]of Object.entries(o))t.setAttribute(s,i);return t}function x(e,n,o,t){let s=e.createElement(n);if(s.textContent=o,t)s.className=t;return s}function J(e,n,o){let t=e.createElement("option");return t.value=n,t.textContent=o,t}function _(e,n,o){let t=l(e,"button",{class:"icon-btn",type:"button",title:o});return t.setAttribute("aria-label",o),t.append(U(e,n)),t}function I(e,n,o,t){let s=l(e,"label",{class:"field"});if(s.append(x(e,"span",n),o),t)s.append(x(e,"small",t));return{label:s,control:o}}function ie(e,n){let o=l(e,"label",{class:"check"}),t=l(e,"input",{type:"checkbox"});return o.append(t,e.createTextNode(n)),{label:o,input:t}}function xe(e="murmur-chat"){if(!customElements.get(e))customElements.define(e,class extends Y{});return customElements.get(e)}function re(e={}){xe();let{target:n,inline:o,...t}=e,s=document.createElement("murmur-chat");if(o)s.setAttribute("inline","");return s.configure(t),(n??document.body).append(s),s}function ye(e,n){let o={};if(e.index)o.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(e.apiKey)t.apiKey=e.apiKey;if(Object.keys(t).length)o.llm=t;if(e.instructions)o.instructions=e.instructions;if(e.lang)o.lang=e.lang;let s={};if(e.title)s.title=e.title;if(e.greeting)s.greeting=e.greeting;if(e.placeholder)s.placeholder=e.placeholder;if(e.button)s.open=e.button;if(Object.keys(s).length)o.messages=s;if(e.position==="bottom-left"||e.position==="bottom-right")o.position=e.position;if(e.theme==="light"||e.theme==="dark"||e.theme==="auto")o.theme=e.theme;if(e.accent)o.accent=e.accent;if(e.catalog)o.catalogUrl=new URL(e.catalog,n).href;if(e.storageKey)o.storageKey=e.storageKey;if(e.open==="true")o.open=!0;if(e.local==="false")o.local=!1;if(e.mode==="auto"||e.mode==="proxy"||e.mode==="local"||e.mode==="key")o.mode=e.mode;if(e.preload==="question"||e.preload==="open"||e.preload==="idle"||e.preload==="consent")o.preload=e.preload;return o}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 o=ye(n?.dataset??{},location.href);o.catalogUrl??=new URL("./models.json",e).href,re(o)}if(typeof document<"u"&&!document.querySelector("murmur-chat:not([inline])"))if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",ae,{once:!0});else ae();export{ye as optionsFromDataset};
|