murmur-rag 2.1.2 → 2.1.4
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/dist/cdn/{anthropic-p21yv83k.js → anthropic-dwkw2zf0.js} +1 -1
- package/dist/cdn/{embed-52n5pm9t.js → embed-3swpcbya.js} +3 -3
- package/dist/cdn/{embed-xdftb0b2.js → embed-5hve1gb4.js} +5 -5
- package/dist/cdn/{embed-f7gzw56s.js → embed-7xhp36fz.js} +1 -1
- package/dist/cdn/embed-ecgnvx0r.js +9 -0
- package/dist/cdn/{embed-wd4wcxtq.js → embed-jq13zkzk.js} +1 -1
- package/dist/cdn/{embed-3vb4wcng.js → embed-wyxkzaf2.js} +2 -2
- package/dist/cdn/{google-df5pjzyw.js → google-gqhzbbx9.js} +1 -1
- package/dist/cdn/{index-0yvq5pe3.js → index-6xnn7k2v.js} +1 -1
- package/dist/cdn/index-m7fjbsrx.js +1 -0
- package/dist/cdn/{index-arpy64fv.js → index-qp16wec2.js} +1 -1
- package/dist/cdn/{index-f5ctpc4w.js → index-rxaj62j2.js} +1 -1
- package/dist/cdn/{mistral-0tm1pmab.js → mistral-sr36hy2t.js} +1 -1
- package/dist/cdn/murmur-4h6m9e42.js +5 -0
- package/dist/cdn/murmur.js +3 -3
- package/dist/cdn/{openai-compatible-vqp1sqdg.js → openai-compatible-g3jhmg6n.js} +1 -1
- package/dist/cdn/{openai-t1hcmmxm.js → openai-ydzb54fp.js} +6 -6
- package/dist/cdn/retriever-xmnq9gye.js +1 -0
- package/dist/cdn/{transformers.web-nr67a9j3.js → transformers.web-jpvp33st.js} +1 -1
- package/dist/lib/chunks/{index-8h9c8ekq.js → index-35jjv3kg.js} +9 -4
- package/dist/lib/chunks/{index-b77xqap3.js → index-kcw6fd5n.js} +1 -1
- package/dist/lib/chunks/{index-6j52e72a.js → index-q0vxh483.js} +3 -3
- package/dist/lib/chunks/{index-p86sy3y4.js → index-qzy7ezw0.js} +1 -1
- package/dist/lib/chunks/{murmur-t36hd4vt.js → murmur-z8e9regf.js} +2 -2
- package/dist/lib/chunks/{retriever-wxshtnm0.js → retriever-v2py7tyc.js} +1 -1
- package/dist/lib/embed.js +2 -2
- package/dist/lib/index.js +3 -3
- package/dist/lib/rag/index.js +2 -2
- package/dist/lib/widget/index.js +2 -2
- package/dist/types/core/murmur.d.ts +2 -0
- package/dist/types/rag/ground.d.ts +1 -1
- package/package.json +1 -1
- package/dist/cdn/embed-q03dhgpb.js +0 -9
- package/dist/cdn/index-r7h9ewgp.js +0 -1
- package/dist/cdn/murmur-krwan2e5.js +0 -5
- package/dist/cdn/retriever-3yz0vzz9.js +0 -1
package/dist/cdn/murmur.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{N,yn,Xe,et,Ot}from"./embed-
|
|
1
|
+
import{N,yn,Xe,et,Ot}from"./embed-ecgnvx0r.js";yn(import.meta.url,["xgxbwjnx","6xnn7k2v","nhd6pd73","tjxzgn54","4h6m9e42","xmnq9gye","qp16wec2","rxaj62j2","ecgnvx0r","wyxkzaf2","zckjbrcx","5hve1gb4","jq13zkzk","jpvp33st","g3jhmg6n","m7fjbsrx","t87kf8t0","ydzb54fp","dwkw2zf0","gqhzbbx9","sr36hy2t","3swpcbya","7xhp36fz"],[["./murmur.js",8],["./index-6xnn7k2v.js",9],["./chunk-nhd6pd73.js",10],["./index-tjxzgn54.js",10],["./murmur-4h6m9e42.js",11,12,8],["./retriever-xmnq9gye.js",12],["./index-qp16wec2.js",9],["./index-rxaj62j2.js",8],["./embed-ecgnvx0r.js"],["./embed-wyxkzaf2.js",8],["./embed-zckjbrcx.js"],["./embed-5hve1gb4.js",8,21],["./embed-jq13zkzk.js",8],["./transformers.web-jpvp33st.js",8],["./openai-compatible-g3jhmg6n.js",9,21],["./index-m7fjbsrx.js",11],["./browser-t87kf8t0.js"],["./openai-ydzb54fp.js",9,8,21],["./anthropic-dwkw2zf0.js",9,22,21],["./google-gqhzbbx9.js",9,22,21],["./mistral-sr36hy2t.js",9,21],["./embed-3swpcbya.js"],["./embed-7xhp36fz.js",21]],0);
|
|
2
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 u=c.index??0;if(u>i)t.appendChild(e.createTextNode(n.slice(i,u)));i=u+c[0].length;let d=c[0];if(c[1]){let a=e.createElement("code");a.textContent=d.slice(1,-1),t.appendChild(a)}else if(c[2]){let a=e.createElement("strong");S(e,d.slice(2,-2),o,a),t.appendChild(a)}else if(c[3]){let a=e.createElement("em");S(e,d.slice(1,-1),o,a),t.appendChild(a)}else if(c[4]){let a=d.indexOf("]("),l=d.slice(1,a),p=d.slice(a+2,-1);if(pe.test(p)){let m=e.createElement("a");if(m.href=p,m.textContent=l,/^https?:/i.test(p))m.target="_blank",m.rel="noopener noreferrer";t.appendChild(m)}else t.appendChild(e.createTextNode(l))}else{let a=o(Number(d.slice(1,-1))),l=a?/^[.,;:!?)»]+/.exec(n.slice(i))?.[0]:void 0;if(a&&l){let p=e.createElement("span");p.className="nowrap",p.append(a,e.createTextNode(l)),t.appendChild(p),i+=l.length}else t.appendChild(a??e.createTextNode(d))}}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
4
|
`),c=[],u=null,d=()=>{if(!c.length)return;let l=t.createElement("p");c.forEach((p,m)=>{if(m)l.appendChild(ne(t,c[m-1]??""));S(t,p.trim(),o,l)}),s.appendChild(l),c=[]},a=()=>{u=null};for(let l=0;l<i.length;l++){let p=i[l]??"",m=/^(\s*)```/.exec(p);if(m){d();let h=m[1]?.length??0,g=h>=2&&u?u.lastElementChild:null;if(!g)a();let y=[];for(l++;l<i.length&&!/^\s*```/.test(i[l]??"");l++){let k=i[l]??"";y.push(k.startsWith(" ".repeat(h))?k.slice(h):k.trimStart())}let E=t.createElement("pre");E.tabIndex=0;let C=t.createElement("code");C.textContent=y.join(`
|
|
5
5
|
`),E.appendChild(C),(g??s).appendChild(E);continue}if(/^\s*([-*_])(?:\s*\1){2,}\s*$/.test(p)){d(),a(),s.appendChild(t.createElement("hr"));continue}if(p.includes("|")&&ue.test(i[l+1]??"")){d(),a();let h=[oe(p)];for(l+=2;l<i.length&&(i[l]??"").includes("|");l++)h.push(oe(i[l]??""));l--;let g=t.createElement("div");g.className="table",g.tabIndex=0;let y=t.createElement("table");h.forEach((E,C)=>{let k=t.createElement("tr");for(let T of E){let A=t.createElement(C===0?"th":"td");S(t,T,o,A),k.appendChild(A)}y.appendChild(k)}),g.appendChild(y),s.appendChild(g);continue}let f=/^\s*>\s?(.*)$/.exec(p);if(f){d(),a();let h=[f[1]??""];for(;/^\s*>/.test(i[l+1]??"");l++)h.push((i[l+1]??"").replace(/^\s*>\s?/,""));let g=t.createElement("blockquote");W(g,h.join(`
|
|
6
|
-
`),o),s.appendChild(g);continue}let v=/^\s*(?:([-*+])|(\d+)[.)])\s+(.*)$/.exec(p);if(v){d();let h=v[1]?"ul":"ol";if(!u||u.tagName.toLowerCase()!==h){if(u=t.createElement(h),h==="ol"&&v[2]&&v[2]!=="1")u.setAttribute("start",v[2]);s.appendChild(u)}let g=t.createElement("li");S(t,(v[3]??"").trimEnd(),o,g),u.appendChild(g);continue}let w=/^\s*#{1,6}\s+(.*)$/.exec(p);if(w){d(),a();let h=t.createElement("p"),g=t.createElement("strong");S(t,w[1]??"",o,g),h.appendChild(g),s.appendChild(h);continue}if(!p.trim()){d();let h=i.slice(l+1).find((y)=>y.trim())??"",g=u?.tagName.toLowerCase()==="ol"?/^\s*\d+[.)]\s+/:/^\s*[-*+]\s+/;if(!u||!g.test(h))a();continue}if(u&&/^\s{2,}\S/.test(p)){let h=u.lastElementChild;if(h){h.appendChild(ne(t,i[l-1]??"")),S(t,p.trim(),o,h);continue}}a(),c.push(p)}d(),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==="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.local!==!1}get keyAllowed(){let e=this.configured;if(this.options.model||e==="proxy"||e==="local")return!1;return!this.options.llm?.endpoint}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("
|
|
6
|
+
`),o),s.appendChild(g);continue}let v=/^\s*(?:([-*+])|(\d+)[.)])\s+(.*)$/.exec(p);if(v){d();let h=v[1]?"ul":"ol";if(!u||u.tagName.toLowerCase()!==h){if(u=t.createElement(h),h==="ol"&&v[2]&&v[2]!=="1")u.setAttribute("start",v[2]);s.appendChild(u)}let g=t.createElement("li");S(t,(v[3]??"").trimEnd(),o,g),u.appendChild(g);continue}let w=/^\s*#{1,6}\s+(.*)$/.exec(p);if(w){d(),a();let h=t.createElement("p"),g=t.createElement("strong");S(t,w[1]??"",o,g),h.appendChild(g),s.appendChild(h);continue}if(!p.trim()){d();let h=i.slice(l+1).find((y)=>y.trim())??"",g=u?.tagName.toLowerCase()==="ol"?/^\s*\d+[.)]\s+/:/^\s*[-*+]\s+/;if(!u||!g.test(h))a();continue}if(u&&/^\s{2,}\S/.test(p)){let h=u.lastElementChild;if(h){h.appendChild(ne(t,i[l-1]??"")),S(t,p.trim(),o,h);continue}}a(),c.push(p)}d(),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==="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.local!==!1}get keyAllowed(){let e=this.configured;if(this.options.model||e==="proxy"||e==="local")return!1;return!this.options.llm?.endpoint}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("rxaj62j2"),import("./index-rxaj62j2.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("rxaj62j2"),import("./index-rxaj62j2.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("6xnn7k2v"),import("./index-6xnn7k2v.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("rxaj62j2"),import("./index-rxaj62j2.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("6xnn7k2v"),import("./index-6xnn7k2v.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("6xnn7k2v"),import("./index-6xnn7k2v.js")),o=this.options.llm??{};if(e==="proxy")return n.proxySettings(o);return n.resolveSettings({...o,endpoint:""},await this.store())}async needsSetup(){return this.mode==="visitor"&&!await this.settings()}async canRunLocally(){return(await (N("rxaj62j2"),import("./index-rxaj62j2.js"))).hasWebGPU()}async loadIndex(){let{index:e}=this.options;if(e&&typeof e!=="string")return e;let{isMurmurIndex:n}=await (N("nhd6pd73"),import("./chunk-nhd6pd73.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("tjxzgn54"),import("./index-tjxzgn54.js"));return o(document,location.pathname+location.search)}createEngine(){return(async()=>{let[{createMurmur:e},n]=await Promise.all([(N("4h6m9e42"),import("./murmur-4h6m9e42.js")),this.options.retriever??(N("xmnq9gye"),import("./retriever-xmnq9gye.js")).then(async(i)=>i.bm25Retriever(await this.loadIndex()))]),o=this.mode==="local",t=this.options.model??(o?async()=>{let{localModel:i}=await (N("rxaj62j2"),import("./index-rxaj62j2.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("6xnn7k2v"),import("./index-6xnn7k2v.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((d)=>{throw this.engine=null,d})).ask(e,{history:t,signal:o});s.passages=c.passages.map(({url:d,anchor:a,title:l,heading:p})=>({url:d,anchor:a,title:l,heading:p}));for await(let d of c.textStream)s.content+=d,n(s.content,s);let u=await c.done;if(this.mode==="local")this.setLocal({status:"ready"});s.content=u.text,s.cited=u.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("6xnn7k2v"),import("./index-6xnn7k2v.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);
|
|
@@ -221,4 +221,4 @@ progress::-moz-progress-bar { background: var(--lamp); }
|
|
|
221
221
|
@media (prefers-reduced-motion: reduce) {
|
|
222
222
|
*, .panel { animation: none !important; transition: none !important; }
|
|
223
223
|
}
|
|
224
|
-
`;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=r(t,"button",{class:"launcher",type:"button","aria-expanded":"false"}),this.launcher.setAttribute("aria-controls","murmur-panel"),this.launcher.append(r(t,"span",{class:"lamp","aria-hidden":"true"}),x(t,"span",this.t.open)),this.launcher.addEventListener("click",()=>void this.open()),this.panel=r(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",(f)=>{if(f.key==="Escape")this.close()});let i=r(t,"header"),c=x(t,"h2",this.t.title),u=_(t,"reset",this.t.newChat);u.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 d=_(t,"close",this.t.close);d.hidden=this.hasAttribute("inline"),d.addEventListener("click",()=>this.close()),i.append(c,u,this.settingsBtn,d),this.chatView=r(t,"div",{class:"chat"}),this.chatView.style.cssText="display:flex;flex-direction:column;flex:1;min-height:0",this.log=r(t,"div",{class:"log",role:"log","aria-live":"polite","aria-relevant":"additions"});let a=r(t,"form",{class:"composer"});this.input=r(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",(f)=>{if(f.key==="Enter"&&!f.shiftKey&&!f.isComposing)f.preventDefault(),this.submit()}),this.sendBtn=r(t,"button",{class:"send",type:"submit"}),this.setSendMode("send"),a.addEventListener("submit",(f)=>{if(f.preventDefault(),this.controller)this.controller.abort();else this.submit()}),a.append(this.input,this.sendBtn),this.loadbar=r(t,"div",{class:"loadbar",role:"status"}),this.loadbar.hidden=!0;let l=r(t,"footer"),p=r(t,"a",{href:"https://maxgfr.github.io/murmur/",target:"_blank",rel:"noopener"});if(p.textContent=this.t.poweredBy,l.append(p),this.chatView.append(this.log,this.loadbar,a,l),this.setupView=r(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 m=new q({...e,lang:n});if(this.session=m,this.settingsBtn.hidden=!m.keyAllowed,this.unsubscribeLocal=m.onLocalState((f)=>this.drawLocal(f)),ve(()=>{if(m.preload==="idle")m.warmUp();else m.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=r(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=r(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=r(n,"div",{class:"msg user"});return t.textContent=e.content,t}let o=r(n,"div",{class:"msg bot"});return this.fillAnswer(o,e,!0),o}fillAnswer(e,n,o){let t=this.ownerDocument;if(n.error){let[p="unknown",...m]=n.error.split("|"),f=me[p],v=r(t,"div",{class:"error",role:"alert"});v.append(x(t,"p",f?this.t[f]:`${this.t.errorOther} ${m.join("|")}`));let w=r(t,"div",{class:"row"}),h=r(t,"button",{class:"text-btn",type:"button"});if(h.textContent=this.t.retry,h.addEventListener("click",()=>{let g=this.session?.turns??[],y=g.at(-2)?.content??"";if(g.splice(-2,2),this.renderChat(),y)this.ask(y)}),w.append(h),p==="auth"||p==="auth-or-network"){if(!this.settingsBtn.hidden){let g=r(t,"button",{class:"text-btn",type:"button"});g.textContent=this.t.settings,g.addEventListener("click",()=>void this.showSetup()),w.append(g)}}v.append(w),e.replaceChildren(v);return}let s=n.passages??[],i=Xe(n.content),c=et(i,s.length),u=(p)=>c.indexOf(p)+1,d=r(t,"div");W(d,i,(p)=>{let m=s[p-1];if(!m||!u(p))return null;let f=r(t,"a",{class:"cite",href:Ot(m)});return f.textContent=String(u(p)),f.setAttribute("aria-label",`${this.t.sources} ${u(p)}: ${m.title}`),f});let a=[d];if(o&&!n.content.trim()&&!s.length){let p=r(t,"p",{class:"status"});p.append(r(t,"span",{class:"lamp off","aria-hidden":"true"}),t.createTextNode(this.t.notFound)),a.push(p)}let l=c;if(o&&l.length){a.push(x(t,"p",this.t.sources,"sources-label"));let p=r(t,"ol",{class:"sources"});for(let m of l){let f=s[m-1];if(!f)continue;let v=r(t,"li"),w=r(t,"a",{href:Ot(f)}),h=x(t,"span",String(u(m)),"cite");h.setAttribute("aria-hidden","true");let g=r(t,"span",{class:"where"});if(g.append(t.createTextNode(f.title||f.url)),f.heading&&f.heading!==f.title)g.append(x(t,"span",` › ${f.heading}`));w.append(h,g),v.append(w),p.append(v)}a.push(p)}e.replaceChildren(...a)}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=r(n,"div",{class:"msg bot"}),t=r(n,"p",{class:"status"});t.append(r(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,(u,d)=>{if(!i)i=!0,this.emit({state:"streaming",passages:d.passages??[]});let a=this.log.scrollHeight-this.log.scrollTop-this.log.clientHeight<40;if(this.fillAnswer(o,d,!1),a)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=r(n,"div",{class:"msg bot consent"}),c=r(n,"div",{class:"row"}),u=()=>{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 d=r(n,"button",{class:"primary",type:"button"});d.textContent=o.useKey,d.addEventListener("click",u),c.append(d)}}else{i.append(x(n,"p",o.localConsent.replace("{name}",s.name).replace("{size}",V(s.sizeMB,this.uiLang,o))));let d=r(n,"button",{class:"primary",type:"button"});if(d.textContent=o.localDownload,d.addEventListener("click",()=>{t.agreeToDownload(),i.remove(),this.input.value=e,this.submit()}),c.append(d),t.keyAllowed){let a=r(n,"button",{class:"link-btn",type:"button"});a.textContent=o.useKey,a.addEventListener("click",u),c.append(a)}}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=r(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"),u=this.session,d=await u.localSpec(),a=r(n,"div",{class:"local-choice"}),l=r(n,"button",{class:"primary",type:"button"});l.textContent=t.localOption;let p=x(n,"small",t.localOptionHint.replace("{name}",d.name).replace("{size}",V(d.sizeMB,this.uiLang,t)));a.append(l,p),l.addEventListener("click",()=>{if(u.useLocal(!0),this.hideSetup(),e)this.input.value=e,this.submit()});let m=r(n,"button",{class:"link-btn",type:"button"});if(m.textContent=t.useKey,m.addEventListener("click",()=>{u.useLocal(!1),l.textContent=t.localOption,l.disabled=!1,m.remove()}),u.mode==="local")l.textContent=t.localActive,l.disabled=!0,a.append(m);u.canRunLocally().then((b)=>{if(b)return;l.textContent=t.localOption,l.disabled=!0,p.textContent=t.localNoWebGPU,m.remove()});let f=x(n,"p",t.orKey,"or");a.hidden=f.hidden=!u.localAllowed;let v=ie(n,t.local),w=I(n,t.provider,r(n,"select")),h=w.control,g=I(n,t.model,r(n,"select")),y=g.control,E=I(n,t.endpoint,r(n,"input",{type:"url",inputmode:"url"}),t.localHint),C=E.control,k=I(n,t.model,r(n,"input",{type:"text",autocomplete:"off"})),T=k.control,A=r(n,"div",{class:"presets"});for(let b of["ollama","lmstudio"]){let L=r(n,"button",{class:"text-btn",type:"button"});L.textContent=b==="ollama"?"Ollama":"LM Studio",L.addEventListener("click",async()=>{let{ENDPOINT_PRESETS:M}=await (N("arpy64fv"),import("./index-arpy64fv.js"));o.applyPreset(M[b])}),A.append(L)}let Z=I(n,t.apiKey,r(n,"input",{type:"password",autocomplete:"off",spellcheck:"false"}),t.apiKeyHint),O=Z.control,R=ie(n,t.remember),P=r(n,"button",{class:"text-btn",type:"button"});P.textContent=t.test;let z=r(n,"p",{class:"result",role:"status"});z.style.margin="0";let K=r(n,"button",{class:"primary",type:"button"});K.textContent=t.save;let D=r(n,"button",{class:"link-btn",type:"button"});D.textContent=t.forget,v.input.addEventListener("change",()=>o.toggleCustom(v.input.checked)),h.addEventListener("change",()=>o.selectProvider(h.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()),K.addEventListener("click",async()=>{if(!(await o.save()).ok)return;if(u.useLocal(!1),this.hideSetup(),e)this.input.value=e,this.submit()}),D.addEventListener("click",()=>void o.clear());let Q=r(n,"div",{class:"row"});Q.append(P,z),this.setupView.replaceChildren(s,i,c,a,f,v.label,w.label,g.label,A,E.label,k.label,Z.label,R.label,Q,K,D);let le=(b)=>{let L=b.draft.custom;if(v.input.checked=L,w.label.hidden=L,g.label.hidden=L,A.hidden=!L,E.label.hidden=!L,k.label.hidden=!L,b.catalogStatus==="ready")fe(n,h,b,t),be(n,y,b);else h.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,P.disabled=!b.canTest||b.testing,P.textContent=b.testing?t.testing:t.test,K.disabled=!b.canSave;let M=b.testResult;z.className=M?M.ok?"result ok":"result fail":"result",z.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,u])=>{let d=e.createElement("optgroup");return d.label=c,d.append(...u.map((a)=>J(e,a.id,a.name))),d})),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 r(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=r(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=r(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=r(e,"label",{class:"check"}),t=r(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&&typeof console<"u")console.error('murmur: data-api-key is ignored: a key in the page can be read by anyone. Keep it in a Worker (data-endpoint), run the model in the browser (data-mode="local"), or let visitors use their own key.');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};
|
|
224
|
+
`;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=r(t,"button",{class:"launcher",type:"button","aria-expanded":"false"}),this.launcher.setAttribute("aria-controls","murmur-panel"),this.launcher.append(r(t,"span",{class:"lamp","aria-hidden":"true"}),x(t,"span",this.t.open)),this.launcher.addEventListener("click",()=>void this.open()),this.panel=r(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",(f)=>{if(f.key==="Escape")this.close()});let i=r(t,"header"),c=x(t,"h2",this.t.title),u=_(t,"reset",this.t.newChat);u.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 d=_(t,"close",this.t.close);d.hidden=this.hasAttribute("inline"),d.addEventListener("click",()=>this.close()),i.append(c,u,this.settingsBtn,d),this.chatView=r(t,"div",{class:"chat"}),this.chatView.style.cssText="display:flex;flex-direction:column;flex:1;min-height:0",this.log=r(t,"div",{class:"log",role:"log","aria-live":"polite","aria-relevant":"additions"});let a=r(t,"form",{class:"composer"});this.input=r(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",(f)=>{if(f.key==="Enter"&&!f.shiftKey&&!f.isComposing)f.preventDefault(),this.submit()}),this.sendBtn=r(t,"button",{class:"send",type:"submit"}),this.setSendMode("send"),a.addEventListener("submit",(f)=>{if(f.preventDefault(),this.controller)this.controller.abort();else this.submit()}),a.append(this.input,this.sendBtn),this.loadbar=r(t,"div",{class:"loadbar",role:"status"}),this.loadbar.hidden=!0;let l=r(t,"footer"),p=r(t,"a",{href:"https://maxgfr.github.io/murmur/",target:"_blank",rel:"noopener"});if(p.textContent=this.t.poweredBy,l.append(p),this.chatView.append(this.log,this.loadbar,a,l),this.setupView=r(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 m=new q({...e,lang:n});if(this.session=m,this.settingsBtn.hidden=!m.keyAllowed,this.unsubscribeLocal=m.onLocalState((f)=>this.drawLocal(f)),ve(()=>{if(m.preload==="idle")m.warmUp();else m.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=r(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=r(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=r(n,"div",{class:"msg user"});return t.textContent=e.content,t}let o=r(n,"div",{class:"msg bot"});return this.fillAnswer(o,e,!0),o}fillAnswer(e,n,o){let t=this.ownerDocument;if(n.error){let[p="unknown",...m]=n.error.split("|"),f=me[p],v=r(t,"div",{class:"error",role:"alert"});v.append(x(t,"p",f?this.t[f]:`${this.t.errorOther} ${m.join("|")}`));let w=r(t,"div",{class:"row"}),h=r(t,"button",{class:"text-btn",type:"button"});if(h.textContent=this.t.retry,h.addEventListener("click",()=>{let g=this.session?.turns??[],y=g.at(-2)?.content??"";if(g.splice(-2,2),this.renderChat(),y)this.ask(y)}),w.append(h),p==="auth"||p==="auth-or-network"){if(!this.settingsBtn.hidden){let g=r(t,"button",{class:"text-btn",type:"button"});g.textContent=this.t.settings,g.addEventListener("click",()=>void this.showSetup()),w.append(g)}}v.append(w),e.replaceChildren(v);return}let s=n.passages??[],i=Xe(n.content),c=et(i,s.length),u=(p)=>c.indexOf(p)+1,d=r(t,"div");W(d,i,(p)=>{let m=s[p-1];if(!m||!u(p))return null;let f=r(t,"a",{class:"cite",href:Ot(m)});return f.textContent=String(u(p)),f.setAttribute("aria-label",`${this.t.sources} ${u(p)}: ${m.title}`),f});let a=[d];if(o&&!n.content.trim()&&!s.length){let p=r(t,"p",{class:"status"});p.append(r(t,"span",{class:"lamp off","aria-hidden":"true"}),t.createTextNode(this.t.notFound)),a.push(p)}let l=c;if(o&&l.length){a.push(x(t,"p",this.t.sources,"sources-label"));let p=r(t,"ol",{class:"sources"});for(let m of l){let f=s[m-1];if(!f)continue;let v=r(t,"li"),w=r(t,"a",{href:Ot(f)}),h=x(t,"span",String(u(m)),"cite");h.setAttribute("aria-hidden","true");let g=r(t,"span",{class:"where"});if(g.append(t.createTextNode(f.title||f.url)),f.heading&&f.heading!==f.title)g.append(x(t,"span",` › ${f.heading}`));w.append(h,g),v.append(w),p.append(v)}a.push(p)}e.replaceChildren(...a)}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=r(n,"div",{class:"msg bot"}),t=r(n,"p",{class:"status"});t.append(r(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,(u,d)=>{if(!i)i=!0,this.emit({state:"streaming",passages:d.passages??[]});let a=this.log.scrollHeight-this.log.scrollTop-this.log.clientHeight<40;if(this.fillAnswer(o,d,!1),a)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=r(n,"div",{class:"msg bot consent"}),c=r(n,"div",{class:"row"}),u=()=>{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 d=r(n,"button",{class:"primary",type:"button"});d.textContent=o.useKey,d.addEventListener("click",u),c.append(d)}}else{i.append(x(n,"p",o.localConsent.replace("{name}",s.name).replace("{size}",V(s.sizeMB,this.uiLang,o))));let d=r(n,"button",{class:"primary",type:"button"});if(d.textContent=o.localDownload,d.addEventListener("click",()=>{t.agreeToDownload(),i.remove(),this.input.value=e,this.submit()}),c.append(d),t.keyAllowed){let a=r(n,"button",{class:"link-btn",type:"button"});a.textContent=o.useKey,a.addEventListener("click",u),c.append(a)}}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=r(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"),u=this.session,d=await u.localSpec(),a=r(n,"div",{class:"local-choice"}),l=r(n,"button",{class:"primary",type:"button"});l.textContent=t.localOption;let p=x(n,"small",t.localOptionHint.replace("{name}",d.name).replace("{size}",V(d.sizeMB,this.uiLang,t)));a.append(l,p),l.addEventListener("click",()=>{if(u.useLocal(!0),this.hideSetup(),e)this.input.value=e,this.submit()});let m=r(n,"button",{class:"link-btn",type:"button"});if(m.textContent=t.useKey,m.addEventListener("click",()=>{u.useLocal(!1),l.textContent=t.localOption,l.disabled=!1,m.remove()}),u.mode==="local")l.textContent=t.localActive,l.disabled=!0,a.append(m);u.canRunLocally().then((b)=>{if(b)return;l.textContent=t.localOption,l.disabled=!0,p.textContent=t.localNoWebGPU,m.remove()});let f=x(n,"p",t.orKey,"or");a.hidden=f.hidden=!u.localAllowed;let v=ie(n,t.local),w=I(n,t.provider,r(n,"select")),h=w.control,g=I(n,t.model,r(n,"select")),y=g.control,E=I(n,t.endpoint,r(n,"input",{type:"url",inputmode:"url"}),t.localHint),C=E.control,k=I(n,t.model,r(n,"input",{type:"text",autocomplete:"off"})),T=k.control,A=r(n,"div",{class:"presets"});for(let b of["ollama","lmstudio"]){let L=r(n,"button",{class:"text-btn",type:"button"});L.textContent=b==="ollama"?"Ollama":"LM Studio",L.addEventListener("click",async()=>{let{ENDPOINT_PRESETS:M}=await (N("qp16wec2"),import("./index-qp16wec2.js"));o.applyPreset(M[b])}),A.append(L)}let Z=I(n,t.apiKey,r(n,"input",{type:"password",autocomplete:"off",spellcheck:"false"}),t.apiKeyHint),O=Z.control,R=ie(n,t.remember),P=r(n,"button",{class:"text-btn",type:"button"});P.textContent=t.test;let z=r(n,"p",{class:"result",role:"status"});z.style.margin="0";let K=r(n,"button",{class:"primary",type:"button"});K.textContent=t.save;let D=r(n,"button",{class:"link-btn",type:"button"});D.textContent=t.forget,v.input.addEventListener("change",()=>o.toggleCustom(v.input.checked)),h.addEventListener("change",()=>o.selectProvider(h.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()),K.addEventListener("click",async()=>{if(!(await o.save()).ok)return;if(u.useLocal(!1),this.hideSetup(),e)this.input.value=e,this.submit()}),D.addEventListener("click",()=>void o.clear());let Q=r(n,"div",{class:"row"});Q.append(P,z),this.setupView.replaceChildren(s,i,c,a,f,v.label,w.label,g.label,A,E.label,k.label,Z.label,R.label,Q,K,D);let le=(b)=>{let L=b.draft.custom;if(v.input.checked=L,w.label.hidden=L,g.label.hidden=L,A.hidden=!L,E.label.hidden=!L,k.label.hidden=!L,b.catalogStatus==="ready")fe(n,h,b,t),be(n,y,b);else h.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,P.disabled=!b.canTest||b.testing,P.textContent=b.testing?t.testing:t.test,K.disabled=!b.canSave;let M=b.testResult;z.className=M?M.ok?"result ok":"result fail":"result",z.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,u])=>{let d=e.createElement("optgroup");return d.label=c,d.append(...u.map((a)=>J(e,a.id,a.name))),d})),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 r(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=r(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=r(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=r(e,"label",{class:"check"}),t=r(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&&typeof console<"u")console.error('murmur: data-api-key is ignored: a key in the page can be read by anyone. Keep it in a Worker (data-endpoint), run the model in the browser (data-mode="local"), or let visitors use their own key.');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};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{oe}from"./embed-3vb4wcng.js";import{ye,P,me,u,e,r,c,ie,o,t,U,l,y,i,n,k,T,d,j,M,st,ee,te,F,z,Me,C,R,W,a,s,h,g,ne,O,H,I,D,p,pt,an,E,Ce,Y}from"./embed-52n5pm9t.js";function ce(m){return m.replace(/[_-]([a-z])/g,(f)=>f[1].toUpperCase())}function Ne(m,f){let b=ce(m);if(b!==m&&f?.[b]!=null)return b;return m}function be({rawName:m,providerOptions:f,warnings:b}){let _=ce(m);if(_!==m&&f?.[m]!=null)b.push({type:"deprecated",setting:`providerOptions key '${m}'`,message:`Use '${_}' instead.`})}var ge={errorSchema:t({error:t({message:e(),type:e().nullish(),param:ie().nullish(),code:l([e(),r()]).nullish()})}),errorToMessage:(m)=>m.error.message};function $e(m){if(m==null)return te();let f=m.prompt_tokens??0,b=m.completion_tokens??0,_=m.prompt_tokens_details?.cached_tokens??0,w=m.completion_tokens_details?.reasoning_tokens??0;return{inputTokens:{total:f,noCache:f-_,cacheRead:_,cacheWrite:void 0},outputTokens:{total:b,text:Math.max(0,b-w),reasoning:w},raw:m}}function he(m){return m?.providerOptions?.openaiCompatible??{}}function Le(m){switch(m){case"audio/wav":return"wav";case"audio/mp3":case"audio/mpeg":return"mp3";default:return null}}function Ae(m,f){let b=he(m);switch(m.type){case"text":return{type:"text",text:m.text,...b};case"file":switch(m.data.type){case"reference":return{type:"file",file:{file_id:H({reference:m.data.reference,provider:f})},...b};case"text":throw new u({functionality:"text file parts"});case"url":case"data":{let _=z(m.mediaType);if(_==="image")return{type:"image_url",image_url:{url:m.data.type==="url"?m.data.url.toString():`data:${O({part:m})};base64,${M(m.data.data)}`},...b};if(_==="video")return{type:"video_url",video_url:{url:m.data.type==="url"?m.data.url.toString():`data:${O({part:m})};base64,${M(m.data.data)}`},...b};if(_==="audio"){if(m.data.type==="url")throw new u({functionality:"audio file parts with URLs"});let w=O({part:m}),A=Le(w);if(A===null)throw new u({functionality:`audio media type ${w}`});return{type:"input_audio",input_audio:{data:M(m.data.data),format:A},...b}}if(_==="application"){if(m.data.type==="url")throw new u({functionality:"PDF file parts with URLs"});let w=O({part:m});if(w!=="application/pdf")throw new u({functionality:`file part media type ${w}`});return{type:"file",file:{filename:m.filename??"document.pdf",file_data:`data:application/pdf;base64,${M(m.data.data)}`},...b}}if(_==="text")return{type:"text",text:m.data.type==="url"?m.data.url.toString():typeof m.data.data==="string"?new TextDecoder().decode(j(m.data.data)):new TextDecoder().decode(m.data.data),...b};throw new u({functionality:`file part media type ${m.mediaType}`})}}}}function Be(m,f){if(m.type==="custom")throw new u({functionality:"custom tool content parts"});return Ae(m,f)}function Ke(m,{provider:f="openaiCompatible",providerOptionsKey:b="google",supportsMultiPartToolContent:_=!1}={}){let w=[];for(let{role:A,content:N,...L}of m){let K=he({...L});switch(A){case"system":w.push({role:"system",content:N,...K});break;case"user":if(N.length===1&&N[0].type==="text"){w.push({role:"user",content:N[0].text,...he(N[0])});break}w.push({role:"user",content:N.map((q)=>Ae(q,f)),...K});break;case"assistant":{let q="",x="",v=[];for(let S of N){let Z=he(S);switch(S.type){case"text":q+=S.text;break;case"reasoning":x+=S.text;break;case"tool-call":{let J=S.providerOptions?.[b]?.thoughtSignature??S.providerOptions?.google?.thoughtSignature;v.push({id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)},...Z,...J?{extra_content:{google:{thought_signature:String(J)}}}:{}});break}}}w.push({role:"assistant",content:v.length>0?q||null:q,...x.length>0?{reasoning_content:x}:{},tool_calls:v.length>0?v:void 0,...K});break}case"tool":for(let q of N){if(q.type==="tool-approval-response")continue;let x=q.output,v;switch(x.type){case"text":case"error-text":v=x.value;break;case"execution-denied":v=x.reason??"Tool call execution denied.";break;case"json":case"error-json":v=JSON.stringify(x.value);break;case"content":v=_?x.value.map((Z)=>Be(Z,f)):JSON.stringify(x.value)}let S=he(q);w.push({role:"tool",tool_call_id:q.toolCallId,content:v,...S})}break;default:throw Error(`Unsupported role: ${A}`)}}return w}function we({id:m,model:f,created:b}){return ee({id:m,model:f,created:b||void 0})}function xe(m){switch(m){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}var pe=t({user:e().optional(),reasoningEffort:e().optional(),textVerbosity:e().optional(),strictJsonSchema:c().optional()});function Ve({tools:m,toolChoice:f}){m=m?.length?m:void 0;let b=[];if(m==null)return{tools:void 0,toolChoice:void 0,toolWarnings:b};let _=[];for(let A of m)if(A.type==="provider")b.push({type:"unsupported",feature:`provider-defined tool ${A.id}`});else _.push({type:"function",function:{name:A.name,description:A.description,parameters:A.inputSchema,...A.strict!=null?{strict:A.strict}:{}}});if(f==null)return{tools:_,toolChoice:void 0,toolWarnings:b};let w=f.type;switch(w){case"auto":case"none":case"required":return{tools:_,toolChoice:w,toolWarnings:b};case"tool":return{tools:_,toolChoice:{type:"function",function:{name:f.toolName}},toolWarnings:b};default:throw new u({functionality:`tool choice type: ${w}`})}}var Je=class m{static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.specificationVersion="v4",this.modelId=f,this.config=b;let _=b.errorStructure??ge;this.chunkSchema=We(_.errorSchema),this.failedResponseHandler=I(_),this.supportsStructuredOutputs=b.supportsStructuredOutputs??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}get supportedUrls(){return this.config.supportedUrls?.()??{}}transformRequestBody(f,b){return this.config.transformRequestBody?.(f,b)??f}convertUsage(f){return this.config.convertUsage?.(f)??$e(f)}async getArgs({prompt:f,maxOutputTokens:b,temperature:_,topP:w,topK:A,frequencyPenalty:N,presencePenalty:L,reasoning:K,providerOptions:q,stopSequences:x,responseFormat:v,seed:S,toolChoice:Z,tools:J}){let G=[],se=await h({provider:"openai-compatible",providerOptions:q,schema:pe});if(se!=null)G.push({type:"deprecated",setting:"providerOptions key 'openai-compatible'",message:"Use 'openaiCompatible' instead."});be({rawName:this.providerOptionsName,providerOptions:q,warnings:G});let X=Object.assign(se??{},await h({provider:"openaiCompatible",providerOptions:q,schema:pe})??{},await h({provider:this.providerOptionsName,providerOptions:q,schema:pe})??{},await h({provider:ce(this.providerOptionsName),providerOptions:q,schema:pe})??{}),ae=X?.strictJsonSchema??!0;if(A!=null)G.push({type:"unsupported",feature:"topK"});if(v?.type==="json"&&v.schema!=null&&!this.supportsStructuredOutputs)G.push({type:"unsupported",feature:"responseFormat",details:"JSON response format schema is only supported with structuredOutputs"});let{tools:de,toolChoice:B,toolWarnings:V}=Ve({tools:J,toolChoice:Z}),Q=Ne(this.providerOptionsName,q);return{metadataKey:Q,args:{model:this.modelId,user:X.user,max_tokens:b,temperature:_,top_p:w,frequency_penalty:N,presence_penalty:L,response_format:v?.type==="json"?this.supportsStructuredOutputs===!0&&v.schema!=null?{type:"json_schema",json_schema:{schema:v.schema,strict:ae,name:v.name??"response",description:v.description}}:{type:"json_object"}:void 0,stop:x,seed:S,...Object.fromEntries(Object.entries({...q?.[this.providerOptionsName],...q?.[ce(this.providerOptionsName)]}).filter(([re])=>!Object.keys(pe.shape).includes(re))),reasoning_effort:X.reasoningEffort??(W(K)?K:void 0),verbosity:X.textVerbosity,messages:Ke(f,{provider:this.providerOptionsName,providerOptionsKey:Q,supportsMultiPartToolContent:this.config.supportsMultiPartToolContent}),tools:de,tool_choice:B},warnings:[...G,...V]}}async doGenerate(f){let{args:b,warnings:_,metadataKey:w}=await this.getArgs({...f}),A=this.transformRequestBody(b,_),N=JSON.stringify(A),{responseHeaders:L,value:K,rawValue:q}=await g({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:A,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:p(De),abortSignal:f.abortSignal,fetch:this.config.fetch}),x=K.choices[0];if(x==null)throw new P({data:q,message:"Response did not contain any choices."});let v=[],S=x.message.reasoning_content??x.message.reasoning;if(S!=null&&S.length>0)v.push({type:"reasoning",text:S});if(v.push(...Ie(x.message.content)),x.message.tool_calls!=null)for(let G of x.message.tool_calls){let se=G.extra_content?.google?.thought_signature;v.push({type:"tool-call",toolCallId:G.id||C(),toolName:G.function.name,input:G.function.arguments,...se?{providerMetadata:{[w]:{thoughtSignature:se}}}:{}})}let Z={[w]:{},...await this.config.metadataExtractor?.extractMetadata?.({parsedBody:q})},J=K.usage?.completion_tokens_details;if(J?.accepted_prediction_tokens!=null)Z[w].acceptedPredictionTokens=J?.accepted_prediction_tokens;if(J?.rejected_prediction_tokens!=null)Z[w].rejectedPredictionTokens=J?.rejected_prediction_tokens;return{content:v,finishReason:{unified:xe(x.finish_reason),raw:x.finish_reason??void 0},usage:this.convertUsage(K.usage),providerMetadata:Z,request:{body:N},response:{...we(K),headers:L,body:q},warnings:_}}async doStream(f){let{args:b,warnings:_,metadataKey:w}=await this.getArgs({...f}),A=this.transformRequestBody({...b,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},_),N=this.config.metadataExtractor?.createStreamExtractor(),{responseHeaders:L,value:K}=await g({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:A,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:D(this.chunkSchema),abortSignal:f.abortSignal,fetch:this.config.fetch}),q=w,x,v=new Map,S=new Set,Z=(B)=>{let V=B.index;if(V==null||S.has(V)){x.processDelta(B);return}let Q=v.get(V);if(Q==null)Q={id:B.id??null,bufferedArguments:"",extraContent:B.extra_content??null},v.set(V,Q);else{if(Q.id==null&&B.id!=null)Q.id=B.id;if(Q.extraContent==null&&B.extra_content!=null)Q.extraContent=B.extra_content}let re=B.function?.arguments;if(re!=null)Q.bufferedArguments+=re;let ue=B.function?.name;if(ue!=null){let fe={index:V,id:Q.id,function:{name:ue,arguments:Q.bufferedArguments},extra_content:Q.extraContent??void 0};x.processDelta(fe),v.delete(V),S.add(V)}},J,G=void 0,se=!1,X=!1,ae=!1,de=(B)=>this.convertUsage(B);return{stream:K.pipeThrough(new TransformStream({start(B){x=new Ce(B,{generateId:C,extractMetadata:(V)=>{let Q=V.extra_content?.google?.thought_signature;return Q?{[q]:{thoughtSignature:Q}}:void 0},buildToolCallProviderMetadata:(V)=>V}),B.enqueue({type:"stream-start",warnings:_})},transform(B,V){if(f.includeRawChunks)V.enqueue({type:"raw",rawValue:B.rawValue});if(!B.success){J={unified:"error",raw:void 0},V.enqueue({type:"error",error:B.error});return}if(N?.processChunk(B.rawValue),"error"in B.value){J={unified:"error",raw:void 0},V.enqueue({type:"error",error:B.value.error});return}let Q=B.value;if(!se){let le=we(Q);if(Object.values(le).some(Boolean))se=!0,V.enqueue({type:"response-metadata",...le})}if(Q.usage!=null)G=Q.usage;let re=Q.choices[0];if(re?.finish_reason!=null)J={unified:xe(re.finish_reason),raw:re.finish_reason??void 0};if(re?.delta==null)return;let ue=re.delta,fe=(le)=>{if(ae)V.enqueue({type:"text-end",id:"txt-0"}),ae=!1;if(!X)V.enqueue({type:"reasoning-start",id:"reasoning-0"}),X=!0;V.enqueue({type:"reasoning-delta",id:"reasoning-0",delta:le})},Pe=(le)=>{if(X)V.enqueue({type:"reasoning-end",id:"reasoning-0"}),X=!1;if(!ae)V.enqueue({type:"text-start",id:"txt-0"}),ae=!0;V.enqueue({type:"text-delta",id:"txt-0",delta:le})},ve=ue.reasoning_content??ue.reasoning;if(ve)fe(ve);for(let le of Ie(ue.content))if(le.type==="reasoning")fe(le.text);else Pe(le.text);if(ue.tool_calls!=null&&ue.tool_calls.length>0){if(X)V.enqueue({type:"reasoning-end",id:"reasoning-0"}),X=!1;for(let le of ue.tool_calls)Z(le)}},flush(B){if(X)B.enqueue({type:"reasoning-end",id:"reasoning-0"});if(ae)B.enqueue({type:"text-end",id:"txt-0"});for(let[Q,re]of v)x.processDelta({index:Q,id:re.id,function:{arguments:re.bufferedArguments}});if(v.clear(),x.flush(),J==null)J={unified:"error",raw:void 0},B.enqueue({type:"error",error:new P({data:void 0,message:"Response stream ended without a finish reason."})});let V={[q]:{},...N?.buildMetadata()};if(G?.completion_tokens_details?.accepted_prediction_tokens!=null)V[q].acceptedPredictionTokens=G?.completion_tokens_details?.accepted_prediction_tokens;if(G?.completion_tokens_details?.rejected_prediction_tokens!=null)V[q].rejectedPredictionTokens=G?.completion_tokens_details?.rejected_prediction_tokens;B.enqueue({type:"finish",finishReason:J,usage:de(G),providerMetadata:V})}})),request:{body:A},response:{headers:L}}}},Ue=()=>U({prompt_tokens:r().nullish(),completion_tokens:r().nullish(),total_tokens:r().nullish(),prompt_tokens_details:U({cached_tokens:r().nullish()}).nullish(),completion_tokens_details:U({reasoning_tokens:r().nullish(),accepted_prediction_tokens:r().nullish(),rejected_prediction_tokens:r().nullish()}).nullish()}).nullish(),qe=()=>l([e(),o(U({type:e()}))]).nullish();function Ie(m){if(m==null)return[];if(typeof m==="string")return m.length>0?[{type:"text",text:m}]:[];let f=[];for(let b of m)if(b.type==="text"&&typeof b.text==="string"){if(b.text.length>0)f.push({type:"text",text:b.text})}else if(b.type==="thinking"&&Array.isArray(b.thinking)){let _=b.thinking.filter((w)=>w!=null&&typeof w==="object"&&("type"in w)&&w.type==="text"&&("text"in w)&&typeof w.text==="string").map((w)=>w.text).join("");if(_.length>0)f.push({type:"reasoning",text:_})}return f}var De=a(()=>s(U({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({message:t({role:n("assistant").nullish(),content:qe(),reasoning_content:e().nullish(),reasoning:e().nullish(),tool_calls:o(t({id:e().nullish(),function:t({name:e(),arguments:e()}),extra_content:t({google:t({thought_signature:e().nullish()}).nullish()}).nullish()})).nullish()}),finish_reason:e().nullish()})),usage:Ue()}))),Fe=()=>U({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({delta:t({role:i(["assistant",""]).nullish(),content:qe(),reasoning_content:e().nullish(),reasoning:e().nullish(),tool_calls:o(t({index:r().nullish(),id:e().nullish(),function:t({name:e().nullish(),arguments:e().nullish()}),extra_content:t({google:t({thought_signature:e().nullish()}).nullish()}).nullish()})).nullish()}).nullish(),finish_reason:e().nullish()})),usage:Ue()}),We=(m)=>l([Fe(),m]);function Oe(m){if(m==null)return te();let f=m.prompt_tokens??0,b=m.completion_tokens??0;return{inputTokens:{total:f,noCache:f,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:b,text:b,reasoning:void 0},raw:m}}function ze({prompt:m,user:f="user",assistant:b="assistant"}){let _="";if(m[0].role==="system")_+=`${m[0].content}
|
|
1
|
+
import{oe}from"./embed-wyxkzaf2.js";import{ye,P,me,u,e,r,c,ie,o,t,U,l,y,i,n,k,T,d,j,M,st,ee,te,F,z,Me,C,R,W,a,s,h,g,ne,O,H,I,D,p,pt,an,E,Ce,Y}from"./embed-3swpcbya.js";function ce(m){return m.replace(/[_-]([a-z])/g,(f)=>f[1].toUpperCase())}function Ne(m,f){let b=ce(m);if(b!==m&&f?.[b]!=null)return b;return m}function be({rawName:m,providerOptions:f,warnings:b}){let _=ce(m);if(_!==m&&f?.[m]!=null)b.push({type:"deprecated",setting:`providerOptions key '${m}'`,message:`Use '${_}' instead.`})}var ge={errorSchema:t({error:t({message:e(),type:e().nullish(),param:ie().nullish(),code:l([e(),r()]).nullish()})}),errorToMessage:(m)=>m.error.message};function $e(m){if(m==null)return te();let f=m.prompt_tokens??0,b=m.completion_tokens??0,_=m.prompt_tokens_details?.cached_tokens??0,w=m.completion_tokens_details?.reasoning_tokens??0;return{inputTokens:{total:f,noCache:f-_,cacheRead:_,cacheWrite:void 0},outputTokens:{total:b,text:Math.max(0,b-w),reasoning:w},raw:m}}function he(m){return m?.providerOptions?.openaiCompatible??{}}function Le(m){switch(m){case"audio/wav":return"wav";case"audio/mp3":case"audio/mpeg":return"mp3";default:return null}}function Ae(m,f){let b=he(m);switch(m.type){case"text":return{type:"text",text:m.text,...b};case"file":switch(m.data.type){case"reference":return{type:"file",file:{file_id:H({reference:m.data.reference,provider:f})},...b};case"text":throw new u({functionality:"text file parts"});case"url":case"data":{let _=z(m.mediaType);if(_==="image")return{type:"image_url",image_url:{url:m.data.type==="url"?m.data.url.toString():`data:${O({part:m})};base64,${M(m.data.data)}`},...b};if(_==="video")return{type:"video_url",video_url:{url:m.data.type==="url"?m.data.url.toString():`data:${O({part:m})};base64,${M(m.data.data)}`},...b};if(_==="audio"){if(m.data.type==="url")throw new u({functionality:"audio file parts with URLs"});let w=O({part:m}),A=Le(w);if(A===null)throw new u({functionality:`audio media type ${w}`});return{type:"input_audio",input_audio:{data:M(m.data.data),format:A},...b}}if(_==="application"){if(m.data.type==="url")throw new u({functionality:"PDF file parts with URLs"});let w=O({part:m});if(w!=="application/pdf")throw new u({functionality:`file part media type ${w}`});return{type:"file",file:{filename:m.filename??"document.pdf",file_data:`data:application/pdf;base64,${M(m.data.data)}`},...b}}if(_==="text")return{type:"text",text:m.data.type==="url"?m.data.url.toString():typeof m.data.data==="string"?new TextDecoder().decode(j(m.data.data)):new TextDecoder().decode(m.data.data),...b};throw new u({functionality:`file part media type ${m.mediaType}`})}}}}function Be(m,f){if(m.type==="custom")throw new u({functionality:"custom tool content parts"});return Ae(m,f)}function Ke(m,{provider:f="openaiCompatible",providerOptionsKey:b="google",supportsMultiPartToolContent:_=!1}={}){let w=[];for(let{role:A,content:N,...L}of m){let K=he({...L});switch(A){case"system":w.push({role:"system",content:N,...K});break;case"user":if(N.length===1&&N[0].type==="text"){w.push({role:"user",content:N[0].text,...he(N[0])});break}w.push({role:"user",content:N.map((q)=>Ae(q,f)),...K});break;case"assistant":{let q="",x="",v=[];for(let S of N){let Z=he(S);switch(S.type){case"text":q+=S.text;break;case"reasoning":x+=S.text;break;case"tool-call":{let J=S.providerOptions?.[b]?.thoughtSignature??S.providerOptions?.google?.thoughtSignature;v.push({id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)},...Z,...J?{extra_content:{google:{thought_signature:String(J)}}}:{}});break}}}w.push({role:"assistant",content:v.length>0?q||null:q,...x.length>0?{reasoning_content:x}:{},tool_calls:v.length>0?v:void 0,...K});break}case"tool":for(let q of N){if(q.type==="tool-approval-response")continue;let x=q.output,v;switch(x.type){case"text":case"error-text":v=x.value;break;case"execution-denied":v=x.reason??"Tool call execution denied.";break;case"json":case"error-json":v=JSON.stringify(x.value);break;case"content":v=_?x.value.map((Z)=>Be(Z,f)):JSON.stringify(x.value)}let S=he(q);w.push({role:"tool",tool_call_id:q.toolCallId,content:v,...S})}break;default:throw Error(`Unsupported role: ${A}`)}}return w}function we({id:m,model:f,created:b}){return ee({id:m,model:f,created:b||void 0})}function xe(m){switch(m){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"other"}}var pe=t({user:e().optional(),reasoningEffort:e().optional(),textVerbosity:e().optional(),strictJsonSchema:c().optional()});function Ve({tools:m,toolChoice:f}){m=m?.length?m:void 0;let b=[];if(m==null)return{tools:void 0,toolChoice:void 0,toolWarnings:b};let _=[];for(let A of m)if(A.type==="provider")b.push({type:"unsupported",feature:`provider-defined tool ${A.id}`});else _.push({type:"function",function:{name:A.name,description:A.description,parameters:A.inputSchema,...A.strict!=null?{strict:A.strict}:{}}});if(f==null)return{tools:_,toolChoice:void 0,toolWarnings:b};let w=f.type;switch(w){case"auto":case"none":case"required":return{tools:_,toolChoice:w,toolWarnings:b};case"tool":return{tools:_,toolChoice:{type:"function",function:{name:f.toolName}},toolWarnings:b};default:throw new u({functionality:`tool choice type: ${w}`})}}var Je=class m{static[k](f){return E({modelId:f.modelId,config:f.config})}static[T](f){return new m(f.modelId,f.config)}constructor(f,b){this.specificationVersion="v4",this.modelId=f,this.config=b;let _=b.errorStructure??ge;this.chunkSchema=We(_.errorSchema),this.failedResponseHandler=I(_),this.supportsStructuredOutputs=b.supportsStructuredOutputs??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}get supportedUrls(){return this.config.supportedUrls?.()??{}}transformRequestBody(f,b){return this.config.transformRequestBody?.(f,b)??f}convertUsage(f){return this.config.convertUsage?.(f)??$e(f)}async getArgs({prompt:f,maxOutputTokens:b,temperature:_,topP:w,topK:A,frequencyPenalty:N,presencePenalty:L,reasoning:K,providerOptions:q,stopSequences:x,responseFormat:v,seed:S,toolChoice:Z,tools:J}){let G=[],se=await h({provider:"openai-compatible",providerOptions:q,schema:pe});if(se!=null)G.push({type:"deprecated",setting:"providerOptions key 'openai-compatible'",message:"Use 'openaiCompatible' instead."});be({rawName:this.providerOptionsName,providerOptions:q,warnings:G});let X=Object.assign(se??{},await h({provider:"openaiCompatible",providerOptions:q,schema:pe})??{},await h({provider:this.providerOptionsName,providerOptions:q,schema:pe})??{},await h({provider:ce(this.providerOptionsName),providerOptions:q,schema:pe})??{}),ae=X?.strictJsonSchema??!0;if(A!=null)G.push({type:"unsupported",feature:"topK"});if(v?.type==="json"&&v.schema!=null&&!this.supportsStructuredOutputs)G.push({type:"unsupported",feature:"responseFormat",details:"JSON response format schema is only supported with structuredOutputs"});let{tools:de,toolChoice:B,toolWarnings:V}=Ve({tools:J,toolChoice:Z}),Q=Ne(this.providerOptionsName,q);return{metadataKey:Q,args:{model:this.modelId,user:X.user,max_tokens:b,temperature:_,top_p:w,frequency_penalty:N,presence_penalty:L,response_format:v?.type==="json"?this.supportsStructuredOutputs===!0&&v.schema!=null?{type:"json_schema",json_schema:{schema:v.schema,strict:ae,name:v.name??"response",description:v.description}}:{type:"json_object"}:void 0,stop:x,seed:S,...Object.fromEntries(Object.entries({...q?.[this.providerOptionsName],...q?.[ce(this.providerOptionsName)]}).filter(([re])=>!Object.keys(pe.shape).includes(re))),reasoning_effort:X.reasoningEffort??(W(K)?K:void 0),verbosity:X.textVerbosity,messages:Ke(f,{provider:this.providerOptionsName,providerOptionsKey:Q,supportsMultiPartToolContent:this.config.supportsMultiPartToolContent}),tools:de,tool_choice:B},warnings:[...G,...V]}}async doGenerate(f){let{args:b,warnings:_,metadataKey:w}=await this.getArgs({...f}),A=this.transformRequestBody(b,_),N=JSON.stringify(A),{responseHeaders:L,value:K,rawValue:q}=await g({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:A,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:p(De),abortSignal:f.abortSignal,fetch:this.config.fetch}),x=K.choices[0];if(x==null)throw new P({data:q,message:"Response did not contain any choices."});let v=[],S=x.message.reasoning_content??x.message.reasoning;if(S!=null&&S.length>0)v.push({type:"reasoning",text:S});if(v.push(...Ie(x.message.content)),x.message.tool_calls!=null)for(let G of x.message.tool_calls){let se=G.extra_content?.google?.thought_signature;v.push({type:"tool-call",toolCallId:G.id||C(),toolName:G.function.name,input:G.function.arguments,...se?{providerMetadata:{[w]:{thoughtSignature:se}}}:{}})}let Z={[w]:{},...await this.config.metadataExtractor?.extractMetadata?.({parsedBody:q})},J=K.usage?.completion_tokens_details;if(J?.accepted_prediction_tokens!=null)Z[w].acceptedPredictionTokens=J?.accepted_prediction_tokens;if(J?.rejected_prediction_tokens!=null)Z[w].rejectedPredictionTokens=J?.rejected_prediction_tokens;return{content:v,finishReason:{unified:xe(x.finish_reason),raw:x.finish_reason??void 0},usage:this.convertUsage(K.usage),providerMetadata:Z,request:{body:N},response:{...we(K),headers:L,body:q},warnings:_}}async doStream(f){let{args:b,warnings:_,metadataKey:w}=await this.getArgs({...f}),A=this.transformRequestBody({...b,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},_),N=this.config.metadataExtractor?.createStreamExtractor(),{responseHeaders:L,value:K}=await g({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:d(this.config.headers?.(),f.headers),body:A,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:D(this.chunkSchema),abortSignal:f.abortSignal,fetch:this.config.fetch}),q=w,x,v=new Map,S=new Set,Z=(B)=>{let V=B.index;if(V==null||S.has(V)){x.processDelta(B);return}let Q=v.get(V);if(Q==null)Q={id:B.id??null,bufferedArguments:"",extraContent:B.extra_content??null},v.set(V,Q);else{if(Q.id==null&&B.id!=null)Q.id=B.id;if(Q.extraContent==null&&B.extra_content!=null)Q.extraContent=B.extra_content}let re=B.function?.arguments;if(re!=null)Q.bufferedArguments+=re;let ue=B.function?.name;if(ue!=null){let fe={index:V,id:Q.id,function:{name:ue,arguments:Q.bufferedArguments},extra_content:Q.extraContent??void 0};x.processDelta(fe),v.delete(V),S.add(V)}},J,G=void 0,se=!1,X=!1,ae=!1,de=(B)=>this.convertUsage(B);return{stream:K.pipeThrough(new TransformStream({start(B){x=new Ce(B,{generateId:C,extractMetadata:(V)=>{let Q=V.extra_content?.google?.thought_signature;return Q?{[q]:{thoughtSignature:Q}}:void 0},buildToolCallProviderMetadata:(V)=>V}),B.enqueue({type:"stream-start",warnings:_})},transform(B,V){if(f.includeRawChunks)V.enqueue({type:"raw",rawValue:B.rawValue});if(!B.success){J={unified:"error",raw:void 0},V.enqueue({type:"error",error:B.error});return}if(N?.processChunk(B.rawValue),"error"in B.value){J={unified:"error",raw:void 0},V.enqueue({type:"error",error:B.value.error});return}let Q=B.value;if(!se){let le=we(Q);if(Object.values(le).some(Boolean))se=!0,V.enqueue({type:"response-metadata",...le})}if(Q.usage!=null)G=Q.usage;let re=Q.choices[0];if(re?.finish_reason!=null)J={unified:xe(re.finish_reason),raw:re.finish_reason??void 0};if(re?.delta==null)return;let ue=re.delta,fe=(le)=>{if(ae)V.enqueue({type:"text-end",id:"txt-0"}),ae=!1;if(!X)V.enqueue({type:"reasoning-start",id:"reasoning-0"}),X=!0;V.enqueue({type:"reasoning-delta",id:"reasoning-0",delta:le})},Pe=(le)=>{if(X)V.enqueue({type:"reasoning-end",id:"reasoning-0"}),X=!1;if(!ae)V.enqueue({type:"text-start",id:"txt-0"}),ae=!0;V.enqueue({type:"text-delta",id:"txt-0",delta:le})},ve=ue.reasoning_content??ue.reasoning;if(ve)fe(ve);for(let le of Ie(ue.content))if(le.type==="reasoning")fe(le.text);else Pe(le.text);if(ue.tool_calls!=null&&ue.tool_calls.length>0){if(X)V.enqueue({type:"reasoning-end",id:"reasoning-0"}),X=!1;for(let le of ue.tool_calls)Z(le)}},flush(B){if(X)B.enqueue({type:"reasoning-end",id:"reasoning-0"});if(ae)B.enqueue({type:"text-end",id:"txt-0"});for(let[Q,re]of v)x.processDelta({index:Q,id:re.id,function:{arguments:re.bufferedArguments}});if(v.clear(),x.flush(),J==null)J={unified:"error",raw:void 0},B.enqueue({type:"error",error:new P({data:void 0,message:"Response stream ended without a finish reason."})});let V={[q]:{},...N?.buildMetadata()};if(G?.completion_tokens_details?.accepted_prediction_tokens!=null)V[q].acceptedPredictionTokens=G?.completion_tokens_details?.accepted_prediction_tokens;if(G?.completion_tokens_details?.rejected_prediction_tokens!=null)V[q].rejectedPredictionTokens=G?.completion_tokens_details?.rejected_prediction_tokens;B.enqueue({type:"finish",finishReason:J,usage:de(G),providerMetadata:V})}})),request:{body:A},response:{headers:L}}}},Ue=()=>U({prompt_tokens:r().nullish(),completion_tokens:r().nullish(),total_tokens:r().nullish(),prompt_tokens_details:U({cached_tokens:r().nullish()}).nullish(),completion_tokens_details:U({reasoning_tokens:r().nullish(),accepted_prediction_tokens:r().nullish(),rejected_prediction_tokens:r().nullish()}).nullish()}).nullish(),qe=()=>l([e(),o(U({type:e()}))]).nullish();function Ie(m){if(m==null)return[];if(typeof m==="string")return m.length>0?[{type:"text",text:m}]:[];let f=[];for(let b of m)if(b.type==="text"&&typeof b.text==="string"){if(b.text.length>0)f.push({type:"text",text:b.text})}else if(b.type==="thinking"&&Array.isArray(b.thinking)){let _=b.thinking.filter((w)=>w!=null&&typeof w==="object"&&("type"in w)&&w.type==="text"&&("text"in w)&&typeof w.text==="string").map((w)=>w.text).join("");if(_.length>0)f.push({type:"reasoning",text:_})}return f}var De=a(()=>s(U({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({message:t({role:n("assistant").nullish(),content:qe(),reasoning_content:e().nullish(),reasoning:e().nullish(),tool_calls:o(t({id:e().nullish(),function:t({name:e(),arguments:e()}),extra_content:t({google:t({thought_signature:e().nullish()}).nullish()}).nullish()})).nullish()}),finish_reason:e().nullish()})),usage:Ue()}))),Fe=()=>U({id:e().nullish(),created:r().nullish(),model:e().nullish(),choices:o(t({delta:t({role:i(["assistant",""]).nullish(),content:qe(),reasoning_content:e().nullish(),reasoning:e().nullish(),tool_calls:o(t({index:r().nullish(),id:e().nullish(),function:t({name:e().nullish(),arguments:e().nullish()}),extra_content:t({google:t({thought_signature:e().nullish()}).nullish()}).nullish()})).nullish()}).nullish(),finish_reason:e().nullish()})),usage:Ue()}),We=(m)=>l([Fe(),m]);function Oe(m){if(m==null)return te();let f=m.prompt_tokens??0,b=m.completion_tokens??0;return{inputTokens:{total:f,noCache:f,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:b,text:b,reasoning:void 0},raw:m}}function ze({prompt:m,user:f="user",assistant:b="assistant"}){let _="";if(m[0].role==="system")_+=`${m[0].content}
|
|
2
2
|
|
|
3
3
|
`,m=m.slice(1);for(let{role:w,content:A}of m)switch(w){case"system":throw new ye({message:`Unexpected system message in prompt: ${A}`,prompt:m});case"user":{let N=A.map((L)=>{switch(L.type){case"text":return L.text}}).filter(Boolean).join("");_+=`${f}:
|
|
4
4
|
${N}
|