@ax-llm/ax 23.0.13 → 23.0.14
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/index.cjs +3 -3
- package/index.cjs.map +1 -1
- package/index.global.js +3 -3
- package/index.global.js.map +1 -1
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/ax-agent-context.md +1 -1
- package/skills/ax-agent-memory-skills.md +1 -1
- package/skills/ax-agent-observability.md +1 -1
- package/skills/ax-agent-optimize.md +1 -1
- package/skills/ax-agent-rlm.md +1 -1
- package/skills/ax-agent.md +1 -1
- package/skills/ax-ai.md +4 -2
- package/skills/ax-audio.md +1 -1
- package/skills/ax-flow.md +1 -1
- package/skills/ax-gen.md +3 -1
- package/skills/ax-gepa.md +1 -1
- package/skills/ax-llm.md +1 -1
- package/skills/ax-mcp.md +1 -1
- package/skills/ax-playbook.md +1 -1
- package/skills/ax-refine.md +1 -1
- package/skills/ax-signature.md +1 -1
package/index.cjs
CHANGED
|
@@ -1255,11 +1255,11 @@ ${e}
|
|
|
1255
1255
|
`):"text"in r.content?r.content.text:void 0},cT=({model:r,request:e,audio:t})=>{let n=e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
|
|
1256
1256
|
`),o=t.output,i=t.input;return Un(String(r))?{type:"transcription_session.update",session:{type:"transcription",audio:{input:{format:{type:"audio/pcm",rate:i?.sampleRate??24e3},turn_detection:null,transcription:{model:String(r)}}}}}:{type:"session.update",session:{type:"realtime",model:String(r),output_modalities:["audio"],...n?{instructions:n}:{},audio:{input:{format:{type:"audio/pcm",rate:i?.sampleRate??24e3}},output:{format:{type:"audio/pcm",rate:24e3},voice:typeof o?.voice=="object"?o.voice.id:o?.voice??"marin"}}}}},lT=(r,e)=>{let{model:t,request:n}=e,o=sT(n);for(let i of o){let s=i.format??Ct(i.mimeType);if(s!=="pcm16"&&s!=="pcm")throw new Error(`OpenAI Realtime audio input requires pcm16 audio, received ${s??i.mimeType??"unknown format"}`);r.send(JSON.stringify({type:"input_audio_buffer.append",audio:i.data}))}if(o.length>0&&r.send(JSON.stringify({type:"input_audio_buffer.commit"})),!Un(String(t))){for(let i of n.messages){if(i.role!=="user")continue;let s=aT(i);s&&r.send(JSON.stringify({type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:s}]}}))}r.send(JSON.stringify({type:"response.create",response:{output_modalities:["audio"]}}))}},uT=({model:r,collected:e,isDelta:t})=>{let n=e.transcriptChunks.join("")||e.inputTranscriptChunks.join(""),o=e.textChunks.join("")||n,i=Er(e.audioChunks);return{id:e.responseId??"realtime",object:"chat.completion",created:Math.floor(Date.now()/1e3),model:String(r),choices:[{index:0,message:{role:"assistant",content:o||null,refusal:null,audio:i?{id:e.responseId??"realtime-audio",data:i,transcript:n||void 0}:null},finish_reason:"stop"}],usage:e.usage??{prompt_tokens:0,completion_tokens:0,total_tokens:0},system_fingerprint:"",...t?{__isDelta:!0}:{}}},Ts=({model:r,collected:e,finishReason:t})=>({id:e.responseId??"realtime",object:"chat.completion.chunk",created:Math.floor(Date.now()/1e3),model:String(r),choices:[{index:0,delta:{role:"assistant",content:e.textChunks.join("")||e.inputTranscriptChunks.join("")||e.transcriptChunks.join("")||null,audio:e.audioChunks.length>0?{id:e.responseId??"realtime-audio",data:Er(e.audioChunks),transcript:e.transcriptChunks.join("")||void 0}:null},finish_reason:t??null}],system_fingerprint:"",...e.usage?{usage:e.usage}:{}}),bC=async(r,e)=>{let t=iT(r),n=r.audio.live?.turnTimeoutMs??3e4,o={audioChunks:[],textChunks:[],transcriptChunks:[],inputTranscriptChunks:[]},i=s=>{r.debug&&console.log(`[${Is(r).toLowerCase()}] ${s}`)};return await new Promise((s,a)=>{let c=!1,l=!1,u,d=()=>o.audioChunks.length>0||o.textChunks.length>0||o.transcriptChunks.length>0||o.inputTranscriptChunks.length>0,p=()=>{u&&(clearTimeout(u),u=void 0)},m=()=>{p(),u=setTimeout(()=>{i("finishing after output idle"),g()},1500)},g=()=>{if(!c){c=!0,clearTimeout(x),p();try{t.close()}catch{}s(uT({model:r.model,collected:o}))}},h=f=>{if(!c){c=!0,clearTimeout(x),p();try{t.close()}catch{}a(f instanceof Error?f:new Error(String(f)))}},x=setTimeout(()=>{h(new Error(`${Is(r)} turn timed out after ${n}ms`))},n);Gc(t,"open",()=>{i("socket open; sending session update"),t.send(JSON.stringify(r.createSessionUpdate?r.createSessionUpdate(r):cT(r)))}),Gc(t,"error",f=>{h(f?.error??f?.message??"OpenAI Realtime WebSocket error")}),Gc(t,"close",f=>{if(i(`socket close${f?.code?` code=${f.code}`:""}${f?.reason?` reason=${f.reason}`:""}`),!c){if(d()){g();return}h(`${Is(r)} WebSocket closed before completion${f?.code?` (code ${f.code})`:""}${f?.reason?`: ${f.reason}`:""}`)}}),Gc(t,"message",f=>{try{let y=oT(f);if(i(`event ${y.type??"(unknown)"}`),y.type==="error"){h(y.error?.message??`${Is(r)} error`);return}if(y.type==="session.created"||y.type==="session.updated"||y.type==="transcription_session.updated"||y.type==="transcription_session.created"){l||(l=!0,i("session ready; sending input"),lT(t,r));return}if(typeof y.response_id=="string"&&(o.responseId=y.response_id),typeof y.response?.id=="string"&&(o.responseId=y.response.id),(y.response?.usage||y.usage)&&(o.usage=y.response?.usage??y.usage),y.type==="response.output_audio.delta"||y.type==="response.audio.delta"){let A={audioChunks:[y.delta],textChunks:[],transcriptChunks:[],inputTranscriptChunks:[],responseId:o.responseId};o.audioChunks.push(y.delta),m(),e?.(Ts({model:r.model,collected:A}));return}if(y.type==="response.output_text.delta"||y.type==="response.text.delta"){let A={audioChunks:[],textChunks:[y.delta],transcriptChunks:[],inputTranscriptChunks:[],responseId:o.responseId};o.textChunks.push(y.delta),m(),e?.(Ts({model:r.model,collected:A}));return}if(y.type==="response.output_audio_transcript.delta"||y.type==="response.audio_transcript.delta"){let A={audioChunks:[],textChunks:[],transcriptChunks:[y.delta],inputTranscriptChunks:[],responseId:o.responseId};o.transcriptChunks.push(y.delta),m(),e?.(Ts({model:r.model,collected:A}));return}if(y.type==="conversation.item.input_audio_transcription.delta"){let A={audioChunks:[],textChunks:[],transcriptChunks:[],inputTranscriptChunks:[y.delta],responseId:o.responseId};o.inputTranscriptChunks.push(y.delta),m(),e?.(Ts({model:r.model,collected:A}));return}if(y.type==="response.output_audio_transcript.done"||y.type==="response.audio_transcript.done"){typeof y.transcript=="string"&&(o.transcriptChunks=[y.transcript]);return}if(y.type==="response.output_audio.done"||y.type==="response.audio.done"){m();return}if(y.type==="conversation.item.input_audio_transcription.completed"){typeof y.transcript=="string"&&(o.inputTranscriptChunks=[y.transcript]),Un(String(r.model))&&g();return}if(y.type==="response.done"){g();return}if(y.type==="response.output_item.done"||y.type==="response.content_part.done"){m();return}y.type==="response.completed"&&g()}catch(y){h(y)}})})},dT=r=>new ReadableStream({start(e){bC(r,t=>e.enqueue(t)).then(t=>{e.enqueue(Ts({model:r.model,collected:{audioChunks:[],textChunks:[],transcriptChunks:[],inputTranscriptChunks:[],usage:t.usage},finishReason:"stop"})),e.close()}).catch(t=>e.error(t))}});var Dn=r=>{if(!r)return;let e=r.prompt_tokens??r.input_tokens??0,t=r.completion_tokens??r.output_tokens??0,n=r.prompt_tokens_details?.cached_tokens??r.input_tokens_details?.cached_tokens??0,o=r.prompt_tokens_details?.cache_write_tokens??r.input_tokens_details?.cache_write_tokens??0,i=r.completion_tokens_details?.reasoning_tokens??r.output_tokens_details?.reasoning_tokens;return{promptTokens:Math.max(0,e-n-o),completionTokens:t,totalTokens:r.total_tokens??e+t,...i!==void 0?{reasoningTokens:i}:{},...n>0?{cacheReadTokens:n}:{},...o>0?{cacheCreationTokens:o}:{}}};var pT=r=>{let e=["o1","o1-mini","o3","o3-mini","o4-mini","o1-pro","o3-pro"];return e.includes(r)||e.includes(r)},_r=()=>structuredClone({model:"gpt-5-mini",embedModel:"text-embedding-3-small",...Ue()}),qc=()=>structuredClone({..._r(),model:"gpt-5"}),Vc=()=>structuredClone({model:"gpt-5-mini",embedModel:"text-embedding-3-small",...kt()}),Hc=()=>({..._r(),model:"gpt-5-nano"}),jp=class{constructor(e,t,n,o,i,s,a,c,l=!1){this.config=e;this.apiKey=t;this.streamingUsage=n;this.options=o;this.chatReqUpdater=i;this.chatRespProcessor=s;this.chatStreamRespProcessor=a;this.realtime=c;this.promptCaching=l}tokensUsed;supportsImplicitCaching=e=>this.promptCaching&&hn(e);getTokenUsage(){return this.tokensUsed}getModelConfig(){let{config:e}=this;return{maxTokens:e.maxTokens,temperature:e.temperature,presencePenalty:e.presencePenalty,frequencyPenalty:e.frequencyPenalty,stopSequences:e.stopSequences,endSequences:e.endSequences,topP:e.topP,n:e.n,stream:e.stream}}createChatReq=(e,t)=>{let n=e.model,o=(this.realtime?.resolveAudioConfig??Ms)(this.config.audio,e.modelConfig?.audio),i=(this.realtime?.shouldUse??zc)(n,this.config.audio,e.modelConfig?.audio);if(!e.chatPrompt||e.chatPrompt.length===0)throw new Error("Chat prompt is empty");let s={name:"/chat/completions"},a=e.functions?.map(y=>({type:"function",function:{name:y.name,description:y.description,parameters:y.parameters}})),c=!e.functionCall&&e.functions&&e.functions.length>0?"auto":e.functionCall,l=mT(e,i),u=mC(e,t,this.promptCaching),d,p=0;if(u){let y=fC(l,e.chatPrompt);l=y.messages,p=y.markerCount,d=gC(t,this.options),d||(t.logger??this.options?.logger)?.({name:"Notification",id:"openai-prompt-cache-key-missing",value:"OpenAI prompt caching is enabled but neither promptCacheKey nor sessionId is set. GPT-5.6+ needs a key that is stable per conversation for reliable cache matching."})}let m=e.modelConfig?.frequencyPenalty??this.config.frequencyPenalty,g=e.modelConfig?.stream??this.config.stream,h=this.config.store,x=pT(n),f={model:n,messages:l,...e.responseFormat?{response_format:e.responseFormat.type==="json_schema"?{type:"json_schema",json_schema:e.responseFormat.schema}:e.responseFormat}:this.config?.responseFormat?{response_format:{type:this.config.responseFormat}}:{},...a?{tools:a}:{},...c?{tool_choice:c}:{},...x?{}:{...(e.modelConfig?.maxTokens??this.config.maxTokens)!==void 0?{max_completion_tokens:e.modelConfig?.maxTokens??this.config.maxTokens}:{},...e.modelConfig?.temperature!==void 0?{temperature:e.modelConfig.temperature}:{},...e.modelConfig?.topP!==void 0?{top_p:e.modelConfig.topP}:{},...(e.modelConfig?.n??this.config.n)!==void 0?{n:e.modelConfig?.n??this.config.n}:{},...(e.modelConfig?.presencePenalty??this.config.presencePenalty)!==void 0?{presence_penalty:e.modelConfig?.presencePenalty??this.config.presencePenalty}:{},...m!==void 0?{frequency_penalty:m}:{}},...(e.modelConfig?.stopSequences??this.config.stop)&&(e.modelConfig?.stopSequences??this.config.stop).length>0?{stop:e.modelConfig?.stopSequences??this.config.stop}:{},...this.config.logitBias!==void 0?{logit_bias:this.config.logitBias}:{},...g&&this.streamingUsage?{stream:!0,stream_options:{include_usage:!0}}:{},...p>0?{prompt_cache_options:{mode:"explicit"}}:{},...d?{prompt_cache_key:d}:{},...h?{store:h}:{},...this.config.serviceTier?{service_tier:this.config.serviceTier}:{},...this.config.user?{user:this.config.user}:{}};if(i){if(e.responseFormat||f.response_format)throw new Error(`${this.realtime?.apiName??"OpenAI Realtime"} models do not support structured response formats with audio output or transcription`);let y=(this.realtime?.createApi??zo)({model:n,request:f,apiKey:this.apiKey,audio:o,webSocket:t.webSocket??this.options?.webSocket,debug:t.debug??this.options?.debug});s.name=y.name,s.localCall=y.localCall}else f=Uc(f,e,this.config.audio);return this.config.reasoningEffort&&(f.reasoning_effort=this.config.reasoningEffort),this.config.webSearchOptions&&(f.web_search_options={...this.config.webSearchOptions.searchContextSize&&{search_context_size:this.config.webSearchOptions.searchContextSize},...this.config.webSearchOptions.userLocation&&{user_location:{approximate:{type:"approximate",...this.config.webSearchOptions.userLocation.approximate.city&&{city:this.config.webSearchOptions.userLocation.approximate.city},...this.config.webSearchOptions.userLocation.approximate.country&&{country:this.config.webSearchOptions.userLocation.approximate.country},...this.config.webSearchOptions.userLocation.approximate.region&&{region:this.config.webSearchOptions.userLocation.approximate.region},...this.config.webSearchOptions.userLocation.approximate.timezone&&{timezone:this.config.webSearchOptions.userLocation.approximate.timezone}}}}}),t?.thinkingTokenBudget&&(f.reasoning_effort=AC(n,t.thinkingTokenBudget)),this.chatReqUpdater&&(f=this.chatReqUpdater(f,t)),[s,f]};createEmbedReq=e=>{let t=e.embedModel;if(!t)throw new Error("Embed model not set");if(!e.texts||e.texts.length===0)throw new Error("Embed texts is empty");let n={name:"/embeddings"},o={model:t,input:e.texts,dimensions:this.config.dimensions};return[n,o]};createChatResp(e){let{id:t,usage:n,choices:o,error:i}=e;if(i)throw i;this.tokensUsed=Dn(n);let a={results:o.map(c=>{if(c.message.refusal)throw new Ke(c.message.refusal,e.model,e.id);let l=RC(c.finish_reason),u=c.message.tool_calls?.map(({id:p,function:{arguments:m,name:g}})=>({id:p,type:"function",function:{name:g,params:m}})),d=Dc(c.message.audio);return{index:c.index,id:`${c.index}`,content:c.message.content??d?.transcript??void 0,audio:d,thought:c.message.reasoning_content,thoughtBlocks:c.message.reasoning_content?[{data:c.message.reasoning_content,encrypted:!1}]:void 0,citations:c.message.annotations?.filter(p=>p?.type==="url_citation"&&p.url_citation).map(p=>({url:p.url_citation?.url,title:p.url_citation?.title,description:p.url_citation?.description})),functionCalls:u,finishReason:l}}),remoteId:t};return this.chatRespProcessor?this.chatRespProcessor(a):a}createChatStreamResp=(e,t)=>{let{id:n,usage:o,choices:i}=e;this.tokensUsed=Dn(o);let s=t;s.indexIdMap||(s.indexIdMap={});let c={results:i.map(({index:l,delta:{content:u,role:d,refusal:p,audio:m,tool_calls:g,reasoning_content:h,annotations:x},finish_reason:f})=>{if(p)throw new Ke(p,void 0,n);let y=RC(f),A=g?.map(({id:w,index:S,function:{name:F,arguments:k}})=>{typeof w=="string"&&typeof S=="number"&&!s.indexIdMap[S]&&(s.indexIdMap[S]=w);let O=s.indexIdMap[S];return O?{id:O,type:"function",function:{name:F,params:k}}:null}).filter(w=>w!==null),b=jc(m);return{index:l,content:u??b?.transcript??void 0,role:d,audio:b,thought:h,thoughtBlocks:h?[{data:h,encrypted:!1}]:void 0,citations:x?.filter(w=>w?.type==="url_citation"&&w.url_citation).map(w=>({url:w.url_citation?.url,title:w.url_citation?.title,description:w.url_citation?.description})),functionCalls:A,finishReason:y,id:n}}),remoteId:n};return this.chatStreamRespProcessor?this.chatStreamRespProcessor(c,t):c};createEmbedResp(e){let{data:t,usage:n}=e;return this.tokensUsed=Dn(n),{embeddings:t.map(o=>o.embedding)}}},RC=r=>{switch(r){case"stop":return"stop";case"length":return"length";case"content_filter":return"error";case"tool_calls":return"function_call"}};function mT(r,e=!1){return r.chatPrompt.map(n=>{switch(n.role){case"system":return{role:"system",content:n.content};case"user":{let o=Array.isArray(n.content)?n.content.map(i=>{switch(i.type){case"text":return{type:"text",text:i.text};case"image":return{type:"image_url",image_url:{url:`data:${i.mimeType};base64,${i.image}`,details:i.details??"auto"}};case"audio":return $c(i,{allowPcm16:e});default:throw new Error("Invalid content type")}}):n.content;return{role:"user",...n.name?{name:n.name}:{},content:o}}case"assistant":{let o=n.thought??n.thoughtBlocks?.map(s=>s.data).join(""),i=n.functionCalls?.map(s=>({id:s.id,type:"function",function:{name:s.function.name,arguments:typeof s.function.params=="object"?JSON.stringify(s.function.params):s.function.params}}));if(i&&i.length>0)return{role:"assistant",...n.content?{content:n.content}:{},...o?{reasoning_content:o}:{},name:n.name,tool_calls:i};if(n.content===void 0&&!n.audio&&!o)throw new Error("Assistant content is required when no tool calls are provided");return{role:"assistant",...n.content!==void 0?{content:n.content}:{},...o?{reasoning_content:o}:{},...n.audio?{audio:{id:n.audio.id}}:{},...n.name?{name:n.name}:{}}}case"function":return{role:"tool",content:n.content?.map(o=>o.type==="text"?o.text:o.type==="image"?o.altText??`[MCP image result: ${o.mimeType}]`:o.type==="audio"?o.transcription??`[MCP audio result: ${o.mimeType??"application/octet-stream"}]`:o.type==="url"?o.cachedContent??[o.title,o.description,o.url].filter(Boolean).join(`
|
|
1257
1257
|
`):o.extractedText??`[MCP file result: ${o.filename??"file"} (${o.mimeType})]`).join(`
|
|
1258
|
-
`)??n.result,tool_call_id:n.functionId};default:throw new Error("Invalid role")}})}var dt=class extends St{batchAudioConfig={transcriptionModel:"gpt-4o-mini-transcribe",speechModel:"gpt-4o-mini-tts",speechVoice:"alloy",speechFormat:"mp3"};openAICompatibleApiKey;openAICompatibleApiURL;constructor({apiKey:e,config:t,options:n,apiURL:o,modelInfo:i,models:s,chatReqUpdater:a,chatRespProcessor:c,chatStreamRespProcessor:l,realtime:u,promptCaching:d,supportFor:p}){if(!e||e==="")throw new Error("OpenAI API key not set");let m=new jp(t,e,n?.streamingUsage??!0,n,a,c,l,u,d??!1),g=o||"https://api.openai.com/v1";super(m,{name:"OpenAI",apiURL:g,headers:async()=>({Authorization:`Bearer ${e}`}),modelInfo:i,defaults:{model:t.model,embedModel:t.embedModel},options:n,supportFor:p,models:s}),this.openAICompatibleApiKey=e,this.openAICompatibleApiURL=g}setBatchAudioConfig(e){this.batchAudioConfig={...this.batchAudioConfig,...e}}async transcribe(e,t){let n=typeof e.model=="string"?e.model:this.batchAudioConfig.transcriptionModel,o=this.getOptions();return await Go({url:`${this.openAICompatibleApiURL}/audio/transcriptions`,headers:{Authorization:`Bearer ${this.openAICompatibleApiKey}`},audio:e.audio,fields:{model:n??this.batchAudioConfig.transcriptionModel,language:e.language,prompt:e.prompt,temperature:e.temperature,response_format:e.responseFormat??"json"},fetch:t?.fetch??o.fetch,abortSignal:t?.abortSignal??o.abortSignal})}async speak(e,t){let n=e.format??this.batchAudioConfig.speechFormat??"mp3",o=typeof e.model=="string"?e.model:this.batchAudioConfig.speechModel,i=typeof e.voice=="object"?e.voice.id:e.voice??this.batchAudioConfig.speechVoice??"alloy",s=this.getOptions();return await fn({url:`${this.openAICompatibleApiURL}/audio/speech`,headers:{Authorization:`Bearer ${this.openAICompatibleApiKey}`},body:{model:o,input:e.text,voice:i,response_format:n==="pcm"?"pcm16":n,...e.speed!==void 0?{speed:e.speed}:{}},format:n,transcript:e.text,fetch:t?.fetch??s.fetch,abortSignal:t?.abortSignal??s.abortSignal})}},qo=class extends dt{constructor({apiKey:e,apiURL:t,config:n,options:o,models:i,modelInfo:s}){if(!e||e==="")throw new Error("OpenAI API key not set");s=[...or,...s??[]];let a=l=>{let u=it({model:l,modelInfo:s,models:i}),d=Lc(l),p=Ps(l),m=Un(l);return{functions:!0,streaming:!0,hasThinkingBudget:u?.supported?.thinkingBudget??!1,hasShowThoughts:u?.supported?.showThoughts??!1,structuredOutputs:u?.supported?.structuredOutputs??!1,media:{images:{supported:!0,formats:["image/jpeg","image/png","image/gif","image/webp"],maxSize:20*1024*1024,detailLevels:["high","low","auto"]},audio:{supported:!0,formats:d||p?["wav","mp3","pcm16"]:["wav","mp3","ogg"],maxDuration:25*60,output:{supported:d||p,formats:["wav","mp3","flac","opus","aac","pcm16"],voices:["alloy","ash","ballad","coral","echo","fable","nova","onyx","sage","shimmer","marin","cedar"]},...m?{output:{supported:!1,formats:[],voices:[]}}:{}},files:{supported:!0,formats:["text/plain","application/pdf","image/jpeg","image/png"],maxSize:512*1024*1024,uploadMethod:"upload"},urls:{supported:!1,webSearch:!0,contextFetching:!1}},caching:{supported:hn(l),types:hn(l)?["ephemeral"]:[],cacheBreakpoints:!0},thinking:u?.supported?.thinkingBudget??!1,multiTurn:!0}},c=i?.map(l=>{let u=l,d=u?.config;if(!d)return l;let p={};d.maxTokens!==void 0&&(p.maxTokens=d.maxTokens),d.temperature!==void 0&&(p.temperature=d.temperature),d.topP!==void 0&&(p.topP=d.topP),d.presencePenalty!==void 0&&(p.presencePenalty=d.presencePenalty),d.frequencyPenalty!==void 0&&(p.frequencyPenalty=d.frequencyPenalty);let m=d.stopSequences??d.stop;m!==void 0&&(p.stopSequences=m),d.n!==void 0&&(p.n=d.n),d.stream!==void 0&&(p.stream=d.stream);let g={...u};Object.keys(p).length>0&&(g.modelConfig={...u.modelConfig??{},...p});let h=d?.thinking?.thinkingTokenBudget;if(typeof h=="number"){let x=[["minimal",200],["low",800],["medium",5e3],["high",1e4],["highest",24500]],f="minimal",y=Number.POSITIVE_INFINITY;for(let[A,b]of x){let w=Math.abs(h-b);w<y&&(y=w,f=A)}g.thinkingTokenBudget=f}return d?.thinking?.includeThoughts!==void 0&&(g.showThoughts=!!d.thinking.includeThoughts),g});super({apiKey:e,apiURL:t,config:{..._r(),...n},options:o,modelInfo:s,models:c??i,promptCaching:!0,supportFor:a}),super.setName("OpenAI")}};var gT=r=>{let e=r.trim();if(!e)return e;if(e.includes("api-version=")){let t=e.indexOf("api-version="),n=e.slice(t);return new URLSearchParams(n).get("api-version")??e}return e},fT=r=>{let e=r.match(/^(\d{4}-\d{2}-\d{2})/);return e?e[1]>="2024-08-01":!1},Gp=_r,wC=Vc,vC=Hc,SC=qc,Vo=class extends dt{constructor({apiKey:e,resourceName:t,deploymentName:n,version:o="api-version=2024-02-15-preview",config:i,options:s,models:a,modelInfo:c,chatReqUpdater:l}){if(!e||e==="")throw new Error("Azure OpenAPI API key not set");if(!t||t==="")throw new Error("Azure OpenAPI resource name not set");if(!n||n==="")throw new Error("Azure OpenAPI deployment id not set");let u={...Gp(),...i},d=gT(o),p=fT(d);c=[...or,...c??[]];let m=h=>{let x=it({model:h,modelInfo:c,models:a});return{functions:!0,streaming:!0,hasThinkingBudget:x?.supported?.thinkingBudget??!1,hasShowThoughts:x?.supported?.showThoughts??!1,structuredOutputs:p&&(x?.supported?.structuredOutputs??!1),functionCot:!1,media:{images:{supported:!0,formats:["image/jpeg","image/png","image/gif","image/webp"],maxSize:20*1024*1024,detailLevels:["high","low","auto"]},audio:{supported:!1,formats:[],maxDuration:0},files:{supported:!1,formats:[],maxSize:0,uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:x?.supported?.thinkingBudget??!1,multiTurn:!0}};super({apiKey:e,config:u,options:s,models:a,modelInfo:c,supportFor:m,chatReqUpdater:l});let g=t.includes("://")?t:`https://${t}.openai.azure.com/`;super.setName("Azure OpenAI"),super.setAPIURL(new URL(`/openai/deployments/${n}?api-version=${d}`,g).href),super.setHeaders(async()=>({"api-key":e}))}};var hT=Math.log(2);function TC(){return{version:1,observations:0,successes:0,failureEwma:.05,logLatencyMean:0,logLatencyM2:0}}function Bp(r,e){let t=r??TC(),o=.2*(e.outcome==="failure"?1:0)+(1-.2)*t.failureEwma;if(e.outcome==="failure")return{...t,observations:t.observations+1,failureEwma:o};let i=Math.log(Math.max(1,e.latencyMs)),s=t.successes+1,a=i-t.logLatencyMean,c=t.logLatencyMean+a/Math.max(1,s),l=i-c;return{...t,observations:t.observations+1,successes:s,failureEwma:o,logLatencyMean:c,logLatencyM2:t.logLatencyM2+a*l}}var Ho=class{stats=new Map;async get(e){let t=this.stats.get(kC(e));return t?{...t}:void 0}async observe(e,t){let n=kC(e);this.stats.set(n,Bp(this.stats.get(n),t))}};function PC(r,e,t=Math.random){let n=r??TC(),o=Math.log(Math.max(1,e/2)),i=1,s=2,a=hT**2,c=n.successes,l=i+c,u=(i*o+c*n.logLatencyMean)/l,d=s+c/2,p=n.logLatencyMean-o,m=a+n.logLatencyM2/2+i*c*p**2/(2*l),g=MC(d,1/Math.max(Number.EPSILON,m),t),h=1/Math.max(Number.EPSILON,g),x=u+EC(t)*Math.sqrt(h/l),f=(Math.log(Math.max(1,e))-x)/Math.sqrt(h);return{failureProbability:IC(n.failureEwma),deadlineMissProbability:IC(1-xT(f))}}function kC(r){return JSON.stringify([r.namespace,r.slice,r.logicalModel,r.routeKey])}function MC(r,e,t){if(r<1){let i=Kc(t);return MC(r+1,e,t)*i**(1/r)}let n=r-1/3,o=1/Math.sqrt(9*n);for(;;){let i=EC(t),s=1+o*i;if(s<=0)continue;let a=s**3,c=Kc(t);if(c<1-.0331*i**4||Math.log(c)<.5*i**2+n*(1-a+Math.log(a)))return n*a*e}}function EC(r){let e=Kc(r),t=Kc(r);return Math.sqrt(-2*Math.log(e))*Math.cos(2*Math.PI*t)}function Kc(r){return Math.min(1-Number.EPSILON,Math.max(Number.EPSILON,r()))}function xT(r){let e=r<0?-1:1,t=Math.abs(r)/Math.sqrt(2),n=1/(1+.3275911*t),o=((((1.061405429*n-1.453152027)*n+1.421413741)*n-.284496736)*n+.254829592)*n;return(1+e*(1-o*Math.exp(-t*t)))/2}function IC(r){return Math.min(1,Math.max(0,r))}var Wc=class r{services;currentServiceIndex=0;currentService;debug;initialBackoffMs;maxBackoffMs;maxRetries;adaptive;serviceFailures=new Map;static RETRYABLE_STATUS_CODES=[408,429,500,502,503,504,529];constructor(e,t){if(e.length===0)throw new Error("No AI services provided.");let n=e;AT(n),this.adaptive=t?.strategy?yT(n,t.strategy):void 0,this.services=[...n].sort(t?.comparator??r.metricComparator);let o=this.services[this.currentServiceIndex];if(o===void 0)throw new Error("Error initializing the AI services.");this.currentService=o,this.debug=t?.debug??!0,this.initialBackoffMs=t?.initialBackoffMs??1e3,this.maxBackoffMs=t?.maxBackoffMs??32e3,this.maxRetries=t?.maxRetries??3}static create(e,t){return new r(e,t)}getLastUsedChatModel(){return this.currentService.getLastUsedChatModel()}getLastUsedEmbedModel(){return this.currentService.getLastUsedEmbedModel()}getLastUsedModelConfig(){return this.currentService.getLastUsedModelConfig()}static inputOrderComparator=()=>0;static metricComparator=(e,t)=>{let n=e.getMetrics(),o=t.getMetrics();return n.latency.chat.mean-o.latency.chat.mean};getModelList(){for(let e of this.services){let t=e.getModelList();if(t)return t}}getNextService(e,t){let n=t+1,o=e[n];return o===void 0?{service:void 0,index:n}:{service:o,index:n}}reset(){this.currentServiceIndex=0;let e=this.services[this.currentServiceIndex];if(e===void 0)throw new Error("No AI services provided.");this.currentService=e}getName(){return this.currentService.getName()}getId(){return this.currentService.getId()}getFeatures(e){let t={functions:!1,streaming:!1,thinking:!1,multiTurn:!1,structuredOutputs:!1,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]}};for(let n of this.services){let o=n.getFeatures(e);o.functions&&(t.functions=!0),o.streaming&&(t.streaming=!0),o.thinking&&(t.thinking=!0),o.multiTurn&&(t.multiTurn=!0),o.structuredOutputs&&(t.structuredOutputs=!0),o.functionCot&&(t.functionCot=!0),o.hasThinkingBudget&&(t.hasThinkingBudget=!0),o.hasShowThoughts&&(t.hasShowThoughts=!0),o.media.images.supported&&(t.media.images.supported=!0),t.media.images.formats=Array.from(new Set([...t.media.images.formats,...o.media.images.formats])),o.media.audio.supported&&(t.media.audio.supported=!0),t.media.audio.formats=Array.from(new Set([...t.media.audio.formats,...o.media.audio.formats])),o.media.files.supported&&(t.media.files.supported=!0),t.media.files.formats=Array.from(new Set([...t.media.files.formats,...o.media.files.formats])),o.media.files.uploadMethod!=="none"&&(t.media.files.uploadMethod=o.media.files.uploadMethod),o.media.urls.supported&&(t.media.urls.supported=!0),o.media.urls.webSearch&&(t.media.urls.webSearch=!0),o.media.urls.contextFetching&&(t.media.urls.contextFetching=!0),o.caching.supported&&(t.caching.supported=!0),t.caching.types=Array.from(new Set([...t.caching.types,...o.caching.types]))}return t}getMetrics(){let e={latency:{chat:{mean:0,p95:0,p99:0,samples:[]},embed:{mean:0,p95:0,p99:0,samples:[]}},errors:{chat:{count:0,rate:0,total:0},embed:{count:0,rate:0,total:0}}},t=0,n=0,o=0,i=0;for(let s of this.services){let a=s.getMetrics();e.errors.chat.count+=a.errors.chat.count,e.errors.chat.total+=a.errors.chat.total,e.errors.embed.count+=a.errors.embed.count,e.errors.embed.total+=a.errors.embed.total;let c=a.latency.chat.samples.length;c>0&&(t+=a.latency.chat.mean*c,n+=c);let l=a.latency.embed.samples.length;l>0&&(o+=a.latency.embed.mean*l,i+=l)}e.errors.chat.total>0&&(e.errors.chat.rate=e.errors.chat.count/e.errors.chat.total),e.errors.embed.total>0&&(e.errors.embed.rate=e.errors.embed.count/e.errors.embed.total),n>0&&(e.latency.chat.mean=t/n),i>0&&(e.latency.embed.mean=o/i);for(let s of this.services){let a=s.getMetrics();e.latency.chat.p95=Math.max(e.latency.chat.p95,a.latency.chat.p95),e.latency.chat.p99=Math.max(e.latency.chat.p99,a.latency.chat.p99),e.latency.embed.p95=Math.max(e.latency.embed.p95,a.latency.embed.p95),e.latency.embed.p99=Math.max(e.latency.embed.p99,a.latency.embed.p99)}return e}getEstimatedCost(e){return this.currentService.getEstimatedCost(e)}canRetryService(e){let t=this.serviceFailures.get(e.getId());if(!t)return!0;let{retries:n,lastFailureTime:o}=t,i=Date.now()-o,s=Math.min(this.initialBackoffMs*2**n,this.maxBackoffMs);return i>=s}handleFailure(e,t){let o=(this.serviceFailures.get(e.getId())?.retries??0)+1;this.serviceFailures.set(e.getId(),{retries:o,lastFailureTime:Date.now()}),this.debug&&console.warn(`AxBalancer: Service ${e.getName()} failed (retry ${o}/${this.maxRetries})`,t)}handleSuccess(e){this.serviceFailures.delete(e.getId())}isRetryableServiceError(e){if(!(e instanceof lt))return!1;switch(e.constructor){case vt:return!1;case Qe:return r.RETRYABLE_STATUS_CODES.includes(e.status);case tt:case ln:case wt:case ht:return!0;default:return!1}}getCandidateServices(e){let t=e.responseFormat?.type==="json_schema",n=e.capabilities,o=n?.requiresImages,i=n?.requiresAudio,s=e.model;if(!t&&!o&&!i)return this.services;let a=this.services.filter(c=>{let l=c.getFeatures(s);return!(t&&!l.structuredOutputs||o&&!l.media.images.supported||i&&!l.media.audio.supported)});if(a.length===0){let c=[];throw t&&c.push("structured outputs"),o&&c.push("images"),i&&c.push("audio"),new Error(`No services available that support required capabilities: ${c.join(", ")}.`)}return a}async peekStreamForFailover(e,t,n){let o=e.getReader(),i=await o.read(),s=n?performance.now()-n.startedAt:0,a=!1,c=!1,l=async()=>{c||!n||(c=!0,await n.onSuccess(s))},u=async d=>{this.isRetryableServiceError(d)&&(this.handleFailure(t,d),!c&&n&&(c=!0,await n.onFailure(d,performance.now()-n.startedAt)))};return new ReadableStream({async pull(d){if(!a){if(a=!0,i.done){await l(),d.close();return}d.enqueue(i.value);return}try{let{done:p,value:m}=await o.read();if(p){await l(),d.close();return}d.enqueue(m)}catch(p){await u(p),d.error(p)}},cancel(d){return c=!0,o.cancel(d)}})}async executeChatAttempt(e,t,n,o){let i=await e.chat(t,n);return i instanceof ReadableStream?(o?.onStreaming?.(),await this.peekStreamForFailover(i,e,o?.observation)):i}async chatAdaptive(e,t,n){let o=await this.rankAdaptiveCandidates(e,t,n),i;for(let s=0;s<o.length;s++){let a=o[s];if(!a)continue;let{service:c,statsKey:l}=a;this.currentService=c,this.emitRoutingEvent({type:"selected",namespace:l.namespace,slice:l.slice,logicalModel:l.logicalModel,routeKey:a.routeKey,serviceName:a.serviceName,attempt:s+1});let u=performance.now(),d=!1;try{let p=await this.executeChatAttempt(c,e,t,{onStreaming:()=>{d=!0},observation:{startedAt:u,onSuccess:async g=>{this.handleSuccess(c),await this.recordAdaptiveObservation(a,{outcome:"success",latencyMs:g},!0)},onFailure:async(g,h)=>{await this.recordAdaptiveObservation(a,{outcome:"failure"},!0,g,h)}}});if(d)return p;let m=performance.now()-u;return this.handleSuccess(c),await this.recordAdaptiveObservation(a,{outcome:"success",latencyMs:m},!1),p}catch(p){if(!this.isRetryableServiceError(p))throw p;i=p,this.handleFailure(c,p),await this.recordAdaptiveObservation(a,{outcome:"failure"},d,p,performance.now()-u);let m=o[s+1],g=OC(p);this.emitRoutingEvent({type:"fallback",namespace:l.namespace,slice:l.slice,logicalModel:l.logicalModel,fromRouteKey:a.routeKey,toRouteKey:m?.routeKey,reason:g.reason,status:g.status}),this.debug&&console.warn(`AxBalancer: Switching to service ${m?.serviceName??"none"}`,p)}}throw i||new Error(`All candidate services exhausted (tried ${n.length} service(s))`)}async rankAdaptiveCandidates(e,t,n){let o=this.adaptive;if(!o)return[];let i=String(e.model??"default"),s=o.strategy.slice?.({model:e.model,options:t})??"default",a=zp("slice",s),c=n;if(c.length===0)throw new Error(`All candidate services exhausted (tried ${n.length} service(s))`);let l=await Promise.all(c.map(async d=>{let p=o.routeKeys.get(d),m=o.serviceIndices.get(d);if(p===void 0||m===void 0)throw new Error("Adaptive route metadata is missing for a service.");let g={namespace:o.namespace,slice:a,logicalModel:i,routeKey:p},h=await this.getAdaptiveStats(g),{failureProbability:x,deadlineMissProbability:f}=PC(h,o.strategy.deadlineMs),y=this.estimateAdaptiveCost(d,m,p,e),A=x+(1-x)*f;return{service:d,serviceIndex:m,order:n.indexOf(d),statsKey:g,routeKey:p,serviceName:d.getName(),score:y+o.strategy.badOutcomeCost*A,estimatedCost:y,failureProbability:x,deadlineMissProbability:f}}));l.sort((d,p)=>d.score-p.score||d.order-p.order);let u=l[0];return u&&this.emitRoutingEvent({type:"ranked",namespace:u.statsKey.namespace,slice:u.statsKey.slice,logicalModel:u.statsKey.logicalModel,candidates:l.map(({routeKey:d,serviceName:p,score:m,estimatedCost:g,failureProbability:h,deadlineMissProbability:x})=>({routeKey:d,serviceName:p,score:m,estimatedCost:g,failureProbability:h,deadlineMissProbability:x}))}),l}estimateAdaptiveCost(e,t,n,o){let i=this.adaptive;if(!i)return 0;let s=String(o.model??"default"),a=e.getModelList()?.find(m=>Object.is(m.key,o.model)),c=a&&"model"in a?a.model:String(o.model??e.getLastUsedChatModel()??"default"),l=i.strategy.expectedTokens,u=l?.promptTokens??0,d=l?.completionTokens??0,p=i.strategy.estimateCost?i.strategy.estimateCost({service:e,serviceIndex:t,routeKey:n,logicalModel:s,resolvedModel:c,expectedTokens:l}):e.getEstimatedCost(l?{ai:e.getName(),model:c,tokens:{promptTokens:u,completionTokens:d,totalTokens:u+d}}:void 0);if(!Number.isFinite(p)||p<0)throw new Error(`Adaptive estimated cost for route "${n}" must be finite and non-negative.`);return p}async getAdaptiveStats(e){let t=this.adaptive;if(t)try{return await t.statsStore.get(e)}catch(n){this.emitRoutingEvent({type:"store-error",namespace:e.namespace,slice:e.slice,logicalModel:e.logicalModel,operation:"get",routeKey:e.routeKey,errorType:FC(n)});return}}async recordAdaptiveObservation(e,t,n,o,i){let s=this.adaptive;if(!s)return;try{await s.statsStore.observe(e.statsKey,t)}catch(c){this.emitRoutingEvent({type:"store-error",namespace:e.statsKey.namespace,slice:e.statsKey.slice,logicalModel:e.statsKey.logicalModel,operation:"observe",routeKey:e.routeKey,errorType:FC(c)})}let a=o?OC(o):void 0;this.emitRoutingEvent({type:"observation",namespace:e.statsKey.namespace,slice:e.statsKey.slice,logicalModel:e.statsKey.logicalModel,routeKey:e.routeKey,serviceName:e.serviceName,outcome:t.outcome,latencyMs:t.outcome==="success"?t.latencyMs:i,streaming:n,reason:a?.reason,status:a?.status})}emitRoutingEvent(e){let t=this.adaptive?.strategy.onRoutingEvent;if(t)try{Promise.resolve(t(e)).catch(()=>{})}catch{}}async chat(e,t){let n=this.getCandidateServices(e);if(this.adaptive)return await this.chatAdaptive(e,t,n);let o=0,i=n[o];if(!i)throw new Error("No matching AI services available for request.");for(this.currentService=i;;){if(!this.canRetryService(i)){let s=this.getNextService(n,o);if(!s.service)throw new Error(`All candidate services exhausted (tried ${n.length} service(s))`);i=s.service,o=s.index,this.currentService=i;continue}try{let s=await this.executeChatAttempt(i,e,t);return this.handleSuccess(i),s}catch(s){if(!(s instanceof lt))throw s;switch(s.constructor){case vt:throw s;case Qe:{if(!r.RETRYABLE_STATUS_CODES.includes(s.status))throw s;break}case tt:break;case ln:break;case wt:break;case ht:break;default:throw s}if(this.handleFailure(i,s),(this.serviceFailures.get(i.getId())?.retries??0)>=this.maxRetries){let c=this.getNextService(n,o);if(this.debug&&console.warn(`AxBalancer: Switching to service ${c.service?.getName()??"none"}`,s),!c.service)throw s;i=c.service,o=c.index,this.currentService=i}}}}async embed(e,t){this.reset();let n=this.currentServiceIndex;for(;;){if(!this.canRetryService(this.currentService)){let o=this.getNextService(this.services,n);if(!o.service)throw new Error(`All services exhausted (tried ${this.services.length} service(s))`);this.currentService=o.service,n=o.index,this.currentServiceIndex=n;continue}try{let o=await this.currentService.embed(e,t);return this.handleSuccess(this.currentService),o}catch(o){if(!(o instanceof lt)||o instanceof Qe&&!r.RETRYABLE_STATUS_CODES.includes(o.status)||o instanceof vt)throw o;if(this.handleFailure(this.currentService,o),(this.serviceFailures.get(this.currentService.getId())?.retries??0)>=this.maxRetries){let s=this.getNextService(this.services,n);if(!s.service)throw o;this.currentService=s.service,n=s.index,this.currentServiceIndex=n}}}}async transcribe(e,t){return await this.currentService.transcribe(e,t)}async speak(e,t){return await this.currentService.speak(e,t)}setOptions(e){for(let t of this.services)t.setOptions(e);this.currentService.setOptions(e),this.debug=e.debug??this.debug}getOptions(){return this.currentService.getOptions()}getLogger(){return this.currentService.getLogger()}};function yT(r,e){if(!Number.isFinite(e.deadlineMs)||e.deadlineMs<=0)throw new Error("Adaptive deadlineMs must be finite and greater than zero.");if(!Number.isFinite(e.badOutcomeCost)||e.badOutcomeCost<0)throw new Error("Adaptive badOutcomeCost must be finite and non-negative.");if(e.expectedTokens){for(let[i,s]of Object.entries(e.expectedTokens))if(!Number.isFinite(s)||s<0)throw new Error(`Adaptive expectedTokens.${i} must be finite and non-negative.`)}if(e.statsStore&&!e.routeKey)throw new Error("Adaptive routeKey is required when a custom statsStore is supplied.");let t=new Map,n=new Map,o=new Set;return r.forEach((i,s)=>{let a=e.routeKey?.(i,s)??i.getId(),c=zp("routeKey",a);if(o.has(c))throw new Error(`Adaptive routeKey "${c}" must be unique.`);o.add(c),t.set(i,c),n.set(i,s)}),{strategy:e,namespace:zp("namespace",e.namespace??"default"),statsStore:e.statsStore??new Ho,routeKeys:t,serviceIndices:n}}function zp(r,e){let t=e.trim();if(!t)throw new Error(`Adaptive ${r} must be a non-empty string.`);return t}function OC(r){return r instanceof Qe?{reason:"status",status:r.status}:r instanceof tt?{reason:"network",status:void 0}:r instanceof wt?{reason:"stream-terminated",status:void 0}:r instanceof ht?{reason:"timeout",status:void 0}:{reason:"response",status:void 0}}function FC(r){return r instanceof Error?r.name:typeof r}function AT(r){let e=r.find(o=>o.getModelList()!==void 0);if(!e)return;let t=e.getModelList();if(!t)throw new Error("No model list found in any service.");let n=new Set(t.map(o=>o.key));for(let o=0;o<r.length;o++){let i=r[o];if(!i)throw new Error(`Service at index ${o} is undefined`);let s=i.getModelList();if(!s)throw new Error(`Service at index ${o} (${i.getName()}) has no model list while another service does.`);let a=new Set(s.map(c=>c.key));for(let c of n)if(!a.has(c))throw new Error(`Service at index ${o} (${i.getName()}) is missing model "${c}"`);for(let c of a)if(!n.has(c))throw new Error(`Service at index ${o} (${i.getName()}) has extra model "${c}"`)}}function Nr(r){let e=!1,t=!1,n=!1,o=!1,i=!1,s=!1,a=!1,c=!1,l=new Set,u=0;if(r.chatPrompt&&Array.isArray(r.chatPrompt))for(let d of r.chatPrompt){if(d.role==="user"&&Array.isArray(d.content))for(let p of d.content)switch(l.add(p.type),p.type){case"image":e=!0,p.cache&&(c=!0),u+=85;break;case"audio":t=!0,p.cache&&(c=!0),u+=p.duration||60;break;case"file":o=!0,p.cache&&(c=!0),u+=Math.ceil((p.extractedText?.length||1e3)/4);break;case"url":i=!0,p.cache&&(c=!0),u+=Math.ceil((p.cachedContent?.length||2e3)/4);break;case"text":p.cache&&(c=!0),u+=Math.ceil(p.text.length/4);break}else"content"in d&&typeof d.content=="string"&&(u+=Math.ceil(d.content.length/4));"cache"in d&&d.cache&&(c=!0)}return r.functions&&r.functions.length>0&&(s=!0),r.modelConfig?.stream===!0&&(a=!0),r.modelConfig?.audio?.output?.enabled===!0&&(n=!0),r.capabilities&&(r.capabilities.requiresImages&&(e=!0),r.capabilities.requiresAudio&&(t=!0),r.capabilities.requiresAudioOutput&&(n=!0),r.capabilities.requiresFiles&&(o=!0),r.capabilities.requiresWebSearch&&(i=!0)),{hasImages:e,hasAudio:t,hasAudioOutput:n,hasFiles:o,hasUrls:i,requiresFunctions:s,requiresStreaming:a,requiresCaching:c,contentTypes:l,estimatedTokens:u}}function qp(r,e){let t=r.getFeatures(),n=[],o=[],i=[];if(e.hasImages&&!t.media.images.supported&&(n.push("Image support"),i.push("Use altText for images or imageToText service")),e.hasAudio&&!t.media.audio.supported&&(n.push("Audio support"),i.push("Pre-transcribe audio or use transcription field")),e.hasAudioOutput&&!t.media.audio.output?.supported&&(n.push("Audio output support"),i.push("Use text output or a text-to-speech post-processing step")),e.hasFiles&&!t.media.files.supported&&(n.push("File support"),i.push("Pre-extract text content or use extractedText field")),e.hasUrls&&!t.media.urls.supported&&(n.push("URL/Web search support"),i.push("Pre-fetch content or use cachedContent field")),e.requiresFunctions&&!t.functions&&n.push("Function calling"),e.requiresStreaming&&!t.streaming&&(n.push("Streaming responses"),i.push("Use non-streaming mode")),e.requiresCaching&&!t.caching.supported&&(n.push("Content caching"),i.push("Repeated content will not be cached")),e.hasImages&&t.media.images.supported){let a=t.media.images.maxSize;a&&a<10*1024*1024&&o.push(`Image size limit is ${Math.round(a/(1024*1024))}MB`)}if(e.hasAudio&&t.media.audio.supported){let a=t.media.audio.maxDuration;a&&a<600&&o.push(`Audio duration limit is ${Math.round(a/60)} minutes`)}return{isSupported:n.length===0,missingCapabilities:n,warnings:o,alternatives:i}}function Jc(r,e){return r.map(t=>{let n=t.getFeatures(),o=qp(t,e),i=0,s=[];return i+=10,e.hasImages&&n.media.images.supported&&(i+=25,s.push("Images"),n.media.images.detailLevels?.includes("high")&&(i+=5),n.media.images.maxSize&&n.media.images.maxSize>10*1024*1024&&(i+=3)),e.hasAudio&&n.media.audio.supported&&(i+=25,s.push("Audio"),n.media.audio.maxDuration&&n.media.audio.maxDuration>600&&(i+=5)),e.hasFiles&&n.media.files.supported&&(i+=25,s.push("Files"),n.media.files.uploadMethod==="cloud"&&(i+=3)),e.hasUrls&&n.media.urls.supported&&(i+=25,s.push("URLs"),n.media.urls.webSearch&&(i+=5)),e.requiresFunctions&&n.functions&&(i+=15,s.push("Functions"),n.functionCot&&(i+=3)),e.requiresStreaming&&n.streaming&&(i+=10,s.push("Streaming")),e.requiresCaching&&n.caching.supported&&(i+=8,s.push("Caching"),n.caching.types.includes("persistent")&&(i+=3)),n.thinking&&(i+=2),n.multiTurn&&(i+=2),n.hasThinkingBudget&&(i+=1),n.hasShowThoughts&&(i+=1),i-=o.missingCapabilities.length*10,{provider:t,score:i,missingCapabilities:o.missingCapabilities,supportedCapabilities:s}}).sort((t,n)=>n.score-t.score)}function Yc(r,e,t={}){if(e.length===0)throw new Error("No providers available");let n=Nr(r),o=Jc(e,n);if(t.requireExactMatch){let i=o.filter(s=>s.missingCapabilities.length===0);if(i.length===0)throw new Error(`No providers fully support the request requirements: ${o[0]?.missingCapabilities.join(", ")||"unknown requirements"}`);return i[0].provider}if(!t.allowDegradation){let i=o[0];if(i.missingCapabilities.length>0)throw new Error(`Best available provider (${i.provider.getName()}) is missing: ${i.missingCapabilities.join(", ")}`)}return o[0].provider}function _C(r,e){let t=Nr(r),n=Jc(e,t),o=n[0]?.provider||null,i=[t.hasImages&&"images",t.hasAudio&&"audio",t.hasFiles&&"files",t.hasUrls&&"URLs",t.requiresFunctions&&"functions",t.requiresStreaming&&"streaming",t.requiresCaching&&"caching"].filter(Boolean).length,s=o?n[0].supportedCapabilities.length:0,a=o?`${o.getName()} supports ${s}/${i} requirements (${Math.round(s/Math.max(i,1)*100)}% compatibility)`:"No suitable providers found";return{requirements:t,providerScores:n,recommendedProvider:o,summary:a}}function NC(r,e){return r.filter(t=>t.getFeatures().media[e].supported)}function LC(r,e){let t={};for(let n of r){let i=n.getFeatures().media[e];if(i.supported)for(let s of i.formats)t[s]||(t[s]=[]),t[s].push(n)}return t}var Ko=(o=>(o.CommandRPlus="command-r-plus",o.CommandR="command-r",o.Command="command",o.CommandLight="command-light",o))(Ko||{}),Es=(o=>(o.EmbedEnglishV30="embed-english-v3.0",o.EmbedEnglishLightV30="embed-english-light-v3.0",o.EmbedMultiLingualV30="embed-multilingual-v3.0",o.EmbedMultiLingualLightV30="embed-multilingual-light-v3.0",o))(Es||{});var Wo=[{name:"command-r-plus",currency:"usd",promptTokenCostPer1M:3,completionTokenCostPer1M:15},{name:"command-r",currency:"usd",promptTokenCostPer1M:.5,completionTokenCostPer1M:1.5},{name:"command",currency:"usd",promptTokenCostPer1M:.5,completionTokenCostPer1M:1.5},{name:"command-light",currency:"usd",promptTokenCostPer1M:.3,completionTokenCostPer1M:.6},{name:"embed-english-light-v3.0",currency:"usd",promptTokenCostPer1M:.1,completionTokenCostPer1M:.1},{name:"embed-english-v3.0",currency:"usd",promptTokenCostPer1M:.1,completionTokenCostPer1M:.1},{name:"embed-multilingual-v3.0",currency:"usd",promptTokenCostPer1M:.1,completionTokenCostPer1M:.1},{name:"embed-multilingual-light-v3.0",currency:"usd",promptTokenCostPer1M:.1,completionTokenCostPer1M:.1}];var Lr=(i=>(i.DeepSeekV4Flash="deepseek-v4-flash",i.DeepSeekV4Pro="deepseek-v4-pro",i.DeepSeekChat="deepseek-chat",i.DeepSeekCoder="deepseek-coder",i.DeepSeekReasoner="deepseek-reasoner",i))(Lr||{});var jn=[{name:"deepseek-v4-flash",currency:"USD",aliases:["deepseek-chat","deepseek-reasoner"],promptTokenCostPer1M:.14,completionTokenCostPer1M:.28,cacheReadTokenCostPer1M:.0028,contextWindow:1e6,maxTokens:384e3,supported:{thinkingBudget:!0,showThoughts:!0}},{name:"deepseek-v4-pro",currency:"USD",promptTokenCostPer1M:.435,completionTokenCostPer1M:.87,cacheReadTokenCostPer1M:.003625,contextWindow:1e6,maxTokens:384e3,supported:{thinkingBudget:!0,showThoughts:!0}}];var $r=(v=>(v.Gemini37Flash="gemini-3.7-flash",v.Gemini36Flash="gemini-3.6-flash",v.Gemini35Flash="gemini-3.5-flash",v.Gemini35FlashLite="gemini-3.5-flash-lite",v.Gemini31Pro="gemini-3.1-pro-preview",v.Gemini31FlashLite="gemini-3.1-flash-lite",v.Gemini3FlashLite="gemini-3.1-flash-lite-preview",v.Gemini3Flash="gemini-3-flash-preview",v.Gemini3Pro="gemini-3.1-pro-preview",v.Gemini3ProImage="gemini-3-pro-image-preview",v.Gemini31FlashImage="gemini-3.1-flash-image-preview",v.Gemini31FlashLive="gemini-3.1-flash-live-preview",v.Gemini31FlashTTS="gemini-3.1-flash-tts-preview",v.NanoBanana2="nano-banana-2",v.GeminiRoboticsER16="gemini-robotics-er-1.6-preview",v.Gemini25Pro="gemini-2.5-pro",v.Gemini25Flash="gemini-2.5-flash",v.Gemini25FlashNativeAudio="gemini-2.5-flash-native-audio-preview-12-2025",v.Gemini25FlashLite="gemini-2.5-flash-lite",v.Gemini20Flash="gemini-2.0-flash",v.Gemini20FlashLite="gemini-2.0-flash-lite",v.Gemini20ProExp="gemini-2.0-pro-exp-02-05",v.Gemini20FlashThinkingExp="gemini-2.0-flash-thinking-exp-01-21",v.Gemini1Pro="gemini-1.0-pro",v.Gemini15Flash="gemini-1.5-flash",v.Gemini15Flash002="gemini-1.5-flash-002",v.Gemini15Flash8B="gemini-1.5-flash-8b",v.Gemini15Pro="gemini-1.5-pro",v.GeminiFlashLatest="gemini-flash-latest",v.GeminiFlashLiteLatest="gemini-flash-lite-latest",v.GeminiProLatest="gemini-pro-latest",v))($r||{}),Ur=(i=>(i.GeminiEmbedding2="gemini-embedding-2",i.GeminiEmbedding001="gemini-embedding-001",i.GeminiEmbedding="gemini-embedding-exp",i.TextEmbeddingLarge="text-embedding-large-exp-03-07",i.TextEmbedding005="text-embedding-005",i))(Ur||{}),Qc=(o=>(o.HarmCategoryHarassment="HARM_CATEGORY_HARASSMENT",o.HarmCategoryHateSpeech="HARM_CATEGORY_HATE_SPEECH",o.HarmCategorySexuallyExplicit="HARM_CATEGORY_SEXUALLY_EXPLICIT",o.HarmCategoryDangerousContent="HARM_CATEGORY_DANGEROUS_CONTENT",o))(Qc||{}),Xc=(i=>(i.BlockNone="BLOCK_NONE",i.BlockOnlyHigh="BLOCK_ONLY_HIGH",i.BlockMediumAndAbove="BLOCK_MEDIUM_AND_ABOVE",i.BlockLowAndAbove="BLOCK_LOW_AND_ABOVE",i.BlockDefault="HARM_BLOCK_THRESHOLD_UNSPECIFIED",i))(Xc||{}),Vp=(c=>(c.SemanticSimilarity="SEMANTIC_SIMILARITY",c.Classification="CLASSIFICATION",c.Clustering="CLUSTERING",c.RetrievalDocument="RETRIEVAL_DOCUMENT",c.RetrievalQuery="RETRIEVAL_QUERY",c.QuestionAnswering="QUESTION_ANSWERING",c.FactVerification="FACT_VERIFICATION",c.CodeRetrievalQuery="CODE_RETRIEVAL_QUERY",c))(Vp||{}),$C=["gemini-3.7-flash","gemini-3.6-flash","gemini-3.5-flash","gemini-3.5-flash-lite","gemini-3.1-pro-preview","gemini-3.1-pro-preview-customtools","gemini-3.1-flash-lite","gemini-3.1-flash-lite-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.0-flash","gemini-2.0-flash-lite","gemini-flash-latest","gemini-flash-lite-latest"];var Jo=[{name:"gemini-embedding-2",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.2,contextWindow:8192},{name:"gemini-embedding-001",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.15},{name:"gemini-3.7-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.5,completionTokenCostPer1M:7.5,cacheReadTokenCostPer1M:.15,cacheWriteTokenCostPer1M:1.5,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0},notSupported:{temperature:!0,topP:!0}},{name:"gemini-3.6-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.5,completionTokenCostPer1M:7.5,cacheReadTokenCostPer1M:.15,cacheWriteTokenCostPer1M:1.5,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0},notSupported:{temperature:!0,topP:!0}},{name:"gemini-3.5-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.5,completionTokenCostPer1M:9,cacheReadTokenCostPer1M:.15,cacheWriteTokenCostPer1M:1.5,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3.5-flash-lite",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.3,completionTokenCostPer1M:2.5,cacheReadTokenCostPer1M:.03,cacheWriteTokenCostPer1M:.3,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0},notSupported:{temperature:!0,topP:!0}},{name:"gemini-3.1-pro-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:2,completionTokenCostPer1M:12,cacheReadTokenCostPer1M:.2,cacheWriteTokenCostPer1M:2,longContextThreshold:2e5,longContextPromptTokenCostPer1M:4,longContextCompletionTokenCostPer1M:18,longContextCacheReadTokenCostPer1M:.4,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3-flash-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:3,cacheReadTokenCostPer1M:.05,cacheWriteTokenCostPer1M:.5,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3.1-flash-lite",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.25,completionTokenCostPer1M:1.5,cacheReadTokenCostPer1M:.025,cacheWriteTokenCostPer1M:.25,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3.1-flash-lite-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.25,completionTokenCostPer1M:1.5,cacheReadTokenCostPer1M:.025,cacheWriteTokenCostPer1M:.25,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3-pro-image-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:2,completionTokenCostPer1M:.134,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3.1-flash-image-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:3,supported:{structuredOutputs:!0}},{name:"gemini-3.1-flash-live-preview",characterIsToken:!1,supported:{thinkingBudget:!0,showThoughts:!0},audio:{input:!0,output:!0},contextWindow:131072,maxTokens:65536},{name:"gemini-3.1-flash-tts-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:3,audio:{input:!1,output:!0}},{name:"nano-banana-2",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:3},{name:"gemini-robotics-er-1.6-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:0,completionTokenCostPer1M:0},{name:"gemini-2.5-pro",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.25,completionTokenCostPer1M:10,cacheReadTokenCostPer1M:.125,cacheWriteTokenCostPer1M:1.25,longContextThreshold:2e5,longContextPromptTokenCostPer1M:2.5,longContextCompletionTokenCostPer1M:15,longContextCacheReadTokenCostPer1M:.25,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.0-pro-exp-02-05",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:0,completionTokenCostPer1M:0,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.0-flash-thinking-exp-01-21",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:0,completionTokenCostPer1M:0,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.5-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.3,completionTokenCostPer1M:2.5,cacheReadTokenCostPer1M:.03,cacheWriteTokenCostPer1M:.3,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.5-flash-native-audio-preview-12-2025",characterIsToken:!1,supported:{thinkingBudget:!0,showThoughts:!0},audio:{input:!0,output:!0},contextWindow:131072,maxTokens:8192},{name:"gemini-2.5-flash-lite",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.1,completionTokenCostPer1M:.4,cacheReadTokenCostPer1M:.01,cacheWriteTokenCostPer1M:.1,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.0-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.1,completionTokenCostPer1M:.4,cacheReadTokenCostPer1M:.025,cacheWriteTokenCostPer1M:.1,supported:{structuredOutputs:!0},isDeprecated:!0,deprecatedOn:"2026-06-01"},{name:"gemini-2.0-flash-lite",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.075,completionTokenCostPer1M:.3,supported:{structuredOutputs:!0},isDeprecated:!0,deprecatedOn:"2026-06-01"},{name:"gemini-1.5-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.075,completionTokenCostPer1M:.3,supported:{structuredOutputs:!0}},{name:"gemini-1.5-flash-8b",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.0375,completionTokenCostPer1M:.15,supported:{structuredOutputs:!0}},{name:"gemini-1.5-pro",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.25,completionTokenCostPer1M:5,supported:{structuredOutputs:!0}},{name:"gemini-1.0-pro",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:1.5,supported:{structuredOutputs:!0}},{name:"gemini-flash-latest",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.3,completionTokenCostPer1M:2.5,cacheReadTokenCostPer1M:.03,cacheWriteTokenCostPer1M:.3,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-flash-lite-latest",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.1,completionTokenCostPer1M:.4,cacheReadTokenCostPer1M:.01,cacheWriteTokenCostPer1M:.1,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-pro-latest",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.25,completionTokenCostPer1M:10,cacheReadTokenCostPer1M:.125,cacheWriteTokenCostPer1M:1.25,longContextThreshold:2e5,longContextPromptTokenCostPer1M:2.5,longContextCompletionTokenCostPer1M:15,longContextCacheReadTokenCostPer1M:.25,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}}];var Yo=(c=>(c.Mistral7B="open-mistral-7b",c.Mistral8x7B="open-mixtral-8x7b",c.MistralSmall="mistral-small-latest",c.MistralNemo="mistral-nemo-latest",c.MistralLarge="mistral-large-latest",c.Codestral="codestral-latest",c.OpenCodestralMamba="open-codestral-mamba",c.OpenMistralNemo="open-mistral-nemo-latest",c))(Yo||{}),Hp=(e=>(e.MistralEmbed="mistral-embed",e))(Hp||{});var Qo=[{name:"open-mistral-7b",currency:"USD",promptTokenCostPer1M:.25,completionTokenCostPer1M:.25},{name:"open-mixtral-8x7b",currency:"USD",promptTokenCostPer1M:.7,completionTokenCostPer1M:.7},{name:"mistral-nemo-latest",currency:"USD",promptTokenCostPer1M:.15,completionTokenCostPer1M:.15},{name:"mistral-small-latest",currency:"USD",promptTokenCostPer1M:.2,completionTokenCostPer1M:.6},{name:"mistral-large-latest",currency:"USD",promptTokenCostPer1M:2,completionTokenCostPer1M:6},{name:"codestral-latest",currency:"USD",promptTokenCostPer1M:.2,completionTokenCostPer1M:.6},{name:"open-codestral-mamba",currency:"USD",promptTokenCostPer1M:.25,completionTokenCostPer1M:.25},{name:"open-mistral-nemo-latest",currency:"USD",promptTokenCostPer1M:.3,completionTokenCostPer1M:.3}];var Xo=(n=>(n.RekaCore="reka-core",n.RekaFlash="reka-flash",n.RekaEdge="reka-edge",n))(Xo||{});var Zo=[{name:"reka-core",currency:"usd",promptTokenCostPer1M:3,completionTokenCostPer1M:15},{name:"reka-flash",currency:"usd",promptTokenCostPer1M:.8,completionTokenCostPer1M:2},{name:"reka-edge",currency:"usd",promptTokenCostPer1M:.4,completionTokenCostPer1M:1}];var ei=(p=>(p.Llama31_8B_Instruct="Llama-3.1-8B-Instruct-q4f32_1-MLC",p.Llama31_70B_Instruct="Llama-3.1-70B-Instruct-q4f16_1-MLC",p.Llama32_1B_Instruct="Llama-3.2-1B-Instruct-q4f32_1-MLC",p.Llama32_3B_Instruct="Llama-3.2-3B-Instruct-q4f32_1-MLC",p.Mistral7B_Instruct="Mistral-7B-Instruct-v0.3-q4f32_1-MLC",p.Phi35_Mini_Instruct="Phi-3.5-mini-instruct-q4f32_1-MLC",p.Gemma2_2B_Instruct="gemma-2-2b-it-q4f32_1-MLC",p.Gemma2_9B_Instruct="gemma-2-9b-it-q4f32_1-MLC",p.Qwen2_5_0_5B_Instruct="Qwen2.5-0.5B-Instruct-q4f32_1-MLC",p.Qwen2_5_1_5B_Instruct="Qwen2.5-1.5B-Instruct-q4f32_1-MLC",p.Qwen2_5_3B_Instruct="Qwen2.5-3B-Instruct-q4f32_1-MLC",p.Qwen2_5_7B_Instruct="Qwen2.5-7B-Instruct-q4f32_1-MLC",p))(ei||{});var ti=[{name:"Llama-3.1-8B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:4096},{name:"Llama-3.1-70B-Instruct-q4f16_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:4096,isExpensive:!0},{name:"Llama-3.2-1B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:2048},{name:"Llama-3.2-3B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:2048},{name:"Mistral-7B-Instruct-v0.3-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:4096},{name:"Phi-3.5-mini-instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:4096},{name:"gemma-2-2b-it-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:8192,maxTokens:2048},{name:"gemma-2-9b-it-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:8192,maxTokens:2048},{name:"Qwen2.5-0.5B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:2048},{name:"Qwen2.5-1.5B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:2048},{name:"Qwen2.5-3B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:2048},{name:"Qwen2.5-7B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:4096}];var ni=(f=>(f.Grok43="grok-4.3",f.Grok43Latest="grok-4.3-latest",f.GrokLatest="grok-latest",f.Grok420Reasoning="grok-4.20-reasoning",f.Grok420Reasoning0309="grok-4.20-0309-reasoning",f.Grok420NonReasoning="grok-4.20-non-reasoning",f.Grok420NonReasoning0309="grok-4.20-0309-non-reasoning",f.Grok420MultiAgent="grok-4.20-multi-agent",f.Grok420MultiAgent0309="grok-4.20-multi-agent-0309",f.Grok41FastReasoning="grok-4-1-fast-reasoning",f.Grok41FastNonReasoning="grok-4-1-fast-non-reasoning",f.GrokVoiceThinkFast="grok-voice-think-fast-1.0",f.GrokVoiceFast="grok-voice-fast-1.0",f.Grok3="grok-3",f.Grok3Mini="grok-3-mini",f.Grok3Fast="grok-3-fast",f.Grok3MiniFast="grok-3-mini-fast",f))(ni||{}),Kp=(e=>(e.GrokEmbedSmall="grok-embed-small",e))(Kp||{});var ri=[{name:"grok-4.3",currency:"USD",promptTokenCostPer1M:1.25,cacheReadTokenCostPer1M:.2,completionTokenCostPer1M:2.5,contextWindow:1e6,aliases:["grok-4.3-latest","grok-latest"],supported:{thinkingBudget:!0,structuredOutputs:!0}},{name:"grok-4.20-reasoning",currency:"USD",promptTokenCostPer1M:1.25,cacheReadTokenCostPer1M:.2,completionTokenCostPer1M:2.5,contextWindow:2e6,aliases:["grok-4.20-0309-reasoning","grok-4.20-reasoning-latest","grok-4.20","grok-4.20-0309"],supported:{structuredOutputs:!0}},{name:"grok-4.20-non-reasoning",currency:"USD",promptTokenCostPer1M:1.25,cacheReadTokenCostPer1M:.2,completionTokenCostPer1M:2.5,contextWindow:2e6,aliases:["grok-4.20-0309-non-reasoning","grok-4.20-non-reasoning-latest"],supported:{structuredOutputs:!0}},{name:"grok-4.20-multi-agent",currency:"USD",promptTokenCostPer1M:1.25,cacheReadTokenCostPer1M:.2,completionTokenCostPer1M:2.5,contextWindow:2e6,aliases:["grok-4.20-multi-agent-0309","grok-4.20-multi-agent-latest"],supported:{structuredOutputs:!0}},{name:"grok-4-1-fast-reasoning",currency:"USD",promptTokenCostPer1M:.2,cacheReadTokenCostPer1M:.05,completionTokenCostPer1M:.5,contextWindow:2e6,aliases:["grok-4-1-fast-reasoning-latest"],supported:{structuredOutputs:!0}},{name:"grok-4-1-fast-non-reasoning",currency:"USD",promptTokenCostPer1M:.2,cacheReadTokenCostPer1M:.05,completionTokenCostPer1M:.5,contextWindow:2e6,aliases:["grok-4-1-fast-non-reasoning-latest"],supported:{structuredOutputs:!0}},{name:"grok-voice-think-fast-1.0",currency:"USD"},{name:"grok-voice-fast-1.0",currency:"USD"},{name:"grok-3",currency:"USD",promptTokenCostPer1M:3,completionTokenCostPer1M:15},{name:"grok-3-mini",currency:"USD",promptTokenCostPer1M:.3,completionTokenCostPer1M:.5,supported:{thinkingBudget:!0}},{name:"grok-3-fast",currency:"USD",promptTokenCostPer1M:5,completionTokenCostPer1M:25},{name:"grok-3-mini-fast",currency:"USD",promptTokenCostPer1M:.6,completionTokenCostPer1M:4,supported:{thinkingBudget:!0}}];var CT={openai:{displayName:"OpenAI",defaultModel:"gpt-5-mini",defaultEmbedModel:"text-embedding-3-small",isDynamic:!1,modelInfo:or},"openai-responses":{displayName:"OpenAI Responses",defaultModel:"gpt-4o",defaultEmbedModel:"text-embedding-ada-002",isDynamic:!1,modelInfo:Bo},"azure-openai":{displayName:"Azure OpenAI",isDynamic:!0,modelInfo:[]},anthropic:{displayName:"Anthropic",defaultModel:"claude-3-7-sonnet-latest",isDynamic:!1,modelInfo:Mr},"google-gemini":{displayName:"Google Gemini",defaultModel:"gemini-2.5-flash",defaultEmbedModel:"gemini-embedding-2",isDynamic:!1,modelInfo:Jo},cohere:{displayName:"Cohere",defaultModel:"command-r-plus",isDynamic:!1,modelInfo:Wo},deepseek:{displayName:"DeepSeek",defaultModel:"deepseek-v4-flash",isDynamic:!1,modelInfo:jn},"deepseek-responses":{displayName:"DeepSeek Responses",defaultModel:"deepseek-v4-flash",isDynamic:!1,modelInfo:jn},mistral:{displayName:"Mistral AI",defaultModel:"mistral-small-latest",isDynamic:!1,modelInfo:Qo},reka:{displayName:"Reka",defaultModel:"reka-core",isDynamic:!1,modelInfo:Zo},grok:{displayName:"xAI Grok",defaultModel:"grok-3",isDynamic:!1,modelInfo:ri},webllm:{displayName:"WebLLM",defaultModel:"Llama-3.2-3B-Instruct-q4f32_1-MLC",isDynamic:!1,modelInfo:ti}},bT=r=>{let e={...r};return r.aliases&&(e.aliases=[...r.aliases]),r.supported&&(e.supported={...r.supported}),r.notSupported&&(e.notSupported={...r.notSupported}),r.audio&&(e.audio={...r.audio}),e},RT=r=>{let e=UC(r),t=r.name.toLowerCase();return{thinkingBudget:r.supported?.thinkingBudget??!1,showThoughts:r.supported?.showThoughts??!1,structuredOutputs:r.supported?.structuredOutputs??!1,temperature:!(r.notSupported?.temperature??!1),topP:!(r.notSupported?.topP??!1),audioInput:r.audio?.input??e==="audio",audioOutput:r.audio?.output??(e==="audio"&&!t.includes("whisper")&&!t.includes("transcription"))}},UC=r=>{let e=r.name.toLowerCase();return r.audio?.input||r.audio?.output||e.includes("audio")||e.includes("realtime")||e.includes("voice")||e.includes("whisper")||e.includes("native-audio")?"audio":e.includes("embedding")||e.includes("embed")?"embeddings":e.includes("code")||e.includes("codex")||e.includes("coder")||e.includes("codestral")?"code":"text"},wT=r=>{if(r===void 0)return;let e=Array.isArray(r)?r:[r];if(!e.includes("all"))return new Set(e)},vT=(r,e)=>!e||e.has(r.type)?!0:e.has("text")&&r.type==="code",Zc=r=>{let e=typeof r?.promptTokenCostPer1M=="number",t=typeof r?.completionTokenCostPer1M=="number";return!e&&!t?Number.POSITIVE_INFINITY:(r?.promptTokenCostPer1M??0)+(r?.completionTokenCostPer1M??0)},ST=(r,e)=>{let t=Zc(r)-Zc(e);return t!==0?t:r.name.localeCompare(e.name)},kT=(r,e,t,n)=>{let o=bT(n),i=[e,t].filter(s=>s!==void 0);return{...o,provider:r,type:UC(n),isDefault:i.some(s=>n.name===s||(n.aliases?.includes(s)??!1)),capabilities:RT(n)}},DC=r=>{let e=wT(r?.type);return Object.entries(CT).map(([t,{displayName:n,defaultModel:o,defaultEmbedModel:i,isDynamic:s,modelInfo:a}])=>{let c=a.map(l=>kT(t,o,i,l)).filter(l=>vT(l,e)).sort(ST);return{name:t,displayName:n,...o!==void 0?{defaultModel:o}:void 0,...i!==void 0?{defaultEmbedModel:i}:void 0,isDynamic:s,models:c}}).sort((t,n)=>{let o=Zc(t.models[0])-Zc(n.models[0]);return o!==0?o:t.displayName.localeCompare(n.displayName)})};var Wp=()=>structuredClone({model:"command-r-plus",embedModel:"embed-english-v3.0",...Ue()}),jC=()=>structuredClone({model:"command-r",embedModel:"embed-english-v3.0",...kt()}),IT={functions:!0,streaming:!0,hasThinkingBudget:!1,hasShowThoughts:!1,media:{images:{supported:!1,formats:[],maxSize:0,detailLevels:[]},audio:{supported:!1,formats:[],maxDuration:0},files:{supported:!1,formats:[],maxSize:0,uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0},TT=r=>r?.map(e=>{let t=e,n=t?.config;if(!n)return e;let o={};n.maxTokens!==void 0&&(o.maxTokens=n.maxTokens),n.temperature!==void 0&&(o.temperature=n.temperature),n.topP!==void 0&&(o.topP=n.topP),n.presencePenalty!==void 0&&(o.presencePenalty=n.presencePenalty),n.frequencyPenalty!==void 0&&(o.frequencyPenalty=n.frequencyPenalty);let i=n.stopSequences??n.stop;return i!==void 0&&(o.stopSequences=i),n.n!==void 0&&(o.n=n.n),n.stream!==void 0&&(o.stream=n.stream),Object.keys(o).length>0?{...t,modelConfig:{...t.modelConfig??{},...o}}:e}),oi=class extends dt{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("Cohere API key not set");let s={...Wp(),...t};i=[...Wo,...i??[]],super({apiKey:e,config:s,options:n,apiURL:"https://api.cohere.ai/compatibility/v1",modelInfo:i,models:TT(o),supportFor:IT}),super.setName("Cohere")}};var PT=r=>{switch(String(r)){case"deepseek-v4-flash":case"deepseek-v4-pro":case"deepseek-reasoner":return!1;default:return!0}},el=r=>{switch(String(r)){case"deepseek-v4-flash":case"deepseek-v4-pro":return!0;default:return!1}},MT=(r,e)=>{let t={...r};if(el(r.model)){let n=e.thinkingTokenBudget!=="none"&&t.reasoning_effort!=="none"&&(e.thinkingTokenBudget!==void 0||t.reasoning_effort!==void 0);if(t.thinking={type:n?"enabled":"disabled"},!n)delete t.reasoning_effort;else{switch(t.reasoning_effort){case"xhigh":t.reasoning_effort="max";break;case"minimal":case"low":case"medium":case void 0:t.reasoning_effort="high";break}delete t.temperature,delete t.top_p,delete t.presence_penalty,delete t.frequency_penalty}}return PT(r.model)||(t.tool_choice==="none"&&delete t.tools,delete t.tool_choice),t},Jp=()=>structuredClone({model:"deepseek-v4-flash",...Ue()}),GC=()=>structuredClone({model:"deepseek-v4-pro",...kt()}),ET=r=>({functions:!0,streaming:!0,hasThinkingBudget:el(r),hasShowThoughts:el(r),media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:el(r),multiTurn:!0}),ii=class extends dt{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("DeepSeek API key not set");let s={...Jp(),...t};i=[...jn,...i??[]],super({apiKey:e,config:s,options:n,apiURL:"https://api.deepseek.com",modelInfo:i,chatReqUpdater:MT,supportFor:ET,models:o}),super.setName("DeepSeek")}};var OT=r=>["o1","o1-mini","o1-pro","o3","o3-mini","o3-pro","o4-mini"].includes(r),nl=class{constructor(e,t,n){this.config=e;this.streamingUsage=t;this.responsesReqUpdater=n}tokensUsed;getTokenUsage(){return this.tokensUsed}getModelConfig(){let{config:e}=this;return{maxTokens:e.maxTokens,temperature:e.temperature,stopSequences:e.stopSequences,topP:e.topP,stream:e.stream}}mapInternalContentToResponsesInput(e,t){let n=[];for(let o of e){if(o.type==="text"){t==="assistant"?n.push({type:"output_text",text:o.text}):n.push({type:"input_text",text:o.text});continue}if(t==="assistant")continue;if(o.type==="image"){let s=`data:${o.mimeType};base64,${o.image}`;n.push({type:"input_image",image_url:{url:s,details:o.details??"auto"}});continue}if(o.type==="audio"){n.push({type:"input_audio",input_audio:{data:o.data,format:o.format==="wav"?"wav":void 0}});continue}let i=o;throw new Error(`Unsupported content part: ${JSON.stringify(i)}`)}return n}mapFunctionResultContent(e,t){return e?.length?e.map(n=>n.type==="text"?{type:"input_text",text:n.text}:n.type==="image"?{type:"input_image",image_url:{url:`data:${n.mimeType};base64,${n.image}`,details:"auto"}}:n.type==="audio"?{type:"input_audio",input_audio:{data:n.data}}:n.type==="file"?{type:"input_file",file_data:`data:${n.mimeType};base64,${n.data}`,filename:n.filename}:{type:"input_text",text:n.cachedContent??[n.title,n.description,n.url].filter(Boolean).join(`
|
|
1259
|
-
`)}):t}createResponsesReqInternalInput(e,t=!1){let n=[];for(let o of e){if(t&&o.role==="system")continue;let i;if(o.role==="system"||o.role==="user"||o.role==="assistant"&&o.content)if(typeof o.content=="string")o.role==="system"?i=o.content:o.role==="assistant"?i=[{type:"output_text",text:o.content}]:i=[{type:"input_text",text:o.content}];else if(Array.isArray(o.content))i=this.mapInternalContentToResponsesInput(o.content,o.role==="assistant"?"assistant":"user");else{if(!(o.role==="assistant"&&!o.content&&o.functionCalls))throw new Error(`Invalid content type for role ${o.role}`);i=""}else o.role,i="";switch(o.role){case"system":n.push({type:"message",role:"system",content:i});break;case"user":n.push({type:"message",role:"user",content:i,name:o.name});break;case"assistant":if(o.thought||o.thoughtBlocks?.length){let s=o.thought??o.thoughtBlocks?.map(a=>a.data).join("");s&&n.push({type:"reasoning",content:s})}if(o.content||o.functionCalls){let s={type:"message",role:"assistant",content:""};if(o.content&&(s.content=i),o.name&&(s.name=o.name),o.content&&n.push(s),o.functionCalls)for(let a of o.functionCalls)n.push({type:"function_call",call_id:a.id,name:a.function.name,arguments:typeof a.function.params=="object"?JSON.stringify(a.function.params):a.function.params||""})}break;case"function":n.push({type:"function_call_output",call_id:o.functionId,output:this.mapFunctionResultContent(o.content,o.result)});break;default:{let s=o.role;throw new Error(`Invalid role in chat prompt: ${s}`)}}}return n}createChatReq(e,t){let n=e.model,o={name:"/responses"},i=null,s=!1;if(e.chatPrompt){for(let x of e.chatPrompt)if(x.role==="system"&&typeof x.content=="string"){i=x.content,s=!0;break}}let a=i??this.config.systemPrompt??null,c=e.functions?.map(x=>({type:"function",name:x.name,description:x.description,parameters:x.parameters??{}})),l=[],u=OT(n),d=this.config.reasoningSummary;t?.showThoughts?d||(d="auto"):d=void 0;let p=this.config.reasoningEffort;t?.thinkingTokenBudget&&(p=CC(n,t.thinkingTokenBudget));let m={model:n,input:"",instructions:a,tools:c?.length?c:void 0,tool_choice:e.functionCall==="none"||e.functionCall==="auto"||e.functionCall==="required"?e.functionCall:typeof e.functionCall=="object"&&e.functionCall.function?{type:"function",name:e.functionCall.function.name}:void 0,...u?{max_output_tokens:e.modelConfig?.maxTokens??this.config.maxTokens??void 0}:{...e.modelConfig?.temperature!==void 0?{temperature:e.modelConfig.temperature}:{},...e.modelConfig?.topP!==void 0?{top_p:e.modelConfig.topP}:{},presence_penalty:e.modelConfig?.presencePenalty??this.config.presencePenalty??void 0,frequency_penalty:e.modelConfig?.frequencyPenalty??this.config.frequencyPenalty??void 0,max_output_tokens:e.modelConfig?.maxTokens??this.config.maxTokens??void 0},stream:e.modelConfig?.stream??this.config.stream??!1,background:void 0,include:l.length>0?l:void 0,metadata:void 0,parallel_tool_calls:this.config.parallelToolCalls,previous_response_id:void 0,...p?{reasoning:{effort:p,...p==="none"?{}:{summary:d}}}:{},service_tier:this.config.serviceTier,store:this.config.store,text:void 0,truncation:void 0,user:this.config.user,seed:this.config.seed};this.config.user&&(m.user=this.config.user),this.config.parallelToolCalls!==void 0&&(m.parallel_tool_calls=this.config.parallelToolCalls),e.responseFormat?m.text={format:e.responseFormat.type==="json_schema"?{type:"json_schema",json_schema:e.responseFormat.schema}:{type:e.responseFormat.type}}:this.config.responseFormat&&(m.text={format:{type:this.config.responseFormat}}),this.config.seed&&(m.seed=this.config.seed);let g=e.chatPrompt?this.createResponsesReqInternalInput(e.chatPrompt,s):[];if(g.length>0)m.input=g;else if(e.chatPrompt&&e.chatPrompt.length===1&&e.chatPrompt[0]?.role==="user"&&e.chatPrompt[0]?.content&&typeof e.chatPrompt[0].content=="string"&&!a)m.input=e.chatPrompt[0].content;else if(g.length===0&&!a)throw new Error("Responses API request must have input or instructions.");m.reasoning?.effort||(m.reasoning=void 0);let h=m;return this.responsesReqUpdater&&(h=this.responsesReqUpdater(h)),[o,h]}createChatResp(e){let{id:t,output:n,usage:o}=e;this.tokensUsed=Dn(o);let i={};for(let s of n??[])switch(s.type){case"message":i.id=s.id,i.content=Qp(s.content,t),i.finishReason=s.status==="completed"?"stop":"content_filter",i.citations=tl(s.content);break;case"reasoning":i.id=s.id;{let a=Yp(s);a&&(i.thought=i.thought?`${i.thought}${a}`:a,i.thoughtBlocks=[...i.thoughtBlocks??[],{data:a,encrypted:!!s.encrypted_content}])}break;case"file_search_call":i.id=s.id,i.functionCalls=[{id:s.id,type:"function",function:{name:"file_search",params:{queries:s.queries,results:s.results}}}],i.finishReason="function_call";break;case"web_search_call":i.id=s.id,i.functionCalls=[{id:s.id,type:"function",function:{name:"web_search",params:{queries:s.queries}}}],i.finishReason="function_call";break;case"computer_call":i.id=s.id,i.functionCalls=[{id:s.id,type:"function",function:{name:"computer_use",params:{action:s.action}}}],i.finishReason="function_call";break;case"code_interpreter_call":i.id=s.id,i.functionCalls=[{id:s.id,type:"function",function:{name:"code_interpreter",params:{code:s.code,results:s.results}}}],i.finishReason="function_call";break;case"image_generation_call":i.id=s.id,i.functionCalls=[{id:s.id,type:"function",function:{name:"image_generation",params:{result:s.result}}}],i.finishReason="function_call";break;case"local_shell_call":i.id=s.id,i.functionCalls=[{id:s.id,type:"function",function:{name:"local_shell",params:{action:s.action}}}],i.finishReason="function_call";break;case"mcp_call":i.id=s.id,i.functionCalls=[{id:s.id,type:"function",function:{name:"mcp",params:{name:s.name,args:s.args,serverLabel:s.server_label,output:s.output,error:s.error}}}],i.finishReason="function_call";break;case"function_call":i.id=s.id,i.functionCalls=[{id:s.id,type:"function",function:{name:s.name,params:s.arguments}}],i.finishReason="function_call";break}return{results:[{...i,index:0}],remoteId:t}}createChatStreamResp=(e,t)=>{let n=e,o=t,i={index:0,id:"",content:"",finishReason:"stop"},s=typeof n.response?.id=="string"?n.response.id:void 0;switch(n.type){case"response.created":case"response.in_progress":case"response.queued":s=n.response.id,i.id=`${n.response.id}_res_0`;break;case"response.output_item.added":switch(n.item.type){case"message":i.id=n.item.id,i.content=Qp(n.item.content,n.item.id),i.citations=tl(n.item.content);break;case"function_call":i.id=n.item.id,i.functionCalls=[{id:n.item.id,type:"function",function:{name:n.item.name,params:n.item.arguments}}];break;case"file_search_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"file_search",params:{queries:a.queries||[],results:a.results?.map(c=>({fileId:c.file_id,filename:c.filename,score:c.score,text:c.text,attributes:c.attributes}))}}}]}break;case"web_search_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"web_search",params:{queries:a.queries||[]}}}]}break;case"computer_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"computer_use",params:{action:a.action||{}}}}]}break;case"code_interpreter_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"code_interpreter",params:{code:a.code||"",results:a.results}}}]}break;case"image_generation_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"image_generation",params:{result:a.result}}}]}break;case"local_shell_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"local_shell",params:{action:a.action||{}}}}]}break;case"mcp_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"mcp",params:{name:a.name||"",args:a.args||"",serverLabel:a.server_label||"",output:a.output,error:a.error}}}]}break;case"reasoning":{i.id=n.item.id;let a=Yp(n.item);a&&(i.thought=a,i.thoughtBlocks=[{data:a,encrypted:!!n.item.encrypted_content}]);break}}break;case"response.content_part.added":i.id=n.item_id,i.content=Qp([n.part],n.item_id),i.citations=tl([n.part]);break;case"response.output_text.delta":i.id=n.item_id,i.content=n.delta;break;case"response.output_text.done":break;case"response.function_call_arguments.delta":i.id=n.item_id,i.functionCalls=[{id:n.item_id,type:"function",function:{name:"",params:n.delta}}];break;case"response.reasoning_summary_text.delta":i.id=n.item_id,i.thought=n.delta,i.thoughtBlocks=[{data:n.delta,encrypted:!1}];break;case"response.reasoning_text.delta":i.id=n.item_id,i.thought=n.delta,i.thoughtBlocks=[{data:n.delta,encrypted:!1}];break;case"response.reasoning_text.done":i.id=n.item_id,i.thought=n.text,i.thoughtBlocks=[{data:n.text,encrypted:!1}];break;case"response.file_search_call.in_progress":case"response.file_search_call.searching":i.id=n.item_id,i.finishReason="function_call";break;case"response.file_search_call.completed":i.id=n.item_id,i.finishReason="function_call";break;case"response.web_search_call.in_progress":case"response.web_search_call.searching":i.id=n.item_id,i.finishReason="function_call";break;case"response.web_search_call.completed":i.id=n.item_id,i.finishReason="function_call";break;case"response.image_generation_call.in_progress":case"response.image_generation_call.generating":i.id=n.item_id,i.finishReason="function_call";break;case"response.image_generation_call.completed":i.id=n.item_id,i.finishReason="function_call";break;case"response.image_generation_call.partial_image":i.id=n.item_id,i.finishReason="function_call";break;case"response.mcp_call.in_progress":i.id=n.item_id,i.finishReason="function_call";break;case"response.mcp_call.arguments.delta":i.id=n.item_id,i.functionCalls=[{id:n.item_id,type:"function",function:{name:"",params:n.delta}}];break;case"response.mcp_call.arguments.done":i.id=n.item_id,i.functionCalls=[{id:n.item_id,type:"function",function:{name:"",params:n.arguments}}];break;case"response.mcp_call.completed":case"response.mcp_call.failed":i.id="mcp_call_event",i.finishReason="function_call";break;case"response.mcp_list_tools.in_progress":case"response.mcp_list_tools.completed":case"response.mcp_list_tools.failed":i.id="mcp_list_tools_event",i.finishReason="function_call";break;case"response.output_item.done":switch(n.item.type){case"message":if(i.id=n.item.id,i.finishReason=n.item.status==="completed"?"stop":"error",!i.citations||i.citations.length===0){let a=tl(n.item.content||[]);a&&(i.citations=a)}break;case"function_call":case"file_search_call":case"web_search_call":case"computer_call":case"code_interpreter_call":case"image_generation_call":case"local_shell_call":case"mcp_call":i.id=n.item.id,i.finishReason="function_call";break;case"reasoning":{i.id=n.item.id;let a=Yp(n.item);a&&(i.thought=a,i.thoughtBlocks=[{data:a,encrypted:!!n.item.encrypted_content}]);break}}break;case"response.completed":this.tokensUsed=Dn(n.response.usage),s=n.response.id,i.id=`${n.response.id}_completed`,i.finishReason="stop";break;case"response.failed":s=n.response.id,i.id=`${n.response.id}_failed`,i.finishReason="error";break;case"response.incomplete":s=n.response.id,i.id=`${n.response.id}_incomplete`,i.finishReason="length";break;case"error":i.id="error",i.content=`Error: ${n.message}`,i.finishReason="error";break;default:i.id="unknown";break}return s?o.remoteId=s:s=o.remoteId,{results:[i],remoteId:s}};createEmbedReq(e){let t=e.embedModel;if(!t)throw new Error("Embed model not set");if(!e.texts||e.texts.length===0)throw new Error("Embed texts is empty");let n={name:"/embeddings"},o={model:t,input:e.texts,dimensions:this.config.dimensions};return[n,o]}},Yp=r=>{if(typeof r.content=="string")return r.content;if(Array.isArray(r.content)){let e=r.content.map(t=>t.text).join("");if(e)return e}return r.encrypted_content?r.encrypted_content:r.summary?.map(e=>e.text).join(`
|
|
1258
|
+
`)??n.result,tool_call_id:n.functionId};default:throw new Error("Invalid role")}})}var dt=class extends St{batchAudioConfig={transcriptionModel:"gpt-4o-mini-transcribe",speechModel:"gpt-4o-mini-tts",speechVoice:"alloy",speechFormat:"mp3"};openAICompatibleApiKey;openAICompatibleApiURL;constructor({apiKey:e,config:t,options:n,apiURL:o,modelInfo:i,models:s,chatReqUpdater:a,chatRespProcessor:c,chatStreamRespProcessor:l,realtime:u,promptCaching:d,supportFor:p}){if(!e||e==="")throw new Error("OpenAI API key not set");let m=new jp(t,e,n?.streamingUsage??!0,n,a,c,l,u,d??!1),g=o||"https://api.openai.com/v1";super(m,{name:"OpenAI",apiURL:g,headers:async()=>({Authorization:`Bearer ${e}`}),modelInfo:i,defaults:{model:t.model,embedModel:t.embedModel},options:n,supportFor:p,models:s}),this.openAICompatibleApiKey=e,this.openAICompatibleApiURL=g}setBatchAudioConfig(e){this.batchAudioConfig={...this.batchAudioConfig,...e}}async transcribe(e,t){let n=typeof e.model=="string"?e.model:this.batchAudioConfig.transcriptionModel,o=this.getOptions();return await Go({url:`${this.openAICompatibleApiURL}/audio/transcriptions`,headers:{Authorization:`Bearer ${this.openAICompatibleApiKey}`},audio:e.audio,fields:{model:n??this.batchAudioConfig.transcriptionModel,language:e.language,prompt:e.prompt,temperature:e.temperature,response_format:e.responseFormat??"json"},fetch:t?.fetch??o.fetch,abortSignal:t?.abortSignal??o.abortSignal})}async speak(e,t){let n=e.format??this.batchAudioConfig.speechFormat??"mp3",o=typeof e.model=="string"?e.model:this.batchAudioConfig.speechModel,i=typeof e.voice=="object"?e.voice.id:e.voice??this.batchAudioConfig.speechVoice??"alloy",s=this.getOptions();return await fn({url:`${this.openAICompatibleApiURL}/audio/speech`,headers:{Authorization:`Bearer ${this.openAICompatibleApiKey}`},body:{model:o,input:e.text,voice:i,response_format:n==="pcm"?"pcm16":n,...e.speed!==void 0?{speed:e.speed}:{}},format:n,transcript:e.text,fetch:t?.fetch??s.fetch,abortSignal:t?.abortSignal??s.abortSignal})}},qo=class extends dt{constructor({apiKey:e,apiURL:t,config:n,options:o,models:i,modelInfo:s}){if(!e||e==="")throw new Error("OpenAI API key not set");s=[...or,...s??[]];let a=l=>{let u=it({model:l,modelInfo:s,models:i}),d=Lc(l),p=Ps(l),m=Un(l);return{functions:!0,streaming:!0,hasThinkingBudget:u?.supported?.thinkingBudget??!1,hasShowThoughts:u?.supported?.showThoughts??!1,structuredOutputs:u?.supported?.structuredOutputs??!1,media:{images:{supported:!0,formats:["image/jpeg","image/png","image/gif","image/webp"],maxSize:20*1024*1024,detailLevels:["high","low","auto"]},audio:{supported:!0,formats:d||p?["wav","mp3","pcm16"]:["wav","mp3","ogg"],maxDuration:25*60,output:{supported:d||p,formats:["wav","mp3","flac","opus","aac","pcm16"],voices:["alloy","ash","ballad","coral","echo","fable","nova","onyx","sage","shimmer","marin","cedar"]},...m?{output:{supported:!1,formats:[],voices:[]}}:{}},files:{supported:!0,formats:["text/plain","application/pdf","image/jpeg","image/png"],maxSize:512*1024*1024,uploadMethod:"upload"},urls:{supported:!1,webSearch:!0,contextFetching:!1}},caching:{supported:hn(l),types:hn(l)?["ephemeral"]:[],cacheBreakpoints:!0},thinking:u?.supported?.thinkingBudget??!1,multiTurn:!0}},c=i?.map(l=>{let u=l,d=u?.config;if(!d)return l;let p={};d.maxTokens!==void 0&&(p.maxTokens=d.maxTokens),d.temperature!==void 0&&(p.temperature=d.temperature),d.topP!==void 0&&(p.topP=d.topP),d.presencePenalty!==void 0&&(p.presencePenalty=d.presencePenalty),d.frequencyPenalty!==void 0&&(p.frequencyPenalty=d.frequencyPenalty);let m=d.stopSequences??d.stop;m!==void 0&&(p.stopSequences=m),d.n!==void 0&&(p.n=d.n),d.stream!==void 0&&(p.stream=d.stream);let g={...u};Object.keys(p).length>0&&(g.modelConfig={...u.modelConfig??{},...p});let h=d?.thinking?.thinkingTokenBudget;if(typeof h=="number"){let x=[["minimal",200],["low",800],["medium",5e3],["high",1e4],["highest",24500]],f="minimal",y=Number.POSITIVE_INFINITY;for(let[A,b]of x){let w=Math.abs(h-b);w<y&&(y=w,f=A)}g.thinkingTokenBudget=f}return d?.thinking?.includeThoughts!==void 0&&(g.showThoughts=!!d.thinking.includeThoughts),g});super({apiKey:e,apiURL:t,config:{..._r(),...n},options:o,modelInfo:s,models:c??i,promptCaching:!0,supportFor:a}),super.setName("OpenAI")}};var gT=r=>{let e=r.trim();if(!e)return e;if(e.includes("api-version=")){let t=e.indexOf("api-version="),n=e.slice(t);return new URLSearchParams(n).get("api-version")??e}return e},fT=r=>{let e=r.match(/^(\d{4}-\d{2}-\d{2})/);return e?e[1]>="2024-08-01":!1},Gp=_r,wC=Vc,vC=Hc,SC=qc,Vo=class extends dt{constructor({apiKey:e,resourceName:t,deploymentName:n,version:o="api-version=2024-02-15-preview",config:i,options:s,models:a,modelInfo:c,chatReqUpdater:l}){if(!e||e==="")throw new Error("Azure OpenAPI API key not set");if(!t||t==="")throw new Error("Azure OpenAPI resource name not set");if(!n||n==="")throw new Error("Azure OpenAPI deployment id not set");let u={...Gp(),...i},d=gT(o),p=fT(d);c=[...or,...c??[]];let m=h=>{let x=it({model:h,modelInfo:c,models:a});return{functions:!0,streaming:!0,hasThinkingBudget:x?.supported?.thinkingBudget??!1,hasShowThoughts:x?.supported?.showThoughts??!1,structuredOutputs:p&&(x?.supported?.structuredOutputs??!1),functionCot:!1,media:{images:{supported:!0,formats:["image/jpeg","image/png","image/gif","image/webp"],maxSize:20*1024*1024,detailLevels:["high","low","auto"]},audio:{supported:!1,formats:[],maxDuration:0},files:{supported:!1,formats:[],maxSize:0,uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:x?.supported?.thinkingBudget??!1,multiTurn:!0}};super({apiKey:e,config:u,options:s,models:a,modelInfo:c,supportFor:m,chatReqUpdater:l});let g=t.includes("://")?t:`https://${t}.openai.azure.com/`;super.setName("Azure OpenAI"),super.setAPIURL(new URL(`/openai/deployments/${n}?api-version=${d}`,g).href),super.setHeaders(async()=>({"api-key":e}))}};var hT=Math.log(2);function TC(){return{version:1,observations:0,successes:0,failureEwma:.05,logLatencyMean:0,logLatencyM2:0}}function Bp(r,e){let t=r??TC(),o=.2*(e.outcome==="failure"?1:0)+(1-.2)*t.failureEwma;if(e.outcome==="failure")return{...t,observations:t.observations+1,failureEwma:o};let i=Math.log(Math.max(1,e.latencyMs)),s=t.successes+1,a=i-t.logLatencyMean,c=t.logLatencyMean+a/Math.max(1,s),l=i-c;return{...t,observations:t.observations+1,successes:s,failureEwma:o,logLatencyMean:c,logLatencyM2:t.logLatencyM2+a*l}}var Ho=class{stats=new Map;async get(e){let t=this.stats.get(kC(e));return t?{...t}:void 0}async observe(e,t){let n=kC(e);this.stats.set(n,Bp(this.stats.get(n),t))}};function PC(r,e,t=Math.random){let n=r??TC(),o=Math.log(Math.max(1,e/2)),i=1,s=2,a=hT**2,c=n.successes,l=i+c,u=(i*o+c*n.logLatencyMean)/l,d=s+c/2,p=n.logLatencyMean-o,m=a+n.logLatencyM2/2+i*c*p**2/(2*l),g=MC(d,1/Math.max(Number.EPSILON,m),t),h=1/Math.max(Number.EPSILON,g),x=u+EC(t)*Math.sqrt(h/l),f=(Math.log(Math.max(1,e))-x)/Math.sqrt(h);return{failureProbability:IC(n.failureEwma),deadlineMissProbability:IC(1-xT(f))}}function kC(r){return JSON.stringify([r.namespace,r.slice,r.logicalModel,r.routeKey])}function MC(r,e,t){if(r<1){let i=Kc(t);return MC(r+1,e,t)*i**(1/r)}let n=r-1/3,o=1/Math.sqrt(9*n);for(;;){let i=EC(t),s=1+o*i;if(s<=0)continue;let a=s**3,c=Kc(t);if(c<1-.0331*i**4||Math.log(c)<.5*i**2+n*(1-a+Math.log(a)))return n*a*e}}function EC(r){let e=Kc(r),t=Kc(r);return Math.sqrt(-2*Math.log(e))*Math.cos(2*Math.PI*t)}function Kc(r){return Math.min(1-Number.EPSILON,Math.max(Number.EPSILON,r()))}function xT(r){let e=r<0?-1:1,t=Math.abs(r)/Math.sqrt(2),n=1/(1+.3275911*t),o=((((1.061405429*n-1.453152027)*n+1.421413741)*n-.284496736)*n+.254829592)*n;return(1+e*(1-o*Math.exp(-t*t)))/2}function IC(r){return Math.min(1,Math.max(0,r))}var Wc=class r{services;currentServiceIndex=0;currentService;debug;initialBackoffMs;maxBackoffMs;maxRetries;adaptive;serviceFailures=new Map;static RETRYABLE_STATUS_CODES=[408,429,500,502,503,504,529];constructor(e,t){if(e.length===0)throw new Error("No AI services provided.");let n=e;AT(n),this.adaptive=t?.strategy?yT(n,t.strategy):void 0,this.services=[...n].sort(t?.comparator??r.metricComparator);let o=this.services[this.currentServiceIndex];if(o===void 0)throw new Error("Error initializing the AI services.");this.currentService=o,this.debug=t?.debug??!0,this.initialBackoffMs=t?.initialBackoffMs??1e3,this.maxBackoffMs=t?.maxBackoffMs??32e3,this.maxRetries=t?.maxRetries??3}static create(e,t){return new r(e,t)}getLastUsedChatModel(){return this.currentService.getLastUsedChatModel()}getLastUsedEmbedModel(){return this.currentService.getLastUsedEmbedModel()}getLastUsedModelConfig(){return this.currentService.getLastUsedModelConfig()}static inputOrderComparator=()=>0;static metricComparator=(e,t)=>{let n=e.getMetrics(),o=t.getMetrics();return n.latency.chat.mean-o.latency.chat.mean};getModelList(){for(let e of this.services){let t=e.getModelList();if(t)return t}}getNextService(e,t){let n=t+1,o=e[n];return o===void 0?{service:void 0,index:n}:{service:o,index:n}}reset(){this.currentServiceIndex=0;let e=this.services[this.currentServiceIndex];if(e===void 0)throw new Error("No AI services provided.");this.currentService=e}getName(){return this.currentService.getName()}getId(){return this.currentService.getId()}getFeatures(e){let t={functions:!1,streaming:!1,thinking:!1,multiTurn:!1,structuredOutputs:!1,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]}};for(let n of this.services){let o=n.getFeatures(e);o.functions&&(t.functions=!0),o.streaming&&(t.streaming=!0),o.thinking&&(t.thinking=!0),o.multiTurn&&(t.multiTurn=!0),o.structuredOutputs&&(t.structuredOutputs=!0),o.functionCot&&(t.functionCot=!0),o.hasThinkingBudget&&(t.hasThinkingBudget=!0),o.hasShowThoughts&&(t.hasShowThoughts=!0),o.media.images.supported&&(t.media.images.supported=!0),t.media.images.formats=Array.from(new Set([...t.media.images.formats,...o.media.images.formats])),o.media.audio.supported&&(t.media.audio.supported=!0),t.media.audio.formats=Array.from(new Set([...t.media.audio.formats,...o.media.audio.formats])),o.media.files.supported&&(t.media.files.supported=!0),t.media.files.formats=Array.from(new Set([...t.media.files.formats,...o.media.files.formats])),o.media.files.uploadMethod!=="none"&&(t.media.files.uploadMethod=o.media.files.uploadMethod),o.media.urls.supported&&(t.media.urls.supported=!0),o.media.urls.webSearch&&(t.media.urls.webSearch=!0),o.media.urls.contextFetching&&(t.media.urls.contextFetching=!0),o.caching.supported&&(t.caching.supported=!0),t.caching.types=Array.from(new Set([...t.caching.types,...o.caching.types]))}return t}getMetrics(){let e={latency:{chat:{mean:0,p95:0,p99:0,samples:[]},embed:{mean:0,p95:0,p99:0,samples:[]}},errors:{chat:{count:0,rate:0,total:0},embed:{count:0,rate:0,total:0}}},t=0,n=0,o=0,i=0;for(let s of this.services){let a=s.getMetrics();e.errors.chat.count+=a.errors.chat.count,e.errors.chat.total+=a.errors.chat.total,e.errors.embed.count+=a.errors.embed.count,e.errors.embed.total+=a.errors.embed.total;let c=a.latency.chat.samples.length;c>0&&(t+=a.latency.chat.mean*c,n+=c);let l=a.latency.embed.samples.length;l>0&&(o+=a.latency.embed.mean*l,i+=l)}e.errors.chat.total>0&&(e.errors.chat.rate=e.errors.chat.count/e.errors.chat.total),e.errors.embed.total>0&&(e.errors.embed.rate=e.errors.embed.count/e.errors.embed.total),n>0&&(e.latency.chat.mean=t/n),i>0&&(e.latency.embed.mean=o/i);for(let s of this.services){let a=s.getMetrics();e.latency.chat.p95=Math.max(e.latency.chat.p95,a.latency.chat.p95),e.latency.chat.p99=Math.max(e.latency.chat.p99,a.latency.chat.p99),e.latency.embed.p95=Math.max(e.latency.embed.p95,a.latency.embed.p95),e.latency.embed.p99=Math.max(e.latency.embed.p99,a.latency.embed.p99)}return e}getEstimatedCost(e){return this.currentService.getEstimatedCost(e)}canRetryService(e){let t=this.serviceFailures.get(e.getId());if(!t)return!0;let{retries:n,lastFailureTime:o}=t,i=Date.now()-o,s=Math.min(this.initialBackoffMs*2**n,this.maxBackoffMs);return i>=s}handleFailure(e,t){let o=(this.serviceFailures.get(e.getId())?.retries??0)+1;this.serviceFailures.set(e.getId(),{retries:o,lastFailureTime:Date.now()}),this.debug&&console.warn(`AxBalancer: Service ${e.getName()} failed (retry ${o}/${this.maxRetries})`,t)}handleSuccess(e){this.serviceFailures.delete(e.getId())}isRetryableServiceError(e){if(!(e instanceof lt))return!1;switch(e.constructor){case vt:return!1;case Qe:return r.RETRYABLE_STATUS_CODES.includes(e.status);case tt:case ln:case wt:case ht:return!0;default:return!1}}getCandidateServices(e){let t=e.responseFormat?.type==="json_schema",n=e.capabilities,o=n?.requiresImages,i=n?.requiresAudio,s=e.model;if(!t&&!o&&!i)return this.services;let a=this.services.filter(c=>{let l=c.getFeatures(s);return!(t&&!l.structuredOutputs||o&&!l.media.images.supported||i&&!l.media.audio.supported)});if(a.length===0){let c=[];throw t&&c.push("structured outputs"),o&&c.push("images"),i&&c.push("audio"),new Error(`No services available that support required capabilities: ${c.join(", ")}.`)}return a}async peekStreamForFailover(e,t,n){let o=e.getReader(),i=await o.read(),s=n?performance.now()-n.startedAt:0,a=!1,c=!1,l=async()=>{c||!n||(c=!0,await n.onSuccess(s))},u=async d=>{this.isRetryableServiceError(d)&&(this.handleFailure(t,d),!c&&n&&(c=!0,await n.onFailure(d,performance.now()-n.startedAt)))};return new ReadableStream({async pull(d){if(!a){if(a=!0,i.done){await l(),d.close();return}d.enqueue(i.value);return}try{let{done:p,value:m}=await o.read();if(p){await l(),d.close();return}d.enqueue(m)}catch(p){await u(p),d.error(p)}},cancel(d){return c=!0,o.cancel(d)}})}async executeChatAttempt(e,t,n,o){let i=await e.chat(t,n);return i instanceof ReadableStream?(o?.onStreaming?.(),await this.peekStreamForFailover(i,e,o?.observation)):i}async chatAdaptive(e,t,n){let o=await this.rankAdaptiveCandidates(e,t,n),i;for(let s=0;s<o.length;s++){let a=o[s];if(!a)continue;let{service:c,statsKey:l}=a;this.currentService=c,this.emitRoutingEvent({type:"selected",namespace:l.namespace,slice:l.slice,logicalModel:l.logicalModel,routeKey:a.routeKey,serviceName:a.serviceName,attempt:s+1});let u=performance.now(),d=!1;try{let p=await this.executeChatAttempt(c,e,t,{onStreaming:()=>{d=!0},observation:{startedAt:u,onSuccess:async g=>{this.handleSuccess(c),await this.recordAdaptiveObservation(a,{outcome:"success",latencyMs:g},!0)},onFailure:async(g,h)=>{await this.recordAdaptiveObservation(a,{outcome:"failure"},!0,g,h)}}});if(d)return p;let m=performance.now()-u;return this.handleSuccess(c),await this.recordAdaptiveObservation(a,{outcome:"success",latencyMs:m},!1),p}catch(p){if(!this.isRetryableServiceError(p))throw p;i=p,this.handleFailure(c,p),await this.recordAdaptiveObservation(a,{outcome:"failure"},d,p,performance.now()-u);let m=o[s+1],g=OC(p);this.emitRoutingEvent({type:"fallback",namespace:l.namespace,slice:l.slice,logicalModel:l.logicalModel,fromRouteKey:a.routeKey,toRouteKey:m?.routeKey,reason:g.reason,status:g.status}),this.debug&&console.warn(`AxBalancer: Switching to service ${m?.serviceName??"none"}`,p)}}throw i||new Error(`All candidate services exhausted (tried ${n.length} service(s))`)}async rankAdaptiveCandidates(e,t,n){let o=this.adaptive;if(!o)return[];let i=String(e.model??"default"),s=o.strategy.slice?.({model:e.model,options:t})??"default",a=zp("slice",s),c=n;if(c.length===0)throw new Error(`All candidate services exhausted (tried ${n.length} service(s))`);let l=await Promise.all(c.map(async d=>{let p=o.routeKeys.get(d),m=o.serviceIndices.get(d);if(p===void 0||m===void 0)throw new Error("Adaptive route metadata is missing for a service.");let g={namespace:o.namespace,slice:a,logicalModel:i,routeKey:p},h=await this.getAdaptiveStats(g),{failureProbability:x,deadlineMissProbability:f}=PC(h,o.strategy.deadlineMs),y=this.estimateAdaptiveCost(d,m,p,e),A=x+(1-x)*f;return{service:d,serviceIndex:m,order:n.indexOf(d),statsKey:g,routeKey:p,serviceName:d.getName(),score:y+o.strategy.badOutcomeCost*A,estimatedCost:y,failureProbability:x,deadlineMissProbability:f}}));l.sort((d,p)=>d.score-p.score||d.order-p.order);let u=l[0];return u&&this.emitRoutingEvent({type:"ranked",namespace:u.statsKey.namespace,slice:u.statsKey.slice,logicalModel:u.statsKey.logicalModel,candidates:l.map(({routeKey:d,serviceName:p,score:m,estimatedCost:g,failureProbability:h,deadlineMissProbability:x})=>({routeKey:d,serviceName:p,score:m,estimatedCost:g,failureProbability:h,deadlineMissProbability:x}))}),l}estimateAdaptiveCost(e,t,n,o){let i=this.adaptive;if(!i)return 0;let s=String(o.model??"default"),a=e.getModelList()?.find(m=>Object.is(m.key,o.model)),c=a&&"model"in a?a.model:String(o.model??e.getLastUsedChatModel()??"default"),l=i.strategy.expectedTokens,u=l?.promptTokens??0,d=l?.completionTokens??0,p=i.strategy.estimateCost?i.strategy.estimateCost({service:e,serviceIndex:t,routeKey:n,logicalModel:s,resolvedModel:c,expectedTokens:l}):e.getEstimatedCost(l?{ai:e.getName(),model:c,tokens:{promptTokens:u,completionTokens:d,totalTokens:u+d}}:void 0);if(!Number.isFinite(p)||p<0)throw new Error(`Adaptive estimated cost for route "${n}" must be finite and non-negative.`);return p}async getAdaptiveStats(e){let t=this.adaptive;if(t)try{return await t.statsStore.get(e)}catch(n){this.emitRoutingEvent({type:"store-error",namespace:e.namespace,slice:e.slice,logicalModel:e.logicalModel,operation:"get",routeKey:e.routeKey,errorType:FC(n)});return}}async recordAdaptiveObservation(e,t,n,o,i){let s=this.adaptive;if(!s)return;try{await s.statsStore.observe(e.statsKey,t)}catch(c){this.emitRoutingEvent({type:"store-error",namespace:e.statsKey.namespace,slice:e.statsKey.slice,logicalModel:e.statsKey.logicalModel,operation:"observe",routeKey:e.routeKey,errorType:FC(c)})}let a=o?OC(o):void 0;this.emitRoutingEvent({type:"observation",namespace:e.statsKey.namespace,slice:e.statsKey.slice,logicalModel:e.statsKey.logicalModel,routeKey:e.routeKey,serviceName:e.serviceName,outcome:t.outcome,latencyMs:t.outcome==="success"?t.latencyMs:i,streaming:n,reason:a?.reason,status:a?.status})}emitRoutingEvent(e){let t=this.adaptive?.strategy.onRoutingEvent;if(t)try{Promise.resolve(t(e)).catch(()=>{})}catch{}}async chat(e,t){let n=this.getCandidateServices(e);if(this.adaptive)return await this.chatAdaptive(e,t,n);let o=0,i=n[o];if(!i)throw new Error("No matching AI services available for request.");for(this.currentService=i;;){if(!this.canRetryService(i)){let s=this.getNextService(n,o);if(!s.service)throw new Error(`All candidate services exhausted (tried ${n.length} service(s))`);i=s.service,o=s.index,this.currentService=i;continue}try{let s=await this.executeChatAttempt(i,e,t);return this.handleSuccess(i),s}catch(s){if(!(s instanceof lt))throw s;switch(s.constructor){case vt:throw s;case Qe:{if(!r.RETRYABLE_STATUS_CODES.includes(s.status))throw s;break}case tt:break;case ln:break;case wt:break;case ht:break;default:throw s}if(this.handleFailure(i,s),(this.serviceFailures.get(i.getId())?.retries??0)>=this.maxRetries){let c=this.getNextService(n,o);if(this.debug&&console.warn(`AxBalancer: Switching to service ${c.service?.getName()??"none"}`,s),!c.service)throw s;i=c.service,o=c.index,this.currentService=i}}}}async embed(e,t){this.reset();let n=this.currentServiceIndex;for(;;){if(!this.canRetryService(this.currentService)){let o=this.getNextService(this.services,n);if(!o.service)throw new Error(`All services exhausted (tried ${this.services.length} service(s))`);this.currentService=o.service,n=o.index,this.currentServiceIndex=n;continue}try{let o=await this.currentService.embed(e,t);return this.handleSuccess(this.currentService),o}catch(o){if(!(o instanceof lt)||o instanceof Qe&&!r.RETRYABLE_STATUS_CODES.includes(o.status)||o instanceof vt)throw o;if(this.handleFailure(this.currentService,o),(this.serviceFailures.get(this.currentService.getId())?.retries??0)>=this.maxRetries){let s=this.getNextService(this.services,n);if(!s.service)throw o;this.currentService=s.service,n=s.index,this.currentServiceIndex=n}}}}async transcribe(e,t){return await this.currentService.transcribe(e,t)}async speak(e,t){return await this.currentService.speak(e,t)}setOptions(e){for(let t of this.services)t.setOptions(e);this.currentService.setOptions(e),this.debug=e.debug??this.debug}getOptions(){return this.currentService.getOptions()}getLogger(){return this.currentService.getLogger()}};function yT(r,e){if(!Number.isFinite(e.deadlineMs)||e.deadlineMs<=0)throw new Error("Adaptive deadlineMs must be finite and greater than zero.");if(!Number.isFinite(e.badOutcomeCost)||e.badOutcomeCost<0)throw new Error("Adaptive badOutcomeCost must be finite and non-negative.");if(e.expectedTokens){for(let[i,s]of Object.entries(e.expectedTokens))if(!Number.isFinite(s)||s<0)throw new Error(`Adaptive expectedTokens.${i} must be finite and non-negative.`)}if(e.statsStore&&!e.routeKey)throw new Error("Adaptive routeKey is required when a custom statsStore is supplied.");let t=new Map,n=new Map,o=new Set;return r.forEach((i,s)=>{let a=e.routeKey?.(i,s)??i.getId(),c=zp("routeKey",a);if(o.has(c))throw new Error(`Adaptive routeKey "${c}" must be unique.`);o.add(c),t.set(i,c),n.set(i,s)}),{strategy:e,namespace:zp("namespace",e.namespace??"default"),statsStore:e.statsStore??new Ho,routeKeys:t,serviceIndices:n}}function zp(r,e){let t=e.trim();if(!t)throw new Error(`Adaptive ${r} must be a non-empty string.`);return t}function OC(r){return r instanceof Qe?{reason:"status",status:r.status}:r instanceof tt?{reason:"network",status:void 0}:r instanceof wt?{reason:"stream-terminated",status:void 0}:r instanceof ht?{reason:"timeout",status:void 0}:{reason:"response",status:void 0}}function FC(r){return r instanceof Error?r.name:typeof r}function AT(r){let e=r.find(o=>o.getModelList()!==void 0);if(!e)return;let t=e.getModelList();if(!t)throw new Error("No model list found in any service.");let n=new Set(t.map(o=>o.key));for(let o=0;o<r.length;o++){let i=r[o];if(!i)throw new Error(`Service at index ${o} is undefined`);let s=i.getModelList();if(!s)throw new Error(`Service at index ${o} (${i.getName()}) has no model list while another service does.`);let a=new Set(s.map(c=>c.key));for(let c of n)if(!a.has(c))throw new Error(`Service at index ${o} (${i.getName()}) is missing model "${c}"`);for(let c of a)if(!n.has(c))throw new Error(`Service at index ${o} (${i.getName()}) has extra model "${c}"`)}}function Nr(r){let e=!1,t=!1,n=!1,o=!1,i=!1,s=!1,a=!1,c=!1,l=new Set,u=0;if(r.chatPrompt&&Array.isArray(r.chatPrompt))for(let d of r.chatPrompt){if(d.role==="user"&&Array.isArray(d.content))for(let p of d.content)switch(l.add(p.type),p.type){case"image":e=!0,p.cache&&(c=!0),u+=85;break;case"audio":t=!0,p.cache&&(c=!0),u+=p.duration||60;break;case"file":o=!0,p.cache&&(c=!0),u+=Math.ceil((p.extractedText?.length||1e3)/4);break;case"url":i=!0,p.cache&&(c=!0),u+=Math.ceil((p.cachedContent?.length||2e3)/4);break;case"text":p.cache&&(c=!0),u+=Math.ceil(p.text.length/4);break}else"content"in d&&typeof d.content=="string"&&(u+=Math.ceil(d.content.length/4));"cache"in d&&d.cache&&(c=!0)}return r.functions&&r.functions.length>0&&(s=!0),r.modelConfig?.stream===!0&&(a=!0),r.modelConfig?.audio?.output?.enabled===!0&&(n=!0),r.capabilities&&(r.capabilities.requiresImages&&(e=!0),r.capabilities.requiresAudio&&(t=!0),r.capabilities.requiresAudioOutput&&(n=!0),r.capabilities.requiresFiles&&(o=!0),r.capabilities.requiresWebSearch&&(i=!0)),{hasImages:e,hasAudio:t,hasAudioOutput:n,hasFiles:o,hasUrls:i,requiresFunctions:s,requiresStreaming:a,requiresCaching:c,contentTypes:l,estimatedTokens:u}}function qp(r,e){let t=r.getFeatures(),n=[],o=[],i=[];if(e.hasImages&&!t.media.images.supported&&(n.push("Image support"),i.push("Use altText for images or imageToText service")),e.hasAudio&&!t.media.audio.supported&&(n.push("Audio support"),i.push("Pre-transcribe audio or use transcription field")),e.hasAudioOutput&&!t.media.audio.output?.supported&&(n.push("Audio output support"),i.push("Use text output or a text-to-speech post-processing step")),e.hasFiles&&!t.media.files.supported&&(n.push("File support"),i.push("Pre-extract text content or use extractedText field")),e.hasUrls&&!t.media.urls.supported&&(n.push("URL/Web search support"),i.push("Pre-fetch content or use cachedContent field")),e.requiresFunctions&&!t.functions&&n.push("Function calling"),e.requiresStreaming&&!t.streaming&&(n.push("Streaming responses"),i.push("Use non-streaming mode")),e.requiresCaching&&!t.caching.supported&&(n.push("Content caching"),i.push("Repeated content will not be cached")),e.hasImages&&t.media.images.supported){let a=t.media.images.maxSize;a&&a<10*1024*1024&&o.push(`Image size limit is ${Math.round(a/(1024*1024))}MB`)}if(e.hasAudio&&t.media.audio.supported){let a=t.media.audio.maxDuration;a&&a<600&&o.push(`Audio duration limit is ${Math.round(a/60)} minutes`)}return{isSupported:n.length===0,missingCapabilities:n,warnings:o,alternatives:i}}function Jc(r,e){return r.map(t=>{let n=t.getFeatures(),o=qp(t,e),i=0,s=[];return i+=10,e.hasImages&&n.media.images.supported&&(i+=25,s.push("Images"),n.media.images.detailLevels?.includes("high")&&(i+=5),n.media.images.maxSize&&n.media.images.maxSize>10*1024*1024&&(i+=3)),e.hasAudio&&n.media.audio.supported&&(i+=25,s.push("Audio"),n.media.audio.maxDuration&&n.media.audio.maxDuration>600&&(i+=5)),e.hasFiles&&n.media.files.supported&&(i+=25,s.push("Files"),n.media.files.uploadMethod==="cloud"&&(i+=3)),e.hasUrls&&n.media.urls.supported&&(i+=25,s.push("URLs"),n.media.urls.webSearch&&(i+=5)),e.requiresFunctions&&n.functions&&(i+=15,s.push("Functions"),n.functionCot&&(i+=3)),e.requiresStreaming&&n.streaming&&(i+=10,s.push("Streaming")),e.requiresCaching&&n.caching.supported&&(i+=8,s.push("Caching"),n.caching.types.includes("persistent")&&(i+=3)),n.thinking&&(i+=2),n.multiTurn&&(i+=2),n.hasThinkingBudget&&(i+=1),n.hasShowThoughts&&(i+=1),i-=o.missingCapabilities.length*10,{provider:t,score:i,missingCapabilities:o.missingCapabilities,supportedCapabilities:s}}).sort((t,n)=>n.score-t.score)}function Yc(r,e,t={}){if(e.length===0)throw new Error("No providers available");let n=Nr(r),o=Jc(e,n);if(t.requireExactMatch){let i=o.filter(s=>s.missingCapabilities.length===0);if(i.length===0)throw new Error(`No providers fully support the request requirements: ${o[0]?.missingCapabilities.join(", ")||"unknown requirements"}`);return i[0].provider}if(!t.allowDegradation){let i=o[0];if(i.missingCapabilities.length>0)throw new Error(`Best available provider (${i.provider.getName()}) is missing: ${i.missingCapabilities.join(", ")}`)}return o[0].provider}function _C(r,e){let t=Nr(r),n=Jc(e,t),o=n[0]?.provider||null,i=[t.hasImages&&"images",t.hasAudio&&"audio",t.hasFiles&&"files",t.hasUrls&&"URLs",t.requiresFunctions&&"functions",t.requiresStreaming&&"streaming",t.requiresCaching&&"caching"].filter(Boolean).length,s=o?n[0].supportedCapabilities.length:0,a=o?`${o.getName()} supports ${s}/${i} requirements (${Math.round(s/Math.max(i,1)*100)}% compatibility)`:"No suitable providers found";return{requirements:t,providerScores:n,recommendedProvider:o,summary:a}}function NC(r,e){return r.filter(t=>t.getFeatures().media[e].supported)}function LC(r,e){let t={};for(let n of r){let i=n.getFeatures().media[e];if(i.supported)for(let s of i.formats)t[s]||(t[s]=[]),t[s].push(n)}return t}var Ko=(o=>(o.CommandRPlus="command-r-plus",o.CommandR="command-r",o.Command="command",o.CommandLight="command-light",o))(Ko||{}),Es=(o=>(o.EmbedEnglishV30="embed-english-v3.0",o.EmbedEnglishLightV30="embed-english-light-v3.0",o.EmbedMultiLingualV30="embed-multilingual-v3.0",o.EmbedMultiLingualLightV30="embed-multilingual-light-v3.0",o))(Es||{});var Wo=[{name:"command-r-plus",currency:"usd",promptTokenCostPer1M:3,completionTokenCostPer1M:15},{name:"command-r",currency:"usd",promptTokenCostPer1M:.5,completionTokenCostPer1M:1.5},{name:"command",currency:"usd",promptTokenCostPer1M:.5,completionTokenCostPer1M:1.5},{name:"command-light",currency:"usd",promptTokenCostPer1M:.3,completionTokenCostPer1M:.6},{name:"embed-english-light-v3.0",currency:"usd",promptTokenCostPer1M:.1,completionTokenCostPer1M:.1},{name:"embed-english-v3.0",currency:"usd",promptTokenCostPer1M:.1,completionTokenCostPer1M:.1},{name:"embed-multilingual-v3.0",currency:"usd",promptTokenCostPer1M:.1,completionTokenCostPer1M:.1},{name:"embed-multilingual-light-v3.0",currency:"usd",promptTokenCostPer1M:.1,completionTokenCostPer1M:.1}];var Lr=(i=>(i.DeepSeekV4Flash="deepseek-v4-flash",i.DeepSeekV4Pro="deepseek-v4-pro",i.DeepSeekChat="deepseek-chat",i.DeepSeekCoder="deepseek-coder",i.DeepSeekReasoner="deepseek-reasoner",i))(Lr||{});var jn=[{name:"deepseek-v4-flash",currency:"USD",aliases:["deepseek-chat","deepseek-reasoner"],promptTokenCostPer1M:.14,completionTokenCostPer1M:.28,cacheReadTokenCostPer1M:.0028,contextWindow:1e6,maxTokens:384e3,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!1}},{name:"deepseek-v4-pro",currency:"USD",promptTokenCostPer1M:.435,completionTokenCostPer1M:.87,cacheReadTokenCostPer1M:.003625,contextWindow:1e6,maxTokens:384e3,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!1}}];var $r=(v=>(v.Gemini37Flash="gemini-3.7-flash",v.Gemini36Flash="gemini-3.6-flash",v.Gemini35Flash="gemini-3.5-flash",v.Gemini35FlashLite="gemini-3.5-flash-lite",v.Gemini31Pro="gemini-3.1-pro-preview",v.Gemini31FlashLite="gemini-3.1-flash-lite",v.Gemini3FlashLite="gemini-3.1-flash-lite-preview",v.Gemini3Flash="gemini-3-flash-preview",v.Gemini3Pro="gemini-3.1-pro-preview",v.Gemini3ProImage="gemini-3-pro-image-preview",v.Gemini31FlashImage="gemini-3.1-flash-image-preview",v.Gemini31FlashLive="gemini-3.1-flash-live-preview",v.Gemini31FlashTTS="gemini-3.1-flash-tts-preview",v.NanoBanana2="nano-banana-2",v.GeminiRoboticsER16="gemini-robotics-er-1.6-preview",v.Gemini25Pro="gemini-2.5-pro",v.Gemini25Flash="gemini-2.5-flash",v.Gemini25FlashNativeAudio="gemini-2.5-flash-native-audio-preview-12-2025",v.Gemini25FlashLite="gemini-2.5-flash-lite",v.Gemini20Flash="gemini-2.0-flash",v.Gemini20FlashLite="gemini-2.0-flash-lite",v.Gemini20ProExp="gemini-2.0-pro-exp-02-05",v.Gemini20FlashThinkingExp="gemini-2.0-flash-thinking-exp-01-21",v.Gemini1Pro="gemini-1.0-pro",v.Gemini15Flash="gemini-1.5-flash",v.Gemini15Flash002="gemini-1.5-flash-002",v.Gemini15Flash8B="gemini-1.5-flash-8b",v.Gemini15Pro="gemini-1.5-pro",v.GeminiFlashLatest="gemini-flash-latest",v.GeminiFlashLiteLatest="gemini-flash-lite-latest",v.GeminiProLatest="gemini-pro-latest",v))($r||{}),Ur=(i=>(i.GeminiEmbedding2="gemini-embedding-2",i.GeminiEmbedding001="gemini-embedding-001",i.GeminiEmbedding="gemini-embedding-exp",i.TextEmbeddingLarge="text-embedding-large-exp-03-07",i.TextEmbedding005="text-embedding-005",i))(Ur||{}),Qc=(o=>(o.HarmCategoryHarassment="HARM_CATEGORY_HARASSMENT",o.HarmCategoryHateSpeech="HARM_CATEGORY_HATE_SPEECH",o.HarmCategorySexuallyExplicit="HARM_CATEGORY_SEXUALLY_EXPLICIT",o.HarmCategoryDangerousContent="HARM_CATEGORY_DANGEROUS_CONTENT",o))(Qc||{}),Xc=(i=>(i.BlockNone="BLOCK_NONE",i.BlockOnlyHigh="BLOCK_ONLY_HIGH",i.BlockMediumAndAbove="BLOCK_MEDIUM_AND_ABOVE",i.BlockLowAndAbove="BLOCK_LOW_AND_ABOVE",i.BlockDefault="HARM_BLOCK_THRESHOLD_UNSPECIFIED",i))(Xc||{}),Vp=(c=>(c.SemanticSimilarity="SEMANTIC_SIMILARITY",c.Classification="CLASSIFICATION",c.Clustering="CLUSTERING",c.RetrievalDocument="RETRIEVAL_DOCUMENT",c.RetrievalQuery="RETRIEVAL_QUERY",c.QuestionAnswering="QUESTION_ANSWERING",c.FactVerification="FACT_VERIFICATION",c.CodeRetrievalQuery="CODE_RETRIEVAL_QUERY",c))(Vp||{}),$C=["gemini-3.7-flash","gemini-3.6-flash","gemini-3.5-flash","gemini-3.5-flash-lite","gemini-3.1-pro-preview","gemini-3.1-pro-preview-customtools","gemini-3.1-flash-lite","gemini-3.1-flash-lite-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.0-flash","gemini-2.0-flash-lite","gemini-flash-latest","gemini-flash-lite-latest"];var Jo=[{name:"gemini-embedding-2",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.2,contextWindow:8192},{name:"gemini-embedding-001",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.15},{name:"gemini-3.7-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.5,completionTokenCostPer1M:7.5,cacheReadTokenCostPer1M:.15,cacheWriteTokenCostPer1M:1.5,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0},notSupported:{temperature:!0,topP:!0}},{name:"gemini-3.6-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.5,completionTokenCostPer1M:7.5,cacheReadTokenCostPer1M:.15,cacheWriteTokenCostPer1M:1.5,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0},notSupported:{temperature:!0,topP:!0}},{name:"gemini-3.5-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.5,completionTokenCostPer1M:9,cacheReadTokenCostPer1M:.15,cacheWriteTokenCostPer1M:1.5,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3.5-flash-lite",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.3,completionTokenCostPer1M:2.5,cacheReadTokenCostPer1M:.03,cacheWriteTokenCostPer1M:.3,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0},notSupported:{temperature:!0,topP:!0}},{name:"gemini-3.1-pro-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:2,completionTokenCostPer1M:12,cacheReadTokenCostPer1M:.2,cacheWriteTokenCostPer1M:2,longContextThreshold:2e5,longContextPromptTokenCostPer1M:4,longContextCompletionTokenCostPer1M:18,longContextCacheReadTokenCostPer1M:.4,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3-flash-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:3,cacheReadTokenCostPer1M:.05,cacheWriteTokenCostPer1M:.5,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3.1-flash-lite",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.25,completionTokenCostPer1M:1.5,cacheReadTokenCostPer1M:.025,cacheWriteTokenCostPer1M:.25,contextWindow:1048576,maxTokens:65536,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3.1-flash-lite-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.25,completionTokenCostPer1M:1.5,cacheReadTokenCostPer1M:.025,cacheWriteTokenCostPer1M:.25,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3-pro-image-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:2,completionTokenCostPer1M:.134,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-3.1-flash-image-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:3,supported:{structuredOutputs:!0}},{name:"gemini-3.1-flash-live-preview",characterIsToken:!1,supported:{thinkingBudget:!0,showThoughts:!0},audio:{input:!0,output:!0},contextWindow:131072,maxTokens:65536},{name:"gemini-3.1-flash-tts-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:3,audio:{input:!1,output:!0}},{name:"nano-banana-2",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:3},{name:"gemini-robotics-er-1.6-preview",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:0,completionTokenCostPer1M:0},{name:"gemini-2.5-pro",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.25,completionTokenCostPer1M:10,cacheReadTokenCostPer1M:.125,cacheWriteTokenCostPer1M:1.25,longContextThreshold:2e5,longContextPromptTokenCostPer1M:2.5,longContextCompletionTokenCostPer1M:15,longContextCacheReadTokenCostPer1M:.25,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.0-pro-exp-02-05",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:0,completionTokenCostPer1M:0,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.0-flash-thinking-exp-01-21",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:0,completionTokenCostPer1M:0,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.5-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.3,completionTokenCostPer1M:2.5,cacheReadTokenCostPer1M:.03,cacheWriteTokenCostPer1M:.3,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.5-flash-native-audio-preview-12-2025",characterIsToken:!1,supported:{thinkingBudget:!0,showThoughts:!0},audio:{input:!0,output:!0},contextWindow:131072,maxTokens:8192},{name:"gemini-2.5-flash-lite",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.1,completionTokenCostPer1M:.4,cacheReadTokenCostPer1M:.01,cacheWriteTokenCostPer1M:.1,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-2.0-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.1,completionTokenCostPer1M:.4,cacheReadTokenCostPer1M:.025,cacheWriteTokenCostPer1M:.1,supported:{structuredOutputs:!0},isDeprecated:!0,deprecatedOn:"2026-06-01"},{name:"gemini-2.0-flash-lite",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.075,completionTokenCostPer1M:.3,supported:{structuredOutputs:!0},isDeprecated:!0,deprecatedOn:"2026-06-01"},{name:"gemini-1.5-flash",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.075,completionTokenCostPer1M:.3,supported:{structuredOutputs:!0}},{name:"gemini-1.5-flash-8b",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.0375,completionTokenCostPer1M:.15,supported:{structuredOutputs:!0}},{name:"gemini-1.5-pro",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.25,completionTokenCostPer1M:5,supported:{structuredOutputs:!0}},{name:"gemini-1.0-pro",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.5,completionTokenCostPer1M:1.5,supported:{structuredOutputs:!0}},{name:"gemini-flash-latest",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.3,completionTokenCostPer1M:2.5,cacheReadTokenCostPer1M:.03,cacheWriteTokenCostPer1M:.3,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-flash-lite-latest",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:.1,completionTokenCostPer1M:.4,cacheReadTokenCostPer1M:.01,cacheWriteTokenCostPer1M:.1,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}},{name:"gemini-pro-latest",currency:"usd",characterIsToken:!1,promptTokenCostPer1M:1.25,completionTokenCostPer1M:10,cacheReadTokenCostPer1M:.125,cacheWriteTokenCostPer1M:1.25,longContextThreshold:2e5,longContextPromptTokenCostPer1M:2.5,longContextCompletionTokenCostPer1M:15,longContextCacheReadTokenCostPer1M:.25,supported:{thinkingBudget:!0,showThoughts:!0,structuredOutputs:!0}}];var Yo=(c=>(c.Mistral7B="open-mistral-7b",c.Mistral8x7B="open-mixtral-8x7b",c.MistralSmall="mistral-small-latest",c.MistralNemo="mistral-nemo-latest",c.MistralLarge="mistral-large-latest",c.Codestral="codestral-latest",c.OpenCodestralMamba="open-codestral-mamba",c.OpenMistralNemo="open-mistral-nemo-latest",c))(Yo||{}),Hp=(e=>(e.MistralEmbed="mistral-embed",e))(Hp||{});var Qo=[{name:"open-mistral-7b",currency:"USD",promptTokenCostPer1M:.25,completionTokenCostPer1M:.25},{name:"open-mixtral-8x7b",currency:"USD",promptTokenCostPer1M:.7,completionTokenCostPer1M:.7},{name:"mistral-nemo-latest",currency:"USD",promptTokenCostPer1M:.15,completionTokenCostPer1M:.15},{name:"mistral-small-latest",currency:"USD",promptTokenCostPer1M:.2,completionTokenCostPer1M:.6},{name:"mistral-large-latest",currency:"USD",promptTokenCostPer1M:2,completionTokenCostPer1M:6},{name:"codestral-latest",currency:"USD",promptTokenCostPer1M:.2,completionTokenCostPer1M:.6},{name:"open-codestral-mamba",currency:"USD",promptTokenCostPer1M:.25,completionTokenCostPer1M:.25},{name:"open-mistral-nemo-latest",currency:"USD",promptTokenCostPer1M:.3,completionTokenCostPer1M:.3}];var Xo=(n=>(n.RekaCore="reka-core",n.RekaFlash="reka-flash",n.RekaEdge="reka-edge",n))(Xo||{});var Zo=[{name:"reka-core",currency:"usd",promptTokenCostPer1M:3,completionTokenCostPer1M:15},{name:"reka-flash",currency:"usd",promptTokenCostPer1M:.8,completionTokenCostPer1M:2},{name:"reka-edge",currency:"usd",promptTokenCostPer1M:.4,completionTokenCostPer1M:1}];var ei=(p=>(p.Llama31_8B_Instruct="Llama-3.1-8B-Instruct-q4f32_1-MLC",p.Llama31_70B_Instruct="Llama-3.1-70B-Instruct-q4f16_1-MLC",p.Llama32_1B_Instruct="Llama-3.2-1B-Instruct-q4f32_1-MLC",p.Llama32_3B_Instruct="Llama-3.2-3B-Instruct-q4f32_1-MLC",p.Mistral7B_Instruct="Mistral-7B-Instruct-v0.3-q4f32_1-MLC",p.Phi35_Mini_Instruct="Phi-3.5-mini-instruct-q4f32_1-MLC",p.Gemma2_2B_Instruct="gemma-2-2b-it-q4f32_1-MLC",p.Gemma2_9B_Instruct="gemma-2-9b-it-q4f32_1-MLC",p.Qwen2_5_0_5B_Instruct="Qwen2.5-0.5B-Instruct-q4f32_1-MLC",p.Qwen2_5_1_5B_Instruct="Qwen2.5-1.5B-Instruct-q4f32_1-MLC",p.Qwen2_5_3B_Instruct="Qwen2.5-3B-Instruct-q4f32_1-MLC",p.Qwen2_5_7B_Instruct="Qwen2.5-7B-Instruct-q4f32_1-MLC",p))(ei||{});var ti=[{name:"Llama-3.1-8B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:4096},{name:"Llama-3.1-70B-Instruct-q4f16_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:4096,isExpensive:!0},{name:"Llama-3.2-1B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:2048},{name:"Llama-3.2-3B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:2048},{name:"Mistral-7B-Instruct-v0.3-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:4096},{name:"Phi-3.5-mini-instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:128e3,maxTokens:4096},{name:"gemma-2-2b-it-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:8192,maxTokens:2048},{name:"gemma-2-9b-it-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:8192,maxTokens:2048},{name:"Qwen2.5-0.5B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:2048},{name:"Qwen2.5-1.5B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:2048},{name:"Qwen2.5-3B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:2048},{name:"Qwen2.5-7B-Instruct-q4f32_1-MLC",currency:"usd",promptTokenCostPer1M:0,completionTokenCostPer1M:0,contextWindow:32768,maxTokens:4096}];var ni=(f=>(f.Grok43="grok-4.3",f.Grok43Latest="grok-4.3-latest",f.GrokLatest="grok-latest",f.Grok420Reasoning="grok-4.20-reasoning",f.Grok420Reasoning0309="grok-4.20-0309-reasoning",f.Grok420NonReasoning="grok-4.20-non-reasoning",f.Grok420NonReasoning0309="grok-4.20-0309-non-reasoning",f.Grok420MultiAgent="grok-4.20-multi-agent",f.Grok420MultiAgent0309="grok-4.20-multi-agent-0309",f.Grok41FastReasoning="grok-4-1-fast-reasoning",f.Grok41FastNonReasoning="grok-4-1-fast-non-reasoning",f.GrokVoiceThinkFast="grok-voice-think-fast-1.0",f.GrokVoiceFast="grok-voice-fast-1.0",f.Grok3="grok-3",f.Grok3Mini="grok-3-mini",f.Grok3Fast="grok-3-fast",f.Grok3MiniFast="grok-3-mini-fast",f))(ni||{}),Kp=(e=>(e.GrokEmbedSmall="grok-embed-small",e))(Kp||{});var ri=[{name:"grok-4.3",currency:"USD",promptTokenCostPer1M:1.25,cacheReadTokenCostPer1M:.2,completionTokenCostPer1M:2.5,contextWindow:1e6,aliases:["grok-4.3-latest","grok-latest"],supported:{thinkingBudget:!0,structuredOutputs:!0}},{name:"grok-4.20-reasoning",currency:"USD",promptTokenCostPer1M:1.25,cacheReadTokenCostPer1M:.2,completionTokenCostPer1M:2.5,contextWindow:2e6,aliases:["grok-4.20-0309-reasoning","grok-4.20-reasoning-latest","grok-4.20","grok-4.20-0309"],supported:{structuredOutputs:!0}},{name:"grok-4.20-non-reasoning",currency:"USD",promptTokenCostPer1M:1.25,cacheReadTokenCostPer1M:.2,completionTokenCostPer1M:2.5,contextWindow:2e6,aliases:["grok-4.20-0309-non-reasoning","grok-4.20-non-reasoning-latest"],supported:{structuredOutputs:!0}},{name:"grok-4.20-multi-agent",currency:"USD",promptTokenCostPer1M:1.25,cacheReadTokenCostPer1M:.2,completionTokenCostPer1M:2.5,contextWindow:2e6,aliases:["grok-4.20-multi-agent-0309","grok-4.20-multi-agent-latest"],supported:{structuredOutputs:!0}},{name:"grok-4-1-fast-reasoning",currency:"USD",promptTokenCostPer1M:.2,cacheReadTokenCostPer1M:.05,completionTokenCostPer1M:.5,contextWindow:2e6,aliases:["grok-4-1-fast-reasoning-latest"],supported:{structuredOutputs:!0}},{name:"grok-4-1-fast-non-reasoning",currency:"USD",promptTokenCostPer1M:.2,cacheReadTokenCostPer1M:.05,completionTokenCostPer1M:.5,contextWindow:2e6,aliases:["grok-4-1-fast-non-reasoning-latest"],supported:{structuredOutputs:!0}},{name:"grok-voice-think-fast-1.0",currency:"USD"},{name:"grok-voice-fast-1.0",currency:"USD"},{name:"grok-3",currency:"USD",promptTokenCostPer1M:3,completionTokenCostPer1M:15},{name:"grok-3-mini",currency:"USD",promptTokenCostPer1M:.3,completionTokenCostPer1M:.5,supported:{thinkingBudget:!0}},{name:"grok-3-fast",currency:"USD",promptTokenCostPer1M:5,completionTokenCostPer1M:25},{name:"grok-3-mini-fast",currency:"USD",promptTokenCostPer1M:.6,completionTokenCostPer1M:4,supported:{thinkingBudget:!0}}];var CT={openai:{displayName:"OpenAI",defaultModel:"gpt-5-mini",defaultEmbedModel:"text-embedding-3-small",isDynamic:!1,modelInfo:or},"openai-responses":{displayName:"OpenAI Responses",defaultModel:"gpt-4o",defaultEmbedModel:"text-embedding-ada-002",isDynamic:!1,modelInfo:Bo},"azure-openai":{displayName:"Azure OpenAI",isDynamic:!0,modelInfo:[]},anthropic:{displayName:"Anthropic",defaultModel:"claude-3-7-sonnet-latest",isDynamic:!1,modelInfo:Mr},"google-gemini":{displayName:"Google Gemini",defaultModel:"gemini-2.5-flash",defaultEmbedModel:"gemini-embedding-2",isDynamic:!1,modelInfo:Jo},cohere:{displayName:"Cohere",defaultModel:"command-r-plus",isDynamic:!1,modelInfo:Wo},deepseek:{displayName:"DeepSeek",defaultModel:"deepseek-v4-flash",isDynamic:!1,modelInfo:jn},"deepseek-responses":{displayName:"DeepSeek Responses",defaultModel:"deepseek-v4-flash",isDynamic:!1,modelInfo:jn},mistral:{displayName:"Mistral AI",defaultModel:"mistral-small-latest",isDynamic:!1,modelInfo:Qo},reka:{displayName:"Reka",defaultModel:"reka-core",isDynamic:!1,modelInfo:Zo},grok:{displayName:"xAI Grok",defaultModel:"grok-3",isDynamic:!1,modelInfo:ri},webllm:{displayName:"WebLLM",defaultModel:"Llama-3.2-3B-Instruct-q4f32_1-MLC",isDynamic:!1,modelInfo:ti}},bT=r=>{let e={...r};return r.aliases&&(e.aliases=[...r.aliases]),r.supported&&(e.supported={...r.supported}),r.notSupported&&(e.notSupported={...r.notSupported}),r.audio&&(e.audio={...r.audio}),e},RT=r=>{let e=UC(r),t=r.name.toLowerCase();return{thinkingBudget:r.supported?.thinkingBudget??!1,showThoughts:r.supported?.showThoughts??!1,structuredOutputs:r.supported?.structuredOutputs??!1,temperature:!(r.notSupported?.temperature??!1),topP:!(r.notSupported?.topP??!1),audioInput:r.audio?.input??e==="audio",audioOutput:r.audio?.output??(e==="audio"&&!t.includes("whisper")&&!t.includes("transcription"))}},UC=r=>{let e=r.name.toLowerCase();return r.audio?.input||r.audio?.output||e.includes("audio")||e.includes("realtime")||e.includes("voice")||e.includes("whisper")||e.includes("native-audio")?"audio":e.includes("embedding")||e.includes("embed")?"embeddings":e.includes("code")||e.includes("codex")||e.includes("coder")||e.includes("codestral")?"code":"text"},wT=r=>{if(r===void 0)return;let e=Array.isArray(r)?r:[r];if(!e.includes("all"))return new Set(e)},vT=(r,e)=>!e||e.has(r.type)?!0:e.has("text")&&r.type==="code",Zc=r=>{let e=typeof r?.promptTokenCostPer1M=="number",t=typeof r?.completionTokenCostPer1M=="number";return!e&&!t?Number.POSITIVE_INFINITY:(r?.promptTokenCostPer1M??0)+(r?.completionTokenCostPer1M??0)},ST=(r,e)=>{let t=Zc(r)-Zc(e);return t!==0?t:r.name.localeCompare(e.name)},kT=(r,e,t,n)=>{let o=bT(n),i=[e,t].filter(s=>s!==void 0);return{...o,provider:r,type:UC(n),isDefault:i.some(s=>n.name===s||(n.aliases?.includes(s)??!1)),capabilities:RT(n)}},DC=r=>{let e=wT(r?.type);return Object.entries(CT).map(([t,{displayName:n,defaultModel:o,defaultEmbedModel:i,isDynamic:s,modelInfo:a}])=>{let c=a.map(l=>kT(t,o,i,l)).filter(l=>vT(l,e)).sort(ST);return{name:t,displayName:n,...o!==void 0?{defaultModel:o}:void 0,...i!==void 0?{defaultEmbedModel:i}:void 0,isDynamic:s,models:c}}).sort((t,n)=>{let o=Zc(t.models[0])-Zc(n.models[0]);return o!==0?o:t.displayName.localeCompare(n.displayName)})};var Wp=()=>structuredClone({model:"command-r-plus",embedModel:"embed-english-v3.0",...Ue()}),jC=()=>structuredClone({model:"command-r",embedModel:"embed-english-v3.0",...kt()}),IT={functions:!0,streaming:!0,hasThinkingBudget:!1,hasShowThoughts:!1,media:{images:{supported:!1,formats:[],maxSize:0,detailLevels:[]},audio:{supported:!1,formats:[],maxDuration:0},files:{supported:!1,formats:[],maxSize:0,uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0},TT=r=>r?.map(e=>{let t=e,n=t?.config;if(!n)return e;let o={};n.maxTokens!==void 0&&(o.maxTokens=n.maxTokens),n.temperature!==void 0&&(o.temperature=n.temperature),n.topP!==void 0&&(o.topP=n.topP),n.presencePenalty!==void 0&&(o.presencePenalty=n.presencePenalty),n.frequencyPenalty!==void 0&&(o.frequencyPenalty=n.frequencyPenalty);let i=n.stopSequences??n.stop;return i!==void 0&&(o.stopSequences=i),n.n!==void 0&&(o.n=n.n),n.stream!==void 0&&(o.stream=n.stream),Object.keys(o).length>0?{...t,modelConfig:{...t.modelConfig??{},...o}}:e}),oi=class extends dt{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("Cohere API key not set");let s={...Wp(),...t};i=[...Wo,...i??[]],super({apiKey:e,config:s,options:n,apiURL:"https://api.cohere.ai/compatibility/v1",modelInfo:i,models:TT(o),supportFor:IT}),super.setName("Cohere")}};var PT=r=>{switch(String(r)){case"deepseek-v4-flash":case"deepseek-v4-pro":case"deepseek-reasoner":return!1;default:return!0}},el=r=>{switch(String(r)){case"deepseek-v4-flash":case"deepseek-v4-pro":return!0;default:return!1}},MT=(r,e)=>{let t={...r};if(el(r.model)){let n=e.thinkingTokenBudget!=="none"&&t.reasoning_effort!=="none"&&(e.thinkingTokenBudget!==void 0||t.reasoning_effort!==void 0);if(t.thinking={type:n?"enabled":"disabled"},!n)delete t.reasoning_effort;else{switch(t.reasoning_effort){case"xhigh":t.reasoning_effort="max";break;case"minimal":case"low":case"medium":case void 0:t.reasoning_effort="high";break}delete t.temperature,delete t.top_p,delete t.presence_penalty,delete t.frequency_penalty}}return PT(r.model)||(t.tool_choice==="none"&&delete t.tools,delete t.tool_choice),t},Jp=()=>structuredClone({model:"deepseek-v4-flash",...Ue()}),GC=()=>structuredClone({model:"deepseek-v4-pro",...kt()}),ET=r=>({functions:!0,streaming:!0,structuredOutputs:!1,hasThinkingBudget:el(r),hasShowThoughts:el(r),media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:el(r),multiTurn:!0}),ii=class extends dt{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("DeepSeek API key not set");let s={...Jp(),...t};i=[...jn,...i??[]],super({apiKey:e,config:s,options:n,apiURL:"https://api.deepseek.com",modelInfo:i,chatReqUpdater:MT,supportFor:ET,models:o}),super.setName("DeepSeek")}};var OT=r=>["o1","o1-mini","o1-pro","o3","o3-mini","o3-pro","o4-mini"].includes(r),nl=class{constructor(e,t,n){this.config=e;this.streamingUsage=t;this.responsesReqUpdater=n}tokensUsed;getTokenUsage(){return this.tokensUsed}getModelConfig(){let{config:e}=this;return{maxTokens:e.maxTokens,temperature:e.temperature,stopSequences:e.stopSequences,topP:e.topP,stream:e.stream}}mapInternalContentToResponsesInput(e,t){let n=[];for(let o of e){if(o.type==="text"){t==="assistant"?n.push({type:"output_text",text:o.text}):n.push({type:"input_text",text:o.text});continue}if(t==="assistant")continue;if(o.type==="image"){let s=`data:${o.mimeType};base64,${o.image}`;n.push({type:"input_image",image_url:{url:s,details:o.details??"auto"}});continue}if(o.type==="audio"){n.push({type:"input_audio",input_audio:{data:o.data,format:o.format==="wav"?"wav":void 0}});continue}let i=o;throw new Error(`Unsupported content part: ${JSON.stringify(i)}`)}return n}mapFunctionResultContent(e,t){return e?.length?e.map(n=>n.type==="text"?{type:"input_text",text:n.text}:n.type==="image"?{type:"input_image",image_url:{url:`data:${n.mimeType};base64,${n.image}`,details:"auto"}}:n.type==="audio"?{type:"input_audio",input_audio:{data:n.data}}:n.type==="file"?{type:"input_file",file_data:`data:${n.mimeType};base64,${n.data}`,filename:n.filename}:{type:"input_text",text:n.cachedContent??[n.title,n.description,n.url].filter(Boolean).join(`
|
|
1259
|
+
`)}):t}createResponsesReqInternalInput(e,t=!1){let n=[];for(let o of e){if(t&&o.role==="system")continue;let i;if(o.role==="system"||o.role==="user"||o.role==="assistant"&&o.content)if(typeof o.content=="string")o.role==="system"?i=o.content:o.role==="assistant"?i=[{type:"output_text",text:o.content}]:i=[{type:"input_text",text:o.content}];else if(Array.isArray(o.content))i=this.mapInternalContentToResponsesInput(o.content,o.role==="assistant"?"assistant":"user");else{if(!(o.role==="assistant"&&!o.content&&o.functionCalls))throw new Error(`Invalid content type for role ${o.role}`);i=""}else o.role,i="";switch(o.role){case"system":n.push({type:"message",role:"system",content:i});break;case"user":n.push({type:"message",role:"user",content:i,name:o.name});break;case"assistant":if(o.thought||o.thoughtBlocks?.length){let s=o.thought??o.thoughtBlocks?.map(a=>a.data).join("");s&&n.push({type:"reasoning",content:s})}if(o.content||o.functionCalls){let s={type:"message",role:"assistant",content:""};if(o.content&&(s.content=i),o.name&&(s.name=o.name),o.content&&n.push(s),o.functionCalls)for(let a of o.functionCalls)n.push({type:"function_call",call_id:a.id,name:a.function.name,arguments:typeof a.function.params=="object"?JSON.stringify(a.function.params):a.function.params||""})}break;case"function":n.push({type:"function_call_output",call_id:o.functionId,output:this.mapFunctionResultContent(o.content,o.result)});break;default:{let s=o.role;throw new Error(`Invalid role in chat prompt: ${s}`)}}}return n}createChatReq(e,t){let n=e.model,o={name:"/responses"},i=null,s=!1;if(e.chatPrompt){for(let x of e.chatPrompt)if(x.role==="system"&&typeof x.content=="string"){i=x.content,s=!0;break}}let a=i??this.config.systemPrompt??null,c=e.functions?.map(x=>({type:"function",name:x.name,description:x.description,parameters:x.parameters??{}})),l=[],u=OT(n),d=this.config.reasoningSummary;t?.showThoughts?d||(d="auto"):d=void 0;let p=this.config.reasoningEffort;t?.thinkingTokenBudget&&(p=CC(n,t.thinkingTokenBudget));let m={model:n,input:"",instructions:a,tools:c?.length?c:void 0,tool_choice:e.functionCall==="none"||e.functionCall==="auto"||e.functionCall==="required"?e.functionCall:typeof e.functionCall=="object"&&e.functionCall.function?{type:"function",name:e.functionCall.function.name}:void 0,...u?{max_output_tokens:e.modelConfig?.maxTokens??this.config.maxTokens??void 0}:{...e.modelConfig?.temperature!==void 0?{temperature:e.modelConfig.temperature}:{},...e.modelConfig?.topP!==void 0?{top_p:e.modelConfig.topP}:{},presence_penalty:e.modelConfig?.presencePenalty??this.config.presencePenalty??void 0,frequency_penalty:e.modelConfig?.frequencyPenalty??this.config.frequencyPenalty??void 0,max_output_tokens:e.modelConfig?.maxTokens??this.config.maxTokens??void 0},stream:e.modelConfig?.stream??this.config.stream??!1,background:void 0,include:l.length>0?l:void 0,metadata:void 0,parallel_tool_calls:this.config.parallelToolCalls,previous_response_id:void 0,...p?{reasoning:{effort:p,...p==="none"?{}:{summary:d}}}:{},service_tier:this.config.serviceTier,store:this.config.store,text:void 0,truncation:void 0,user:this.config.user,seed:this.config.seed};this.config.user&&(m.user=this.config.user),this.config.parallelToolCalls!==void 0&&(m.parallel_tool_calls=this.config.parallelToolCalls),e.responseFormat?m.text={format:e.responseFormat.type==="json_schema"?{type:"json_schema",json_schema:e.responseFormat.schema}:{type:e.responseFormat.type}}:this.config.responseFormat&&(m.text={format:{type:this.config.responseFormat}}),this.config.seed&&(m.seed=this.config.seed);let g=e.chatPrompt?this.createResponsesReqInternalInput(e.chatPrompt,s):[];if(g.length>0)m.input=g;else if(e.chatPrompt&&e.chatPrompt.length===1&&e.chatPrompt[0]?.role==="user"&&e.chatPrompt[0]?.content&&typeof e.chatPrompt[0].content=="string"&&!a)m.input=e.chatPrompt[0].content;else if(g.length===0&&!a)throw new Error("Responses API request must have input or instructions.");m.reasoning?.effort||(m.reasoning=void 0);let h=m;return this.responsesReqUpdater&&(h=this.responsesReqUpdater(h)),[o,h]}createChatResp(e){let{id:t,output:n,usage:o}=e;this.tokensUsed=Dn(o);let i={},s=[];for(let a of n??[])switch(a.type){case"message":i.id=a.id,i.content=Qp(a.content,t),i.finishReason=a.status==="completed"?"stop":"content_filter",i.citations=tl(a.content);break;case"reasoning":i.id=a.id;{let c=Yp(a);c&&(i.thought=i.thought?`${i.thought}${c}`:c,i.thoughtBlocks=[...i.thoughtBlocks??[],{data:c,encrypted:!!a.encrypted_content}])}break;case"file_search_call":i.id=a.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"file_search",params:{queries:a.queries,results:a.results}}}],i.finishReason="function_call";break;case"web_search_call":i.id=a.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"web_search",params:{queries:a.queries}}}],i.finishReason="function_call";break;case"computer_call":i.id=a.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"computer_use",params:{action:a.action}}}],i.finishReason="function_call";break;case"code_interpreter_call":i.id=a.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"code_interpreter",params:{code:a.code,results:a.results}}}],i.finishReason="function_call";break;case"image_generation_call":i.id=a.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"image_generation",params:{result:a.result}}}],i.finishReason="function_call";break;case"local_shell_call":i.id=a.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"local_shell",params:{action:a.action}}}],i.finishReason="function_call";break;case"mcp_call":i.id=a.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"mcp",params:{name:a.name,args:a.args,serverLabel:a.server_label,output:a.output,error:a.error}}}],i.finishReason="function_call";break;case"function_call":i.id=a.id,s.push({id:a.call_id,type:"function",function:{name:a.name,params:a.arguments}}),i.finishReason="function_call";break}return s.length>0&&(i.functionCalls=s),{results:[{...i,index:0}],remoteId:t}}createChatStreamResp=(e,t)=>{let n=e,o=t,i={index:0,id:"",content:"",finishReason:"stop"},s=typeof n.response?.id=="string"?n.response.id:void 0;switch(n.type){case"response.created":case"response.in_progress":case"response.queued":s=n.response.id,i.id=`${n.response.id}_res_0`;break;case"response.output_item.added":switch(n.item.type){case"message":i.id=n.item.id,i.content=Qp(n.item.content,n.item.id),i.citations=tl(n.item.content);break;case"function_call":{let a=n.item;o.functionCallIds??=new Map,o.functionCallIds.set(a.id,a.call_id),i.id=n.item.id,i.functionCalls=[{id:a.call_id,type:"function",function:{name:a.name,params:a.arguments}}]}break;case"file_search_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"file_search",params:{queries:a.queries||[],results:a.results?.map(c=>({fileId:c.file_id,filename:c.filename,score:c.score,text:c.text,attributes:c.attributes}))}}}]}break;case"web_search_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"web_search",params:{queries:a.queries||[]}}}]}break;case"computer_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"computer_use",params:{action:a.action||{}}}}]}break;case"code_interpreter_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"code_interpreter",params:{code:a.code||"",results:a.results}}}]}break;case"image_generation_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"image_generation",params:{result:a.result}}}]}break;case"local_shell_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"local_shell",params:{action:a.action||{}}}}]}break;case"mcp_call":{let a=n.item;i.id=n.item.id,i.functionCalls=[{id:a.id,type:"function",function:{name:"mcp",params:{name:a.name||"",args:a.args||"",serverLabel:a.server_label||"",output:a.output,error:a.error}}}]}break;case"reasoning":{i.id=n.item.id;let a=Yp(n.item);a&&(i.thought=a,i.thoughtBlocks=[{data:a,encrypted:!!n.item.encrypted_content}]);break}}break;case"response.content_part.added":i.id=n.item_id,i.content=Qp([n.part],n.item_id),i.citations=tl([n.part]);break;case"response.output_text.delta":i.id=n.item_id,i.content=n.delta;break;case"response.output_text.done":break;case"response.function_call_arguments.delta":{let a=o.functionCallIds?.get(n.item_id)??n.item_id;i.id=n.item_id,i.functionCalls=[{id:a,type:"function",function:{name:"",params:n.delta}}]}break;case"response.reasoning_summary_text.delta":i.id=n.item_id,i.thought=n.delta,i.thoughtBlocks=[{data:n.delta,encrypted:!1}];break;case"response.reasoning_text.delta":i.id=n.item_id,i.thought=n.delta,i.thoughtBlocks=[{data:n.delta,encrypted:!1}];break;case"response.reasoning_text.done":i.id=n.item_id,i.thought=n.text,i.thoughtBlocks=[{data:n.text,encrypted:!1}];break;case"response.file_search_call.in_progress":case"response.file_search_call.searching":i.id=n.item_id,i.finishReason="function_call";break;case"response.file_search_call.completed":i.id=n.item_id,i.finishReason="function_call";break;case"response.web_search_call.in_progress":case"response.web_search_call.searching":i.id=n.item_id,i.finishReason="function_call";break;case"response.web_search_call.completed":i.id=n.item_id,i.finishReason="function_call";break;case"response.image_generation_call.in_progress":case"response.image_generation_call.generating":i.id=n.item_id,i.finishReason="function_call";break;case"response.image_generation_call.completed":i.id=n.item_id,i.finishReason="function_call";break;case"response.image_generation_call.partial_image":i.id=n.item_id,i.finishReason="function_call";break;case"response.mcp_call.in_progress":i.id=n.item_id,i.finishReason="function_call";break;case"response.mcp_call.arguments.delta":i.id=n.item_id,i.functionCalls=[{id:n.item_id,type:"function",function:{name:"",params:n.delta}}];break;case"response.mcp_call.arguments.done":i.id=n.item_id,i.functionCalls=[{id:n.item_id,type:"function",function:{name:"",params:n.arguments}}];break;case"response.mcp_call.completed":case"response.mcp_call.failed":i.id="mcp_call_event",i.finishReason="function_call";break;case"response.mcp_list_tools.in_progress":case"response.mcp_list_tools.completed":case"response.mcp_list_tools.failed":i.id="mcp_list_tools_event",i.finishReason="function_call";break;case"response.output_item.done":switch(n.item.type){case"message":if(i.id=n.item.id,i.finishReason=n.item.status==="completed"?"stop":"error",!i.citations||i.citations.length===0){let a=tl(n.item.content||[]);a&&(i.citations=a)}break;case"function_call":case"file_search_call":case"web_search_call":case"computer_call":case"code_interpreter_call":case"image_generation_call":case"local_shell_call":case"mcp_call":i.id=n.item.id,i.finishReason="function_call";break;case"reasoning":{i.id=n.item.id;let a=Yp(n.item);a&&(i.thought=a,i.thoughtBlocks=[{data:a,encrypted:!!n.item.encrypted_content}]);break}}break;case"response.completed":this.tokensUsed=Dn(n.response.usage),s=n.response.id,i.id=`${n.response.id}_completed`,i.finishReason="stop";break;case"response.failed":s=n.response.id,i.id=`${n.response.id}_failed`,i.finishReason="error";break;case"response.incomplete":s=n.response.id,i.id=`${n.response.id}_incomplete`,i.finishReason="length";break;case"error":i.id="error",i.content=`Error: ${n.message}`,i.finishReason="error";break;default:i.id="unknown";break}return s?o.remoteId=s:s=o.remoteId,{results:[i],remoteId:s}};createEmbedReq(e){let t=e.embedModel;if(!t)throw new Error("Embed model not set");if(!e.texts||e.texts.length===0)throw new Error("Embed texts is empty");let n={name:"/embeddings"},o={model:t,input:e.texts,dimensions:this.config.dimensions};return[n,o]}},Yp=r=>{if(typeof r.content=="string")return r.content;if(Array.isArray(r.content)){let e=r.content.map(t=>t.text).join("");if(e)return e}return r.encrypted_content?r.encrypted_content:r.summary?.map(e=>e.text).join(`
|
|
1260
1260
|
`)??""},Qp=(r,e)=>{let t=r.filter(n=>n.type==="refusal");if(t.length>0){let n=t.map(o=>o.refusal).join(`
|
|
1261
1261
|
`);throw new Ke(n,void 0,e)}return r.filter(n=>n.type==="output_text").map(n=>n.text).join(`
|
|
1262
|
-
`)};function tl(r){let e=[];for(let t of r??[])if(t?.type==="output_text"&&Array.isArray(t.annotations))for(let n of t.annotations)n&&n.type==="url_citation"&&typeof n.url=="string"&&e.push({url:n.url,title:n.title,description:n.description});return e.length?e:void 0}var Os=()=>({model:"gpt-4o",embedModel:"text-embedding-ada-002",temperature:.7,topP:1,stream:!0}),BC=()=>({...Os(),model:"gpt-4o",temperature:.5}),zC=()=>({...Os(),model:"gpt-4o",temperature:.9}),Dr=class extends St{constructor({apiKey:e,config:t,options:n,apiURL:o,modelInfo:i=[],models:s,responsesReqUpdater:a,supportFor:c={functions:!0,streaming:!0,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0}}){if(!e||e==="")throw new Error("OpenAI API key not set");let l=new nl(t,n?.streamingUsage??!0,a),u=s?.map(d=>{let p=d,m=p?.config;if(!m)return d;let g={};m.maxTokens!==void 0&&(g.maxTokens=m.maxTokens),m.temperature!==void 0&&(g.temperature=m.temperature),m.topP!==void 0&&(g.topP=m.topP),m.presencePenalty!==void 0&&(g.presencePenalty=m.presencePenalty),m.frequencyPenalty!==void 0&&(g.frequencyPenalty=m.frequencyPenalty);let h=m.stopSequences??m.stop;h!==void 0&&(g.stopSequences=h),m.n!==void 0&&(g.n=m.n),m.stream!==void 0&&(g.stream=m.stream);let x={...p};Object.keys(g).length>0&&(x.modelConfig={...p.modelConfig??{},...g});let f=m?.thinking?.thinkingTokenBudget;if(typeof f=="number"){let y=[["minimal",200],["low",800],["medium",5e3],["high",1e4],["highest",24500]],A="minimal",b=Number.POSITIVE_INFINITY;for(let[w,S]of y){let F=Math.abs(f-S);F<b&&(b=F,A=w)}x.thinkingTokenBudget=A}return m?.thinking?.includeThoughts!==void 0&&(x.showThoughts=!!m.thinking.includeThoughts),x});super(l,{name:"OpenAI",apiURL:o||"https://api.openai.com/v1",headers:async()=>({Authorization:`Bearer ${e}`}),modelInfo:i,defaults:{model:t.model??"gpt-4o",embedModel:t.embedModel??"text-embedding-ada-002"},options:n,supportFor:c,models:u??s})}},si=class extends Dr{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("OpenAI API key not set");i=[...Bo,...i??[]];let s=a=>{let c=it({model:a,modelInfo:i,models:o});return{functions:!0,streaming:!0,hasThinkingBudget:c?.supported?.thinkingBudget??!1,hasShowThoughts:c?.supported?.showThoughts??!1,structuredOutputs:c?.supported?.structuredOutputs??!1,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0}};super({apiKey:e,config:{...Os(),...t},options:n,modelInfo:i,models:o,supportFor:s})}};var FT=(r,e)=>{let t=it({model:r,modelInfo:e});return{functions:!0,streaming:!0,hasThinkingBudget:t?.supported?.thinkingBudget??!0,hasShowThoughts:t?.supported?.showThoughts??!0,structuredOutputs:t?.supported?.structuredOutputs??!0,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[],output:{supported:!1,formats:[]}},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!0,multiTurn:!0}},_T=r=>{let e={...r};return delete e.include,delete e.previous_response_id,delete e.store,delete e.parallel_tool_calls,e.reasoning&&(e.reasoning=e.reasoning.effort?{effort:e.reasoning.effort}:void 0),e},Xp=()=>structuredClone({model:"deepseek-v4-flash",stream:!0}),ai=class extends Dr{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("DeepSeek API key not set");let s=[...jn,...i??[]],a=c=>FT(c,s);super({apiKey:e,config:{...Xp(),...t},options:n,apiURL:"https://api.deepseek.com",modelInfo:s,models:o,responsesReqUpdater:_T,supportFor:a}),super.setName("DeepSeek Responses")}};var NT=r=>`wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.${r.live?.enableAffectiveDialog||r.live?.proactiveAudio?"v1alpha":"v1beta"}.GenerativeService.BidiGenerateContent`,em=()=>structuredClone({...Ue(),model:"gemini-2.5-flash-native-audio-preview-12-2025",embedModel:"text-embedding-005",audio:ks(),stream:!1}),tm=r=>r==="gemini-2.5-flash-native-audio-preview-12-2025"||r==="gemini-3.1-flash-live-preview"||r.includes("native-audio")||r.includes("-live-")||r.startsWith("gemini-live-"),_s=(r,e)=>{let t=bt(r,e);return qt(t)?bt(ks(),t):t},Ns=(r,e,t)=>tm(r)&&qt(_s(e,t)),nm=r=>{if(!("inlineData"in r))return;let{mimeType:e}=r.inlineData;if(!e.startsWith("audio/"))return;let t=Ct(e);if(t!=="pcm"&&t!=="pcm16")throw new Error(`Gemini Live audio output requires PCM audio input, received ${e}`)},rl=r=>{if(!("inlineData"in r)||!r.inlineData.mimeType.startsWith("audio/"))return;let e=Ct(r.inlineData.mimeType),t=r.inlineData.mimeType.match(/rate=(\d+)/)?.[1];return{data:r.inlineData.data,mimeType:r.inlineData.mimeType,format:e==="pcm"?"pcm16":e,sampleRate:t?Number.parseInt(t,10):void 0,channels:1,isDelta:r.isDelta===!0}},ol=r=>({name:"gemini-live-audio",localCall:async(e,t)=>t?GT(r):await qC(r)}),LT=({model:r,request:e,audio:t})=>{let n=t.output,o=t.live,i=typeof n?.voice=="string"?{voiceConfig:{prebuiltVoiceConfig:{voiceName:n.voice}}}:void 0,s={temperature:e.generationConfig.temperature,topP:e.generationConfig.topP,topK:e.generationConfig.topK,frequencyPenalty:e.generationConfig.frequencyPenalty,maxOutputTokens:e.generationConfig.maxOutputTokens,thinkingConfig:e.generationConfig.thinkingConfig,responseModalities:["AUDIO"],...i?{speechConfig:i}:{}};return{setup:{model:`models/${r}`,generationConfig:s,...e.systemInstruction?{systemInstruction:e.systemInstruction}:{},...e.tools?{tools:e.tools}:{},...e.toolConfig?{toolConfig:e.toolConfig}:{},...n?.includeTranscript!==!1?{outputAudioTranscription:{}}:{},...o?.enableAffectiveDialog?{enableAffectiveDialog:!0}:{},...o?.proactiveAudio?{proactivity:{proactiveAudio:!0}}:{}}}},$T=r=>{let e=[],t=[];for(let n of r){let o=[];for(let i of n.parts){if("inlineData"in i&&i.inlineData.mimeType.startsWith("audio/")){nm(i),t.push({data:i.inlineData.data,mimeType:i.inlineData.mimeType});continue}o.push(i)}o.length>0&&e.push({...n,parts:o})}return{clientContents:e,audioParts:t}},UT=(r,e)=>{let{clientContents:t,audioParts:n}=$T(e.contents);t.length>0&&r.send(JSON.stringify({clientContent:{turns:t,turnComplete:n.length===0}}));for(let o of n)r.send(JSON.stringify({realtimeInput:{audio:o}}));n.length>0&&r.send(JSON.stringify({realtimeInput:{audioStreamEnd:!0}}))},Fs=({audioData:r,audio:e,transcript:t,text:n,functionCalls:o,usageMetadata:i,isDelta:s})=>{let a=e.output,c=a?.mimeType??$t(a?.format,a?.sampleRate,"audio/pcm;rate=24000"),l=[];(n||t)&&l.push({text:n??t??""}),r&&l.push({inlineData:{mimeType:c,data:r},...s?{isDelta:!0}:{}});for(let u of o??[])l.push({functionCall:{name:u.name,args:u.args}});return{candidates:[{content:{role:"model",parts:l},finishReason:"STOP",citationMetadata:{citations:[]}}],usageMetadata:i??{promptTokenCount:0,candidatesTokenCount:0,totalTokenCount:0,thoughtsTokenCount:0}}},DT=r=>{if(r)return{promptTokenCount:r.promptTokenCount??0,candidatesTokenCount:r.candidatesTokenCount??r.responseTokenCount??0,totalTokenCount:r.totalTokenCount??0,thoughtsTokenCount:r.thoughtsTokenCount??0,cachedContentTokenCount:r.cachedContentTokenCount}},jT=r=>{let e=r?.data??r;return typeof e=="string"?JSON.parse(e):e},Zp=(r,e,t)=>{if(r.addEventListener){r.addEventListener(e,t);return}r[`on${e}`]=t},qC=async(r,e)=>{let t=globalThis.WebSocket;if(!t)throw new Error("Gemini Live audio requires globalThis.WebSocket");let n=r.audio,o=n.live?.turnTimeoutMs??3e4,i={audioChunks:[],textChunks:[],outputTranscripts:[],functionCalls:[]},s=new t(`${NT(n)}?key=${encodeURIComponent(r.apiKey)}`);return await new Promise((a,c)=>{let l=!1,u=m=>{if(!l){l=!0,clearTimeout(p);try{s.close()}catch{}a(m)}},d=m=>{if(!l){l=!0,clearTimeout(p);try{s.close()}catch{}c(m instanceof Error?m:new Error(String(m)))}},p=setTimeout(()=>{d(new Error(`Gemini Live audio turn timed out after ${o}ms`))},o);Zp(s,"open",()=>{s.send(JSON.stringify(LT(r)))}),Zp(s,"error",m=>{d(m?.error??m?.message??"Gemini Live WebSocket error")}),Zp(s,"message",m=>{try{let g=jT(m);if(g.setupComplete){UT(s,r.request);return}g.usageMetadata&&(i.usageMetadata=DT(g.usageMetadata));let h=g.toolCall?.functionCalls;if(Array.isArray(h)){for(let A of h)if(typeof A?.name=="string"){let b={name:A.name,args:A.args??{}};i.functionCalls.push(b),e?.(Fs({audio:n,functionCalls:[b],isDelta:!0}))}}let x=g.serverContent;if(!x)return;let f=x.outputTranscription?.text;typeof f=="string"&&(i.outputTranscripts.push(f),e?.(Fs({audio:n,transcript:f,isDelta:!0})));let y=x.modelTurn?.parts;if(Array.isArray(y))for(let A of y){if(typeof A.text=="string"){i.textChunks.push(A.text),e?.(Fs({audio:n,text:A.text,isDelta:!0}));continue}let b=A.inlineData??A.inline_data,w=b?.mimeType??b?.mime_type;b?.data&&typeof w=="string"&&w.startsWith("audio/")&&(i.audioChunks.push(b.data),e?.(Fs({audio:n,audioData:b.data,isDelta:!0})))}if(x.turnComplete){let A=i.outputTranscripts.join(""),b=i.textChunks.join("");u(Fs({audio:n,audioData:Er(i.audioChunks),transcript:A||void 0,text:b||void 0,functionCalls:i.functionCalls,usageMetadata:i.usageMetadata}))}}catch(g){d(g)}})})},GT=r=>new ReadableStream({start(e){qC(r,t=>e.enqueue(t)).then(t=>{e.enqueue(t),e.close()}).catch(t=>e.error(t))}});var jr=r=>r.includes("gemini-3"),VC=r=>r.includes("gemini-3")&&r.includes("pro"),HC=r=>r==="gemini-3.7-flash"||r==="gemini-3.6-flash"||r==="gemini-3.5-flash-lite",BT=(r,e)=>e?"v1beta1":"v1",il=r=>{if(!r||typeof r!="object")return r;let e={...r},t=Array.isArray(e.type)&&e.type.length===2&&e.type.includes("null");return delete e.default,delete e.optional,delete e.oneOf,delete e.anyOf,Array.isArray(e.type)&&!t&&(e.type=e.type.includes("object")?"object":e.type[0]??"string"),e.properties&&typeof e.properties=="object"&&(e.properties=Object.fromEntries(Object.entries(e.properties).map(([n,o])=>[n,il(o)]))),e.items&&(e.items=il(e.items)),e},zT=(r,e,t)=>{for(let n=e-1;n>=0;n--){let o=r[n];if(o?.role!=="assistant"||!o.functionCalls)continue;let i=o.functionCalls.find(s=>s.id===t);if(i?.function?.name)return i.function.name}return t},rm=(r,e,t)=>{let n=t.protocolResult?.value,o=[{functionResponse:{name:zT(r,e,t.functionId),response:{result:t.result,...n?.structuredContent?{structuredContent:n.structuredContent}:{}}}}];for(let i of t.content??[])i.type==="text"?o.push({text:i.text}):i.type==="image"?o.push({inlineData:{mimeType:i.mimeType,data:i.image}}):i.type==="audio"?o.push({inlineData:{mimeType:i.mimeType??"application/octet-stream",data:i.data}}):i.type==="file"?o.push({inlineData:{mimeType:i.mimeType,data:i.data}}):o.push({text:i.cachedContent??[i.title,i.description,i.url].filter(Boolean).join(`
|
|
1262
|
+
`)};function tl(r){let e=[];for(let t of r??[])if(t?.type==="output_text"&&Array.isArray(t.annotations))for(let n of t.annotations)n&&n.type==="url_citation"&&typeof n.url=="string"&&e.push({url:n.url,title:n.title,description:n.description});return e.length?e:void 0}var Os=()=>({model:"gpt-4o",embedModel:"text-embedding-ada-002",temperature:.7,topP:1,stream:!0}),BC=()=>({...Os(),model:"gpt-4o",temperature:.5}),zC=()=>({...Os(),model:"gpt-4o",temperature:.9}),Dr=class extends St{constructor({apiKey:e,config:t,options:n,apiURL:o,modelInfo:i=[],models:s,responsesReqUpdater:a,supportFor:c={functions:!0,streaming:!0,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0}}){if(!e||e==="")throw new Error("OpenAI API key not set");let l=new nl(t,n?.streamingUsage??!0,a),u=s?.map(d=>{let p=d,m=p?.config;if(!m)return d;let g={};m.maxTokens!==void 0&&(g.maxTokens=m.maxTokens),m.temperature!==void 0&&(g.temperature=m.temperature),m.topP!==void 0&&(g.topP=m.topP),m.presencePenalty!==void 0&&(g.presencePenalty=m.presencePenalty),m.frequencyPenalty!==void 0&&(g.frequencyPenalty=m.frequencyPenalty);let h=m.stopSequences??m.stop;h!==void 0&&(g.stopSequences=h),m.n!==void 0&&(g.n=m.n),m.stream!==void 0&&(g.stream=m.stream);let x={...p};Object.keys(g).length>0&&(x.modelConfig={...p.modelConfig??{},...g});let f=m?.thinking?.thinkingTokenBudget;if(typeof f=="number"){let y=[["minimal",200],["low",800],["medium",5e3],["high",1e4],["highest",24500]],A="minimal",b=Number.POSITIVE_INFINITY;for(let[w,S]of y){let F=Math.abs(f-S);F<b&&(b=F,A=w)}x.thinkingTokenBudget=A}return m?.thinking?.includeThoughts!==void 0&&(x.showThoughts=!!m.thinking.includeThoughts),x});super(l,{name:"OpenAI",apiURL:o||"https://api.openai.com/v1",headers:async()=>({Authorization:`Bearer ${e}`}),modelInfo:i,defaults:{model:t.model??"gpt-4o",embedModel:t.embedModel??"text-embedding-ada-002"},options:n,supportFor:c,models:u??s})}},si=class extends Dr{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("OpenAI API key not set");i=[...Bo,...i??[]];let s=a=>{let c=it({model:a,modelInfo:i,models:o});return{functions:!0,streaming:!0,hasThinkingBudget:c?.supported?.thinkingBudget??!1,hasShowThoughts:c?.supported?.showThoughts??!1,structuredOutputs:c?.supported?.structuredOutputs??!1,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0}};super({apiKey:e,config:{...Os(),...t},options:n,modelInfo:i,models:o,supportFor:s})}};var FT=(r,e)=>{let t=it({model:r,modelInfo:e});return{functions:!0,streaming:!0,hasThinkingBudget:t?.supported?.thinkingBudget??!0,hasShowThoughts:t?.supported?.showThoughts??!0,structuredOutputs:t?.supported?.structuredOutputs??!1,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[],output:{supported:!1,formats:[]}},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!0,multiTurn:!0}},_T=r=>{let e={...r};return delete e.include,delete e.previous_response_id,delete e.store,delete e.parallel_tool_calls,e.reasoning&&(e.reasoning=e.reasoning.effort?{effort:e.reasoning.effort}:void 0),e},Xp=()=>structuredClone({model:"deepseek-v4-flash",stream:!0}),ai=class extends Dr{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("DeepSeek API key not set");let s=[...jn,...i??[]],a=c=>FT(c,s);super({apiKey:e,config:{...Xp(),...t},options:n,apiURL:"https://api.deepseek.com",modelInfo:s,models:o,responsesReqUpdater:_T,supportFor:a}),super.setName("DeepSeek Responses")}};var NT=r=>`wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.${r.live?.enableAffectiveDialog||r.live?.proactiveAudio?"v1alpha":"v1beta"}.GenerativeService.BidiGenerateContent`,em=()=>structuredClone({...Ue(),model:"gemini-2.5-flash-native-audio-preview-12-2025",embedModel:"text-embedding-005",audio:ks(),stream:!1}),tm=r=>r==="gemini-2.5-flash-native-audio-preview-12-2025"||r==="gemini-3.1-flash-live-preview"||r.includes("native-audio")||r.includes("-live-")||r.startsWith("gemini-live-"),_s=(r,e)=>{let t=bt(r,e);return qt(t)?bt(ks(),t):t},Ns=(r,e,t)=>tm(r)&&qt(_s(e,t)),nm=r=>{if(!("inlineData"in r))return;let{mimeType:e}=r.inlineData;if(!e.startsWith("audio/"))return;let t=Ct(e);if(t!=="pcm"&&t!=="pcm16")throw new Error(`Gemini Live audio output requires PCM audio input, received ${e}`)},rl=r=>{if(!("inlineData"in r)||!r.inlineData.mimeType.startsWith("audio/"))return;let e=Ct(r.inlineData.mimeType),t=r.inlineData.mimeType.match(/rate=(\d+)/)?.[1];return{data:r.inlineData.data,mimeType:r.inlineData.mimeType,format:e==="pcm"?"pcm16":e,sampleRate:t?Number.parseInt(t,10):void 0,channels:1,isDelta:r.isDelta===!0}},ol=r=>({name:"gemini-live-audio",localCall:async(e,t)=>t?GT(r):await qC(r)}),LT=({model:r,request:e,audio:t})=>{let n=t.output,o=t.live,i=typeof n?.voice=="string"?{voiceConfig:{prebuiltVoiceConfig:{voiceName:n.voice}}}:void 0,s={temperature:e.generationConfig.temperature,topP:e.generationConfig.topP,topK:e.generationConfig.topK,frequencyPenalty:e.generationConfig.frequencyPenalty,maxOutputTokens:e.generationConfig.maxOutputTokens,thinkingConfig:e.generationConfig.thinkingConfig,responseModalities:["AUDIO"],...i?{speechConfig:i}:{}};return{setup:{model:`models/${r}`,generationConfig:s,...e.systemInstruction?{systemInstruction:e.systemInstruction}:{},...e.tools?{tools:e.tools}:{},...e.toolConfig?{toolConfig:e.toolConfig}:{},...n?.includeTranscript!==!1?{outputAudioTranscription:{}}:{},...o?.enableAffectiveDialog?{enableAffectiveDialog:!0}:{},...o?.proactiveAudio?{proactivity:{proactiveAudio:!0}}:{}}}},$T=r=>{let e=[],t=[];for(let n of r){let o=[];for(let i of n.parts){if("inlineData"in i&&i.inlineData.mimeType.startsWith("audio/")){nm(i),t.push({data:i.inlineData.data,mimeType:i.inlineData.mimeType});continue}o.push(i)}o.length>0&&e.push({...n,parts:o})}return{clientContents:e,audioParts:t}},UT=(r,e)=>{let{clientContents:t,audioParts:n}=$T(e.contents);t.length>0&&r.send(JSON.stringify({clientContent:{turns:t,turnComplete:n.length===0}}));for(let o of n)r.send(JSON.stringify({realtimeInput:{audio:o}}));n.length>0&&r.send(JSON.stringify({realtimeInput:{audioStreamEnd:!0}}))},Fs=({audioData:r,audio:e,transcript:t,text:n,functionCalls:o,usageMetadata:i,isDelta:s})=>{let a=e.output,c=a?.mimeType??$t(a?.format,a?.sampleRate,"audio/pcm;rate=24000"),l=[];(n||t)&&l.push({text:n??t??""}),r&&l.push({inlineData:{mimeType:c,data:r},...s?{isDelta:!0}:{}});for(let u of o??[])l.push({functionCall:{name:u.name,args:u.args}});return{candidates:[{content:{role:"model",parts:l},finishReason:"STOP",citationMetadata:{citations:[]}}],usageMetadata:i??{promptTokenCount:0,candidatesTokenCount:0,totalTokenCount:0,thoughtsTokenCount:0}}},DT=r=>{if(r)return{promptTokenCount:r.promptTokenCount??0,candidatesTokenCount:r.candidatesTokenCount??r.responseTokenCount??0,totalTokenCount:r.totalTokenCount??0,thoughtsTokenCount:r.thoughtsTokenCount??0,cachedContentTokenCount:r.cachedContentTokenCount}},jT=r=>{let e=r?.data??r;return typeof e=="string"?JSON.parse(e):e},Zp=(r,e,t)=>{if(r.addEventListener){r.addEventListener(e,t);return}r[`on${e}`]=t},qC=async(r,e)=>{let t=globalThis.WebSocket;if(!t)throw new Error("Gemini Live audio requires globalThis.WebSocket");let n=r.audio,o=n.live?.turnTimeoutMs??3e4,i={audioChunks:[],textChunks:[],outputTranscripts:[],functionCalls:[]},s=new t(`${NT(n)}?key=${encodeURIComponent(r.apiKey)}`);return await new Promise((a,c)=>{let l=!1,u=m=>{if(!l){l=!0,clearTimeout(p);try{s.close()}catch{}a(m)}},d=m=>{if(!l){l=!0,clearTimeout(p);try{s.close()}catch{}c(m instanceof Error?m:new Error(String(m)))}},p=setTimeout(()=>{d(new Error(`Gemini Live audio turn timed out after ${o}ms`))},o);Zp(s,"open",()=>{s.send(JSON.stringify(LT(r)))}),Zp(s,"error",m=>{d(m?.error??m?.message??"Gemini Live WebSocket error")}),Zp(s,"message",m=>{try{let g=jT(m);if(g.setupComplete){UT(s,r.request);return}g.usageMetadata&&(i.usageMetadata=DT(g.usageMetadata));let h=g.toolCall?.functionCalls;if(Array.isArray(h)){for(let A of h)if(typeof A?.name=="string"){let b={name:A.name,args:A.args??{}};i.functionCalls.push(b),e?.(Fs({audio:n,functionCalls:[b],isDelta:!0}))}}let x=g.serverContent;if(!x)return;let f=x.outputTranscription?.text;typeof f=="string"&&(i.outputTranscripts.push(f),e?.(Fs({audio:n,transcript:f,isDelta:!0})));let y=x.modelTurn?.parts;if(Array.isArray(y))for(let A of y){if(typeof A.text=="string"){i.textChunks.push(A.text),e?.(Fs({audio:n,text:A.text,isDelta:!0}));continue}let b=A.inlineData??A.inline_data,w=b?.mimeType??b?.mime_type;b?.data&&typeof w=="string"&&w.startsWith("audio/")&&(i.audioChunks.push(b.data),e?.(Fs({audio:n,audioData:b.data,isDelta:!0})))}if(x.turnComplete){let A=i.outputTranscripts.join(""),b=i.textChunks.join("");u(Fs({audio:n,audioData:Er(i.audioChunks),transcript:A||void 0,text:b||void 0,functionCalls:i.functionCalls,usageMetadata:i.usageMetadata}))}}catch(g){d(g)}})})},GT=r=>new ReadableStream({start(e){qC(r,t=>e.enqueue(t)).then(t=>{e.enqueue(t),e.close()}).catch(t=>e.error(t))}});var jr=r=>r.includes("gemini-3"),VC=r=>r.includes("gemini-3")&&r.includes("pro"),HC=r=>r==="gemini-3.7-flash"||r==="gemini-3.6-flash"||r==="gemini-3.5-flash-lite",BT=(r,e)=>e?"v1beta1":"v1",il=r=>{if(!r||typeof r!="object")return r;let e={...r},t=Array.isArray(e.type)&&e.type.length===2&&e.type.includes("null");return delete e.default,delete e.optional,delete e.oneOf,delete e.anyOf,Array.isArray(e.type)&&!t&&(e.type=e.type.includes("object")?"object":e.type[0]??"string"),e.properties&&typeof e.properties=="object"&&(e.properties=Object.fromEntries(Object.entries(e.properties).map(([n,o])=>[n,il(o)]))),e.items&&(e.items=il(e.items)),e},zT=(r,e,t)=>{for(let n=e-1;n>=0;n--){let o=r[n];if(o?.role!=="assistant"||!o.functionCalls)continue;let i=o.functionCalls.find(s=>s.id===t);if(i?.function?.name)return i.function.name}return t},rm=(r,e,t)=>{let n=t.protocolResult?.value,o=[{functionResponse:{name:zT(r,e,t.functionId),response:{result:t.result,...n?.structuredContent?{structuredContent:n.structuredContent}:{}}}}];for(let i of t.content??[])i.type==="text"?o.push({text:i.text}):i.type==="image"?o.push({inlineData:{mimeType:i.mimeType,data:i.image}}):i.type==="audio"?o.push({inlineData:{mimeType:i.mimeType??"application/octet-stream",data:i.data}}):i.type==="file"?o.push({inlineData:{mimeType:i.mimeType,data:i.data}}):o.push({text:i.cachedContent??[i.title,i.description,i.url].filter(Boolean).join(`
|
|
1263
1263
|
`)});return o},KC=[{category:"HARM_CATEGORY_HARASSMENT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_HATE_SPEECH",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_SEXUALLY_EXPLICIT",threshold:"BLOCK_NONE"},{category:"HARM_CATEGORY_DANGEROUS_CONTENT",threshold:"BLOCK_NONE"}],im=()=>structuredClone({model:"gemini-2.5-flash",embedModel:"text-embedding-005",safetySettings:KC,thinkingTokenBudgetLevels:{minimal:200,low:800,medium:5e3,high:1e4,highest:24500},thinkingLevelMapping:{minimal:"minimal",low:"low",medium:"medium",high:"high",highest:"high"},...Ue()}),WC=()=>structuredClone({model:"gemini-2.0-flash",embedModel:"text-embedding-005",safetySettings:KC,thinkingTokenBudgetLevels:{minimal:200,low:800,medium:5e3,high:1e4,highest:24500},thinkingLevelMapping:{minimal:"minimal",low:"low",medium:"medium",high:"high",highest:"high"},...kt()}),om=class{constructor(e,t,n,o,i,s){this.config=e;this.vertexConfig=t;this.endpointId=n;this.apiKey=o;this.options=i;this.vertexApiURLForModel=s;if(!this.isVertex&&this.config.autoTruncate)throw new Error("Auto truncate is not supported for GoogleGemini");let a=this.config.model;if(jr(a)){if(this.config.thinking?.thinkingTokenBudget!==void 0&&typeof this.config.thinking.thinkingTokenBudget=="number")throw new Error(`Gemini 3 models (${a}) do not support numeric thinkingTokenBudget. Use thinkingLevel ('low', 'medium', 'high') instead, or pass thinkingTokenBudget as a string level via options.`);if(VC(a)&&this.config.thinking?.thinkingLevel){let c=this.config.thinking.thinkingLevel;if(c!=="low"&&c!=="high")throw new Error(`Gemini 3 Pro (${a}) only supports thinkingLevel 'low' or 'high', got '${c}'. Use 'low' for less thinking or 'high' for more thinking.`)}}}tokensUsed;models;setModels(e){this.models=e}getEffectiveMappings(e){let t=this.models?.find(n=>n.model===e);return{thinkingLevelMapping:{...this.config.thinkingLevelMapping,...t?.thinkingLevelMapping??{}},thinkingTokenBudgetLevels:{...this.config.thinkingTokenBudgetLevels,...t?.thinkingTokenBudgetLevels??{}}}}getTokenUsage(){return this.tokensUsed}get isVertex(){return this.vertexConfig!==void 0}getVertexApiURL(e,t){return this.isVertex?this.vertexApiURLForModel?.(e,t):void 0}async transcribe(e,t){let n=e.model??"gemini-2.5-flash",o=typeof this.apiKey=="function"?await this.apiKey():this.apiKey,i=this.isVertex?`${this.getVertexApiURL(n,t?.beta)}/models/${n}:generateContent`:`https://generativelanguage.googleapis.com/v1beta/models/${n}:generateContent?key=${o}`,s={contents:[{role:"user",parts:[{inlineData:{mimeType:e.audio.mimeType??$t(e.audio.format,e.audio.sampleRate),data:e.audio.data}},{text:e.prompt??"Generate a transcript of the speech in this audio."}]}]},a=await(t?.fetch??globalThis.fetch)(i,{method:"POST",headers:{"Content-Type":"application/json",...this.isVertex&&o?{Authorization:`Bearer ${o}`}:{}},body:JSON.stringify(s),signal:t?.abortSignal});if(!a.ok)throw new Error(`Gemini transcription failed: ${a.status} ${a.statusText}`);return{text:(await a.json()).candidates?.[0]?.content?.parts?.map(u=>"text"in u?u.text:"").join("").trim()??""}}async speak(e,t){let n=e.model??"gemini-2.5-flash-preview-tts",o=typeof this.apiKey=="function"?await this.apiKey():this.apiKey,i=this.isVertex?`${this.getVertexApiURL(n,t?.beta)}/models/${n}:generateContent`:`https://generativelanguage.googleapis.com/v1beta/models/${n}:generateContent?key=${o}`,s=typeof e.voice=="object"?e.voice.id:e.voice??"Kore";return await fn({url:i,headers:this.isVertex&&o?{Authorization:`Bearer ${o}`}:{},body:{contents:[{role:"user",parts:[{text:e.text}]}],generationConfig:{responseModalities:["AUDIO"],speechConfig:{voiceConfig:{prebuiltVoiceConfig:{voiceName:s}}}}},format:e.format??"wav",transcript:e.text,fetch:t?.fetch,abortSignal:t?.abortSignal})}getVertexCacheContext(){if(!this.vertexConfig)return;let{projectId:e,region:t}=this.vertexConfig,o=`https://${vs(t)}/v1`,i=`projects/${e}/locations/${t}`;return{baseUrl:o,parent:i,modelResource:s=>`${i}/publishers/google/models/${s}`}}getModelConfig(){let{config:e}=this;return{maxTokens:e.maxTokens,temperature:e.temperature,topP:e.topP,topK:e.topK,presencePenalty:e.presencePenalty,frequencyPenalty:e.frequencyPenalty,stopSequences:e.stopSequences,endSequences:e.endSequences,stream:e.stream,n:e.n}}hasProviderDeclaredTools(){return!!(this.options?.codeExecution||this.options?.googleSearchRetrieval||this.options?.googleSearch||this.options?.googleMaps||this.options?.urlContext)}buildToolState(e,t){let n=[];if(e.functions&&e.functions.length>0){let l=e.functions.map(u=>{let d={type:"object",properties:{dummy:{type:"string",description:"An optional dummy parameter, do not use"}},required:[]},p=u.parameters?il(u.parameters):void 0;return p===void 0||p&&typeof p=="object"&&Object.keys(p).length===0?p={...d}:p&&typeof p=="object"&&p.type==="object"&&(!("properties"in p)||!p.properties||Object.keys(p.properties).length===0)&&(p={...p,properties:{dummy:{type:"string",description:"An optional dummy parameter, do not use"}},required:[]}),{name:u.name,description:u.description,parameters:p}});n.push({function_declarations:l})}if(this.options?.codeExecution&&n.push({code_execution:{}}),this.options?.googleSearchRetrieval&&n.push({google_search_retrieval:{dynamic_retrieval_config:this.options.googleSearchRetrieval}}),this.options?.googleSearch&&n.push({google_search:{}}),this.options?.googleMaps){let l=this.options.googleMaps,u=l?.enableWidget!==void 0?{enableWidget:l.enableWidget}:{};n.push({google_maps:u})}this.options?.urlContext&&n.push({url_context:{}}),n.length===0&&(n=void 0);let o,i=Array.isArray(n)?n.some(l=>l&&Array.isArray(l.function_declarations)&&l.function_declarations.length>0):!1;if(e.functionCall)if(e.functionCall==="none")o={function_calling_config:{mode:"NONE"}};else if(e.functionCall==="auto")o={function_calling_config:{mode:"AUTO"}};else if(e.functionCall==="required")o={function_calling_config:{mode:"ANY"}};else{let l=e.functionCall.function?.name?{allowedFunctionNames:[e.functionCall.function.name]}:{};o={function_calling_config:{mode:"ANY"},...l}}else i&&(o={function_calling_config:{mode:"AUTO"}});this.options?.retrievalConfig&&(o={...o??{},retrievalConfig:{...this.options.retrievalConfig.latLng?{latLng:this.options.retrievalConfig.latLng}:{}}});let s=e.functions?.some(l=>l.cache)??!1,a=!!(n&&n.length>0)||!!o,c=!!t?.contextCache&&a;return{tools:n,toolConfig:o,cacheableTools:s||c}}createChatReq=async(e,t)=>{let n=e.model,o=e.modelConfig?.stream??this.config.stream,i=_s(this.config.audio,e.modelConfig?.audio),s=Ns(n,this.config.audio,e.modelConfig?.audio);if(!e.chatPrompt||e.chatPrompt.length===0)throw new Error("Chat prompt is empty");let a;if(s){if(this.isVertex)throw new Error("Gemini Live audio currently supports Google AI API-key WebSocket sessions only");a={name:"gemini-live-audio"}}else this.endpointId?a={name:o?`/${this.endpointId}:streamGenerateContent?alt=sse`:`/${this.endpointId}:generateContent`}:a={name:o?`/models/${n}:streamGenerateContent?alt=sse`:`/models/${n}:generateContent`};if(!s&&this.isVertex&&(a.url=this.getVertexApiURL(n,t?.beta)),!s&&!this.isVertex){let b=o?"&":"?",w=typeof this.apiKey=="function"?await this.apiKey():this.apiKey;a.name+=`${b}key=${w}`}let c=e.chatPrompt.filter(b=>b.role==="system").map(b=>b.content),l=c.length>0?{role:"user",parts:[{text:c.join(" ")}]}:void 0,u=[],d=e.chatPrompt.filter(b=>b.role!=="system");for(let b=0;b<d.length;b++){let w=d[b];switch(w.role){case"user":{let S=Array.isArray(w.content)?w.content.map((F,k)=>{switch(F.type){case"text":return{text:F.text};case"image":return{inlineData:{mimeType:F.mimeType,data:F.image}};case"audio":return{inlineData:{mimeType:F.mimeType??$t(F.format,F.sampleRate),data:F.data}};case"file":return"fileUri"in F?{fileData:{mimeType:F.mimeType,fileUri:F.fileUri}}:{inlineData:{mimeType:F.mimeType,data:F.data}};default:throw new Error(`Chat prompt content type not supported (index: ${k})`)}}):[{text:w.content}];u.push({role:"user",parts:S});break}case"assistant":{let S=[],F=w.thoughtBlocks,k=w.functionCalls&&w.functionCalls.length>0,O=F?.[0],L=F?.map(I=>I.data).join("")??"",_=O?.signature;if(L&&S.push({...k?{}:{thought:!0},text:L,..._&&!k?{thought_signature:_}:{}}),w.functionCalls){let I=w.functionCalls.map(($,v)=>{let H;if(typeof $.function.params=="string"){let W=$.function.params;if(W.trim().length===0)H={};else try{H=JSON.parse(W)}catch{throw new Error(`Failed to parse function params JSON: ${W}`)}}else H=$.function.params;let N={functionCall:{name:$.function.name,args:H}};return _&&v===0&&(N.thought_signature=_),N});S.push(...I)}let V=w.audio?.transcript;if((w.content||V)&&S.push({text:w.content??V??""}),S.length===0)throw new Error("Assistant content is empty");u.push({role:"model",parts:S});break}case"function":{let S=[],F=w,k=b;for(;;){if(!("functionId"in F))throw new Error(`Chat prompt functionId is empty (index: ${k})`);if(S.push(...rm(d,k,F)),k+1<d.length&&d[k+1].role==="function")k++,F=d[k];else break}b=k,u.push({role:"user",parts:S});break}default:throw new Error(`Invalid role: ${JSON.stringify(w)} (index: ${b})`)}}let{tools:p,toolConfig:m}=this.buildToolState(e,t),g={};if(this.config.thinking?.includeThoughts&&(g.includeThoughts=!0),this.config.thinking?.thinkingTokenBudget&&(g.thinkingBudget=this.config.thinking.thinkingTokenBudget),this.config.thinking?.thinkingLevel&&jr(n)&&(g.thinkingLevel=this.config.thinking.thinkingLevel),t?.thinkingTokenBudget){let b=this.getEffectiveMappings(n),w=b.thinkingTokenBudgetLevels;if(jr(n)){let F=VC(n),k=b.thinkingLevelMapping;if(t.thinkingTokenBudget==="none")g.thinkingLevel=k?.minimal??"minimal";else{let O=t.thinkingTokenBudget,L=k?.[O];L||(L=O==="highest"?"high":O),g.thinkingLevel=L}if(F&&g.thinkingLevel){let O=g.thinkingLevel;O!=="low"&&O!=="high"&&(g.thinkingLevel=O==="minimal"?"low":"high")}}else switch(t.thinkingTokenBudget){case"none":g.thinkingBudget=0,g.includeThoughts=!1,delete g.thinkingLevel;break;case"minimal":g.thinkingBudget=w?.minimal??200;break;case"low":g.thinkingBudget=w?.low??800;break;case"medium":g.thinkingBudget=w?.medium??5e3;break;case"high":g.thinkingBudget=w?.high??1e4;break;case"highest":g.thinkingBudget=w?.highest??24500;break}}g.thinkingLevel&&delete g.thinkingBudget,jr(n)||delete g.thinkingLevel,jr(n)&&delete g.thinkingBudget;let h=e.modelConfig?.maxTokens??this.config.maxTokens;if(g.thinkingLevel&&h!==void 0)throw new Error("Cannot set maxTokens when using thinkingLevel with Gemini models. When thinking is enabled, the model manages output tokens automatically. Remove the maxTokens setting or disable thinking.");t?.showThoughts!==void 0&&t?.thinkingTokenBudget!=="none"&&(g.includeThoughts=t.showThoughts);let x=HC(n),f={maxOutputTokens:e.modelConfig?.maxTokens??this.config.maxTokens,...x?{}:{temperature:e.modelConfig?.temperature??this.config.temperature},...!x&&e.modelConfig?.topP!==void 0?{topP:e.modelConfig.topP}:{},...x?{}:{topK:e.modelConfig?.topK??this.config.topK},frequencyPenalty:e.modelConfig?.frequencyPenalty??this.config.frequencyPenalty,candidateCount:e.modelConfig?.n??this.config.n??1,stopSequences:e.modelConfig?.stopSequences??this.config.stopSequences,responseMimeType:"text/plain",...Object.keys(g).length>0?{thinkingConfig:g}:{}};if(!x&&jr(n)&&(f.temperature===void 0||f.temperature<1)&&(f.temperature=1),s&&(e.responseFormat||this.config.responseFormat))throw new Error("Gemini Live audio models do not support structured response formats with audio output");if(e.responseFormat)if(e.responseFormat.type==="json_schema"&&e.responseFormat.schema){let b=e.responseFormat.schema.schema||e.responseFormat.schema;f.responseMimeType="application/json",f.responseJsonSchema=il(b)}else f.responseMimeType="application/json";else this.config.responseFormat&&this.config.responseFormat==="json_object"&&(f.responseMimeType="application/json");let y=this.config.safetySettings,A={contents:u,tools:p,toolConfig:m,systemInstruction:l,generationConfig:f,safetySettings:y};if(s){let b=typeof this.apiKey=="function"?await this.apiKey():this.apiKey;if(!b)throw new Error("GoogleGemini AI API key not set");a=ol({model:n,request:A,apiKey:b,audio:i})}return[a,A]};createEmbedReq=async(e,t)=>{let n=e.embedModel;if(!n)throw new Error("Embed model not set");if(!e.texts||e.texts.length===0)throw new Error("Embed texts is empty");let o,i;if(this.isVertex)this.endpointId?o={name:`/${this.endpointId}:predict`}:o={name:`/models/${n}:predict`},o.url=this.getVertexApiURL(n,t?.beta),i={instances:e.texts.map(s=>({content:s,...this.config.embedType&&{taskType:this.config.embedType}})),parameters:{autoTruncate:this.config.autoTruncate,outputDimensionality:this.config.dimensions}};else{let s=typeof this.apiKey=="function"?this.apiKey():this.apiKey;o={name:`/models/${n}:batchEmbedContents?key=${s}`},i={requests:e.texts.map(a=>({model:`models/${n}`,content:{parts:[{text:a}]},outputDimensionality:this.config.dimensions,...this.config.embedType&&{taskType:this.config.embedType}}))}}return[o,i]};createChatResp=e=>{let t,n=e.candidates?.map(i=>{let s={index:0};switch(i.finishReason){case"MAX_TOKENS":s.finishReason="length";break;case"STOP":s.finishReason="stop";break;case"SAFETY":throw new Ke("Content was blocked due to safety settings",void 0,void 0);case"RECITATION":throw new Ke("Content was blocked due to recitation policy",void 0,void 0);case"MALFORMED_FUNCTION_CALL":throw new Ke("Function call was malformed and blocked",void 0,void 0);case"UNEXPECTED_TOOL_CALL":throw new Ke("Unexpected tool call",void 0,void 0);case"FINISH_REASON_UNSPECIFIED":throw new Ke("Finish reason unspecified",void 0,void 0);case"BLOCKLIST":throw new Ke("Content was blocked due to blocklist",void 0,void 0);case"PROHIBITED_CONTENT":throw new Ke("Content was blocked due to prohibited content",void 0,void 0);case"SPII":throw new Ke("Content was blocked due to SPII",void 0,void 0);case"OTHER":throw new Ke("Other finish reason",void 0,void 0)}if(!i.content||!i.content.parts)return s;for(let l of i.content.parts){if("text"in l){if("thought"in l&&l.thought||l.thought===!0){s.thought=l.text;let d=l.thoughtSignature||l.thought_signature;s.thoughtBlocks||(s.thoughtBlocks=[]),s.thoughtBlocks.push({data:l.text,encrypted:!1,...d?{signature:d}:{}})}else s.content=l.text;continue}if("functionCall"in l){let d=l.thoughtSignature||l.thought_signature;if(d)if(!s.thoughtBlocks||s.thoughtBlocks.length===0)s.thoughtBlocks=[{data:"",encrypted:!1,signature:d}];else{let p=s.thoughtBlocks[s.thoughtBlocks.length-1];p&&!p.signature&&(p.signature=d)}s.functionCalls=[...s.functionCalls??[],{id:qe(),type:"function",function:{name:l.functionCall.name,params:l.functionCall.args}}]}let u=rl(l);u&&(s.audio=u)}let a=i.citationMetadata?.citations;if(Array.isArray(a)&&a.length){let l=u=>u?`${u.year}-${String(u.month).padStart(2,"0")}-${String(u.day).padStart(2,"0")}`:void 0;s.citations=a.filter(u=>typeof u?.uri=="string").map(u=>({url:u.uri,title:u.title,license:u.license,publicationDate:l(u.publicationDate)}))}let c=i.groundingMetadata;if(c){if(Array.isArray(c.groundingChunks)){let l=c.groundingChunks.map(d=>d?.maps).filter(d=>d&&typeof d.uri=="string").map(d=>({url:d.uri,title:d.title}));l.length&&(s.citations=[...s.citations??[],...l]);let u=c.groundingChunks.map(d=>d?.retrievedContext).filter(d=>d&&(typeof d.uri=="string"||typeof d.media_id=="string")).map(d=>({url:d.uri??"",title:d.title,...typeof d.media_id=="string"?{mediaId:d.media_id}:{},...Array.isArray(d.page_numbers)?{pageNumbers:d.page_numbers}:{}}));u.length&&(s.citations=[...s.citations??[],...u])}typeof c.googleMapsWidgetContextToken=="string"&&(t=c.googleMapsWidgetContextToken)}return s});if(e.usageMetadata){let i=e.usageMetadata.cachedContentTokenCount??0;this.tokensUsed={totalTokens:e.usageMetadata.totalTokenCount,promptTokens:e.usageMetadata.promptTokenCount-i,completionTokens:e.usageMetadata.candidatesTokenCount,thoughtsTokens:e.usageMetadata.thoughtsTokenCount,...i>0?{cacheReadTokens:i}:{}}}let o={results:n,...e.responseId?{remoteId:e.responseId}:{},...e.modelVersion?{providerMetadata:{google:{modelVersion:e.modelVersion}}}:{}};return t&&(o.providerMetadata={...o.providerMetadata,google:{...o.providerMetadata?.google??{},mapsWidgetContextToken:t}}),o};createChatStreamResp=e=>this.createChatResp(e);createEmbedResp=e=>{let t;return this.isVertex?t=e.predictions.map(n=>n.embeddings.values):t=e.embeddings.map(n=>n.values),{embeddings:t}};supportsContextCache=e=>{let t=e;return $C.some(n=>t.includes(n)||n.includes(t))};buildCacheCreateOp=(e,t)=>{let n=e.model,o=t.contextCache?.ttlSeconds??3600,{tools:i,toolConfig:s,cacheableTools:a}=this.buildToolState(e,t),{systemInstruction:c,contents:l}=this.extractCacheableContent(e.chatPrompt);if(!c&&(!l||l.length===0)&&!a)return;let u=this.getVertexCacheContext(),d={model:u?u.modelResource(n):`models/${n}`,ttl:`${o}s`,displayName:`ax-cache-${Date.now()}`};c&&(d.systemInstruction=c),l&&l.length>0&&(d.contents=l),a&&(i&&i.length>0&&(d.tools=i),s&&(d.toolConfig=s));let p;return u?p=`/${u.parent}/cachedContents`:p=`/cachedContents?key=${typeof this.apiKey=="function"?"ASYNC_KEY":this.apiKey}`,{type:"create",apiConfig:{name:p,...u?{url:u.baseUrl}:{}},request:d,parseResponse:m=>{let g=m;if(g?.name)return{name:g.name,expiresAt:g.expireTime,tokenCount:g.usageMetadata?.totalTokenCount}}}};getContextCacheToolState=(e,t)=>{let{tools:n,toolConfig:o,cacheableTools:i}=this.buildToolState(e,t);if(!i)return;let s=e.functions?.map(({cache:c,...l})=>l);if(!!(s&&s.length>0)||!!e.functionCall)return{functions:s,functionCall:e.functionCall};if(n||o)return{functions:[{name:"__gemini_tool_state__",description:JSON.stringify({tools:n,toolConfig:o})}]}};buildCacheUpdateTTLOp=(e,t)=>{let n={ttl:`${t}s`},o=new URLSearchParams({updateMask:"ttl"});if(!this.isVertex&&this.apiKey){let a=typeof this.apiKey=="function"?"ASYNC_KEY":this.apiKey;o.set("key",a)}let i=`/${e}?${o.toString()}`,s=this.getVertexCacheContext();return{type:"update",apiConfig:{name:i,method:"PATCH",headers:{"Content-Type":"application/json"},...s?{url:s.baseUrl}:{}},request:n,parseResponse:a=>{let c=a;if(c?.name)return{name:c.name,expiresAt:c.expireTime,tokenCount:c.usageMetadata?.totalTokenCount}}}};buildCacheDeleteOp=e=>{let t=`/${e}`;if(!this.isVertex&&this.apiKey){let o=typeof this.apiKey=="function"?"ASYNC_KEY":this.apiKey;t+=`?key=${o}`}let n=this.getVertexCacheContext();return{type:"delete",apiConfig:{name:t,headers:{"Content-Type":"application/json"},...n?{url:n.baseUrl}:{}},request:{},parseResponse:()=>{}}};prepareCachedChatReq=async(e,t,n)=>{let o=e.model,i=e.modelConfig?.stream??this.config.stream,{tools:s,toolConfig:a,cacheableTools:c}=this.buildToolState(e,t),{dynamicContents:l,dynamicSystemInstruction:u}=this.extractDynamicContent(e.chatPrompt),d;if(this.endpointId?d={name:i?`/${this.endpointId}:streamGenerateContent?alt=sse`:`/${this.endpointId}:generateContent`}:d={name:i?`/models/${o}:streamGenerateContent?alt=sse`:`/models/${o}:generateContent`},!this.isVertex){let x=i?"&":"?",f=typeof this.apiKey=="function"?await this.apiKey():this.apiKey;d.name+=`${x}key=${f}`}let p=HC(o),m={maxOutputTokens:e.modelConfig?.maxTokens??this.config.maxTokens,...p?{}:{temperature:e.modelConfig?.temperature??this.config.temperature},...!p&&e.modelConfig?.topP!==void 0?{topP:e.modelConfig.topP}:{},...p?{}:{topK:e.modelConfig?.topK??this.config.topK},frequencyPenalty:e.modelConfig?.frequencyPenalty??this.config.frequencyPenalty,candidateCount:e.modelConfig?.n??this.config.n??1,stopSequences:e.modelConfig?.stopSequences??this.config.stopSequences,responseMimeType:"text/plain"};!p&&jr(o)&&(m.temperature===void 0||m.temperature<1)&&(m.temperature=1);let g=this.config.safetySettings,h={contents:l,cachedContent:n,generationConfig:m,safetySettings:g};return c||(s&&s.length>0&&(h.tools=s),a&&(h.toolConfig=a)),u&&(h.systemInstruction=u),{apiConfig:d,request:h}};extractCacheableContent(e){let t,n=[],o=-1;for(let i=e.length-1;i>=0;i--){let s=e[i];if("cache"in s&&s.cache){o=i;break}}for(let i=0;i<e.length;i++){let s=e[i];if(s.role==="system"){t={role:"user",parts:[{text:s.content}]};continue}if(o>=0&&i<=o)if(s.role==="user"){let a=[];if(typeof s.content=="string")a.push({text:s.content});else if(Array.isArray(s.content))for(let c of s.content)switch(c.type){case"text":a.push({text:c.text});break;case"image":a.push({inlineData:{mimeType:c.mimeType,data:c.image}});break;case"audio":a.push({inlineData:{mimeType:c.mimeType??$t(c.format,c.sampleRate),data:c.data}});break;case"file":"fileUri"in c?a.push({fileData:{mimeType:c.mimeType,fileUri:c.fileUri}}):a.push({inlineData:{mimeType:c.mimeType,data:c.data}});break}a.length>0&&n.push({role:"user",parts:a})}else if(s.role==="assistant"){let a=[],c=s.thoughtBlocks,l=s.functionCalls&&s.functionCalls.length>0,u=c?.[0]?.signature,d=c?.map(p=>p.data).join("")??"";if(d&&a.push({...l?{}:{thought:!0},text:d,...u&&!l?{thought_signature:u}:{}}),s.functionCalls)for(let[p,m]of s.functionCalls.entries()){let g;if(typeof m.function.params=="string")try{g=JSON.parse(m.function.params)}catch{g={}}else g=m.function.params??{};let h={functionCall:{name:m.function.name,args:g}};u&&p===0&&(h.thought_signature=u),a.push(h)}s.content&&a.push({text:s.content}),a.length>0&&n.push({role:"model",parts:a})}else s.role==="function"&&n.push({role:"user",parts:rm(e,i,s)})}return{systemInstruction:t,contents:n}}extractDynamicContent(e){let n=[],o=-1;for(let i=e.length-1;i>=0;i--){let s=e[i];if("cache"in s&&s.cache){o=i;break}}for(let i=0;i<e.length;i++){let s=e[i];if(s.role!=="system"&&!(o>=0&&i<=o))if(s.role==="user"){let a=[];if(typeof s.content=="string")a.push({text:s.content});else if(Array.isArray(s.content)){for(let c of s.content)if(!("cache"in c&&c.cache))switch(c.type){case"text":a.push({text:c.text});break;case"image":a.push({inlineData:{mimeType:c.mimeType,data:c.image}});break;case"audio":a.push({inlineData:{mimeType:c.mimeType??$t(c.format,c.sampleRate),data:c.data}});break;case"file":"fileUri"in c?a.push({fileData:{mimeType:c.mimeType,fileUri:c.fileUri}}):a.push({inlineData:{mimeType:c.mimeType,data:c.data}});break}}a.length>0&&n.push({role:"user",parts:a})}else if(s.role==="assistant"){let a=[],c=s.thoughtBlocks,l=s.functionCalls&&s.functionCalls.length>0,u=c?.[0]?.signature,d=c?.map(p=>p.data).join("")??"";if(d&&a.push({...l?{}:{thought:!0},text:d,...u&&!l?{thought_signature:u}:{}}),s.functionCalls)for(let[p,m]of s.functionCalls.entries()){let g;if(typeof m.function.params=="string")try{g=JSON.parse(m.function.params)}catch{g={}}else g=m.function.params??{};let h={functionCall:{name:m.function.name,args:g}};u&&p===0&&(h.thought_signature=u),a.push(h)}s.content&&a.push({text:s.content}),a.length>0&&n.push({role:"model",parts:a})}else s.role==="function"&&n.push({role:"user",parts:rm(e,i,s)})}return{dynamicContents:n,dynamicSystemInstruction:void 0}}},ci=class r extends St{static create(e){return new r(e)}constructor({apiKey:e,projectId:t,region:n,endpointId:o,config:i,options:s,models:a,modelInfo:c}){let l=t!==void 0&&n!==void 0?{projectId:t,region:n}:void 0,u={...im(),...i},d,p,m;if(l){let{projectId:f,region:y}=l;if(!e)throw new Error("GoogleGemini Vertex API key not set");if(typeof e!="function")throw new Error("GoogleGemini Vertex API key must be a function for token-based authentication");let A;o?A="endpoints":A="publishers/google";let b=vs(y);m=(w,S)=>`https://${b}/${BT(w,S)}/projects/${f}/locations/${y}/${A}`,d=m(u.model),p=async()=>({Authorization:`Bearer ${typeof e=="function"?await e():e}`})}else{if(!e)throw new Error("GoogleGemini AI API key not set");d="https://generativelanguage.googleapis.com/v1beta",p=async()=>({})}let g=new om(u,l,o,e,s,m);c=[...Jo,...c??[]];let h=f=>{let y=Ns(f,{output:{enabled:!0}}),A=it({model:f,modelInfo:c,models:a});return{functions:!0,streaming:!0,hasThinkingBudget:A?.supported?.thinkingBudget??!1,hasShowThoughts:A?.supported?.showThoughts??!1,structuredOutputs:A?.supported?.structuredOutputs??!1,media:{images:{supported:!0,formats:["image/jpeg","image/png","image/gif","image/webp"],maxSize:20*1024*1024,detailLevels:["high","low","auto"]},audio:{supported:!0,formats:y?["pcm16","pcm"]:["wav","mp3","aac","ogg"],maxDuration:9.5*60,output:{supported:y,formats:["pcm16"],sampleRate:24e3,voices:["Kore"]}},files:{supported:!0,formats:["application/pdf","text/plain","text/csv","text/html","text/xml"],maxSize:2*1024*1024*1024,uploadMethod:"cloud"},urls:{supported:!0,webSearch:!0,contextFetching:!0}},caching:{supported:g.supportsContextCache(f),types:["persistent"]},thinking:A?.supported?.thinkingBudget??!1,multiTurn:!0}},x=a?.map(f=>{let y=f,A=y?.config;if(!A)return f;let b={};A.maxTokens!==void 0&&(b.maxTokens=A.maxTokens),A.temperature!==void 0&&(b.temperature=A.temperature),A.topP!==void 0&&(b.topP=A.topP),A.topK!==void 0&&(b.topK=A.topK),A.presencePenalty!==void 0&&(b.presencePenalty=A.presencePenalty),A.frequencyPenalty!==void 0&&(b.frequencyPenalty=A.frequencyPenalty),A.stopSequences!==void 0&&(b.stopSequences=A.stopSequences),A.endSequences!==void 0&&(b.endSequences=A.endSequences),A.stream!==void 0&&(b.stream=A.stream),A.n!==void 0&&(b.n=A.n);let w={...y};Object.keys(b).length>0&&(w.modelConfig={...y.modelConfig??{},...b});let S=A.thinking?.thinkingTokenBudget;if(typeof S=="number"){let F=u.thinkingTokenBudgetLevels,k=[["minimal",F?.minimal??200],["low",F?.low??800],["medium",F?.medium??5e3],["high",F?.high??1e4],["highest",F?.highest??24500]],O="minimal",L=Number.POSITIVE_INFINITY;for(let[_,V]of k){let I=Math.abs(S-V);I<L&&(L=I,O=_)}w.thinkingTokenBudget=O}return A.thinking?.includeThoughts!==void 0&&(w.showThoughts=!!A.thinking.includeThoughts),A.thinkingLevelMapping&&(w.thinkingLevelMapping=A.thinkingLevelMapping),A.thinkingTokenBudgetLevels&&(w.thinkingTokenBudgetLevels=A.thinkingTokenBudgetLevels),w});x?g.setModels(x):a&&g.setModels(a),super(g,{name:"GoogleGeminiAI",apiURL:d,headers:p,modelInfo:c,defaults:{model:u.model,embedModel:u.embedModel},options:s,supportFor:h,models:x??a})}};var sl=()=>structuredClone({model:"mistral-small-latest",...Ue(),topP:1}),JC=()=>structuredClone({...sl(),model:"mistral-large-latest"}),li=class extends dt{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("Mistral API key not set");let s={...sl(),...t};i=[...Qo,...i??[]];let a={functions:!0,streaming:!0,hasThinkingBudget:!1,hasShowThoughts:!1,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0},c=(l,u)=>{let{max_completion_tokens:d,messages:p,...m}=l;return{...m,messages:this.updateMessages(p),max_tokens:d}};super({apiKey:e,config:s,options:n,apiURL:"https://api.mistral.ai/v1",modelInfo:i,models:o,supportFor:a,chatReqUpdater:c}),super.setName("Mistral"),this.setBatchAudioConfig({transcriptionModel:"voxtral-mini-latest",speechModel:"voxtral-mini-tts-2603",speechFormat:"mp3"})}async speak(e,t){let n=e.format??this.batchAudioConfig.speechFormat??"mp3",o=typeof e.voice=="object"?e.voice.id:e.voice,i=this.getOptions();return await fn({url:`${this.openAICompatibleApiURL}/audio/speech`,headers:{Authorization:`Bearer ${this.openAICompatibleApiKey}`},body:{model:typeof e.model=="string"?e.model:this.batchAudioConfig.speechModel,input:e.text,response_format:n,...o?{voice_id:o}:{}},format:n,transcript:e.text,fetch:t?.fetch??i.fetch,abortSignal:t?.abortSignal??i.abortSignal})}updateMessages(e){let t=[];if(!Array.isArray(e))return e;for(let n of e)if(n.role==="user"&&Array.isArray(n.content)){let o=n.content.map(i=>typeof i=="object"&&i!==null&&"image_url"in i?{type:"image_url",image_url:{url:i.image_url?.url}}:i);t.push({...n,content:o})}else t.push(n);return t}};var al=class{constructor(e={}){this.config=e;this.config.id=this.config.id??qe()}metrics={latency:{chat:{mean:0,p95:0,p99:0,samples:[]},embed:{mean:0,p95:0,p99:0,samples:[]}},errors:{chat:{count:0,rate:0,total:0},embed:{count:0,rate:0,total:0}}};getLastUsedChatModel(){return this.config.modelInfo?.name??"mock-model"}getLastUsedEmbedModel(){return this.config.embedModelInfo?.name??"mock-embed-model"}getLastUsedModelConfig(){return this.config.modelInfo?{maxTokens:this.config.modelInfo.maxTokens,temperature:.7,stream:this.config.features?.streaming??!1}:void 0}getName(){return this.config.name??"mock-ai-service"}getId(){return this.config.id??"mock-ai-service-id"}getFeatures(e){let t=this.config.features?.media;return{functions:this.config.features?.functions??!1,streaming:this.config.features?.streaming??!1,structuredOutputs:this.config.features?.structuredOutputs??!1,media:{images:{supported:t?.images?.supported??!1,formats:t?.images?.formats??[]},audio:{supported:t?.audio?.supported??!1,formats:t?.audio?.formats??[]},files:{supported:t?.files?.supported??!1,formats:t?.files?.formats??[],uploadMethod:t?.files?.uploadMethod??"none"},urls:{supported:t?.urls?.supported??!1,webSearch:t?.urls?.webSearch??!1,contextFetching:t?.urls?.contextFetching??!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0}}getModelList(){return this.config.models}getMetrics(){return this.metrics}getEstimatedCost(){return 0}async chat(e,t){if(this.config.latencyMs&&await new Promise(n=>setTimeout(n,this.config.latencyMs)),this.config.shouldError)throw new Error(this.config.errorMessage??"Mock chat error");return this.updateMetrics("chat"),typeof this.config.chatResponse=="function"?await this.config.chatResponse(e):this.config.chatResponse??{results:[{index:0,content:"Mock response",finishReason:"stop"}],modelUsage:{ai:this.getName(),model:"mock-model",tokens:{promptTokens:10,completionTokens:5,totalTokens:15}}}}async embed(e,t){if(this.config.latencyMs&&await new Promise(n=>setTimeout(n,this.config.latencyMs)),this.config.shouldError)throw new Error(this.config.errorMessage??"Mock embed error");return this.updateMetrics("embed"),typeof this.config.embedResponse=="function"?this.config.embedResponse(e):this.config.embedResponse??{embeddings:[[.1,.2,.3]],modelUsage:{ai:this.getName(),model:"mock-model",tokens:{promptTokens:5,completionTokens:0,totalTokens:5}}}}async transcribe(e,t){if(this.config.shouldError)throw new Error(this.config.errorMessage??"Mock transcribe error");return typeof this.config.transcribeResponse=="function"?this.config.transcribeResponse(e):this.config.transcribeResponse??{text:"Mock transcription"}}async speak(e,t){if(this.config.shouldError)throw new Error(this.config.errorMessage??"Mock speech error");return typeof this.config.speechResponse=="function"?this.config.speechResponse(e):this.config.speechResponse??{data:"bW9jay1hdWRpbw==",format:"mp3",mimeType:"audio/mpeg",transcript:e.text}}setOptions(e){this.config.options=e}getOptions(){return this.config.options??{}}getLogger(){return this.config.options?.logger??(e=>{console.log(e)})}updateMetrics(e){let t=this.config.latencyMs??0;this.metrics.latency[e].samples.push(t);let n=this.metrics.latency[e].samples;if(this.metrics.latency[e].mean=n.reduce((o,i)=>o+i,0)/n.length,n.length>0){let o=[...n].sort((a,c)=>a-c),i=Math.max(0,Math.floor(o.length*.95)-1);this.metrics.latency[e].p95=o[i]??t;let s=Math.max(0,Math.floor(o.length*.99)-1);this.metrics.latency[e].p99=o[s]??t}if(this.config.shouldError){this.metrics.errors[e].count++,this.metrics.errors[e].total++;let o=this.metrics.latency[e].samples.length;this.metrics.errors[e].rate=o>0?this.metrics.errors[e].count/o:0}}};var cl=class r{options;lastUsedService;services=new Map;constructor(e){if(e.length===0)throw new Error("No AI services provided.");for(let[t,n]of e.entries())if("key"in n){if(this.services.has(n.key))throw new Error(`Duplicate model key: ${n.key}`);let{service:i,description:s,isInternal:a}=n;this.services.set(n.key,{service:i,description:s,isInternal:a})}else{let i=n.getModelList();if(!i)throw new Error(`Service ${t} \`${n.getName()}\` has no model list.`);for(let s of i){if(this.services.has(s.key)){let a=this.services.get(s.key)?.service;throw new Error(`Service ${t} \`${n.getName()}\` has duplicate model key: ${s.key} as service ${a?.getName()}`)}if("model"in s&&typeof s.model)this.services.set(s.key,{description:s.description,service:n,model:s.model});else if("embedModel"in s&&s.embedModel)this.services.set(s.key,{description:s.description,service:n,embedModel:s.embedModel});else throw new Error(`Key ${s.key} in model list for service ${t} \`${n.getName()}\` is missing a model or embedModel property.`)}}}static create(e){return new r(e)}getLastUsedChatModel(){return this.lastUsedService?.getLastUsedChatModel()}getLastUsedEmbedModel(){return this.lastUsedService?.getLastUsedEmbedModel()}getLastUsedModelConfig(){return this.lastUsedService?.getLastUsedModelConfig()}async chat(e,t){let n=e.model;if(!n)throw new Error("Model key must be specified for multi-service");let o=this.services.get(n);if(!o)throw new Error(`No service found for model key: ${n}`);if(this.lastUsedService=o.service,!o.model){let{model:i,...s}=e;return await o.service.chat(s,t)}return await o.service.chat({model:n,...e},t)}async embed(e,t){let n=e.embedModel;if(!n)throw new Error("Embed model key must be specified for multi-service");let o=this.services.get(n);if(!o)throw new Error(`No service found for embed model key: ${n}`);if(this.lastUsedService=o.service,!o.model){let{embedModel:i,...s}=e;return await o.service.embed(s,t)}return await o.service.embed({embedModel:n,...e},t)}async transcribe(e,t){let n=e.model;if(!n){let i=Array.from(this.services.values())[0]?.service;if(!i)throw new Error("No AI services provided.");return this.lastUsedService=i,await i.transcribe(e,t)}let o=this.services.get(n);if(!o)throw new Error(`No service found for transcription model key: ${n}`);return this.lastUsedService=o.service,await o.service.transcribe(e,t)}async speak(e,t){let n=e.model;if(!n){let i=Array.from(this.services.values())[0]?.service;if(!i)throw new Error("No AI services provided.");return this.lastUsedService=i,await i.speak(e,t)}let o=this.services.get(n);if(!o)throw new Error(`No service found for speech model key: ${n}`);return this.lastUsedService=o.service,await o.service.speak(e,t)}getId(){return`MultiServiceRouter:${Array.from(this.services.values()).map(e=>e.service.getId()).join(",")}`}getName(){return"MultiServiceRouter"}getModelList(){return Array.from(this.services).filter(([,e])=>!e.isInternal).map(([e,t])=>{if(t.model)return{key:e,description:t.description,model:t.model};if(t.embedModel)return{key:e,description:t.description,embedModel:t.embedModel};throw new Error(`Service ${e} has no model or embedModel`)})}getFeatures(e){if(e){let t=this.services.get(e);if(t)return t.service.getFeatures(e)}return{functions:!1,streaming:!1,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0}}getMetrics(){let e=this.lastUsedService;if(!e){let t=this.services.values().next().value;t&&(e="service"in t?t.service:t)}if(!e)throw new Error("No service available to get metrics.");return e.getMetrics()}getEstimatedCost(e){return this.lastUsedService?.getEstimatedCost(e)??0}setOptions(e){for(let t of this.services.values())t.service.setOptions(e);this.options=e}getOptions(){return this.options??{}}getLogger(){let e=this.lastUsedService;if(!e){let t=this.services.values().next().value;t&&(e=t.service)}if(!e)throw new Error("No service available to get logger.");return e.getLogger()}setServiceEntry(e,t){this.services.set(e,t)}};async function ll(r,e,t={}){if(typeof r=="string")return[{type:"text",text:r}];if(!Array.isArray(r))return[{type:"text",text:String(r)}];let n=e.getFeatures(),o=[];for(let i of r)try{switch(i.type){case"text":o.push({type:"text",text:i.text});break;case"image":if(n.media.images.supported)i.altText?o.push({type:"text",text:`[Image: ${i.altText}]`}):o.push({type:"text",text:"[Image content]"});else if(i.altText)o.push({type:"text",text:i.altText});else if(t.imageToText)try{let s=await t.imageToText(i.image);o.push({type:"text",text:s})}catch(s){throw new Yt(s,"image","vision analysis")}else switch(t.fallbackBehavior){case"error":throw new xt("Images",e.getName(),!1);case"skip":continue;default:o.push({type:"text",text:"[Image content not supported by this provider]"})}break;case"audio":if(n.media.audio.supported)i.transcription?o.push({type:"text",text:i.transcription}):o.push({type:"text",text:"[Audio content]"});else if(i.transcription)o.push({type:"text",text:i.transcription});else if(t.audioToText)try{let s=await t.audioToText(i.data,i.format);o.push({type:"text",text:s})}catch(s){throw new Yt(s,"audio","transcription")}else switch(t.fallbackBehavior){case"error":throw new xt("Audio",e.getName(),!1);case"skip":continue;case"degrade":o.push({type:"text",text:"[Audio content not supported by this provider]"})}break;case"file":if(n.media.files.supported)i.extractedText?o.push({type:"text",text:i.extractedText}):o.push({type:"text",text:`[File: ${i.filename}]`});else if(i.extractedText)o.push({type:"text",text:i.extractedText});else if(t.fileToText)try{let s=await t.fileToText(i.data,i.mimeType);o.push({type:"text",text:s})}catch(s){throw new Yt(s,"file","text extraction")}else switch(t.fallbackBehavior){case"error":throw new xt("Files",e.getName(),!1);case"skip":continue;default:o.push({type:"text",text:`[File: ${i.filename} - content not accessible by this provider]`})}break;case"url":if(n.media.urls.supported)i.cachedContent?o.push({type:"text",text:i.cachedContent}):o.push({type:"text",text:`[Link: ${i.url}${i.title?` - ${i.title}`:""}]`});else if(i.cachedContent)o.push({type:"text",text:i.cachedContent});else if(t.urlToText)try{let s=await t.urlToText(i.url);o.push({type:"text",text:s})}catch(s){throw new Yt(s,"url","content fetching")}else switch(t.fallbackBehavior){case"error":throw new xt("URLs",e.getName(),!1);case"skip":continue;case"degrade":o.push({type:"text",text:`[Link: ${i.url}${i.title?` - ${i.title}`:""}]`})}break;default:typeof i=="object"&&i.text?o.push({type:"text",text:i.text}):o.push({type:"text",text:String(i)})}}catch(s){throw s instanceof xt||s instanceof Yt?s:new Yt(s,i.type||"unknown","content processing")}return o}function YC(r){let e=!1,t=!1,n=!1,o=!1;for(let i of r)if(i.role==="user"&&Array.isArray(i.content))for(let s of i.content)switch(s.type){case"image":e=!0;break;case"audio":t=!0;break;case"file":n=!0;break;case"url":o=!0;break}return{hasImages:e,hasAudio:t,hasFiles:n,hasUrls:o}}var Ls=()=>structuredClone({model:"reka-core",...Ue()}),QC=()=>structuredClone({...Ls(),model:"reka-core"}),XC=()=>structuredClone({model:"reka-core",...kt()}),ZC=()=>({...Ls(),model:"reka-flash"}),qT={functions:!0,streaming:!0,hasThinkingBudget:!1,hasShowThoughts:!1,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0},VT=r=>r?.map(e=>{let t=e,n=t?.config;if(!n)return e;let o={};n.maxTokens!==void 0&&(o.maxTokens=n.maxTokens),n.temperature!==void 0&&(o.temperature=n.temperature),n.topP!==void 0&&(o.topP=n.topP),n.presencePenalty!==void 0&&(o.presencePenalty=n.presencePenalty),n.frequencyPenalty!==void 0&&(o.frequencyPenalty=n.frequencyPenalty);let i=n.stopSequences??n.stop;return i!==void 0&&(o.stopSequences=i),n.n!==void 0&&(o.n=n.n),n.stream!==void 0&&(o.stream=n.stream),Object.keys(o).length>0?{...t,modelConfig:{...t.modelConfig??{},...o}}:e}),ui=class extends dt{constructor({apiKey:e,config:t,options:n,apiURL:o,modelInfo:i,models:s}){if(!e||e==="")throw new Error("Reka API key not set");let a={...Ls(),...t};i=[...Zo,...i??[]],super({apiKey:e,config:a,options:n,apiURL:o||"https://api.reka.ai/v1",modelInfo:i,models:VT(s),supportFor:qT}),super.setName("Reka")}};var ul=class{providers;processingServices;config;constructor(e){this.providers=[e.providers.primary,...e.providers.alternatives],this.processingServices=e.processing,this.config=e.routing}async chat(e,t={}){let n=await this.selectProviderWithDegradation(e,t.routingOptions||{}),o=await this.preprocessRequest(e,n.provider,t.processingOptions);try{return{response:await n.provider.chat(o,t),routing:n}}catch(i){if(i instanceof xt&&t.fallbackProviders?.length)return await this.tryFallbackProviders(e,t.fallbackProviders,t);throw i}}async preprocessRequest(e,t,n){let o={...n,fallbackBehavior:n?.fallbackBehavior||"degrade",imageToText:n?.imageToText||this.processingServices.imageToText,audioToText:n?.audioToText||this.processingServices.audioToText,fileToText:n?.fileToText||this.processingServices.fileToText,urlToText:n?.urlToText||this.processingServices.urlToText},i=[];for(let s of e.chatPrompt)if(s.role==="user"&&Array.isArray(s.content)){let a=await ll(s.content,t,o);a.every(l=>l.type==="text")&&a.length===1?i.push({...s,content:a[0].text}):i.push({...s,content:a.map(l=>({type:"text",text:l.text}))})}else i.push(s);return{...e,chatPrompt:i}}async selectProviderWithDegradation(e,t){let n=Nr(e),o=[],i=[],s=[];try{let a=Yc(e,this.providers,{requireExactMatch:t.requireExactMatch??this.config.capability.requireExactMatch,allowDegradation:t.allowDegradation??this.config.capability.allowDegradation}),c=a.getFeatures();return n.hasImages&&!c.media.images.supported&&(i.push("Images will be converted to text descriptions"),o.push("Image-to-text conversion")),n.hasAudio&&!c.media.audio.supported&&(i.push("Audio will be transcribed to text"),o.push("Audio-to-text transcription")),n.hasFiles&&!c.media.files.supported&&(i.push("File content will be extracted to text"),o.push("File-to-text extraction")),n.hasUrls&&!c.media.urls.supported&&(i.push("URL content will be pre-fetched"),o.push("URL content fetching")),n.requiresStreaming&&!c.streaming&&s.push("Streaming not supported - will use non-streaming mode"),n.requiresCaching&&!c.caching.supported&&s.push("Content caching not supported"),{provider:a,processingApplied:o,degradations:i,warnings:s}}catch(a){throw new Error(`Provider selection failed: ${a instanceof Error?a.message:"Unknown error"}`)}}async tryFallbackProviders(e,t,n){for(let o of t)try{let i={provider:o,processingApplied:["Fallback provider selection"],degradations:["Using fallback provider due to primary provider failure"],warnings:[]},s=await this.preprocessRequest(e,o,{fallbackBehavior:"degrade"});return{response:await o.chat(s,n),routing:i}}catch{}throw new Error("All fallback providers failed")}async getRoutingRecommendation(e){return await this.selectProviderWithDegradation(e,{})}async validateRequest(e){let t=Nr(e),n=[],o=[];try{let i=await this.selectProviderWithDegradation(e,{});return i.degradations.length>0&&(n.push(...i.degradations),o.push("Consider using a provider that natively supports all media types")),i.warnings.length>0&&n.push(...i.warnings),t.hasImages&&this.processingServices.imageToText===void 0&&(this.providers.some(a=>a.getFeatures().media.images.supported)||(n.push("No image processing service available and no providers support images"),o.push("Add imageToText processing service or use image-capable provider"))),t.hasAudio&&this.processingServices.audioToText===void 0&&(this.providers.some(a=>a.getFeatures().media.audio.supported)||(n.push("No audio processing service available and no providers support audio"),o.push("Add audioToText processing service or use audio-capable provider"))),{canHandle:n.length===0||i.degradations.length>0,issues:n,recommendations:o}}catch(i){return{canHandle:!1,issues:[`Cannot route request: ${i instanceof Error?i.message:"Unknown error"}`],recommendations:["Add more providers or processing services to handle this request"]}}}getRoutingStats(){let e={};for(let t of this.providers){let n=t.getFeatures(),o=t.getName();n.functions&&(e.Functions=e.Functions||[],e.Functions.push(o)),n.streaming&&(e.Streaming=e.Streaming||[],e.Streaming.push(o)),n.media.images.supported&&(e.Images=e.Images||[],e.Images.push(o)),n.media.audio.supported&&(e.Audio=e.Audio||[],e.Audio.push(o)),n.media.files.supported&&(e.Files=e.Files||[],e.Files.push(o)),n.media.urls.supported&&(e.URLs=e.URLs||[],e.URLs.push(o)),n.caching.supported&&(e.Caching=e.Caching||[],e.Caching.push(o))}return{totalProviders:this.providers.length,capabilityMatrix:e,recommendedProvider:this.providers[0]?.getName()||"None"}}};var am=()=>structuredClone({model:"Llama-3.2-3B-Instruct-q4f32_1-MLC",...Ue()}),eb=()=>structuredClone({model:"Llama-3.2-3B-Instruct-q4f32_1-MLC",...kt()}),sm=class{constructor(e,t){this.config=e;this.engine=t}tokensUsed;engine;getTokenUsage(){return this.tokensUsed}getModelConfig(){let{config:e}=this;return{maxTokens:e.maxTokens,temperature:e.temperature,topP:e.topP,topK:e.topK,presencePenalty:e.presencePenalty,frequencyPenalty:e.frequencyPenalty,stopSequences:e.stopSequences,endSequences:e.endSequences,stream:e.stream,n:e.n}}createChatReq(e){let t=e.model,n=this.config.supportsFunctions??!1,o=e.chatPrompt.map(u=>{if(u.role==="function")return{role:"tool",tool_call_id:u.functionId,content:typeof u.result=="string"?u.result:JSON.stringify(u.result)};let d="";typeof u.content=="string"?d=u.content:Array.isArray(u.content)&&(d=u.content.filter(m=>m.type==="text").map(m=>m.text).join(`
|
|
1264
1264
|
`));let p={role:u.role,content:d};return u.role==="assistant"&&u.functionCalls?.length?{...p,tool_calls:u.functionCalls.map(m=>({id:m.id,type:"function",function:{name:m.function.name,arguments:typeof m.function.params=="string"?m.function.params:JSON.stringify(m.function.params||{})}}))}:p}),i=n?e.functions?.map(u=>({type:"function",function:{name:u.name,description:u.description,parameters:u.parameters||{type:"object",properties:{}}}})):void 0,s=n&&i?.length?e.functionCall===void 0?"auto":e.functionCall:void 0,a=this.createResponseFormat(e.responseFormat),c={name:"/chat/completions",localCall:async(u,d)=>{try{let p=await this.engine.chat.completions.create({...u,stream:d??!1});return d?this.toReadableStream(p):p}catch(p){let m=p instanceof Error?p.message:String(p);throw new Error(`WebLLM API error: ${m}`,{cause:p})}}},l={model:t,messages:o,...i?.length?{tools:i}:{},...s?{tool_choice:s}:{},...a?{response_format:a}:{},max_tokens:e.modelConfig?.maxTokens??this.config.maxTokens,...e.modelConfig?.temperature!==void 0?{temperature:e.modelConfig.temperature}:{},...e.modelConfig?.topP!==void 0?{top_p:e.modelConfig.topP}:{},presence_penalty:e.modelConfig?.presencePenalty??this.config.presencePenalty,frequency_penalty:e.modelConfig?.frequencyPenalty??this.config.frequencyPenalty,stop:e.modelConfig?.stopSequences??this.config.stopSequences,stream:e.modelConfig?.stream??this.config.stream,...e.modelConfig?.stream??this.config.stream?{stream_options:{include_usage:!0}}:{},n:e.modelConfig?.n??this.config.n,...this.config.logitBias!==void 0?{logit_bias:this.config.logitBias}:{},...this.config.logProbs!==void 0?{logprobs:this.config.logProbs}:{},...this.config.topLogprobs!==void 0?{top_logprobs:this.config.topLogprobs}:{}};return[c,l]}createResponseFormat(e){if(e?.type==="json_object")return{type:"json_object"};if(e?.type==="json_schema")return{type:"json_schema",json_schema:e.schema??e.json_schema}}toReadableStream(e){if(this.isReadableStream(e))return e;if(e&&typeof e[Symbol.asyncIterator]=="function")return new ReadableStream({async start(t){try{for await(let n of e)t.enqueue(n);t.close()}catch(n){t.error(n)}}});throw new Error("WebLLM streaming response is not async iterable")}isReadableStream(e){return e!==null&&typeof e=="object"&&typeof e.getReader=="function"}createEmbedReq=e=>{throw new Error("WebLLM does not support embeddings")};createChatResp=e=>(this.tokensUsed={promptTokens:e.usage?.prompt_tokens??0,completionTokens:e.usage?.completion_tokens??0,totalTokens:e.usage?.total_tokens??0},{results:e.choices.map((n,o)=>{let i="stop";switch(n.finish_reason){case"stop":i="stop";break;case"length":i="length";break;case"tool_calls":i="function_call";break;case"content_filter":i="content_filter";break;default:i="stop";break}let s=n.message.tool_calls?.map(a=>({id:a.id,type:"function",function:{name:a.function.name,params:a.function.arguments}}));return{index:o,id:e.id,content:n.message.content||"",functionCalls:s,finishReason:i,logprobs:n.logprobs?this.createLogprobs(n.logprobs):void 0}}),remoteId:e.id});createChatStreamResp=(e,t)=>{let n=t,o=e.choices[0];if(!o)throw new Error("No choice in WebLLM stream response");if(o.delta.content&&(n.content=(n.content||"")+o.delta.content),o.delta.tool_calls){n.toolCalls||(n.toolCalls=[]);for(let c of o.delta.tool_calls){let l=n.toolCalls[c.index];l?(l.id=c.id??l.id,l.type=c.type??l.type,l.function??={},l.function.name=c.function?.name??l.function.name,c.function?.arguments&&(l.function.arguments=(l.function?.arguments||"")+c.function.arguments)):n.toolCalls[c.index]={id:c.id,type:c.type,function:{name:c.function?.name,arguments:c.function?.arguments||""}}}}if(o.logprobs){let c=this.createLogprobs(o.logprobs);n.logprobs={content:[...n.logprobs?.content??[],...c.content??[]]}}e.usage&&(this.tokensUsed={promptTokens:e.usage.prompt_tokens,completionTokens:e.usage.completion_tokens,totalTokens:e.usage.total_tokens});let i;if(o.finish_reason)switch(o.finish_reason){case"stop":i="stop";break;case"length":i="length";break;case"tool_calls":i="function_call";break;case"content_filter":i="content_filter";break;default:i="stop";break}let s=n.toolCalls?.map(c=>({id:c.id||"",type:"function",function:{name:c.function?.name||"",params:c.function?.arguments||""}}));return{results:[{index:0,id:e.id,content:n.content||"",functionCalls:s,finishReason:i,logprobs:n.logprobs}],remoteId:e.id}};createLogprobs(e){return{content:e.content.map(t=>({token:t.token,logprob:t.logprob,topLogprobs:t.top_logprobs?.map(n=>({token:n.token,logprob:n.logprob}))}))}}createEmbedResp(e){throw new Error("WebLLM does not support embeddings")}},di=class extends St{constructor({engine:e,config:t,options:n,models:o}){if(!e)throw new Error("WebLLM engine instance is required");let i={...am(),...t},s=new sm(i,e);super(s,{name:"WebLLM",apiURL:void 0,headers:async()=>({}),modelInfo:ti,defaults:{model:i.model},supportFor:a=>({functions:i.supportsFunctions??!1,streaming:!0,media:{images:{supported:!1,formats:[]},audio:{supported:!1,formats:[]},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!1,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:!1,multiTurn:!0}),options:n,models:o})}};var tb=()=>({input:{format:"pcm16",mimeType:"audio/pcm",sampleRate:24e3,channels:1},output:{enabled:!0,voice:"eve",format:"pcm16",mimeType:"audio/pcm",sampleRate:24e3,channels:1,includeTranscript:!0},live:{turnTimeoutMs:3e4}}),dl=()=>structuredClone({model:"grok-4.3",...Ue()}),nb=()=>structuredClone({...dl(),model:"grok-4.3"}),rb=()=>structuredClone({...Ue(),model:"grok-voice-think-fast-1.0",audio:tb(),stream:!1}),pl=r=>r==="grok-voice-think-fast-1.0"||r==="grok-voice-fast-1.0"||r.startsWith("grok-voice-"),ml=(r,e)=>bt(bt(tb(),r),e),cm=(r,e,t)=>pl(r)&&qt(ml(e,t)),lm=r=>zo({...r,apiName:"grok-realtime-audio",providerName:"Grok Realtime",wsURL:e=>`wss://api.x.ai/v1/realtime?model=${encodeURIComponent(e)}`,createSessionUpdate:({request:e,audio:t})=>{let n=e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
|
|
1265
1265
|
`),o=t.input,i=t.output;return{type:"session.update",session:{voice:typeof i?.voice=="object"?i.voice.id:i?.voice??"eve",...n?{instructions:n}:{},turn_detection:null,audio:{input:{format:{type:"audio/pcm",rate:o?.sampleRate??24e3}},output:{format:{type:"audio/pcm",rate:i?.sampleRate??24e3}}}}}}}),pi=class extends dt{constructor({apiKey:e,config:t,options:n,models:o,modelInfo:i}){if(!e||e==="")throw new Error("Grok API key not set");let s={...dl(),...t};i=[...ri,...i??[]];let a=l=>{let u=pl(l),d=it({model:l,modelInfo:i,models:o});return{functions:!u,streaming:!0,hasThinkingBudget:d?.supported?.thinkingBudget??!1,hasShowThoughts:d?.supported?.showThoughts??!1,structuredOutputs:d?.supported?.structuredOutputs??!1,media:{images:{supported:!u,formats:u?[]:["image/jpeg","image/png"],maxSize:u?void 0:20*1024*1024,detailLevels:u?void 0:["high","low","auto"]},audio:{supported:u,formats:u?["pcm16","pcm"]:[],output:{supported:u,formats:u?["pcm16","pcm"]:[],sampleRate:u?24e3:void 0,voices:u?["eve","ara","rex","sal","leo"]:[]}},files:{supported:!1,formats:[],uploadMethod:"none"},urls:{supported:!1,webSearch:!0,contextFetching:!1}},caching:{supported:!1,types:[]},thinking:d?.supported?.thinkingBudget??!1,multiTurn:!0}},c=(l,u)=>{let d=it({model:l.model,modelInfo:i,models:o}),p=d?.name==="grok-4.3",m=l;if(p&&d?.supported?.thinkingBudget)switch(u.thinkingTokenBudget){case"none":m={...m,reasoning_effort:"none"};break;case"minimal":case"low":m={...m,reasoning_effort:"low"};break;case"medium":m={...m,reasoning_effort:"medium"};break;case"high":case"highest":m={...m,reasoning_effort:"high"};break}else if(m.reasoning_effort){let{reasoning_effort:g,...h}=m;m=h}if(p){let{presence_penalty:g,frequency_penalty:h,stop:x,...f}=m;m=f}if(n?.searchParameters){let g=n.searchParameters;return{...m,search_parameters:{mode:g.mode,return_citations:g.returnCitations,from_date:g.fromDate,to_date:g.toDate,max_search_results:g.maxSearchResults,sources:g.sources?.map(h=>({type:h.type,country:h.country,excluded_websites:h.excludedWebsites,allowed_websites:h.allowedWebsites,safe_search:h.safeSearch,x_handles:h.xHandles,links:h.links}))}}}return m};super({apiKey:e,config:s,options:n,apiURL:"https://api.x.ai/v1",modelInfo:i,models:o,supportFor:a,chatReqUpdater:c,realtime:{apiName:"Grok Realtime",shouldUse:cm,resolveAudioConfig:ml,createApi:lm}}),super.setName("Grok"),this.setBatchAudioConfig({speechVoice:"eve",speechFormat:"mp3"})}async transcribe(e,t){let n=this.getOptions();return await Go({url:`${this.openAICompatibleApiURL}/stt`,headers:{Authorization:`Bearer ${this.openAICompatibleApiKey}`},audio:e.audio,fields:{language:e.language,keyterm:e.prompt,format:!0},fetch:t?.fetch??n.fetch,abortSignal:t?.abortSignal??n.abortSignal})}async speak(e,t){let n=e.format??this.batchAudioConfig.speechFormat??"mp3",o=typeof e.voice=="object"?e.voice.id:e.voice??this.batchAudioConfig.speechVoice??"eve",i=n==="pcm16"||n==="raw"?"pcm":n==="ulaw"?"mulaw":n,s=this.getOptions();return await fn({url:`${this.openAICompatibleApiURL}/tts`,headers:{Authorization:`Bearer ${this.openAICompatibleApiKey}`},body:{text:e.text,voice_id:o,language:e.language??"auto",output_format:{codec:i,...e.sampleRate?{sample_rate:e.sampleRate}:{}},...e.speed!==void 0?{speed:e.speed}:{}},format:n,transcript:e.text,fetch:t?.fetch??s.fetch,abortSignal:t?.abortSignal??s.abortSignal})}};function ob(r){return $s.create(r)}var $s=class r{ai;static create(e){return new r(e)}constructor(e){switch(e.name){case"openai":this.ai=new qo(e);break;case"openai-responses":this.ai=new si(e);break;case"azure-openai":this.ai=new Vo(e);break;case"grok":this.ai=new pi(e);break;case"cohere":this.ai=new oi(e);break;case"google-gemini":this.ai=new ci(e);break;case"anthropic":this.ai=new jo(e);break;case"mistral":this.ai=new li(e);break;case"deepseek":this.ai=new ii(e);break;case"deepseek-responses":this.ai=new ai(e);break;case"reka":this.ai=new ui(e);break;case"webllm":this.ai=new di(e);break;default:throw new Error("Unknown AI")}}getName(){return this.ai.getName()}getId(){return this.ai.getId()}getFeatures(e){return this.ai.getFeatures(e)}getModelList(){return this.ai.getModelList()}getLastUsedChatModel(){return this.ai.getLastUsedChatModel()}getLastUsedEmbedModel(){return this.ai.getLastUsedEmbedModel()}getLastUsedModelConfig(){return this.ai.getLastUsedModelConfig()}getMetrics(){return this.ai.getMetrics()}getEstimatedCost(e){return this.ai.getEstimatedCost(e)}async chat(e,t){return await this.ai.chat(e,t)}async embed(e,t){return await this.ai.embed(e,t)}async transcribe(e,t){return await this.ai.transcribe(e,t)}async speak(e,t){return await this.ai.speak(e,t)}setOptions(e){this.ai.setOptions(e)}getOptions(){return this.ai.getOptions()}getLogger(){return this.ai.getLogger()}};function ib(r,e){return r.filter(t=>!e.has(t))}function sb(r){let e={};for(let t of r)e[t]=(e[t]||0)+1;return e}function Gr(r){let e=r.normalize("NFD");return e=e.replace(/\b(a|an|the)\b/g," "),e=e.split(/\s+/).join(" "),e=e.replace(/[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]/g,""),e.toLowerCase()}function HT(r,e){return Gr(r)===Gr(e)?1:0}function KT(r,e){let t=Gr(r).split(" "),n=Gr(e).split(" "),o=sb(t),i=sb(n),s=0;for(let l in o){let u=o[l]??0,d=i[l]??0;s+=Math.min(u,d)}if(s===0)return 0;let a=s/t.length,c=s/n.length;return 2*a*c/(a+c)}function WT(r,e,t,n=!1){let o=Gr(r).split(" "),i=Gr(e).split(" "),s=Gr(t).split(" "),a=new Set([...ac,...o]);i=ib(i,a),s=ib(s,a);let c=0,l=c/i.length,u=c/s.length,d=2*l*u/(l+u);return n?u:d}var ab={emScore:HT,f1Score:KT,novelF1ScoreOptimized:WT};var gl=class{ai;program;examples;constructor({ai:e,program:t,examples:n=[]}){if(n.length===0)throw new Error("No examples found");this.ai=e,this.program=t,this.examples=n}async run(e){let t=Date.now(),n=this.examples.length,o=0;for(let s=0;s<n;s++){let a=this.examples[s];if(!a)throw new Error("Invalid example");try{let c=await this.program.forward(this.ai,a,{maxRetries:1}),l=await e({prediction:c,example:a});o+=l}catch(c){console.warn(`Program evaluation failed for example ${s}: ${c instanceof Error?c.message:"Unknown error"}`)}}let i=n>0?o/n:0;this.ai.getOptions().debug&&console.log(`
|