@clinebot/llms 0.0.25 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.js +1 -1
- package/dist/index.js +1 -1
- package/dist/providers.js +1 -1
- package/dist/runtime.js +1 -1
- package/package.json +2 -2
package/dist/index.browser.js
CHANGED
|
@@ -50,5 +50,5 @@ ${t}
|
|
|
50
50
|
`)}function Qt(e,t=!1){let a=e.reduce((n,o,u)=>{if(o.role==="user")n.push(u);return n},[]),r=t?new Set(a.slice(-2)):new Set,i=[];for(let[n,o]of e.entries()){let u=Yb(o,r.has(n));if(u)i.push(u)}return i}function Yb(e,t){let{role:a,content:r}=e;if(typeof r==="string"){let n={type:"text",text:r};if(t)n.cache_control={type:"ephemeral"};return{role:a,content:[n]}}let i=Hb(r,t);if(i.length===0)return null;return{role:a,content:i}}function Hb(e,t){let a=[];for(let r=0;r<e.length;r++){let i=e[r],n=r===e.length-1,o=e4(i,t&&n);if(o)a.push(o)}return a}function e4(e,t){switch(e.type){case"text":{let r={type:"text",text:e.text};if(t)r.cache_control={type:"ephemeral"};return r}case"file":{let a=e;return{type:"text",text:me(a.path,a.content)}}case"image":{let a=e;return{type:"image",source:{type:"base64",media_type:a.mediaType,data:a.data}}}case"tool_use":{let a=e;return{type:"tool_use",id:a.id,name:a.name,input:ke(a.input)}}case"tool_result":{let a=e,r;if(typeof a.content==="string")r=a.content;else r=a.content.map((i)=>{if(i.type==="text")return{type:"text",text:i.text};else if(i.type==="file"){let n=i;return{type:"text",text:me(n.path,n.content)}}else return{type:"image",source:{type:"base64",media_type:i.mediaType,data:i.data}}});return{type:"tool_result",tool_use_id:a.tool_use_id,content:r,is_error:a.is_error}}case"thinking":{let a=e;return{type:"thinking",thinking:a.thinking,signature:a.signature}}case"redacted_thinking":return{type:"redacted_thinking",data:e.data};default:return null}}function Fe(e){return e.map((t)=>({name:t.name,description:t.description,input_schema:t.inputSchema}))}var Bs={maxRetries:4,baseDelay:2000,maxDelay:15000};class ht extends Error{retryAfterSeconds;constructor(e,t,a){super(e,a);this.retryAfterSeconds=t;this.name="RetriableError"}}function Qs(e){if(e instanceof ht)return!0;if(e instanceof Error){let t=e.message.toLowerCase();if(t.includes("429")||t.includes("rate limit")||t.includes("too many requests"))return!0;if(t.includes("500")||t.includes("502")||t.includes("503")||t.includes("504"))return!0;if(t.includes("network")||t.includes("timeout")||t.includes("econnreset")||t.includes("econnrefused"))return!0}return!1}function Ks(e,t={}){let{baseDelay:a=Bs.baseDelay,maxDelay:r=Bs.maxDelay}=t,i=2**e*a,n=Math.random()*0.25*i;return Math.min(i+n,r)}function Js(e){return new Promise((t)=>setTimeout(t,e))}async function*H(e,t={}){let{maxRetries:a=Bs.maxRetries,onRetryAttempt:r}=t;for(let i=0;i<=a;i++)try{yield*e();return}catch(n){if(!(i!==a&&Qs(n)))throw n;let c;if(n instanceof ht&&n.retryAfterSeconds)c=n.retryAfterSeconds*1000;else c=Ks(i,t);if(r)r(i+1,a,c,n);await Js(c)}throw Error("Retry logic exhausted without returning or throwing")}import{nanoid as t4}from"nanoid";var i4={"HTTP-Referer":"https://cline.bot","X-Title":"Cline","X-IS-MULTIROOT":"false","X-CLIENT-TYPE":"cline-sdk"},th=new WeakMap,a4=0;function Kr(e){let t=th.get(e);if(!t)t=`abort_${++a4}`,th.set(e,t);return t}function Vs(e){return e instanceof Error?{name:e.name,message:e.message}:e}class X{config;abortController;abortSignalSequence=0;constructor(e){this.config=e}getModel(){let e=this.config.modelId;return{id:e,info:{...this.config.modelInfo??{},id:e}}}async getApiStreamUsage(){return}getAbortSignal(){let e=new AbortController;this.abortController=e,e.signal.addEventListener("abort",()=>{if(this.abortController===e)this.abortController=void 0},{once:!0});let t=this.config.abortSignal;if(t)if(t.aborted)this.logAbort("debug","Provider request inherited aborted signal",{controllerId:Kr(e),reason:Vs(t.reason)}),e.abort(t.reason);else{let a=++this.abortSignalSequence;t.addEventListener("abort",()=>{this.logAbort("warn","Provider request abort signal fired",{controllerId:Kr(e),signalId:a,reason:Vs(t.reason)}),e.abort(t.reason)},{once:!0}),this.logAbort("debug","Provider request attached abort signal",{controllerId:Kr(e),signalId:a})}return e.signal}abort(){this.abortController?.abort()}setAbortSignal(e){if(this.config.abortSignal=e,e?.aborted)this.logAbort("debug","Provider handler received pre-aborted signal",{controllerId:this.abortController?Kr(this.abortController):void 0,reason:Vs(e.reason)}),this.abortController?.abort(e.reason)}logAbort(e,t,a){this.config.logger?.[e]?.(t,{providerId:this.config.providerId,modelId:this.config.modelId,...a})}supportsPromptCache(e){let t=e??this.config.modelInfo??this.config.knownModels?.[this.config.modelId],a=t?.pricing;return t?.capabilities?.includes("prompt-cache")===!0||this.config.capabilities?.includes("prompt-cache")===!0||typeof a?.cacheRead==="number"||typeof a?.cacheWrite==="number"}calculateCost(e,t,a=0,r=0){let i=(this.config.modelInfo??this.config.knownModels?.[this.config.modelId])?.pricing;if(!i?.input||!i?.output)return;return e/1e6*i.input+t/1e6*i.output+(a>0?a/1e6*(i.cacheRead??0):0)+(r>0?r/1e6*(i.cacheWrite??i.input*1.25):0)}calculateCostFromInclusiveInput(e,t,a=0,r=0){return this.calculateCost(Math.max(0,e-a-r),t,a,r)}createResponseId(){return t4()}withResponseId(e,t){return{...e,id:t}}*withResponseIdForAll(e,t){for(let a of e)yield{...a,id:t}}getRequestHeaders(){return{...i4,...this.config.headers??{}}}normalizeOpenAICompatibleBadRequest(e){let t=e;if((t?.status??t?.response?.status??t?.error?.code??(typeof t?.message==="string"&&t.message.includes("400")?400:void 0))!==400)return;let r=t?.error?.metadata?.raw,i=this.parseRawProviderError(r),n=i?.error?.message?.trim()||t?.error?.message?.trim()||t?.message?.trim()||"Provider returned error",o=t?.error?.metadata?.provider_name?.trim()||"Provider",u=i?.request_id?.trim(),c=this.rewriteProviderBadRequestDetail(n),s=u?` Request ID: ${u}.`:"";return Error(`${o} request was rejected (HTTP 400). ${c}${s}`,{cause:e instanceof Error?e:void 0})}parseRawProviderError(e){if(!e)return;try{return JSON.parse(e)}catch{return}}rewriteProviderBadRequestDetail(e){let t=e.match(/prompt is too long:\s*([\d,]+)\s*tokens?\s*>\s*([\d,]+)\s*maximum/i);if(t){let a=t[1],r=t[2];return`Prompt is too long: ${a} tokens exceeds the ${r} token limit.`}return e.endsWith(".")?e:`${e}.`}}var r4=1024,o4="CLINE_DEBUG_THINKING";function u4(){let e=process.env[o4];if(!e)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}class ga extends X{type="anthropic";client;ensureClient(){if(!this.client){let e=ue(J(this.config),this.config.apiKey);if(!e)throw Error(we(J(this.config)));this.client=new n4({apiKey:e,baseURL:this.config.baseUrl||void 0,defaultHeaders:this.getRequestHeaders()})}return this.client}getModel(){let e=this.config.modelId,a=(this.config.knownModels??{})[e]??{},r=this.config.modelInfo??a;return{id:e,info:{...r,id:e}}}getMessages(e,t){let a=this.supportsPromptCache(this.getModel().info);return Qt(t,a)}async*createMessage(e,t,a){yield*H(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let r=this.ensureClient(),i=this.getModel(),n=this.getAbortSignal(),o=this.createResponseId(),u=gt(i.info),c=this.config.thinkingBudgetTokens??(this.config.thinking?r4:0),s=u&&c>0?c:0,l=a&&a.length>0,d=this.supportsPromptCache(i.info),g=u&&s>0,h=u4(),w={},j=(B)=>{w[B]=(w[B]??0)+1};if(h)console.error(`[thinking-debug][anthropic][request] model=${i.id} thinkingFlag=${this.config.thinking===!0} supportsModelThinking=${u} requestedBudget=${c} effectiveBudget=${s} reasoningOn=${g} promptCache=${d}`);let _=this.getMessages(e,t),z=l?Fe(a):void 0,$={signal:n},U={model:i.id,thinking:g?{type:"enabled",budget_tokens:s}:void 0,max_tokens:i.info.maxTokens??this.config.maxOutputTokens??128000,temperature:g?void 0:0,system:[d?{text:e,type:"text",cache_control:{type:"ephemeral"}}:{text:e,type:"text"}],messages:_,stream:!0,tools:z,tool_choice:l&&!g?{type:"auto"}:void 0},I=await r.messages.create(U,$),L={id:"",name:"",arguments:""},Y={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0},Oe=null;for await(let B of I){if(h){if(j(`event:${B.type}`),B.type==="content_block_start")j(`content_block_start:${B.content_block?.type??"unknown"}`);else if(B.type==="content_block_delta")j(`content_block_delta:${B.delta?.type??"unknown"}`)}if(B.type==="message_delta")Oe=B.delta?.stop_reason??Oe;yield*this.withResponseIdForAll(this.processChunk(B,L,Y,o),o)}if(h){let B=Object.entries(w).map(([Me,ee])=>`${Me}=${ee}`).sort().join(" ");console.error(`[thinking-debug][anthropic][stream] ${B}`)}yield{type:"done",success:!0,id:o,incompleteReason:Oe==="max_tokens"?"max_tokens":void 0}}*processChunk(e,t,a,r){switch(e.type){case"message_start":{let i=e.message.usage;a.inputTokens=i.input_tokens||0,a.outputTokens=i.output_tokens||0,a.cacheWriteTokens=i.cache_creation_input_tokens||0,a.cacheReadTokens=i.cache_read_input_tokens||0,yield{type:"usage",inputTokens:a.inputTokens,outputTokens:a.outputTokens,cacheWriteTokens:a.cacheWriteTokens,cacheReadTokens:a.cacheReadTokens,totalCost:this.calculateCost(a.inputTokens,a.outputTokens,a.cacheReadTokens,a.cacheWriteTokens),id:r};break}case"message_delta":{a.outputTokens=e.usage.output_tokens||a.outputTokens,yield{type:"usage",inputTokens:a.inputTokens,outputTokens:a.outputTokens,cacheWriteTokens:a.cacheWriteTokens,cacheReadTokens:a.cacheReadTokens,totalCost:this.calculateCost(a.inputTokens,a.outputTokens,a.cacheReadTokens,a.cacheWriteTokens),id:r};break}case"content_block_start":{let i=e.content_block;switch(i.type){case"thinking":yield{type:"reasoning",reasoning:typeof i.thinking==="string"?i.thinking??"":"",signature:typeof i.signature==="string"?i.signature??void 0:void 0,id:r};break;case"redacted_thinking":yield{type:"reasoning",reasoning:"",redacted_data:typeof i.data==="string"?i.data??void 0:void 0,id:r};break;case"text":yield{type:"text",text:"",id:r};break;case"tool_use":t.id=i.id,t.name=i.name,t.arguments="";break}break}case"content_block_delta":{let i=e.delta;switch(i.type){case"thinking_delta":yield{type:"reasoning",reasoning:i.thinking,id:r};break;case"signature_delta":yield{type:"reasoning",reasoning:"",signature:typeof i.signature==="string"?i.signature??void 0:void 0,id:r};break;case"text_delta":yield{type:"text",text:i.text,id:r};break;case"input_json_delta":t.arguments+=i.partial_json;break}break}case"content_block_stop":{if(t.id){let i;try{i=JSON.parse(t.arguments||"{}")}catch{i=t.arguments}yield{type:"tool_calls",id:r,tool_call:{call_id:t.id,function:{name:t.name,arguments:i}}},t.id="",t.name="",t.arguments=""}break}}}}class Jr extends X{type="fetch";getMessages(e,t){return{systemPrompt:e,messages:t}}getBaseUrl(){return this.config.baseUrl?.trim()||this.getDefaultBaseUrl()}getJsonHeaders(e){return{"Content-Type":"application/json",...this.getRequestHeaders(),...e??{}}}async fetchJson(e,t){let a=await fetch(`${this.getBaseUrl()}${e}`,{method:t.method??"POST",headers:this.getJsonHeaders(t.headers),body:t.body?JSON.stringify(t.body):void 0,signal:this.getAbortSignal()});if(!a.ok){let r=await a.text();throw Error(`HTTP ${a.status}: ${r}`)}return await a.json()}async*createMessage(e,t,a){yield*H(()=>this.createMessageWithFetch(e,t))}}var c4="https://api.asksage.ai/server",s4="gpt-4o";class ha extends Jr{type="fetch";getDefaultBaseUrl(){return c4}getModel(){let e=this.config.modelId?.trim()||s4,t=this.config.modelInfo??this.config.knownModels?.[e]??{id:e,capabilities:["tools"]};return{id:e,info:{...t,id:e}}}getJsonHeaders(e){let t=ue(J(this.config),this.config.apiKey);if(!t)throw Error("AskSage API key is required");return super.getJsonHeaders({"x-access-tokens":t,...e??{}})}async*createMessageWithFetch(e,t){let a=this.createResponseId(),{id:r}=this.getModel(),i={system_prompt:e,message:t.map((u)=>({user:u.role==="assistant"?"gpt":"me",message:this.serializeMessageContent(u.content)})),model:r,dataset:"none",usage:!0},n;try{n=await this.fetchJson("/query",{method:"POST",body:i})}catch(u){let c=u instanceof Error?u.message:String(u);throw Error(`AskSage request failed: ${c}`)}for(let u of n.tool_responses??[])yield{type:"text",text:`[Tool Response: ${JSON.stringify(u)}]
|
|
51
51
|
`,id:a};let o=n.message?.trim();if(!o)throw Error("AskSage request failed: no content in response");if(yield{type:"text",text:o,id:a},n.usage)yield{type:"usage",inputTokens:n.usage.model_tokens.prompt_tokens,outputTokens:n.usage.model_tokens.completion_tokens,cacheReadTokens:0,cacheWriteTokens:0,totalCost:n.usage.asksage_tokens,id:a};yield{type:"done",success:!0,id:a}}serializeMessageContent(e){if(typeof e==="string")return e;return e.map((t)=>("text"in t)?t.text:"").join("").trim()}}var Vr,Xr;async function l4(){if(Vr)return Vr;let e="@ai-sdk/amazon-bedrock",t=await import(e);if(!t.createAmazonBedrock)throw Error(`Failed to load createAmazonBedrock from ${e}`);return Vr=t.createAmazonBedrock,Vr}async function p4(){if(Xr)return Xr;let e="@aws-sdk/credential-providers",t=await import(e);if(!t.fromNodeProviderChain)throw Error(`Failed to load fromNodeProviderChain from ${e}`);return Xr=t.fromNodeProviderChain,Xr}async function ih(e,t){let a=await l4(),r=e.region??"us-east-1",i=e.aws?.authentication,n=Boolean(e.aws?.accessKey&&e.aws?.secretKey),o=i==="profile"||i==="iam"||!i&&!n&&!e.apiKey,u;if(o)u=(await p4())({profile:e.aws?.profile});return a({region:r,accessKeyId:e.aws?.accessKey??void 0,secretAccessKey:e.aws?.secretKey??void 0,sessionToken:e.aws?.sessionToken??void 0,apiKey:e.apiKey??void 0,baseURL:e.aws?.endpoint??e.baseUrl??void 0,headers:t,credentialProvider:u})}var ah=":1m",Yr,m4=1024,d4="medium";async function g4(){if(Yr)return Yr;return Yr=await import("ai"),Yr}class Hr extends X{type="bedrock";clientFactory;async ensureClientFactory(){if(!this.clientFactory)this.clientFactory=await ih(this.config,this.getRequestHeaders());return this.clientFactory}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??{};return{id:e,info:{...t,id:e}}}getMessages(e,t){return f4(e,t)}async*createMessage(e,t,a){yield*H(()=>this.createMessageInternal(e,t,a),{maxRetries:4})}async*createMessageInternal(e,t,a){let r=await g4(),i=await this.ensureClientFactory(),n=this.createResponseId(),o=this.getAbortSignal(),u=this.getModel(),c=u.id,s={},l={};if(c.endsWith(ah))c=c.slice(0,-ah.length),l.anthropicBeta=["context-1m-2025-08-07"];let d=gt(u.info),g=this.config.thinkingBudgetTokens??(this.config.thinking?m4:0),h=!1;if(d&&g>0&&c.includes("anthropic"))l.reasoningConfig={type:"enabled",budgetTokens:g},h=!0;else if(d&&c.includes("amazon.nova")){let _=this.config.reasoningEffort??(this.config.thinking?d4:void 0);if(_)l.reasoningConfig={type:"enabled",maxReasoningEffort:_},h=!0}if(Object.keys(l).length>0)s.bedrock=l;let w=r.streamText({model:i(c),messages:this.getMessages(e,t),tools:h4(a),maxTokens:u.info.maxTokens??this.config.maxOutputTokens??128000,temperature:h?void 0:u.info.temperature??0,providerOptions:Object.keys(s).length>0?s:void 0,abortSignal:o}),j=!1;if(w.fullStream)for await(let _ of w.fullStream){let z=_.type;if(z==="text-delta"){let $=_.textDelta??_.delta;if($)yield{type:"text",text:$,id:n};continue}if(z==="reasoning-delta"||z==="reasoning"){let $=_.textDelta??_.reasoning;if($)yield{type:"reasoning",reasoning:$,id:n};continue}if(z==="tool-call"){let $=_.toolCallId??_.id,U=_.toolName??_.name,I=_.args??{};yield{type:"tool_calls",id:n,tool_call:{call_id:$,function:{name:U,arguments:I}}};continue}if(z==="error"){let $=_.error?.message??"Bedrock stream failed";throw Error($)}if(z==="finish"){let $=_.usage??{},U=Be($.inputTokens),I=Be($.outputTokens),L=Be($.reasoningTokens),Y=Be($.cachedInputTokens);yield{type:"usage",inputTokens:U,outputTokens:I,thoughtsTokenCount:L,cacheReadTokens:Y,totalCost:this.calculateCostFromInclusiveInput(U,I,Y),id:n},j=!0}}else if(w.textStream)for await(let _ of w.textStream)yield{type:"text",text:_,id:n};if(!j&&w.usage){let _=await w.usage,z=Be(_.inputTokens),$=Be(_.outputTokens),U=Be(_.reasoningTokens),I=Be(_.cachedInputTokens);yield{type:"usage",inputTokens:z,outputTokens:$,thoughtsTokenCount:U,cacheReadTokens:I,totalCost:this.calculateCostFromInclusiveInput(z,$,I),id:n}}yield{type:"done",success:!0,id:n}}}function Be(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function h4(e){if(!e||e.length===0)return;let t=Fe(e);return Object.fromEntries(t.map((a)=>[a.name,{description:a.description,inputSchema:a.input_schema}]))}function f4(e,t){let a=[{role:"system",content:e}],r=new Map;for(let i of t){if(typeof i.content==="string"){a.push({role:i.role,content:i.content});continue}if(i.role==="assistant"){let o=[];for(let u of i.content){if(u.type==="text"){o.push({type:"text",text:u.text});continue}if(u.type==="tool_use")r.set(u.id,u.name),o.push({type:"tool-call",toolCallId:u.id,toolName:u.name,args:u.input})}if(o.length>0)a.push({role:"assistant",content:o});continue}let n=[];for(let o of i.content){if(o.type==="text"){n.push({type:"text",text:o.text});continue}if(o.type==="image"){n.push({type:"image",image:Buffer.from(o.data,"base64"),mediaType:o.mediaType});continue}if(o.type==="tool_result"){if(n.length>0)a.push({role:"user",content:n.splice(0,n.length)});a.push({role:"tool",content:[{type:"tool-result",toolCallId:o.tool_use_id,toolName:r.get(o.tool_use_id)??"tool",output:x4(o.content),isError:o.is_error??!1}]})}}if(n.length>0)a.push({role:"user",content:n})}return a}function x4(e){if(typeof e==="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Qe(e,t,a){let r=a?.assistantToolCallArgKey??"args",i=[{role:"system",content:e}],n=new Map;for(let o of t){if(typeof o.content==="string"){i.push({role:o.role,content:o.content});continue}if(o.role==="assistant"){let c=[];for(let s of o.content){if(s.type==="text"){c.push({type:"text",text:s.text});continue}if(s.type==="file"){c.push({type:"text",text:me(s.path,s.content)});continue}if(s.type==="tool_use")n.set(s.id,s.name),c.push({type:"tool-call",toolCallId:s.id,toolName:s.name,[r]:ke(s.input)})}if(c.length>0)i.push({role:"assistant",content:c});continue}let u=[];for(let c of o.content){if(c.type==="text"){u.push({type:"text",text:c.text});continue}if(c.type==="file"){u.push({type:"text",text:me(c.path,c.content)});continue}if(c.type==="image"){u.push({type:"image",image:Buffer.from(c.data,"base64"),mediaType:c.mediaType});continue}if(c.type==="tool_result"){if(u.length>0)i.push({role:"user",content:u.splice(0,u.length)});i.push({role:"tool",content:[{type:"tool-result",toolCallId:c.tool_use_id,toolName:n.get(c.tool_use_id)??"tool",output:Se(c.content),isError:c.is_error??!1}]})}}if(u.length>0)i.push({role:"user",content:u})}return i}var eo=null;async function Kt(e){if(eo)return eo;return e?.beforeImport?.(),eo=await import("ai"),eo}function re(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function v4(e){return{inputTokens:re(e.inputTokens),outputTokens:re(e.outputTokens),thoughtsTokenCount:re(e.reasoningTokens??e.thoughtsTokenCount),cacheReadTokens:re(e.cachedInputTokens)}}async function*Jt(e,t){let a=t.resolveUsageMetrics??v4,r=new Set(t.reasoningTypes??["reasoning-delta"]),i=t.toolCallArgsOrder??["args","input"],n=t.responseId,o=!1,u=!1;if(e.fullStream)for await(let c of e.fullStream){let s=c.type;if(s==="text-delta"){let l=c.textDelta??c.text??c.delta;if(l)yield{type:"text",text:l,id:n},u=!0;continue}if(s&&r.has(s)){let l=c.textDelta??c.reasoning??c.text;if(l)yield{type:"reasoning",reasoning:l,id:n};continue}if(s==="tool-call"&&t.enableToolCalls){let l=c.toolCallId??c.id,d=c.toolName??c.name,g=i.map((h)=>c[h]).find((h)=>h!==void 0)??{};yield{type:"tool_calls",id:n,tool_call:{call_id:l,function:{id:t.toolCallFunctionIncludeId?l:void 0,name:d,arguments:g}}};continue}if(s==="error"){let l=c.error?.message??t.errorMessage;throw Error(l)}if(s==="finish"){let l=c.totalUsage??c.usage??{},d=a(l,c);yield{type:"usage",inputTokens:d.inputTokens,outputTokens:d.outputTokens,thoughtsTokenCount:d.thoughtsTokenCount,cacheReadTokens:d.cacheReadTokens,cacheWriteTokens:d.cacheWriteTokens,totalCost:t.calculateCost(d.inputTokens,d.outputTokens,d.cacheReadTokens,d.cacheWriteTokens),id:n},o=!0}}else if(e.textStream)for await(let c of e.textStream)yield{type:"text",text:c,id:n},u=!0;if(!u&&t.enableTextFallback&&e.text){let c=await e.text;if(typeof c==="string"&&c.length>0)yield{type:"text",text:c,id:n}}if(!o&&e.usage){let c=await e.usage,s=a(c);yield{type:"usage",inputTokens:s.inputTokens,outputTokens:s.outputTokens,thoughtsTokenCount:s.thoughtsTokenCount,cacheReadTokens:s.cacheReadTokens,cacheWriteTokens:s.cacheWriteTokens,totalCost:t.calculateCost(s.inputTokens,s.outputTokens,s.cacheReadTokens,s.cacheWriteTokens),id:n}}yield{type:"done",success:!0,id:n}}var nh=new Map;function Xs(e,t){let a=e.modelId?.trim(),r=a&&a.length>0?a:t??"",n=(e.knownModels??{})[r]??{},o=e.modelInfo??n;return{id:r,info:{...o,id:r}}}async function b4(e){let t=nh.get(e);if(t)return t;let a=await import(e);return nh.set(e,a),a}class Ke extends X{type="ai-sdk-community";provider;providerPromise;getProviderCreateOptions(){return}async beforeLoadProviderModule(){}getProviderModelSettings(){return}getLoadAiSdkOptions(){return}getStreamErrorMessage(){return"AI SDK stream failed"}getEmitStreamOptions(){return{}}getAssistantToolCallArgKey(){return"args"}normalizeModelId(e){return e}async ensureProvider(){if(this.provider)return this.provider;if(!this.providerPromise)this.providerPromise=(async()=>{let e=this.getProviderDefinition();await this.beforeLoadProviderModule();let t=await b4(e.moduleName),a=t[e.createExportName],r=t[e.providerExportName];if(a){let i=a(this.getProviderCreateOptions());return this.provider=i,i}if(r)return this.provider=r,r;throw Error(`${e.moduleName} did not export \`${e.providerExportName}\` or \`${e.createExportName}\`.`)})();try{return await this.providerPromise}catch(e){this.providerPromise=void 0;let t=this.getProviderDefinition().moduleName;if(e instanceof Error&&e.message.includes(t))throw Error(this.getProviderDefinition().missingDependencyError,{cause:e});throw e}}getModel(){return Xs(this.config,this.getDefaultModelId())}getMessages(e,t){return Qe(e,t,{assistantToolCallArgKey:this.getAssistantToolCallArgKey()})}async*createMessage(e,t,a){yield*H(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let r=await Kt(this.getLoadAiSdkOptions()),i=await this.ensureProvider(),{id:n,info:o}=this.getModel(),u=this.createResponseId(),c=r.streamText({model:i(this.normalizeModelId(n),this.getProviderModelSettings()),messages:this.getMessages(e,t),maxTokens:o.maxTokens??void 0,temperature:o.temperature??void 0,abortSignal:this.getAbortSignal()});yield*Jt(c,{responseId:u,errorMessage:this.getStreamErrorMessage(),calculateCost:(s,l,d,g)=>this.calculateCostFromInclusiveInput(s,l,d,g),...this.getEmitStreamOptions()})}}var rh=!1;async function w4(){if(rh)return;rh=!0;try{let e=await import("zod"),a=(e.z??e).object;if(typeof a!=="function")return;let r=a({}).refine?.(()=>!0);if(!r||typeof r.passthrough==="function")return;let i=Object.getPrototypeOf(r);if(!i||typeof i.passthrough==="function")return;Object.defineProperty(i,"passthrough",{value(){return this},configurable:!0,enumerable:!1,writable:!0})}catch{}}function k4(e){return e.startsWith("sk-")}function W4(){let e=process.env.AI_SDK_LOG_WARNINGS?.trim().toLowerCase();return e==="0"||e==="false"||e==="off"}function _4(e){if(e.includes("/"))return e;return`openai/${e}`}class fa extends Ke{getProviderDefinition(){return{moduleName:"ai-sdk-provider-codex-cli",createExportName:"createCodexCli",providerExportName:"codexCli",missingDependencyError:"Codex provider requires `ai-sdk-provider-codex-cli` and the Codex CLI at runtime. Install dependencies and run `codex` to authenticate."}}getDefaultModelId(){return"gpt-5.3-codex"}async beforeLoadProviderModule(){await w4()}getProviderCreateOptions(){let t={...(this.config.codex??{}).defaultSettings??{}};if(this.config.reasoningEffort&&t.reasoningEffort===void 0)t.reasoningEffort=this.config.reasoningEffort;else if(this.config.thinking&&t.reasoningEffort===void 0)t.reasoningEffort="medium";let a=this.config.apiKey?.trim(),r=typeof this.config.accessToken==="string"&&this.config.accessToken.trim().length>0;if(a&&!r&&k4(a))t.env={...t.env??{},OPENAI_API_KEY:a};return{defaultSettings:Object.keys(t).length>0?t:void 0}}getProviderModelSettings(){return this.config.codex?.modelSettings}getStreamErrorMessage(){return"Codex stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],toolCallArgsOrder:["args","input"]}}}class xa extends Ke{getProviderDefinition(){return{moduleName:"ai-sdk-provider-claude-code",createExportName:"createClaudeCode",providerExportName:"claudeCode",missingDependencyError:"Claude Code provider requires `ai-sdk-provider-claude-code` at runtime. Install dependencies and run `claude login`."}}getDefaultModelId(){return"sonnet"}getProviderCreateOptions(){return this.config.claudeCode??{}}getLoadAiSdkOptions(){return{beforeImport:()=>{if(W4())globalThis.AI_SDK_LOG_WARNINGS=!1}}}getStreamErrorMessage(){return"Claude Code stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta"]}}}class va extends Ke{getProviderDefinition(){return{moduleName:"ai-sdk-provider-opencode-sdk",createExportName:"createOpencode",providerExportName:"opencode",missingDependencyError:"OpenCode provider requires `ai-sdk-provider-opencode-sdk` and OpenCode at runtime."}}getDefaultModelId(){return"openai/gpt-5.3-codex"}getProviderCreateOptions(){let e=this.config.opencode??{},t={...e.defaultSettings??{}};if(t.agent===void 0)t.agent="general";return{hostname:e.hostname,port:e.port,autoStartServer:e.autoStartServer,serverTimeout:e.serverTimeout,defaultSettings:Object.keys(t).length>0?t:void 0}}getProviderModelSettings(){return this.config.opencode?.modelSettings}normalizeModelId(e){return _4(e)}getStreamErrorMessage(){return"OpenCode stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],enableTextFallback:!0}}}class ba extends Ke{getProviderDefinition(){return{moduleName:"@jerome-benoit/sap-ai-provider",createExportName:"createSAPAIProvider",providerExportName:"sapai",missingDependencyError:"SAP AI Core provider requires `@jerome-benoit/sap-ai-provider` at runtime."}}getDefaultModelId(){return"anthropic--claude-3.5-sonnet"}getProviderCreateOptions(){let e=this.config.sap??{},t=e.api??(e.useOrchestrationMode===void 0?void 0:e.useOrchestrationMode?"orchestration":"foundation-models"),a={resourceGroup:e.resourceGroup,deploymentId:e.deploymentId,api:t,defaultSettings:e.defaultSettings},r=Object.fromEntries(Object.entries(a).filter(([,i])=>i!==void 0));return Object.keys(r).length>0?r:void 0}getStreamErrorMessage(){return"SAP AI Core stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],enableToolCalls:!0,toolCallArgsOrder:["args","input"]}}}class wa extends Ke{getProviderDefinition(){return{moduleName:"@ai-sdk/mistral",createExportName:"createMistral",providerExportName:"mistral",missingDependencyError:"Mistral provider requires `@ai-sdk/mistral` at runtime."}}getDefaultModelId(){return"mistral-medium-latest"}getStreamErrorMessage(){return"Mistral stream failed"}}class ka extends Ke{getProviderDefinition(){return{moduleName:"dify-ai-provider",createExportName:"createDifyProvider",providerExportName:"difyProvider",missingDependencyError:"Dify provider requires `dify-ai-provider` at runtime."}}getDefaultModelId(){return"default"}getProviderCreateOptions(){if(!this.config.baseUrl)return;return{baseURL:this.config.baseUrl}}getProviderModelSettings(){let e={responseMode:"blocking"};if(this.config.apiKey)e.apiKey=this.config.apiKey;return e}getStreamErrorMessage(){return"Dify stream failed"}}import{FunctionCallingConfigMode as R4,GoogleGenAI as oh,ThinkingLevel as no}from"@google/genai";function io(e){let t=new Map;return e.map((a)=>$4(a,t)).filter((a)=>a!==null)}function $4(e,t){let{role:a,content:r}=e,i=a==="assistant"?"model":"user";if(typeof r==="string")return{role:i,parts:[{text:r}]};let n=D4(r,t);if(n.length===0)return null;return{role:i,parts:n}}function D4(e,t){let a=[];for(let r of e){if(r.type==="tool_use")t.set(r.id,r.name);let i=y4(r,t);if(i)a.push(i)}return a}function y4(e,t){switch(e.type){case"text":{let a=e,r={text:a.text};if(a.signature)r.thoughtSignature=a.signature;return r}case"file":{let a=e;return{text:me(a.path,a.content)}}case"image":{let a=e;return{inlineData:{mimeType:a.mediaType,data:a.data}}}case"tool_use":{let a=e,r={functionCall:{id:a.id,name:a.name,args:ke(a.input)}};if(a.signature)r.thoughtSignature=a.signature;return r}case"tool_result":{let a=e,r;if(typeof a.content==="string")r={result:$s(a.content)};else r={result:Se(a.content)};if(a.is_error)r.error=!0;return{functionResponse:{id:a.tool_use_id,name:t.get(a.tool_use_id)??a.tool_use_id,response:r}}}case"thinking":{let a=e,r={text:a.thinking,thought:!0};if(a.signature)r.thoughtSignature=a.signature;return r}default:return null}}var T4=new Set(["type","title","description","enum","properties","required","additionalProperties","format","minimum","maximum","items","prefixItems","minItems","maxItems"]);function to(e){if(!e||typeof e!=="object"||Array.isArray(e))return e;let t=e,a={};for(let[r,i]of Object.entries(t)){if(!T4.has(r))continue;if(r==="properties"&&i&&typeof i==="object"){let n={};for(let[o,u]of Object.entries(i))n[o]=to(u);a[r]=n}else if(r==="items"||r==="additionalProperties")a[r]=typeof i==="object"&&i!==null?to(i):i;else if(r==="prefixItems"&&Array.isArray(i))a[r]=i.map((n)=>to(n));else a[r]=i}if(t.exclusiveMinimum!==void 0&&a.minimum===void 0)a.minimum=t.exclusiveMinimum;if(t.exclusiveMaximum!==void 0&&a.maximum===void 0)a.maximum=t.exclusiveMaximum;return a}function ao(e){return e.map((t)=>({name:t.name,description:t.description,parameters:to(t.inputSchema)}))}var S4=1024,I4=128000,O4=8192;function uh(e){return e.toLowerCase().includes("gemini-3")}function M4(e){let t=e.toLowerCase();return uh(e)&&t.includes("flash")&&!t.includes("lite")}class ft extends X{type="gemini";client;ensureClient(){if(!this.client)if(this.config.gcp?.projectId)this.client=new oh({vertexai:!0,project:this.config.gcp.projectId,location:this.config.region??"us-central1",httpOptions:{headers:this.getRequestHeaders()}});else{if(!this.config.apiKey)throw Error("Gemini API key is required when not using Vertex AI");this.client=new oh({apiKey:this.config.apiKey,httpOptions:{headers:this.getRequestHeaders()}})}return this.client}getModel(){let e=this.config.modelId,a=(this.config.knownModels??{})[e]??{},r=this.config.modelInfo??a;return{id:e,info:{...r,id:e}}}getMessages(e,t){return io(t)}async*createMessage(e,t,a){yield*H(()=>this.createMessageInternal(e,t,a),{maxRetries:4,baseDelay:2000,maxDelay:15000})}async*createMessageInternal(e,t,a){let r=this.ensureClient(),{id:i,info:n}=this.getModel(),o=this.getAbortSignal(),u=this.createResponseId(),c=this.getMessages(e,t),s=gt(n),l=this.config.thinking===!0||typeof this.config.thinkingBudgetTokens==="number"||typeof this.config.reasoningEffort==="string",d=0,g,h=n.thinkingConfig?.thinkingLevel!=null||uh(i);if(s&&l){let z=this.config.thinkingBudgetTokens??(l?S4:0);if(d=Math.min(Math.max(0,z),n.thinkingConfig?.maxBudget??24576),h){let $=this.config.reasoningEffort;if($==="high"||$==="xhigh")g=no.HIGH;else if($==="medium")g=no.MEDIUM;else if($==="low")g=no.LOW;else if(this.config.thinking)g=no.MEDIUM}}let w=M4(i)?O4:I4,j=n.maxTokens??this.config.maxOutputTokens??w,_={httpOptions:this.config.baseUrl?{baseUrl:this.config.baseUrl,headers:this.getRequestHeaders()}:void 0,abortSignal:o,systemInstruction:e,temperature:n.temperature??1,maxOutputTokens:j};if(s&&l&&(h||d>0))_.thinkingConfig={thinkingBudget:h?void 0:d,thinkingLevel:g,includeThoughts:!0};if(a&&a.length>0){let z=ao(a);_.tools=[{functionDeclarations:z}],_.toolConfig={functionCallingConfig:{mode:R4.AUTO}}}try{let z=await r.models.generateContentStream({model:i,contents:c,config:_}),$=0,U=0,I=0,L=0,Y=0;for await(let B of z){let Me=B?.candidates?.[0]?.content?.parts??[];for(let ee of Me){if(ee.thought&&ee.text)yield{type:"reasoning",reasoning:ee.text||"",signature:ee.thoughtSignature,id:u};else if(ee.text)yield{type:"text",text:ee.text,id:u,signature:ee.thoughtSignature};if(ee.functionCall){let vt=ee.functionCall,$a=vt.id??`${u}_tool_${Y++}`;if(vt.name)yield{type:"tool_calls",tool_call:{call_id:$a,function:{id:$a,name:vt.name,arguments:vt.args??{}}},id:u,signature:ee.thoughtSignature}}}if(B.usageMetadata)$=B.usageMetadata.promptTokenCount??$,U=B.usageMetadata.candidatesTokenCount??U,L=B.usageMetadata.thoughtsTokenCount??L,I=B.usageMetadata.cachedContentTokenCount??I}let Oe=this.calculateGeminiCost($,U,L,I);yield{type:"usage",inputTokens:$,outputTokens:U,thoughtsTokenCount:L,cacheReadTokens:I,cacheWriteTokens:0,totalCost:Oe,id:u},yield{type:"done",success:!0,id:u}}catch(z){if(z instanceof Error&&z.message.includes("429"))throw new ht(z.message,void 0,{cause:z});throw z}}calculateGeminiCost(e,t,a,r){return this.calculateCost(e,t+a,r)}}import z4 from"openai";function ro(e,t=!1){let a=t?e.map((r)=>r.role).lastIndexOf("user"):-1;return e.flatMap((r,i)=>E4(r,t&&i===a))}function E4(e,t){let{role:a,content:r}=e;if(typeof r==="string"){if(a!=="user"||!t)return[{role:a,content:r}];return[{role:a,content:[{type:"text",text:r,cache_control:{type:"ephemeral"}}]}]}if(a==="assistant")return[P4(r)];else return A4(r,t)}function P4(e){let t=[],a=[],r=[],i=[];for(let o of e)switch(o.type){case"text":t.push(o.text);break;case"tool_use":{let u=o;a.push({id:u.id,type:"function",function:{name:u.name,arguments:JSON.stringify(ke(u.input))}});break}case"thinking":{let u=o;if(u.thinking)r.push(u.thinking);let c=Array.isArray(u.details)?u.details:Array.isArray(u.summary)?u.summary:[];if(c.length>0)i.push(...c);break}}let n={role:"assistant",content:t.length>0?t.join(`
|
|
52
52
|
`):null};if(a.length>0)n.tool_calls=a;if(r.length>0){let o=r.join(`
|
|
53
|
-
`);n.reasoning=o,n.reasoning_content=o}if(i.length>0)n.reasoning_details=i;return n}function A4(e,t){let a=[],r=e.filter((o)=>o.type==="tool_result");for(let o of r)a.push({role:"tool",tool_call_id:o.tool_use_id,content:Se(o.content)});let i=e.filter((o)=>o.type!=="tool_result");if(i.length===0)return a;let n=[];for(let o of i)switch(o.type){case"text":n.push({type:"text",text:o.text});break;case"file":{let u=o;n.push({type:"text",text:me(u.path,u.content)});break}case"image":{let u=o;n.push({type:"image_url",image_url:{url:`data:${u.mediaType};base64,${u.data}`}});break}}if(n.length===0)return a;if(t){for(let o=n.length-1;o>=0;o--)if(n[o].type==="text"){n[o]={...n[o],cache_control:{type:"ephemeral"}};break}}return a.push({role:"user",content:n.length===1&&n[0].type==="text"&&!t?n[0].text:n}),a}function Ys(e,t){let a=t?.strict??!0;return e.map((r)=>({type:"function",function:{name:r.name,description:r.description,parameters:r.inputSchema,strict:a}}))}function Wa(e,t){if(!e||e.length===0)return{};return{tools:Ys(e,t),tool_choice:"auto"}}class Vt{toolCalls=new Map;processToolCallDeltas(e,t){let a=[];for(let r of e){let{index:i,id:n}=r,o=r.function,u=this.toolCalls.get(i);if(!u)u={id:"",name:"",arguments:""},this.toolCalls.set(i,u);if(n)u.id=n;if(o?.name)u.name=o.name;let c=o?.arguments,s=this.normalizeArgumentsDelta(u.arguments,c);if(s)u.arguments+=s;if(u.id&&u.name)a.push({type:"tool_calls",id:t,tool_call:{call_id:u.id,function:{id:u.id,name:u.name,arguments:s}}})}return a}getToolCalls(){return Array.from(this.toolCalls.values()).map((e)=>({call_id:e.id,function:{id:e.id,name:e.name,arguments:e.arguments}}))}reset(){this.toolCalls.clear()}normalizeArgumentsDelta(e,t){if(t==null)return"";let a=typeof t==="string"?t:JSON.stringify(t);if(!a)return"";if(e&&a.length>=e.length&&a.startsWith(e))return a.slice(e.length);return a}}var U4="medium";function N4(e){let t={};if(typeof e.thinking==="boolean")t.enabled=e.thinking;if(e.effort)t.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)t.max_tokens=e.budgetTokens;return Object.keys(t).length>0?t:void 0}class Xt extends X{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let t=ue(J(this.config),this.config.apiKey);if(!t)throw Error(we(J(this.config)));let a=this.getRequestHeaders();this.client=new z4({apiKey:t,baseURL:e,defaultHeaders:a})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...t,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,t){let a=this.getModel(),r=this.supportsPromptCache(a.info);return[r?{role:"system",content:[{type:"text",text:e,cache_control:{type:"ephemeral"}}]}:{role:"system",content:e},...ro(t,r)]}async*createMessage(e,t,a){yield*H(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let r=this.ensureClient(),{id:i,info:n}=this.getModel(),o=this.createResponseId(),u=J(this.config),c=this.getMessages(e,t),s={model:i,messages:c,stream:!0,stream_options:{include_usage:!0},...Wa(a,{strict:u!=="openrouter"})};if(u==="openrouter"&&i.startsWith("anthropic/"))s.cache_control={type:"ephemeral"};let l=n.maxTokens??this.config.maxOutputTokens;if(l)s.max_completion_tokens=l;if(!(n.capabilities?.includes("reasoning")??!1))s.temperature=n.temperature??0;let g=n.capabilities?.includes("reasoning-effort")||n.capabilities?.includes("reasoning")||!1,h=this.config.reasoningEffort??(this.config.thinking?U4:void 0);if(u==="openrouter"){let L=N4({thinking:this.config.thinking,effort:h,budgetTokens:this.config.thinkingBudgetTokens});if(L)s.reasoning=L}else if(g&&h)s.reasoning_effort=h;let w=this.getRequestHeaders(),j=Object.keys(w).some((L)=>L.toLowerCase()==="authorization"),_=ue(u,this.config.apiKey);if(!j&&_)w.Authorization=`Bearer ${_}`;let z=this.getAbortSignal(),$;try{$=await r.chat.completions.create(s,{signal:z,headers:w})}catch(L){throw this.normalizeOpenAICompatibleBadRequest(L)??L}let U=new Vt,I=null;for await(let L of $){let Y=L.choices?.[0];if(Y?.finish_reason)I=Y.finish_reason;yield*this.withResponseIdForAll(this.processChunk(L,U,n,o),o)}yield{type:"done",success:!0,id:o,incompleteReason:I==="length"?"max_tokens":void 0}}*processChunk(e,t,a,r){let i=e.choices?.[0]?.delta,n=i&&{...i,reasoning:typeof i.reasoning==="string"?i.reasoning??"":void 0,reasoning_content:i.reasoning_content,reasoning_details:i.reasoning_details};if(n?.content)yield{type:"text",text:n.content,id:r};if(n?.reasoning_content||n?.reasoning||Array.isArray(n?.reasoning_details)&&n.reasoning_details.length>0)yield{type:"reasoning",reasoning:n.reasoning_content??n.reasoning??"",details:n.reasoning_details,id:r};if(n?.tool_calls)yield*t.processToolCallDeltas(n.tool_calls.map((o)=>({index:o.index,id:o.id,function:o.function})),r);if(e.usage){let o=e.usage.prompt_tokens??0,u=e.usage.completion_tokens??0,c=e.usage,s=c.prompt_tokens_details?.cached_tokens??c.cache_read_input_tokens??0,l=c.prompt_tokens_details?.cache_write_tokens??c.cache_creation_input_tokens??0;yield{type:"usage",inputTokens:o,outputTokens:u,cacheReadTokens:s,cacheWriteTokens:l,thoughtsTokenCount:c.completion_tokens_details?.reasoning_tokens,totalCost:this.calculateCostFromInclusiveInput(o,u,s,l),id:r}}}}import{createOpenAICompatible as L4}from"@ai-sdk/openai-compatible";import
|
|
53
|
+
`);n.reasoning=o,n.reasoning_content=o}if(i.length>0)n.reasoning_details=i;return n}function A4(e,t){let a=[],r=e.filter((o)=>o.type==="tool_result");for(let o of r)a.push({role:"tool",tool_call_id:o.tool_use_id,content:Se(o.content)});let i=e.filter((o)=>o.type!=="tool_result");if(i.length===0)return a;let n=[];for(let o of i)switch(o.type){case"text":n.push({type:"text",text:o.text});break;case"file":{let u=o;n.push({type:"text",text:me(u.path,u.content)});break}case"image":{let u=o;n.push({type:"image_url",image_url:{url:`data:${u.mediaType};base64,${u.data}`}});break}}if(n.length===0)return a;if(t){for(let o=n.length-1;o>=0;o--)if(n[o].type==="text"){n[o]={...n[o],cache_control:{type:"ephemeral"}};break}}return a.push({role:"user",content:n.length===1&&n[0].type==="text"&&!t?n[0].text:n}),a}function Ys(e,t){let a=t?.strict??!0;return e.map((r)=>({type:"function",function:{name:r.name,description:r.description,parameters:r.inputSchema,strict:a}}))}function Wa(e,t){if(!e||e.length===0)return{};return{tools:Ys(e,t),tool_choice:"auto"}}class Vt{toolCalls=new Map;processToolCallDeltas(e,t){let a=[];for(let r of e){let{index:i,id:n}=r,o=r.function,u=this.toolCalls.get(i);if(!u)u={id:"",name:"",arguments:""},this.toolCalls.set(i,u);if(n)u.id=n;if(o?.name)u.name=o.name;let c=o?.arguments,s=this.normalizeArgumentsDelta(u.arguments,c);if(s)u.arguments+=s;if(u.id&&u.name)a.push({type:"tool_calls",id:t,tool_call:{call_id:u.id,function:{id:u.id,name:u.name,arguments:s}}})}return a}getToolCalls(){return Array.from(this.toolCalls.values()).map((e)=>({call_id:e.id,function:{id:e.id,name:e.name,arguments:e.arguments}}))}reset(){this.toolCalls.clear()}normalizeArgumentsDelta(e,t){if(t==null)return"";let a=typeof t==="string"?t:JSON.stringify(t);if(!a)return"";if(e&&a.length>=e.length&&a.startsWith(e))return a.slice(e.length);return a}}var U4="medium";function N4(e){let t={};if(typeof e.thinking==="boolean")t.enabled=e.thinking;if(e.effort)t.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)t.max_tokens=e.budgetTokens;return Object.keys(t).length>0?t:void 0}class Xt extends X{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let t=ue(J(this.config),this.config.apiKey);if(!t)throw Error(we(J(this.config)));let a=this.getRequestHeaders();this.client=new z4({apiKey:t,baseURL:e,defaultHeaders:a})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...t,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,t){let a=this.getModel(),r=this.supportsPromptCache(a.info);return[r?{role:"system",content:[{type:"text",text:e,cache_control:{type:"ephemeral"}}]}:{role:"system",content:e},...ro(t,r)]}async*createMessage(e,t,a){yield*H(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let r=this.ensureClient(),{id:i,info:n}=this.getModel(),o=this.createResponseId(),u=J(this.config),c=this.getMessages(e,t),s={model:i,messages:c,stream:!0,stream_options:{include_usage:!0},...Wa(a,{strict:u!=="openrouter"})};if(u==="openrouter"&&i.startsWith("anthropic/"))s.cache_control={type:"ephemeral"};let l=n.maxTokens??this.config.maxOutputTokens;if(l)s.max_completion_tokens=l;if(!(n.capabilities?.includes("reasoning")??!1))s.temperature=n.temperature??0;let g=n.capabilities?.includes("reasoning-effort")||n.capabilities?.includes("reasoning")||!1,h=this.config.reasoningEffort??(this.config.thinking?U4:void 0);if(u==="openrouter"){let L=N4({thinking:this.config.thinking,effort:h,budgetTokens:this.config.thinkingBudgetTokens});if(L)s.reasoning=L}else if(g&&h)s.reasoning_effort=h;let w=this.getRequestHeaders(),j=Object.keys(w).some((L)=>L.toLowerCase()==="authorization"),_=ue(u,this.config.apiKey);if(!j&&_)w.Authorization=`Bearer ${_}`;let z=this.getAbortSignal(),$;try{$=await r.chat.completions.create(s,{signal:z,headers:w})}catch(L){throw this.normalizeOpenAICompatibleBadRequest(L)??L}let U=new Vt,I=null;for await(let L of $){let Y=L.choices?.[0];if(Y?.finish_reason)I=Y.finish_reason;yield*this.withResponseIdForAll(this.processChunk(L,U,n,o),o)}yield{type:"done",success:!0,id:o,incompleteReason:I==="length"?"max_tokens":void 0}}*processChunk(e,t,a,r){let i=e.choices?.[0]?.delta,n=i&&{...i,reasoning:typeof i.reasoning==="string"?i.reasoning??"":void 0,reasoning_content:i.reasoning_content,reasoning_details:i.reasoning_details};if(n?.content)yield{type:"text",text:n.content,id:r};if(n?.reasoning_content||n?.reasoning||Array.isArray(n?.reasoning_details)&&n.reasoning_details.length>0)yield{type:"reasoning",reasoning:n.reasoning_content??n.reasoning??"",details:n.reasoning_details,id:r};if(n?.tool_calls)yield*t.processToolCallDeltas(n.tool_calls.map((o)=>({index:o.index,id:o.id,function:o.function})),r);if(e.usage){let o=e.usage.prompt_tokens??0,u=e.usage.completion_tokens??0,c=e.usage,s=c.prompt_tokens_details?.cached_tokens??c.cache_read_input_tokens??0,l=c.prompt_tokens_details?.cache_write_tokens??c.cache_creation_input_tokens??0;yield{type:"usage",inputTokens:o,outputTokens:u,cacheReadTokens:s,cacheWriteTokens:l,thoughtsTokenCount:c.completion_tokens_details?.reasoning_tokens,totalCost:this.calculateCostFromInclusiveInput(o,u,s,l),id:r}}}}import{createOpenAICompatible as L4}from"@ai-sdk/openai-compatible";import G4 from"zod";var j4="medium";function Z4(e){let t={};if(typeof e.thinking==="boolean")t.enabled=e.thinking;if(e.effort)t.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)t.max_tokens=e.budgetTokens;return Object.keys(t).length>0?t:void 0}function C4(e){return e.replace(/-([a-zA-Z0-9])/g,(t,a)=>a.toUpperCase())}function q4(e){if(!e||e.length===0)return;return Object.fromEntries(e.map((t)=>[t.name,{description:t.description,inputSchema:G4.fromJSONSchema(t.inputSchema)}]))}class Ie extends X{type="openai-compatible";provider;ensureProvider(){if(this.provider)return this.provider;let e=J(this.config),t=this.config.baseUrl;if(!t)throw Error("Base URL is required. Set baseUrl in config.");let a=ue(e,this.config.apiKey);if(!a)throw Error(we(e));return this.provider=L4({name:e,apiKey:a,baseURL:t,headers:this.getRequestHeaders(),includeUsage:!0}),this.provider}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...t,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,t){return Qe(e,t,{assistantToolCallArgKey:"args"})}async*createMessage(e,t,a){yield*H(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let r=await Kt(),i=this.ensureProvider(),{id:n,info:o}=this.getModel(),u=this.createResponseId(),c=J(this.config),s=o.capabilities?.includes("reasoning")??!1,l=o.capabilities?.includes("reasoning-effort")||o.capabilities?.includes("reasoning")||!1,d=this.config.reasoningEffort??(this.config.thinking?j4:void 0),g=C4(c),h={};if(c==="openrouter"){let _=Z4({thinking:this.config.thinking,effort:d,budgetTokens:this.config.thinkingBudgetTokens});if(_)h.reasoning=_}else if(l&&d)h.reasoningEffort=d;let w=Object.keys(h).length>0?{[g]:h}:void 0,j=r.streamText({model:i(n),messages:this.getMessages(e,t),tools:q4(a),maxTokens:o.maxTokens??this.config.maxOutputTokens,temperature:s?void 0:o.temperature??0,providerOptions:w,abortSignal:this.getAbortSignal()});yield*Jt(j,{responseId:u,errorMessage:"OpenAI-compatible stream failed",calculateCost:(_,z,$,U)=>this.calculateCost(_,z,$,U),reasoningTypes:["reasoning-delta","reasoning"],enableToolCalls:!0,toolCallArgsOrder:["args","input"],toolCallFunctionIncludeId:!0,resolveUsageMetrics:(_)=>({inputTokens:re(_.inputTokens),outputTokens:re(_.outputTokens),thoughtsTokenCount:re(_.reasoningTokens??_.thoughtsTokenCount),cacheReadTokens:re(_.cachedInputTokens)})})}}import F4 from"openai";var B4="medium";function Q4(e,t){if(!e?.length)return;return e.map((a)=>({type:"function",name:a.name,description:a.description,parameters:a.inputSchema}))}function K4(e){let t=[],a=(n,o)=>{let u=o.map((c)=>c.text).join(`
|
|
54
54
|
`);if(!u)return;t.push({type:"message",role:n,content:[{type:n==="user"?"input_text":"output_text",text:u}]})},r=(n)=>n.type==="text",i=(n)=>n.call_id?.trim()||n.id;for(let n of e){if(n.role!=="user"&&n.role!=="assistant")continue;if(!Array.isArray(n.content)){if(n.content)a(n.role,[{type:"text",text:n.content}]);continue}let o=[],u=()=>{if(o.length===0)return;a(n.role,o),o=[]};for(let c of n.content){if(r(c)){o.push(c);continue}if(n.role==="assistant"&&c.type==="tool_use"){u();let s=c;t.push({type:"function_call",call_id:i(s),name:s.name,arguments:JSON.stringify(ke(s.input))});continue}if(n.role==="user"&&c.type==="tool_result")u(),t.push({type:"function_call_output",call_id:c.tool_use_id,output:Se(c.content)})}u()}return t}class xt extends X{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let t=ue(J(this.config),this.config.apiKey);if(!t)throw Error(we(J(this.config)));let a=this.getRequestHeaders(),r=Object.keys(a).some((i)=>i.toLowerCase()==="authorization");this.client=new F4({apiKey:t,baseURL:e,defaultHeaders:r?a:{...a,Authorization:`Bearer ${t}`}})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...t,id:e}}}getDefaultModelInfo(){let e=[].filter((t)=>t!=="prompt-cache");return{id:this.config.modelId,capabilities:e}}getMessages(e,t){return K4(t)}async*createMessage(e,t,a){yield*H(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let r=this.ensureClient(),{id:i,info:n}=this.getModel(),o=this.getAbortSignal(),u=this.createResponseId(),c=J(this.config),s,l=new Map,d=this.getMessages(e,t),g=Q4(a,{stripFormat:c==="openai-codex"});if(!g?.length)throw Error("OpenAI Responses API requires tools to be provided. Enable native tool calling in settings.");let h=n.capabilities?.includes("reasoning")??!1,w=this.config.reasoningEffort??(this.config.thinking?B4:void 0),j=h&&w?{effort:w,summary:"auto"}:void 0,_=this.getRequestHeaders(),z=Object.keys(_).some((I)=>I.toLowerCase()==="authorization"),$=ue(c,this.config.apiKey);if(!z&&$)_.Authorization=`Bearer ${$}`;if(c==="openai-codex"&&typeof this.config.accountId==="string"&&this.config.accountId.trim().length>0){let I=this.config.accountId.trim();_["chatgpt-account-id"]=I,_["openai-account-id"]=I}let U;try{U=await r.responses.create({model:i,instructions:e,input:d,store:c==="openai-codex"?!1:void 0,stream:!0,tools:g,reasoning:j},{signal:o,headers:_})}catch(I){let L=this.normalizeOpenAICompatibleBadRequest(I);if(L)throw L;if(c==="openai-codex"){let Y=I;if((Y?.status??Y?.response?.status??(typeof Y?.message==="string"&&Y.message.includes("400")?400:void 0))===400){let B=Y?.error?.detail??Y?.error?.message??(typeof Y?.message==="string"?Y.message:"");throw Error(`OpenAI Codex request was rejected (HTTP 400). ${B?`Detail: ${B}`:"Re-run 'clite auth openai-codex', verify model access, and ensure accountId is present in provider settings."}`,{cause:I})}}throw I}for await(let I of U){let L=this.getApiResponseId(I);if(L)s=L;yield*this.processResponseChunk(I,n,s??u,l)}}*processResponseChunk(e,t,a,r){switch(e.type){case"response.output_item.added":{let i=e.item;if(i.type==="function_call"&&i.id)r.set(i.id,{callId:i.call_id,name:i.name}),yield{type:"tool_calls",id:i.id||a,tool_call:{call_id:i.call_id,function:{id:i.id,name:i.name,arguments:i.arguments}}};if(i.type==="reasoning"&&i.encrypted_content&&i.id)yield{type:"reasoning",id:i.id||a,reasoning:"",redacted_data:i.encrypted_content};break}case"response.output_item.done":{let i=e.item;if(i.type==="function_call"){if(i.id)r.set(i.id,{callId:i.call_id,name:i.name});yield{type:"tool_calls",id:i.id||a,tool_call:{call_id:i.call_id,function:{id:i.id,name:i.name,arguments:i.arguments}}}}if(i.type==="reasoning")yield{type:"reasoning",id:i.id||a,details:i.summary,reasoning:""};break}case"response.reasoning_summary_part.added":yield{type:"reasoning",id:e.item_id||a,reasoning:e.part?.text||""};break;case"response.reasoning_summary_text.delta":yield{type:"reasoning",id:e.item_id||a,reasoning:e.delta||""};break;case"response.reasoning_summary_part.done":yield{type:"reasoning",id:e.item_id||a,details:e.part,reasoning:""};break;case"response.output_text.delta":if(e.delta)yield{id:e.item_id||a,type:"text",text:e.delta};break;case"response.reasoning_text.delta":if(e.delta)yield{id:e.item_id||a,type:"reasoning",reasoning:e.delta};break;case"response.function_call_arguments.delta":{let i=e.item_id?r.get(e.item_id):void 0;yield{type:"tool_calls",id:e.item_id||a,tool_call:{call_id:i?.callId,function:{id:e.item_id,name:i?.name,arguments:e.delta}}}}break;case"response.function_call_arguments.done":if(e.item_id&&e.arguments){let i=r.get(e.item_id);yield{type:"tool_calls",id:e.item_id||a,tool_call:{call_id:e.call_id??i?.callId,function:{id:e.item_id,name:e.name??i?.name,arguments:e.arguments}}}}break;case"response.incomplete":{yield{type:"done",success:!1,incompleteReason:e.response?.incomplete_details?.reason,id:e.response?.id||a};break}case"response.failed":{yield{type:"done",success:!1,error:e.response?.error?.message||"Unknown error",id:e.response?.id||a};break}case"response.completed":{if(e.response?.usage){let i=e.response.usage,n=i.input_tokens||0,o=i.output_tokens||0,u=i.input_tokens_details?.cached_tokens||0,c=0,s=this.calculateCostFromInclusiveInput(n,o,u,0);yield{type:"usage",inputTokens:n,outputTokens:o,cacheWriteTokens:0,cacheReadTokens:u,totalCost:s,id:e.response.id||a}}yield{type:"done",success:!0,id:e.response?.id||a};break}}}getApiResponseId(e){if(typeof e?.response?.id==="string"&&e.response.id.length>0)return e.response.id;if(typeof e?.response_id==="string"&&e.response_id.length>0)return e.response_id;return}}import IW from"openai";var J4="us-central1";function sh(e){return e.toLowerCase().includes("claude")}function V4(e){if(!e||e.length===0)return;let t=Fe(e);return Object.fromEntries(t.map((a)=>[a.name,{description:a.description,inputSchema:a.input_schema}]))}function X4(e,t,a){let r=a?.promptCacheOn?[{type:"text",text:e,providerOptions:{anthropic:{cacheControl:{type:"ephemeral"}}}}]:e;return Qe(r,t,{assistantToolCallArgKey:"input"})}class _a extends X{type="vertex";geminiHandler;vertexAnthropicModelFactory;vertexAnthropicModelFactoryPromise;getProjectId(){let e=this.config.gcp?.projectId?.trim();if(!e)throw Error("Vertex provider requires `gcp.projectId` in provider configuration.");return e}getConfiguredRegion(){return this.config.gcp?.region?.trim()||this.config.region?.trim()}getRequiredClaudeRegion(){let e=this.getConfiguredRegion();if(!e)throw Error("Vertex Claude models require `gcp.region` (or `region`) in provider configuration.");return e}getGeminiRegion(){return this.getConfiguredRegion()??J4}ensureGeminiHandler(){if(!this.geminiHandler){let e=this.getProjectId(),t=this.getGeminiRegion();this.geminiHandler=new ft({...this.config,region:t,gcp:{...this.config.gcp,projectId:e,region:t}})}return this.geminiHandler}async ensureVertexAnthropicModelFactory(){if(this.vertexAnthropicModelFactory)return this.vertexAnthropicModelFactory;if(!this.vertexAnthropicModelFactoryPromise)this.vertexAnthropicModelFactoryPromise=import("@ai-sdk/google-vertex/anthropic").then((e)=>{let t=e.createVertexAnthropic({project:this.getProjectId(),location:this.getRequiredClaudeRegion(),headers:this.getRequestHeaders(),baseURL:this.config.baseUrl}),a=(r)=>t(r);return this.vertexAnthropicModelFactory=a,a});try{return await this.vertexAnthropicModelFactoryPromise}catch(e){if(this.vertexAnthropicModelFactoryPromise=void 0,e instanceof Error&&e.message.includes("@ai-sdk/google-vertex"))throw Error('Vertex Claude models require @ai-sdk/google-vertex at runtime. Install workspace dependencies before using provider "vertex".',{cause:e});throw e}}getModel(){return Xs(this.config)}getMessages(e,t){let a=this.getModel();if(!sh(a.id))return this.ensureGeminiHandler().getMessages(e,t);let r=this.supportsPromptCache(a.info);return Qt(t,r)}async*createMessage(e,t,a){yield*H(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let r=this.getModel();if(!sh(r.id)){yield*this.ensureGeminiHandler().createMessage(e,t,a);return}let i=await Kt(),n=await this.ensureVertexAnthropicModelFactory(),o=this.createResponseId(),u=this.config.thinkingBudgetTokens??0,c=ma(r.info,"reasoning")&&u>0,s=this.supportsPromptCache(r.info),l={};if(c)l.anthropic={thinking:{type:"enabled",budgetTokens:u}};let d=i.streamText({model:n(r.id),messages:X4(e,t,{promptCacheOn:s}),tools:V4(a),maxTokens:r.info.maxTokens??this.config.maxOutputTokens??128000,temperature:c?void 0:0,providerOptions:Object.keys(l).length>0?l:void 0,abortSignal:this.getAbortSignal()});yield*Jt(d,{responseId:o,errorMessage:"Vertex Anthropic stream failed",calculateCost:(g,h,w,j)=>this.calculateCost(g,h,w,j),reasoningTypes:["reasoning-delta"],enableToolCalls:!0,toolCallArgsOrder:["input","args"],toolCallFunctionIncludeId:!0,resolveUsageMetrics:(g,h)=>{let j=(h?.providerMetadata??{}).anthropic??{};return{inputTokens:re(g.inputTokens),outputTokens:re(g.outputTokens),thoughtsTokenCount:re(g.reasoningTokens??g.thoughtsTokenCount),cacheReadTokens:re(g.cachedInputTokens??j.cacheReadInputTokens),cacheWriteTokens:re(j.cacheCreationInputTokens)}}})}}import{JSONParser as b_}from"@streamparser/json";fi();function lh(e){let t=se(e.providerId);if(t===e.providerId)return e;return{...e,providerId:t}}function w3(e,t){if(e.baseUrl)return e.baseUrl;if(e.oca?.mode==="internal")return Ue;return t?.baseUrl??_e}function k3(e){let t=e.modelId;return e.modelInfo?.apiFormat??(t?e.knownModels?.[t]?.apiFormat:void 0)}function W3(e){if(k3(e)===Pe.OPENAI_RESPONSES)return new xt(e);return new Ie(e)}function ph(e,t){return{...e,baseUrl:J(e)==="oca"?w3(e,t):e.baseUrl??t.baseUrl,modelId:e.modelId??t.modelId,knownModels:e.knownModels??t.knownModels,capabilities:e.capabilities??t.capabilities}}var Hs;function _3(){if(!Hs)Hs=Ds();return Hs}var $3={"claude-code":(e)=>new xa(e),"openai-codex":(e)=>new fa(e),opencode:(e)=>new va(e),sapaicore:(e)=>new ba(e),mistral:(e)=>new wa(e),dify:(e)=>new ka(e),asksage:(e)=>new ha(e),oca:(e)=>W3(e)},D3={anthropic:(e)=>new ga(e),gemini:(e)=>new ft(e),vertex:(e)=>new _a(e),bedrock:(e)=>new Hr(e),openai:(e)=>new xt(e),fetch:(e)=>new Xt(e),"ai-sdk-community":(e)=>new Xt(e),"openai-compatible":(e)=>new Ie(e)};function e0(e){let t=J(e),a=$3[t];if(a)return a(e);let r=_3()[t];if(r){let i=D3[r];if(i)return i(e)}return}function t0(e){let t=lh(e),{providerId:a}=t,r=J(t);if(da(a)){if(Qr(a))throw Error(`Handler for "${a}" is registered as async. Use createHandlerAsync() instead.`);let n=Fr(a,t);if(n)return n}let i=e0({...t,routingProviderId:r});if(i)return i;if(pa(r)){if(t.modelCatalog?.loadLatestOnInit||t.modelCatalog?.loadPrivateOnAuth)throw Error(`Provider "${a}" has runtime model refresh enabled. Use createHandlerAsync() to allow async model refresh.`);let n=Re[r],o=ph({...t,routingProviderId:r},n);return e0(o)??new Ie(o)}return t.baseUrl?new Ie({...t,routingProviderId:r}):new xt({...t,routingProviderId:r,baseUrl:"https://api.openai.com/v1"})}async function mh(e){let t=lh(e),{providerId:a}=t,r=J(t);if(da(a)){let i=await Br(a,t);if(i)return i}if(pa(r)){let i=await Zr(r,t.modelCatalog,{...t,routingProviderId:r});if(i){let n=ph({...t,routingProviderId:r},i);return e0(n)??new Ie(n)}}return t0(t)}var y3=[...new Set([yt.provider.id,"anthropic","asksage","bedrock","claude-code","opencode","mistral","dify","openai-native","gemini","vertex",...Object.keys(Re)])],j_=new Set(y3);function i0(e){return e?{...e}:{}}function T3(e,t){if(e)return e;if(!t)return;let a=globalThis.process;if(!a?.env)return;return a.env[t]}function a0(e,t){if(!t.length)throw Error(`Provider "${e}" must include at least one model.`)}class n0{providerConfigs=new Map;constructor(e){this.applyConfig(e)}createHandler(e){return t0(this.toProviderHandlerConfig(e))}async createHandlerAsync(e){return mh(this.toProviderHandlerConfig(e))}toProviderHandlerConfig(e){let t=this.requireConfiguredProvider(e.providerId),a=e.modelId??t.defaultModel;if(!t.models.has(a))throw Error(`Model "${a}" is not configured for provider "${e.providerId}".`);return{providerId:e.providerId,modelId:a,...t.defaults,...e.overrides}}registerProvider(e){if(An(e.collection),e.handlerFactory&&e.asyncHandlerFactory)throw Error(`Provider "${e.collection.provider.id}" cannot register both sync and async handlers.`);if(e.handlerFactory)Cr(e.collection.provider.id,e.handlerFactory);if(e.asyncHandlerFactory)qr(e.collection.provider.id,e.asyncHandlerFactory);let t=e.exposeModels??Object.keys(e.collection.models);a0(e.collection.provider.id,t);let a=this.providerConfigs.get(e.collection.provider.id),r=e.defaultModel??e.collection.provider.defaultModelId??t[0];if(!r)throw Error(`Provider "${e.collection.provider.id}" must define a default model.`);if(!t.includes(r))throw Error(`Default model "${r}" is not included in configured models for "${e.collection.provider.id}".`);let i=new Set([...a?.models??[],...t]),n={...a?.defaults??{},...i0(e.defaults)};this.providerConfigs.set(e.collection.provider.id,{id:e.collection.provider.id,models:i,defaultModel:r,defaults:n})}registerBuiltinProvider(e){let t=e.exposeModels??Object.keys(e.models);a0(e.id,t);let a=e.defaultModel??t[0];if(!a)throw Error(`Provider "${e.id}" must define a default model.`);if(!t.includes(a))throw Error(`Default model "${a}" is not included in configured models for "${e.id}".`);An({provider:{id:e.id,name:e.name??e.id,description:e.description,protocol:e.protocol,baseUrl:e.baseUrl,defaultModelId:a,client:e.client??"openai-compatible",capabilities:e.capabilities,env:e.env},models:e.models});let r=this.providerConfigs.get(e.id);this.providerConfigs.set(e.id,{id:e.id,models:new Set([...r?.models??[],...t]),defaultModel:a,defaults:{...r?.defaults??{},routingProviderId:e.builtinProviderId,...i0(e.defaults)}})}registerModel(e){Oi(e.providerId,e.modelId,e.info);let t=this.providerConfigs.get(e.providerId);if(!t){this.providerConfigs.set(e.providerId,{id:e.providerId,models:new Set([e.modelId]),defaultModel:e.modelId,defaults:{}});return}t.models.add(e.modelId)}getProviders(){return Array.from(this.providerConfigs.values()).map((e)=>({id:e.id,models:Array.from(e.models),defaultModel:e.defaultModel}))}getBuiltInProviderIds(){return[...Mi]}async getBuiltInProviders(){return(await Promise.all(Mi.map((t)=>hu(t)))).filter((t)=>t!==void 0).map((t)=>{let a=Object.keys(t.models);return{id:t.provider.id,name:t.provider.name,description:t.provider.description,protocol:t.provider.protocol,baseUrl:t.provider.baseUrl,capabilities:t.provider.capabilities,env:t.provider.env,models:a,defaultModel:t.provider.defaultModelId,modelCount:a.length}})}getModels(e){return Array.from(this.requireConfiguredProvider(e).models)}isProviderConfigured(e){return this.providerConfigs.has(e)}isModelConfigured(e,t){return this.providerConfigs.get(e)?.models.has(t)??!1}applyConfig(e){for(let t of e.providers){if(a0(t.id,t.models),t.defaultModel&&!t.models.includes(t.defaultModel))throw Error(`Default model "${t.defaultModel}" is not included in configured models for "${t.id}".`);let a=t.defaultModel??t.models[0];if(!a)throw Error(`Provider "${t.id}" must define a default model.`);let r=T3(t.apiKey,t.apiKeyEnv);this.providerConfigs.set(t.id,{id:t.id,models:new Set(t.models),defaultModel:a,defaults:{apiKey:r,routingProviderId:t.builtinProviderId,baseUrl:t.baseUrl,headers:t.headers,timeoutMs:t.timeoutMs,capabilities:t.capabilities,...i0(t.settings)}})}for(let t of e.models??[])this.registerModel(t);for(let t of e.customProviders??[])this.registerProvider(t);for(let t of this.providerConfigs.values()){let a=Pn(t.id),r=typeof t.defaults.routingProviderId==="string"?Pn(t.defaults.routingProviderId):!1;if(!a&&!r)throw Error(`Provider "${t.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}requireConfiguredProvider(e){let t=this.providerConfigs.get(e);if(!t)throw Error(`Provider "${e}" is not configured in this SDK instance.`);return t}}function dh(e){return new n0(e)}export{kh as loadLlmsConfigFromFile,wh as defineLlmsConfig,dh as createLlmsRuntime};
|
package/dist/index.js
CHANGED
|
@@ -11,5 +11,5 @@ ${a}
|
|
|
11
11
|
`)}function ze(e,a=!1){let t=e.reduce((o,c,r)=>{if(c.role==="user")o.push(r);return o},[]),i=a?new Set(t.slice(-2)):new Set,n=[];for(let[o,c]of e.entries()){let r=V2(c,i.has(o));if(r)n.push(r)}return n}function V2(e,a){let{role:t,content:i}=e;if(typeof i==="string"){let o={type:"text",text:i};if(a)o.cache_control={type:"ephemeral"};return{role:t,content:[o]}}let n=y2(i,a);if(n.length===0)return null;return{role:t,content:n}}function y2(e,a){let t=[];for(let i=0;i<e.length;i++){let n=e[i],o=i===e.length-1,c=U2(n,a&&o);if(c)t.push(c)}return t}function U2(e,a){switch(e.type){case"text":{let i={type:"text",text:e.text};if(a)i.cache_control={type:"ephemeral"};return i}case"file":{let t=e;return{type:"text",text:j(t.path,t.content)}}case"image":{let t=e;return{type:"image",source:{type:"base64",media_type:t.mediaType,data:t.data}}}case"tool_use":{let t=e;return{type:"tool_use",id:t.id,name:t.name,input:I(t.input)}}case"tool_result":{let t=e,i;if(typeof t.content==="string")i=t.content;else i=t.content.map((n)=>{if(n.type==="text")return{type:"text",text:n.text};else if(n.type==="file"){let o=n;return{type:"text",text:j(o.path,o.content)}}else return{type:"image",source:{type:"base64",media_type:n.mediaType,data:n.data}}});return{type:"tool_result",tool_use_id:t.tool_use_id,content:i,is_error:t.is_error}}case"thinking":{let t=e;return{type:"thinking",thinking:t.thinking,signature:t.signature}}case"redacted_thinking":return{type:"redacted_thinking",data:e.data};default:return null}}function ge(e){return e.map((a)=>({name:a.name,description:a.description,input_schema:a.inputSchema}))}var An={maxRetries:4,baseDelay:2000,maxDelay:15000};class Le extends Error{retryAfterSeconds;constructor(e,a,t){super(e,t);this.retryAfterSeconds=a;this.name="RetriableError"}}function En(e){if(e instanceof Le)return!0;if(e instanceof Error){let a=e.message.toLowerCase();if(a.includes("429")||a.includes("rate limit")||a.includes("too many requests"))return!0;if(a.includes("500")||a.includes("502")||a.includes("503")||a.includes("504"))return!0;if(a.includes("network")||a.includes("timeout")||a.includes("econnreset")||a.includes("econnrefused"))return!0}return!1}function Ln(e,a={}){let{baseDelay:t=An.baseDelay,maxDelay:i=An.maxDelay}=a,n=2**e*t,o=Math.random()*0.25*n;return Math.min(n+o,i)}function Pn(e){return new Promise((a)=>setTimeout(a,e))}async function*K(e,a={}){let{maxRetries:t=An.maxRetries,onRetryAttempt:i}=a;for(let n=0;n<=t;n++)try{yield*e();return}catch(o){if(!(n!==t&&En(o)))throw o;let p;if(o instanceof Le&&o.retryAfterSeconds)p=o.retryAfterSeconds*1000;else p=Ln(n,a);if(i)i(n+1,t,p,o);await Pn(p)}throw Error("Retry logic exhausted without returning or throwing")}import{nanoid as Y2}from"nanoid";var j2={"HTTP-Referer":"https://cline.bot","X-Title":"Cline","X-IS-MULTIROOT":"false","X-CLIENT-TYPE":"cline-sdk"},jc=new WeakMap,X2=0;function wi(e){let a=jc.get(e);if(!a)a=`abort_${++X2}`,jc.set(e,a);return a}function Sn(e){return e instanceof Error?{name:e.name,message:e.message}:e}class B{config;abortController;abortSignalSequence=0;constructor(e){this.config=e}getModel(){let e=this.config.modelId;return{id:e,info:{...this.config.modelInfo??{},id:e}}}async getApiStreamUsage(){return}getAbortSignal(){let e=new AbortController;this.abortController=e,e.signal.addEventListener("abort",()=>{if(this.abortController===e)this.abortController=void 0},{once:!0});let a=this.config.abortSignal;if(a)if(a.aborted)this.logAbort("debug","Provider request inherited aborted signal",{controllerId:wi(e),reason:Sn(a.reason)}),e.abort(a.reason);else{let t=++this.abortSignalSequence;a.addEventListener("abort",()=>{this.logAbort("warn","Provider request abort signal fired",{controllerId:wi(e),signalId:t,reason:Sn(a.reason)}),e.abort(a.reason)},{once:!0}),this.logAbort("debug","Provider request attached abort signal",{controllerId:wi(e),signalId:t})}return e.signal}abort(){this.abortController?.abort()}setAbortSignal(e){if(this.config.abortSignal=e,e?.aborted)this.logAbort("debug","Provider handler received pre-aborted signal",{controllerId:this.abortController?wi(this.abortController):void 0,reason:Sn(e.reason)}),this.abortController?.abort(e.reason)}logAbort(e,a,t){this.config.logger?.[e]?.(a,{providerId:this.config.providerId,modelId:this.config.modelId,...t})}supportsPromptCache(e){let a=e??this.config.modelInfo??this.config.knownModels?.[this.config.modelId],t=a?.pricing;return a?.capabilities?.includes("prompt-cache")===!0||this.config.capabilities?.includes("prompt-cache")===!0||typeof t?.cacheRead==="number"||typeof t?.cacheWrite==="number"}calculateCost(e,a,t=0,i=0){let n=(this.config.modelInfo??this.config.knownModels?.[this.config.modelId])?.pricing;if(!n?.input||!n?.output)return;return e/1e6*n.input+a/1e6*n.output+(t>0?t/1e6*(n.cacheRead??0):0)+(i>0?i/1e6*(n.cacheWrite??n.input*1.25):0)}calculateCostFromInclusiveInput(e,a,t=0,i=0){return this.calculateCost(Math.max(0,e-t-i),a,t,i)}createResponseId(){return Y2()}withResponseId(e,a){return{...e,id:a}}*withResponseIdForAll(e,a){for(let t of e)yield{...t,id:a}}getRequestHeaders(){return{...j2,...this.config.headers??{}}}normalizeOpenAICompatibleBadRequest(e){let a=e;if((a?.status??a?.response?.status??a?.error?.code??(typeof a?.message==="string"&&a.message.includes("400")?400:void 0))!==400)return;let i=a?.error?.metadata?.raw,n=this.parseRawProviderError(i),o=n?.error?.message?.trim()||a?.error?.message?.trim()||a?.message?.trim()||"Provider returned error",c=a?.error?.metadata?.provider_name?.trim()||"Provider",r=n?.request_id?.trim(),p=this.rewriteProviderBadRequestDetail(o),u=r?` Request ID: ${r}.`:"";return Error(`${c} request was rejected (HTTP 400). ${p}${u}`,{cause:e instanceof Error?e:void 0})}parseRawProviderError(e){if(!e)return;try{return JSON.parse(e)}catch{return}}rewriteProviderBadRequestDetail(e){let a=e.match(/prompt is too long:\s*([\d,]+)\s*tokens?\s*>\s*([\d,]+)\s*maximum/i);if(a){let t=a[1],i=a[2];return`Prompt is too long: ${t} tokens exceeds the ${i} token limit.`}return e.endsWith(".")?e:`${e}.`}}var J2=1024,H2="CLINE_DEBUG_THINKING";function Z2(){let e=process.env[H2];if(!e)return!1;let a=e.trim().toLowerCase();return a==="1"||a==="true"||a==="yes"}class Ya extends B{type="anthropic";client;ensureClient(){if(!this.client){let e=X(Q(this.config),this.config.apiKey);if(!e)throw Error(Z(Q(this.config)));this.client=new $2({apiKey:e,baseURL:this.config.baseUrl||void 0,defaultHeaders:this.getRequestHeaders()})}return this.client}getModel(){let e=this.config.modelId,t=(this.config.knownModels??{})[e]??{},i=this.config.modelInfo??t;return{id:e,info:{...i,id:e}}}getMessages(e,a){let t=this.supportsPromptCache(this.getModel().info);return ze(a,t)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.ensureClient(),n=this.getModel(),o=this.getAbortSignal(),c=this.createResponseId(),r=Ae(n.info),p=this.config.thinkingBudgetTokens??(this.config.thinking?J2:0),u=r&&p>0?p:0,d=t&&t.length>0,R=this.supportsPromptCache(n.info),D=r&&u>0,T=Z2(),E={},F=(O)=>{E[O]=(E[O]??0)+1};if(T)console.error(`[thinking-debug][anthropic][request] model=${n.id} thinkingFlag=${this.config.thinking===!0} supportsModelThinking=${r} requestedBudget=${p} effectiveBudget=${u} reasoningOn=${D} promptCache=${R}`);let h=this.getMessages(e,a),A=d?ge(t):void 0,b={signal:o},q={model:n.id,thinking:D?{type:"enabled",budget_tokens:u}:void 0,max_tokens:n.info.maxTokens??this.config.maxOutputTokens??128000,temperature:D?void 0:0,system:[R?{text:e,type:"text",cache_control:{type:"ephemeral"}}:{text:e,type:"text"}],messages:h,stream:!0,tools:A,tool_choice:d&&!D?{type:"auto"}:void 0},f=await i.messages.create(q,b),P={id:"",name:"",arguments:""},S={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0},z=null;for await(let O of f){if(T){if(F(`event:${O.type}`),O.type==="content_block_start")F(`content_block_start:${O.content_block?.type??"unknown"}`);else if(O.type==="content_block_delta")F(`content_block_delta:${O.delta?.type??"unknown"}`)}if(O.type==="message_delta")z=O.delta?.stop_reason??z;yield*this.withResponseIdForAll(this.processChunk(O,P,S,c),c)}if(T){let O=Object.entries(E).map(([Oe,N])=>`${Oe}=${N}`).sort().join(" ");console.error(`[thinking-debug][anthropic][stream] ${O}`)}yield{type:"done",success:!0,id:c,incompleteReason:z==="max_tokens"?"max_tokens":void 0}}*processChunk(e,a,t,i){switch(e.type){case"message_start":{let n=e.message.usage;t.inputTokens=n.input_tokens||0,t.outputTokens=n.output_tokens||0,t.cacheWriteTokens=n.cache_creation_input_tokens||0,t.cacheReadTokens=n.cache_read_input_tokens||0,yield{type:"usage",inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheWriteTokens:t.cacheWriteTokens,cacheReadTokens:t.cacheReadTokens,totalCost:this.calculateCost(t.inputTokens,t.outputTokens,t.cacheReadTokens,t.cacheWriteTokens),id:i};break}case"message_delta":{t.outputTokens=e.usage.output_tokens||t.outputTokens,yield{type:"usage",inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheWriteTokens:t.cacheWriteTokens,cacheReadTokens:t.cacheReadTokens,totalCost:this.calculateCost(t.inputTokens,t.outputTokens,t.cacheReadTokens,t.cacheWriteTokens),id:i};break}case"content_block_start":{let n=e.content_block;switch(n.type){case"thinking":yield{type:"reasoning",reasoning:typeof n.thinking==="string"?n.thinking??"":"",signature:typeof n.signature==="string"?n.signature??void 0:void 0,id:i};break;case"redacted_thinking":yield{type:"reasoning",reasoning:"",redacted_data:typeof n.data==="string"?n.data??void 0:void 0,id:i};break;case"text":yield{type:"text",text:"",id:i};break;case"tool_use":a.id=n.id,a.name=n.name,a.arguments="";break}break}case"content_block_delta":{let n=e.delta;switch(n.type){case"thinking_delta":yield{type:"reasoning",reasoning:n.thinking,id:i};break;case"signature_delta":yield{type:"reasoning",reasoning:"",signature:typeof n.signature==="string"?n.signature??void 0:void 0,id:i};break;case"text_delta":yield{type:"text",text:n.text,id:i};break;case"input_json_delta":a.arguments+=n.partial_json;break}break}case"content_block_stop":{if(a.id){let n;try{n=JSON.parse(a.arguments||"{}")}catch{n=a.arguments}yield{type:"tool_calls",id:i,tool_call:{call_id:a.id,function:{name:a.name,arguments:n}}},a.id="",a.name="",a.arguments=""}break}}}}class bi extends B{type="fetch";getMessages(e,a){return{systemPrompt:e,messages:a}}getBaseUrl(){return this.config.baseUrl?.trim()||this.getDefaultBaseUrl()}getJsonHeaders(e){return{"Content-Type":"application/json",...this.getRequestHeaders(),...e??{}}}async fetchJson(e,a){let t=await fetch(`${this.getBaseUrl()}${e}`,{method:a.method??"POST",headers:this.getJsonHeaders(a.headers),body:a.body?JSON.stringify(a.body):void 0,signal:this.getAbortSignal()});if(!t.ok){let i=await t.text();throw Error(`HTTP ${t.status}: ${i}`)}return await t.json()}async*createMessage(e,a,t){yield*K(()=>this.createMessageWithFetch(e,a))}}var I2="https://api.asksage.ai/server",z2="gpt-4o";class ja extends bi{type="fetch";getDefaultBaseUrl(){return I2}getModel(){let e=this.config.modelId?.trim()||z2,a=this.config.modelInfo??this.config.knownModels?.[e]??{id:e,capabilities:["tools"]};return{id:e,info:{...a,id:e}}}getJsonHeaders(e){let a=X(Q(this.config),this.config.apiKey);if(!a)throw Error("AskSage API key is required");return super.getJsonHeaders({"x-access-tokens":a,...e??{}})}async*createMessageWithFetch(e,a){let t=this.createResponseId(),{id:i}=this.getModel(),n={system_prompt:e,message:a.map((r)=>({user:r.role==="assistant"?"gpt":"me",message:this.serializeMessageContent(r.content)})),model:i,dataset:"none",usage:!0},o;try{o=await this.fetchJson("/query",{method:"POST",body:n})}catch(r){let p=r instanceof Error?r.message:String(r);throw Error(`AskSage request failed: ${p}`)}for(let r of o.tool_responses??[])yield{type:"text",text:`[Tool Response: ${JSON.stringify(r)}]
|
|
12
12
|
`,id:t};let c=o.message?.trim();if(!c)throw Error("AskSage request failed: no content in response");if(yield{type:"text",text:c,id:t},o.usage)yield{type:"usage",inputTokens:o.usage.model_tokens.prompt_tokens,outputTokens:o.usage.model_tokens.completion_tokens,cacheReadTokens:0,cacheWriteTokens:0,totalCost:o.usage.asksage_tokens,id:t};yield{type:"done",success:!0,id:t}}serializeMessageContent(e){if(typeof e==="string")return e;return e.map((a)=>("text"in a)?a.text:"").join("").trim()}}var Di,ki;async function ep(){if(Di)return Di;let e="@ai-sdk/amazon-bedrock",a=await import(e);if(!a.createAmazonBedrock)throw Error(`Failed to load createAmazonBedrock from ${e}`);return Di=a.createAmazonBedrock,Di}async function ap(){if(ki)return ki;let e="@aws-sdk/credential-providers",a=await import(e);if(!a.fromNodeProviderChain)throw Error(`Failed to load fromNodeProviderChain from ${e}`);return ki=a.fromNodeProviderChain,ki}async function Xc(e,a){let t=await ep(),i=e.region??"us-east-1",n=e.aws?.authentication,o=Boolean(e.aws?.accessKey&&e.aws?.secretKey),c=n==="profile"||n==="iam"||!n&&!o&&!e.apiKey,r;if(c)r=(await ap())({profile:e.aws?.profile});return t({region:i,accessKeyId:e.aws?.accessKey??void 0,secretAccessKey:e.aws?.secretKey??void 0,sessionToken:e.aws?.sessionToken??void 0,apiKey:e.apiKey??void 0,baseURL:e.aws?.endpoint??e.baseUrl??void 0,headers:a,credentialProvider:r})}var $c=":1m",Ri,tp=1024,ip="medium";async function np(){if(Ri)return Ri;return Ri=await import("ai"),Ri}class Ti extends B{type="bedrock";clientFactory;async ensureClientFactory(){if(!this.clientFactory)this.clientFactory=await Xc(this.config,this.getRequestHeaders());return this.clientFactory}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??{};return{id:e,info:{...a,id:e}}}getMessages(e,a){return cp(e,a)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t),{maxRetries:4})}async*createMessageInternal(e,a,t){let i=await np(),n=await this.ensureClientFactory(),o=this.createResponseId(),c=this.getAbortSignal(),r=this.getModel(),p=r.id,u={},d={};if(p.endsWith($c))p=p.slice(0,-$c.length),d.anthropicBeta=["context-1m-2025-08-07"];let R=Ae(r.info),D=this.config.thinkingBudgetTokens??(this.config.thinking?tp:0),T=!1;if(R&&D>0&&p.includes("anthropic"))d.reasoningConfig={type:"enabled",budgetTokens:D},T=!0;else if(R&&p.includes("amazon.nova")){let h=this.config.reasoningEffort??(this.config.thinking?ip:void 0);if(h)d.reasoningConfig={type:"enabled",maxReasoningEffort:h},T=!0}if(Object.keys(d).length>0)u.bedrock=d;let E=i.streamText({model:n(p),messages:this.getMessages(e,a),tools:op(t),maxTokens:r.info.maxTokens??this.config.maxOutputTokens??128000,temperature:T?void 0:r.info.temperature??0,providerOptions:Object.keys(u).length>0?u:void 0,abortSignal:c}),F=!1;if(E.fullStream)for await(let h of E.fullStream){let A=h.type;if(A==="text-delta"){let b=h.textDelta??h.delta;if(b)yield{type:"text",text:b,id:o};continue}if(A==="reasoning-delta"||A==="reasoning"){let b=h.textDelta??h.reasoning;if(b)yield{type:"reasoning",reasoning:b,id:o};continue}if(A==="tool-call"){let b=h.toolCallId??h.id,q=h.toolName??h.name,f=h.args??{};yield{type:"tool_calls",id:o,tool_call:{call_id:b,function:{name:q,arguments:f}}};continue}if(A==="error"){let b=h.error?.message??"Bedrock stream failed";throw Error(b)}if(A==="finish"){let b=h.usage??{},q=xe(b.inputTokens),f=xe(b.outputTokens),P=xe(b.reasoningTokens),S=xe(b.cachedInputTokens);yield{type:"usage",inputTokens:q,outputTokens:f,thoughtsTokenCount:P,cacheReadTokens:S,totalCost:this.calculateCostFromInclusiveInput(q,f,S),id:o},F=!0}}else if(E.textStream)for await(let h of E.textStream)yield{type:"text",text:h,id:o};if(!F&&E.usage){let h=await E.usage,A=xe(h.inputTokens),b=xe(h.outputTokens),q=xe(h.reasoningTokens),f=xe(h.cachedInputTokens);yield{type:"usage",inputTokens:A,outputTokens:b,thoughtsTokenCount:q,cacheReadTokens:f,totalCost:this.calculateCostFromInclusiveInput(A,b,f),id:o}}yield{type:"done",success:!0,id:o}}}function xe(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function op(e){if(!e||e.length===0)return;let a=ge(e);return Object.fromEntries(a.map((t)=>[t.name,{description:t.description,inputSchema:t.input_schema}]))}function cp(e,a){let t=[{role:"system",content:e}],i=new Map;for(let n of a){if(typeof n.content==="string"){t.push({role:n.role,content:n.content});continue}if(n.role==="assistant"){let c=[];for(let r of n.content){if(r.type==="text"){c.push({type:"text",text:r.text});continue}if(r.type==="tool_use")i.set(r.id,r.name),c.push({type:"tool-call",toolCallId:r.id,toolName:r.name,args:r.input})}if(c.length>0)t.push({role:"assistant",content:c});continue}let o=[];for(let c of n.content){if(c.type==="text"){o.push({type:"text",text:c.text});continue}if(c.type==="image"){o.push({type:"image",image:Buffer.from(c.data,"base64"),mediaType:c.mediaType});continue}if(c.type==="tool_result"){if(o.length>0)t.push({role:"user",content:o.splice(0,o.length)});t.push({role:"tool",content:[{type:"tool-result",toolCallId:c.tool_use_id,toolName:i.get(c.tool_use_id)??"tool",output:rp(c.content),isError:c.is_error??!1}]})}}if(o.length>0)t.push({role:"user",content:o})}return t}function rp(e){if(typeof e==="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function he(e,a,t){let i=t?.assistantToolCallArgKey??"args",n=[{role:"system",content:e}],o=new Map;for(let c of a){if(typeof c.content==="string"){n.push({role:c.role,content:c.content});continue}if(c.role==="assistant"){let p=[];for(let u of c.content){if(u.type==="text"){p.push({type:"text",text:u.text});continue}if(u.type==="file"){p.push({type:"text",text:j(u.path,u.content)});continue}if(u.type==="tool_use")o.set(u.id,u.name),p.push({type:"tool-call",toolCallId:u.id,toolName:u.name,[i]:I(u.input)})}if(p.length>0)n.push({role:"assistant",content:p});continue}let r=[];for(let p of c.content){if(p.type==="text"){r.push({type:"text",text:p.text});continue}if(p.type==="file"){r.push({type:"text",text:j(p.path,p.content)});continue}if(p.type==="image"){r.push({type:"image",image:Buffer.from(p.data,"base64"),mediaType:p.mediaType});continue}if(p.type==="tool_result"){if(r.length>0)n.push({role:"user",content:r.splice(0,r.length)});n.push({role:"tool",content:[{type:"tool-result",toolCallId:p.tool_use_id,toolName:o.get(p.tool_use_id)??"tool",output:te(p.content),isError:p.is_error??!1}]})}}if(r.length>0)n.push({role:"user",content:r})}return n}var Mi=null;async function ea(e){if(Mi)return Mi;return e?.beforeImport?.(),Mi=await import("ai"),Mi}function U(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function pp(e){return{inputTokens:U(e.inputTokens),outputTokens:U(e.outputTokens),thoughtsTokenCount:U(e.reasoningTokens??e.thoughtsTokenCount),cacheReadTokens:U(e.cachedInputTokens)}}async function*aa(e,a){let t=a.resolveUsageMetrics??pp,i=new Set(a.reasoningTypes??["reasoning-delta"]),n=a.toolCallArgsOrder??["args","input"],o=a.responseId,c=!1,r=!1;if(e.fullStream)for await(let p of e.fullStream){let u=p.type;if(u==="text-delta"){let d=p.textDelta??p.text??p.delta;if(d)yield{type:"text",text:d,id:o},r=!0;continue}if(u&&i.has(u)){let d=p.textDelta??p.reasoning??p.text;if(d)yield{type:"reasoning",reasoning:d,id:o};continue}if(u==="tool-call"&&a.enableToolCalls){let d=p.toolCallId??p.id,R=p.toolName??p.name,D=n.map((T)=>p[T]).find((T)=>T!==void 0)??{};yield{type:"tool_calls",id:o,tool_call:{call_id:d,function:{id:a.toolCallFunctionIncludeId?d:void 0,name:R,arguments:D}}};continue}if(u==="error"){let d=p.error?.message??a.errorMessage;throw Error(d)}if(u==="finish"){let d=p.totalUsage??p.usage??{},R=t(d,p);yield{type:"usage",inputTokens:R.inputTokens,outputTokens:R.outputTokens,thoughtsTokenCount:R.thoughtsTokenCount,cacheReadTokens:R.cacheReadTokens,cacheWriteTokens:R.cacheWriteTokens,totalCost:a.calculateCost(R.inputTokens,R.outputTokens,R.cacheReadTokens,R.cacheWriteTokens),id:o},c=!0}}else if(e.textStream)for await(let p of e.textStream)yield{type:"text",text:p,id:o},r=!0;if(!r&&a.enableTextFallback&&e.text){let p=await e.text;if(typeof p==="string"&&p.length>0)yield{type:"text",text:p,id:o}}if(!c&&e.usage){let p=await e.usage,u=t(p);yield{type:"usage",inputTokens:u.inputTokens,outputTokens:u.outputTokens,thoughtsTokenCount:u.thoughtsTokenCount,cacheReadTokens:u.cacheReadTokens,cacheWriteTokens:u.cacheWriteTokens,totalCost:a.calculateCost(u.inputTokens,u.outputTokens,u.cacheReadTokens,u.cacheWriteTokens),id:o}}yield{type:"done",success:!0,id:o}}var Jc=new Map;function On(e,a){let t=e.modelId?.trim(),i=t&&t.length>0?t:a??"",o=(e.knownModels??{})[i]??{},c=e.modelInfo??o;return{id:i,info:{...c,id:i}}}async function sp(e){let a=Jc.get(e);if(a)return a;let t=await import(e);return Jc.set(e,t),t}class We extends B{type="ai-sdk-community";provider;providerPromise;getProviderCreateOptions(){return}async beforeLoadProviderModule(){}getProviderModelSettings(){return}getLoadAiSdkOptions(){return}getStreamErrorMessage(){return"AI SDK stream failed"}getEmitStreamOptions(){return{}}getAssistantToolCallArgKey(){return"args"}normalizeModelId(e){return e}async ensureProvider(){if(this.provider)return this.provider;if(!this.providerPromise)this.providerPromise=(async()=>{let e=this.getProviderDefinition();await this.beforeLoadProviderModule();let a=await sp(e.moduleName),t=a[e.createExportName],i=a[e.providerExportName];if(t){let n=t(this.getProviderCreateOptions());return this.provider=n,n}if(i)return this.provider=i,i;throw Error(`${e.moduleName} did not export \`${e.providerExportName}\` or \`${e.createExportName}\`.`)})();try{return await this.providerPromise}catch(e){this.providerPromise=void 0;let a=this.getProviderDefinition().moduleName;if(e instanceof Error&&e.message.includes(a))throw Error(this.getProviderDefinition().missingDependencyError,{cause:e});throw e}}getModel(){return On(this.config,this.getDefaultModelId())}getMessages(e,a){return he(e,a,{assistantToolCallArgKey:this.getAssistantToolCallArgKey()})}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=await ea(this.getLoadAiSdkOptions()),n=await this.ensureProvider(),{id:o,info:c}=this.getModel(),r=this.createResponseId(),p=i.streamText({model:n(this.normalizeModelId(o),this.getProviderModelSettings()),messages:this.getMessages(e,a),maxTokens:c.maxTokens??void 0,temperature:c.temperature??void 0,abortSignal:this.getAbortSignal()});yield*aa(p,{responseId:r,errorMessage:this.getStreamErrorMessage(),calculateCost:(u,d,R,D)=>this.calculateCostFromInclusiveInput(u,d,R,D),...this.getEmitStreamOptions()})}}var Hc=!1;async function up(){if(Hc)return;Hc=!0;try{let e=await import("zod"),t=(e.z??e).object;if(typeof t!=="function")return;let i=t({}).refine?.(()=>!0);if(!i||typeof i.passthrough==="function")return;let n=Object.getPrototypeOf(i);if(!n||typeof n.passthrough==="function")return;Object.defineProperty(n,"passthrough",{value(){return this},configurable:!0,enumerable:!1,writable:!0})}catch{}}function mp(e){return e.startsWith("sk-")}function lp(){let e=process.env.AI_SDK_LOG_WARNINGS?.trim().toLowerCase();return e==="0"||e==="false"||e==="off"}function dp(e){if(e.includes("/"))return e;return`openai/${e}`}class Xa extends We{getProviderDefinition(){return{moduleName:"ai-sdk-provider-codex-cli",createExportName:"createCodexCli",providerExportName:"codexCli",missingDependencyError:"Codex provider requires `ai-sdk-provider-codex-cli` and the Codex CLI at runtime. Install dependencies and run `codex` to authenticate."}}getDefaultModelId(){return"gpt-5.3-codex"}async beforeLoadProviderModule(){await up()}getProviderCreateOptions(){let a={...(this.config.codex??{}).defaultSettings??{}};if(this.config.reasoningEffort&&a.reasoningEffort===void 0)a.reasoningEffort=this.config.reasoningEffort;else if(this.config.thinking&&a.reasoningEffort===void 0)a.reasoningEffort="medium";let t=this.config.apiKey?.trim(),i=typeof this.config.accessToken==="string"&&this.config.accessToken.trim().length>0;if(t&&!i&&mp(t))a.env={...a.env??{},OPENAI_API_KEY:t};return{defaultSettings:Object.keys(a).length>0?a:void 0}}getProviderModelSettings(){return this.config.codex?.modelSettings}getStreamErrorMessage(){return"Codex stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],toolCallArgsOrder:["args","input"]}}}class $a extends We{getProviderDefinition(){return{moduleName:"ai-sdk-provider-claude-code",createExportName:"createClaudeCode",providerExportName:"claudeCode",missingDependencyError:"Claude Code provider requires `ai-sdk-provider-claude-code` at runtime. Install dependencies and run `claude login`."}}getDefaultModelId(){return"sonnet"}getProviderCreateOptions(){return this.config.claudeCode??{}}getLoadAiSdkOptions(){return{beforeImport:()=>{if(lp())globalThis.AI_SDK_LOG_WARNINGS=!1}}}getStreamErrorMessage(){return"Claude Code stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta"]}}}class Ja extends We{getProviderDefinition(){return{moduleName:"ai-sdk-provider-opencode-sdk",createExportName:"createOpencode",providerExportName:"opencode",missingDependencyError:"OpenCode provider requires `ai-sdk-provider-opencode-sdk` and OpenCode at runtime."}}getDefaultModelId(){return"openai/gpt-5.3-codex"}getProviderCreateOptions(){let e=this.config.opencode??{},a={...e.defaultSettings??{}};if(a.agent===void 0)a.agent="general";return{hostname:e.hostname,port:e.port,autoStartServer:e.autoStartServer,serverTimeout:e.serverTimeout,defaultSettings:Object.keys(a).length>0?a:void 0}}getProviderModelSettings(){return this.config.opencode?.modelSettings}normalizeModelId(e){return dp(e)}getStreamErrorMessage(){return"OpenCode stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],enableTextFallback:!0}}}class Ha extends We{getProviderDefinition(){return{moduleName:"@jerome-benoit/sap-ai-provider",createExportName:"createSAPAIProvider",providerExportName:"sapai",missingDependencyError:"SAP AI Core provider requires `@jerome-benoit/sap-ai-provider` at runtime."}}getDefaultModelId(){return"anthropic--claude-3.5-sonnet"}getProviderCreateOptions(){let e=this.config.sap??{},a=e.api??(e.useOrchestrationMode===void 0?void 0:e.useOrchestrationMode?"orchestration":"foundation-models"),t={resourceGroup:e.resourceGroup,deploymentId:e.deploymentId,api:a,defaultSettings:e.defaultSettings},i=Object.fromEntries(Object.entries(t).filter(([,n])=>n!==void 0));return Object.keys(i).length>0?i:void 0}getStreamErrorMessage(){return"SAP AI Core stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],enableToolCalls:!0,toolCallArgsOrder:["args","input"]}}}class Za extends We{getProviderDefinition(){return{moduleName:"@ai-sdk/mistral",createExportName:"createMistral",providerExportName:"mistral",missingDependencyError:"Mistral provider requires `@ai-sdk/mistral` at runtime."}}getDefaultModelId(){return"mistral-medium-latest"}getStreamErrorMessage(){return"Mistral stream failed"}}class Ia extends We{getProviderDefinition(){return{moduleName:"dify-ai-provider",createExportName:"createDifyProvider",providerExportName:"difyProvider",missingDependencyError:"Dify provider requires `dify-ai-provider` at runtime."}}getDefaultModelId(){return"default"}getProviderCreateOptions(){if(!this.config.baseUrl)return;return{baseURL:this.config.baseUrl}}getProviderModelSettings(){let e={responseMode:"blocking"};if(this.config.apiKey)e.apiKey=this.config.apiKey;return e}getStreamErrorMessage(){return"Dify stream failed"}}import{FunctionCallingConfigMode as wp,GoogleGenAI as Zc,ThinkingLevel as Ai}from"@google/genai";function _i(e){let a=new Map;return e.map((t)=>gp(t,a)).filter((t)=>t!==null)}function gp(e,a){let{role:t,content:i}=e,n=t==="assistant"?"model":"user";if(typeof i==="string")return{role:n,parts:[{text:i}]};let o=xp(i,a);if(o.length===0)return null;return{role:n,parts:o}}function xp(e,a){let t=[];for(let i of e){if(i.type==="tool_use")a.set(i.id,i.name);let n=hp(i,a);if(n)t.push(n)}return t}function hp(e,a){switch(e.type){case"text":{let t=e,i={text:t.text};if(t.signature)i.thoughtSignature=t.signature;return i}case"file":{let t=e;return{text:j(t.path,t.content)}}case"image":{let t=e;return{inlineData:{mimeType:t.mediaType,data:t.data}}}case"tool_use":{let t=e,i={functionCall:{id:t.id,name:t.name,args:I(t.input)}};if(t.signature)i.thoughtSignature=t.signature;return i}case"tool_result":{let t=e,i;if(typeof t.content==="string")i={result:mi(t.content)};else i={result:te(t.content)};if(t.is_error)i.error=!0;return{functionResponse:{id:t.tool_use_id,name:a.get(t.tool_use_id)??t.tool_use_id,response:i}}}case"thinking":{let t=e,i={text:t.thinking,thought:!0};if(t.signature)i.thoughtSignature=t.signature;return i}default:return null}}var Wp=new Set(["type","title","description","enum","properties","required","additionalProperties","format","minimum","maximum","items","prefixItems","minItems","maxItems"]);function Gi(e){if(!e||typeof e!=="object"||Array.isArray(e))return e;let a=e,t={};for(let[i,n]of Object.entries(a)){if(!Wp.has(i))continue;if(i==="properties"&&n&&typeof n==="object"){let o={};for(let[c,r]of Object.entries(n))o[c]=Gi(r);t[i]=o}else if(i==="items"||i==="additionalProperties")t[i]=typeof n==="object"&&n!==null?Gi(n):n;else if(i==="prefixItems"&&Array.isArray(n))t[i]=n.map((o)=>Gi(o));else t[i]=n}if(a.exclusiveMinimum!==void 0&&t.minimum===void 0)t.minimum=a.exclusiveMinimum;if(a.exclusiveMaximum!==void 0&&t.maximum===void 0)t.maximum=a.exclusiveMaximum;return t}function fi(e){return e.map((a)=>({name:a.name,description:a.description,parameters:Gi(a.inputSchema)}))}var bp=1024,Dp=128000,kp=8192;function Ic(e){return e.toLowerCase().includes("gemini-3")}function Rp(e){let a=e.toLowerCase();return Ic(e)&&a.includes("flash")&&!a.includes("lite")}class Pe extends B{type="gemini";client;ensureClient(){if(!this.client)if(this.config.gcp?.projectId)this.client=new Zc({vertexai:!0,project:this.config.gcp.projectId,location:this.config.region??"us-central1",httpOptions:{headers:this.getRequestHeaders()}});else{if(!this.config.apiKey)throw Error("Gemini API key is required when not using Vertex AI");this.client=new Zc({apiKey:this.config.apiKey,httpOptions:{headers:this.getRequestHeaders()}})}return this.client}getModel(){let e=this.config.modelId,t=(this.config.knownModels??{})[e]??{},i=this.config.modelInfo??t;return{id:e,info:{...i,id:e}}}getMessages(e,a){return _i(a)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t),{maxRetries:4,baseDelay:2000,maxDelay:15000})}async*createMessageInternal(e,a,t){let i=this.ensureClient(),{id:n,info:o}=this.getModel(),c=this.getAbortSignal(),r=this.createResponseId(),p=this.getMessages(e,a),u=Ae(o),d=this.config.thinking===!0||typeof this.config.thinkingBudgetTokens==="number"||typeof this.config.reasoningEffort==="string",R=0,D,T=o.thinkingConfig?.thinkingLevel!=null||Ic(n);if(u&&d){let A=this.config.thinkingBudgetTokens??(d?bp:0);if(R=Math.min(Math.max(0,A),o.thinkingConfig?.maxBudget??24576),T){let b=this.config.reasoningEffort;if(b==="high"||b==="xhigh")D=Ai.HIGH;else if(b==="medium")D=Ai.MEDIUM;else if(b==="low")D=Ai.LOW;else if(this.config.thinking)D=Ai.MEDIUM}}let E=Rp(n)?kp:Dp,F=o.maxTokens??this.config.maxOutputTokens??E,h={httpOptions:this.config.baseUrl?{baseUrl:this.config.baseUrl,headers:this.getRequestHeaders()}:void 0,abortSignal:c,systemInstruction:e,temperature:o.temperature??1,maxOutputTokens:F};if(u&&d&&(T||R>0))h.thinkingConfig={thinkingBudget:T?void 0:R,thinkingLevel:D,includeThoughts:!0};if(t&&t.length>0){let A=fi(t);h.tools=[{functionDeclarations:A}],h.toolConfig={functionCallingConfig:{mode:wp.AUTO}}}try{let A=await i.models.generateContentStream({model:n,contents:p,config:h}),b=0,q=0,f=0,P=0,S=0;for await(let O of A){let Oe=O?.candidates?.[0]?.content?.parts??[];for(let N of Oe){if(N.thought&&N.text)yield{type:"reasoning",reasoning:N.text||"",signature:N.thoughtSignature,id:r};else if(N.text)yield{type:"text",text:N.text,id:r,signature:N.thoughtSignature};if(N.functionCall){let ne=N.functionCall,at=ne.id??`${r}_tool_${S++}`;if(ne.name)yield{type:"tool_calls",tool_call:{call_id:at,function:{id:at,name:ne.name,arguments:ne.args??{}}},id:r,signature:N.thoughtSignature}}}if(O.usageMetadata)b=O.usageMetadata.promptTokenCount??b,q=O.usageMetadata.candidatesTokenCount??q,P=O.usageMetadata.thoughtsTokenCount??P,f=O.usageMetadata.cachedContentTokenCount??f}let z=this.calculateGeminiCost(b,q,P,f);yield{type:"usage",inputTokens:b,outputTokens:q,thoughtsTokenCount:P,cacheReadTokens:f,cacheWriteTokens:0,totalCost:z,id:r},yield{type:"done",success:!0,id:r}}catch(A){if(A instanceof Error&&A.message.includes("429"))throw new Le(A.message,void 0,{cause:A});throw A}}calculateGeminiCost(e,a,t,i){return this.calculateCost(e,a+t,i)}}import _p from"openai";function Ei(e,a=!1){let t=a?e.map((i)=>i.role).lastIndexOf("user"):-1;return e.flatMap((i,n)=>Tp(i,a&&n===t))}function Tp(e,a){let{role:t,content:i}=e;if(typeof i==="string"){if(t!=="user"||!a)return[{role:t,content:i}];return[{role:t,content:[{type:"text",text:i,cache_control:{type:"ephemeral"}}]}]}if(t==="assistant")return[Mp(i)];else return Gp(i,a)}function Mp(e){let a=[],t=[],i=[],n=[];for(let c of e)switch(c.type){case"text":a.push(c.text);break;case"tool_use":{let r=c;t.push({id:r.id,type:"function",function:{name:r.name,arguments:JSON.stringify(I(r.input))}});break}case"thinking":{let r=c;if(r.thinking)i.push(r.thinking);let p=Array.isArray(r.details)?r.details:Array.isArray(r.summary)?r.summary:[];if(p.length>0)n.push(...p);break}}let o={role:"assistant",content:a.length>0?a.join(`
|
|
13
13
|
`):null};if(t.length>0)o.tool_calls=t;if(i.length>0){let c=i.join(`
|
|
14
|
-
`);o.reasoning=c,o.reasoning_content=c}if(n.length>0)o.reasoning_details=n;return o}function Gp(e,a){let t=[],i=e.filter((c)=>c.type==="tool_result");for(let c of i)t.push({role:"tool",tool_call_id:c.tool_use_id,content:te(c.content)});let n=e.filter((c)=>c.type!=="tool_result");if(n.length===0)return t;let o=[];for(let c of n)switch(c.type){case"text":o.push({type:"text",text:c.text});break;case"file":{let r=c;o.push({type:"text",text:j(r.path,r.content)});break}case"image":{let r=c;o.push({type:"image_url",image_url:{url:`data:${r.mediaType};base64,${r.data}`}});break}}if(o.length===0)return t;if(a){for(let c=o.length-1;c>=0;c--)if(o[c].type==="text"){o[c]={...o[c],cache_control:{type:"ephemeral"}};break}}return t.push({role:"user",content:o.length===1&&o[0].type==="text"&&!a?o[0].text:o}),t}function vn(e,a){let t=a?.strict??!0;return e.map((i)=>({type:"function",function:{name:i.name,description:i.description,parameters:i.inputSchema,strict:t}}))}function za(e,a){if(!e||e.length===0)return{};return{tools:vn(e,a),tool_choice:"auto"}}class ta{toolCalls=new Map;processToolCallDeltas(e,a){let t=[];for(let i of e){let{index:n,id:o}=i,c=i.function,r=this.toolCalls.get(n);if(!r)r={id:"",name:"",arguments:""},this.toolCalls.set(n,r);if(o)r.id=o;if(c?.name)r.name=c.name;let p=c?.arguments,u=this.normalizeArgumentsDelta(r.arguments,p);if(u)r.arguments+=u;if(r.id&&r.name)t.push({type:"tool_calls",id:a,tool_call:{call_id:r.id,function:{id:r.id,name:r.name,arguments:u}}})}return t}getToolCalls(){return Array.from(this.toolCalls.values()).map((e)=>({call_id:e.id,function:{id:e.id,name:e.name,arguments:e.arguments}}))}reset(){this.toolCalls.clear()}normalizeArgumentsDelta(e,a){if(a==null)return"";let t=typeof a==="string"?a:JSON.stringify(a);if(!t)return"";if(e&&t.length>=e.length&&t.startsWith(e))return t.slice(e.length);return t}}var fp="medium";function Ap(e){let a={};if(typeof e.thinking==="boolean")a.enabled=e.thinking;if(e.effort)a.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)a.max_tokens=e.budgetTokens;return Object.keys(a).length>0?a:void 0}class ia extends B{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let a=X(Q(this.config),this.config.apiKey);if(!a)throw Error(Z(Q(this.config)));let t=this.getRequestHeaders();this.client=new _p({apiKey:a,baseURL:e,defaultHeaders:t})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...a,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,a){let t=this.getModel(),i=this.supportsPromptCache(t.info);return[i?{role:"system",content:[{type:"text",text:e,cache_control:{type:"ephemeral"}}]}:{role:"system",content:e},...Ei(a,i)]}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.ensureClient(),{id:n,info:o}=this.getModel(),c=this.createResponseId(),r=Q(this.config),p=this.getMessages(e,a),u={model:n,messages:p,stream:!0,stream_options:{include_usage:!0},...za(t,{strict:r!=="openrouter"})};if(r==="openrouter"&&n.startsWith("anthropic/"))u.cache_control={type:"ephemeral"};let d=o.maxTokens??this.config.maxOutputTokens;if(d)u.max_completion_tokens=d;if(!(o.capabilities?.includes("reasoning")??!1))u.temperature=o.temperature??0;let D=o.capabilities?.includes("reasoning-effort")||o.capabilities?.includes("reasoning")||!1,T=this.config.reasoningEffort??(this.config.thinking?fp:void 0);if(r==="openrouter"){let P=Ap({thinking:this.config.thinking,effort:T,budgetTokens:this.config.thinkingBudgetTokens});if(P)u.reasoning=P}else if(D&&T)u.reasoning_effort=T;let E=this.getRequestHeaders(),F=Object.keys(E).some((P)=>P.toLowerCase()==="authorization"),h=X(r,this.config.apiKey);if(!F&&h)E.Authorization=`Bearer ${h}`;let A=this.getAbortSignal(),b;try{b=await i.chat.completions.create(u,{signal:A,headers:E})}catch(P){throw this.normalizeOpenAICompatibleBadRequest(P)??P}let q=new ta,f=null;for await(let P of b){let S=P.choices?.[0];if(S?.finish_reason)f=S.finish_reason;yield*this.withResponseIdForAll(this.processChunk(P,q,o,c),c)}yield{type:"done",success:!0,id:c,incompleteReason:f==="length"?"max_tokens":void 0}}*processChunk(e,a,t,i){let n=e.choices?.[0]?.delta,o=n&&{...n,reasoning:typeof n.reasoning==="string"?n.reasoning??"":void 0,reasoning_content:n.reasoning_content,reasoning_details:n.reasoning_details};if(o?.content)yield{type:"text",text:o.content,id:i};if(o?.reasoning_content||o?.reasoning||Array.isArray(o?.reasoning_details)&&o.reasoning_details.length>0)yield{type:"reasoning",reasoning:o.reasoning_content??o.reasoning??"",details:o.reasoning_details,id:i};if(o?.tool_calls)yield*a.processToolCallDeltas(o.tool_calls.map((c)=>({index:c.index,id:c.id,function:c.function})),i);if(e.usage){let c=e.usage.prompt_tokens??0,r=e.usage.completion_tokens??0,p=e.usage,u=p.prompt_tokens_details?.cached_tokens??p.cache_read_input_tokens??0,d=p.prompt_tokens_details?.cache_write_tokens??p.cache_creation_input_tokens??0;yield{type:"usage",inputTokens:c,outputTokens:r,cacheReadTokens:u,cacheWriteTokens:d,thoughtsTokenCount:p.completion_tokens_details?.reasoning_tokens,totalCost:this.calculateCostFromInclusiveInput(c,r,u,d),id:i}}}}import{createOpenAICompatible as Ep}from"@ai-sdk/openai-compatible";import
|
|
14
|
+
`);o.reasoning=c,o.reasoning_content=c}if(n.length>0)o.reasoning_details=n;return o}function Gp(e,a){let t=[],i=e.filter((c)=>c.type==="tool_result");for(let c of i)t.push({role:"tool",tool_call_id:c.tool_use_id,content:te(c.content)});let n=e.filter((c)=>c.type!=="tool_result");if(n.length===0)return t;let o=[];for(let c of n)switch(c.type){case"text":o.push({type:"text",text:c.text});break;case"file":{let r=c;o.push({type:"text",text:j(r.path,r.content)});break}case"image":{let r=c;o.push({type:"image_url",image_url:{url:`data:${r.mediaType};base64,${r.data}`}});break}}if(o.length===0)return t;if(a){for(let c=o.length-1;c>=0;c--)if(o[c].type==="text"){o[c]={...o[c],cache_control:{type:"ephemeral"}};break}}return t.push({role:"user",content:o.length===1&&o[0].type==="text"&&!a?o[0].text:o}),t}function vn(e,a){let t=a?.strict??!0;return e.map((i)=>({type:"function",function:{name:i.name,description:i.description,parameters:i.inputSchema,strict:t}}))}function za(e,a){if(!e||e.length===0)return{};return{tools:vn(e,a),tool_choice:"auto"}}class ta{toolCalls=new Map;processToolCallDeltas(e,a){let t=[];for(let i of e){let{index:n,id:o}=i,c=i.function,r=this.toolCalls.get(n);if(!r)r={id:"",name:"",arguments:""},this.toolCalls.set(n,r);if(o)r.id=o;if(c?.name)r.name=c.name;let p=c?.arguments,u=this.normalizeArgumentsDelta(r.arguments,p);if(u)r.arguments+=u;if(r.id&&r.name)t.push({type:"tool_calls",id:a,tool_call:{call_id:r.id,function:{id:r.id,name:r.name,arguments:u}}})}return t}getToolCalls(){return Array.from(this.toolCalls.values()).map((e)=>({call_id:e.id,function:{id:e.id,name:e.name,arguments:e.arguments}}))}reset(){this.toolCalls.clear()}normalizeArgumentsDelta(e,a){if(a==null)return"";let t=typeof a==="string"?a:JSON.stringify(a);if(!t)return"";if(e&&t.length>=e.length&&t.startsWith(e))return t.slice(e.length);return t}}var fp="medium";function Ap(e){let a={};if(typeof e.thinking==="boolean")a.enabled=e.thinking;if(e.effort)a.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)a.max_tokens=e.budgetTokens;return Object.keys(a).length>0?a:void 0}class ia extends B{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let a=X(Q(this.config),this.config.apiKey);if(!a)throw Error(Z(Q(this.config)));let t=this.getRequestHeaders();this.client=new _p({apiKey:a,baseURL:e,defaultHeaders:t})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...a,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,a){let t=this.getModel(),i=this.supportsPromptCache(t.info);return[i?{role:"system",content:[{type:"text",text:e,cache_control:{type:"ephemeral"}}]}:{role:"system",content:e},...Ei(a,i)]}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.ensureClient(),{id:n,info:o}=this.getModel(),c=this.createResponseId(),r=Q(this.config),p=this.getMessages(e,a),u={model:n,messages:p,stream:!0,stream_options:{include_usage:!0},...za(t,{strict:r!=="openrouter"})};if(r==="openrouter"&&n.startsWith("anthropic/"))u.cache_control={type:"ephemeral"};let d=o.maxTokens??this.config.maxOutputTokens;if(d)u.max_completion_tokens=d;if(!(o.capabilities?.includes("reasoning")??!1))u.temperature=o.temperature??0;let D=o.capabilities?.includes("reasoning-effort")||o.capabilities?.includes("reasoning")||!1,T=this.config.reasoningEffort??(this.config.thinking?fp:void 0);if(r==="openrouter"){let P=Ap({thinking:this.config.thinking,effort:T,budgetTokens:this.config.thinkingBudgetTokens});if(P)u.reasoning=P}else if(D&&T)u.reasoning_effort=T;let E=this.getRequestHeaders(),F=Object.keys(E).some((P)=>P.toLowerCase()==="authorization"),h=X(r,this.config.apiKey);if(!F&&h)E.Authorization=`Bearer ${h}`;let A=this.getAbortSignal(),b;try{b=await i.chat.completions.create(u,{signal:A,headers:E})}catch(P){throw this.normalizeOpenAICompatibleBadRequest(P)??P}let q=new ta,f=null;for await(let P of b){let S=P.choices?.[0];if(S?.finish_reason)f=S.finish_reason;yield*this.withResponseIdForAll(this.processChunk(P,q,o,c),c)}yield{type:"done",success:!0,id:c,incompleteReason:f==="length"?"max_tokens":void 0}}*processChunk(e,a,t,i){let n=e.choices?.[0]?.delta,o=n&&{...n,reasoning:typeof n.reasoning==="string"?n.reasoning??"":void 0,reasoning_content:n.reasoning_content,reasoning_details:n.reasoning_details};if(o?.content)yield{type:"text",text:o.content,id:i};if(o?.reasoning_content||o?.reasoning||Array.isArray(o?.reasoning_details)&&o.reasoning_details.length>0)yield{type:"reasoning",reasoning:o.reasoning_content??o.reasoning??"",details:o.reasoning_details,id:i};if(o?.tool_calls)yield*a.processToolCallDeltas(o.tool_calls.map((c)=>({index:c.index,id:c.id,function:c.function})),i);if(e.usage){let c=e.usage.prompt_tokens??0,r=e.usage.completion_tokens??0,p=e.usage,u=p.prompt_tokens_details?.cached_tokens??p.cache_read_input_tokens??0,d=p.prompt_tokens_details?.cache_write_tokens??p.cache_creation_input_tokens??0;yield{type:"usage",inputTokens:c,outputTokens:r,cacheReadTokens:u,cacheWriteTokens:d,thoughtsTokenCount:p.completion_tokens_details?.reasoning_tokens,totalCost:this.calculateCostFromInclusiveInput(c,r,u,d),id:i}}}}import{createOpenAICompatible as Ep}from"@ai-sdk/openai-compatible";import Lp from"zod";var Pp="medium";function Sp(e){let a={};if(typeof e.thinking==="boolean")a.enabled=e.thinking;if(e.effort)a.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)a.max_tokens=e.budgetTokens;return Object.keys(a).length>0?a:void 0}function Op(e){return e.replace(/-([a-zA-Z0-9])/g,(a,t)=>t.toUpperCase())}function vp(e){if(!e||e.length===0)return;return Object.fromEntries(e.map((a)=>[a.name,{description:a.description,inputSchema:Lp.fromJSONSchema(a.inputSchema)}]))}class ie extends B{type="openai-compatible";provider;ensureProvider(){if(this.provider)return this.provider;let e=Q(this.config),a=this.config.baseUrl;if(!a)throw Error("Base URL is required. Set baseUrl in config.");let t=X(e,this.config.apiKey);if(!t)throw Error(Z(e));return this.provider=Ep({name:e,apiKey:t,baseURL:a,headers:this.getRequestHeaders(),includeUsage:!0}),this.provider}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...a,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,a){return he(e,a,{assistantToolCallArgKey:"args"})}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=await ea(),n=this.ensureProvider(),{id:o,info:c}=this.getModel(),r=this.createResponseId(),p=Q(this.config),u=c.capabilities?.includes("reasoning")??!1,d=c.capabilities?.includes("reasoning-effort")||c.capabilities?.includes("reasoning")||!1,R=this.config.reasoningEffort??(this.config.thinking?Pp:void 0),D=Op(p),T={};if(p==="openrouter"){let h=Sp({thinking:this.config.thinking,effort:R,budgetTokens:this.config.thinkingBudgetTokens});if(h)T.reasoning=h}else if(d&&R)T.reasoningEffort=R;let E=Object.keys(T).length>0?{[D]:T}:void 0,F=i.streamText({model:n(o),messages:this.getMessages(e,a),tools:vp(t),maxTokens:c.maxTokens??this.config.maxOutputTokens,temperature:u?void 0:c.temperature??0,providerOptions:E,abortSignal:this.getAbortSignal()});yield*aa(F,{responseId:r,errorMessage:"OpenAI-compatible stream failed",calculateCost:(h,A,b,q)=>this.calculateCost(h,A,b,q),reasoningTypes:["reasoning-delta","reasoning"],enableToolCalls:!0,toolCallArgsOrder:["args","input"],toolCallFunctionIncludeId:!0,resolveUsageMetrics:(h)=>({inputTokens:U(h.inputTokens),outputTokens:U(h.outputTokens),thoughtsTokenCount:U(h.reasoningTokens??h.thoughtsTokenCount),cacheReadTokens:U(h.cachedInputTokens)})})}}import qp from"openai";var Qp="medium";function Cp(e,a){if(!e?.length)return;return e.map((t)=>({type:"function",name:t.name,description:t.description,parameters:t.inputSchema}))}function Bp(e){let a=[],t=(o,c)=>{let r=c.map((p)=>p.text).join(`
|
|
15
15
|
`);if(!r)return;a.push({type:"message",role:o,content:[{type:o==="user"?"input_text":"output_text",text:r}]})},i=(o)=>o.type==="text",n=(o)=>o.call_id?.trim()||o.id;for(let o of e){if(o.role!=="user"&&o.role!=="assistant")continue;if(!Array.isArray(o.content)){if(o.content)t(o.role,[{type:"text",text:o.content}]);continue}let c=[],r=()=>{if(c.length===0)return;t(o.role,c),c=[]};for(let p of o.content){if(i(p)){c.push(p);continue}if(o.role==="assistant"&&p.type==="tool_use"){r();let u=p;a.push({type:"function_call",call_id:n(u),name:u.name,arguments:JSON.stringify(I(u.input))});continue}if(o.role==="user"&&p.type==="tool_result")r(),a.push({type:"function_call_output",call_id:p.tool_use_id,output:te(p.content)})}r()}return a}class Se extends B{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let a=X(Q(this.config),this.config.apiKey);if(!a)throw Error(Z(Q(this.config)));let t=this.getRequestHeaders(),i=Object.keys(t).some((n)=>n.toLowerCase()==="authorization");this.client=new qp({apiKey:a,baseURL:e,defaultHeaders:i?t:{...t,Authorization:`Bearer ${a}`}})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...a,id:e}}}getDefaultModelInfo(){let e=[].filter((a)=>a!=="prompt-cache");return{id:this.config.modelId,capabilities:e}}getMessages(e,a){return Bp(a)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.ensureClient(),{id:n,info:o}=this.getModel(),c=this.getAbortSignal(),r=this.createResponseId(),p=Q(this.config),u,d=new Map,R=this.getMessages(e,a),D=Cp(t,{stripFormat:p==="openai-codex"});if(!D?.length)throw Error("OpenAI Responses API requires tools to be provided. Enable native tool calling in settings.");let T=o.capabilities?.includes("reasoning")??!1,E=this.config.reasoningEffort??(this.config.thinking?Qp:void 0),F=T&&E?{effort:E,summary:"auto"}:void 0,h=this.getRequestHeaders(),A=Object.keys(h).some((f)=>f.toLowerCase()==="authorization"),b=X(p,this.config.apiKey);if(!A&&b)h.Authorization=`Bearer ${b}`;if(p==="openai-codex"&&typeof this.config.accountId==="string"&&this.config.accountId.trim().length>0){let f=this.config.accountId.trim();h["chatgpt-account-id"]=f,h["openai-account-id"]=f}let q;try{q=await i.responses.create({model:n,instructions:e,input:R,store:p==="openai-codex"?!1:void 0,stream:!0,tools:D,reasoning:F},{signal:c,headers:h})}catch(f){let P=this.normalizeOpenAICompatibleBadRequest(f);if(P)throw P;if(p==="openai-codex"){let S=f;if((S?.status??S?.response?.status??(typeof S?.message==="string"&&S.message.includes("400")?400:void 0))===400){let O=S?.error?.detail??S?.error?.message??(typeof S?.message==="string"?S.message:"");throw Error(`OpenAI Codex request was rejected (HTTP 400). ${O?`Detail: ${O}`:"Re-run 'clite auth openai-codex', verify model access, and ensure accountId is present in provider settings."}`,{cause:f})}}throw f}for await(let f of q){let P=this.getApiResponseId(f);if(P)u=P;yield*this.processResponseChunk(f,o,u??r,d)}}*processResponseChunk(e,a,t,i){switch(e.type){case"response.output_item.added":{let n=e.item;if(n.type==="function_call"&&n.id)i.set(n.id,{callId:n.call_id,name:n.name}),yield{type:"tool_calls",id:n.id||t,tool_call:{call_id:n.call_id,function:{id:n.id,name:n.name,arguments:n.arguments}}};if(n.type==="reasoning"&&n.encrypted_content&&n.id)yield{type:"reasoning",id:n.id||t,reasoning:"",redacted_data:n.encrypted_content};break}case"response.output_item.done":{let n=e.item;if(n.type==="function_call"){if(n.id)i.set(n.id,{callId:n.call_id,name:n.name});yield{type:"tool_calls",id:n.id||t,tool_call:{call_id:n.call_id,function:{id:n.id,name:n.name,arguments:n.arguments}}}}if(n.type==="reasoning")yield{type:"reasoning",id:n.id||t,details:n.summary,reasoning:""};break}case"response.reasoning_summary_part.added":yield{type:"reasoning",id:e.item_id||t,reasoning:e.part?.text||""};break;case"response.reasoning_summary_text.delta":yield{type:"reasoning",id:e.item_id||t,reasoning:e.delta||""};break;case"response.reasoning_summary_part.done":yield{type:"reasoning",id:e.item_id||t,details:e.part,reasoning:""};break;case"response.output_text.delta":if(e.delta)yield{id:e.item_id||t,type:"text",text:e.delta};break;case"response.reasoning_text.delta":if(e.delta)yield{id:e.item_id||t,type:"reasoning",reasoning:e.delta};break;case"response.function_call_arguments.delta":{let n=e.item_id?i.get(e.item_id):void 0;yield{type:"tool_calls",id:e.item_id||t,tool_call:{call_id:n?.callId,function:{id:e.item_id,name:n?.name,arguments:e.delta}}}}break;case"response.function_call_arguments.done":if(e.item_id&&e.arguments){let n=i.get(e.item_id);yield{type:"tool_calls",id:e.item_id||t,tool_call:{call_id:e.call_id??n?.callId,function:{id:e.item_id,name:e.name??n?.name,arguments:e.arguments}}}}break;case"response.incomplete":{yield{type:"done",success:!1,incompleteReason:e.response?.incomplete_details?.reason,id:e.response?.id||t};break}case"response.failed":{yield{type:"done",success:!1,error:e.response?.error?.message||"Unknown error",id:e.response?.id||t};break}case"response.completed":{if(e.response?.usage){let n=e.response.usage,o=n.input_tokens||0,c=n.output_tokens||0,r=n.input_tokens_details?.cached_tokens||0,p=0,u=this.calculateCostFromInclusiveInput(o,c,r,0);yield{type:"usage",inputTokens:o,outputTokens:c,cacheWriteTokens:0,cacheReadTokens:r,totalCost:u,id:e.response.id||t}}yield{type:"done",success:!0,id:e.response?.id||t};break}}}getApiResponseId(e){if(typeof e?.response?.id==="string"&&e.response.id.length>0)return e.response.id;if(typeof e?.response_id==="string"&&e.response_id.length>0)return e.response_id;return}}import j5 from"openai";var Fp="us-central1";function er(e){return e.toLowerCase().includes("claude")}function Kp(e){if(!e||e.length===0)return;let a=ge(e);return Object.fromEntries(a.map((t)=>[t.name,{description:t.description,inputSchema:t.input_schema}]))}function Np(e,a,t){let i=t?.promptCacheOn?[{type:"text",text:e,providerOptions:{anthropic:{cacheControl:{type:"ephemeral"}}}}]:e;return he(i,a,{assistantToolCallArgKey:"input"})}class et extends B{type="vertex";geminiHandler;vertexAnthropicModelFactory;vertexAnthropicModelFactoryPromise;getProjectId(){let e=this.config.gcp?.projectId?.trim();if(!e)throw Error("Vertex provider requires `gcp.projectId` in provider configuration.");return e}getConfiguredRegion(){return this.config.gcp?.region?.trim()||this.config.region?.trim()}getRequiredClaudeRegion(){let e=this.getConfiguredRegion();if(!e)throw Error("Vertex Claude models require `gcp.region` (or `region`) in provider configuration.");return e}getGeminiRegion(){return this.getConfiguredRegion()??Fp}ensureGeminiHandler(){if(!this.geminiHandler){let e=this.getProjectId(),a=this.getGeminiRegion();this.geminiHandler=new Pe({...this.config,region:a,gcp:{...this.config.gcp,projectId:e,region:a}})}return this.geminiHandler}async ensureVertexAnthropicModelFactory(){if(this.vertexAnthropicModelFactory)return this.vertexAnthropicModelFactory;if(!this.vertexAnthropicModelFactoryPromise)this.vertexAnthropicModelFactoryPromise=import("@ai-sdk/google-vertex/anthropic").then((e)=>{let a=e.createVertexAnthropic({project:this.getProjectId(),location:this.getRequiredClaudeRegion(),headers:this.getRequestHeaders(),baseURL:this.config.baseUrl}),t=(i)=>a(i);return this.vertexAnthropicModelFactory=t,t});try{return await this.vertexAnthropicModelFactoryPromise}catch(e){if(this.vertexAnthropicModelFactoryPromise=void 0,e instanceof Error&&e.message.includes("@ai-sdk/google-vertex"))throw Error('Vertex Claude models require @ai-sdk/google-vertex at runtime. Install workspace dependencies before using provider "vertex".',{cause:e});throw e}}getModel(){return On(this.config)}getMessages(e,a){let t=this.getModel();if(!er(t.id))return this.ensureGeminiHandler().getMessages(e,a);let i=this.supportsPromptCache(t.info);return ze(a,i)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.getModel();if(!er(i.id)){yield*this.ensureGeminiHandler().createMessage(e,a,t);return}let n=await ea(),o=await this.ensureVertexAnthropicModelFactory(),c=this.createResponseId(),r=this.config.thinkingBudgetTokens??0,p=Ua(i.info,"reasoning")&&r>0,u=this.supportsPromptCache(i.info),d={};if(p)d.anthropic={thinking:{type:"enabled",budgetTokens:r}};let R=n.streamText({model:o(i.id),messages:Np(e,a,{promptCacheOn:u}),tools:Kp(t),maxTokens:i.info.maxTokens??this.config.maxOutputTokens??128000,temperature:p?void 0:0,providerOptions:Object.keys(d).length>0?d:void 0,abortSignal:this.getAbortSignal()});yield*aa(R,{responseId:c,errorMessage:"Vertex Anthropic stream failed",calculateCost:(D,T,E,F)=>this.calculateCost(D,T,E,F),reasoningTypes:["reasoning-delta"],enableToolCalls:!0,toolCallArgsOrder:["input","args"],toolCallFunctionIncludeId:!0,resolveUsageMetrics:(D,T)=>{let F=(T?.providerMetadata??{}).anthropic??{};return{inputTokens:U(D.inputTokens),outputTokens:U(D.outputTokens),thoughtsTokenCount:U(D.reasoningTokens??D.thoughtsTokenCount),cacheReadTokens:U(D.cachedInputTokens??F.cacheReadInputTokens),cacheWriteTokens:U(F.cacheCreationInputTokens)}}})}}import{JSONParser as qd}from"@streamparser/json";Ta();function ar(e){let a=Y(e.providerId);if(a===e.providerId)return e;return{...e,providerId:a}}function us(e,a){if(e.baseUrl)return e.baseUrl;if(e.oca?.mode==="internal")return pe;return a?.baseUrl??ee}function ms(e){let a=e.modelId;return e.modelInfo?.apiFormat??(a?e.knownModels?.[a]?.apiFormat:void 0)}function ls(e){if(ms(e)===oe.OPENAI_RESPONSES)return new Se(e);return new ie(e)}function tr(e,a){return{...e,baseUrl:Q(e)==="oca"?us(e,a):e.baseUrl??a.baseUrl,modelId:e.modelId??a.modelId,knownModels:e.knownModels??a.knownModels,capabilities:e.capabilities??a.capabilities}}var qn;function ds(){if(!qn)qn=rn();return qn}var gs={"claude-code":(e)=>new $a(e),"openai-codex":(e)=>new Xa(e),opencode:(e)=>new Ja(e),sapaicore:(e)=>new Ha(e),mistral:(e)=>new Za(e),dify:(e)=>new Ia(e),asksage:(e)=>new ja(e),oca:(e)=>ls(e)},xs={anthropic:(e)=>new Ya(e),gemini:(e)=>new Pe(e),vertex:(e)=>new et(e),bedrock:(e)=>new Ti(e),openai:(e)=>new Se(e),fetch:(e)=>new ia(e),"ai-sdk-community":(e)=>new ia(e),"openai-compatible":(e)=>new ie(e)};function Qn(e){let a=Q(e),t=gs[a];if(t)return t(e);let i=ds()[a];if(i){let n=xs[i];if(n)return n(e)}return}function Cn(e){let a=ar(e),{providerId:t}=a,i=Q(a);if(Ee(t)){if(Wi(t))throw Error(`Handler for "${t}" is registered as async. Use createHandlerAsync() instead.`);let o=xi(t,a);if(o)return o}let n=Qn({...a,routingProviderId:i});if(n)return n;if(ya(i)){if(a.modelCatalog?.loadLatestOnInit||a.modelCatalog?.loadPrivateOnAuth)throw Error(`Provider "${t}" has runtime model refresh enabled. Use createHandlerAsync() to allow async model refresh.`);let o=ae[i],c=tr({...a,routingProviderId:i},o);return Qn(c)??new ie(c)}return a.baseUrl?new ie({...a,routingProviderId:i}):new Se({...a,routingProviderId:i,baseUrl:"https://api.openai.com/v1"})}async function ir(e){let a=ar(e),{providerId:t}=a,i=Q(a);if(Ee(t)){let n=await hi(t,a);if(n)return n}if(ya(i)){let n=await li(i,a.modelCatalog,{...a,routingProviderId:i});if(n){let o=tr({...a,routingProviderId:i},n);return Qn(o)??new ie(o)}}return Cn(a)}var hs=[...new Set([Ne.provider.id,"anthropic","asksage","bedrock","claude-code","opencode","mistral","dify","openai-native","gemini","vertex",...Object.keys(ae)])],Ws=new Set(hs);function ag(e){let a=Y(e);return Ws.has(a)||Ee(a)||Ee(e)}function Bn(e){return e?{...e}:{}}function ws(e,a){if(e)return e;if(!a)return;let t=globalThis.process;if(!t?.env)return;return t.env[a]}function Fn(e,a){if(!a.length)throw Error(`Provider "${e}" must include at least one model.`)}class Li{providerConfigs=new Map;constructor(e){this.applyConfig(e)}createHandler(e){return Cn(this.toProviderHandlerConfig(e))}async createHandlerAsync(e){return ir(this.toProviderHandlerConfig(e))}toProviderHandlerConfig(e){let a=this.requireConfiguredProvider(e.providerId),t=e.modelId??a.defaultModel;if(!a.models.has(t))throw Error(`Model "${t}" is not configured for provider "${e.providerId}".`);return{providerId:e.providerId,modelId:t,...a.defaults,...e.overrides}}registerProvider(e){if(si(e.collection),e.handlerFactory&&e.asyncHandlerFactory)throw Error(`Provider "${e.collection.provider.id}" cannot register both sync and async handlers.`);if(e.handlerFactory)di(e.collection.provider.id,e.handlerFactory);if(e.asyncHandlerFactory)gi(e.collection.provider.id,e.asyncHandlerFactory);let a=e.exposeModels??Object.keys(e.collection.models);Fn(e.collection.provider.id,a);let t=this.providerConfigs.get(e.collection.provider.id),i=e.defaultModel??e.collection.provider.defaultModelId??a[0];if(!i)throw Error(`Provider "${e.collection.provider.id}" must define a default model.`);if(!a.includes(i))throw Error(`Default model "${i}" is not included in configured models for "${e.collection.provider.id}".`);let n=new Set([...t?.models??[],...a]),o={...t?.defaults??{},...Bn(e.defaults)};this.providerConfigs.set(e.collection.provider.id,{id:e.collection.provider.id,models:n,defaultModel:i,defaults:o})}registerBuiltinProvider(e){let a=e.exposeModels??Object.keys(e.models);Fn(e.id,a);let t=e.defaultModel??a[0];if(!t)throw Error(`Provider "${e.id}" must define a default model.`);if(!a.includes(t))throw Error(`Default model "${t}" is not included in configured models for "${e.id}".`);si({provider:{id:e.id,name:e.name??e.id,description:e.description,protocol:e.protocol,baseUrl:e.baseUrl,defaultModelId:t,client:e.client??"openai-compatible",capabilities:e.capabilities,env:e.env},models:e.models});let i=this.providerConfigs.get(e.id);this.providerConfigs.set(e.id,{id:e.id,models:new Set([...i?.models??[],...a]),defaultModel:t,defaults:{...i?.defaults??{},routingProviderId:e.builtinProviderId,...Bn(e.defaults)}})}registerModel(e){Ba(e.providerId,e.modelId,e.info);let a=this.providerConfigs.get(e.providerId);if(!a){this.providerConfigs.set(e.providerId,{id:e.providerId,models:new Set([e.modelId]),defaultModel:e.modelId,defaults:{}});return}a.models.add(e.modelId)}getProviders(){return Array.from(this.providerConfigs.values()).map((e)=>({id:e.id,models:Array.from(e.models),defaultModel:e.defaultModel}))}getBuiltInProviderIds(){return[...Fa]}async getBuiltInProviders(){return(await Promise.all(Fa.map((a)=>N0(a)))).filter((a)=>a!==void 0).map((a)=>{let t=Object.keys(a.models);return{id:a.provider.id,name:a.provider.name,description:a.provider.description,protocol:a.provider.protocol,baseUrl:a.provider.baseUrl,capabilities:a.provider.capabilities,env:a.provider.env,models:t,defaultModel:a.provider.defaultModelId,modelCount:t.length}})}getModels(e){return Array.from(this.requireConfiguredProvider(e).models)}isProviderConfigured(e){return this.providerConfigs.has(e)}isModelConfigured(e,a){return this.providerConfigs.get(e)?.models.has(a)??!1}applyConfig(e){for(let a of e.providers){if(Fn(a.id,a.models),a.defaultModel&&!a.models.includes(a.defaultModel))throw Error(`Default model "${a.defaultModel}" is not included in configured models for "${a.id}".`);let t=a.defaultModel??a.models[0];if(!t)throw Error(`Provider "${a.id}" must define a default model.`);let i=ws(a.apiKey,a.apiKeyEnv);this.providerConfigs.set(a.id,{id:a.id,models:new Set(a.models),defaultModel:t,defaults:{apiKey:i,routingProviderId:a.builtinProviderId,baseUrl:a.baseUrl,headers:a.headers,timeoutMs:a.timeoutMs,capabilities:a.capabilities,...Bn(a.settings)}})}for(let a of e.models??[])this.registerModel(a);for(let a of e.customProviders??[])this.registerProvider(a);for(let a of this.providerConfigs.values()){let t=pi(a.id),i=typeof a.defaults.routingProviderId==="string"?pi(a.defaults.routingProviderId):!1;if(!t&&!i)throw Error(`Provider "${a.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}requireConfiguredProvider(e){let a=this.providerConfigs.get(e);if(!a)throw Error(`Provider "${e}" is not configured in this SDK instance.`);return a}}function Pi(e){return new Li(e)}function bs(e){return e}export{bs as defineLlmsConfig,Pi as createLlmsSdk,Pi as createLlmsRuntime};
|
package/dist/providers.js
CHANGED
|
@@ -11,5 +11,5 @@ ${t}
|
|
|
11
11
|
`)}function et(e,t=!1){let a=e.reduce((o,c,r)=>{if(c.role==="user")o.push(r);return o},[]),n=t?new Set(a.slice(-2)):new Set,i=[];for(let[o,c]of e.entries()){let r=Bp(c,n.has(o));if(r)i.push(r)}return i}function Bp(e,t){let{role:a,content:n}=e;if(typeof n==="string"){let o={type:"text",text:n};if(t)o.cache_control={type:"ephemeral"};return{role:a,content:[o]}}let i=Fp(n,t);if(i.length===0)return null;return{role:a,content:i}}function Fp(e,t){let a=[];for(let n=0;n<e.length;n++){let i=e[n],o=n===e.length-1,c=Kp(i,t&&o);if(c)a.push(c)}return a}function Kp(e,t){switch(e.type){case"text":{let n={type:"text",text:e.text};if(t)n.cache_control={type:"ephemeral"};return n}case"file":{let a=e;return{type:"text",text:X(a.path,a.content)}}case"image":{let a=e;return{type:"image",source:{type:"base64",media_type:a.mediaType,data:a.data}}}case"tool_use":{let a=e;return{type:"tool_use",id:a.id,name:a.name,input:I(a.input)}}case"tool_result":{let a=e,n;if(typeof a.content==="string")n=a.content;else n=a.content.map((i)=>{if(i.type==="text")return{type:"text",text:i.text};else if(i.type==="file"){let o=i;return{type:"text",text:X(o.path,o.content)}}else return{type:"image",source:{type:"base64",media_type:i.mediaType,data:i.data}}});return{type:"tool_result",tool_use_id:a.tool_use_id,content:n,is_error:a.is_error}}case"thinking":{let a=e;return{type:"thinking",thinking:a.thinking,signature:a.signature}}case"redacted_thinking":return{type:"redacted_thinking",data:e.data};default:return null}}function xe(e){return e.map((t)=>({name:t.name,description:t.description,input_schema:t.inputSchema}))}var Rn={maxRetries:4,baseDelay:2000,maxDelay:15000};class Pe extends Error{retryAfterSeconds;constructor(e,t,a){super(e,a);this.retryAfterSeconds=t;this.name="RetriableError"}}function Mn(e){if(e instanceof Pe)return!0;if(e instanceof Error){let t=e.message.toLowerCase();if(t.includes("429")||t.includes("rate limit")||t.includes("too many requests"))return!0;if(t.includes("500")||t.includes("502")||t.includes("503")||t.includes("504"))return!0;if(t.includes("network")||t.includes("timeout")||t.includes("econnreset")||t.includes("econnrefused"))return!0}return!1}function _n(e,t={}){let{baseDelay:a=Rn.baseDelay,maxDelay:n=Rn.maxDelay}=t,i=2**e*a,o=Math.random()*0.25*i;return Math.min(i+o,n)}function Gn(e){return new Promise((t)=>setTimeout(t,e))}async function*K(e,t={}){let{maxRetries:a=Rn.maxRetries,onRetryAttempt:n}=t;for(let i=0;i<=a;i++)try{yield*e();return}catch(o){if(!(i!==a&&Mn(o)))throw o;let p;if(o instanceof Pe&&o.retryAfterSeconds)p=o.retryAfterSeconds*1000;else p=_n(i,t);if(n)n(i+1,a,p,o);await Gn(p)}throw Error("Retry logic exhausted without returning or throwing")}import{nanoid as Np}from"nanoid";var Vp={"HTTP-Referer":"https://cline.bot","X-Title":"Cline","X-IS-MULTIROOT":"false","X-CLIENT-TYPE":"cline-sdk"},Bc=new WeakMap,yp=0;function di(e){let t=Bc.get(e);if(!t)t=`abort_${++yp}`,Bc.set(e,t);return t}function An(e){return e instanceof Error?{name:e.name,message:e.message}:e}class B{config;abortController;abortSignalSequence=0;constructor(e){this.config=e}getModel(){let e=this.config.modelId;return{id:e,info:{...this.config.modelInfo??{},id:e}}}async getApiStreamUsage(){return}getAbortSignal(){let e=new AbortController;this.abortController=e,e.signal.addEventListener("abort",()=>{if(this.abortController===e)this.abortController=void 0},{once:!0});let t=this.config.abortSignal;if(t)if(t.aborted)this.logAbort("debug","Provider request inherited aborted signal",{controllerId:di(e),reason:An(t.reason)}),e.abort(t.reason);else{let a=++this.abortSignalSequence;t.addEventListener("abort",()=>{this.logAbort("warn","Provider request abort signal fired",{controllerId:di(e),signalId:a,reason:An(t.reason)}),e.abort(t.reason)},{once:!0}),this.logAbort("debug","Provider request attached abort signal",{controllerId:di(e),signalId:a})}return e.signal}abort(){this.abortController?.abort()}setAbortSignal(e){if(this.config.abortSignal=e,e?.aborted)this.logAbort("debug","Provider handler received pre-aborted signal",{controllerId:this.abortController?di(this.abortController):void 0,reason:An(e.reason)}),this.abortController?.abort(e.reason)}logAbort(e,t,a){this.config.logger?.[e]?.(t,{providerId:this.config.providerId,modelId:this.config.modelId,...a})}supportsPromptCache(e){let t=e??this.config.modelInfo??this.config.knownModels?.[this.config.modelId],a=t?.pricing;return t?.capabilities?.includes("prompt-cache")===!0||this.config.capabilities?.includes("prompt-cache")===!0||typeof a?.cacheRead==="number"||typeof a?.cacheWrite==="number"}calculateCost(e,t,a=0,n=0){let i=(this.config.modelInfo??this.config.knownModels?.[this.config.modelId])?.pricing;if(!i?.input||!i?.output)return;return e/1e6*i.input+t/1e6*i.output+(a>0?a/1e6*(i.cacheRead??0):0)+(n>0?n/1e6*(i.cacheWrite??i.input*1.25):0)}calculateCostFromInclusiveInput(e,t,a=0,n=0){return this.calculateCost(Math.max(0,e-a-n),t,a,n)}createResponseId(){return Np()}withResponseId(e,t){return{...e,id:t}}*withResponseIdForAll(e,t){for(let a of e)yield{...a,id:t}}getRequestHeaders(){return{...Vp,...this.config.headers??{}}}normalizeOpenAICompatibleBadRequest(e){let t=e;if((t?.status??t?.response?.status??t?.error?.code??(typeof t?.message==="string"&&t.message.includes("400")?400:void 0))!==400)return;let n=t?.error?.metadata?.raw,i=this.parseRawProviderError(n),o=i?.error?.message?.trim()||t?.error?.message?.trim()||t?.message?.trim()||"Provider returned error",c=t?.error?.metadata?.provider_name?.trim()||"Provider",r=i?.request_id?.trim(),p=this.rewriteProviderBadRequestDetail(o),u=r?` Request ID: ${r}.`:"";return Error(`${c} request was rejected (HTTP 400). ${p}${u}`,{cause:e instanceof Error?e:void 0})}parseRawProviderError(e){if(!e)return;try{return JSON.parse(e)}catch{return}}rewriteProviderBadRequestDetail(e){let t=e.match(/prompt is too long:\s*([\d,]+)\s*tokens?\s*>\s*([\d,]+)\s*maximum/i);if(t){let a=t[1],n=t[2];return`Prompt is too long: ${a} tokens exceeds the ${n} token limit.`}return e.endsWith(".")?e:`${e}.`}}var Yp=1024,Xp="CLINE_DEBUG_THINKING";function jp(){let e=process.env[Xp];if(!e)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}class Ut extends B{type="anthropic";client;ensureClient(){if(!this.client){let e=j(Q(this.config),this.config.apiKey);if(!e)throw Error(Z(Q(this.config)));this.client=new Up({apiKey:e,baseURL:this.config.baseUrl||void 0,defaultHeaders:this.getRequestHeaders()})}return this.client}getModel(){let e=this.config.modelId,a=(this.config.knownModels??{})[e]??{},n=this.config.modelInfo??a;return{id:e,info:{...n,id:e}}}getMessages(e,t){let a=this.supportsPromptCache(this.getModel().info);return et(t,a)}async*createMessage(e,t,a){yield*K(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let n=this.ensureClient(),i=this.getModel(),o=this.getAbortSignal(),c=this.createResponseId(),r=ge(i.info),p=this.config.thinkingBudgetTokens??(this.config.thinking?Yp:0),u=r&&p>0?p:0,d=a&&a.length>0,T=this.supportsPromptCache(i.info),D=r&&u>0,R=jp(),E={},F=(S)=>{E[S]=(E[S]??0)+1};if(R)console.error(`[thinking-debug][anthropic][request] model=${i.id} thinkingFlag=${this.config.thinking===!0} supportsModelThinking=${r} requestedBudget=${p} effectiveBudget=${u} reasoningOn=${D} promptCache=${T}`);let h=this.getMessages(e,t),f=d?xe(a):void 0,b={signal:o},q={model:i.id,thinking:D?{type:"enabled",budget_tokens:u}:void 0,max_tokens:i.info.maxTokens??this.config.maxOutputTokens??128000,temperature:D?void 0:0,system:[T?{text:e,type:"text",cache_control:{type:"ephemeral"}}:{text:e,type:"text"}],messages:h,stream:!0,tools:f,tool_choice:d&&!D?{type:"auto"}:void 0},A=await n.messages.create(q,b),L={id:"",name:"",arguments:""},v={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0},ee=null;for await(let S of A){if(R){if(F(`event:${S.type}`),S.type==="content_block_start")F(`content_block_start:${S.content_block?.type??"unknown"}`);else if(S.type==="content_block_delta")F(`content_block_delta:${S.delta?.type??"unknown"}`)}if(S.type==="message_delta")ee=S.delta?.stop_reason??ee;yield*this.withResponseIdForAll(this.processChunk(S,L,v,c),c)}if(R){let S=Object.entries(E).map(([Se,N])=>`${Se}=${N}`).sort().join(" ");console.error(`[thinking-debug][anthropic][stream] ${S}`)}yield{type:"done",success:!0,id:c,incompleteReason:ee==="max_tokens"?"max_tokens":void 0}}*processChunk(e,t,a,n){switch(e.type){case"message_start":{let i=e.message.usage;a.inputTokens=i.input_tokens||0,a.outputTokens=i.output_tokens||0,a.cacheWriteTokens=i.cache_creation_input_tokens||0,a.cacheReadTokens=i.cache_read_input_tokens||0,yield{type:"usage",inputTokens:a.inputTokens,outputTokens:a.outputTokens,cacheWriteTokens:a.cacheWriteTokens,cacheReadTokens:a.cacheReadTokens,totalCost:this.calculateCost(a.inputTokens,a.outputTokens,a.cacheReadTokens,a.cacheWriteTokens),id:n};break}case"message_delta":{a.outputTokens=e.usage.output_tokens||a.outputTokens,yield{type:"usage",inputTokens:a.inputTokens,outputTokens:a.outputTokens,cacheWriteTokens:a.cacheWriteTokens,cacheReadTokens:a.cacheReadTokens,totalCost:this.calculateCost(a.inputTokens,a.outputTokens,a.cacheReadTokens,a.cacheWriteTokens),id:n};break}case"content_block_start":{let i=e.content_block;switch(i.type){case"thinking":yield{type:"reasoning",reasoning:typeof i.thinking==="string"?i.thinking??"":"",signature:typeof i.signature==="string"?i.signature??void 0:void 0,id:n};break;case"redacted_thinking":yield{type:"reasoning",reasoning:"",redacted_data:typeof i.data==="string"?i.data??void 0:void 0,id:n};break;case"text":yield{type:"text",text:"",id:n};break;case"tool_use":t.id=i.id,t.name=i.name,t.arguments="";break}break}case"content_block_delta":{let i=e.delta;switch(i.type){case"thinking_delta":yield{type:"reasoning",reasoning:i.thinking,id:n};break;case"signature_delta":yield{type:"reasoning",reasoning:"",signature:typeof i.signature==="string"?i.signature??void 0:void 0,id:n};break;case"text_delta":yield{type:"text",text:i.text,id:n};break;case"input_json_delta":t.arguments+=i.partial_json;break}break}case"content_block_stop":{if(t.id){let i;try{i=JSON.parse(t.arguments||"{}")}catch{i=t.arguments}yield{type:"tool_calls",id:n,tool_call:{call_id:t.id,function:{name:t.name,arguments:i}}},t.id="",t.name="",t.arguments=""}break}}}}class gi extends B{type="fetch";getMessages(e,t){return{systemPrompt:e,messages:t}}getBaseUrl(){return this.config.baseUrl?.trim()||this.getDefaultBaseUrl()}getJsonHeaders(e){return{"Content-Type":"application/json",...this.getRequestHeaders(),...e??{}}}async fetchJson(e,t){let a=await fetch(`${this.getBaseUrl()}${e}`,{method:t.method??"POST",headers:this.getJsonHeaders(t.headers),body:t.body?JSON.stringify(t.body):void 0,signal:this.getAbortSignal()});if(!a.ok){let n=await a.text();throw Error(`HTTP ${a.status}: ${n}`)}return await a.json()}async*createMessage(e,t,a){yield*K(()=>this.createMessageWithFetch(e,t))}}var $p="https://api.asksage.ai/server",Jp="gpt-4o";class Yt extends gi{type="fetch";getDefaultBaseUrl(){return $p}getModel(){let e=this.config.modelId?.trim()||Jp,t=this.config.modelInfo??this.config.knownModels?.[e]??{id:e,capabilities:["tools"]};return{id:e,info:{...t,id:e}}}getJsonHeaders(e){let t=j(Q(this.config),this.config.apiKey);if(!t)throw Error("AskSage API key is required");return super.getJsonHeaders({"x-access-tokens":t,...e??{}})}async*createMessageWithFetch(e,t){let a=this.createResponseId(),{id:n}=this.getModel(),i={system_prompt:e,message:t.map((r)=>({user:r.role==="assistant"?"gpt":"me",message:this.serializeMessageContent(r.content)})),model:n,dataset:"none",usage:!0},o;try{o=await this.fetchJson("/query",{method:"POST",body:i})}catch(r){let p=r instanceof Error?r.message:String(r);throw Error(`AskSage request failed: ${p}`)}for(let r of o.tool_responses??[])yield{type:"text",text:`[Tool Response: ${JSON.stringify(r)}]
|
|
12
12
|
`,id:a};let c=o.message?.trim();if(!c)throw Error("AskSage request failed: no content in response");if(yield{type:"text",text:c,id:a},o.usage)yield{type:"usage",inputTokens:o.usage.model_tokens.prompt_tokens,outputTokens:o.usage.model_tokens.completion_tokens,cacheReadTokens:0,cacheWriteTokens:0,totalCost:o.usage.asksage_tokens,id:a};yield{type:"done",success:!0,id:a}}serializeMessageContent(e){if(typeof e==="string")return e;return e.map((t)=>("text"in t)?t.text:"").join("").trim()}}var xi,hi;async function Hp(){if(xi)return xi;let e="@ai-sdk/amazon-bedrock",t=await import(e);if(!t.createAmazonBedrock)throw Error(`Failed to load createAmazonBedrock from ${e}`);return xi=t.createAmazonBedrock,xi}async function Zp(){if(hi)return hi;let e="@aws-sdk/credential-providers",t=await import(e);if(!t.fromNodeProviderChain)throw Error(`Failed to load fromNodeProviderChain from ${e}`);return hi=t.fromNodeProviderChain,hi}async function Fc(e,t){let a=await Hp(),n=e.region??"us-east-1",i=e.aws?.authentication,o=Boolean(e.aws?.accessKey&&e.aws?.secretKey),c=i==="profile"||i==="iam"||!i&&!o&&!e.apiKey,r;if(c)r=(await Zp())({profile:e.aws?.profile});return a({region:n,accessKeyId:e.aws?.accessKey??void 0,secretAccessKey:e.aws?.secretKey??void 0,sessionToken:e.aws?.sessionToken??void 0,apiKey:e.apiKey??void 0,baseURL:e.aws?.endpoint??e.baseUrl??void 0,headers:t,credentialProvider:r})}var Kc=":1m",Wi,Ip=1024,zp="medium";async function e2(){if(Wi)return Wi;return Wi=await import("ai"),Wi}class wi extends B{type="bedrock";clientFactory;async ensureClientFactory(){if(!this.clientFactory)this.clientFactory=await Fc(this.config,this.getRequestHeaders());return this.clientFactory}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??{};return{id:e,info:{...t,id:e}}}getMessages(e,t){return a2(e,t)}async*createMessage(e,t,a){yield*K(()=>this.createMessageInternal(e,t,a),{maxRetries:4})}async*createMessageInternal(e,t,a){let n=await e2(),i=await this.ensureClientFactory(),o=this.createResponseId(),c=this.getAbortSignal(),r=this.getModel(),p=r.id,u={},d={};if(p.endsWith(Kc))p=p.slice(0,-Kc.length),d.anthropicBeta=["context-1m-2025-08-07"];let T=ge(r.info),D=this.config.thinkingBudgetTokens??(this.config.thinking?Ip:0),R=!1;if(T&&D>0&&p.includes("anthropic"))d.reasoningConfig={type:"enabled",budgetTokens:D},R=!0;else if(T&&p.includes("amazon.nova")){let h=this.config.reasoningEffort??(this.config.thinking?zp:void 0);if(h)d.reasoningConfig={type:"enabled",maxReasoningEffort:h},R=!0}if(Object.keys(d).length>0)u.bedrock=d;let E=n.streamText({model:i(p),messages:this.getMessages(e,t),tools:t2(a),maxTokens:r.info.maxTokens??this.config.maxOutputTokens??128000,temperature:R?void 0:r.info.temperature??0,providerOptions:Object.keys(u).length>0?u:void 0,abortSignal:c}),F=!1;if(E.fullStream)for await(let h of E.fullStream){let f=h.type;if(f==="text-delta"){let b=h.textDelta??h.delta;if(b)yield{type:"text",text:b,id:o};continue}if(f==="reasoning-delta"||f==="reasoning"){let b=h.textDelta??h.reasoning;if(b)yield{type:"reasoning",reasoning:b,id:o};continue}if(f==="tool-call"){let b=h.toolCallId??h.id,q=h.toolName??h.name,A=h.args??{};yield{type:"tool_calls",id:o,tool_call:{call_id:b,function:{name:q,arguments:A}}};continue}if(f==="error"){let b=h.error?.message??"Bedrock stream failed";throw Error(b)}if(f==="finish"){let b=h.usage??{},q=he(b.inputTokens),A=he(b.outputTokens),L=he(b.reasoningTokens),v=he(b.cachedInputTokens);yield{type:"usage",inputTokens:q,outputTokens:A,thoughtsTokenCount:L,cacheReadTokens:v,totalCost:this.calculateCostFromInclusiveInput(q,A,v),id:o},F=!0}}else if(E.textStream)for await(let h of E.textStream)yield{type:"text",text:h,id:o};if(!F&&E.usage){let h=await E.usage,f=he(h.inputTokens),b=he(h.outputTokens),q=he(h.reasoningTokens),A=he(h.cachedInputTokens);yield{type:"usage",inputTokens:f,outputTokens:b,thoughtsTokenCount:q,cacheReadTokens:A,totalCost:this.calculateCostFromInclusiveInput(f,b,A),id:o}}yield{type:"done",success:!0,id:o}}}function he(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function t2(e){if(!e||e.length===0)return;let t=xe(e);return Object.fromEntries(t.map((a)=>[a.name,{description:a.description,inputSchema:a.input_schema}]))}function a2(e,t){let a=[{role:"system",content:e}],n=new Map;for(let i of t){if(typeof i.content==="string"){a.push({role:i.role,content:i.content});continue}if(i.role==="assistant"){let c=[];for(let r of i.content){if(r.type==="text"){c.push({type:"text",text:r.text});continue}if(r.type==="tool_use")n.set(r.id,r.name),c.push({type:"tool-call",toolCallId:r.id,toolName:r.name,args:r.input})}if(c.length>0)a.push({role:"assistant",content:c});continue}let o=[];for(let c of i.content){if(c.type==="text"){o.push({type:"text",text:c.text});continue}if(c.type==="image"){o.push({type:"image",image:Buffer.from(c.data,"base64"),mediaType:c.mediaType});continue}if(c.type==="tool_result"){if(o.length>0)a.push({role:"user",content:o.splice(0,o.length)});a.push({role:"tool",content:[{type:"tool-result",toolCallId:c.tool_use_id,toolName:n.get(c.tool_use_id)??"tool",output:i2(c.content),isError:c.is_error??!1}]})}}if(o.length>0)a.push({role:"user",content:o})}return a}function i2(e){if(typeof e==="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function We(e,t,a){let n=a?.assistantToolCallArgKey??"args",i=[{role:"system",content:e}],o=new Map;for(let c of t){if(typeof c.content==="string"){i.push({role:c.role,content:c.content});continue}if(c.role==="assistant"){let p=[];for(let u of c.content){if(u.type==="text"){p.push({type:"text",text:u.text});continue}if(u.type==="file"){p.push({type:"text",text:X(u.path,u.content)});continue}if(u.type==="tool_use")o.set(u.id,u.name),p.push({type:"tool-call",toolCallId:u.id,toolName:u.name,[n]:I(u.input)})}if(p.length>0)i.push({role:"assistant",content:p});continue}let r=[];for(let p of c.content){if(p.type==="text"){r.push({type:"text",text:p.text});continue}if(p.type==="file"){r.push({type:"text",text:X(p.path,p.content)});continue}if(p.type==="image"){r.push({type:"image",image:Buffer.from(p.data,"base64"),mediaType:p.mediaType});continue}if(p.type==="tool_result"){if(r.length>0)i.push({role:"user",content:r.splice(0,r.length)});i.push({role:"tool",content:[{type:"tool-result",toolCallId:p.tool_use_id,toolName:o.get(p.tool_use_id)??"tool",output:ae(p.content),isError:p.is_error??!1}]})}}if(r.length>0)i.push({role:"user",content:r})}return i}var bi=null;async function tt(e){if(bi)return bi;return e?.beforeImport?.(),bi=await import("ai"),bi}function Y(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function n2(e){return{inputTokens:Y(e.inputTokens),outputTokens:Y(e.outputTokens),thoughtsTokenCount:Y(e.reasoningTokens??e.thoughtsTokenCount),cacheReadTokens:Y(e.cachedInputTokens)}}async function*at(e,t){let a=t.resolveUsageMetrics??n2,n=new Set(t.reasoningTypes??["reasoning-delta"]),i=t.toolCallArgsOrder??["args","input"],o=t.responseId,c=!1,r=!1;if(e.fullStream)for await(let p of e.fullStream){let u=p.type;if(u==="text-delta"){let d=p.textDelta??p.text??p.delta;if(d)yield{type:"text",text:d,id:o},r=!0;continue}if(u&&n.has(u)){let d=p.textDelta??p.reasoning??p.text;if(d)yield{type:"reasoning",reasoning:d,id:o};continue}if(u==="tool-call"&&t.enableToolCalls){let d=p.toolCallId??p.id,T=p.toolName??p.name,D=i.map((R)=>p[R]).find((R)=>R!==void 0)??{};yield{type:"tool_calls",id:o,tool_call:{call_id:d,function:{id:t.toolCallFunctionIncludeId?d:void 0,name:T,arguments:D}}};continue}if(u==="error"){let d=p.error?.message??t.errorMessage;throw Error(d)}if(u==="finish"){let d=p.totalUsage??p.usage??{},T=a(d,p);yield{type:"usage",inputTokens:T.inputTokens,outputTokens:T.outputTokens,thoughtsTokenCount:T.thoughtsTokenCount,cacheReadTokens:T.cacheReadTokens,cacheWriteTokens:T.cacheWriteTokens,totalCost:t.calculateCost(T.inputTokens,T.outputTokens,T.cacheReadTokens,T.cacheWriteTokens),id:o},c=!0}}else if(e.textStream)for await(let p of e.textStream)yield{type:"text",text:p,id:o},r=!0;if(!r&&t.enableTextFallback&&e.text){let p=await e.text;if(typeof p==="string"&&p.length>0)yield{type:"text",text:p,id:o}}if(!c&&e.usage){let p=await e.usage,u=a(p);yield{type:"usage",inputTokens:u.inputTokens,outputTokens:u.outputTokens,thoughtsTokenCount:u.thoughtsTokenCount,cacheReadTokens:u.cacheReadTokens,cacheWriteTokens:u.cacheWriteTokens,totalCost:t.calculateCost(u.inputTokens,u.outputTokens,u.cacheReadTokens,u.cacheWriteTokens),id:o}}yield{type:"done",success:!0,id:o}}var Nc=new Map;function fn(e,t){let a=e.modelId?.trim(),n=a&&a.length>0?a:t??"",o=(e.knownModels??{})[n]??{},c=e.modelInfo??o;return{id:n,info:{...c,id:n}}}async function o2(e){let t=Nc.get(e);if(t)return t;let a=await import(e);return Nc.set(e,a),a}class we extends B{type="ai-sdk-community";provider;providerPromise;getProviderCreateOptions(){return}async beforeLoadProviderModule(){}getProviderModelSettings(){return}getLoadAiSdkOptions(){return}getStreamErrorMessage(){return"AI SDK stream failed"}getEmitStreamOptions(){return{}}getAssistantToolCallArgKey(){return"args"}normalizeModelId(e){return e}async ensureProvider(){if(this.provider)return this.provider;if(!this.providerPromise)this.providerPromise=(async()=>{let e=this.getProviderDefinition();await this.beforeLoadProviderModule();let t=await o2(e.moduleName),a=t[e.createExportName],n=t[e.providerExportName];if(a){let i=a(this.getProviderCreateOptions());return this.provider=i,i}if(n)return this.provider=n,n;throw Error(`${e.moduleName} did not export \`${e.providerExportName}\` or \`${e.createExportName}\`.`)})();try{return await this.providerPromise}catch(e){this.providerPromise=void 0;let t=this.getProviderDefinition().moduleName;if(e instanceof Error&&e.message.includes(t))throw Error(this.getProviderDefinition().missingDependencyError,{cause:e});throw e}}getModel(){return fn(this.config,this.getDefaultModelId())}getMessages(e,t){return We(e,t,{assistantToolCallArgKey:this.getAssistantToolCallArgKey()})}async*createMessage(e,t,a){yield*K(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let n=await tt(this.getLoadAiSdkOptions()),i=await this.ensureProvider(),{id:o,info:c}=this.getModel(),r=this.createResponseId(),p=n.streamText({model:i(this.normalizeModelId(o),this.getProviderModelSettings()),messages:this.getMessages(e,t),maxTokens:c.maxTokens??void 0,temperature:c.temperature??void 0,abortSignal:this.getAbortSignal()});yield*at(p,{responseId:r,errorMessage:this.getStreamErrorMessage(),calculateCost:(u,d,T,D)=>this.calculateCostFromInclusiveInput(u,d,T,D),...this.getEmitStreamOptions()})}}var Vc=!1;async function c2(){if(Vc)return;Vc=!0;try{let e=await import("zod"),a=(e.z??e).object;if(typeof a!=="function")return;let n=a({}).refine?.(()=>!0);if(!n||typeof n.passthrough==="function")return;let i=Object.getPrototypeOf(n);if(!i||typeof i.passthrough==="function")return;Object.defineProperty(i,"passthrough",{value(){return this},configurable:!0,enumerable:!1,writable:!0})}catch{}}function r2(e){return e.startsWith("sk-")}function p2(){let e=process.env.AI_SDK_LOG_WARNINGS?.trim().toLowerCase();return e==="0"||e==="false"||e==="off"}function s2(e){if(e.includes("/"))return e;return`openai/${e}`}class Xt extends we{getProviderDefinition(){return{moduleName:"ai-sdk-provider-codex-cli",createExportName:"createCodexCli",providerExportName:"codexCli",missingDependencyError:"Codex provider requires `ai-sdk-provider-codex-cli` and the Codex CLI at runtime. Install dependencies and run `codex` to authenticate."}}getDefaultModelId(){return"gpt-5.3-codex"}async beforeLoadProviderModule(){await c2()}getProviderCreateOptions(){let t={...(this.config.codex??{}).defaultSettings??{}};if(this.config.reasoningEffort&&t.reasoningEffort===void 0)t.reasoningEffort=this.config.reasoningEffort;else if(this.config.thinking&&t.reasoningEffort===void 0)t.reasoningEffort="medium";let a=this.config.apiKey?.trim(),n=typeof this.config.accessToken==="string"&&this.config.accessToken.trim().length>0;if(a&&!n&&r2(a))t.env={...t.env??{},OPENAI_API_KEY:a};return{defaultSettings:Object.keys(t).length>0?t:void 0}}getProviderModelSettings(){return this.config.codex?.modelSettings}getStreamErrorMessage(){return"Codex stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],toolCallArgsOrder:["args","input"]}}}class jt extends we{getProviderDefinition(){return{moduleName:"ai-sdk-provider-claude-code",createExportName:"createClaudeCode",providerExportName:"claudeCode",missingDependencyError:"Claude Code provider requires `ai-sdk-provider-claude-code` at runtime. Install dependencies and run `claude login`."}}getDefaultModelId(){return"sonnet"}getProviderCreateOptions(){return this.config.claudeCode??{}}getLoadAiSdkOptions(){return{beforeImport:()=>{if(p2())globalThis.AI_SDK_LOG_WARNINGS=!1}}}getStreamErrorMessage(){return"Claude Code stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta"]}}}class $t extends we{getProviderDefinition(){return{moduleName:"ai-sdk-provider-opencode-sdk",createExportName:"createOpencode",providerExportName:"opencode",missingDependencyError:"OpenCode provider requires `ai-sdk-provider-opencode-sdk` and OpenCode at runtime."}}getDefaultModelId(){return"openai/gpt-5.3-codex"}getProviderCreateOptions(){let e=this.config.opencode??{},t={...e.defaultSettings??{}};if(t.agent===void 0)t.agent="general";return{hostname:e.hostname,port:e.port,autoStartServer:e.autoStartServer,serverTimeout:e.serverTimeout,defaultSettings:Object.keys(t).length>0?t:void 0}}getProviderModelSettings(){return this.config.opencode?.modelSettings}normalizeModelId(e){return s2(e)}getStreamErrorMessage(){return"OpenCode stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],enableTextFallback:!0}}}class Jt extends we{getProviderDefinition(){return{moduleName:"@jerome-benoit/sap-ai-provider",createExportName:"createSAPAIProvider",providerExportName:"sapai",missingDependencyError:"SAP AI Core provider requires `@jerome-benoit/sap-ai-provider` at runtime."}}getDefaultModelId(){return"anthropic--claude-3.5-sonnet"}getProviderCreateOptions(){let e=this.config.sap??{},t=e.api??(e.useOrchestrationMode===void 0?void 0:e.useOrchestrationMode?"orchestration":"foundation-models"),a={resourceGroup:e.resourceGroup,deploymentId:e.deploymentId,api:t,defaultSettings:e.defaultSettings},n=Object.fromEntries(Object.entries(a).filter(([,i])=>i!==void 0));return Object.keys(n).length>0?n:void 0}getStreamErrorMessage(){return"SAP AI Core stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],enableToolCalls:!0,toolCallArgsOrder:["args","input"]}}}class Ht extends we{getProviderDefinition(){return{moduleName:"@ai-sdk/mistral",createExportName:"createMistral",providerExportName:"mistral",missingDependencyError:"Mistral provider requires `@ai-sdk/mistral` at runtime."}}getDefaultModelId(){return"mistral-medium-latest"}getStreamErrorMessage(){return"Mistral stream failed"}}class Zt extends we{getProviderDefinition(){return{moduleName:"dify-ai-provider",createExportName:"createDifyProvider",providerExportName:"difyProvider",missingDependencyError:"Dify provider requires `dify-ai-provider` at runtime."}}getDefaultModelId(){return"default"}getProviderCreateOptions(){if(!this.config.baseUrl)return;return{baseURL:this.config.baseUrl}}getProviderModelSettings(){let e={responseMode:"blocking"};if(this.config.apiKey)e.apiKey=this.config.apiKey;return e}getStreamErrorMessage(){return"Dify stream failed"}}import{FunctionCallingConfigMode as g2,GoogleGenAI as yc,ThinkingLevel as Ri}from"@google/genai";function ki(e){let t=new Map;return e.map((a)=>u2(a,t)).filter((a)=>a!==null)}function u2(e,t){let{role:a,content:n}=e,i=a==="assistant"?"model":"user";if(typeof n==="string")return{role:i,parts:[{text:n}]};let o=m2(n,t);if(o.length===0)return null;return{role:i,parts:o}}function m2(e,t){let a=[];for(let n of e){if(n.type==="tool_use")t.set(n.id,n.name);let i=l2(n,t);if(i)a.push(i)}return a}function l2(e,t){switch(e.type){case"text":{let a=e,n={text:a.text};if(a.signature)n.thoughtSignature=a.signature;return n}case"file":{let a=e;return{text:X(a.path,a.content)}}case"image":{let a=e;return{inlineData:{mimeType:a.mediaType,data:a.data}}}case"tool_use":{let a=e,n={functionCall:{id:a.id,name:a.name,args:I(a.input)}};if(a.signature)n.thoughtSignature=a.signature;return n}case"tool_result":{let a=e,n;if(typeof a.content==="string")n={result:pi(a.content)};else n={result:ae(a.content)};if(a.is_error)n.error=!0;return{functionResponse:{id:a.tool_use_id,name:t.get(a.tool_use_id)??a.tool_use_id,response:n}}}case"thinking":{let a=e,n={text:a.thinking,thought:!0};if(a.signature)n.thoughtSignature=a.signature;return n}default:return null}}var d2=new Set(["type","title","description","enum","properties","required","additionalProperties","format","minimum","maximum","items","prefixItems","minItems","maxItems"]);function Di(e){if(!e||typeof e!=="object"||Array.isArray(e))return e;let t=e,a={};for(let[n,i]of Object.entries(t)){if(!d2.has(n))continue;if(n==="properties"&&i&&typeof i==="object"){let o={};for(let[c,r]of Object.entries(i))o[c]=Di(r);a[n]=o}else if(n==="items"||n==="additionalProperties")a[n]=typeof i==="object"&&i!==null?Di(i):i;else if(n==="prefixItems"&&Array.isArray(i))a[n]=i.map((o)=>Di(o));else a[n]=i}if(t.exclusiveMinimum!==void 0&&a.minimum===void 0)a.minimum=t.exclusiveMinimum;if(t.exclusiveMaximum!==void 0&&a.maximum===void 0)a.maximum=t.exclusiveMaximum;return a}function Ti(e){return e.map((t)=>({name:t.name,description:t.description,parameters:Di(t.inputSchema)}))}var x2=1024,h2=128000,W2=8192;function Uc(e){return e.toLowerCase().includes("gemini-3")}function w2(e){let t=e.toLowerCase();return Uc(e)&&t.includes("flash")&&!t.includes("lite")}class Le extends B{type="gemini";client;ensureClient(){if(!this.client)if(this.config.gcp?.projectId)this.client=new yc({vertexai:!0,project:this.config.gcp.projectId,location:this.config.region??"us-central1",httpOptions:{headers:this.getRequestHeaders()}});else{if(!this.config.apiKey)throw Error("Gemini API key is required when not using Vertex AI");this.client=new yc({apiKey:this.config.apiKey,httpOptions:{headers:this.getRequestHeaders()}})}return this.client}getModel(){let e=this.config.modelId,a=(this.config.knownModels??{})[e]??{},n=this.config.modelInfo??a;return{id:e,info:{...n,id:e}}}getMessages(e,t){return ki(t)}async*createMessage(e,t,a){yield*K(()=>this.createMessageInternal(e,t,a),{maxRetries:4,baseDelay:2000,maxDelay:15000})}async*createMessageInternal(e,t,a){let n=this.ensureClient(),{id:i,info:o}=this.getModel(),c=this.getAbortSignal(),r=this.createResponseId(),p=this.getMessages(e,t),u=ge(o),d=this.config.thinking===!0||typeof this.config.thinkingBudgetTokens==="number"||typeof this.config.reasoningEffort==="string",T=0,D,R=o.thinkingConfig?.thinkingLevel!=null||Uc(i);if(u&&d){let f=this.config.thinkingBudgetTokens??(d?x2:0);if(T=Math.min(Math.max(0,f),o.thinkingConfig?.maxBudget??24576),R){let b=this.config.reasoningEffort;if(b==="high"||b==="xhigh")D=Ri.HIGH;else if(b==="medium")D=Ri.MEDIUM;else if(b==="low")D=Ri.LOW;else if(this.config.thinking)D=Ri.MEDIUM}}let E=w2(i)?W2:h2,F=o.maxTokens??this.config.maxOutputTokens??E,h={httpOptions:this.config.baseUrl?{baseUrl:this.config.baseUrl,headers:this.getRequestHeaders()}:void 0,abortSignal:c,systemInstruction:e,temperature:o.temperature??1,maxOutputTokens:F};if(u&&d&&(R||T>0))h.thinkingConfig={thinkingBudget:R?void 0:T,thinkingLevel:D,includeThoughts:!0};if(a&&a.length>0){let f=Ti(a);h.tools=[{functionDeclarations:f}],h.toolConfig={functionCallingConfig:{mode:g2.AUTO}}}try{let f=await n.models.generateContentStream({model:i,contents:p,config:h}),b=0,q=0,A=0,L=0,v=0;for await(let S of f){let Se=S?.candidates?.[0]?.content?.parts??[];for(let N of Se){if(N.thought&&N.text)yield{type:"reasoning",reasoning:N.text||"",signature:N.thoughtSignature,id:r};else if(N.text)yield{type:"text",text:N.text,id:r,signature:N.thoughtSignature};if(N.functionCall){let ne=N.functionCall,ea=ne.id??`${r}_tool_${v++}`;if(ne.name)yield{type:"tool_calls",tool_call:{call_id:ea,function:{id:ea,name:ne.name,arguments:ne.args??{}}},id:r,signature:N.thoughtSignature}}}if(S.usageMetadata)b=S.usageMetadata.promptTokenCount??b,q=S.usageMetadata.candidatesTokenCount??q,L=S.usageMetadata.thoughtsTokenCount??L,A=S.usageMetadata.cachedContentTokenCount??A}let ee=this.calculateGeminiCost(b,q,L,A);yield{type:"usage",inputTokens:b,outputTokens:q,thoughtsTokenCount:L,cacheReadTokens:A,cacheWriteTokens:0,totalCost:ee,id:r},yield{type:"done",success:!0,id:r}}catch(f){if(f instanceof Error&&f.message.includes("429"))throw new Pe(f.message,void 0,{cause:f});throw f}}calculateGeminiCost(e,t,a,n){return this.calculateCost(e,t+a,n)}}import T2 from"openai";function Mi(e,t=!1){let a=t?e.map((n)=>n.role).lastIndexOf("user"):-1;return e.flatMap((n,i)=>b2(n,t&&i===a))}function b2(e,t){let{role:a,content:n}=e;if(typeof n==="string"){if(a!=="user"||!t)return[{role:a,content:n}];return[{role:a,content:[{type:"text",text:n,cache_control:{type:"ephemeral"}}]}]}if(a==="assistant")return[D2(n)];else return k2(n,t)}function D2(e){let t=[],a=[],n=[],i=[];for(let c of e)switch(c.type){case"text":t.push(c.text);break;case"tool_use":{let r=c;a.push({id:r.id,type:"function",function:{name:r.name,arguments:JSON.stringify(I(r.input))}});break}case"thinking":{let r=c;if(r.thinking)n.push(r.thinking);let p=Array.isArray(r.details)?r.details:Array.isArray(r.summary)?r.summary:[];if(p.length>0)i.push(...p);break}}let o={role:"assistant",content:t.length>0?t.join(`
|
|
13
13
|
`):null};if(a.length>0)o.tool_calls=a;if(n.length>0){let c=n.join(`
|
|
14
|
-
`);o.reasoning=c,o.reasoning_content=c}if(i.length>0)o.reasoning_details=i;return o}function k2(e,t){let a=[],n=e.filter((c)=>c.type==="tool_result");for(let c of n)a.push({role:"tool",tool_call_id:c.tool_use_id,content:ae(c.content)});let i=e.filter((c)=>c.type!=="tool_result");if(i.length===0)return a;let o=[];for(let c of i)switch(c.type){case"text":o.push({type:"text",text:c.text});break;case"file":{let r=c;o.push({type:"text",text:X(r.path,r.content)});break}case"image":{let r=c;o.push({type:"image_url",image_url:{url:`data:${r.mediaType};base64,${r.data}`}});break}}if(o.length===0)return a;if(t){for(let c=o.length-1;c>=0;c--)if(o[c].type==="text"){o[c]={...o[c],cache_control:{type:"ephemeral"}};break}}return a.push({role:"user",content:o.length===1&&o[0].type==="text"&&!t?o[0].text:o}),a}function En(e,t){let a=t?.strict??!0;return e.map((n)=>({type:"function",function:{name:n.name,description:n.description,parameters:n.inputSchema,strict:a}}))}function It(e,t){if(!e||e.length===0)return{};return{tools:En(e,t),tool_choice:"auto"}}class it{toolCalls=new Map;processToolCallDeltas(e,t){let a=[];for(let n of e){let{index:i,id:o}=n,c=n.function,r=this.toolCalls.get(i);if(!r)r={id:"",name:"",arguments:""},this.toolCalls.set(i,r);if(o)r.id=o;if(c?.name)r.name=c.name;let p=c?.arguments,u=this.normalizeArgumentsDelta(r.arguments,p);if(u)r.arguments+=u;if(r.id&&r.name)a.push({type:"tool_calls",id:t,tool_call:{call_id:r.id,function:{id:r.id,name:r.name,arguments:u}}})}return a}getToolCalls(){return Array.from(this.toolCalls.values()).map((e)=>({call_id:e.id,function:{id:e.id,name:e.name,arguments:e.arguments}}))}reset(){this.toolCalls.clear()}normalizeArgumentsDelta(e,t){if(t==null)return"";let a=typeof t==="string"?t:JSON.stringify(t);if(!a)return"";if(e&&a.length>=e.length&&a.startsWith(e))return a.slice(e.length);return a}}var R2="medium";function M2(e){let t={};if(typeof e.thinking==="boolean")t.enabled=e.thinking;if(e.effort)t.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)t.max_tokens=e.budgetTokens;return Object.keys(t).length>0?t:void 0}class nt extends B{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let t=j(Q(this.config),this.config.apiKey);if(!t)throw Error(Z(Q(this.config)));let a=this.getRequestHeaders();this.client=new T2({apiKey:t,baseURL:e,defaultHeaders:a})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...t,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,t){let a=this.getModel(),n=this.supportsPromptCache(a.info);return[n?{role:"system",content:[{type:"text",text:e,cache_control:{type:"ephemeral"}}]}:{role:"system",content:e},...Mi(t,n)]}async*createMessage(e,t,a){yield*K(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let n=this.ensureClient(),{id:i,info:o}=this.getModel(),c=this.createResponseId(),r=Q(this.config),p=this.getMessages(e,t),u={model:i,messages:p,stream:!0,stream_options:{include_usage:!0},...It(a,{strict:r!=="openrouter"})};if(r==="openrouter"&&i.startsWith("anthropic/"))u.cache_control={type:"ephemeral"};let d=o.maxTokens??this.config.maxOutputTokens;if(d)u.max_completion_tokens=d;if(!(o.capabilities?.includes("reasoning")??!1))u.temperature=o.temperature??0;let D=o.capabilities?.includes("reasoning-effort")||o.capabilities?.includes("reasoning")||!1,R=this.config.reasoningEffort??(this.config.thinking?R2:void 0);if(r==="openrouter"){let L=M2({thinking:this.config.thinking,effort:R,budgetTokens:this.config.thinkingBudgetTokens});if(L)u.reasoning=L}else if(D&&R)u.reasoning_effort=R;let E=this.getRequestHeaders(),F=Object.keys(E).some((L)=>L.toLowerCase()==="authorization"),h=j(r,this.config.apiKey);if(!F&&h)E.Authorization=`Bearer ${h}`;let f=this.getAbortSignal(),b;try{b=await n.chat.completions.create(u,{signal:f,headers:E})}catch(L){throw this.normalizeOpenAICompatibleBadRequest(L)??L}let q=new it,A=null;for await(let L of b){let v=L.choices?.[0];if(v?.finish_reason)A=v.finish_reason;yield*this.withResponseIdForAll(this.processChunk(L,q,o,c),c)}yield{type:"done",success:!0,id:c,incompleteReason:A==="length"?"max_tokens":void 0}}*processChunk(e,t,a,n){let i=e.choices?.[0]?.delta,o=i&&{...i,reasoning:typeof i.reasoning==="string"?i.reasoning??"":void 0,reasoning_content:i.reasoning_content,reasoning_details:i.reasoning_details};if(o?.content)yield{type:"text",text:o.content,id:n};if(o?.reasoning_content||o?.reasoning||Array.isArray(o?.reasoning_details)&&o.reasoning_details.length>0)yield{type:"reasoning",reasoning:o.reasoning_content??o.reasoning??"",details:o.reasoning_details,id:n};if(o?.tool_calls)yield*t.processToolCallDeltas(o.tool_calls.map((c)=>({index:c.index,id:c.id,function:c.function})),n);if(e.usage){let c=e.usage.prompt_tokens??0,r=e.usage.completion_tokens??0,p=e.usage,u=p.prompt_tokens_details?.cached_tokens??p.cache_read_input_tokens??0,d=p.prompt_tokens_details?.cache_write_tokens??p.cache_creation_input_tokens??0;yield{type:"usage",inputTokens:c,outputTokens:r,cacheReadTokens:u,cacheWriteTokens:d,thoughtsTokenCount:p.completion_tokens_details?.reasoning_tokens,totalCost:this.calculateCostFromInclusiveInput(c,r,u,d),id:n}}}}import{createOpenAICompatible as _2}from"@ai-sdk/openai-compatible";import
|
|
14
|
+
`);o.reasoning=c,o.reasoning_content=c}if(i.length>0)o.reasoning_details=i;return o}function k2(e,t){let a=[],n=e.filter((c)=>c.type==="tool_result");for(let c of n)a.push({role:"tool",tool_call_id:c.tool_use_id,content:ae(c.content)});let i=e.filter((c)=>c.type!=="tool_result");if(i.length===0)return a;let o=[];for(let c of i)switch(c.type){case"text":o.push({type:"text",text:c.text});break;case"file":{let r=c;o.push({type:"text",text:X(r.path,r.content)});break}case"image":{let r=c;o.push({type:"image_url",image_url:{url:`data:${r.mediaType};base64,${r.data}`}});break}}if(o.length===0)return a;if(t){for(let c=o.length-1;c>=0;c--)if(o[c].type==="text"){o[c]={...o[c],cache_control:{type:"ephemeral"}};break}}return a.push({role:"user",content:o.length===1&&o[0].type==="text"&&!t?o[0].text:o}),a}function En(e,t){let a=t?.strict??!0;return e.map((n)=>({type:"function",function:{name:n.name,description:n.description,parameters:n.inputSchema,strict:a}}))}function It(e,t){if(!e||e.length===0)return{};return{tools:En(e,t),tool_choice:"auto"}}class it{toolCalls=new Map;processToolCallDeltas(e,t){let a=[];for(let n of e){let{index:i,id:o}=n,c=n.function,r=this.toolCalls.get(i);if(!r)r={id:"",name:"",arguments:""},this.toolCalls.set(i,r);if(o)r.id=o;if(c?.name)r.name=c.name;let p=c?.arguments,u=this.normalizeArgumentsDelta(r.arguments,p);if(u)r.arguments+=u;if(r.id&&r.name)a.push({type:"tool_calls",id:t,tool_call:{call_id:r.id,function:{id:r.id,name:r.name,arguments:u}}})}return a}getToolCalls(){return Array.from(this.toolCalls.values()).map((e)=>({call_id:e.id,function:{id:e.id,name:e.name,arguments:e.arguments}}))}reset(){this.toolCalls.clear()}normalizeArgumentsDelta(e,t){if(t==null)return"";let a=typeof t==="string"?t:JSON.stringify(t);if(!a)return"";if(e&&a.length>=e.length&&a.startsWith(e))return a.slice(e.length);return a}}var R2="medium";function M2(e){let t={};if(typeof e.thinking==="boolean")t.enabled=e.thinking;if(e.effort)t.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)t.max_tokens=e.budgetTokens;return Object.keys(t).length>0?t:void 0}class nt extends B{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let t=j(Q(this.config),this.config.apiKey);if(!t)throw Error(Z(Q(this.config)));let a=this.getRequestHeaders();this.client=new T2({apiKey:t,baseURL:e,defaultHeaders:a})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...t,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,t){let a=this.getModel(),n=this.supportsPromptCache(a.info);return[n?{role:"system",content:[{type:"text",text:e,cache_control:{type:"ephemeral"}}]}:{role:"system",content:e},...Mi(t,n)]}async*createMessage(e,t,a){yield*K(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let n=this.ensureClient(),{id:i,info:o}=this.getModel(),c=this.createResponseId(),r=Q(this.config),p=this.getMessages(e,t),u={model:i,messages:p,stream:!0,stream_options:{include_usage:!0},...It(a,{strict:r!=="openrouter"})};if(r==="openrouter"&&i.startsWith("anthropic/"))u.cache_control={type:"ephemeral"};let d=o.maxTokens??this.config.maxOutputTokens;if(d)u.max_completion_tokens=d;if(!(o.capabilities?.includes("reasoning")??!1))u.temperature=o.temperature??0;let D=o.capabilities?.includes("reasoning-effort")||o.capabilities?.includes("reasoning")||!1,R=this.config.reasoningEffort??(this.config.thinking?R2:void 0);if(r==="openrouter"){let L=M2({thinking:this.config.thinking,effort:R,budgetTokens:this.config.thinkingBudgetTokens});if(L)u.reasoning=L}else if(D&&R)u.reasoning_effort=R;let E=this.getRequestHeaders(),F=Object.keys(E).some((L)=>L.toLowerCase()==="authorization"),h=j(r,this.config.apiKey);if(!F&&h)E.Authorization=`Bearer ${h}`;let f=this.getAbortSignal(),b;try{b=await n.chat.completions.create(u,{signal:f,headers:E})}catch(L){throw this.normalizeOpenAICompatibleBadRequest(L)??L}let q=new it,A=null;for await(let L of b){let v=L.choices?.[0];if(v?.finish_reason)A=v.finish_reason;yield*this.withResponseIdForAll(this.processChunk(L,q,o,c),c)}yield{type:"done",success:!0,id:c,incompleteReason:A==="length"?"max_tokens":void 0}}*processChunk(e,t,a,n){let i=e.choices?.[0]?.delta,o=i&&{...i,reasoning:typeof i.reasoning==="string"?i.reasoning??"":void 0,reasoning_content:i.reasoning_content,reasoning_details:i.reasoning_details};if(o?.content)yield{type:"text",text:o.content,id:n};if(o?.reasoning_content||o?.reasoning||Array.isArray(o?.reasoning_details)&&o.reasoning_details.length>0)yield{type:"reasoning",reasoning:o.reasoning_content??o.reasoning??"",details:o.reasoning_details,id:n};if(o?.tool_calls)yield*t.processToolCallDeltas(o.tool_calls.map((c)=>({index:c.index,id:c.id,function:c.function})),n);if(e.usage){let c=e.usage.prompt_tokens??0,r=e.usage.completion_tokens??0,p=e.usage,u=p.prompt_tokens_details?.cached_tokens??p.cache_read_input_tokens??0,d=p.prompt_tokens_details?.cache_write_tokens??p.cache_creation_input_tokens??0;yield{type:"usage",inputTokens:c,outputTokens:r,cacheReadTokens:u,cacheWriteTokens:d,thoughtsTokenCount:p.completion_tokens_details?.reasoning_tokens,totalCost:this.calculateCostFromInclusiveInput(c,r,u,d),id:n}}}}import{createOpenAICompatible as _2}from"@ai-sdk/openai-compatible";import G2 from"zod";var A2="medium";function f2(e){let t={};if(typeof e.thinking==="boolean")t.enabled=e.thinking;if(e.effort)t.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)t.max_tokens=e.budgetTokens;return Object.keys(t).length>0?t:void 0}function E2(e){return e.replace(/-([a-zA-Z0-9])/g,(t,a)=>a.toUpperCase())}function P2(e){if(!e||e.length===0)return;return Object.fromEntries(e.map((t)=>[t.name,{description:t.description,inputSchema:G2.fromJSONSchema(t.inputSchema)}]))}class ie extends B{type="openai-compatible";provider;ensureProvider(){if(this.provider)return this.provider;let e=Q(this.config),t=this.config.baseUrl;if(!t)throw Error("Base URL is required. Set baseUrl in config.");let a=j(e,this.config.apiKey);if(!a)throw Error(Z(e));return this.provider=_2({name:e,apiKey:a,baseURL:t,headers:this.getRequestHeaders(),includeUsage:!0}),this.provider}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...t,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,t){return We(e,t,{assistantToolCallArgKey:"args"})}async*createMessage(e,t,a){yield*K(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let n=await tt(),i=this.ensureProvider(),{id:o,info:c}=this.getModel(),r=this.createResponseId(),p=Q(this.config),u=c.capabilities?.includes("reasoning")??!1,d=c.capabilities?.includes("reasoning-effort")||c.capabilities?.includes("reasoning")||!1,T=this.config.reasoningEffort??(this.config.thinking?A2:void 0),D=E2(p),R={};if(p==="openrouter"){let h=f2({thinking:this.config.thinking,effort:T,budgetTokens:this.config.thinkingBudgetTokens});if(h)R.reasoning=h}else if(d&&T)R.reasoningEffort=T;let E=Object.keys(R).length>0?{[D]:R}:void 0,F=n.streamText({model:i(o),messages:this.getMessages(e,t),tools:P2(a),maxTokens:c.maxTokens??this.config.maxOutputTokens,temperature:u?void 0:c.temperature??0,providerOptions:E,abortSignal:this.getAbortSignal()});yield*at(F,{responseId:r,errorMessage:"OpenAI-compatible stream failed",calculateCost:(h,f,b,q)=>this.calculateCost(h,f,b,q),reasoningTypes:["reasoning-delta","reasoning"],enableToolCalls:!0,toolCallArgsOrder:["args","input"],toolCallFunctionIncludeId:!0,resolveUsageMetrics:(h)=>({inputTokens:Y(h.inputTokens),outputTokens:Y(h.outputTokens),thoughtsTokenCount:Y(h.reasoningTokens??h.thoughtsTokenCount),cacheReadTokens:Y(h.cachedInputTokens)})})}}import L2 from"openai";var v2="medium";function S2(e,t){if(!e?.length)return;return e.map((a)=>({type:"function",name:a.name,description:a.description,parameters:a.inputSchema}))}function O2(e){let t=[],a=(o,c)=>{let r=c.map((p)=>p.text).join(`
|
|
15
15
|
`);if(!r)return;t.push({type:"message",role:o,content:[{type:o==="user"?"input_text":"output_text",text:r}]})},n=(o)=>o.type==="text",i=(o)=>o.call_id?.trim()||o.id;for(let o of e){if(o.role!=="user"&&o.role!=="assistant")continue;if(!Array.isArray(o.content)){if(o.content)a(o.role,[{type:"text",text:o.content}]);continue}let c=[],r=()=>{if(c.length===0)return;a(o.role,c),c=[]};for(let p of o.content){if(n(p)){c.push(p);continue}if(o.role==="assistant"&&p.type==="tool_use"){r();let u=p;t.push({type:"function_call",call_id:i(u),name:u.name,arguments:JSON.stringify(I(u.input))});continue}if(o.role==="user"&&p.type==="tool_result")r(),t.push({type:"function_call_output",call_id:p.tool_use_id,output:ae(p.content)})}r()}return t}class ve extends B{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let t=j(Q(this.config),this.config.apiKey);if(!t)throw Error(Z(Q(this.config)));let a=this.getRequestHeaders(),n=Object.keys(a).some((i)=>i.toLowerCase()==="authorization");this.client=new L2({apiKey:t,baseURL:e,defaultHeaders:n?a:{...a,Authorization:`Bearer ${t}`}})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let t=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...t,id:e}}}getDefaultModelInfo(){let e=[].filter((t)=>t!=="prompt-cache");return{id:this.config.modelId,capabilities:e}}getMessages(e,t){return O2(t)}async*createMessage(e,t,a){yield*K(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let n=this.ensureClient(),{id:i,info:o}=this.getModel(),c=this.getAbortSignal(),r=this.createResponseId(),p=Q(this.config),u,d=new Map,T=this.getMessages(e,t),D=S2(a,{stripFormat:p==="openai-codex"});if(!D?.length)throw Error("OpenAI Responses API requires tools to be provided. Enable native tool calling in settings.");let R=o.capabilities?.includes("reasoning")??!1,E=this.config.reasoningEffort??(this.config.thinking?v2:void 0),F=R&&E?{effort:E,summary:"auto"}:void 0,h=this.getRequestHeaders(),f=Object.keys(h).some((A)=>A.toLowerCase()==="authorization"),b=j(p,this.config.apiKey);if(!f&&b)h.Authorization=`Bearer ${b}`;if(p==="openai-codex"&&typeof this.config.accountId==="string"&&this.config.accountId.trim().length>0){let A=this.config.accountId.trim();h["chatgpt-account-id"]=A,h["openai-account-id"]=A}let q;try{q=await n.responses.create({model:i,instructions:e,input:T,store:p==="openai-codex"?!1:void 0,stream:!0,tools:D,reasoning:F},{signal:c,headers:h})}catch(A){let L=this.normalizeOpenAICompatibleBadRequest(A);if(L)throw L;if(p==="openai-codex"){let v=A;if((v?.status??v?.response?.status??(typeof v?.message==="string"&&v.message.includes("400")?400:void 0))===400){let S=v?.error?.detail??v?.error?.message??(typeof v?.message==="string"?v.message:"");throw Error(`OpenAI Codex request was rejected (HTTP 400). ${S?`Detail: ${S}`:"Re-run 'clite auth openai-codex', verify model access, and ensure accountId is present in provider settings."}`,{cause:A})}}throw A}for await(let A of q){let L=this.getApiResponseId(A);if(L)u=L;yield*this.processResponseChunk(A,o,u??r,d)}}*processResponseChunk(e,t,a,n){switch(e.type){case"response.output_item.added":{let i=e.item;if(i.type==="function_call"&&i.id)n.set(i.id,{callId:i.call_id,name:i.name}),yield{type:"tool_calls",id:i.id||a,tool_call:{call_id:i.call_id,function:{id:i.id,name:i.name,arguments:i.arguments}}};if(i.type==="reasoning"&&i.encrypted_content&&i.id)yield{type:"reasoning",id:i.id||a,reasoning:"",redacted_data:i.encrypted_content};break}case"response.output_item.done":{let i=e.item;if(i.type==="function_call"){if(i.id)n.set(i.id,{callId:i.call_id,name:i.name});yield{type:"tool_calls",id:i.id||a,tool_call:{call_id:i.call_id,function:{id:i.id,name:i.name,arguments:i.arguments}}}}if(i.type==="reasoning")yield{type:"reasoning",id:i.id||a,details:i.summary,reasoning:""};break}case"response.reasoning_summary_part.added":yield{type:"reasoning",id:e.item_id||a,reasoning:e.part?.text||""};break;case"response.reasoning_summary_text.delta":yield{type:"reasoning",id:e.item_id||a,reasoning:e.delta||""};break;case"response.reasoning_summary_part.done":yield{type:"reasoning",id:e.item_id||a,details:e.part,reasoning:""};break;case"response.output_text.delta":if(e.delta)yield{id:e.item_id||a,type:"text",text:e.delta};break;case"response.reasoning_text.delta":if(e.delta)yield{id:e.item_id||a,type:"reasoning",reasoning:e.delta};break;case"response.function_call_arguments.delta":{let i=e.item_id?n.get(e.item_id):void 0;yield{type:"tool_calls",id:e.item_id||a,tool_call:{call_id:i?.callId,function:{id:e.item_id,name:i?.name,arguments:e.delta}}}}break;case"response.function_call_arguments.done":if(e.item_id&&e.arguments){let i=n.get(e.item_id);yield{type:"tool_calls",id:e.item_id||a,tool_call:{call_id:e.call_id??i?.callId,function:{id:e.item_id,name:e.name??i?.name,arguments:e.arguments}}}}break;case"response.incomplete":{yield{type:"done",success:!1,incompleteReason:e.response?.incomplete_details?.reason,id:e.response?.id||a};break}case"response.failed":{yield{type:"done",success:!1,error:e.response?.error?.message||"Unknown error",id:e.response?.id||a};break}case"response.completed":{if(e.response?.usage){let i=e.response.usage,o=i.input_tokens||0,c=i.output_tokens||0,r=i.input_tokens_details?.cached_tokens||0,p=0,u=this.calculateCostFromInclusiveInput(o,c,r,0);yield{type:"usage",inputTokens:o,outputTokens:c,cacheWriteTokens:0,cacheReadTokens:r,totalCost:u,id:e.response.id||a}}yield{type:"done",success:!0,id:e.response?.id||a};break}}}getApiResponseId(e){if(typeof e?.response?.id==="string"&&e.response.id.length>0)return e.response.id;if(typeof e?.response_id==="string"&&e.response_id.length>0)return e.response_id;return}}import N5 from"openai";var q2="us-central1";function Xc(e){return e.toLowerCase().includes("claude")}function Q2(e){if(!e||e.length===0)return;let t=xe(e);return Object.fromEntries(t.map((a)=>[a.name,{description:a.description,inputSchema:a.input_schema}]))}function C2(e,t,a){let n=a?.promptCacheOn?[{type:"text",text:e,providerOptions:{anthropic:{cacheControl:{type:"ephemeral"}}}}]:e;return We(n,t,{assistantToolCallArgKey:"input"})}class zt extends B{type="vertex";geminiHandler;vertexAnthropicModelFactory;vertexAnthropicModelFactoryPromise;getProjectId(){let e=this.config.gcp?.projectId?.trim();if(!e)throw Error("Vertex provider requires `gcp.projectId` in provider configuration.");return e}getConfiguredRegion(){return this.config.gcp?.region?.trim()||this.config.region?.trim()}getRequiredClaudeRegion(){let e=this.getConfiguredRegion();if(!e)throw Error("Vertex Claude models require `gcp.region` (or `region`) in provider configuration.");return e}getGeminiRegion(){return this.getConfiguredRegion()??q2}ensureGeminiHandler(){if(!this.geminiHandler){let e=this.getProjectId(),t=this.getGeminiRegion();this.geminiHandler=new Le({...this.config,region:t,gcp:{...this.config.gcp,projectId:e,region:t}})}return this.geminiHandler}async ensureVertexAnthropicModelFactory(){if(this.vertexAnthropicModelFactory)return this.vertexAnthropicModelFactory;if(!this.vertexAnthropicModelFactoryPromise)this.vertexAnthropicModelFactoryPromise=import("@ai-sdk/google-vertex/anthropic").then((e)=>{let t=e.createVertexAnthropic({project:this.getProjectId(),location:this.getRequiredClaudeRegion(),headers:this.getRequestHeaders(),baseURL:this.config.baseUrl}),a=(n)=>t(n);return this.vertexAnthropicModelFactory=a,a});try{return await this.vertexAnthropicModelFactoryPromise}catch(e){if(this.vertexAnthropicModelFactoryPromise=void 0,e instanceof Error&&e.message.includes("@ai-sdk/google-vertex"))throw Error('Vertex Claude models require @ai-sdk/google-vertex at runtime. Install workspace dependencies before using provider "vertex".',{cause:e});throw e}}getModel(){return fn(this.config)}getMessages(e,t){let a=this.getModel();if(!Xc(a.id))return this.ensureGeminiHandler().getMessages(e,t);let n=this.supportsPromptCache(a.info);return et(t,n)}async*createMessage(e,t,a){yield*K(()=>this.createMessageInternal(e,t,a))}async*createMessageInternal(e,t,a){let n=this.getModel();if(!Xc(n.id)){yield*this.ensureGeminiHandler().createMessage(e,t,a);return}let i=await tt(),o=await this.ensureVertexAnthropicModelFactory(),c=this.createResponseId(),r=this.config.thinkingBudgetTokens??0,p=Ie(n.info,"reasoning")&&r>0,u=this.supportsPromptCache(n.info),d={};if(p)d.anthropic={thinking:{type:"enabled",budgetTokens:r}};let T=i.streamText({model:o(n.id),messages:C2(e,t,{promptCacheOn:u}),tools:Q2(a),maxTokens:n.info.maxTokens??this.config.maxOutputTokens??128000,temperature:p?void 0:0,providerOptions:Object.keys(d).length>0?d:void 0,abortSignal:this.getAbortSignal()});yield*at(T,{responseId:c,errorMessage:"Vertex Anthropic stream failed",calculateCost:(D,R,E,F)=>this.calculateCost(D,R,E,F),reasoningTypes:["reasoning-delta"],enableToolCalls:!0,toolCallArgsOrder:["input","args"],toolCallFunctionIncludeId:!0,resolveUsageMetrics:(D,R)=>{let F=(R?.providerMetadata??{}).anthropic??{};return{inputTokens:Y(D.inputTokens),outputTokens:Y(D.outputTokens),thoughtsTokenCount:Y(D.reasoningTokens??D.thoughtsTokenCount),cacheReadTokens:Y(D.cachedInputTokens??F.cacheReadInputTokens),cacheWriteTokens:Y(F.cacheCreationInputTokens)}}})}}import{JSONParser as Pd}from"@streamparser/json";Mt();function jc(e){let t=U(e.providerId);if(t===e.providerId)return e;return{...e,providerId:t}}function cs(e,t){if(e.baseUrl)return e.baseUrl;if(e.oca?.mode==="internal")return pe;return t?.baseUrl??te}function rs(e){let t=e.modelId;return e.modelInfo?.apiFormat??(t?e.knownModels?.[t]?.apiFormat:void 0)}function ps(e){if(rs(e)===oe.OPENAI_RESPONSES)return new ve(e);return new ie(e)}function $c(e,t){return{...e,baseUrl:Q(e)==="oca"?cs(e,t):e.baseUrl??t.baseUrl,modelId:e.modelId??t.modelId,knownModels:e.knownModels??t.knownModels,capabilities:e.capabilities??t.capabilities}}var Pn;function ss(){if(!Pn)Pn=z0();return Pn}var us={"claude-code":(e)=>new jt(e),"openai-codex":(e)=>new Xt(e),opencode:(e)=>new $t(e),sapaicore:(e)=>new Jt(e),mistral:(e)=>new Ht(e),dify:(e)=>new Zt(e),asksage:(e)=>new Yt(e),oca:(e)=>ps(e)},ms={anthropic:(e)=>new Ut(e),gemini:(e)=>new Le(e),vertex:(e)=>new zt(e),bedrock:(e)=>new wi(e),openai:(e)=>new ve(e),fetch:(e)=>new nt(e),"ai-sdk-community":(e)=>new nt(e),"openai-compatible":(e)=>new ie(e)};function Ln(e){let t=Q(e),a=us[t];if(a)return a(e);let n=ss()[t];if(n){let i=ms[n];if(i)return i(e)}return}function Jc(e){let t=jc(e),{providerId:a}=t,n=Q(t);if(Ee(a)){if(li(a))throw Error(`Handler for "${a}" is registered as async. Use createHandlerAsync() instead.`);let o=ui(a,t);if(o)return o}let i=Ln({...t,routingProviderId:n});if(i)return i;if(yt(n)){if(t.modelCatalog?.loadLatestOnInit||t.modelCatalog?.loadPrivateOnAuth)throw Error(`Provider "${a}" has runtime model refresh enabled. Use createHandlerAsync() to allow async model refresh.`);let o=z[n],c=$c({...t,routingProviderId:n},o);return Ln(c)??new ie(c)}return t.baseUrl?new ie({...t,routingProviderId:n}):new ve({...t,routingProviderId:n,baseUrl:"https://api.openai.com/v1"})}async function ls(e){let t=jc(e),{providerId:a}=t,n=Q(t);if(Ee(a)){let i=await mi(a,t);if(i)return i}if(yt(n)){let i=await Vt(n,t.modelCatalog,{...t,routingProviderId:n});if(i){let o=$c({...t,routingProviderId:n},i);return Ln(o)??new ie(o)}}return Jc(t)}var Hc=[...new Set([Ne.provider.id,"anthropic","asksage","bedrock","claude-code","opencode","mistral","dify","openai-native","gemini","vertex",...Object.keys(z)])],ds=new Set(Hc);function gs(e){let t=U(e);return ds.has(t)||Ee(t)||Ee(e)}export{Dn as toProviderConfig,ge as supportsModelThinking,Vt as resolveProviderConfig,bn as parseSettings,U as normalizeProviderId,gs as isProviderSupported,Ie as hasModelCapability,kn as getModelPricing,ls as createHandlerAsync,Jc as createHandler,si as ProviderSettingsSchema,z as OPENAI_COMPATIBLE_PROVIDERS,Hc as BUILT_IN_PROVIDERS};
|
package/dist/runtime.js
CHANGED
|
@@ -11,5 +11,5 @@ ${a}
|
|
|
11
11
|
`)}function ze(e,a=!1){let t=e.reduce((o,c,r)=>{if(c.role==="user")o.push(r);return o},[]),i=a?new Set(t.slice(-2)):new Set,n=[];for(let[o,c]of e.entries()){let r=N2(c,i.has(o));if(r)n.push(r)}return n}function N2(e,a){let{role:t,content:i}=e;if(typeof i==="string"){let o={type:"text",text:i};if(a)o.cache_control={type:"ephemeral"};return{role:t,content:[o]}}let n=V2(i,a);if(n.length===0)return null;return{role:t,content:n}}function V2(e,a){let t=[];for(let i=0;i<e.length;i++){let n=e[i],o=i===e.length-1,c=U2(n,a&&o);if(c)t.push(c)}return t}function U2(e,a){switch(e.type){case"text":{let i={type:"text",text:e.text};if(a)i.cache_control={type:"ephemeral"};return i}case"file":{let t=e;return{type:"text",text:X(t.path,t.content)}}case"image":{let t=e;return{type:"image",source:{type:"base64",media_type:t.mediaType,data:t.data}}}case"tool_use":{let t=e;return{type:"tool_use",id:t.id,name:t.name,input:I(t.input)}}case"tool_result":{let t=e,i;if(typeof t.content==="string")i=t.content;else i=t.content.map((n)=>{if(n.type==="text")return{type:"text",text:n.text};else if(n.type==="file"){let o=n;return{type:"text",text:X(o.path,o.content)}}else return{type:"image",source:{type:"base64",media_type:n.mediaType,data:n.data}}});return{type:"tool_result",tool_use_id:t.tool_use_id,content:i,is_error:t.is_error}}case"thinking":{let t=e;return{type:"thinking",thinking:t.thinking,signature:t.signature}}case"redacted_thinking":return{type:"redacted_thinking",data:e.data};default:return null}}function ge(e){return e.map((a)=>({name:a.name,description:a.description,input_schema:a.inputSchema}))}var _n={maxRetries:4,baseDelay:2000,maxDelay:15000};class Le extends Error{retryAfterSeconds;constructor(e,a,t){super(e,t);this.retryAfterSeconds=a;this.name="RetriableError"}}function An(e){if(e instanceof Le)return!0;if(e instanceof Error){let a=e.message.toLowerCase();if(a.includes("429")||a.includes("rate limit")||a.includes("too many requests"))return!0;if(a.includes("500")||a.includes("502")||a.includes("503")||a.includes("504"))return!0;if(a.includes("network")||a.includes("timeout")||a.includes("econnreset")||a.includes("econnrefused"))return!0}return!1}function fn(e,a={}){let{baseDelay:t=_n.baseDelay,maxDelay:i=_n.maxDelay}=a,n=2**e*t,o=Math.random()*0.25*n;return Math.min(n+o,i)}function En(e){return new Promise((a)=>setTimeout(a,e))}async function*K(e,a={}){let{maxRetries:t=_n.maxRetries,onRetryAttempt:i}=a;for(let n=0;n<=t;n++)try{yield*e();return}catch(o){if(!(n!==t&&An(o)))throw o;let p;if(o instanceof Le&&o.retryAfterSeconds)p=o.retryAfterSeconds*1000;else p=fn(n,a);if(i)i(n+1,t,p,o);await En(p)}throw Error("Retry logic exhausted without returning or throwing")}import{nanoid as Y2}from"nanoid";var y2={"HTTP-Referer":"https://cline.bot","X-Title":"Cline","X-IS-MULTIROOT":"false","X-CLIENT-TYPE":"cline-sdk"},yc=new WeakMap,X2=0;function wi(e){let a=yc.get(e);if(!a)a=`abort_${++X2}`,yc.set(e,a);return a}function Ln(e){return e instanceof Error?{name:e.name,message:e.message}:e}class C{config;abortController;abortSignalSequence=0;constructor(e){this.config=e}getModel(){let e=this.config.modelId;return{id:e,info:{...this.config.modelInfo??{},id:e}}}async getApiStreamUsage(){return}getAbortSignal(){let e=new AbortController;this.abortController=e,e.signal.addEventListener("abort",()=>{if(this.abortController===e)this.abortController=void 0},{once:!0});let a=this.config.abortSignal;if(a)if(a.aborted)this.logAbort("debug","Provider request inherited aborted signal",{controllerId:wi(e),reason:Ln(a.reason)}),e.abort(a.reason);else{let t=++this.abortSignalSequence;a.addEventListener("abort",()=>{this.logAbort("warn","Provider request abort signal fired",{controllerId:wi(e),signalId:t,reason:Ln(a.reason)}),e.abort(a.reason)},{once:!0}),this.logAbort("debug","Provider request attached abort signal",{controllerId:wi(e),signalId:t})}return e.signal}abort(){this.abortController?.abort()}setAbortSignal(e){if(this.config.abortSignal=e,e?.aborted)this.logAbort("debug","Provider handler received pre-aborted signal",{controllerId:this.abortController?wi(this.abortController):void 0,reason:Ln(e.reason)}),this.abortController?.abort(e.reason)}logAbort(e,a,t){this.config.logger?.[e]?.(a,{providerId:this.config.providerId,modelId:this.config.modelId,...t})}supportsPromptCache(e){let a=e??this.config.modelInfo??this.config.knownModels?.[this.config.modelId],t=a?.pricing;return a?.capabilities?.includes("prompt-cache")===!0||this.config.capabilities?.includes("prompt-cache")===!0||typeof t?.cacheRead==="number"||typeof t?.cacheWrite==="number"}calculateCost(e,a,t=0,i=0){let n=(this.config.modelInfo??this.config.knownModels?.[this.config.modelId])?.pricing;if(!n?.input||!n?.output)return;return e/1e6*n.input+a/1e6*n.output+(t>0?t/1e6*(n.cacheRead??0):0)+(i>0?i/1e6*(n.cacheWrite??n.input*1.25):0)}calculateCostFromInclusiveInput(e,a,t=0,i=0){return this.calculateCost(Math.max(0,e-t-i),a,t,i)}createResponseId(){return Y2()}withResponseId(e,a){return{...e,id:a}}*withResponseIdForAll(e,a){for(let t of e)yield{...t,id:a}}getRequestHeaders(){return{...y2,...this.config.headers??{}}}normalizeOpenAICompatibleBadRequest(e){let a=e;if((a?.status??a?.response?.status??a?.error?.code??(typeof a?.message==="string"&&a.message.includes("400")?400:void 0))!==400)return;let i=a?.error?.metadata?.raw,n=this.parseRawProviderError(i),o=n?.error?.message?.trim()||a?.error?.message?.trim()||a?.message?.trim()||"Provider returned error",c=a?.error?.metadata?.provider_name?.trim()||"Provider",r=n?.request_id?.trim(),p=this.rewriteProviderBadRequestDetail(o),u=r?` Request ID: ${r}.`:"";return Error(`${c} request was rejected (HTTP 400). ${p}${u}`,{cause:e instanceof Error?e:void 0})}parseRawProviderError(e){if(!e)return;try{return JSON.parse(e)}catch{return}}rewriteProviderBadRequestDetail(e){let a=e.match(/prompt is too long:\s*([\d,]+)\s*tokens?\s*>\s*([\d,]+)\s*maximum/i);if(a){let t=a[1],i=a[2];return`Prompt is too long: ${t} tokens exceeds the ${i} token limit.`}return e.endsWith(".")?e:`${e}.`}}var $2=1024,J2="CLINE_DEBUG_THINKING";function H2(){let e=process.env[J2];if(!e)return!1;let a=e.trim().toLowerCase();return a==="1"||a==="true"||a==="yes"}class ya extends C{type="anthropic";client;ensureClient(){if(!this.client){let e=j(Q(this.config),this.config.apiKey);if(!e)throw Error(Z(Q(this.config)));this.client=new j2({apiKey:e,baseURL:this.config.baseUrl||void 0,defaultHeaders:this.getRequestHeaders()})}return this.client}getModel(){let e=this.config.modelId,t=(this.config.knownModels??{})[e]??{},i=this.config.modelInfo??t;return{id:e,info:{...i,id:e}}}getMessages(e,a){let t=this.supportsPromptCache(this.getModel().info);return ze(a,t)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.ensureClient(),n=this.getModel(),o=this.getAbortSignal(),c=this.createResponseId(),r=fe(n.info),p=this.config.thinkingBudgetTokens??(this.config.thinking?$2:0),u=r&&p>0?p:0,d=t&&t.length>0,R=this.supportsPromptCache(n.info),D=r&&u>0,T=H2(),E={},F=(O)=>{E[O]=(E[O]??0)+1};if(T)console.error(`[thinking-debug][anthropic][request] model=${n.id} thinkingFlag=${this.config.thinking===!0} supportsModelThinking=${r} requestedBudget=${p} effectiveBudget=${u} reasoningOn=${D} promptCache=${R}`);let h=this.getMessages(e,a),f=d?ge(t):void 0,b={signal:o},v={model:n.id,thinking:D?{type:"enabled",budget_tokens:u}:void 0,max_tokens:n.info.maxTokens??this.config.maxOutputTokens??128000,temperature:D?void 0:0,system:[R?{text:e,type:"text",cache_control:{type:"ephemeral"}}:{text:e,type:"text"}],messages:h,stream:!0,tools:f,tool_choice:d&&!D?{type:"auto"}:void 0},A=await i.messages.create(v,b),P={id:"",name:"",arguments:""},S={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0},z=null;for await(let O of A){if(T){if(F(`event:${O.type}`),O.type==="content_block_start")F(`content_block_start:${O.content_block?.type??"unknown"}`);else if(O.type==="content_block_delta")F(`content_block_delta:${O.delta?.type??"unknown"}`)}if(O.type==="message_delta")z=O.delta?.stop_reason??z;yield*this.withResponseIdForAll(this.processChunk(O,P,S,c),c)}if(T){let O=Object.entries(E).map(([Oe,N])=>`${Oe}=${N}`).sort().join(" ");console.error(`[thinking-debug][anthropic][stream] ${O}`)}yield{type:"done",success:!0,id:c,incompleteReason:z==="max_tokens"?"max_tokens":void 0}}*processChunk(e,a,t,i){switch(e.type){case"message_start":{let n=e.message.usage;t.inputTokens=n.input_tokens||0,t.outputTokens=n.output_tokens||0,t.cacheWriteTokens=n.cache_creation_input_tokens||0,t.cacheReadTokens=n.cache_read_input_tokens||0,yield{type:"usage",inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheWriteTokens:t.cacheWriteTokens,cacheReadTokens:t.cacheReadTokens,totalCost:this.calculateCost(t.inputTokens,t.outputTokens,t.cacheReadTokens,t.cacheWriteTokens),id:i};break}case"message_delta":{t.outputTokens=e.usage.output_tokens||t.outputTokens,yield{type:"usage",inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheWriteTokens:t.cacheWriteTokens,cacheReadTokens:t.cacheReadTokens,totalCost:this.calculateCost(t.inputTokens,t.outputTokens,t.cacheReadTokens,t.cacheWriteTokens),id:i};break}case"content_block_start":{let n=e.content_block;switch(n.type){case"thinking":yield{type:"reasoning",reasoning:typeof n.thinking==="string"?n.thinking??"":"",signature:typeof n.signature==="string"?n.signature??void 0:void 0,id:i};break;case"redacted_thinking":yield{type:"reasoning",reasoning:"",redacted_data:typeof n.data==="string"?n.data??void 0:void 0,id:i};break;case"text":yield{type:"text",text:"",id:i};break;case"tool_use":a.id=n.id,a.name=n.name,a.arguments="";break}break}case"content_block_delta":{let n=e.delta;switch(n.type){case"thinking_delta":yield{type:"reasoning",reasoning:n.thinking,id:i};break;case"signature_delta":yield{type:"reasoning",reasoning:"",signature:typeof n.signature==="string"?n.signature??void 0:void 0,id:i};break;case"text_delta":yield{type:"text",text:n.text,id:i};break;case"input_json_delta":a.arguments+=n.partial_json;break}break}case"content_block_stop":{if(a.id){let n;try{n=JSON.parse(a.arguments||"{}")}catch{n=a.arguments}yield{type:"tool_calls",id:i,tool_call:{call_id:a.id,function:{name:a.name,arguments:n}}},a.id="",a.name="",a.arguments=""}break}}}}class bi extends C{type="fetch";getMessages(e,a){return{systemPrompt:e,messages:a}}getBaseUrl(){return this.config.baseUrl?.trim()||this.getDefaultBaseUrl()}getJsonHeaders(e){return{"Content-Type":"application/json",...this.getRequestHeaders(),...e??{}}}async fetchJson(e,a){let t=await fetch(`${this.getBaseUrl()}${e}`,{method:a.method??"POST",headers:this.getJsonHeaders(a.headers),body:a.body?JSON.stringify(a.body):void 0,signal:this.getAbortSignal()});if(!t.ok){let i=await t.text();throw Error(`HTTP ${t.status}: ${i}`)}return await t.json()}async*createMessage(e,a,t){yield*K(()=>this.createMessageWithFetch(e,a))}}var Z2="https://api.asksage.ai/server",I2="gpt-4o";class Xa extends bi{type="fetch";getDefaultBaseUrl(){return Z2}getModel(){let e=this.config.modelId?.trim()||I2,a=this.config.modelInfo??this.config.knownModels?.[e]??{id:e,capabilities:["tools"]};return{id:e,info:{...a,id:e}}}getJsonHeaders(e){let a=j(Q(this.config),this.config.apiKey);if(!a)throw Error("AskSage API key is required");return super.getJsonHeaders({"x-access-tokens":a,...e??{}})}async*createMessageWithFetch(e,a){let t=this.createResponseId(),{id:i}=this.getModel(),n={system_prompt:e,message:a.map((r)=>({user:r.role==="assistant"?"gpt":"me",message:this.serializeMessageContent(r.content)})),model:i,dataset:"none",usage:!0},o;try{o=await this.fetchJson("/query",{method:"POST",body:n})}catch(r){let p=r instanceof Error?r.message:String(r);throw Error(`AskSage request failed: ${p}`)}for(let r of o.tool_responses??[])yield{type:"text",text:`[Tool Response: ${JSON.stringify(r)}]
|
|
12
12
|
`,id:t};let c=o.message?.trim();if(!c)throw Error("AskSage request failed: no content in response");if(yield{type:"text",text:c,id:t},o.usage)yield{type:"usage",inputTokens:o.usage.model_tokens.prompt_tokens,outputTokens:o.usage.model_tokens.completion_tokens,cacheReadTokens:0,cacheWriteTokens:0,totalCost:o.usage.asksage_tokens,id:t};yield{type:"done",success:!0,id:t}}serializeMessageContent(e){if(typeof e==="string")return e;return e.map((a)=>("text"in a)?a.text:"").join("").trim()}}var Di,ki;async function z2(){if(Di)return Di;let e="@ai-sdk/amazon-bedrock",a=await import(e);if(!a.createAmazonBedrock)throw Error(`Failed to load createAmazonBedrock from ${e}`);return Di=a.createAmazonBedrock,Di}async function ep(){if(ki)return ki;let e="@aws-sdk/credential-providers",a=await import(e);if(!a.fromNodeProviderChain)throw Error(`Failed to load fromNodeProviderChain from ${e}`);return ki=a.fromNodeProviderChain,ki}async function Xc(e,a){let t=await z2(),i=e.region??"us-east-1",n=e.aws?.authentication,o=Boolean(e.aws?.accessKey&&e.aws?.secretKey),c=n==="profile"||n==="iam"||!n&&!o&&!e.apiKey,r;if(c)r=(await ep())({profile:e.aws?.profile});return t({region:i,accessKeyId:e.aws?.accessKey??void 0,secretAccessKey:e.aws?.secretKey??void 0,sessionToken:e.aws?.sessionToken??void 0,apiKey:e.apiKey??void 0,baseURL:e.aws?.endpoint??e.baseUrl??void 0,headers:a,credentialProvider:r})}var jc=":1m",Ri,ap=1024,tp="medium";async function ip(){if(Ri)return Ri;return Ri=await import("ai"),Ri}class Ti extends C{type="bedrock";clientFactory;async ensureClientFactory(){if(!this.clientFactory)this.clientFactory=await Xc(this.config,this.getRequestHeaders());return this.clientFactory}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??{};return{id:e,info:{...a,id:e}}}getMessages(e,a){return op(e,a)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t),{maxRetries:4})}async*createMessageInternal(e,a,t){let i=await ip(),n=await this.ensureClientFactory(),o=this.createResponseId(),c=this.getAbortSignal(),r=this.getModel(),p=r.id,u={},d={};if(p.endsWith(jc))p=p.slice(0,-jc.length),d.anthropicBeta=["context-1m-2025-08-07"];let R=fe(r.info),D=this.config.thinkingBudgetTokens??(this.config.thinking?ap:0),T=!1;if(R&&D>0&&p.includes("anthropic"))d.reasoningConfig={type:"enabled",budgetTokens:D},T=!0;else if(R&&p.includes("amazon.nova")){let h=this.config.reasoningEffort??(this.config.thinking?tp:void 0);if(h)d.reasoningConfig={type:"enabled",maxReasoningEffort:h},T=!0}if(Object.keys(d).length>0)u.bedrock=d;let E=i.streamText({model:n(p),messages:this.getMessages(e,a),tools:np(t),maxTokens:r.info.maxTokens??this.config.maxOutputTokens??128000,temperature:T?void 0:r.info.temperature??0,providerOptions:Object.keys(u).length>0?u:void 0,abortSignal:c}),F=!1;if(E.fullStream)for await(let h of E.fullStream){let f=h.type;if(f==="text-delta"){let b=h.textDelta??h.delta;if(b)yield{type:"text",text:b,id:o};continue}if(f==="reasoning-delta"||f==="reasoning"){let b=h.textDelta??h.reasoning;if(b)yield{type:"reasoning",reasoning:b,id:o};continue}if(f==="tool-call"){let b=h.toolCallId??h.id,v=h.toolName??h.name,A=h.args??{};yield{type:"tool_calls",id:o,tool_call:{call_id:b,function:{name:v,arguments:A}}};continue}if(f==="error"){let b=h.error?.message??"Bedrock stream failed";throw Error(b)}if(f==="finish"){let b=h.usage??{},v=xe(b.inputTokens),A=xe(b.outputTokens),P=xe(b.reasoningTokens),S=xe(b.cachedInputTokens);yield{type:"usage",inputTokens:v,outputTokens:A,thoughtsTokenCount:P,cacheReadTokens:S,totalCost:this.calculateCostFromInclusiveInput(v,A,S),id:o},F=!0}}else if(E.textStream)for await(let h of E.textStream)yield{type:"text",text:h,id:o};if(!F&&E.usage){let h=await E.usage,f=xe(h.inputTokens),b=xe(h.outputTokens),v=xe(h.reasoningTokens),A=xe(h.cachedInputTokens);yield{type:"usage",inputTokens:f,outputTokens:b,thoughtsTokenCount:v,cacheReadTokens:A,totalCost:this.calculateCostFromInclusiveInput(f,b,A),id:o}}yield{type:"done",success:!0,id:o}}}function xe(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function np(e){if(!e||e.length===0)return;let a=ge(e);return Object.fromEntries(a.map((t)=>[t.name,{description:t.description,inputSchema:t.input_schema}]))}function op(e,a){let t=[{role:"system",content:e}],i=new Map;for(let n of a){if(typeof n.content==="string"){t.push({role:n.role,content:n.content});continue}if(n.role==="assistant"){let c=[];for(let r of n.content){if(r.type==="text"){c.push({type:"text",text:r.text});continue}if(r.type==="tool_use")i.set(r.id,r.name),c.push({type:"tool-call",toolCallId:r.id,toolName:r.name,args:r.input})}if(c.length>0)t.push({role:"assistant",content:c});continue}let o=[];for(let c of n.content){if(c.type==="text"){o.push({type:"text",text:c.text});continue}if(c.type==="image"){o.push({type:"image",image:Buffer.from(c.data,"base64"),mediaType:c.mediaType});continue}if(c.type==="tool_result"){if(o.length>0)t.push({role:"user",content:o.splice(0,o.length)});t.push({role:"tool",content:[{type:"tool-result",toolCallId:c.tool_use_id,toolName:i.get(c.tool_use_id)??"tool",output:cp(c.content),isError:c.is_error??!1}]})}}if(o.length>0)t.push({role:"user",content:o})}return t}function cp(e){if(typeof e==="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function he(e,a,t){let i=t?.assistantToolCallArgKey??"args",n=[{role:"system",content:e}],o=new Map;for(let c of a){if(typeof c.content==="string"){n.push({role:c.role,content:c.content});continue}if(c.role==="assistant"){let p=[];for(let u of c.content){if(u.type==="text"){p.push({type:"text",text:u.text});continue}if(u.type==="file"){p.push({type:"text",text:X(u.path,u.content)});continue}if(u.type==="tool_use")o.set(u.id,u.name),p.push({type:"tool-call",toolCallId:u.id,toolName:u.name,[i]:I(u.input)})}if(p.length>0)n.push({role:"assistant",content:p});continue}let r=[];for(let p of c.content){if(p.type==="text"){r.push({type:"text",text:p.text});continue}if(p.type==="file"){r.push({type:"text",text:X(p.path,p.content)});continue}if(p.type==="image"){r.push({type:"image",image:Buffer.from(p.data,"base64"),mediaType:p.mediaType});continue}if(p.type==="tool_result"){if(r.length>0)n.push({role:"user",content:r.splice(0,r.length)});n.push({role:"tool",content:[{type:"tool-result",toolCallId:p.tool_use_id,toolName:o.get(p.tool_use_id)??"tool",output:te(p.content),isError:p.is_error??!1}]})}}if(r.length>0)n.push({role:"user",content:r})}return n}var Mi=null;async function ea(e){if(Mi)return Mi;return e?.beforeImport?.(),Mi=await import("ai"),Mi}function Y(e){return typeof e==="number"&&Number.isFinite(e)?e:0}function rp(e){return{inputTokens:Y(e.inputTokens),outputTokens:Y(e.outputTokens),thoughtsTokenCount:Y(e.reasoningTokens??e.thoughtsTokenCount),cacheReadTokens:Y(e.cachedInputTokens)}}async function*aa(e,a){let t=a.resolveUsageMetrics??rp,i=new Set(a.reasoningTypes??["reasoning-delta"]),n=a.toolCallArgsOrder??["args","input"],o=a.responseId,c=!1,r=!1;if(e.fullStream)for await(let p of e.fullStream){let u=p.type;if(u==="text-delta"){let d=p.textDelta??p.text??p.delta;if(d)yield{type:"text",text:d,id:o},r=!0;continue}if(u&&i.has(u)){let d=p.textDelta??p.reasoning??p.text;if(d)yield{type:"reasoning",reasoning:d,id:o};continue}if(u==="tool-call"&&a.enableToolCalls){let d=p.toolCallId??p.id,R=p.toolName??p.name,D=n.map((T)=>p[T]).find((T)=>T!==void 0)??{};yield{type:"tool_calls",id:o,tool_call:{call_id:d,function:{id:a.toolCallFunctionIncludeId?d:void 0,name:R,arguments:D}}};continue}if(u==="error"){let d=p.error?.message??a.errorMessage;throw Error(d)}if(u==="finish"){let d=p.totalUsage??p.usage??{},R=t(d,p);yield{type:"usage",inputTokens:R.inputTokens,outputTokens:R.outputTokens,thoughtsTokenCount:R.thoughtsTokenCount,cacheReadTokens:R.cacheReadTokens,cacheWriteTokens:R.cacheWriteTokens,totalCost:a.calculateCost(R.inputTokens,R.outputTokens,R.cacheReadTokens,R.cacheWriteTokens),id:o},c=!0}}else if(e.textStream)for await(let p of e.textStream)yield{type:"text",text:p,id:o},r=!0;if(!r&&a.enableTextFallback&&e.text){let p=await e.text;if(typeof p==="string"&&p.length>0)yield{type:"text",text:p,id:o}}if(!c&&e.usage){let p=await e.usage,u=t(p);yield{type:"usage",inputTokens:u.inputTokens,outputTokens:u.outputTokens,thoughtsTokenCount:u.thoughtsTokenCount,cacheReadTokens:u.cacheReadTokens,cacheWriteTokens:u.cacheWriteTokens,totalCost:a.calculateCost(u.inputTokens,u.outputTokens,u.cacheReadTokens,u.cacheWriteTokens),id:o}}yield{type:"done",success:!0,id:o}}var $c=new Map;function Pn(e,a){let t=e.modelId?.trim(),i=t&&t.length>0?t:a??"",o=(e.knownModels??{})[i]??{},c=e.modelInfo??o;return{id:i,info:{...c,id:i}}}async function pp(e){let a=$c.get(e);if(a)return a;let t=await import(e);return $c.set(e,t),t}class We extends C{type="ai-sdk-community";provider;providerPromise;getProviderCreateOptions(){return}async beforeLoadProviderModule(){}getProviderModelSettings(){return}getLoadAiSdkOptions(){return}getStreamErrorMessage(){return"AI SDK stream failed"}getEmitStreamOptions(){return{}}getAssistantToolCallArgKey(){return"args"}normalizeModelId(e){return e}async ensureProvider(){if(this.provider)return this.provider;if(!this.providerPromise)this.providerPromise=(async()=>{let e=this.getProviderDefinition();await this.beforeLoadProviderModule();let a=await pp(e.moduleName),t=a[e.createExportName],i=a[e.providerExportName];if(t){let n=t(this.getProviderCreateOptions());return this.provider=n,n}if(i)return this.provider=i,i;throw Error(`${e.moduleName} did not export \`${e.providerExportName}\` or \`${e.createExportName}\`.`)})();try{return await this.providerPromise}catch(e){this.providerPromise=void 0;let a=this.getProviderDefinition().moduleName;if(e instanceof Error&&e.message.includes(a))throw Error(this.getProviderDefinition().missingDependencyError,{cause:e});throw e}}getModel(){return Pn(this.config,this.getDefaultModelId())}getMessages(e,a){return he(e,a,{assistantToolCallArgKey:this.getAssistantToolCallArgKey()})}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=await ea(this.getLoadAiSdkOptions()),n=await this.ensureProvider(),{id:o,info:c}=this.getModel(),r=this.createResponseId(),p=i.streamText({model:n(this.normalizeModelId(o),this.getProviderModelSettings()),messages:this.getMessages(e,a),maxTokens:c.maxTokens??void 0,temperature:c.temperature??void 0,abortSignal:this.getAbortSignal()});yield*aa(p,{responseId:r,errorMessage:this.getStreamErrorMessage(),calculateCost:(u,d,R,D)=>this.calculateCostFromInclusiveInput(u,d,R,D),...this.getEmitStreamOptions()})}}var Jc=!1;async function sp(){if(Jc)return;Jc=!0;try{let e=await import("zod"),t=(e.z??e).object;if(typeof t!=="function")return;let i=t({}).refine?.(()=>!0);if(!i||typeof i.passthrough==="function")return;let n=Object.getPrototypeOf(i);if(!n||typeof n.passthrough==="function")return;Object.defineProperty(n,"passthrough",{value(){return this},configurable:!0,enumerable:!1,writable:!0})}catch{}}function up(e){return e.startsWith("sk-")}function mp(){let e=process.env.AI_SDK_LOG_WARNINGS?.trim().toLowerCase();return e==="0"||e==="false"||e==="off"}function lp(e){if(e.includes("/"))return e;return`openai/${e}`}class ja extends We{getProviderDefinition(){return{moduleName:"ai-sdk-provider-codex-cli",createExportName:"createCodexCli",providerExportName:"codexCli",missingDependencyError:"Codex provider requires `ai-sdk-provider-codex-cli` and the Codex CLI at runtime. Install dependencies and run `codex` to authenticate."}}getDefaultModelId(){return"gpt-5.3-codex"}async beforeLoadProviderModule(){await sp()}getProviderCreateOptions(){let a={...(this.config.codex??{}).defaultSettings??{}};if(this.config.reasoningEffort&&a.reasoningEffort===void 0)a.reasoningEffort=this.config.reasoningEffort;else if(this.config.thinking&&a.reasoningEffort===void 0)a.reasoningEffort="medium";let t=this.config.apiKey?.trim(),i=typeof this.config.accessToken==="string"&&this.config.accessToken.trim().length>0;if(t&&!i&&up(t))a.env={...a.env??{},OPENAI_API_KEY:t};return{defaultSettings:Object.keys(a).length>0?a:void 0}}getProviderModelSettings(){return this.config.codex?.modelSettings}getStreamErrorMessage(){return"Codex stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],toolCallArgsOrder:["args","input"]}}}class $a extends We{getProviderDefinition(){return{moduleName:"ai-sdk-provider-claude-code",createExportName:"createClaudeCode",providerExportName:"claudeCode",missingDependencyError:"Claude Code provider requires `ai-sdk-provider-claude-code` at runtime. Install dependencies and run `claude login`."}}getDefaultModelId(){return"sonnet"}getProviderCreateOptions(){return this.config.claudeCode??{}}getLoadAiSdkOptions(){return{beforeImport:()=>{if(mp())globalThis.AI_SDK_LOG_WARNINGS=!1}}}getStreamErrorMessage(){return"Claude Code stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta"]}}}class Ja extends We{getProviderDefinition(){return{moduleName:"ai-sdk-provider-opencode-sdk",createExportName:"createOpencode",providerExportName:"opencode",missingDependencyError:"OpenCode provider requires `ai-sdk-provider-opencode-sdk` and OpenCode at runtime."}}getDefaultModelId(){return"openai/gpt-5.3-codex"}getProviderCreateOptions(){let e=this.config.opencode??{},a={...e.defaultSettings??{}};if(a.agent===void 0)a.agent="general";return{hostname:e.hostname,port:e.port,autoStartServer:e.autoStartServer,serverTimeout:e.serverTimeout,defaultSettings:Object.keys(a).length>0?a:void 0}}getProviderModelSettings(){return this.config.opencode?.modelSettings}normalizeModelId(e){return lp(e)}getStreamErrorMessage(){return"OpenCode stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],enableTextFallback:!0}}}class Ha extends We{getProviderDefinition(){return{moduleName:"@jerome-benoit/sap-ai-provider",createExportName:"createSAPAIProvider",providerExportName:"sapai",missingDependencyError:"SAP AI Core provider requires `@jerome-benoit/sap-ai-provider` at runtime."}}getDefaultModelId(){return"anthropic--claude-3.5-sonnet"}getProviderCreateOptions(){let e=this.config.sap??{},a=e.api??(e.useOrchestrationMode===void 0?void 0:e.useOrchestrationMode?"orchestration":"foundation-models"),t={resourceGroup:e.resourceGroup,deploymentId:e.deploymentId,api:a,defaultSettings:e.defaultSettings},i=Object.fromEntries(Object.entries(t).filter(([,n])=>n!==void 0));return Object.keys(i).length>0?i:void 0}getStreamErrorMessage(){return"SAP AI Core stream failed"}getEmitStreamOptions(){return{reasoningTypes:["reasoning-delta","reasoning"],enableToolCalls:!0,toolCallArgsOrder:["args","input"]}}}class Za extends We{getProviderDefinition(){return{moduleName:"@ai-sdk/mistral",createExportName:"createMistral",providerExportName:"mistral",missingDependencyError:"Mistral provider requires `@ai-sdk/mistral` at runtime."}}getDefaultModelId(){return"mistral-medium-latest"}getStreamErrorMessage(){return"Mistral stream failed"}}class Ia extends We{getProviderDefinition(){return{moduleName:"dify-ai-provider",createExportName:"createDifyProvider",providerExportName:"difyProvider",missingDependencyError:"Dify provider requires `dify-ai-provider` at runtime."}}getDefaultModelId(){return"default"}getProviderCreateOptions(){if(!this.config.baseUrl)return;return{baseURL:this.config.baseUrl}}getProviderModelSettings(){let e={responseMode:"blocking"};if(this.config.apiKey)e.apiKey=this.config.apiKey;return e}getStreamErrorMessage(){return"Dify stream failed"}}import{FunctionCallingConfigMode as Wp,GoogleGenAI as Hc,ThinkingLevel as fi}from"@google/genai";function _i(e){let a=new Map;return e.map((t)=>dp(t,a)).filter((t)=>t!==null)}function dp(e,a){let{role:t,content:i}=e,n=t==="assistant"?"model":"user";if(typeof i==="string")return{role:n,parts:[{text:i}]};let o=gp(i,a);if(o.length===0)return null;return{role:n,parts:o}}function gp(e,a){let t=[];for(let i of e){if(i.type==="tool_use")a.set(i.id,i.name);let n=xp(i,a);if(n)t.push(n)}return t}function xp(e,a){switch(e.type){case"text":{let t=e,i={text:t.text};if(t.signature)i.thoughtSignature=t.signature;return i}case"file":{let t=e;return{text:X(t.path,t.content)}}case"image":{let t=e;return{inlineData:{mimeType:t.mediaType,data:t.data}}}case"tool_use":{let t=e,i={functionCall:{id:t.id,name:t.name,args:I(t.input)}};if(t.signature)i.thoughtSignature=t.signature;return i}case"tool_result":{let t=e,i;if(typeof t.content==="string")i={result:mi(t.content)};else i={result:te(t.content)};if(t.is_error)i.error=!0;return{functionResponse:{id:t.tool_use_id,name:a.get(t.tool_use_id)??t.tool_use_id,response:i}}}case"thinking":{let t=e,i={text:t.thinking,thought:!0};if(t.signature)i.thoughtSignature=t.signature;return i}default:return null}}var hp=new Set(["type","title","description","enum","properties","required","additionalProperties","format","minimum","maximum","items","prefixItems","minItems","maxItems"]);function Gi(e){if(!e||typeof e!=="object"||Array.isArray(e))return e;let a=e,t={};for(let[i,n]of Object.entries(a)){if(!hp.has(i))continue;if(i==="properties"&&n&&typeof n==="object"){let o={};for(let[c,r]of Object.entries(n))o[c]=Gi(r);t[i]=o}else if(i==="items"||i==="additionalProperties")t[i]=typeof n==="object"&&n!==null?Gi(n):n;else if(i==="prefixItems"&&Array.isArray(n))t[i]=n.map((o)=>Gi(o));else t[i]=n}if(a.exclusiveMinimum!==void 0&&t.minimum===void 0)t.minimum=a.exclusiveMinimum;if(a.exclusiveMaximum!==void 0&&t.maximum===void 0)t.maximum=a.exclusiveMaximum;return t}function Ai(e){return e.map((a)=>({name:a.name,description:a.description,parameters:Gi(a.inputSchema)}))}var wp=1024,bp=128000,Dp=8192;function Zc(e){return e.toLowerCase().includes("gemini-3")}function kp(e){let a=e.toLowerCase();return Zc(e)&&a.includes("flash")&&!a.includes("lite")}class Pe extends C{type="gemini";client;ensureClient(){if(!this.client)if(this.config.gcp?.projectId)this.client=new Hc({vertexai:!0,project:this.config.gcp.projectId,location:this.config.region??"us-central1",httpOptions:{headers:this.getRequestHeaders()}});else{if(!this.config.apiKey)throw Error("Gemini API key is required when not using Vertex AI");this.client=new Hc({apiKey:this.config.apiKey,httpOptions:{headers:this.getRequestHeaders()}})}return this.client}getModel(){let e=this.config.modelId,t=(this.config.knownModels??{})[e]??{},i=this.config.modelInfo??t;return{id:e,info:{...i,id:e}}}getMessages(e,a){return _i(a)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t),{maxRetries:4,baseDelay:2000,maxDelay:15000})}async*createMessageInternal(e,a,t){let i=this.ensureClient(),{id:n,info:o}=this.getModel(),c=this.getAbortSignal(),r=this.createResponseId(),p=this.getMessages(e,a),u=fe(o),d=this.config.thinking===!0||typeof this.config.thinkingBudgetTokens==="number"||typeof this.config.reasoningEffort==="string",R=0,D,T=o.thinkingConfig?.thinkingLevel!=null||Zc(n);if(u&&d){let f=this.config.thinkingBudgetTokens??(d?wp:0);if(R=Math.min(Math.max(0,f),o.thinkingConfig?.maxBudget??24576),T){let b=this.config.reasoningEffort;if(b==="high"||b==="xhigh")D=fi.HIGH;else if(b==="medium")D=fi.MEDIUM;else if(b==="low")D=fi.LOW;else if(this.config.thinking)D=fi.MEDIUM}}let E=kp(n)?Dp:bp,F=o.maxTokens??this.config.maxOutputTokens??E,h={httpOptions:this.config.baseUrl?{baseUrl:this.config.baseUrl,headers:this.getRequestHeaders()}:void 0,abortSignal:c,systemInstruction:e,temperature:o.temperature??1,maxOutputTokens:F};if(u&&d&&(T||R>0))h.thinkingConfig={thinkingBudget:T?void 0:R,thinkingLevel:D,includeThoughts:!0};if(t&&t.length>0){let f=Ai(t);h.tools=[{functionDeclarations:f}],h.toolConfig={functionCallingConfig:{mode:Wp.AUTO}}}try{let f=await i.models.generateContentStream({model:n,contents:p,config:h}),b=0,v=0,A=0,P=0,S=0;for await(let O of f){let Oe=O?.candidates?.[0]?.content?.parts??[];for(let N of Oe){if(N.thought&&N.text)yield{type:"reasoning",reasoning:N.text||"",signature:N.thoughtSignature,id:r};else if(N.text)yield{type:"text",text:N.text,id:r,signature:N.thoughtSignature};if(N.functionCall){let ne=N.functionCall,at=ne.id??`${r}_tool_${S++}`;if(ne.name)yield{type:"tool_calls",tool_call:{call_id:at,function:{id:at,name:ne.name,arguments:ne.args??{}}},id:r,signature:N.thoughtSignature}}}if(O.usageMetadata)b=O.usageMetadata.promptTokenCount??b,v=O.usageMetadata.candidatesTokenCount??v,P=O.usageMetadata.thoughtsTokenCount??P,A=O.usageMetadata.cachedContentTokenCount??A}let z=this.calculateGeminiCost(b,v,P,A);yield{type:"usage",inputTokens:b,outputTokens:v,thoughtsTokenCount:P,cacheReadTokens:A,cacheWriteTokens:0,totalCost:z,id:r},yield{type:"done",success:!0,id:r}}catch(f){if(f instanceof Error&&f.message.includes("429"))throw new Le(f.message,void 0,{cause:f});throw f}}calculateGeminiCost(e,a,t,i){return this.calculateCost(e,a+t,i)}}import Gp from"openai";function Ei(e,a=!1){let t=a?e.map((i)=>i.role).lastIndexOf("user"):-1;return e.flatMap((i,n)=>Rp(i,a&&n===t))}function Rp(e,a){let{role:t,content:i}=e;if(typeof i==="string"){if(t!=="user"||!a)return[{role:t,content:i}];return[{role:t,content:[{type:"text",text:i,cache_control:{type:"ephemeral"}}]}]}if(t==="assistant")return[Tp(i)];else return Mp(i,a)}function Tp(e){let a=[],t=[],i=[],n=[];for(let c of e)switch(c.type){case"text":a.push(c.text);break;case"tool_use":{let r=c;t.push({id:r.id,type:"function",function:{name:r.name,arguments:JSON.stringify(I(r.input))}});break}case"thinking":{let r=c;if(r.thinking)i.push(r.thinking);let p=Array.isArray(r.details)?r.details:Array.isArray(r.summary)?r.summary:[];if(p.length>0)n.push(...p);break}}let o={role:"assistant",content:a.length>0?a.join(`
|
|
13
13
|
`):null};if(t.length>0)o.tool_calls=t;if(i.length>0){let c=i.join(`
|
|
14
|
-
`);o.reasoning=c,o.reasoning_content=c}if(n.length>0)o.reasoning_details=n;return o}function Mp(e,a){let t=[],i=e.filter((c)=>c.type==="tool_result");for(let c of i)t.push({role:"tool",tool_call_id:c.tool_use_id,content:te(c.content)});let n=e.filter((c)=>c.type!=="tool_result");if(n.length===0)return t;let o=[];for(let c of n)switch(c.type){case"text":o.push({type:"text",text:c.text});break;case"file":{let r=c;o.push({type:"text",text:X(r.path,r.content)});break}case"image":{let r=c;o.push({type:"image_url",image_url:{url:`data:${r.mediaType};base64,${r.data}`}});break}}if(o.length===0)return t;if(a){for(let c=o.length-1;c>=0;c--)if(o[c].type==="text"){o[c]={...o[c],cache_control:{type:"ephemeral"}};break}}return t.push({role:"user",content:o.length===1&&o[0].type==="text"&&!a?o[0].text:o}),t}function Sn(e,a){let t=a?.strict??!0;return e.map((i)=>({type:"function",function:{name:i.name,description:i.description,parameters:i.inputSchema,strict:t}}))}function za(e,a){if(!e||e.length===0)return{};return{tools:Sn(e,a),tool_choice:"auto"}}class ta{toolCalls=new Map;processToolCallDeltas(e,a){let t=[];for(let i of e){let{index:n,id:o}=i,c=i.function,r=this.toolCalls.get(n);if(!r)r={id:"",name:"",arguments:""},this.toolCalls.set(n,r);if(o)r.id=o;if(c?.name)r.name=c.name;let p=c?.arguments,u=this.normalizeArgumentsDelta(r.arguments,p);if(u)r.arguments+=u;if(r.id&&r.name)t.push({type:"tool_calls",id:a,tool_call:{call_id:r.id,function:{id:r.id,name:r.name,arguments:u}}})}return t}getToolCalls(){return Array.from(this.toolCalls.values()).map((e)=>({call_id:e.id,function:{id:e.id,name:e.name,arguments:e.arguments}}))}reset(){this.toolCalls.clear()}normalizeArgumentsDelta(e,a){if(a==null)return"";let t=typeof a==="string"?a:JSON.stringify(a);if(!t)return"";if(e&&t.length>=e.length&&t.startsWith(e))return t.slice(e.length);return t}}var _p="medium";function Ap(e){let a={};if(typeof e.thinking==="boolean")a.enabled=e.thinking;if(e.effort)a.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)a.max_tokens=e.budgetTokens;return Object.keys(a).length>0?a:void 0}class ia extends C{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let a=j(Q(this.config),this.config.apiKey);if(!a)throw Error(Z(Q(this.config)));let t=this.getRequestHeaders();this.client=new Gp({apiKey:a,baseURL:e,defaultHeaders:t})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...a,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,a){let t=this.getModel(),i=this.supportsPromptCache(t.info);return[i?{role:"system",content:[{type:"text",text:e,cache_control:{type:"ephemeral"}}]}:{role:"system",content:e},...Ei(a,i)]}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.ensureClient(),{id:n,info:o}=this.getModel(),c=this.createResponseId(),r=Q(this.config),p=this.getMessages(e,a),u={model:n,messages:p,stream:!0,stream_options:{include_usage:!0},...za(t,{strict:r!=="openrouter"})};if(r==="openrouter"&&n.startsWith("anthropic/"))u.cache_control={type:"ephemeral"};let d=o.maxTokens??this.config.maxOutputTokens;if(d)u.max_completion_tokens=d;if(!(o.capabilities?.includes("reasoning")??!1))u.temperature=o.temperature??0;let D=o.capabilities?.includes("reasoning-effort")||o.capabilities?.includes("reasoning")||!1,T=this.config.reasoningEffort??(this.config.thinking?_p:void 0);if(r==="openrouter"){let P=Ap({thinking:this.config.thinking,effort:T,budgetTokens:this.config.thinkingBudgetTokens});if(P)u.reasoning=P}else if(D&&T)u.reasoning_effort=T;let E=this.getRequestHeaders(),F=Object.keys(E).some((P)=>P.toLowerCase()==="authorization"),h=j(r,this.config.apiKey);if(!F&&h)E.Authorization=`Bearer ${h}`;let f=this.getAbortSignal(),b;try{b=await i.chat.completions.create(u,{signal:f,headers:E})}catch(P){throw this.normalizeOpenAICompatibleBadRequest(P)??P}let v=new ta,A=null;for await(let P of b){let S=P.choices?.[0];if(S?.finish_reason)A=S.finish_reason;yield*this.withResponseIdForAll(this.processChunk(P,v,o,c),c)}yield{type:"done",success:!0,id:c,incompleteReason:A==="length"?"max_tokens":void 0}}*processChunk(e,a,t,i){let n=e.choices?.[0]?.delta,o=n&&{...n,reasoning:typeof n.reasoning==="string"?n.reasoning??"":void 0,reasoning_content:n.reasoning_content,reasoning_details:n.reasoning_details};if(o?.content)yield{type:"text",text:o.content,id:i};if(o?.reasoning_content||o?.reasoning||Array.isArray(o?.reasoning_details)&&o.reasoning_details.length>0)yield{type:"reasoning",reasoning:o.reasoning_content??o.reasoning??"",details:o.reasoning_details,id:i};if(o?.tool_calls)yield*a.processToolCallDeltas(o.tool_calls.map((c)=>({index:c.index,id:c.id,function:c.function})),i);if(e.usage){let c=e.usage.prompt_tokens??0,r=e.usage.completion_tokens??0,p=e.usage,u=p.prompt_tokens_details?.cached_tokens??p.cache_read_input_tokens??0,d=p.prompt_tokens_details?.cache_write_tokens??p.cache_creation_input_tokens??0;yield{type:"usage",inputTokens:c,outputTokens:r,cacheReadTokens:u,cacheWriteTokens:d,thoughtsTokenCount:p.completion_tokens_details?.reasoning_tokens,totalCost:this.calculateCostFromInclusiveInput(c,r,u,d),id:i}}}}import{createOpenAICompatible as fp}from"@ai-sdk/openai-compatible";import
|
|
14
|
+
`);o.reasoning=c,o.reasoning_content=c}if(n.length>0)o.reasoning_details=n;return o}function Mp(e,a){let t=[],i=e.filter((c)=>c.type==="tool_result");for(let c of i)t.push({role:"tool",tool_call_id:c.tool_use_id,content:te(c.content)});let n=e.filter((c)=>c.type!=="tool_result");if(n.length===0)return t;let o=[];for(let c of n)switch(c.type){case"text":o.push({type:"text",text:c.text});break;case"file":{let r=c;o.push({type:"text",text:X(r.path,r.content)});break}case"image":{let r=c;o.push({type:"image_url",image_url:{url:`data:${r.mediaType};base64,${r.data}`}});break}}if(o.length===0)return t;if(a){for(let c=o.length-1;c>=0;c--)if(o[c].type==="text"){o[c]={...o[c],cache_control:{type:"ephemeral"}};break}}return t.push({role:"user",content:o.length===1&&o[0].type==="text"&&!a?o[0].text:o}),t}function Sn(e,a){let t=a?.strict??!0;return e.map((i)=>({type:"function",function:{name:i.name,description:i.description,parameters:i.inputSchema,strict:t}}))}function za(e,a){if(!e||e.length===0)return{};return{tools:Sn(e,a),tool_choice:"auto"}}class ta{toolCalls=new Map;processToolCallDeltas(e,a){let t=[];for(let i of e){let{index:n,id:o}=i,c=i.function,r=this.toolCalls.get(n);if(!r)r={id:"",name:"",arguments:""},this.toolCalls.set(n,r);if(o)r.id=o;if(c?.name)r.name=c.name;let p=c?.arguments,u=this.normalizeArgumentsDelta(r.arguments,p);if(u)r.arguments+=u;if(r.id&&r.name)t.push({type:"tool_calls",id:a,tool_call:{call_id:r.id,function:{id:r.id,name:r.name,arguments:u}}})}return t}getToolCalls(){return Array.from(this.toolCalls.values()).map((e)=>({call_id:e.id,function:{id:e.id,name:e.name,arguments:e.arguments}}))}reset(){this.toolCalls.clear()}normalizeArgumentsDelta(e,a){if(a==null)return"";let t=typeof a==="string"?a:JSON.stringify(a);if(!t)return"";if(e&&t.length>=e.length&&t.startsWith(e))return t.slice(e.length);return t}}var _p="medium";function Ap(e){let a={};if(typeof e.thinking==="boolean")a.enabled=e.thinking;if(e.effort)a.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)a.max_tokens=e.budgetTokens;return Object.keys(a).length>0?a:void 0}class ia extends C{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let a=j(Q(this.config),this.config.apiKey);if(!a)throw Error(Z(Q(this.config)));let t=this.getRequestHeaders();this.client=new Gp({apiKey:a,baseURL:e,defaultHeaders:t})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...a,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,a){let t=this.getModel(),i=this.supportsPromptCache(t.info);return[i?{role:"system",content:[{type:"text",text:e,cache_control:{type:"ephemeral"}}]}:{role:"system",content:e},...Ei(a,i)]}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.ensureClient(),{id:n,info:o}=this.getModel(),c=this.createResponseId(),r=Q(this.config),p=this.getMessages(e,a),u={model:n,messages:p,stream:!0,stream_options:{include_usage:!0},...za(t,{strict:r!=="openrouter"})};if(r==="openrouter"&&n.startsWith("anthropic/"))u.cache_control={type:"ephemeral"};let d=o.maxTokens??this.config.maxOutputTokens;if(d)u.max_completion_tokens=d;if(!(o.capabilities?.includes("reasoning")??!1))u.temperature=o.temperature??0;let D=o.capabilities?.includes("reasoning-effort")||o.capabilities?.includes("reasoning")||!1,T=this.config.reasoningEffort??(this.config.thinking?_p:void 0);if(r==="openrouter"){let P=Ap({thinking:this.config.thinking,effort:T,budgetTokens:this.config.thinkingBudgetTokens});if(P)u.reasoning=P}else if(D&&T)u.reasoning_effort=T;let E=this.getRequestHeaders(),F=Object.keys(E).some((P)=>P.toLowerCase()==="authorization"),h=j(r,this.config.apiKey);if(!F&&h)E.Authorization=`Bearer ${h}`;let f=this.getAbortSignal(),b;try{b=await i.chat.completions.create(u,{signal:f,headers:E})}catch(P){throw this.normalizeOpenAICompatibleBadRequest(P)??P}let v=new ta,A=null;for await(let P of b){let S=P.choices?.[0];if(S?.finish_reason)A=S.finish_reason;yield*this.withResponseIdForAll(this.processChunk(P,v,o,c),c)}yield{type:"done",success:!0,id:c,incompleteReason:A==="length"?"max_tokens":void 0}}*processChunk(e,a,t,i){let n=e.choices?.[0]?.delta,o=n&&{...n,reasoning:typeof n.reasoning==="string"?n.reasoning??"":void 0,reasoning_content:n.reasoning_content,reasoning_details:n.reasoning_details};if(o?.content)yield{type:"text",text:o.content,id:i};if(o?.reasoning_content||o?.reasoning||Array.isArray(o?.reasoning_details)&&o.reasoning_details.length>0)yield{type:"reasoning",reasoning:o.reasoning_content??o.reasoning??"",details:o.reasoning_details,id:i};if(o?.tool_calls)yield*a.processToolCallDeltas(o.tool_calls.map((c)=>({index:c.index,id:c.id,function:c.function})),i);if(e.usage){let c=e.usage.prompt_tokens??0,r=e.usage.completion_tokens??0,p=e.usage,u=p.prompt_tokens_details?.cached_tokens??p.cache_read_input_tokens??0,d=p.prompt_tokens_details?.cache_write_tokens??p.cache_creation_input_tokens??0;yield{type:"usage",inputTokens:c,outputTokens:r,cacheReadTokens:u,cacheWriteTokens:d,thoughtsTokenCount:p.completion_tokens_details?.reasoning_tokens,totalCost:this.calculateCostFromInclusiveInput(c,r,u,d),id:i}}}}import{createOpenAICompatible as fp}from"@ai-sdk/openai-compatible";import Ep from"zod";var Lp="medium";function Pp(e){let a={};if(typeof e.thinking==="boolean")a.enabled=e.thinking;if(e.effort)a.effort=e.effort;if(typeof e.budgetTokens==="number"&&e.budgetTokens>0)a.max_tokens=e.budgetTokens;return Object.keys(a).length>0?a:void 0}function Sp(e){return e.replace(/-([a-zA-Z0-9])/g,(a,t)=>t.toUpperCase())}function Op(e){if(!e||e.length===0)return;return Object.fromEntries(e.map((a)=>[a.name,{description:a.description,inputSchema:Ep.fromJSONSchema(a.inputSchema)}]))}class ie extends C{type="openai-compatible";provider;ensureProvider(){if(this.provider)return this.provider;let e=Q(this.config),a=this.config.baseUrl;if(!a)throw Error("Base URL is required. Set baseUrl in config.");let t=j(e,this.config.apiKey);if(!t)throw Error(Z(e));return this.provider=fp({name:e,apiKey:t,baseURL:a,headers:this.getRequestHeaders(),includeUsage:!0}),this.provider}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...a,id:e}}}getDefaultModelInfo(){let e=this.config.capabilities?.includes("prompt-cache")?["prompt-cache"]:[];return{id:this.config.modelId,capabilities:e}}getMessages(e,a){return he(e,a,{assistantToolCallArgKey:"args"})}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=await ea(),n=this.ensureProvider(),{id:o,info:c}=this.getModel(),r=this.createResponseId(),p=Q(this.config),u=c.capabilities?.includes("reasoning")??!1,d=c.capabilities?.includes("reasoning-effort")||c.capabilities?.includes("reasoning")||!1,R=this.config.reasoningEffort??(this.config.thinking?Lp:void 0),D=Sp(p),T={};if(p==="openrouter"){let h=Pp({thinking:this.config.thinking,effort:R,budgetTokens:this.config.thinkingBudgetTokens});if(h)T.reasoning=h}else if(d&&R)T.reasoningEffort=R;let E=Object.keys(T).length>0?{[D]:T}:void 0,F=i.streamText({model:n(o),messages:this.getMessages(e,a),tools:Op(t),maxTokens:c.maxTokens??this.config.maxOutputTokens,temperature:u?void 0:c.temperature??0,providerOptions:E,abortSignal:this.getAbortSignal()});yield*aa(F,{responseId:r,errorMessage:"OpenAI-compatible stream failed",calculateCost:(h,f,b,v)=>this.calculateCost(h,f,b,v),reasoningTypes:["reasoning-delta","reasoning"],enableToolCalls:!0,toolCallArgsOrder:["args","input"],toolCallFunctionIncludeId:!0,resolveUsageMetrics:(h)=>({inputTokens:Y(h.inputTokens),outputTokens:Y(h.outputTokens),thoughtsTokenCount:Y(h.reasoningTokens??h.thoughtsTokenCount),cacheReadTokens:Y(h.cachedInputTokens)})})}}import qp from"openai";var vp="medium";function Qp(e,a){if(!e?.length)return;return e.map((t)=>({type:"function",name:t.name,description:t.description,parameters:t.inputSchema}))}function Bp(e){let a=[],t=(o,c)=>{let r=c.map((p)=>p.text).join(`
|
|
15
15
|
`);if(!r)return;a.push({type:"message",role:o,content:[{type:o==="user"?"input_text":"output_text",text:r}]})},i=(o)=>o.type==="text",n=(o)=>o.call_id?.trim()||o.id;for(let o of e){if(o.role!=="user"&&o.role!=="assistant")continue;if(!Array.isArray(o.content)){if(o.content)t(o.role,[{type:"text",text:o.content}]);continue}let c=[],r=()=>{if(c.length===0)return;t(o.role,c),c=[]};for(let p of o.content){if(i(p)){c.push(p);continue}if(o.role==="assistant"&&p.type==="tool_use"){r();let u=p;a.push({type:"function_call",call_id:n(u),name:u.name,arguments:JSON.stringify(I(u.input))});continue}if(o.role==="user"&&p.type==="tool_result")r(),a.push({type:"function_call_output",call_id:p.tool_use_id,output:te(p.content)})}r()}return a}class Se extends C{type="openai";client;ensureClient(){if(!this.client){let e=this.config.baseUrl;if(!e)throw Error("Base URL is required. Set baseUrl in config.");let a=j(Q(this.config),this.config.apiKey);if(!a)throw Error(Z(Q(this.config)));let t=this.getRequestHeaders(),i=Object.keys(t).some((n)=>n.toLowerCase()==="authorization");this.client=new qp({apiKey:a,baseURL:e,defaultHeaders:i?t:{...t,Authorization:`Bearer ${a}`}})}return this.client}getModel(){let e=this.config.modelId;if(!e)throw Error("Model ID is required. Set modelId in config.");let a=this.config.modelInfo??this.config.knownModels?.[e]??this.getDefaultModelInfo();return{id:e,info:{...a,id:e}}}getDefaultModelInfo(){let e=[].filter((a)=>a!=="prompt-cache");return{id:this.config.modelId,capabilities:e}}getMessages(e,a){return Bp(a)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.ensureClient(),{id:n,info:o}=this.getModel(),c=this.getAbortSignal(),r=this.createResponseId(),p=Q(this.config),u,d=new Map,R=this.getMessages(e,a),D=Qp(t,{stripFormat:p==="openai-codex"});if(!D?.length)throw Error("OpenAI Responses API requires tools to be provided. Enable native tool calling in settings.");let T=o.capabilities?.includes("reasoning")??!1,E=this.config.reasoningEffort??(this.config.thinking?vp:void 0),F=T&&E?{effort:E,summary:"auto"}:void 0,h=this.getRequestHeaders(),f=Object.keys(h).some((A)=>A.toLowerCase()==="authorization"),b=j(p,this.config.apiKey);if(!f&&b)h.Authorization=`Bearer ${b}`;if(p==="openai-codex"&&typeof this.config.accountId==="string"&&this.config.accountId.trim().length>0){let A=this.config.accountId.trim();h["chatgpt-account-id"]=A,h["openai-account-id"]=A}let v;try{v=await i.responses.create({model:n,instructions:e,input:R,store:p==="openai-codex"?!1:void 0,stream:!0,tools:D,reasoning:F},{signal:c,headers:h})}catch(A){let P=this.normalizeOpenAICompatibleBadRequest(A);if(P)throw P;if(p==="openai-codex"){let S=A;if((S?.status??S?.response?.status??(typeof S?.message==="string"&&S.message.includes("400")?400:void 0))===400){let O=S?.error?.detail??S?.error?.message??(typeof S?.message==="string"?S.message:"");throw Error(`OpenAI Codex request was rejected (HTTP 400). ${O?`Detail: ${O}`:"Re-run 'clite auth openai-codex', verify model access, and ensure accountId is present in provider settings."}`,{cause:A})}}throw A}for await(let A of v){let P=this.getApiResponseId(A);if(P)u=P;yield*this.processResponseChunk(A,o,u??r,d)}}*processResponseChunk(e,a,t,i){switch(e.type){case"response.output_item.added":{let n=e.item;if(n.type==="function_call"&&n.id)i.set(n.id,{callId:n.call_id,name:n.name}),yield{type:"tool_calls",id:n.id||t,tool_call:{call_id:n.call_id,function:{id:n.id,name:n.name,arguments:n.arguments}}};if(n.type==="reasoning"&&n.encrypted_content&&n.id)yield{type:"reasoning",id:n.id||t,reasoning:"",redacted_data:n.encrypted_content};break}case"response.output_item.done":{let n=e.item;if(n.type==="function_call"){if(n.id)i.set(n.id,{callId:n.call_id,name:n.name});yield{type:"tool_calls",id:n.id||t,tool_call:{call_id:n.call_id,function:{id:n.id,name:n.name,arguments:n.arguments}}}}if(n.type==="reasoning")yield{type:"reasoning",id:n.id||t,details:n.summary,reasoning:""};break}case"response.reasoning_summary_part.added":yield{type:"reasoning",id:e.item_id||t,reasoning:e.part?.text||""};break;case"response.reasoning_summary_text.delta":yield{type:"reasoning",id:e.item_id||t,reasoning:e.delta||""};break;case"response.reasoning_summary_part.done":yield{type:"reasoning",id:e.item_id||t,details:e.part,reasoning:""};break;case"response.output_text.delta":if(e.delta)yield{id:e.item_id||t,type:"text",text:e.delta};break;case"response.reasoning_text.delta":if(e.delta)yield{id:e.item_id||t,type:"reasoning",reasoning:e.delta};break;case"response.function_call_arguments.delta":{let n=e.item_id?i.get(e.item_id):void 0;yield{type:"tool_calls",id:e.item_id||t,tool_call:{call_id:n?.callId,function:{id:e.item_id,name:n?.name,arguments:e.delta}}}}break;case"response.function_call_arguments.done":if(e.item_id&&e.arguments){let n=i.get(e.item_id);yield{type:"tool_calls",id:e.item_id||t,tool_call:{call_id:e.call_id??n?.callId,function:{id:e.item_id,name:e.name??n?.name,arguments:e.arguments}}}}break;case"response.incomplete":{yield{type:"done",success:!1,incompleteReason:e.response?.incomplete_details?.reason,id:e.response?.id||t};break}case"response.failed":{yield{type:"done",success:!1,error:e.response?.error?.message||"Unknown error",id:e.response?.id||t};break}case"response.completed":{if(e.response?.usage){let n=e.response.usage,o=n.input_tokens||0,c=n.output_tokens||0,r=n.input_tokens_details?.cached_tokens||0,p=0,u=this.calculateCostFromInclusiveInput(o,c,r,0);yield{type:"usage",inputTokens:o,outputTokens:c,cacheWriteTokens:0,cacheReadTokens:r,totalCost:u,id:e.response.id||t}}yield{type:"done",success:!0,id:e.response?.id||t};break}}}getApiResponseId(e){if(typeof e?.response?.id==="string"&&e.response.id.length>0)return e.response.id;if(typeof e?.response_id==="string"&&e.response_id.length>0)return e.response_id;return}}import y5 from"openai";var Cp="us-central1";function zc(e){return e.toLowerCase().includes("claude")}function Fp(e){if(!e||e.length===0)return;let a=ge(e);return Object.fromEntries(a.map((t)=>[t.name,{description:t.description,inputSchema:t.input_schema}]))}function Kp(e,a,t){let i=t?.promptCacheOn?[{type:"text",text:e,providerOptions:{anthropic:{cacheControl:{type:"ephemeral"}}}}]:e;return he(i,a,{assistantToolCallArgKey:"input"})}class et extends C{type="vertex";geminiHandler;vertexAnthropicModelFactory;vertexAnthropicModelFactoryPromise;getProjectId(){let e=this.config.gcp?.projectId?.trim();if(!e)throw Error("Vertex provider requires `gcp.projectId` in provider configuration.");return e}getConfiguredRegion(){return this.config.gcp?.region?.trim()||this.config.region?.trim()}getRequiredClaudeRegion(){let e=this.getConfiguredRegion();if(!e)throw Error("Vertex Claude models require `gcp.region` (or `region`) in provider configuration.");return e}getGeminiRegion(){return this.getConfiguredRegion()??Cp}ensureGeminiHandler(){if(!this.geminiHandler){let e=this.getProjectId(),a=this.getGeminiRegion();this.geminiHandler=new Pe({...this.config,region:a,gcp:{...this.config.gcp,projectId:e,region:a}})}return this.geminiHandler}async ensureVertexAnthropicModelFactory(){if(this.vertexAnthropicModelFactory)return this.vertexAnthropicModelFactory;if(!this.vertexAnthropicModelFactoryPromise)this.vertexAnthropicModelFactoryPromise=import("@ai-sdk/google-vertex/anthropic").then((e)=>{let a=e.createVertexAnthropic({project:this.getProjectId(),location:this.getRequiredClaudeRegion(),headers:this.getRequestHeaders(),baseURL:this.config.baseUrl}),t=(i)=>a(i);return this.vertexAnthropicModelFactory=t,t});try{return await this.vertexAnthropicModelFactoryPromise}catch(e){if(this.vertexAnthropicModelFactoryPromise=void 0,e instanceof Error&&e.message.includes("@ai-sdk/google-vertex"))throw Error('Vertex Claude models require @ai-sdk/google-vertex at runtime. Install workspace dependencies before using provider "vertex".',{cause:e});throw e}}getModel(){return Pn(this.config)}getMessages(e,a){let t=this.getModel();if(!zc(t.id))return this.ensureGeminiHandler().getMessages(e,a);let i=this.supportsPromptCache(t.info);return ze(a,i)}async*createMessage(e,a,t){yield*K(()=>this.createMessageInternal(e,a,t))}async*createMessageInternal(e,a,t){let i=this.getModel();if(!zc(i.id)){yield*this.ensureGeminiHandler().createMessage(e,a,t);return}let n=await ea(),o=await this.ensureVertexAnthropicModelFactory(),c=this.createResponseId(),r=this.config.thinkingBudgetTokens??0,p=Ya(i.info,"reasoning")&&r>0,u=this.supportsPromptCache(i.info),d={};if(p)d.anthropic={thinking:{type:"enabled",budgetTokens:r}};let R=n.streamText({model:o(i.id),messages:Kp(e,a,{promptCacheOn:u}),tools:Fp(t),maxTokens:i.info.maxTokens??this.config.maxOutputTokens??128000,temperature:p?void 0:0,providerOptions:Object.keys(d).length>0?d:void 0,abortSignal:this.getAbortSignal()});yield*aa(R,{responseId:c,errorMessage:"Vertex Anthropic stream failed",calculateCost:(D,T,E,F)=>this.calculateCost(D,T,E,F),reasoningTypes:["reasoning-delta"],enableToolCalls:!0,toolCallArgsOrder:["input","args"],toolCallFunctionIncludeId:!0,resolveUsageMetrics:(D,T)=>{let F=(T?.providerMetadata??{}).anthropic??{};return{inputTokens:Y(D.inputTokens),outputTokens:Y(D.outputTokens),thoughtsTokenCount:Y(D.reasoningTokens??D.thoughtsTokenCount),cacheReadTokens:Y(D.cachedInputTokens??F.cacheReadInputTokens),cacheWriteTokens:Y(F.cacheCreationInputTokens)}}})}}import{JSONParser as qd}from"@streamparser/json";Ta();function er(e){let a=y(e.providerId);if(a===e.providerId)return e;return{...e,providerId:a}}function ss(e,a){if(e.baseUrl)return e.baseUrl;if(e.oca?.mode==="internal")return pe;return a?.baseUrl??ee}function us(e){let a=e.modelId;return e.modelInfo?.apiFormat??(a?e.knownModels?.[a]?.apiFormat:void 0)}function ms(e){if(us(e)===oe.OPENAI_RESPONSES)return new Se(e);return new ie(e)}function ar(e,a){return{...e,baseUrl:Q(e)==="oca"?ss(e,a):e.baseUrl??a.baseUrl,modelId:e.modelId??a.modelId,knownModels:e.knownModels??a.knownModels,capabilities:e.capabilities??a.capabilities}}var On;function ls(){if(!On)On=on();return On}var ds={"claude-code":(e)=>new $a(e),"openai-codex":(e)=>new ja(e),opencode:(e)=>new Ja(e),sapaicore:(e)=>new Ha(e),mistral:(e)=>new Za(e),dify:(e)=>new Ia(e),asksage:(e)=>new Xa(e),oca:(e)=>ms(e)},gs={anthropic:(e)=>new ya(e),gemini:(e)=>new Pe(e),vertex:(e)=>new et(e),bedrock:(e)=>new Ti(e),openai:(e)=>new Se(e),fetch:(e)=>new ia(e),"ai-sdk-community":(e)=>new ia(e),"openai-compatible":(e)=>new ie(e)};function qn(e){let a=Q(e),t=ds[a];if(t)return t(e);let i=ls()[a];if(i){let n=gs[i];if(n)return n(e)}return}function vn(e){let a=er(e),{providerId:t}=a,i=Q(a);if(Ee(t)){if(Wi(t))throw Error(`Handler for "${t}" is registered as async. Use createHandlerAsync() instead.`);let o=xi(t,a);if(o)return o}let n=qn({...a,routingProviderId:i});if(n)return n;if(Ua(i)){if(a.modelCatalog?.loadLatestOnInit||a.modelCatalog?.loadPrivateOnAuth)throw Error(`Provider "${t}" has runtime model refresh enabled. Use createHandlerAsync() to allow async model refresh.`);let o=ae[i],c=ar({...a,routingProviderId:i},o);return qn(c)??new ie(c)}return a.baseUrl?new ie({...a,routingProviderId:i}):new Se({...a,routingProviderId:i,baseUrl:"https://api.openai.com/v1"})}async function tr(e){let a=er(e),{providerId:t}=a,i=Q(a);if(Ee(t)){let n=await hi(t,a);if(n)return n}if(Ua(i)){let n=await li(i,a.modelCatalog,{...a,routingProviderId:i});if(n){let o=ar({...a,routingProviderId:i},n);return qn(o)??new ie(o)}}return vn(a)}var xs=[...new Set([Ne.provider.id,"anthropic","asksage","bedrock","claude-code","opencode","mistral","dify","openai-native","gemini","vertex",...Object.keys(ae)])],hs=new Set(xs);function eg(e){let a=y(e);return hs.has(a)||Ee(a)||Ee(e)}function Qn(e){return e?{...e}:{}}function Ws(e,a){if(e)return e;if(!a)return;let t=globalThis.process;if(!t?.env)return;return t.env[a]}function Bn(e,a){if(!a.length)throw Error(`Provider "${e}" must include at least one model.`)}class Cn{providerConfigs=new Map;constructor(e){this.applyConfig(e)}createHandler(e){return vn(this.toProviderHandlerConfig(e))}async createHandlerAsync(e){return tr(this.toProviderHandlerConfig(e))}toProviderHandlerConfig(e){let a=this.requireConfiguredProvider(e.providerId),t=e.modelId??a.defaultModel;if(!a.models.has(t))throw Error(`Model "${t}" is not configured for provider "${e.providerId}".`);return{providerId:e.providerId,modelId:t,...a.defaults,...e.overrides}}registerProvider(e){if(si(e.collection),e.handlerFactory&&e.asyncHandlerFactory)throw Error(`Provider "${e.collection.provider.id}" cannot register both sync and async handlers.`);if(e.handlerFactory)di(e.collection.provider.id,e.handlerFactory);if(e.asyncHandlerFactory)gi(e.collection.provider.id,e.asyncHandlerFactory);let a=e.exposeModels??Object.keys(e.collection.models);Bn(e.collection.provider.id,a);let t=this.providerConfigs.get(e.collection.provider.id),i=e.defaultModel??e.collection.provider.defaultModelId??a[0];if(!i)throw Error(`Provider "${e.collection.provider.id}" must define a default model.`);if(!a.includes(i))throw Error(`Default model "${i}" is not included in configured models for "${e.collection.provider.id}".`);let n=new Set([...t?.models??[],...a]),o={...t?.defaults??{},...Qn(e.defaults)};this.providerConfigs.set(e.collection.provider.id,{id:e.collection.provider.id,models:n,defaultModel:i,defaults:o})}registerBuiltinProvider(e){let a=e.exposeModels??Object.keys(e.models);Bn(e.id,a);let t=e.defaultModel??a[0];if(!t)throw Error(`Provider "${e.id}" must define a default model.`);if(!a.includes(t))throw Error(`Default model "${t}" is not included in configured models for "${e.id}".`);si({provider:{id:e.id,name:e.name??e.id,description:e.description,protocol:e.protocol,baseUrl:e.baseUrl,defaultModelId:t,client:e.client??"openai-compatible",capabilities:e.capabilities,env:e.env},models:e.models});let i=this.providerConfigs.get(e.id);this.providerConfigs.set(e.id,{id:e.id,models:new Set([...i?.models??[],...a]),defaultModel:t,defaults:{...i?.defaults??{},routingProviderId:e.builtinProviderId,...Qn(e.defaults)}})}registerModel(e){Ca(e.providerId,e.modelId,e.info);let a=this.providerConfigs.get(e.providerId);if(!a){this.providerConfigs.set(e.providerId,{id:e.providerId,models:new Set([e.modelId]),defaultModel:e.modelId,defaults:{}});return}a.models.add(e.modelId)}getProviders(){return Array.from(this.providerConfigs.values()).map((e)=>({id:e.id,models:Array.from(e.models),defaultModel:e.defaultModel}))}getBuiltInProviderIds(){return[...Fa]}async getBuiltInProviders(){return(await Promise.all(Fa.map((a)=>F0(a)))).filter((a)=>a!==void 0).map((a)=>{let t=Object.keys(a.models);return{id:a.provider.id,name:a.provider.name,description:a.provider.description,protocol:a.provider.protocol,baseUrl:a.provider.baseUrl,capabilities:a.provider.capabilities,env:a.provider.env,models:t,defaultModel:a.provider.defaultModelId,modelCount:t.length}})}getModels(e){return Array.from(this.requireConfiguredProvider(e).models)}isProviderConfigured(e){return this.providerConfigs.has(e)}isModelConfigured(e,a){return this.providerConfigs.get(e)?.models.has(a)??!1}applyConfig(e){for(let a of e.providers){if(Bn(a.id,a.models),a.defaultModel&&!a.models.includes(a.defaultModel))throw Error(`Default model "${a.defaultModel}" is not included in configured models for "${a.id}".`);let t=a.defaultModel??a.models[0];if(!t)throw Error(`Provider "${a.id}" must define a default model.`);let i=Ws(a.apiKey,a.apiKeyEnv);this.providerConfigs.set(a.id,{id:a.id,models:new Set(a.models),defaultModel:t,defaults:{apiKey:i,routingProviderId:a.builtinProviderId,baseUrl:a.baseUrl,headers:a.headers,timeoutMs:a.timeoutMs,capabilities:a.capabilities,...Qn(a.settings)}})}for(let a of e.models??[])this.registerModel(a);for(let a of e.customProviders??[])this.registerProvider(a);for(let a of this.providerConfigs.values()){let t=pi(a.id),i=typeof a.defaults.routingProviderId==="string"?pi(a.defaults.routingProviderId):!1;if(!t&&!i)throw Error(`Provider "${a.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}requireConfiguredProvider(e){let a=this.providerConfigs.get(e);if(!a)throw Error(`Provider "${e}" is not configured in this SDK instance.`);return a}}function ws(e){return new Cn(e)}export{ws as createLlmsRuntime,Cn as DefaultLlmsRuntime};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clinebot/llms",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.26",
|
|
4
4
|
"description": "Config-driven SDK for selecting, extending, and instantiating LLM providers and models",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@ai-sdk/openai-compatible": "^2.0.37",
|
|
74
74
|
"@anthropic-ai/sdk": "^0.78.0",
|
|
75
75
|
"@aws-sdk/credential-providers": "^3.922.0",
|
|
76
|
-
"@clinebot/shared": "0.0.
|
|
76
|
+
"@clinebot/shared": "0.0.26",
|
|
77
77
|
"@google/genai": "^1.43.0",
|
|
78
78
|
"@streamparser/json": "^0.0.21",
|
|
79
79
|
"ai": "^6.0.112",
|