@robota-sdk/agent-provider 3.0.0-beta.64 → 3.0.0-beta.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -0
- package/dist/browser/index.d.ts +5 -2
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +3 -3
- package/dist/browser/index.js.map +1 -1
- package/dist/loggers/index.d.ts.map +1 -1
- package/dist/loggers/index.js.map +1 -1
- package/dist/node/anthropic/index.d.ts.map +1 -1
- package/dist/node/anthropic--1vgLC-e.js.map +1 -1
- package/dist/node/bytedance/index.d.ts.map +1 -1
- package/dist/node/bytedance-C_0sF_pJ.js.map +1 -1
- package/dist/node/deepseek/index.d.ts +1 -1
- package/dist/node/deepseek-_8Ixx7rA.js.map +1 -1
- package/dist/node/gemini/index.d.ts.map +1 -1
- package/dist/node/gemini-Bh2U87MY.js.map +1 -1
- package/dist/node/gemma/index.cjs +1 -1
- package/dist/node/gemma/index.d.ts +1 -1
- package/dist/node/gemma/index.js +1 -1
- package/dist/node/{gemma-G-Pf_PnX.cjs → gemma-079LPvrN.cjs} +1 -1
- package/dist/node/gemma-BMFWnmXE.js +2 -0
- package/dist/node/gemma-BMFWnmXE.js.map +1 -0
- package/dist/node/google/index.d.ts.map +1 -1
- package/dist/node/google/index.js.map +1 -1
- package/dist/node/index-B6PnlDMd.d.ts.map +1 -1
- package/dist/node/index-B7UvPJcI.d.ts.map +1 -1
- package/dist/node/{index-C3beaqKO.d.ts → index-B9a2gTwI.d.ts} +3 -3
- package/dist/node/{index-BqixM_XD.d.ts.map → index-B9a2gTwI.d.ts.map} +1 -1
- package/dist/node/index-BLPOTNb5.d.ts.map +1 -1
- package/dist/node/{index-BqixM_XD.d.ts → index-CjPeNJ1G.d.ts} +3 -3
- package/dist/node/{index-C3beaqKO.d.ts.map → index-CjPeNJ1G.d.ts.map} +1 -1
- package/dist/node/index-Cp2XRh9G.d.ts.map +1 -1
- package/dist/node/index-DSv5xruI.d.ts.map +1 -1
- package/dist/node/index-w0bV1uaP.d.ts.map +1 -1
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.ts +11 -5
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +2 -1
- package/dist/node/index.js.map +1 -0
- package/dist/node/openai/index.cjs +1 -1
- package/dist/node/openai/index.d.ts +1 -1
- package/dist/node/openai/index.js +1 -1
- package/dist/node/openai--CyyQ-E4.js +2 -0
- package/dist/node/openai--CyyQ-E4.js.map +1 -0
- package/dist/node/{openai-xWC6pY7r.cjs → openai-CmuDu5k-.cjs} +1 -1
- package/dist/node/openai-compatible-Dm4Sof9e.js.map +1 -1
- package/dist/node/qwen/index.cjs +1 -1
- package/dist/node/qwen/index.d.ts +1 -1
- package/dist/node/qwen/index.js +1 -1
- package/dist/node/qwen-D8gtsbsC.js +2 -0
- package/dist/node/qwen-D8gtsbsC.js.map +1 -0
- package/dist/node/qwen-DxNnm7Le.cjs +1 -0
- package/package.json +4 -2
- package/src/anthropic/index.ts +1 -1
- package/src/anthropic/message-converter.ts +3 -2
- package/src/anthropic/model-catalog-refresh.ts +5 -4
- package/src/anthropic/parsers/response-parser.ts +5 -2
- package/src/anthropic/provider-definition.ts +2 -1
- package/src/anthropic/provider.ts +6 -3
- package/src/anthropic/streaming-handler.ts +4 -2
- package/src/anthropic/types.ts +1 -1
- package/src/bytedance/http-client.ts +1 -1
- package/src/bytedance/provider.spec.ts +1 -0
- package/src/bytedance/provider.ts +10 -9
- package/src/bytedance/status-mapper.ts +1 -1
- package/src/deepseek/model-catalog-refresh.ts +6 -5
- package/src/deepseek/model-catalog.ts +2 -1
- package/src/deepseek/provider-definition.ts +3 -2
- package/src/deepseek/provider.ts +11 -9
- package/src/deepseek/types.ts +1 -1
- package/src/default-provider-definitions.ts +19 -0
- package/src/gemini/execution-helpers.ts +14 -12
- package/src/gemini/image-operations.ts +2 -2
- package/src/gemini/message-converter.ts +1 -0
- package/src/gemini/model-catalog-refresh.ts +2 -1
- package/src/gemini/provider-definition.ts +2 -1
- package/src/gemini/provider.spec.ts +2 -0
- package/src/gemini/provider.ts +6 -3
- package/src/gemini/tool-schema-converter.ts +1 -0
- package/src/gemma/message-factory.ts +2 -1
- package/src/gemma/provider-definition.ts +3 -2
- package/src/gemma/provider-projection.ts +4 -3
- package/src/gemma/provider.ts +19 -17
- package/src/gemma/pseudo-command-envelope.ts +1 -0
- package/src/gemma/pseudo-tool-call-projector.ts +2 -1
- package/src/gemma/streaming-projection.ts +6 -4
- package/src/gemma/tool-call-projector.ts +4 -3
- package/src/gemma/types.ts +1 -1
- package/src/google/provider.ts +1 -0
- package/src/index.ts +2 -0
- package/src/openai/adapter.ts +1 -1
- package/src/openai/chat-completions-chat.ts +8 -7
- package/src/openai/loggers/console-payload-logger.ts +4 -2
- package/src/openai/loggers/file-payload-logger.ts +5 -2
- package/src/openai/message-converter.ts +3 -2
- package/src/openai/openai-request-format.ts +1 -1
- package/src/openai/parsers/response-parser.ts +3 -2
- package/src/openai/provider-definition.ts +3 -2
- package/src/openai/provider.ts +11 -9
- package/src/openai/responses-chat.ts +7 -5
- package/src/openai/responses-converter.ts +6 -6
- package/src/openai/responses-parser.ts +4 -2
- package/src/openai/responses-types.ts +1 -1
- package/src/openai/streaming/stream-handler.ts +6 -4
- package/src/openai/types.ts +1 -2
- package/src/qwen/model-catalog-refresh.ts +6 -5
- package/src/qwen/provider-capabilities.ts +1 -1
- package/src/qwen/provider-definition.ts +6 -5
- package/src/qwen/provider-streaming-assembly.ts +3 -2
- package/src/qwen/provider.ts +19 -12
- package/src/qwen/responses-chat.ts +8 -6
- package/src/qwen/responses-converter.ts +1 -1
- package/src/qwen/responses-parser.ts +4 -2
- package/src/qwen/types.ts +1 -1
- package/src/shared/openai-compatible/message-converter.ts +1 -1
- package/src/shared/openai-compatible/response-parser.ts +4 -2
- package/src/shared/openai-compatible/stream-assembler.ts +3 -2
- package/src/shared/openai-compatible/types.ts +1 -1
- package/dist/node/gemma-Dp_AfCUR.js +0 -2
- package/dist/node/gemma-Dp_AfCUR.js.map +0 -1
- package/dist/node/openai-CRQjg4xF.js +0 -2
- package/dist/node/openai-CRQjg4xF.js.map +0 -1
- package/dist/node/qwen-ChUZobTL.js +0 -2
- package/dist/node/qwen-ChUZobTL.js.map +0 -1
- package/dist/node/qwen-CjT71vSM.cjs +0 -1
package/dist/browser/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import{randomUUID as e}from"node:crypto";import t from"@anthropic-ai/sdk";import{AbstractAIProvider as n,CLAUDE_MODELS as r,SilentLogger as i,getModelMaxOutput as a,isAssistantMessage as o}from"@robota-sdk/agent-core";import s from"openai";import{GoogleGenAI as c,Type as l}from"@google/genai";function u(e){return e.map(e=>{if(e.role===`user`)return{role:`user`,content:e.content||``};if(e.role===`assistant`){let t=e;if(t.toolCalls&&t.toolCalls.length>0){let e=[];t.content&&e.push({type:`text`,text:t.content});for(let n of t.toolCalls)e.push({type:`tool_use`,id:n.id,name:n.function.name,input:JSON.parse(n.function.arguments)});return{role:`assistant`,content:e}}return{role:`assistant`,content:t.content||``}}else if(e.role===`tool`)return{role:`user`,content:[{type:`tool_result`,tool_use_id:e.toolCallId??``,content:e.content||``}]};else return{role:`user`,content:e.content||``}})}function d(e){if(!Array.isArray(e.content))return``;let t=e.content.filter(e=>e.type===`web_search_result`&&`title`in e&&`url`in e).map((e,t)=>`${t+1}. ${e.title}\n ${e.url}`).join(`
|
|
2
2
|
`);return t?`[Web Search Results]\n${t}`:``}function f(e){return e.map(e=>({name:e.name,description:e.description,input_schema:e.parameters}))}async function p(t,n,r,i,a,o){let s={...n,stream:!0};o?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`request`,payload:s});let c=await t.messages.create(s,a?{signal:a}:void 0),l=[],u=[],f=``,p=``,m=``,h={input_tokens:0,output_tokens:0},g=``,_=null;try{let e=0;for await(let t of te(c,a))switch(o?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`stream_event`,sequence:e,payload:t}),e++,t.type){case`message_start`:h=t.message.usage,g=t.message.model;break;case`content_block_start`:if(t.content_block.type===`tool_use`)f=t.content_block.id,p=t.content_block.name,m=``;else if(t.content_block.type===`server_tool_use`){let e=t.content_block,n=e.input?.query??``,a=n?`\n🔍 Searching: "${n}"\n`:`\n🔍 [${e.name??`server_tool`}]\n`;l.push(a),r(a),i&&i(e.name??`server_tool`,{query:n})}else if(t.content_block.type===`web_search_tool_result`){let e=t.content_block,n=d(e);n&&(l.push(`\n${n}\n\n`),r(`\n${n}\n\n`))}break;case`content_block_delta`:t.delta.type===`text_delta`?(l.push(t.delta.text),r(t.delta.text)):t.delta.type===`input_json_delta`&&(m+=t.delta.partial_json);break;case`content_block_stop`:f&&(u.push({id:f,type:`function`,function:{name:p,arguments:m||`{}`}}),f=``,p=``,m=``);break;case`message_delta`:t.usage&&(h.output_tokens=t.usage.output_tokens),_=t.delta.stop_reason;break}}catch(e){if(e instanceof Error&&e.name===`AbortError`)return ee(l,u,h,g);throw e}if(a?.aborted)return ee(l,u,h,g);let ne=l.join(``)||``,v={id:e(),role:`assistant`,content:ne,state:`complete`,timestamp:new Date,...u.length>0&&{toolCalls:u}};return v.metadata={inputTokens:h.input_tokens,outputTokens:h.output_tokens,model:g},_&&(v.metadata.stopReason=_),v}function ee(t,n,r,i){let a=t.join(``)||``,o={id:e(),role:`assistant`,content:a,state:`complete`,timestamp:new Date,...n.length>0&&{toolCalls:n}};return o.metadata={inputTokens:r.input_tokens,outputTokens:r.output_tokens,model:i,stopReason:`aborted`},o}async function*te(e,t){for await(let n of e){if(t?.aborted)break;yield n}}var m=class extends n{name=`anthropic`;version=`1.0.0`;client;options;enableWebTools=!1;onTextDelta;onServerToolUse;constructor(e){if(super(),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new t({apiKey:e.apiKey,...e.timeout&&{timeout:e.timeout},...e.baseURL&&{baseURL:e.baseURL}});else throw Error(`Either Anthropic client, apiKey, or executor is required`)}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw e}if(!this.client)throw Error(`Anthropic client not available. Either provide a client/apiKey or use an executor.`);let n=e.filter(e=>e.role===`system`),r=u(e.filter(e=>e.role!==`system`)),i=n.map(e=>e.content||``).join(`
|
|
3
3
|
|
|
4
|
-
`)||void 0;if(!t?.model)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let o=t?.tools?f(t.tools):[],s=this.enableWebTools?[{type:`web_search_20250305`,name:`web_search`}]:[],c=[...o,...s],l={model:t.model,messages:r,max_tokens:t?.maxTokens||a(t.model),...i&&{system:i},...t?.temperature!==void 0&&{temperature:t.temperature},...c.length>0&&{tools:c}},d=t?.onTextDelta??this.onTextDelta??(()=>{});return p(this.client,l,d,this.onServerToolUse,t?.signal,t?.onProviderNativeRawPayload)}async*chatStream(t,n){if(this.validateMessages(t),this.validateNativeWebTools(n?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(t,n);return}catch(e){throw e}if(!this.client)throw Error(`Anthropic client not available. Either provide a client/apiKey or use an executor.`);let r=u(t);if(!n?.model)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let i={model:n.model,messages:r,max_tokens:n?.maxTokens||a(n.model),stream:!0};n?.temperature!==void 0&&(i.temperature=n.temperature);let o=n?.tools?f(n.tools):[],s=this.enableWebTools?[{type:`web_search_20250305`,name:`web_search`}]:[],c=[...o,...s];c.length>0&&(i.tools=c),n?.onProviderNativeRawPayload?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`request`,payload:i});let l=await this.client.messages.create(i),d=0;for await(let t of l)n?.onProviderNativeRawPayload?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`stream_event`,sequence:d,payload:t}),d++,t.type===`content_block_delta`&&t.delta.type===`text_delta`&&(yield{id:e(),role:`assistant`,content:t.delta.text,state:`complete`,timestamp:new Date})}supportsTools(){return!0}getCapabilities(){return{functionCalling:{supported:!0},nativeWebTools:{webSearch:this.enableWebTools?{supported:!0,enabled:!0,source:`anthropic-messages`}:{supported:!0,enabled:!1,source:`anthropic-messages`,reason:`Call configureNativeWebTools({ webSearch: true }) or set enableWebTools.`},webFetch:{supported:!1,enabled:!1,source:`anthropic-messages`,reason:`Anthropic provider exposes server web search only.`}}}}configureNativeWebTools(e){return e.webSearch===!0&&(this.enableWebTools=!0),this.validateNativeWebTools(e),this.getCapabilities()}validateConfig(){return!!this.client&&!!this.options&&!!this.options.apiKey}async dispose(){}validateMessages(e){if(!Array.isArray(e))throw Error(`Messages must be an array`);if(e.length===0)throw Error(`Messages array cannot be empty`);for(let t of e)if(!t.role||![`user`,`assistant`,`system`,`tool`].includes(t.role))throw Error(`Invalid message role: ${t.role}`)}};async function h(e,t=ne){return g(e,t)}async function g(e,t){let n=await t(`https://api.anthropic.com/v1/models`,_(e.apiKey)).catch(e=>({ok:!1,status:0,json:()=>Promise.resolve({data:[]}),errorMessage:`Anthropic model refresh failed: ${e instanceof Error?e.message:String(e)}`}));if(`errorMessage`in n)return{status:`unavailable`,sourceUrl:y,message:n.errorMessage};if(!n.ok)return{status:`unavailable`,sourceUrl:y,message:`Anthropic model refresh failed: HTTP ${n.status}`};let r=await n.json(),i=new Date().toISOString(),a=(r.data??[]).filter(e=>typeof e.id==`string`&&e.id.length>0).map(e=>({id:e.id,displayName:e.display_name??e.id,lifecycle:`active`,sourceUrl:y,lastVerifiedAt:i}));return{status:`live`,sourceUrl:y,lastVerifiedAt:b,entries:a,message:`Fetched ${a.length} models from Anthropic API`}}function _(e){if(e)return{headers:{"x-api-key":e,"anthropic-version":`2023-06-01`}}}async function ne(e,t){let n=await fetch(e,{...t?.headers!==void 0&&{headers:t.headers}});return{ok:n.ok,status:n.status,json:()=>n.json()}}const v=`claude-sonnet-4-6`,re=`ANTHROPIC_API_KEY`,ie=`$ENV:${re}`,y=`https://platform.claude.com/docs/en/api/models/list`,b=`2026-05-04`,ae=[{kind:`api-key`,label:`Anthropic API keys`,url:`https://platform.claude.com/settings/keys`,sourceUrl:`https://platform.claude.com/docs/en/api/overview`,lastVerifiedAt:`2026-05-08`}];function oe(){return{type:`anthropic`,displayName:`Anthropic`,description:`Claude models through Anthropic API`,defaults:{model:v,apiKey:ie},modelCatalog:{status:`fallback`,sourceUrl:y,lastVerifiedAt:b,entries:se()},setupHelpLinks:ae,setupSteps:[{key:`apiKey`,title:`Anthropic API key`,defaultValue:ie,masked:!0},{key:`model`,title:`Anthropic model`,defaultValue:v}],refreshModelCatalog:({profile:e})=>h(e),modelCatalogCacheTtlSeconds:86400,requiresApiKey:!0,createProvider:e=>new m({apiKey:ce(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},defaultModel:e.model})}}function se(){let e=new Set,t=[];for(let n of Object.values(r))e.has(n.name)||(e.add(n.name),t.push({id:n.id,displayName:n.name,contextWindow:n.contextWindow,capabilities:[`tools`,`vision`,`json_schema`,`reasoning`,`streaming`],lifecycle:`active`,sourceUrl:y,lastVerifiedAt:b}));return t}function ce(e){if(!e)throw Error(`Provider anthropic requires apiKey`);return e}function le(e){}function x(e){return e.map(e=>ue(e))}function S(e){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}function ue(e){if(e.role===`user`)return{role:`user`,content:e.content||``};if(e.role===`assistant`)return de(e);if(e.role===`system`)return{role:`system`,content:e.content||``};if(e.role===`tool`){if(!e.toolCallId||e.toolCallId.trim().length===0)throw Error(`Tool message missing toolCallId: ${JSON.stringify(e)}`);return{role:`tool`,content:e.content||``,tool_call_id:e.toolCallId}}throw Error(`Unsupported message role: ${JSON.stringify(e)}`)}function de(e){return e.toolCalls&&e.toolCalls.length>0?{role:`assistant`,content:e.content===``?null:e.content||null,tool_calls:e.toolCalls.map(e=>({id:e.id,type:`function`,function:{name:e.function.name,arguments:e.function.arguments}}))}:{role:`assistant`,content:e.content===null?null:e.content||``}}var C=class{logger;textProjector;toolCallTextProjector;constructor(e={}){this.logger=e.logger??i,this.textProjector=e.textProjector,this.toolCallTextProjector=e.toolCallTextProjector}parseResponse(e){try{let t=e.choices?.[0];if(!t)throw Error(`No choices found in OpenAI-compatible response`);return this.parseChoice(t,e.usage)}catch(e){let t=e instanceof Error?e.message:`OpenAI-compatible response parsing failed`;throw this.logger.error(`Response parsing failed`,{error:t}),Error(`OpenAI-compatible response parsing failed: ${t}`)}}parseChoice(t,n){let r=t.message,i=this.projectToolCallText(r.content||``),a=this.toolCallTextProjector?.flush(),o=this.parseNativeToolCalls(r),s=[...i.toolCalls,...a?.toolCalls??[]],c=[...o,...s];return{id:e(),state:`complete`,role:`assistant`,content:this.projectText(i.visibleText+(a?.visibleText??``)),timestamp:new Date,...c.length>0&&{toolCalls:c},...n&&{usage:this.parseUsage(n)},metadata:{finishReason:t.finish_reason||void 0,...this.buildToolTextMetadata(i,a)}}}parseNativeToolCalls(e){return e.tool_calls?.map(e=>({id:e.id,type:`function`,function:{name:e.function.name,arguments:e.function.arguments}}))||[]}parseUsage(e){return{promptTokens:e.prompt_tokens,completionTokens:e.completion_tokens,totalTokens:e.total_tokens}}parseStreamingChunk(t){try{let n=t.choices?.[0];if(!n)return null;let r=n.finish_reason,i=n.delta.tool_calls?.map(e=>({id:e.id||``,type:`function`,function:{name:e.function?.name||``,arguments:e.function?.arguments||``}}));return i?{id:e(),state:`complete`,role:`assistant`,content:``,timestamp:new Date,toolCalls:i,metadata:{isStreamChunk:!0,isComplete:r===`stop`||r===`tool_calls`}}:{id:e(),state:`complete`,role:`assistant`,content:this.projectText(n.delta.content||``),timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:r===`stop`||r===`tool_calls`}}}catch(e){let t=e instanceof Error?e.message:`OpenAI-compatible chunk parsing failed`;throw this.logger.error(`Chunk parsing failed`,{error:t}),Error(`OpenAI-compatible chunk parsing failed: ${t}`)}}projectText(e){return this.textProjector?this.textProjector(e):e}projectToolCallText(e){return this.toolCallTextProjector?.project(e)??{visibleText:e,toolCalls:[],removedToolCallText:!1}}buildToolTextMetadata(e,t){let n=[e.rawToolCallText,t?.rawToolCallText].filter(e=>typeof e==`string`&&e.length>0).join(``);return{...(e.removedToolCallText||(t?.removedToolCallText??!1))&&{toolCallTextProjected:!0},...n.length>0&&{rawToolCallText:n}}}};async function w(e){let t={textParts:[],toolCallParts:new Map,projectedToolCalls:[],rawToolCallTextParts:[],toolCallTextProjected:!1,model:``,finishReason:null};for await(let n of Se(e.stream,e.signal))fe(t,n,e);return he(t,e),ye(t,e.metadata)}function fe(e,t,n){t.model&&(e.model=t.model);let r=t.choices?.[0];r&&(e.finishReason=r.finish_reason??e.finishReason,pe(e,r.delta.content,n),ve(e,r.delta.tool_calls??[]))}function pe(e,t,n){if(!t)return;let r=ge(t,n.toolCallTextProjector);_e(e,r);let i=me(r.visibleText,n.textProjector);i.length!==0&&(e.textParts.push(i),n.onTextDelta?.(i))}function me(e,t){return t?t(e):e}function he(e,t){let n=t.toolCallTextProjector?.flush();if(n){_e(e,n);let r=me(n.visibleText,t.textProjector);r.length>0&&(e.textParts.push(r),t.onTextDelta?.(r))}let r=t.textProjectorFlush?.();r&&(e.textParts.push(r),t.onTextDelta?.(r))}function ge(e,t){return t?.project(e)??{visibleText:e,toolCalls:[],removedToolCallText:!1}}function _e(e,t){t.toolCalls.length>0&&e.projectedToolCalls.push(...t.toolCalls),t.removedToolCallText&&(e.toolCallTextProjected=!0),t.rawToolCallText&&t.rawToolCallText.length>0&&e.rawToolCallTextParts.push(t.rawToolCallText)}function ve(e,t){for(let n of t){let t=n.index??0,r=e.toolCallParts.get(t)??{id:``,name:``,arguments:``},i=n.function?.name??r.name;e.toolCallParts.set(t,{id:n.id??r.id,name:i,arguments:r.arguments+(n.function?.arguments??``)})}}function ye(t,n={}){let r={...n};t.model&&(r.model=t.model),t.finishReason&&(r.finishReason=t.finishReason),t.toolCallTextProjected&&(r.toolCallTextProjected=!0),t.rawToolCallTextParts.length>0&&(r.rawToolCallText=t.rawToolCallTextParts.join(``));let i=be(t);return{id:e(),role:`assistant`,content:t.textParts.join(``),state:`complete`,timestamp:new Date,...i.length>0&&{toolCalls:i},...Object.keys(r).length>0&&{metadata:r}}}function be(e){return[...xe(e.toolCallParts),...e.projectedToolCalls]}function xe(e){return Array.from(e.entries()).sort(([e],[t])=>e-t).map(([e,t])=>({id:t.id||`call_${e}`,type:`function`,function:{name:t.name,arguments:t.arguments||`{}`}}))}async function*Se(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Ce(n,t);if(e.done||(await we(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async function Ce(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}async function we(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}async function*T(e,t){let n=t.initialSequence??0;for await(let r of e)t.onProviderNativeRawPayload?.({provider:t.provider,...t.apiSurface!==void 0&&{apiSurface:t.apiSurface},payloadKind:`stream_event`,sequence:n,payload:r}),n++,yield r}async function E(e,t=Te){if(!e.baseURL)return{ok:!0,message:`Profile fields are valid; no endpoint probe configured.`};try{let n=await t(`${e.baseURL.replace(/\/$/,``)}/models`);if(!n.ok)return{ok:!1,message:`HTTP ${n.status}`};let r=((await n.json()).data??[]).map(e=>e.id).filter(e=>!!e);return{ok:!0,message:`${r.length} model(s) discovered`,models:r}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}}async function Te(e){let t=await fetch(e);return{ok:t.ok,status:t.status,json:()=>t.json()}}var Ee=class{parser;constructor(e){this.parser=new C({logger:e})}parseResponse(e){try{return this.parser.parseResponse(e)}catch(e){let t=De(e instanceof Error?e.message:`OpenAI response parsing failed`);throw Error(`OpenAI response parsing failed: ${t}`)}}parseStreamingChunk(e){try{return this.parser.parseStreamingChunk(e)}catch(e){let t=De(e instanceof Error?e.message:`OpenAI chunk parsing failed`);throw Error(`OpenAI chunk parsing failed: ${t}`)}}};function De(e){return e.replace(/^OpenAI-compatible response parsing failed: /,``).replace(/^OpenAI-compatible chunk parsing failed: /,``).replace(`OpenAI-compatible response`,`OpenAI response`)}function Oe(e){if(e.responseFormat===void 0||e.responseFormat===`text`)return;if(e.responseFormat===`json_object`)return{type:`json_object`};let t=Ae(e);return{type:`json_schema`,json_schema:{name:t.name,schema:t.schema,...t.description!==void 0&&{description:t.description},...t.strict!==void 0&&{strict:t.strict}}}}function ke(e){if(e.responseFormat===void 0||e.responseFormat===`text`)return;if(e.responseFormat===`json_object`)return{format:{type:`json_object`}};let t=Ae(e);return{format:{type:`json_schema`,name:t.name,schema:t.schema,...t.description!==void 0&&{description:t.description},...t.strict!==void 0&&{strict:t.strict}}}}function Ae(e){let t=e.jsonSchema;if(e.responseFormat!==`json_schema`)throw Error(`Unsupported OpenAI response format: ${e.responseFormat}`);if(!t?.schema)throw Error(`OpenAI jsonSchema.schema is required when responseFormat is json_schema`);return{name:t.name,schema:t.schema,...t.description!==void 0&&{description:t.description},...t.strict!==void 0&&{strict:t.strict}}}function je(e){return x(e)}function Me(e){return S(e)}async function Ne(e){let t=Re(e.client);try{let n=Fe(e);if(e.chatOptions?.onTextDelta??e.onTextDelta)return await Ie(t,e,{...n,stream:!0});await Le(e,n,`chat`),e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=await t.chat.completions.create(n);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`response`,payload:r}),e.responseParser.parseResponse(r)}catch(e){let t=e.message||`OpenAI API request failed`;throw Error(`OpenAI chat failed: ${t}`)}}async function*Pe(e){let t=Re(e.client);try{let n={...Fe(e),stream:!0};await Le(e,n,`stream`),e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=await t.chat.completions.create(n,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0);for await(let t of T(r,{provider:`openai`,apiSurface:`chat-completions`,onProviderNativeRawPayload:e.chatOptions?.onProviderNativeRawPayload})){let n=e.responseParser.parseStreamingChunk(t);n&&(yield n)}}catch(e){let t=e.message||`OpenAI API request failed`;throw Error(`OpenAI stream failed: ${t}`)}}function Fe(e){let t=je(e.messages),n=e.chatOptions?.model??e.providerOptions.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let r=Oe(e.providerOptions);return{model:n,messages:t,...e.chatOptions?.temperature!==void 0&&{temperature:e.chatOptions.temperature},...e.chatOptions?.maxTokens!==void 0&&{max_tokens:e.chatOptions.maxTokens},...e.chatOptions?.tools&&{tools:Me(e.chatOptions.tools),tool_choice:`auto`},...r!==void 0&&{response_format:r}}}async function Ie(e,t,n){try{return await Le(t,n,`stream`),t.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n}),w({stream:T(await e.chat.completions.create(n,t.chatOptions?.signal?{signal:t.chatOptions.signal}:void 0),{provider:`openai`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t.chatOptions?.onProviderNativeRawPayload}),onTextDelta:t.chatOptions?.onTextDelta??t.onTextDelta,signal:t.chatOptions?.signal})}catch(e){let t=e.message||`OpenAI streaming request failed`;throw Error(`OpenAI stream failed: ${t}`)}}async function Le(e,t,n){if(!e.payloadLogger?.isEnabled())return;let r={model:t.model,messagesCount:t.messages.length,hasTools:!!t.tools,temperature:t.temperature??void 0,maxTokens:t.max_tokens??void 0,timestamp:new Date().toISOString()};await e.payloadLogger.logPayload(r,n)}function Re(e){if(!e)throw Error(`OpenAI client not available. Either provide a client/apiKey or use an executor.`);return e}function ze(e){return e.flatMap(e=>Ve(e))}function Be(e,t){let n=e?.map(e=>({type:`function`,name:e.name,description:e.description,parameters:e.parameters,strict:t??!1}))??[];return n.length>0?n:void 0}function Ve(e){if(e.role===`user`)return[D(`user`,Ue(e.content,e.parts))];if(e.role===`system`)return[D(`system`,e.content)];if(e.role===`tool`){if(!e.toolCallId||e.toolCallId.trim().length===0)throw Error(`Tool message missing toolCallId: ${JSON.stringify(e)}`);return[{type:`function_call_output`,call_id:e.toolCallId,output:e.content||``}]}return He(e)}function He(e){let t=[];e.content&&e.content.length>0&&t.push(D(`assistant`,e.content));for(let n of e.toolCalls??[])t.push({type:`function_call`,call_id:n.id,name:n.function.name,arguments:n.function.arguments});return t.length===0&&t.push(D(`assistant`,``)),t}function Ue(e,t){if(!t||t.length===0)return e;let n=t.map(e=>We(e));return e.length>0&&!t.some(e=>e.type===`text`)?[{type:`input_text`,text:e},...n]:n}function We(e){return e.type===`text`?{type:`input_text`,text:e.text}:e.type===`image_uri`?{type:`input_image`,image_url:e.uri}:{type:`input_image`,image_url:`data:${e.mimeType};base64,${e.data}`}}function D(e,t){return{role:e,content:t}}async function*Ge(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Ke(n,t);if(e.done||t?.aborted)break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async function Ke(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}function qe(e){ut(e);let t=e.output??[];return Qe({content:e.output_text??it(t),toolCalls:tt(t),response:e,reasoning:O(t)})}async function Je(e){let t={textParts:[],toolCalls:[],reasoning:ct()};for await(let n of Ge(e.stream,e.signal))Ye(t,n,e.onTextDelta);return t.completedResponse===void 0?Qe({content:t.textParts.join(``),toolCalls:t.toolCalls,reasoning:t.reasoning}):Ze(t)}function Ye(e,t,n){if(t.type===`response.output_text.delta`){e.textParts.push(t.delta),n?.(t.delta);return}if(t.type===`response.completed`){e.completedResponse=t.response,k(e.reasoning,O(t.response.output??[]));return}if(t.type===`response.output_item.done`){Xe(e,t.item);return}if(t.type===`response.error`||t.type===`response.failed`||t.type===`response.incomplete`)throw Error(`OpenAI Responses API failed: ${dt(t)}`)}function Xe(e,t){if(nt(t)){e.toolCalls.push(rt(t));return}st(t)&&k(e.reasoning,O([t]))}function Ze(e){let t=e.completedResponse;if(t===void 0)throw Error(`OpenAI Responses stream completed without response metadata`);ut(t);let n=t.output??[],r=tt(n),i=e.textParts.length>0?e.textParts.join(``):t.output_text??it(n),a=O(n);return k(a,e.reasoning),Qe({content:i,toolCalls:r.length>0?r:e.toolCalls,response:t,reasoning:a})}function Qe(t){return{id:e(),role:`assistant`,content:t.content,state:`complete`,timestamp:new Date,...t.toolCalls.length>0&&{toolCalls:t.toolCalls},...t.response?.usage!==void 0&&{usage:et(t.response.usage)},metadata:$e(t.response,t.reasoning)}}function $e(e,t){return{providerApiSurface:`responses`,...e?.id!==void 0&&{responseId:e.id},...e?.model!==void 0&&{model:e.model},...e?.status!==void 0&&{finishReason:e.status},...t.reasoningSummaryCount>0&&{reasoningSummaryCount:t.reasoningSummaryCount,reasoningSummaries:t.reasoningSummaries},...t.hasEncryptedReasoning&&{hasEncryptedReasoning:!0}}}function et(e){return{promptTokens:e.input_tokens??0,completionTokens:e.output_tokens??0,totalTokens:e.total_tokens??0}}function tt(e){return e.filter(nt).map(e=>rt(e))}function nt(e){return e.type===`function_call`&&`call_id`in e&&`name`in e&&`arguments`in e}function rt(e){return{id:e.call_id,type:`function`,function:{name:e.name,arguments:e.arguments}}}function it(e){return e.filter(ot).flatMap(e=>e.content).map(at).join(``)}function at(e){return e.type===`refusal`?e.refusal:e.text}function ot(e){return e.type===`message`&&`content`in e&&Array.isArray(e.content)}function O(e){let t=ct();for(let n of e){if(!st(n))continue;let e=n.summary?.map(e=>e.text).filter(lt)??[];t.reasoningSummaryCount+=e.length,t.reasoningSummaries.push(...e),t.hasEncryptedReasoning=t.hasEncryptedReasoning||!!n.encrypted_content}return t}function st(e){return e.type===`reasoning`}function ct(){return{reasoningSummaryCount:0,reasoningSummaries:[],hasEncryptedReasoning:!1}}function k(e,t){e.reasoningSummaryCount+=t.reasoningSummaryCount,e.reasoningSummaries.push(...t.reasoningSummaries),e.hasEncryptedReasoning=e.hasEncryptedReasoning||t.hasEncryptedReasoning}function lt(e){return e!==void 0}function ut(e){if(e.status===`failed`||e.status===`incomplete`)throw Error(`OpenAI Responses API failed: ${e.error?.message??e.status}`)}function dt(e){return e.message??e.error?.message??e.response?.error?.message??`unknown error`}async function ft(e){let t=e.chatOptions?.onTextDelta??e.onTextDelta;if(t)return mt({...e,chatOptions:{...e.chatOptions,onTextDelta:t}});if(!e.client)throw Error(`OpenAI Responses client not available.`);try{let t=ht(e);e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`responses`,payloadKind:`request`,payload:t});let n=await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`responses`,payloadKind:`response`,payload:n}),qe(n)}catch(e){let t=e.message||`OpenAI Responses API request failed`;throw Error(`OpenAI responses failed: ${t}`)}}async function*pt(e){let t={deltas:[]},n=e.chatOptions?.onTextDelta??e.onTextDelta,r=mt({...e,chatOptions:{...e.chatOptions,onTextDelta:e=>{n?.(e),yt(t,_t(e))}}}).then(e=>bt(t,e)).catch(e=>xt(t,Tt(e)));yield*vt(t),await r}async function mt(e){if(!e.client)throw Error(`OpenAI Responses client not available.`);try{let t=gt(e);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`responses`,payloadKind:`request`,payload:t}),Je({stream:T(await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0),{provider:`openai`,apiSurface:`responses`,onProviderNativeRawPayload:e.chatOptions?.onProviderNativeRawPayload}),onTextDelta:e.chatOptions?.onTextDelta,signal:e.chatOptions?.signal})}catch(e){let t=e.message||`OpenAI Responses streaming request failed`;throw Error(`OpenAI responses stream failed: ${t}`)}}function ht(e){let t=e.chatOptions?.model??e.providerOptions.defaultModel;if(!t)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let n=Be(e.chatOptions?.tools,e.providerOptions.strictTools),r=ke(e.providerOptions);return{model:t,input:ze(e.messages),...n!==void 0&&{tools:n,tool_choice:`auto`},...e.chatOptions?.temperature!==void 0&&{temperature:e.chatOptions.temperature},...e.chatOptions?.maxTokens!==void 0&&{max_output_tokens:e.chatOptions.maxTokens},...r!==void 0&&{text:r},...e.providerOptions.reasoning!==void 0&&{reasoning:e.providerOptions.reasoning},...e.providerOptions.includeEncryptedReasoning===!0&&{include:[`reasoning.encrypted_content`]},...e.providerOptions.store!==void 0&&{store:e.providerOptions.store}}}function gt(e){return{...ht(e),stream:!0}}function _t(t){return{id:e(),role:`assistant`,content:t,state:`complete`,timestamp:new Date,metadata:{providerApiSurface:`responses`,isStreamChunk:!0,isComplete:!1}}}async function*vt(e){for(;;){let t=e.deltas.shift();if(t!==void 0){yield t;continue}if(e.error!==void 0)throw e.error;if(e.finalMessage!==void 0){yield wt(e.finalMessage);return}await St(e)}}function yt(e,t){e.deltas.push(t),Ct(e)}function bt(e,t){e.finalMessage=t,Ct(e)}function xt(e,t){e.error=t,Ct(e)}function St(e){return new Promise(t=>{e.wake=t})}function Ct(e){e.wake?.(),e.wake=void 0}function wt(e){return{...e,content:``,metadata:{...e.metadata,isStreamChunk:!0,isComplete:!0}}}function Tt(e){return e instanceof Error?e:Error(String(e))}var Et=class extends n{name=`openai`;version=`1.0.0`;client;options;apiSurface;payloadLogger;responseParser;onTextDelta;constructor(e){if(super(e.logger||i),this.options=e,this.apiSurface=Dt(e),kt(this.apiSurface,e.nativeWebTools),e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new s({apiKey:e.apiKey,...e.organization&&{organization:e.organization},...e.timeout&&{timeout:e.timeout},...e.baseURL&&{baseURL:e.baseURL}});else throw Error(`Either OpenAI client, apiKey, or executor is required`);this.responseParser=new Ee(this.logger),this.payloadLogger=e.payloadLogger}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`OpenAI Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}return this.apiSurface===`responses`?ft({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,onTextDelta:this.onTextDelta}):Ne({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,payloadLogger:this.payloadLogger,responseParser:this.responseParser,onTextDelta:this.onTextDelta})}async*chatStream(e,t){if(this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`OpenAI Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(this.apiSurface===`responses`){yield*pt({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,onTextDelta:this.onTextDelta});return}yield*Pe({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,payloadLogger:this.payloadLogger,responseParser:this.responseParser,onTextDelta:this.onTextDelta})}supportsTools(){return!0}getCapabilities(){let e=this.apiSurface===`chat-completions`?`openai-compatible-chat-completions`:`openai-responses`;return{functionCalling:{supported:!0},nativeWebTools:{webSearch:{supported:!1,enabled:!1,source:e,reason:Ot(this.apiSurface,`search`)},webFetch:{supported:!1,enabled:!1,source:e,reason:Ot(this.apiSurface,`fetch`)}}}}validateConfig(){return!!this.client&&!!this.options}async dispose(){}validateMessages(e){super.validateMessages(e);for(let t of e)if(t.role===`assistant`){let e=t;if(e.toolCalls&&e.toolCalls.length>0&&e.content===``)continue}}};function Dt(e){return e.apiSurface===void 0?e.baseURL?`chat-completions`:`responses`:e.apiSurface}function Ot(e,t){return e===`chat-completions`?`OpenAI-compatible Chat Completions endpoints support declared function tools, not provider-native web ${t}.`:`OpenAI Responses native web ${t} is not wired in this Robota provider version.`}function kt(e,t){if(!(t?.webSearch!==!0&&t?.webFetch!==!0))throw Error(`Provider openai native web search/fetch is not supported for apiSurface ${e} in this Robota provider version.`)}var At=class{static filterMessagesForOpenAI(e){return e.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`system`?!0:e.role===`tool`?!!(e.toolCallId&&e.toolCallId.trim()!==``&&e.toolCallId!==`unknown`):!1)}static toOpenAIFormat(e){return this.filterMessagesForOpenAI(e).map(e=>this.convertMessage(e))}static convertMessage(e){let t=e.role;if(t===`user`)return{role:`user`,content:e.content};if(t===`assistant`){let t=e;return t.toolCalls&&t.toolCalls.length>0?{role:`assistant`,content:t.content===``?null:t.content||null,tool_calls:t.toolCalls.map(e=>({id:e.id,type:`function`,function:{name:e.function.name,arguments:e.function.arguments}}))}:{role:`assistant`,content:t.content===null||t.content===``?null:t.content||``}}if(t===`system`)return{role:`system`,content:e.content};if(t===`tool`){if(!e.toolCallId||e.toolCallId.trim()===``)throw Error(`Tool message missing toolCallId: ${JSON.stringify(e)}`);return{role:`tool`,content:e.content,tool_call_id:e.toolCallId}}throw Error(`Unsupported message role: ${t}`)}static addSystemPromptIfNeeded(e,t){return!t||e.some(e=>e.role===`system`)?e:[{role:`system`,content:t},...e]}};const jt=`https://platform.openai.com/docs/api-reference/models/list`;async function Mt(e,t={}){if(!e.apiKey)return It(`OpenAI model catalog refresh requires apiKey.`);let n=t.fetcher??Lt,r=t.now??(()=>new Date),i=Nt(e.baseURL);try{let t=await n(i,{headers:{Authorization:`Bearer ${e.apiKey}`}});if(!t.ok)return It(Ft(t));let a=Pt(await t.json());return{status:`live`,entries:a,lastVerifiedAt:r().toISOString(),sourceUrl:jt,message:`${a.length} OpenAI model(s) discovered.`}}catch(e){return It(e instanceof Error?e.message:String(e))}}function Nt(e){return e?`${e.replace(/\/$/,``)}/models`:`https://api.openai.com/v1/models`}function Pt(e){return(e.data??[]).map(e=>e.id).filter(e=>e!==void 0&&e.trim().length>0).map(e=>({id:e,displayName:e,lifecycle:`active`}))}function Ft(e){let t=e.statusText?` ${e.statusText}`:``;return`OpenAI model catalog refresh failed: HTTP ${e.status}${t}`}function It(e){return{status:`unavailable`,sourceUrl:jt,message:e}}async function Lt(e,t){let n=await fetch(e,t);return{ok:n.ok,status:n.status,statusText:n.statusText,json:()=>n.json()}}const Rt=void 0,A=`$ENV:OPENAI_API_KEY`,zt=[{kind:`api-key`,label:`OpenAI API keys`,url:`https://platform.openai.com/api-keys`,sourceUrl:`https://developers.openai.com/api/reference/overview#authentication`,lastVerifiedAt:`2026-05-08`}];function Bt(){return{type:`openai`,displayName:`OpenAI`,description:`Official OpenAI Responses API provider`,defaults:{apiKey:A},modelCatalog:{status:`unavailable`,sourceUrl:`https://platform.openai.com/docs/api-reference/models/list`,message:`OpenAI model availability should be discovered live from GET /v1/models.`},setupHelpLinks:zt,setupSteps:[{key:`model`,title:`OpenAI model`,required:!0},{key:`apiKey`,title:`OpenAI API key`,defaultValue:A,masked:!0}],requiresApiKey:!0,probeProfile:E,refreshModelCatalog:({profile:e})=>Mt(e),modelCatalogCacheTtlSeconds:86400,createProvider:e=>{let t=Ht(e.options),n=Ut(e.options);return Gt(e.baseURL,t,n),new Et({apiKey:Vt(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},...t!==void 0&&{apiSurface:t},...n!==void 0&&{nativeWebTools:n},defaultModel:e.model})}}}function Vt(e){if(!e)throw Error(`Provider openai requires apiKey`);return e}function Ht(e){let t=e?.apiSurface;if(t===`responses`||t===`chat-completions`)return t}function Ut(e){let t=Wt(e?.nativeWebTools)??Wt(e?.builtInWebTools);if(t!==void 0)return t}function Wt(e){if(e==null||e instanceof Date||Array.isArray(e)||typeof e!=`object`)return;let t=e.webSearch,n=e.webFetch;return{...typeof t==`boolean`&&{webSearch:t},...typeof n==`boolean`&&{webFetch:n}}}function Gt(e,t,n){if(!(n?.webSearch!==!0&&n?.webFetch!==!0))throw Error(e!==void 0||t===`chat-completions`?`Provider openai profile uses an OpenAI-compatible Chat Completions endpoint; native web search/fetch is not supported for this profile. Use Robota local WebSearch/WebFetch tools or a provider with documented hosted web support.`:`Provider openai native web search/fetch is not wired in this Robota provider version. Use Robota local WebSearch/WebFetch tools or a provider with documented hosted web support.`)}const j=`deepseek-v4-flash`,Kt=`DEEPSEEK_API_KEY`,qt=`$ENV:${Kt}`,Jt=`https://api.deepseek.com`;var Yt=class extends n{name=`deepseek`;version=`1.0.0`;client;options;responseParser;onTextDelta;constructor(e){if(super(e.logger||i),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new s({apiKey:e.apiKey,baseURL:e.baseURL??`https://api.deepseek.com`,...e.timeout!==void 0&&{timeout:e.timeout}});else throw Error(`Either DeepSeek client, apiKey, or executor is required`);this.responseParser=new C({logger:this.logger})}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`DeepSeek Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}let n=this.getClient();try{let r=this.buildRequestParams(e,t),i=t?.onTextDelta??this.onTextDelta;if(i)return await this.chatWithStreamingAssembly({...r,stream:!0},{...t,onTextDelta:i});t?.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`request`,payload:r});let a=await n.chat.completions.create(r);return t?.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`response`,payload:a}),this.responseParser.parseResponse(a)}catch(e){let t=e.message||`DeepSeek API request failed`;throw Error(`DeepSeek chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`DeepSeek Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}let n=this.getClient();try{let r=this.buildStreamingRequestParams(e,t);t?.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`request`,payload:r});let i=T(await n.chat.completions.create(r),{provider:`deepseek`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t?.onProviderNativeRawPayload});for await(let e of this.streamWithAbort(i,t?.signal)){let t=this.responseParser.parseStreamingChunk(e);t&&(yield t)}}catch(e){let t=e.message||`DeepSeek API request failed`;throw Error(`DeepSeek stream failed: ${t}`)}}supportsTools(){return!0}getCapabilities(){return{functionCalling:{supported:!0},nativeWebTools:{webSearch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`DeepSeek OpenAI-compatible Chat Completions supports declared function tools, not provider-native web search.`},webFetch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`DeepSeek OpenAI-compatible Chat Completions supports declared function tools, not provider-native web fetch.`}}}}validateConfig(){return!!this.client&&!!this.options}async dispose(){}buildRequestParams(e,t){this.validateTools(t?.tools);let n=t?.model??this.options.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return{model:n,messages:x(e),...t?.temperature!==void 0&&{temperature:t.temperature},...t?.maxTokens!==void 0&&{max_tokens:t.maxTokens},...t?.tools&&{tools:S(t.tools),tool_choice:`auto`},...this.options.thinking!==void 0&&{thinking:{type:this.options.thinking}},...this.options.reasoningEffort!==void 0&&{reasoning_effort:this.options.reasoningEffort}}}buildStreamingRequestParams(e,t){return{...this.buildRequestParams(e,t),stream:!0}}getClient(){if(!this.client)throw Error(`DeepSeek client not available. Either provide a client/apiKey or use an executor.`);return this.client}async chatWithStreamingAssembly(e,t){let n=this.getClient();try{return t.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`request`,payload:e}),w({stream:T(await n.chat.completions.create(e,t.signal?{signal:t.signal}:void 0),{provider:`deepseek`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t.onProviderNativeRawPayload}),onTextDelta:t.onTextDelta,signal:t.signal})}catch(e){let t=e.message||`DeepSeek streaming request failed`;throw Error(`DeepSeek stream failed: ${t}`)}}};const M=`https://api-docs.deepseek.com/quick_start/pricing`,Xt=`https://api-docs.deepseek.com/api/list-models`,N=`2026-05-07`,P=`2026-07-24`,Zt=[{id:j,displayName:`DeepSeek V4 Flash`,contextWindow:1e6,capabilities:[`tools`,`reasoning`,`json_schema`,`streaming`],lifecycle:`active`,sourceUrl:M,lastVerifiedAt:N},{id:`deepseek-v4-pro`,displayName:`DeepSeek V4 Pro`,contextWindow:1e6,capabilities:[`tools`,`reasoning`,`json_schema`,`streaming`],lifecycle:`active`,sourceUrl:M,lastVerifiedAt:N},{id:`deepseek-chat`,displayName:`DeepSeek Chat compatibility alias, deprecated ${P}`,aliases:[j],contextWindow:1e6,capabilities:[`tools`,`json_schema`,`streaming`],lifecycle:`deprecated`,sourceUrl:M,lastVerifiedAt:N},{id:`deepseek-reasoner`,displayName:`DeepSeek Reasoner compatibility alias, deprecated ${P}`,aliases:[j],contextWindow:1e6,capabilities:[`reasoning`,`json_schema`,`streaming`],lifecycle:`deprecated`,sourceUrl:M,lastVerifiedAt:N}];function Qt(e){return Zt.find(t=>t.id===e)}async function $t(e,t=rn){let n=await t(`${nn(e.baseURL??`https://api.deepseek.com`)}/models`,en(e.apiKey));return n.ok?{status:`live`,sourceUrl:M,lastVerifiedAt:N,entries:((await n.json()).data??[]).map(e=>e.id).filter(e=>typeof e==`string`&&e.length>0).map(tn)}:{status:`unavailable`,sourceUrl:M,message:`DeepSeek model refresh failed: HTTP ${n.status}`}}function en(e){if(e)return{headers:{Authorization:`Bearer ${e}`}}}function tn(e){return Qt(e)??{id:e,displayName:e,lifecycle:`active`,sourceUrl:`https://api-docs.deepseek.com/quick_start/pricing`,lastVerifiedAt:`2026-05-07`}}function nn(e){return e.replace(/\/$/,``)}async function rn(e,t){let n=await fetch(e,{...t?.headers!==void 0&&{headers:t.headers}});return{ok:n.ok,status:n.status,json:()=>n.json()}}const an={status:`fallback`,sourceUrl:M,lastVerifiedAt:N,entries:Zt},on=[{kind:`api-key`,label:`DeepSeek API keys`,url:`https://platform.deepseek.com/api_keys`,sourceUrl:`https://api-docs.deepseek.com/`,lastVerifiedAt:`2026-05-08`}];function sn(){return{type:`deepseek`,displayName:`DeepSeek`,description:`DeepSeek OpenAI-compatible endpoint`,defaults:{model:j,apiKey:qt,baseURL:Jt},modelCatalog:an,setupHelpLinks:on,setupSteps:[{key:`baseURL`,title:`DeepSeek OpenAI-compatible base URL`,defaultValue:Jt},{key:`model`,title:`DeepSeek model`,defaultValue:j},{key:`apiKey`,title:`DeepSeek API key`,defaultValue:qt,masked:!0}],requiresApiKey:!0,probeProfile:E,refreshModelCatalog:({profile:e})=>$t(e),modelCatalogCacheTtlSeconds:86400,createProvider:e=>{let t=ln(e.options);return new Yt({apiKey:cn(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},...t.thinking!==void 0&&{thinking:t.thinking},...t.reasoningEffort!==void 0&&{reasoningEffort:t.reasoningEffort},defaultModel:e.model})}}}function cn(e){if(!e)throw Error(`Provider deepseek requires apiKey`);return e}function ln(e){let t=un(e?.thinking),n=dn(e?.reasoningEffort);return{...t!==void 0&&{thinking:t},...n!==void 0&&{reasoningEffort:n}}}function un(e){if(e===!0)return`enabled`;if(e===!1)return`disabled`;if(e===`enabled`||e===`disabled`)return e;let t=fn(e)?.type;return t===`enabled`||t===`disabled`?t:void 0}function dn(e){if(e===`low`||e===`medium`||e===`high`||e===`xhigh`||e===`max`)return e}function fn(e){if(!(e==null||e instanceof Date||Array.isArray(e)))return typeof e==`object`?e:void 0}function pn(e){return e?e.some(e=>e.type===`image_inline`||e.type===`image_uri`):!1}function mn(e){if(!e)return[];let t=[];for(let n of e)n.type===`image_inline`&&t.push({kind:`uri`,uri:`data:${n.mimeType};base64,${n.data}`,mimeType:n.mimeType});return t}function hn(e){let t=e.indexOf(`,`);if(t<0)return;let n=e.slice(0,t),r=e.slice(t+1);if(!n.endsWith(`;base64`))return;let i=n.replace(`data:`,``).replace(`;base64`,``).trim();if(!(i.length===0||r.trim().length===0))return{mimeType:i,data:r}}function gn(e){if(e.kind===`inline`)return e.mimeType.trim().length===0||e.data.trim().length===0?{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Inline image source requires non-empty mimeType and data.`}}:{ok:!0,value:{type:`image_inline`,mimeType:e.mimeType,data:e.data}};if(!e.uri.startsWith(`data:`))return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Google image provider supports only inline or data URI input sources.`}};let t=hn(e.uri);return t?{ok:!0,value:{type:`image_inline`,mimeType:t.mimeType,data:t.data}}:{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Data URI source must use base64 payload.`}}}function F(e,t,n){return n&&n.length>0?n:e.some(e=>pn(e.parts))?[`TEXT`,`IMAGE`]:t&&t.length>0?t:[`TEXT`]}function _n(e,t){return!t||t.length===0?!0:t.includes(e)}function vn(e,t,n){wn(t);let r=F(e,t.defaultResponseModalities,n?.google?.responseModalities);yn(n?.model,r,t);let i={responseModalities:r};return bn(i,n),xn(i,t,n),Sn(i,t),Cn(i,t),i}function yn(e,t,n){if(!(!e||!t.includes(`IMAGE`))&&!_n(e,n.imageCapableModels))throw Error(`Selected model "${e}" is not configured as image-capable for Google provider.`)}function bn(e,t){typeof t?.temperature==`number`&&(e.temperature=t.temperature),typeof t?.maxTokens==`number`&&(e.maxOutputTokens=t.maxTokens),typeof t?.google?.topP==`number`&&(e.topP=t.google.topP),typeof t?.google?.topK==`number`&&(e.topK=t.google.topK),typeof t?.google?.candidateCount==`number`&&(e.candidateCount=t.google.candidateCount),t?.google?.stopSequences&&t.google.stopSequences.length>0&&(e.stopSequences=t.google.stopSequences),t?.signal&&(e.abortSignal=t.signal)}function xn(e,t,n){let r=n?.google?.safetySettings??t.safetySettings;r&&r.length>0&&(e.safetySettings=r)}function Sn(e,t){t.responseMimeType&&(e.responseMimeType=t.responseMimeType),t.responseSchema&&(e.responseMimeType=t.responseMimeType??`application/json`,e.responseSchema=t.responseSchema),t.responseJsonSchema&&(e.responseMimeType=t.responseMimeType??`application/json`,e.responseJsonSchema=t.responseJsonSchema)}function Cn(e,t){t.thinkingConfig&&(e.thinkingConfig=t.thinkingConfig),t.toolConfig&&(e.toolConfig=t.toolConfig)}function wn(e){if(e.responseSchema&&e.responseJsonSchema)throw Error(`Gemini structured output options responseSchema and responseJsonSchema are mutually exclusive.`)}function Tn(e){let t=[],n=e.parts??[];for(let e of n){if(e.type===`text`){t.push({text:e.text});continue}if(e.type===`image_inline`){t.push({inlineData:{mimeType:e.mimeType,data:e.data}});continue}throw Error(`Google provider does not support image URI parts directly: ${e.uri}`)}return t.length===0&&typeof e.content==`string`&&e.content.length>0&&t.push({text:e.content}),t}function En(e){let t=[],n=[];for(let r of e){if(r.role===`user`){t.push({role:`user`,parts:Tn(r)});continue}if(r.role===`assistant`){t.push(Dn(r));continue}if(r.role===`tool`){t.push(On(r));continue}let e=kn(r);e.length>0&&n.push(e)}return{contents:t,...n.length>0&&{systemInstruction:n.join(`
|
|
5
|
-
`)}}}function
|
|
6
|
-
`)}function An(e){let t=e.name?.trim();if(!t)throw Error(`Google provider tool message requires a function name.`);return t}function jn(e){let t=JSON.parse(e);if(!Nn(t))throw Error(`Google provider tool call arguments must be a JSON object.`);return t}function Mn(e){let t=e.trim();if(t.length===0)return{output:null};try{let e=JSON.parse(t);return Nn(e)?e:{output:e}}catch{return{output:e}}}function Nn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const Pn={string:l.STRING,number:l.NUMBER,integer:l.INTEGER,boolean:l.BOOLEAN,array:l.ARRAY,object:l.OBJECT};function Fn(e){return e.map(e=>({name:e.name,description:e.description,parameters:{type:l.OBJECT,properties:In(e.parameters.properties),required:e.parameters.required}}))}function In(e){let t={};for(let[n,r]of Object.entries(e))t[n]=Ln(r);return t}function Ln(e){let t={},n=Rn(e.type);return n&&(t.type=n),e.description&&(t.description=e.description),e.enum&&(t.enum=e.enum.map(String)),e.items&&(t.items=Ln(e.items)),e.properties&&(t.properties=In(e.properties)),typeof e.minimum==`number`&&(t.minimum=e.minimum),typeof e.maximum==`number`&&(t.maximum=e.maximum),e.pattern&&(t.pattern=e.pattern),e.format&&(t.format=e.format),e.default!==void 0&&(t.default=e.default),t}function Rn(e){if(e!==`null`)return Pn[e]}function zn(){return`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Bn(t){let n=t.candidates?.[0];if(!n)throw Error(`No candidate in Gemini response`);let r=n.content;if(!r||!r.parts||r.parts.length===0)throw Error(`No content in Gemini response`);let i=Vn(r.parts),a={id:e(),state:`complete`,role:`assistant`,content:i.textValues.length>0?i.textValues.join(``):null,parts:i.messageParts,timestamp:new Date};if(i.functionCalls.length>0){let e=a;e.toolCalls=i.functionCalls.map(e=>({id:e.id??zn(),type:`function`,function:{name:Gn(e),arguments:JSON.stringify(e.args??{})}}))}let o=Wn(t);return o&&(a.metadata=o),a}function Vn(e){let t=[],n=[],r=[];for(let i of e)Hn(i,t,n),Un(i,n),i.functionCall&&r.push(i.functionCall);return{textValues:t,messageParts:n,functionCalls:r}}function Hn(e,t,n){typeof e.text==`string`&&(t.push(e.text),n.push({type:`text`,text:e.text}))}function Un(e,t){!e.inlineData||typeof e.inlineData.data!=`string`||typeof e.inlineData.mimeType!=`string`||t.push({type:`image_inline`,data:e.inlineData.data,mimeType:e.inlineData.mimeType})}function Wn(e){if(!(!e.usageMetadata||typeof e.usageMetadata.promptTokenCount!=`number`||typeof e.usageMetadata.candidatesTokenCount!=`number`||typeof e.usageMetadata.totalTokenCount!=`number`))return{promptTokens:e.usageMetadata.promptTokenCount,completionTokens:e.usageMetadata.candidatesTokenCount,totalTokens:e.usageMetadata.totalTokenCount}}function Gn(e){if(!e.name||e.name.trim().length===0)throw Error(`Gemini function call is missing a function name.`);return e.name}async function Kn(e,t,n,r,i=`gemini`){let a=Yn(t,r),o=F(n,t.defaultResponseModalities,r?.google?.responseModalities);if(r?.onTextDelta&&!o.includes(`IMAGE`))return Xn(e,t,n,r,i);let s=En(n),c=vn(n,t,{...r,model:a}),l=Jn(a,s.contents,c,r,s.systemInstruction);I(r,i,`request`,l);let u=await e.models.generateContent(l);I(r,i,`response`,u);let d=Bn(u);if(o.includes(`IMAGE`)&&!pn(d.parts))throw Error(`Gemini response did not include an image part while IMAGE modality was requested.`);return d}async function*qn(t,n,r,i,a=`gemini`){let o=Yn(n,i);if(F(r,n.defaultResponseModalities,i?.google?.responseModalities).includes(`IMAGE`))throw Error(`Google provider does not support streaming image modality responses.`);let s=En(r),c=vn(r,n,{...i,model:o}),l=Jn(o,s.contents,c,i,s.systemInstruction);I(i,a,`request`,l);let u=await t.models.generateContentStream(l),d=0;for await(let t of u){I(i,a,`stream_event`,t,d),d++;let n=Zn(t);n&&(i?.onTextDelta?.(n),yield{id:e(),role:`assistant`,content:n,state:`complete`,timestamp:new Date})}}function Jn(e,t,n,r,i){let a={...n};return r?.tools&&r.tools.length>0&&(a.tools=[{functionDeclarations:Fn(r.tools)}]),i&&(a.systemInstruction=i),{model:e,contents:t,config:a}}function Yn(e,t){let n=t?.model??e.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return n}async function Xn(t,n,r,i,a=`gemini`){let o=[];for await(let e of qn(t,n,r,i,a))typeof e.content==`string`&&o.push(e.content);let s=o.join(``);return{id:e(),role:`assistant`,content:s,parts:s.length>0?[{type:`text`,text:s}]:[],state:`complete`,timestamp:new Date}}function I(e,t,n,r,i){e?.onProviderNativeRawPayload?.({provider:t,apiSurface:`gemini-generate-content`,payloadKind:n,...i!==void 0&&{sequence:i},payload:r})}function Zn(e){let t=e.text;return typeof t==`function`?t():t}async function Qn(e,t,n){try{let r=mn((await e(t,{model:n,google:{responseModalities:[`TEXT`,`IMAGE`]}})).parts);return r.length===0?{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Google image response did not include image output parts.`}}:{ok:!0,value:{outputs:r,model:n}}}catch(e){return{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:e instanceof Error?e.message:`Google image request failed.`}}}}var $n=class extends n{name=`gemini`;version=`1.0.0`;onTextDelta;client;options;constructor(e){super(),this.options=e,e.executor&&(this.executor=e.executor),this.executor||(this.client=new c({apiKey:e.apiKey}))}async chat(e,t){if(this.validateMessages(e),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`Gemini Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Google client not available. Either provide apiKey or use an executor.`);try{return await Kn(this.client,this.options,e,this.withProviderCallbacks(t),this.name)}catch(e){let t=e instanceof Error?e.message:`Google API request failed`;throw Error(`Google chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`Gemini Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Google client not available. Either provide apiKey or use an executor.`);try{yield*qn(this.client,this.options,e,this.withProviderCallbacks(t),this.name)}catch(e){let t=e instanceof Error?e.message:`Google API request failed`;throw Error(`Google stream failed: ${t}`)}}async generateImage(t){if(t.prompt.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image generation requires a non-empty prompt.`}};if(t.model.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image generation requires a non-empty model.`}};let n={id:e(),role:`user`,content:t.prompt,state:`complete`,parts:[{type:`text`,text:t.prompt}],timestamp:new Date};return Qn(this.chat.bind(this),[n],t.model)}async editImage(t){if(t.prompt.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image edit requires a non-empty prompt.`}};if(t.model.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image edit requires a non-empty model.`}};let n=gn(t.image);if(!n.ok)return n;let r={id:e(),role:`user`,content:t.prompt,state:`complete`,parts:[n.value,{type:`text`,text:t.prompt}],timestamp:new Date};return Qn(this.chat.bind(this),[r],t.model)}async composeImage(t){if(t.prompt.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image compose requires a non-empty prompt.`}};if(t.model.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image compose requires a non-empty model.`}};if(t.images.length<2)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image compose requires at least two input images.`}};let n=[];for(let e of t.images){let t=gn(e);if(!t.ok)return t;n.push(t.value)}n.push({type:`text`,text:t.prompt});let r={id:e(),role:`user`,content:t.prompt,state:`complete`,parts:n,timestamp:new Date};return Qn(this.chat.bind(this),[r],t.model)}supportsTools(){return!0}validateConfig(){return this.executor?this.executor.validateConfig():!!this.client&&!!this.options&&!!this.options.apiKey}async dispose(){}withProviderCallbacks(e){let t=e?.onTextDelta??this.onTextDelta;return t?{...e,onTextDelta:t}:e}};const er=`GEMINI_API_KEY`,tr=`$ENV:${er}`,L=`gemini-3-flash-preview`,R=`https://ai.google.dev/api/models`,z=`2026-05-04`,nr=[{kind:`api-key`,label:`Google AI Studio API keys`,url:`https://aistudio.google.com/apikey`,sourceUrl:`https://ai.google.dev/gemini-api/docs/api-key`,lastVerifiedAt:`2026-05-08`}];function rr(){return{type:`gemini`,aliases:[`google`],displayName:`Gemini`,description:`Google Gemini API provider`,defaults:{model:L,apiKey:tr},modelCatalog:{status:`fallback`,sourceUrl:R,lastVerifiedAt:z,entries:[{id:L,displayName:`Gemini 3 Flash Preview`,capabilities:[`tools`,`vision`,`json_schema`,`reasoning`,`streaming`],lifecycle:`preview`,sourceUrl:R,lastVerifiedAt:z}]},setupHelpLinks:nr,setupSteps:[{key:`model`,title:`Gemini model`,defaultValue:L},{key:`apiKey`,title:`Gemini API key`,defaultValue:tr,masked:!0}],requiresApiKey:!0,refreshModelCatalog:({profile:e})=>or(e),modelCatalogCacheTtlSeconds:86400,createProvider:e=>new $n({apiKey:ir(e.apiKey),defaultModel:e.model})}}function ir(e){if(!e)throw Error(`Provider gemini requires apiKey`);return e}const ar=`https://generativelanguage.googleapis.com/v1beta/models`;async function or(e,t=lr){let n=await t(e.apiKey?`${ar}?key=${e.apiKey}`:ar);if(!n.ok)return{status:`unavailable`,sourceUrl:R,message:`Gemini model refresh failed: HTTP ${n.status}`};let r=((await n.json()).models??[]).filter(sr).map(cr);return{status:`live`,sourceUrl:R,lastVerifiedAt:new Date().toISOString(),entries:r,message:`Fetched ${r.length} Gemini models`}}function sr(e){return e.supportedGenerationMethods?.includes(`generateContent`)===!0}function cr(e){let t=e.name??``,n=t.startsWith(`models/`)?t.slice(7):t,r=t.includes(`preview`)?`preview`:`active`;return{id:n,displayName:e.displayName??n,lifecycle:r,sourceUrl:R,lastVerifiedAt:z}}async function lr(e,t){let n=await fetch(e);return{ok:n.ok,status:n.status,json:()=>n.json()}}const ur=`<|channel>`;function dr(e){let t=pr(e,{final:!0});return{rawText:e,visibleText:t.visibleParts.join(``),removedReasoning:t.removedReasoning}}var fr=class{buffer=``;emittedVisibleText=``;hasRemovedReasoning=!1;get rawText(){return this.buffer}get removedReasoning(){return this.hasRemovedReasoning}project(e){return e.length===0?``:(this.buffer+=e,this.projectVisibleText({final:!1}))}flush(){return this.projectVisibleText({final:!0})}projectVisibleText(e){let t=pr(this.buffer,e);this.hasRemovedReasoning=this.hasRemovedReasoning||t.removedReasoning;let n=t.visibleParts.join(``),r=n.slice(this.emittedVisibleText.length);return this.emittedVisibleText=n,r}};function pr(e,t){let n={visibleParts:[],removedReasoning:!1},r=0;for(;r<e.length;){let i=e.indexOf(ur,r);if(i===-1){mr(n,e.slice(r),t);break}mr(n,e.slice(r,i),t);let a=i+10,o=e.indexOf(`<channel|>`,a);if(o===-1){t.final&&(n.removedReasoning=!0);break}n.removedReasoning=!0,r=hr(e,a,o)}return n}function mr(e,t,n){if(t.length===0)return;if(n.final){e.visibleParts.push(t);return}let r=gr(t);e.visibleParts.push(t.slice(0,t.length-r))}function hr(e,t,n){let r=e.slice(t,n),i=n+10;if(r.trim().length===0){let t=e.slice(i).match(/^thought(?:\r?\n)*/);return t&&(i+=t[0].length),i}return r.split(/\r?\n/,1)[0]?.trim(),i}function gr(e){let t=Math.min(e.length,9);for(let n=t;n>0;--n)if(ur.startsWith(e.slice(e.length-n)))return n;return 0}const B=`<|"|>`;var _r=class{source;cursor=0;constructor(e){this.source=e}parse(){let e=this.parseObject();if(this.skipWhitespace(),this.cursor===this.source.length)return e}parseObject(){if(!this.consume(`{`))return;let e={};if(this.skipWhitespace(),this.consume(`}`))return e;for(;this.cursor<this.source.length;){let t=this.parseKey();if(!t||!this.consume(`:`))return;let n=this.parseValue();if(n===void 0)return;if(e[t]=n,this.skipWhitespace(),this.consume(`}`))return e;if(!this.consume(`,`))return}}parseArray(){if(!this.consume(`[`))return;let e=[];if(this.skipWhitespace(),this.consume(`]`))return e;for(;this.cursor<this.source.length;){let t=this.parseValue();if(t===void 0)return;if(e.push(t),this.skipWhitespace(),this.consume(`]`))return e;if(!this.consume(`,`))return}}parseValue(){return this.skipWhitespace(),this.source.startsWith(B,this.cursor)?this.parseString():this.source.startsWith(`{`,this.cursor)?this.parseObject():this.source.startsWith(`[`,this.cursor)?this.parseArray():this.consumeLiteral(`true`)?!0:this.consumeLiteral(`false`)?!1:this.consumeLiteral(`null`)?null:this.parseNumber()}parseKey(){if(this.skipWhitespace(),this.source.startsWith(B,this.cursor))return this.parseString();let e=/^[A-Za-z_][A-Za-z0-9_-]*/.exec(this.source.slice(this.cursor));if(e)return this.cursor+=e[0].length,this.skipWhitespace(),e[0]}parseString(){if(!this.consume(B))return;let e=this.source.indexOf(B,this.cursor);if(e===-1)return;let t=this.source.slice(this.cursor,e);return this.cursor=e+5,this.skipWhitespace(),t}parseNumber(){let e=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/.exec(this.source.slice(this.cursor));if(e)return this.cursor+=e[0].length,this.skipWhitespace(),Number(e[0])}consume(e){return this.skipWhitespace(),this.source.startsWith(e,this.cursor)?(this.cursor+=e.length,this.skipWhitespace(),!0):!1}consumeLiteral(e){return this.source.startsWith(e,this.cursor)?(this.cursor+=e.length,this.skipWhitespace(),!0):!1}skipWhitespace(){for(;/\s/.test(this.source[this.cursor]??``);)this.cursor+=1}};function vr(e){return[`<`]}function yr(e,t,n){return e.indexOf(`<`,t)}function br(e,t){return+!!e.endsWith(`<`)}function xr(e,t){let n=e.indexOf(`>`,t+1);if(n===-1)return;let r=e.slice(t,n+1),i=r.match(/^<\s*([A-Za-z][\w:-]*)([\s/>][\s\S]*?|)>$/);if(!i)return;let a=i[1]??``;return{tagName:a,normalizedName:a.toLowerCase(),rawOpenTag:r,attributes:Tr(i[2]??``),openEnd:n+1,selfClosing:/\/\s*>$/.test(r)}}function Sr(e,t,n){if(t.selfClosing)return{innerText:``,end:t.openEnd,complete:!0};let r=Or(e,t.tagName,t.openEnd);if(r===-1)return{innerText:e.slice(t.openEnd),end:n.final?e.length:t.openEnd-t.rawOpenTag.length,complete:!1};let i=e.indexOf(`>`,r);return{innerText:e.slice(t.openEnd,r),end:i===-1?e.length:i+1,complete:!0}}function Cr(e,t){if(t.selfClosing)return{rawText:t.rawOpenTag,end:t.openEnd};let n=Or(e,t.tagName,t.openEnd);if(n===-1)return{rawText:t.rawOpenTag,end:t.openEnd};let r=e.indexOf(`>`,n),i=r===-1?e.length:r+1;return{rawText:e.slice(t.openEnd-t.rawOpenTag.length,i),end:i}}function wr(e,t){let n=kr(e);return t.find(e=>kr(e)===n)}function Tr(e){let t={},n=/([A-Za-z_][\w:-]*)\s*=\s*(?:"([^"]*)"|'([^']*)')/g,r=n.exec(e);for(;r;){let i=r[1]??``;t[i]=Er(Dr(r[2]??r[3]??``)),r=n.exec(e)}return t}function Er(e){return e===`true`?!0:e===`false`?!1:e===`null`?null:/^-?(?:0|[1-9]\d*)(?:\.\d+)?$/.test(e)?Number(e):e}function Dr(e){return e.replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`).replace(/&/g,`&`)}function Or(e,t,n){return e.toLowerCase().indexOf(`</${t.toLowerCase()}>`,n)}function kr(e){return e.replace(/[^a-z0-9]/gi,``).toLowerCase()}function Ar(e,t){let n=jr(e,t);return n?[n]:[]}function jr(e,t){let n=e.indexOf(`>`),r=e.lastIndexOf(`</`);if(n===-1||r===-1||r<=n)return;let i=Mr(e.slice(n+1,r).trim());if(!Nr(i))return;let a=i.command,o=i.args;if(typeof a!=`string`||!Nr(o))return;let s=wr(a,t);if(s)return{toolName:s,args:o}}function Mr(e){try{return JSON.parse(e)}catch{return}}function Nr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pr(e,t,n){let r=Wr(),i=vr(t.toolNames),a=0;for(;a<e.length;){let o=yr(e,a,i);if(o===-1){Br(r,e.slice(a),n,i);break}Br(r,e.slice(a,o),n,i);let s=Fr(e,o,r,t,n);if(!s.completed)break;a=s.cursor}return{visibleText:r.visibleParts.join(``),toolCalls:r.toolCalls,rawToolCallTextParts:r.rawToolCallTextParts,removedToolCallText:r.removedToolCallText}}function Fr(e,t,n,r,i){let a=xr(e,t);if(!a)return Ir(e,t,n,i);let o=wr(a.tagName,r.toolNames);return o?zr(e,a,o,n,r):Lr(e,t,a,n,r,i)}function Ir(e,t,n,r){return r.final?(n.visibleParts.push(e[t]??``),{cursor:t+1,completed:!0}):{cursor:t,completed:!1}}function Lr(e,t,n,r,i,a){let o=Sr(e,n,a);if(!o.complete&&!a.final)return{cursor:t,completed:!1};let s=e.slice(t,o.end),c=r.rawToolCallTextParts.length;return r.removedToolCallText=!0,Hr(r,s,i),Gr(r,Rr(o,r,i)),r.rawToolCallTextParts.length===c&&r.rawToolCallTextParts.push(s),{cursor:o.end,completed:!0}}function Rr(e,t,n){return Pr(e.innerText,{...n,startCallIndex:Kr(t,n)},{final:!0})}function zr(e,t,n,r,i){let a=Cr(e,t);return Vr(r,n,t.attributes,a.rawText,i),{cursor:a.end,completed:!0}}function Br(e,t,n,r){if(t.length===0)return;if(n.final){e.visibleParts.push(t);return}let i=br(t,r);e.visibleParts.push(t.slice(0,t.length-i))}function Vr(e,t,n,r,i){Object.keys(n).length!==0&&(e.toolCalls.push(Ur(t,n,i,e)),e.rawToolCallTextParts.push(r),e.removedToolCallText=!0)}function Hr(e,t,n){let r=Ar(t,n.toolNames);for(let i of r)e.toolCalls.push(Ur(i.toolName,i.args,n,e)),e.rawToolCallTextParts.push(t)}function Ur(e,t,n,r){return{id:`${n.callIdPrefix??`gemma_call`}_${Kr(r,n)}`,type:`function`,function:{name:e,arguments:JSON.stringify(t)}}}function Wr(){return{visibleParts:[],toolCalls:[],rawToolCallTextParts:[],removedToolCallText:!1}}function Gr(e,t){e.toolCalls.push(...t.toolCalls),e.rawToolCallTextParts.push(...t.rawToolCallTextParts),e.removedToolCallText=e.removedToolCallText||t.removedToolCallText}function Kr(e,t){return(t.startCallIndex??0)+e.toolCalls.length}const qr=`<|tool_call>`,Jr=`gemma_call`;function V(e){if(!(!e||e.length===0))return new Xr({toolNames:e.map(e=>e.name)})}function Yr(e,t){return ri(e,Zr(e,t,{final:!0}))}var Xr=class{options;buffer=``;emittedVisibleText=``;emittedRawToolCallText=``;emittedToolCallIds=new Set;constructor(e){this.options=e}project(e){return e.length===0?ii():(this.buffer+=e,this.projectVisibleText({final:!1}))}flush(){return this.projectVisibleText({final:!0})}projectVisibleText(e){let t=Zr(this.buffer,this.options,e),n=t.visibleParts.join(``),r=n.slice(this.emittedVisibleText.length),i=t.rawToolCallTextParts.join(``),a=i.slice(this.emittedRawToolCallText.length);return this.emittedVisibleText=n,this.emittedRawToolCallText=i,{visibleText:r,toolCalls:t.toolCalls.filter(e=>this.emittedToolCallIds.has(e.id)?!1:(this.emittedToolCallIds.add(e.id),!0)),removedToolCallText:a.length>0,...a.length>0&&{rawToolCallText:a}}}};function Zr(e,t,n){let r=Qr(e,t,n),i=Pr(r.visibleParts.join(``),{toolNames:t.toolNames,callIdPrefix:t.callIdPrefix??Jr,startCallIndex:r.toolCalls.length},n);return{visibleParts:[i.visibleText],toolCalls:[...r.toolCalls,...i.toolCalls],rawToolCallTextParts:[...r.rawToolCallTextParts,...i.rawToolCallTextParts],removedToolCallText:r.removedToolCallText||i.removedToolCallText}}function Qr(e,t,n){let r=ei(),i=new Set(t.toolNames),a=0,o=0;for(;a<e.length;){let s=e.indexOf(qr,a);if(s===-1){ti(r,e.slice(a),n);break}ti(r,e.slice(a,s),n);let c=s+12,l=e.indexOf(`<tool_call|>`,c);if(l===-1){n.final&&r.visibleParts.push(e.slice(s));break}let u=e.slice(s,l+12),d=$r(e.slice(c,l),i,t,o);d?(r.toolCalls.push(d),r.rawToolCallTextParts.push(u),r.removedToolCallText=!0,o+=1):r.visibleParts.push(u),a=l+12}return r}function $r(e,t,n,r){let i=e.trim();if(!i.startsWith(`call:`))return;let a=i.slice(5).trimStart(),o=a.indexOf(`{`);if(o<=0)return;let s=a.slice(0,o).trim();if(!t.has(s))return;let c=new _r(a.slice(o)).parse();if(c)return{id:`${n.callIdPrefix??Jr}_${r}`,type:`function`,function:{name:s,arguments:JSON.stringify(c)}}}function ei(){return{visibleParts:[],toolCalls:[],rawToolCallTextParts:[],removedToolCallText:!1}}function ti(e,t,n){if(t.length===0)return;if(n.final){e.visibleParts.push(t);return}let r=ni(t);e.visibleParts.push(t.slice(0,t.length-r))}function ni(e){let t=Math.min(e.length,11);for(let n=t;n>0;--n)if(qr.startsWith(e.slice(e.length-n)))return n;return 0}function ri(e,t){return{rawText:e,visibleText:t.visibleParts.join(``),toolCalls:t.toolCalls,removedToolCallText:t.removedToolCallText,...t.rawToolCallTextParts.length>0&&{rawToolCallText:t.rawToolCallTextParts.join(``)}}}function ii(){return{visibleText:``,toolCalls:[],removedToolCallText:!1}}function ai(e,t,n){let r=e.choices?.[0]?.message.content||``,i=new C({logger:t,...n?.tools&&{toolCallTextProjector:V(n.tools)}}).parseResponse(e),a=dr(i.content??``);return oi({...i,content:a.visibleText},r,a.removedReasoning)}function oi(e,t,n){return n?{...e,metadata:{...e.metadata??{},gemmaReasoningFiltered:!0,gemmaRawContent:t}}:e}function si(t,n){return{id:e(),role:`assistant`,content:t,state:`complete`,timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:n===`stop`||n===`tool_calls`}}}function ci(t,n){return{id:e(),role:`assistant`,content:``,toolCalls:t,state:`complete`,timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:n===`stop`||n===`tool_calls`}}}function li(e,t){return{reasoningProjector:new fr,responseParser:new C({logger:e}),...t&&{toolCallProjector:V(t)}}}function ui(e,t){let n=e.choices?.[0];if(!n)return[];let r=t.responseParser.parseStreamingChunk(e);return r&&o(r)&&r.toolCalls?.length?[r]:fi(n.delta.content||``,n.finish_reason,t)}function di(e){let t=fi(``,null,e,!0),n=e.reasoningProjector.flush();return n.length>0&&t.push(si(n,null)),t}function fi(e,t,n,r=!1){let i=r?n.toolCallProjector?.flush():n.toolCallProjector?.project(e),a=[];i?.toolCalls.length&&a.push(ci(i.toolCalls,t));let o=i?.visibleText??e,s=n.reasoningProjector.project(o);return s.length>0&&a.push(si(s,t)),a}var pi=class extends n{name=`gemma`;version=`1.0.0`;client;options;onTextDelta;constructor(e){if(super(e.logger||i),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new s({apiKey:e.apiKey,...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout}});else throw Error(`Either Gemma client, apiKey, or executor is required`)}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`Gemma Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Gemma client not available. Either provide a client/apiKey or use an executor.`);try{let n=this.buildRequestParams(e,t),r=t?.onTextDelta??this.onTextDelta;if(r)return await this.chatWithStreamingAssembly({...n,stream:!0},{...t,onTextDelta:r});t?.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let i=await this.client.chat.completions.create(n);return t?.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`response`,payload:i}),ai(i,this.logger,t)}catch(e){let t=e.message||`Gemma API request failed`;throw Error(`Gemma chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`Gemma Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Gemma client not available. Either provide a client/apiKey or use an executor.`);try{let n=this.buildStreamingRequestParams(e,t);t?.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=await this.client.chat.completions.create(n),i=li(this.logger,t?.tools),a=T(r,{provider:`gemma`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t?.onProviderNativeRawPayload});for await(let e of this.streamWithAbort(a,t?.signal))for(let t of ui(e,i))yield t;for(let e of di(i))yield e}catch(e){let t=e.message||`Gemma API request failed`;throw Error(`Gemma stream failed: ${t}`)}}supportsTools(){return!0}getCapabilities(){return{functionCalling:{supported:!0},nativeWebTools:{webSearch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`Gemma OpenAI-compatible endpoints support declared function tools, not provider-native web search.`},webFetch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`Gemma OpenAI-compatible endpoints support declared function tools, not provider-native web fetch.`}}}}validateConfig(){return!!this.client&&!!this.options}async dispose(){}validateMessages(e){super.validateMessages(e);for(let t of e)if(t.role===`assistant`){let e=t;if(e.toolCalls&&e.toolCalls.length>0&&e.content===``)continue}}buildRequestParams(e,t){let n=t?.model??this.options.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return{model:n,messages:x(e),...t?.temperature!==void 0&&{temperature:t.temperature},...t?.maxTokens!==void 0&&{max_tokens:t.maxTokens},...t?.tools&&{tools:S(t.tools),tool_choice:`auto`}}}buildStreamingRequestParams(e,t){return{...this.buildRequestParams(e,t),stream:!0}}async chatWithStreamingAssembly(e,t){if(!this.client)throw Error(`Gemma client not available. Either provide a client/apiKey or use an executor.`);try{t.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`request`,payload:e});let n=await this.client.chat.completions.create(e,t.signal?{signal:t.signal}:void 0),r=new fr;return oi(await w({stream:T(n,{provider:`gemma`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t.onProviderNativeRawPayload}),onTextDelta:t.onTextDelta,signal:t.signal,textProjector:e=>r.project(e),textProjectorFlush:()=>r.flush(),toolCallTextProjector:V(t.tools)}),r.rawText,r.removedReasoning)}catch(e){let t=e.message||`Gemma streaming request failed`;throw Error(`Gemma stream failed: ${t}`)}}};const H=`supergemma4-26b-uncensored-v2`,U=`lm-studio`,mi=`http://localhost:1234/v1`,hi=`https://ai.google.dev/gemma`,gi=`2026-05-04`,_i=`https://lmstudio.ai/docs/developer`,vi=[{kind:`official`,label:`LM Studio local API documentation`,url:_i,sourceUrl:_i,lastVerifiedAt:`2026-05-08`}],yi={status:`fallback`,sourceUrl:hi,lastVerifiedAt:gi,entries:[{id:H,displayName:`SuperGemma 4 26B`,capabilities:[`tools`,`streaming`],lifecycle:`active`,sourceUrl:hi,lastVerifiedAt:gi}]};function bi(){return{type:`gemma`,displayName:`Gemma`,description:`Gemma-family local models through an OpenAI-compatible endpoint`,defaults:{model:H,apiKey:U,baseURL:mi},modelCatalog:yi,setupHelpLinks:vi,setupSteps:[{key:`baseURL`,title:`Gemma OpenAI-compatible base URL`,defaultValue:mi},{key:`model`,title:`Gemma model`,defaultValue:H},{key:`apiKey`,title:`Gemma OpenAI-compatible API key`,defaultValue:U,masked:!0}],requiresApiKey:!0,probeProfile:E,createProvider:e=>new pi({apiKey:xi(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},defaultModel:e.model})}}function xi(e){if(!e)throw Error(`Provider gemma requires apiKey`);return e}async function Si(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(),e.timeoutMs??6e4);try{let r=await fetch(Ci(e.baseUrl,t.path),{method:t.method,headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":`application/json`,...e.defaultHeaders??{}},body:t.body,signal:n.signal}),i=await r.text();if(!r.ok)return Ei(r.status,i);let a=wi(i);return a.ok?{ok:!0,value:a.value}:a}catch(e){return e instanceof Error&&e.name===`AbortError`?{ok:!1,error:{code:`PROVIDER_TIMEOUT`,message:`Bytedance media request timed out.`}}:{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:e instanceof Error?e.message:`Bytedance media request failed.`}}}finally{clearTimeout(r)}}function Ci(e,t){return`${e.endsWith(`/`)?e.slice(0,-1):e}${t.startsWith(`/`)?t:`/${t}`}`}function wi(e){try{return{ok:!0,value:JSON.parse(e)}}catch{return{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Bytedance response is not valid JSON.`}}}}function Ti(e){try{return JSON.parse(e)}catch{return{message:e}}}function Ei(e,t){let n=Ti(t);return e===401||e===403?{ok:!1,error:{code:`PROVIDER_AUTH_ERROR`,message:n.message??`Bytedance authentication failed.`,details:n.details}}:e===404?{ok:!1,error:{code:`PROVIDER_JOB_NOT_FOUND`,message:n.message??`Bytedance video job was not found.`,details:n.details}}:e===409?{ok:!1,error:{code:`PROVIDER_JOB_NOT_CANCELLABLE`,message:n.message??`Bytedance video job cannot be cancelled in current state.`,details:n.details}}:e===429?{ok:!1,error:{code:`PROVIDER_RATE_LIMITED`,message:n.message??`Bytedance rate limit exceeded.`,details:n.details}}:e>=400&&e<500?{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:n.message??`Bytedance rejected request payload.`,details:n.details}}:{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:n.message??`Bytedance upstream request failed.`,details:n.details}}}function Di(e){if(e.id.trim().length===0)return{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Bytedance video job response is missing task id.`}};let t=Oi(e.status);return t.ok?{ok:!0,value:{jobId:e.id,status:t.value,output:ji(e),error:t.value===`failed`&&e.error_message?{code:`PROVIDER_UPSTREAM_ERROR`,message:e.error_message}:void 0,updatedAt:Ai(e.updated_at??e.created_at)}}:t}function Oi(e){let t=e.trim().toLowerCase();return t===`queued`||t===`pending`||t===`submitted`?{ok:!0,value:`queued`}:t===`running`||t===`processing`||t===`in_progress`?{ok:!0,value:`running`}:t===`succeeded`||t===`success`||t===`completed`?{ok:!0,value:`succeeded`}:t===`failed`||t===`error`?{ok:!0,value:`failed`}:t===`cancelled`||t===`canceled`?{ok:!0,value:`cancelled`}:{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Unexpected video job status from Bytedance: ${e}`}}}function ki(e){if(typeof e!=`string`||e.trim().length===0)return{ok:!0,value:`queued`};let t=e.trim().toLowerCase();return t===`queued`||t===`pending`||t===`submitted`?{ok:!0,value:`queued`}:t===`running`||t===`processing`||t===`in_progress`?{ok:!0,value:`running`}:{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Unexpected createVideo status from Bytedance: ${e}`}}}function Ai(e){if(typeof e==`number`&&Number.isFinite(e)){let t=e>0xe8d4a51000?e:e*1e3,n=new Date(t);if(!Number.isNaN(n.getTime()))return n.toISOString()}if(typeof e==`string`&&e.trim().length>0){let t=Number(e);if(Number.isFinite(t))return Ai(t);let n=new Date(e);if(!Number.isNaN(n.getTime()))return n.toISOString()}return new Date().toISOString()}function ji(e){let t=typeof e.video_url==`string`&&e.video_url.trim().length>0?e.video_url:void 0,n=typeof e.content?.video_url==`string`&&e.content.video_url.trim().length>0?e.content.video_url:void 0,r=t??n;if(typeof r==`string`)return{kind:`uri`,uri:r,mimeType:e.mime_type,bytes:e.bytes}}var Mi=class{options;constructor(e){this.options=e}async createVideo(e){if(e.prompt.trim().length===0)return W(`Video generation requires non-empty prompt.`);if(e.model.trim().length===0)return W(`Video generation requires non-empty model.`);if(typeof e.seed==`number`)return W(`ModelArk Seedance provider does not support seed field in current contract.`);let t=this.buildContentPayload(e.prompt,e.inputImages);if(!t.ok)return t;let n={model:e.model.trim(),content:t.value,duration:e.durationSeconds,ratio:e.aspectRatio},r=await Si(this.options,{path:this.options.createVideoPath??`/contents/generations/tasks`,method:`POST`,body:JSON.stringify(n)});if(!r.ok)return r;if(r.value.id.trim().length===0)return Pi(`Bytedance createVideo response is missing task id.`);let i=ki(r.value.status);return i.ok?{ok:!0,value:{jobId:r.value.id,status:i.value,createdAt:Ai(r.value.created_at)}}:i}async getVideoJob(e){if(e.trim().length===0)return W(`Video job lookup requires non-empty jobId.`);let t=await Si(this.options,{path:Ni(this.options.getVideoTaskPathTemplate??`/contents/generations/tasks/{taskId}`,e),method:`GET`});return t.ok?Di(t.value):t}async cancelVideoJob(e){if(e.trim().length===0)return W(`Video job cancellation requires non-empty jobId.`);let t=this.options.cancelVideoTaskMethod??`DELETE`,n=await Si(this.options,{path:Ni(this.options.cancelVideoTaskPathTemplate??`/contents/generations/tasks/{taskId}`,e),method:t});return n.ok?Di(n.value):n}buildContentPayload(e,t){let n=e.trim();if(n.length===0)return W(`Video generation requires non-empty prompt.`);let r=[{type:`text`,text:n}];if(Array.isArray(t))for(let e of t){let t=Fi(e);if(!t.ok)return t;r.push({type:`image_url`,image_url:{url:t.value}})}return{ok:!0,value:r}}};function Ni(e,t){return e.replace(`{taskId}`,encodeURIComponent(t))}function W(e){return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:e}}}function Pi(e){return{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:e}}}function Fi(e){return e.kind===`uri`?e.uri.trim().length===0?W(`Image uri must be non-empty.`):{ok:!0,value:e.uri}:e.data.trim().length===0?W(`Inline image data must be non-empty.`):e.mimeType.trim().length===0?W(`Inline image mimeType must be non-empty.`):{ok:!0,value:`data:${e.mimeType};base64,${e.data}`}}const Ii={singapore:`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,usVirginia:`https://dashscope-us.aliyuncs.com/compatible-mode/v1`,beijing:`https://dashscope.aliyuncs.com/compatible-mode/v1`,hongKong:`https://cn-hongkong.dashscope.aliyuncs.com/compatible-mode/v1`},Li={singapore:`https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1`,usVirginia:`https://dashscope-us.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1`,beijing:`https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1`},G=`qwen-plus`,Ri=`DASHSCOPE_API_KEY`,zi=`$ENV:${Ri}`,K=Ii.singapore,Bi=Li.singapore,q=`https://www.alibabacloud.com/help/en/model-studio/compatibility-of-openai-with-dashscope`,J=`2026-05-04`;function Y(e){let t=[];return(e?.webSearch===!0||e?.webFetch===!0)&&t.push(`web_search`),e?.webFetch===!0&&t.push(`web_extractor`),t}function Vi(e){return Y(e).length>0}function Hi(e){return e.flatMap(e=>Gi(e))}function Ui(e,t){let n=[...e.map(e=>({type:e})),...Wi(t)];return n.length>0?n:void 0}function Wi(e){return e?.map(e=>({type:`function`,name:e.name,description:e.description,parameters:e.parameters}))??[]}function Gi(e){return e.role===`user`?[X(`user`,e.content)]:e.role===`system`?[X(`system`,e.content)]:e.role===`tool`?[{type:`function_call_output`,call_id:e.toolCallId,output:e.content||``}]:Ki(e)}function Ki(e){let t=[];e.content&&e.content.length>0&&t.push(X(`assistant`,e.content));for(let n of e.toolCalls??[])t.push({type:`function_call`,call_id:n.id,name:n.function.name,arguments:n.function.arguments});return t.length===0&&t.push(X(`assistant`,``)),t}function X(e,t){return{role:e,content:t??``}}async function*qi(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Ji(n,t);if(e.done||t?.aborted)break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async function Ji(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}function Yi(e,t){let n=e.output??[],r=Z(n,e.usage),i=sa(n);return ea({content:e.output_text??ua(n),toolCalls:i,response:e,usage:r,enabledBuiltInTools:t.enabledBuiltInTools})}async function Xi(e){let t={textParts:[],toolCalls:[],usage:aa()};for await(let n of qi(e.stream,e.signal))Zi(t,n,e.onTextDelta);return t.completedResponse===void 0?ea({content:t.textParts.join(``),toolCalls:t.toolCalls,usage:t.usage,enabledBuiltInTools:e.enabledBuiltInTools}):Qi(t,e.enabledBuiltInTools)}function Zi(e,t,n){if(t.type===`response.output_text.delta`){e.textParts.push(t.delta),n?.(t.delta);return}if(t.type===`response.completed`){e.completedResponse=t.response,ia(e.usage,Z(t.response.output??[],t.response.usage));return}if(t.type===`response.output_item.done`){$i(e,t.item);return}if(t.type===`response.web_search_call.completed`){e.usage.webSearchCalls+=1;return}if(t.type===`response.error`||t.type===`response.failed`)throw Error(`Qwen Responses API failed: ${da(t)}`)}function Qi(e,t){let n=e.completedResponse;if(n===void 0)throw Error(`Qwen Responses stream completed without response metadata`);let r=n.output??[],i=sa(r),a=e.textParts.length>0?e.textParts.join(``):n.output_text??ua(r),o=Z(r,n.usage);return ia(o,e.usage),ea({content:a,toolCalls:i.length>0?i:e.toolCalls,response:n,usage:o,enabledBuiltInTools:t})}function $i(e,t){if(t.type===`function_call`){ca(t)&&e.toolCalls.push(la(t));return}ia(e.usage,Z([t],void 0))}function ea(t){return{id:e(),role:`assistant`,content:t.content,state:`complete`,timestamp:new Date,...t.toolCalls.length>0&&{toolCalls:t.toolCalls},...t.response?.usage!==void 0&&{usage:{promptTokens:t.response.usage.input_tokens??0,completionTokens:t.response.usage.output_tokens??0,totalTokens:t.response.usage.total_tokens??0}},metadata:ta(t.enabledBuiltInTools,t.usage,t.response)}}function ta(e,t,n){let r=na(t);return{providerToolMode:`qwen_responses`,providerBuiltInToolsEnabled:[...e],...r.length>0&&{providerBuiltInToolsUsed:r},qwenWebSearchCalls:t.webSearchCalls,qwenWebExtractorCalls:t.webExtractorCalls,...t.unsupportedToolTypes.size>0&&{qwenUnsupportedProviderToolTypes:[...t.unsupportedToolTypes].sort()},...n?.id!==void 0&&{responseId:n.id},...n?.model!==void 0&&{model:n.model},...n?.status!==void 0&&{finishReason:n.status}}}function na(e){let t=[];return e.webSearchCalls>0&&t.push(`web_search`),e.webExtractorCalls>0&&t.push(`web_extractor`),t}function Z(e,t){let n=aa();for(let t of e)t.type===`web_search_call`?n.webSearchCalls+=1:t.type===`web_extractor_call`?n.webExtractorCalls+=1:oa(t.type)&&n.unsupportedToolTypes.add(t.type);return ra(n,t),n}function ra(e,t){let n=t?.x_tools;if(n!==void 0){e.webSearchCalls=Math.max(e.webSearchCalls,n.web_search?.count??0),e.webExtractorCalls=Math.max(e.webExtractorCalls,n.web_extractor?.count??0);for(let t of Object.keys(n))t!==`web_search`&&t!==`web_extractor`&&e.unsupportedToolTypes.add(t)}}function ia(e,t){e.webSearchCalls=Math.max(e.webSearchCalls,t.webSearchCalls),e.webExtractorCalls=Math.max(e.webExtractorCalls,t.webExtractorCalls);for(let n of t.unsupportedToolTypes)e.unsupportedToolTypes.add(n)}function aa(){return{webSearchCalls:0,webExtractorCalls:0,unsupportedToolTypes:new Set}}function oa(e){return e.endsWith(`_call`)&&e!==`function_call`}function sa(e){return e.filter(ca).map(e=>la(e))}function ca(e){return e.type===`function_call`&&`call_id`in e&&`name`in e&&`arguments`in e}function la(e){return{id:e.call_id,type:`function`,function:{name:e.name,arguments:e.arguments}}}function ua(e){return e.filter(e=>e.type===`message`).flatMap(e=>e.content).map(e=>e.text).join(``)}function da(e){return e.message??e.error?.message??e.response?.error?.message??`unknown error`}async function fa(e){let t=e.chatOptions?.onTextDelta??e.onTextDelta;if(t)return ma({...e,chatOptions:{...e.chatOptions,onTextDelta:t}});if(!e.client)throw Error(`Qwen Responses client not available for built-in web tools.`);try{let t=ha(e);e.chatOptions?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`responses`,payloadKind:`request`,payload:t});let n=await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`responses`,payloadKind:`response`,payload:n}),Yi(n,{enabledBuiltInTools:Y(e.builtInWebTools)})}catch(e){let t=e.message||`Qwen Responses API request failed`;throw Error(`Qwen responses failed: ${t}`)}}async function*pa(e){let t=[],n=await ma({...e,chatOptions:{...e.chatOptions,onTextDelta:n=>{e.chatOptions?.onTextDelta?.(n),t.push(_a(n))}}});for(let e of t)yield e;yield{...n,content:``,metadata:{...n.metadata,isStreamChunk:!0,isComplete:!0}}}async function ma(e){if(!e.client)throw Error(`Qwen Responses client not available for built-in web tools.`);try{let t=ga(e);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`responses`,payloadKind:`request`,payload:t}),Xi({stream:T(await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0),{provider:`qwen`,apiSurface:`responses`,onProviderNativeRawPayload:e.chatOptions?.onProviderNativeRawPayload}),enabledBuiltInTools:Y(e.builtInWebTools),onTextDelta:e.chatOptions?.onTextDelta,signal:e.chatOptions?.signal})}catch(e){let t=e.message||`Qwen Responses streaming request failed`;throw Error(`Qwen responses stream failed: ${t}`)}}function ha(e){let t=e.chatOptions?.model??e.defaultModel;if(!t)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let n=Ui(Y(e.builtInWebTools),e.chatOptions?.tools);return{model:t,input:Hi(e.messages),...n!==void 0&&{tools:n},...e.chatOptions?.temperature!==void 0&&{temperature:e.chatOptions.temperature},...e.chatOptions?.maxTokens!==void 0&&{max_output_tokens:e.chatOptions.maxTokens},...e.builtInWebTools?.enableThinking!==void 0&&{enable_thinking:e.builtInWebTools.enableThinking}}}function ga(e){return{...ha(e),stream:!0}}function _a(t){return{id:e(),role:`assistant`,content:t,state:`complete`,timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:!1}}}const Q=`qwen-responses`;function va(e){let t=e.builtInWebTools,n=t?.webSearch===!0||t?.webFetch===!0,r=t?.webFetch===!0;return{functionCalling:{supported:!0},nativeWebTools:{webSearch:n?{supported:!0,enabled:!0,source:Q}:{supported:!0,enabled:!1,source:Q,reason:`Enable builtInWebTools.webSearch or builtInWebTools.webFetch.`},webFetch:r?{supported:!0,enabled:!0,source:Q}:{supported:!0,enabled:!1,source:Q,reason:`Enable builtInWebTools.webFetch.`}}}}async function ya(e,t,n){try{return n.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`request`,payload:t}),w({stream:T(await e.chat.completions.create(t,n.signal?{signal:n.signal}:void 0),{provider:`qwen`,apiSurface:`chat-completions`,onProviderNativeRawPayload:n.onProviderNativeRawPayload}),onTextDelta:n.onTextDelta,signal:n.signal})}catch(e){let t=e.message||`Qwen streaming request failed`;throw Error(`Qwen stream failed: ${t}`)}}var ba=class extends n{name=`qwen`;version=`1.0.0`;client;responsesClient;options;responseParser;onTextDelta;constructor(e){if(super(e.logger||i),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client,this.responsesClient=e.client;else if(e.apiKey)this.client=new s({apiKey:e.apiKey,baseURL:e.baseURL??K,...e.timeout!==void 0&&{timeout:e.timeout}}),this.responsesClient=new s({apiKey:e.apiKey,baseURL:e.responsesBaseURL??Bi,...e.timeout!==void 0&&{timeout:e.timeout}});else throw Error(`Either Qwen client, apiKey, or executor is required`);this.responseParser=new C({logger:this.logger})}async chat(e,t){return this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor?this.chatViaExecutor(e,t):this.shouldUseResponsesApi()?this.chatViaResponsesApi(e,t,this.getResponsesClient()):this.chatViaChatCompletions(e,t,this.getClient())}async chatViaExecutor(e,t){try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`Qwen Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}}async chatViaResponsesApi(e,t,n){return this.validateTools(t?.tools),fa({client:n,messages:e,chatOptions:t,defaultModel:this.options.defaultModel,builtInWebTools:this.options.builtInWebTools,onTextDelta:this.onTextDelta})}async chatViaChatCompletions(e,t,n){try{let r=this.buildRequestParams(e,t),i=t?.onTextDelta??this.onTextDelta;if(i)return ya(n,{...r,stream:!0},{...t,onTextDelta:i});t?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`request`,payload:r});let a=await n.chat.completions.create(r);return t?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`response`,payload:a}),this.responseParser.parseResponse(a)}catch(e){let t=e.message||`Qwen API request failed`;throw Error(`Qwen chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`Qwen Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Qwen client not available. Either provide a client/apiKey or use an executor.`);if(this.shouldUseResponsesApi()){this.validateTools(t?.tools),yield*pa({client:this.responsesClient,messages:e,chatOptions:t,defaultModel:this.options.defaultModel,builtInWebTools:this.options.builtInWebTools,onTextDelta:this.onTextDelta});return}try{let n=this.buildStreamingRequestParams(e,t);t?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=T(await this.client.chat.completions.create(n),{provider:`qwen`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t?.onProviderNativeRawPayload});for await(let e of this.streamWithAbort(r,t?.signal)){let t=this.responseParser.parseStreamingChunk(e);t&&(yield t)}}catch(e){let t=e.message||`Qwen API request failed`;throw Error(`Qwen stream failed: ${t}`)}}supportsTools(){return!0}getCapabilities(){return va(this.options)}validateConfig(){return!!this.client&&!!this.options&&(!this.shouldUseResponsesApi()||!!this.responsesClient)}async dispose(){}buildRequestParams(e,t){this.validateTools(t?.tools);let n=t?.model??this.options.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return{model:n,messages:x(e),...t?.temperature!==void 0&&{temperature:t.temperature},...t?.maxTokens!==void 0&&{max_tokens:t.maxTokens},...t?.tools&&{tools:S(t.tools),tool_choice:`auto`}}}buildStreamingRequestParams(e,t){return{...this.buildRequestParams(e,t),stream:!0}}shouldUseResponsesApi(){return Vi(this.options.builtInWebTools)}getClient(){if(!this.client)throw Error(`Qwen client not available. Either provide a client/apiKey or use an executor.`);return this.client}getResponsesClient(){if(!this.responsesClient)throw Error(`Qwen Responses client not available for built-in web tools.`);return this.responsesClient}};async function xa(e,t=Ta){let n=await t(`${wa(e.baseURL??K)}/models`,Sa(e.apiKey));if(!n.ok)return{status:`unavailable`,sourceUrl:q,message:`Qwen model refresh failed: HTTP ${n.status}`};let r=((await n.json()).data??[]).map(e=>e.id).filter(e=>typeof e==`string`&&e.length>0).map(Ca);return{status:`live`,sourceUrl:q,lastVerifiedAt:J,entries:r,message:`Loaded ${r.length} models from Qwen API`}}function Sa(e){if(e)return{headers:{Authorization:`Bearer ${e}`}}}function Ca(e){return{id:e,displayName:e,lifecycle:`active`,sourceUrl:q,lastVerifiedAt:J}}function wa(e){return e.replace(/\/$/,``)}async function Ta(e,t){let n=await fetch(e,{...t?.headers!==void 0&&{headers:t.headers}});return{ok:n.ok,status:n.status,json:()=>n.json()}}const Ea=[{kind:`api-key`,label:`Alibaba Cloud Model Studio API keys`,url:`https://modelstudio.console.alibabacloud.com/?tab=api#/api-key`,sourceUrl:`https://www.alibabacloud.com/help/en/model-studio/get-api-key`,lastVerifiedAt:`2026-05-08`}],Da={status:`fallback`,sourceUrl:q,lastVerifiedAt:J,entries:[{id:G,displayName:`Qwen Plus`,capabilities:[`tools`,`reasoning`,`native_web`,`streaming`],lifecycle:`active`,sourceUrl:q,lastVerifiedAt:J},{id:`qwen-max`,displayName:`Qwen Max`,capabilities:[`tools`,`reasoning`,`native_web`,`streaming`],lifecycle:`active`,sourceUrl:q,lastVerifiedAt:J},{id:`qwen-flash`,displayName:`Qwen Flash`,capabilities:[`tools`,`native_web`,`streaming`],lifecycle:`active`,sourceUrl:q,lastVerifiedAt:J}]};function Oa(){return{type:`qwen`,displayName:`Qwen`,description:`Alibaba Cloud Model Studio OpenAI-compatible endpoint`,defaults:{model:G,apiKey:zi,baseURL:K},modelCatalog:Da,refreshModelCatalog:({profile:e})=>xa(e),modelCatalogCacheTtlSeconds:86400,setupHelpLinks:Ea,setupSteps:[{key:`baseURL`,title:`Qwen OpenAI-compatible base URL`,defaultValue:K},{key:`model`,title:`Qwen model`,defaultValue:G},{key:`apiKey`,title:`Qwen Model Studio API key`,defaultValue:zi,masked:!0}],requiresApiKey:!0,probeProfile:E,createProvider:e=>{let t=Aa(e.options);return new ba({apiKey:ka(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...t.responsesBaseURL!==void 0&&{responsesBaseURL:t.responsesBaseURL},...e.timeout!==void 0&&{timeout:e.timeout},...t.builtInWebTools!==void 0&&{builtInWebTools:t.builtInWebTools},defaultModel:e.model})}}}function ka(e){if(!e)throw Error(`Provider qwen requires apiKey`);return e}function Aa(e){let t=ja(Ma(e?.builtInWebTools)),n=Na(e?.responsesBaseURL);return{...n!==void 0&&{responsesBaseURL:n},...t!==void 0&&{builtInWebTools:t}}}function ja(e){if(e!==void 0)return{...$(e.webSearch)!==void 0&&{webSearch:$(e.webSearch)},...$(e.webFetch)!==void 0&&{webFetch:$(e.webFetch)},...$(e.enableThinking)!==void 0&&{enableThinking:$(e.enableThinking)}}}function Ma(e){if(!(e==null||e instanceof Date||Array.isArray(e)))return typeof e==`object`?e:void 0}function $(e){return typeof e==`boolean`?e:void 0}function Na(e){return typeof e==`string`&&e.length>0?e:void 0}export{b as ANTHROPIC_MODEL_LAST_VERIFIED_AT,y as ANTHROPIC_MODEL_SOURCE_URL,m as AnthropicProvider,Mi as BytedanceProvider,P as DEEPSEEK_DEPRECATED_ALIAS_RETIREMENT_DATE,M as DEEPSEEK_MODEL_CATALOG_SOURCE_URL,N as DEEPSEEK_MODEL_LAST_VERIFIED_AT,Xt as DEEPSEEK_MODEL_LIST_SOURCE_URL,re as DEFAULT_ANTHROPIC_PROVIDER_API_KEY_ENV,ie as DEFAULT_ANTHROPIC_PROVIDER_API_KEY_REFERENCE,v as DEFAULT_ANTHROPIC_PROVIDER_MODEL,Kt as DEFAULT_DEEPSEEK_PROVIDER_API_KEY_ENV,qt as DEFAULT_DEEPSEEK_PROVIDER_API_KEY_REFERENCE,Jt as DEFAULT_DEEPSEEK_PROVIDER_BASE_URL,j as DEFAULT_DEEPSEEK_PROVIDER_MODEL,er as DEFAULT_GEMINI_PROVIDER_API_KEY_ENV,tr as DEFAULT_GEMINI_PROVIDER_API_KEY_REFERENCE,L as DEFAULT_GEMINI_PROVIDER_MODEL,U as DEFAULT_GEMMA_PROVIDER_API_KEY,mi as DEFAULT_GEMMA_PROVIDER_BASE_URL,H as DEFAULT_GEMMA_PROVIDER_MODEL,A as DEFAULT_OPENAI_PROVIDER_API_KEY_REFERENCE,Rt as DEFAULT_OPENAI_PROVIDER_MODEL,Ri as DEFAULT_QWEN_PROVIDER_API_KEY_ENV,zi as DEFAULT_QWEN_PROVIDER_API_KEY_REFERENCE,K as DEFAULT_QWEN_PROVIDER_BASE_URL,G as DEFAULT_QWEN_PROVIDER_MODEL,Bi as DEFAULT_QWEN_PROVIDER_RESPONSES_BASE_URL,Yt as DeepSeekProvider,z as GEMINI_MODEL_LAST_VERIFIED_AT,R as GEMINI_MODEL_SOURCE_URL,$n as GeminiProvider,pi as GemmaProvider,fr as GemmaReasoningProjector,Xr as GemmaToolCallProjector,At as OpenAIConversationAdapter,Et as OpenAIProvider,J as QWEN_MODEL_LAST_VERIFIED_AT,q as QWEN_MODEL_SOURCE_URL,Ii as QWEN_PROVIDER_BASE_URLS,Li as QWEN_PROVIDER_RESPONSES_BASE_URLS,ba as QwenProvider,le as createAnthropicProvider,oe as createAnthropicProviderDefinition,sn as createDeepSeekProviderDefinition,rr as createGeminiProviderDefinition,bi as createGemmaProviderDefinition,V as createGemmaToolCallProjector,Bt as createOpenAIProviderDefinition,Oa as createQwenProviderDefinition,dr as projectGemmaReasoningText,Yr as projectGemmaToolCallText,h as refreshAnthropicModelCatalog,$t as refreshDeepSeekModelCatalog,or as refreshGeminiModelCatalog,Mt as refreshOpenAIModelCatalog,xa as refreshQwenModelCatalog};
|
|
4
|
+
`)||void 0;if(!t?.model)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let o=t?.tools?f(t.tools):[],s=this.enableWebTools?[{type:`web_search_20250305`,name:`web_search`}]:[],c=[...o,...s],l={model:t.model,messages:r,max_tokens:t?.maxTokens||a(t.model),...i&&{system:i},...t?.temperature!==void 0&&{temperature:t.temperature},...c.length>0&&{tools:c}},d=t?.onTextDelta??this.onTextDelta??(()=>{});return p(this.client,l,d,this.onServerToolUse,t?.signal,t?.onProviderNativeRawPayload)}async*chatStream(t,n){if(this.validateMessages(t),this.validateNativeWebTools(n?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(t,n);return}catch(e){throw e}if(!this.client)throw Error(`Anthropic client not available. Either provide a client/apiKey or use an executor.`);let r=u(t);if(!n?.model)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let i={model:n.model,messages:r,max_tokens:n?.maxTokens||a(n.model),stream:!0};n?.temperature!==void 0&&(i.temperature=n.temperature);let o=n?.tools?f(n.tools):[],s=this.enableWebTools?[{type:`web_search_20250305`,name:`web_search`}]:[],c=[...o,...s];c.length>0&&(i.tools=c),n?.onProviderNativeRawPayload?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`request`,payload:i});let l=await this.client.messages.create(i),d=0;for await(let t of l)n?.onProviderNativeRawPayload?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`stream_event`,sequence:d,payload:t}),d++,t.type===`content_block_delta`&&t.delta.type===`text_delta`&&(yield{id:e(),role:`assistant`,content:t.delta.text,state:`complete`,timestamp:new Date})}supportsTools(){return!0}getCapabilities(){return{functionCalling:{supported:!0},nativeWebTools:{webSearch:this.enableWebTools?{supported:!0,enabled:!0,source:`anthropic-messages`}:{supported:!0,enabled:!1,source:`anthropic-messages`,reason:`Call configureNativeWebTools({ webSearch: true }) or set enableWebTools.`},webFetch:{supported:!1,enabled:!1,source:`anthropic-messages`,reason:`Anthropic provider exposes server web search only.`}}}}configureNativeWebTools(e){return e.webSearch===!0&&(this.enableWebTools=!0),this.validateNativeWebTools(e),this.getCapabilities()}validateConfig(){return!!this.client&&!!this.options&&!!this.options.apiKey}async dispose(){}validateMessages(e){if(!Array.isArray(e))throw Error(`Messages must be an array`);if(e.length===0)throw Error(`Messages array cannot be empty`);for(let t of e)if(!t.role||![`user`,`assistant`,`system`,`tool`].includes(t.role))throw Error(`Invalid message role: ${t.role}`)}};async function h(e,t=ne){return g(e,t)}async function g(e,t){let n=await t(`https://api.anthropic.com/v1/models`,_(e.apiKey)).catch(e=>({ok:!1,status:0,json:()=>Promise.resolve({data:[]}),errorMessage:`Anthropic model refresh failed: ${e instanceof Error?e.message:String(e)}`}));if(`errorMessage`in n)return{status:`unavailable`,sourceUrl:y,message:n.errorMessage};if(!n.ok)return{status:`unavailable`,sourceUrl:y,message:`Anthropic model refresh failed: HTTP ${n.status}`};let r=await n.json(),i=new Date().toISOString(),a=(r.data??[]).filter(e=>typeof e.id==`string`&&e.id.length>0).map(e=>({id:e.id,displayName:e.display_name??e.id,lifecycle:`active`,sourceUrl:y,lastVerifiedAt:i}));return{status:`live`,sourceUrl:y,lastVerifiedAt:b,entries:a,message:`Fetched ${a.length} models from Anthropic API`}}function _(e){if(e)return{headers:{"x-api-key":e,"anthropic-version":`2023-06-01`}}}async function ne(e,t){let n=await fetch(e,{...t?.headers!==void 0&&{headers:t.headers}});return{ok:n.ok,status:n.status,json:()=>n.json()}}const v=`claude-sonnet-4-6`,re=`ANTHROPIC_API_KEY`,ie=`$ENV:${re}`,y=`https://platform.claude.com/docs/en/api/models/list`,b=`2026-05-04`,ae=[{kind:`api-key`,label:`Anthropic API keys`,url:`https://platform.claude.com/settings/keys`,sourceUrl:`https://platform.claude.com/docs/en/api/overview`,lastVerifiedAt:`2026-05-08`}];function oe(){return{type:`anthropic`,displayName:`Anthropic`,description:`Claude models through Anthropic API`,defaults:{model:v,apiKey:ie},modelCatalog:{status:`fallback`,sourceUrl:y,lastVerifiedAt:b,entries:se()},setupHelpLinks:ae,setupSteps:[{key:`apiKey`,title:`Anthropic API key`,defaultValue:ie,masked:!0},{key:`model`,title:`Anthropic model`,defaultValue:v}],refreshModelCatalog:({profile:e})=>h(e),modelCatalogCacheTtlSeconds:86400,requiresApiKey:!0,createProvider:e=>new m({apiKey:ce(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},defaultModel:e.model})}}function se(){let e=new Set,t=[];for(let n of Object.values(r))e.has(n.name)||(e.add(n.name),t.push({id:n.id,displayName:n.name,contextWindow:n.contextWindow,capabilities:[`tools`,`vision`,`json_schema`,`reasoning`,`streaming`],lifecycle:`active`,sourceUrl:y,lastVerifiedAt:b}));return t}function ce(e){if(!e)throw Error(`Provider anthropic requires apiKey`);return e}function le(e){}function x(e){return e.map(e=>ue(e))}function S(e){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}function ue(e){if(e.role===`user`)return{role:`user`,content:e.content||``};if(e.role===`assistant`)return de(e);if(e.role===`system`)return{role:`system`,content:e.content||``};if(e.role===`tool`){if(!e.toolCallId||e.toolCallId.trim().length===0)throw Error(`Tool message missing toolCallId: ${JSON.stringify(e)}`);return{role:`tool`,content:e.content||``,tool_call_id:e.toolCallId}}throw Error(`Unsupported message role: ${JSON.stringify(e)}`)}function de(e){return e.toolCalls&&e.toolCalls.length>0?{role:`assistant`,content:e.content===``?null:e.content||null,tool_calls:e.toolCalls.map(e=>({id:e.id,type:`function`,function:{name:e.function.name,arguments:e.function.arguments}}))}:{role:`assistant`,content:e.content===null?null:e.content||``}}var C=class{logger;textProjector;toolCallTextProjector;constructor(e={}){this.logger=e.logger??i,this.textProjector=e.textProjector,this.toolCallTextProjector=e.toolCallTextProjector}parseResponse(e){try{let t=e.choices?.[0];if(!t)throw Error(`No choices found in OpenAI-compatible response`);return this.parseChoice(t,e.usage)}catch(e){let t=e instanceof Error?e.message:`OpenAI-compatible response parsing failed`;throw this.logger.error(`Response parsing failed`,{error:t}),Error(`OpenAI-compatible response parsing failed: ${t}`)}}parseChoice(t,n){let r=t.message,i=this.projectToolCallText(r.content||``),a=this.toolCallTextProjector?.flush(),o=this.parseNativeToolCalls(r),s=[...i.toolCalls,...a?.toolCalls??[]],c=[...o,...s];return{id:e(),state:`complete`,role:`assistant`,content:this.projectText(i.visibleText+(a?.visibleText??``)),timestamp:new Date,...c.length>0&&{toolCalls:c},...n&&{usage:this.parseUsage(n)},metadata:{finishReason:t.finish_reason||void 0,...this.buildToolTextMetadata(i,a)}}}parseNativeToolCalls(e){return e.tool_calls?.map(e=>({id:e.id,type:`function`,function:{name:e.function.name,arguments:e.function.arguments}}))||[]}parseUsage(e){return{promptTokens:e.prompt_tokens,completionTokens:e.completion_tokens,totalTokens:e.total_tokens}}parseStreamingChunk(t){try{let n=t.choices?.[0];if(!n)return null;let r=n.finish_reason,i=n.delta.tool_calls?.map(e=>({id:e.id||``,type:`function`,function:{name:e.function?.name||``,arguments:e.function?.arguments||``}}));return i?{id:e(),state:`complete`,role:`assistant`,content:``,timestamp:new Date,toolCalls:i,metadata:{isStreamChunk:!0,isComplete:r===`stop`||r===`tool_calls`}}:{id:e(),state:`complete`,role:`assistant`,content:this.projectText(n.delta.content||``),timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:r===`stop`||r===`tool_calls`}}}catch(e){let t=e instanceof Error?e.message:`OpenAI-compatible chunk parsing failed`;throw this.logger.error(`Chunk parsing failed`,{error:t}),Error(`OpenAI-compatible chunk parsing failed: ${t}`)}}projectText(e){return this.textProjector?this.textProjector(e):e}projectToolCallText(e){return this.toolCallTextProjector?.project(e)??{visibleText:e,toolCalls:[],removedToolCallText:!1}}buildToolTextMetadata(e,t){let n=[e.rawToolCallText,t?.rawToolCallText].filter(e=>typeof e==`string`&&e.length>0).join(``);return{...(e.removedToolCallText||(t?.removedToolCallText??!1))&&{toolCallTextProjected:!0},...n.length>0&&{rawToolCallText:n}}}};async function w(e){let t={textParts:[],toolCallParts:new Map,projectedToolCalls:[],rawToolCallTextParts:[],toolCallTextProjected:!1,model:``,finishReason:null};for await(let n of Se(e.stream,e.signal))fe(t,n,e);return he(t,e),ye(t,e.metadata)}function fe(e,t,n){t.model&&(e.model=t.model);let r=t.choices?.[0];r&&(e.finishReason=r.finish_reason??e.finishReason,pe(e,r.delta.content,n),ve(e,r.delta.tool_calls??[]))}function pe(e,t,n){if(!t)return;let r=ge(t,n.toolCallTextProjector);_e(e,r);let i=me(r.visibleText,n.textProjector);i.length!==0&&(e.textParts.push(i),n.onTextDelta?.(i))}function me(e,t){return t?t(e):e}function he(e,t){let n=t.toolCallTextProjector?.flush();if(n){_e(e,n);let r=me(n.visibleText,t.textProjector);r.length>0&&(e.textParts.push(r),t.onTextDelta?.(r))}let r=t.textProjectorFlush?.();r&&(e.textParts.push(r),t.onTextDelta?.(r))}function ge(e,t){return t?.project(e)??{visibleText:e,toolCalls:[],removedToolCallText:!1}}function _e(e,t){t.toolCalls.length>0&&e.projectedToolCalls.push(...t.toolCalls),t.removedToolCallText&&(e.toolCallTextProjected=!0),t.rawToolCallText&&t.rawToolCallText.length>0&&e.rawToolCallTextParts.push(t.rawToolCallText)}function ve(e,t){for(let n of t){let t=n.index??0,r=e.toolCallParts.get(t)??{id:``,name:``,arguments:``},i=n.function?.name??r.name;e.toolCallParts.set(t,{id:n.id??r.id,name:i,arguments:r.arguments+(n.function?.arguments??``)})}}function ye(t,n={}){let r={...n};t.model&&(r.model=t.model),t.finishReason&&(r.finishReason=t.finishReason),t.toolCallTextProjected&&(r.toolCallTextProjected=!0),t.rawToolCallTextParts.length>0&&(r.rawToolCallText=t.rawToolCallTextParts.join(``));let i=be(t);return{id:e(),role:`assistant`,content:t.textParts.join(``),state:`complete`,timestamp:new Date,...i.length>0&&{toolCalls:i},...Object.keys(r).length>0&&{metadata:r}}}function be(e){return[...xe(e.toolCallParts),...e.projectedToolCalls]}function xe(e){return Array.from(e.entries()).sort(([e],[t])=>e-t).map(([e,t])=>({id:t.id||`call_${e}`,type:`function`,function:{name:t.name,arguments:t.arguments||`{}`}}))}async function*Se(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Ce(n,t);if(e.done||(await we(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async function Ce(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}async function we(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}async function*T(e,t){let n=t.initialSequence??0;for await(let r of e)t.onProviderNativeRawPayload?.({provider:t.provider,...t.apiSurface!==void 0&&{apiSurface:t.apiSurface},payloadKind:`stream_event`,sequence:n,payload:r}),n++,yield r}async function E(e,t=Te){if(!e.baseURL)return{ok:!0,message:`Profile fields are valid; no endpoint probe configured.`};try{let n=await t(`${e.baseURL.replace(/\/$/,``)}/models`);if(!n.ok)return{ok:!1,message:`HTTP ${n.status}`};let r=((await n.json()).data??[]).map(e=>e.id).filter(e=>!!e);return{ok:!0,message:`${r.length} model(s) discovered`,models:r}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}}async function Te(e){let t=await fetch(e);return{ok:t.ok,status:t.status,json:()=>t.json()}}function Ee(e){return x(e)}function De(e){return S(e)}function Oe(e){if(e.responseFormat===void 0||e.responseFormat===`text`)return;if(e.responseFormat===`json_object`)return{type:`json_object`};let t=Ae(e);return{type:`json_schema`,json_schema:{name:t.name,schema:t.schema,...t.description!==void 0&&{description:t.description},...t.strict!==void 0&&{strict:t.strict}}}}function ke(e){if(e.responseFormat===void 0||e.responseFormat===`text`)return;if(e.responseFormat===`json_object`)return{format:{type:`json_object`}};let t=Ae(e);return{format:{type:`json_schema`,name:t.name,schema:t.schema,...t.description!==void 0&&{description:t.description},...t.strict!==void 0&&{strict:t.strict}}}}function Ae(e){let t=e.jsonSchema;if(e.responseFormat!==`json_schema`)throw Error(`Unsupported OpenAI response format: ${e.responseFormat}`);if(!t?.schema)throw Error(`OpenAI jsonSchema.schema is required when responseFormat is json_schema`);return{name:t.name,schema:t.schema,...t.description!==void 0&&{description:t.description},...t.strict!==void 0&&{strict:t.strict}}}async function je(e){let t=Fe(e.client);try{let n=Ne(e);if(e.chatOptions?.onTextDelta??e.onTextDelta)return await Pe(t,e,{...n,stream:!0});await D(e,n,`chat`),e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=await t.chat.completions.create(n);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`response`,payload:r}),e.responseParser.parseResponse(r)}catch(e){let t=e.message||`OpenAI API request failed`;throw Error(`OpenAI chat failed: ${t}`)}}async function*Me(e){let t=Fe(e.client);try{let n={...Ne(e),stream:!0};await D(e,n,`stream`),e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=await t.chat.completions.create(n,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0);for await(let t of T(r,{provider:`openai`,apiSurface:`chat-completions`,onProviderNativeRawPayload:e.chatOptions?.onProviderNativeRawPayload})){let n=e.responseParser.parseStreamingChunk(t);n&&(yield n)}}catch(e){let t=e.message||`OpenAI API request failed`;throw Error(`OpenAI stream failed: ${t}`)}}function Ne(e){let t=Ee(e.messages),n=e.chatOptions?.model??e.providerOptions.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let r=Oe(e.providerOptions);return{model:n,messages:t,...e.chatOptions?.temperature!==void 0&&{temperature:e.chatOptions.temperature},...e.chatOptions?.maxTokens!==void 0&&{max_tokens:e.chatOptions.maxTokens},...e.chatOptions?.tools&&{tools:De(e.chatOptions.tools),tool_choice:`auto`},...r!==void 0&&{response_format:r}}}async function Pe(e,t,n){try{return await D(t,n,`stream`),t.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n}),w({stream:T(await e.chat.completions.create(n,t.chatOptions?.signal?{signal:t.chatOptions.signal}:void 0),{provider:`openai`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t.chatOptions?.onProviderNativeRawPayload}),onTextDelta:t.chatOptions?.onTextDelta??t.onTextDelta,signal:t.chatOptions?.signal})}catch(e){let t=e.message||`OpenAI streaming request failed`;throw Error(`OpenAI stream failed: ${t}`)}}async function D(e,t,n){if(!e.payloadLogger?.isEnabled())return;let r={model:t.model,messagesCount:t.messages.length,hasTools:!!t.tools,temperature:t.temperature??void 0,maxTokens:t.max_tokens??void 0,timestamp:new Date().toISOString()};await e.payloadLogger.logPayload(r,n)}function Fe(e){if(!e)throw Error(`OpenAI client not available. Either provide a client/apiKey or use an executor.`);return e}var Ie=class{parser;constructor(e){this.parser=new C({logger:e})}parseResponse(e){try{return this.parser.parseResponse(e)}catch(e){let t=Le(e instanceof Error?e.message:`OpenAI response parsing failed`);throw Error(`OpenAI response parsing failed: ${t}`)}}parseStreamingChunk(e){try{return this.parser.parseStreamingChunk(e)}catch(e){let t=Le(e instanceof Error?e.message:`OpenAI chunk parsing failed`);throw Error(`OpenAI chunk parsing failed: ${t}`)}}};function Le(e){return e.replace(/^OpenAI-compatible response parsing failed: /,``).replace(/^OpenAI-compatible chunk parsing failed: /,``).replace(`OpenAI-compatible response`,`OpenAI response`)}function Re(e){return e.flatMap(e=>Be(e))}function ze(e,t){let n=e?.map(e=>({type:`function`,name:e.name,description:e.description,parameters:e.parameters,strict:t??!1}))??[];return n.length>0?n:void 0}function Be(e){if(e.role===`user`)return[O(`user`,He(e.content,e.parts))];if(e.role===`system`)return[O(`system`,e.content)];if(e.role===`tool`){if(!e.toolCallId||e.toolCallId.trim().length===0)throw Error(`Tool message missing toolCallId: ${JSON.stringify(e)}`);return[{type:`function_call_output`,call_id:e.toolCallId,output:e.content||``}]}return Ve(e)}function Ve(e){let t=[];e.content&&e.content.length>0&&t.push(O(`assistant`,e.content));for(let n of e.toolCalls??[])t.push({type:`function_call`,call_id:n.id,name:n.function.name,arguments:n.function.arguments});return t.length===0&&t.push(O(`assistant`,``)),t}function He(e,t){if(!t||t.length===0)return e;let n=t.map(e=>Ue(e));return e.length>0&&!t.some(e=>e.type===`text`)?[{type:`input_text`,text:e},...n]:n}function Ue(e){return e.type===`text`?{type:`input_text`,text:e.text}:e.type===`image_uri`?{type:`input_image`,image_url:e.uri}:{type:`input_image`,image_url:`data:${e.mimeType};base64,${e.data}`}}function O(e,t){return{role:e,content:t}}async function*We(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Ge(n,t);if(e.done||t?.aborted)break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async function Ge(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}function Ke(e){ct(e);let t=e.output??[];return k({content:e.output_text??nt(t),toolCalls:$e(t),response:e,reasoning:A(t)})}async function qe(e){let t={textParts:[],toolCalls:[],reasoning:ot()};for await(let n of We(e.stream,e.signal))Je(t,n,e.onTextDelta);return t.completedResponse===void 0?k({content:t.textParts.join(``),toolCalls:t.toolCalls,reasoning:t.reasoning}):Xe(t)}function Je(e,t,n){if(t.type===`response.output_text.delta`){e.textParts.push(t.delta),n?.(t.delta);return}if(t.type===`response.completed`){e.completedResponse=t.response,j(e.reasoning,A(t.response.output??[]));return}if(t.type===`response.output_item.done`){Ye(e,t.item);return}if(t.type===`response.error`||t.type===`response.failed`||t.type===`response.incomplete`)throw Error(`OpenAI Responses API failed: ${lt(t)}`)}function Ye(e,t){if(et(t)){e.toolCalls.push(tt(t));return}at(t)&&j(e.reasoning,A([t]))}function Xe(e){let t=e.completedResponse;if(t===void 0)throw Error(`OpenAI Responses stream completed without response metadata`);ct(t);let n=t.output??[],r=$e(n),i=e.textParts.length>0?e.textParts.join(``):t.output_text??nt(n),a=A(n);return j(a,e.reasoning),k({content:i,toolCalls:r.length>0?r:e.toolCalls,response:t,reasoning:a})}function k(t){return{id:e(),role:`assistant`,content:t.content,state:`complete`,timestamp:new Date,...t.toolCalls.length>0&&{toolCalls:t.toolCalls},...t.response?.usage!==void 0&&{usage:Qe(t.response.usage)},metadata:Ze(t.response,t.reasoning)}}function Ze(e,t){return{providerApiSurface:`responses`,...e?.id!==void 0&&{responseId:e.id},...e?.model!==void 0&&{model:e.model},...e?.status!==void 0&&{finishReason:e.status},...t.reasoningSummaryCount>0&&{reasoningSummaryCount:t.reasoningSummaryCount,reasoningSummaries:t.reasoningSummaries},...t.hasEncryptedReasoning&&{hasEncryptedReasoning:!0}}}function Qe(e){return{promptTokens:e.input_tokens??0,completionTokens:e.output_tokens??0,totalTokens:e.total_tokens??0}}function $e(e){return e.filter(et).map(e=>tt(e))}function et(e){return e.type===`function_call`&&`call_id`in e&&`name`in e&&`arguments`in e}function tt(e){return{id:e.call_id,type:`function`,function:{name:e.name,arguments:e.arguments}}}function nt(e){return e.filter(it).flatMap(e=>e.content).map(rt).join(``)}function rt(e){return e.type===`refusal`?e.refusal:e.text}function it(e){return e.type===`message`&&`content`in e&&Array.isArray(e.content)}function A(e){let t=ot();for(let n of e){if(!at(n))continue;let e=n.summary?.map(e=>e.text).filter(st)??[];t.reasoningSummaryCount+=e.length,t.reasoningSummaries.push(...e),t.hasEncryptedReasoning=t.hasEncryptedReasoning||!!n.encrypted_content}return t}function at(e){return e.type===`reasoning`}function ot(){return{reasoningSummaryCount:0,reasoningSummaries:[],hasEncryptedReasoning:!1}}function j(e,t){e.reasoningSummaryCount+=t.reasoningSummaryCount,e.reasoningSummaries.push(...t.reasoningSummaries),e.hasEncryptedReasoning=e.hasEncryptedReasoning||t.hasEncryptedReasoning}function st(e){return e!==void 0}function ct(e){if(e.status===`failed`||e.status===`incomplete`)throw Error(`OpenAI Responses API failed: ${e.error?.message??e.status}`)}function lt(e){return e.message??e.error?.message??e.response?.error?.message??`unknown error`}async function ut(e){let t=e.chatOptions?.onTextDelta??e.onTextDelta;if(t)return ft({...e,chatOptions:{...e.chatOptions,onTextDelta:t}});if(!e.client)throw Error(`OpenAI Responses client not available.`);try{let t=pt(e);e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`responses`,payloadKind:`request`,payload:t});let n=await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`responses`,payloadKind:`response`,payload:n}),Ke(n)}catch(e){let t=e.message||`OpenAI Responses API request failed`;throw Error(`OpenAI responses failed: ${t}`)}}async function*dt(e){let t={deltas:[]},n=e.chatOptions?.onTextDelta??e.onTextDelta,r=ft({...e,chatOptions:{...e.chatOptions,onTextDelta:e=>{n?.(e),_t(t,ht(e))}}}).then(e=>vt(t,e)).catch(e=>yt(t,Ct(e)));yield*gt(t),await r}async function ft(e){if(!e.client)throw Error(`OpenAI Responses client not available.`);try{let t=mt(e);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`responses`,payloadKind:`request`,payload:t}),qe({stream:T(await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0),{provider:`openai`,apiSurface:`responses`,onProviderNativeRawPayload:e.chatOptions?.onProviderNativeRawPayload}),onTextDelta:e.chatOptions?.onTextDelta,signal:e.chatOptions?.signal})}catch(e){let t=e.message||`OpenAI Responses streaming request failed`;throw Error(`OpenAI responses stream failed: ${t}`)}}function pt(e){let t=e.chatOptions?.model??e.providerOptions.defaultModel;if(!t)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let n=ze(e.chatOptions?.tools,e.providerOptions.strictTools),r=ke(e.providerOptions);return{model:t,input:Re(e.messages),...n!==void 0&&{tools:n,tool_choice:`auto`},...e.chatOptions?.temperature!==void 0&&{temperature:e.chatOptions.temperature},...e.chatOptions?.maxTokens!==void 0&&{max_output_tokens:e.chatOptions.maxTokens},...r!==void 0&&{text:r},...e.providerOptions.reasoning!==void 0&&{reasoning:e.providerOptions.reasoning},...e.providerOptions.includeEncryptedReasoning===!0&&{include:[`reasoning.encrypted_content`]},...e.providerOptions.store!==void 0&&{store:e.providerOptions.store}}}function mt(e){return{...pt(e),stream:!0}}function ht(t){return{id:e(),role:`assistant`,content:t,state:`complete`,timestamp:new Date,metadata:{providerApiSurface:`responses`,isStreamChunk:!0,isComplete:!1}}}async function*gt(e){for(;;){let t=e.deltas.shift();if(t!==void 0){yield t;continue}if(e.error!==void 0)throw e.error;if(e.finalMessage!==void 0){yield St(e.finalMessage);return}await bt(e)}}function _t(e,t){e.deltas.push(t),xt(e)}function vt(e,t){e.finalMessage=t,xt(e)}function yt(e,t){e.error=t,xt(e)}function bt(e){return new Promise(t=>{e.wake=t})}function xt(e){e.wake?.(),e.wake=void 0}function St(e){return{...e,content:``,metadata:{...e.metadata,isStreamChunk:!0,isComplete:!0}}}function Ct(e){return e instanceof Error?e:Error(String(e))}var wt=class extends n{name=`openai`;version=`1.0.0`;client;options;apiSurface;payloadLogger;responseParser;onTextDelta;constructor(e){if(super(e.logger||i),this.options=e,this.apiSurface=Tt(e),Dt(this.apiSurface,e.nativeWebTools),e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new s({apiKey:e.apiKey,...e.organization&&{organization:e.organization},...e.timeout&&{timeout:e.timeout},...e.baseURL&&{baseURL:e.baseURL}});else throw Error(`Either OpenAI client, apiKey, or executor is required`);this.responseParser=new Ie(this.logger),this.payloadLogger=e.payloadLogger}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`OpenAI Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}return this.apiSurface===`responses`?ut({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,onTextDelta:this.onTextDelta}):je({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,payloadLogger:this.payloadLogger,responseParser:this.responseParser,onTextDelta:this.onTextDelta})}async*chatStream(e,t){if(this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`OpenAI Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(this.apiSurface===`responses`){yield*dt({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,onTextDelta:this.onTextDelta});return}yield*Me({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,payloadLogger:this.payloadLogger,responseParser:this.responseParser,onTextDelta:this.onTextDelta})}supportsTools(){return!0}getCapabilities(){let e=this.apiSurface===`chat-completions`?`openai-compatible-chat-completions`:`openai-responses`;return{functionCalling:{supported:!0},nativeWebTools:{webSearch:{supported:!1,enabled:!1,source:e,reason:Et(this.apiSurface,`search`)},webFetch:{supported:!1,enabled:!1,source:e,reason:Et(this.apiSurface,`fetch`)}}}}validateConfig(){return!!this.client&&!!this.options}async dispose(){}validateMessages(e){super.validateMessages(e);for(let t of e)if(t.role===`assistant`){let e=t;if(e.toolCalls&&e.toolCalls.length>0&&e.content===``)continue}}};function Tt(e){return e.apiSurface===void 0?e.baseURL?`chat-completions`:`responses`:e.apiSurface}function Et(e,t){return e===`chat-completions`?`OpenAI-compatible Chat Completions endpoints support declared function tools, not provider-native web ${t}.`:`OpenAI Responses native web ${t} is not wired in this Robota provider version.`}function Dt(e,t){if(!(t?.webSearch!==!0&&t?.webFetch!==!0))throw Error(`Provider openai native web search/fetch is not supported for apiSurface ${e} in this Robota provider version.`)}var Ot=class{static filterMessagesForOpenAI(e){return e.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`system`?!0:e.role===`tool`?!!(e.toolCallId&&e.toolCallId.trim()!==``&&e.toolCallId!==`unknown`):!1)}static toOpenAIFormat(e){return this.filterMessagesForOpenAI(e).map(e=>this.convertMessage(e))}static convertMessage(e){let t=e.role;if(t===`user`)return{role:`user`,content:e.content};if(t===`assistant`){let t=e;return t.toolCalls&&t.toolCalls.length>0?{role:`assistant`,content:t.content===``?null:t.content||null,tool_calls:t.toolCalls.map(e=>({id:e.id,type:`function`,function:{name:e.function.name,arguments:e.function.arguments}}))}:{role:`assistant`,content:t.content===null||t.content===``?null:t.content||``}}if(t===`system`)return{role:`system`,content:e.content};if(t===`tool`){if(!e.toolCallId||e.toolCallId.trim()===``)throw Error(`Tool message missing toolCallId: ${JSON.stringify(e)}`);return{role:`tool`,content:e.content,tool_call_id:e.toolCallId}}throw Error(`Unsupported message role: ${t}`)}static addSystemPromptIfNeeded(e,t){return!t||e.some(e=>e.role===`system`)?e:[{role:`system`,content:t},...e]}};const kt=`https://platform.openai.com/docs/api-reference/models/list`;async function At(e,t={}){if(!e.apiKey)return Pt(`OpenAI model catalog refresh requires apiKey.`);let n=t.fetcher??Ft,r=t.now??(()=>new Date),i=jt(e.baseURL);try{let t=await n(i,{headers:{Authorization:`Bearer ${e.apiKey}`}});if(!t.ok)return Pt(Nt(t));let a=Mt(await t.json());return{status:`live`,entries:a,lastVerifiedAt:r().toISOString(),sourceUrl:kt,message:`${a.length} OpenAI model(s) discovered.`}}catch(e){return Pt(e instanceof Error?e.message:String(e))}}function jt(e){return e?`${e.replace(/\/$/,``)}/models`:`https://api.openai.com/v1/models`}function Mt(e){return(e.data??[]).map(e=>e.id).filter(e=>e!==void 0&&e.trim().length>0).map(e=>({id:e,displayName:e,lifecycle:`active`}))}function Nt(e){let t=e.statusText?` ${e.statusText}`:``;return`OpenAI model catalog refresh failed: HTTP ${e.status}${t}`}function Pt(e){return{status:`unavailable`,sourceUrl:kt,message:e}}async function Ft(e,t){let n=await fetch(e,t);return{ok:n.ok,status:n.status,statusText:n.statusText,json:()=>n.json()}}const It=void 0,Lt=`$ENV:OPENAI_API_KEY`,Rt=[{kind:`api-key`,label:`OpenAI API keys`,url:`https://platform.openai.com/api-keys`,sourceUrl:`https://developers.openai.com/api/reference/overview#authentication`,lastVerifiedAt:`2026-05-08`}];function zt(){return{type:`openai`,displayName:`OpenAI`,description:`Official OpenAI Responses API provider`,defaults:{apiKey:Lt},modelCatalog:{status:`unavailable`,sourceUrl:`https://platform.openai.com/docs/api-reference/models/list`,message:`OpenAI model availability should be discovered live from GET /v1/models.`},setupHelpLinks:Rt,setupSteps:[{key:`model`,title:`OpenAI model`,required:!0},{key:`apiKey`,title:`OpenAI API key`,defaultValue:Lt,masked:!0}],requiresApiKey:!0,probeProfile:E,refreshModelCatalog:({profile:e})=>At(e),modelCatalogCacheTtlSeconds:86400,createProvider:e=>{let t=Vt(e.options),n=Ht(e.options);return Wt(e.baseURL,t,n),new wt({apiKey:Bt(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},...t!==void 0&&{apiSurface:t},...n!==void 0&&{nativeWebTools:n},defaultModel:e.model})}}}function Bt(e){if(!e)throw Error(`Provider openai requires apiKey`);return e}function Vt(e){let t=e?.apiSurface;if(t===`responses`||t===`chat-completions`)return t}function Ht(e){let t=Ut(e?.nativeWebTools)??Ut(e?.builtInWebTools);if(t!==void 0)return t}function Ut(e){if(e==null||e instanceof Date||Array.isArray(e)||typeof e!=`object`)return;let t=e.webSearch,n=e.webFetch;return{...typeof t==`boolean`&&{webSearch:t},...typeof n==`boolean`&&{webFetch:n}}}function Wt(e,t,n){if(!(n?.webSearch!==!0&&n?.webFetch!==!0))throw Error(e!==void 0||t===`chat-completions`?`Provider openai profile uses an OpenAI-compatible Chat Completions endpoint; native web search/fetch is not supported for this profile. Use Robota local WebSearch/WebFetch tools or a provider with documented hosted web support.`:`Provider openai native web search/fetch is not wired in this Robota provider version. Use Robota local WebSearch/WebFetch tools or a provider with documented hosted web support.`)}const M=`deepseek-v4-flash`,Gt=`DEEPSEEK_API_KEY`,Kt=`$ENV:${Gt}`,qt=`https://api.deepseek.com`;var Jt=class extends n{name=`deepseek`;version=`1.0.0`;client;options;responseParser;onTextDelta;constructor(e){if(super(e.logger||i),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new s({apiKey:e.apiKey,baseURL:e.baseURL??`https://api.deepseek.com`,...e.timeout!==void 0&&{timeout:e.timeout}});else throw Error(`Either DeepSeek client, apiKey, or executor is required`);this.responseParser=new C({logger:this.logger})}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`DeepSeek Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}let n=this.getClient();try{let r=this.buildRequestParams(e,t),i=t?.onTextDelta??this.onTextDelta;if(i)return await this.chatWithStreamingAssembly({...r,stream:!0},{...t,onTextDelta:i});t?.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`request`,payload:r});let a=await n.chat.completions.create(r);return t?.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`response`,payload:a}),this.responseParser.parseResponse(a)}catch(e){let t=e.message||`DeepSeek API request failed`;throw Error(`DeepSeek chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`DeepSeek Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}let n=this.getClient();try{let r=this.buildStreamingRequestParams(e,t);t?.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`request`,payload:r});let i=T(await n.chat.completions.create(r),{provider:`deepseek`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t?.onProviderNativeRawPayload});for await(let e of this.streamWithAbort(i,t?.signal)){let t=this.responseParser.parseStreamingChunk(e);t&&(yield t)}}catch(e){let t=e.message||`DeepSeek API request failed`;throw Error(`DeepSeek stream failed: ${t}`)}}supportsTools(){return!0}getCapabilities(){return{functionCalling:{supported:!0},nativeWebTools:{webSearch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`DeepSeek OpenAI-compatible Chat Completions supports declared function tools, not provider-native web search.`},webFetch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`DeepSeek OpenAI-compatible Chat Completions supports declared function tools, not provider-native web fetch.`}}}}validateConfig(){return!!this.client&&!!this.options}async dispose(){}buildRequestParams(e,t){this.validateTools(t?.tools);let n=t?.model??this.options.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return{model:n,messages:x(e),...t?.temperature!==void 0&&{temperature:t.temperature},...t?.maxTokens!==void 0&&{max_tokens:t.maxTokens},...t?.tools&&{tools:S(t.tools),tool_choice:`auto`},...this.options.thinking!==void 0&&{thinking:{type:this.options.thinking}},...this.options.reasoningEffort!==void 0&&{reasoning_effort:this.options.reasoningEffort}}}buildStreamingRequestParams(e,t){return{...this.buildRequestParams(e,t),stream:!0}}getClient(){if(!this.client)throw Error(`DeepSeek client not available. Either provide a client/apiKey or use an executor.`);return this.client}async chatWithStreamingAssembly(e,t){let n=this.getClient();try{return t.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`request`,payload:e}),w({stream:T(await n.chat.completions.create(e,t.signal?{signal:t.signal}:void 0),{provider:`deepseek`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t.onProviderNativeRawPayload}),onTextDelta:t.onTextDelta,signal:t.signal})}catch(e){let t=e.message||`DeepSeek streaming request failed`;throw Error(`DeepSeek stream failed: ${t}`)}}};const N=`https://api-docs.deepseek.com/quick_start/pricing`,Yt=`https://api-docs.deepseek.com/api/list-models`,P=`2026-05-07`,Xt=`2026-07-24`,Zt=[{id:M,displayName:`DeepSeek V4 Flash`,contextWindow:1e6,capabilities:[`tools`,`reasoning`,`json_schema`,`streaming`],lifecycle:`active`,sourceUrl:N,lastVerifiedAt:P},{id:`deepseek-v4-pro`,displayName:`DeepSeek V4 Pro`,contextWindow:1e6,capabilities:[`tools`,`reasoning`,`json_schema`,`streaming`],lifecycle:`active`,sourceUrl:N,lastVerifiedAt:P},{id:`deepseek-chat`,displayName:`DeepSeek Chat compatibility alias, deprecated ${Xt}`,aliases:[M],contextWindow:1e6,capabilities:[`tools`,`json_schema`,`streaming`],lifecycle:`deprecated`,sourceUrl:N,lastVerifiedAt:P},{id:`deepseek-reasoner`,displayName:`DeepSeek Reasoner compatibility alias, deprecated ${Xt}`,aliases:[M],contextWindow:1e6,capabilities:[`reasoning`,`json_schema`,`streaming`],lifecycle:`deprecated`,sourceUrl:N,lastVerifiedAt:P}];function Qt(e){return Zt.find(t=>t.id===e)}async function $t(e,t=rn){let n=await t(`${nn(e.baseURL??`https://api.deepseek.com`)}/models`,en(e.apiKey));return n.ok?{status:`live`,sourceUrl:N,lastVerifiedAt:P,entries:((await n.json()).data??[]).map(e=>e.id).filter(e=>typeof e==`string`&&e.length>0).map(tn)}:{status:`unavailable`,sourceUrl:N,message:`DeepSeek model refresh failed: HTTP ${n.status}`}}function en(e){if(e)return{headers:{Authorization:`Bearer ${e}`}}}function tn(e){return Qt(e)??{id:e,displayName:e,lifecycle:`active`,sourceUrl:`https://api-docs.deepseek.com/quick_start/pricing`,lastVerifiedAt:`2026-05-07`}}function nn(e){return e.replace(/\/$/,``)}async function rn(e,t){let n=await fetch(e,{...t?.headers!==void 0&&{headers:t.headers}});return{ok:n.ok,status:n.status,json:()=>n.json()}}const an={status:`fallback`,sourceUrl:N,lastVerifiedAt:P,entries:Zt},on=[{kind:`api-key`,label:`DeepSeek API keys`,url:`https://platform.deepseek.com/api_keys`,sourceUrl:`https://api-docs.deepseek.com/`,lastVerifiedAt:`2026-05-08`}];function sn(){return{type:`deepseek`,displayName:`DeepSeek`,description:`DeepSeek OpenAI-compatible endpoint`,defaults:{model:M,apiKey:Kt,baseURL:qt},modelCatalog:an,setupHelpLinks:on,setupSteps:[{key:`baseURL`,title:`DeepSeek OpenAI-compatible base URL`,defaultValue:qt},{key:`model`,title:`DeepSeek model`,defaultValue:M},{key:`apiKey`,title:`DeepSeek API key`,defaultValue:Kt,masked:!0}],requiresApiKey:!0,probeProfile:E,refreshModelCatalog:({profile:e})=>$t(e),modelCatalogCacheTtlSeconds:86400,createProvider:e=>{let t=ln(e.options);return new Jt({apiKey:cn(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},...t.thinking!==void 0&&{thinking:t.thinking},...t.reasoningEffort!==void 0&&{reasoningEffort:t.reasoningEffort},defaultModel:e.model})}}}function cn(e){if(!e)throw Error(`Provider deepseek requires apiKey`);return e}function ln(e){let t=un(e?.thinking),n=dn(e?.reasoningEffort);return{...t!==void 0&&{thinking:t},...n!==void 0&&{reasoningEffort:n}}}function un(e){if(e===!0)return`enabled`;if(e===!1)return`disabled`;if(e===`enabled`||e===`disabled`)return e;let t=fn(e)?.type;return t===`enabled`||t===`disabled`?t:void 0}function dn(e){if(e===`low`||e===`medium`||e===`high`||e===`xhigh`||e===`max`)return e}function fn(e){if(!(e==null||e instanceof Date||Array.isArray(e)))return typeof e==`object`?e:void 0}function pn(e){return e?e.some(e=>e.type===`image_inline`||e.type===`image_uri`):!1}function mn(e){if(!e)return[];let t=[];for(let n of e)n.type===`image_inline`&&t.push({kind:`uri`,uri:`data:${n.mimeType};base64,${n.data}`,mimeType:n.mimeType});return t}function hn(e){let t=e.indexOf(`,`);if(t<0)return;let n=e.slice(0,t),r=e.slice(t+1);if(!n.endsWith(`;base64`))return;let i=n.replace(`data:`,``).replace(`;base64`,``).trim();if(!(i.length===0||r.trim().length===0))return{mimeType:i,data:r}}function gn(e){if(e.kind===`inline`)return e.mimeType.trim().length===0||e.data.trim().length===0?{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Inline image source requires non-empty mimeType and data.`}}:{ok:!0,value:{type:`image_inline`,mimeType:e.mimeType,data:e.data}};if(!e.uri.startsWith(`data:`))return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Google image provider supports only inline or data URI input sources.`}};let t=hn(e.uri);return t?{ok:!0,value:{type:`image_inline`,mimeType:t.mimeType,data:t.data}}:{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Data URI source must use base64 payload.`}}}function _n(e,t,n){return n&&n.length>0?n:e.some(e=>pn(e.parts))?[`TEXT`,`IMAGE`]:t&&t.length>0?t:[`TEXT`]}function vn(e,t){return!t||t.length===0?!0:t.includes(e)}function yn(e,t,n){Tn(t);let r=_n(e,t.defaultResponseModalities,n?.google?.responseModalities);bn(n?.model,r,t);let i={responseModalities:r};return xn(i,n),Sn(i,t,n),Cn(i,t),wn(i,t),i}function bn(e,t,n){if(!(!e||!t.includes(`IMAGE`))&&!vn(e,n.imageCapableModels))throw Error(`Selected model "${e}" is not configured as image-capable for Google provider.`)}function xn(e,t){typeof t?.temperature==`number`&&(e.temperature=t.temperature),typeof t?.maxTokens==`number`&&(e.maxOutputTokens=t.maxTokens),typeof t?.google?.topP==`number`&&(e.topP=t.google.topP),typeof t?.google?.topK==`number`&&(e.topK=t.google.topK),typeof t?.google?.candidateCount==`number`&&(e.candidateCount=t.google.candidateCount),t?.google?.stopSequences&&t.google.stopSequences.length>0&&(e.stopSequences=t.google.stopSequences),t?.signal&&(e.abortSignal=t.signal)}function Sn(e,t,n){let r=n?.google?.safetySettings??t.safetySettings;r&&r.length>0&&(e.safetySettings=r)}function Cn(e,t){t.responseMimeType&&(e.responseMimeType=t.responseMimeType),t.responseSchema&&(e.responseMimeType=t.responseMimeType??`application/json`,e.responseSchema=t.responseSchema),t.responseJsonSchema&&(e.responseMimeType=t.responseMimeType??`application/json`,e.responseJsonSchema=t.responseJsonSchema)}function wn(e,t){t.thinkingConfig&&(e.thinkingConfig=t.thinkingConfig),t.toolConfig&&(e.toolConfig=t.toolConfig)}function Tn(e){if(e.responseSchema&&e.responseJsonSchema)throw Error(`Gemini structured output options responseSchema and responseJsonSchema are mutually exclusive.`)}function En(e){let t=[],n=e.parts??[];for(let e of n){if(e.type===`text`){t.push({text:e.text});continue}if(e.type===`image_inline`){t.push({inlineData:{mimeType:e.mimeType,data:e.data}});continue}throw Error(`Google provider does not support image URI parts directly: ${e.uri}`)}return t.length===0&&typeof e.content==`string`&&e.content.length>0&&t.push({text:e.content}),t}function Dn(e){let t=[],n=[];for(let r of e){if(r.role===`user`){t.push({role:`user`,parts:En(r)});continue}if(r.role===`assistant`){t.push(On(r));continue}if(r.role===`tool`){t.push(kn(r));continue}let e=An(r);e.length>0&&n.push(e)}return{contents:t,...n.length>0&&{systemInstruction:n.join(`
|
|
5
|
+
`)}}}function On(e){let t=[],n=En(e);for(let e of n)t.push(e);return t.length===0&&e.content&&t.push({text:e.content}),e.toolCalls&&e.toolCalls.length>0&&e.toolCalls.forEach(e=>{t.push({functionCall:{id:e.id,name:e.function.name,args:Mn(e.function.arguments)}})}),{role:`model`,parts:t}}function kn(e){return{role:`user`,parts:[{functionResponse:{id:e.toolCallId,name:jn(e),response:Nn(e.content)}}]}}function An(e){let t=En(e);if(t.length===0)return e.content;let n=[];for(let e of t){if(typeof e.text==`string`){n.push(e.text);continue}throw Error(`Google provider system instructions support only text parts.`)}return n.join(`
|
|
6
|
+
`)}function jn(e){let t=e.name?.trim();if(!t)throw Error(`Google provider tool message requires a function name.`);return t}function Mn(e){let t=JSON.parse(e);if(!Pn(t))throw Error(`Google provider tool call arguments must be a JSON object.`);return t}function Nn(e){let t=e.trim();if(t.length===0)return{output:null};try{let e=JSON.parse(t);return Pn(e)?e:{output:e}}catch{return{output:e}}}function Pn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const Fn={string:l.STRING,number:l.NUMBER,integer:l.INTEGER,boolean:l.BOOLEAN,array:l.ARRAY,object:l.OBJECT};function In(e){return e.map(e=>({name:e.name,description:e.description,parameters:{type:l.OBJECT,properties:Ln(e.parameters.properties),required:e.parameters.required}}))}function Ln(e){let t={};for(let[n,r]of Object.entries(e))t[n]=Rn(r);return t}function Rn(e){let t={},n=zn(e.type);return n&&(t.type=n),e.description&&(t.description=e.description),e.enum&&(t.enum=e.enum.map(String)),e.items&&(t.items=Rn(e.items)),e.properties&&(t.properties=Ln(e.properties)),typeof e.minimum==`number`&&(t.minimum=e.minimum),typeof e.maximum==`number`&&(t.maximum=e.maximum),e.pattern&&(t.pattern=e.pattern),e.format&&(t.format=e.format),e.default!==void 0&&(t.default=e.default),t}function zn(e){if(e!==`null`)return Fn[e]}function Bn(){return`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Vn(t){let n=t.candidates?.[0];if(!n)throw Error(`No candidate in Gemini response`);let r=n.content;if(!r||!r.parts||r.parts.length===0)throw Error(`No content in Gemini response`);let i=Hn(r.parts),a={id:e(),state:`complete`,role:`assistant`,content:i.textValues.length>0?i.textValues.join(``):null,parts:i.messageParts,timestamp:new Date};if(i.functionCalls.length>0){let e=a;e.toolCalls=i.functionCalls.map(e=>({id:e.id??Bn(),type:`function`,function:{name:Kn(e),arguments:JSON.stringify(e.args??{})}}))}let o=Gn(t);return o&&(a.metadata=o),a}function Hn(e){let t=[],n=[],r=[];for(let i of e)Un(i,t,n),Wn(i,n),i.functionCall&&r.push(i.functionCall);return{textValues:t,messageParts:n,functionCalls:r}}function Un(e,t,n){typeof e.text==`string`&&(t.push(e.text),n.push({type:`text`,text:e.text}))}function Wn(e,t){!e.inlineData||typeof e.inlineData.data!=`string`||typeof e.inlineData.mimeType!=`string`||t.push({type:`image_inline`,data:e.inlineData.data,mimeType:e.inlineData.mimeType})}function Gn(e){if(!(!e.usageMetadata||typeof e.usageMetadata.promptTokenCount!=`number`||typeof e.usageMetadata.candidatesTokenCount!=`number`||typeof e.usageMetadata.totalTokenCount!=`number`))return{promptTokens:e.usageMetadata.promptTokenCount,completionTokens:e.usageMetadata.candidatesTokenCount,totalTokens:e.usageMetadata.totalTokenCount}}function Kn(e){if(!e.name||e.name.trim().length===0)throw Error(`Gemini function call is missing a function name.`);return e.name}async function qn(e,t,n,r,i=`gemini`){let a=Xn(t,r),o=_n(n,t.defaultResponseModalities,r?.google?.responseModalities);if(r?.onTextDelta&&!o.includes(`IMAGE`))return Zn(e,t,n,r,i);let s=Dn(n),c=yn(n,t,{...r,model:a}),l=Yn(a,s.contents,c,r,s.systemInstruction);F(r,i,`request`,l);let u=await e.models.generateContent(l);F(r,i,`response`,u);let d=Vn(u);if(o.includes(`IMAGE`)&&!pn(d.parts))throw Error(`Gemini response did not include an image part while IMAGE modality was requested.`);return d}async function*Jn(t,n,r,i,a=`gemini`){let o=Xn(n,i);if(_n(r,n.defaultResponseModalities,i?.google?.responseModalities).includes(`IMAGE`))throw Error(`Google provider does not support streaming image modality responses.`);let s=Dn(r),c=yn(r,n,{...i,model:o}),l=Yn(o,s.contents,c,i,s.systemInstruction);F(i,a,`request`,l);let u=await t.models.generateContentStream(l),d=0;for await(let t of u){F(i,a,`stream_event`,t,d),d++;let n=Qn(t);n&&(i?.onTextDelta?.(n),yield{id:e(),role:`assistant`,content:n,state:`complete`,timestamp:new Date})}}function Yn(e,t,n,r,i){let a={...n};return r?.tools&&r.tools.length>0&&(a.tools=[{functionDeclarations:In(r.tools)}]),i&&(a.systemInstruction=i),{model:e,contents:t,config:a}}function Xn(e,t){let n=t?.model??e.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return n}async function Zn(t,n,r,i,a=`gemini`){let o=[];for await(let e of Jn(t,n,r,i,a))typeof e.content==`string`&&o.push(e.content);let s=o.join(``);return{id:e(),role:`assistant`,content:s,parts:s.length>0?[{type:`text`,text:s}]:[],state:`complete`,timestamp:new Date}}function F(e,t,n,r,i){e?.onProviderNativeRawPayload?.({provider:t,apiSurface:`gemini-generate-content`,payloadKind:n,...i!==void 0&&{sequence:i},payload:r})}function Qn(e){let t=e.text;return typeof t==`function`?t():t}async function $n(e,t,n){try{let r=mn((await e(t,{model:n,google:{responseModalities:[`TEXT`,`IMAGE`]}})).parts);return r.length===0?{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Google image response did not include image output parts.`}}:{ok:!0,value:{outputs:r,model:n}}}catch(e){return{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:e instanceof Error?e.message:`Google image request failed.`}}}}var er=class extends n{name=`gemini`;version=`1.0.0`;onTextDelta;client;options;constructor(e){super(),this.options=e,e.executor&&(this.executor=e.executor),this.executor||(this.client=new c({apiKey:e.apiKey}))}async chat(e,t){if(this.validateMessages(e),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`Gemini Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Google client not available. Either provide apiKey or use an executor.`);try{return await qn(this.client,this.options,e,this.withProviderCallbacks(t),this.name)}catch(e){let t=e instanceof Error?e.message:`Google API request failed`;throw Error(`Google chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`Gemini Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Google client not available. Either provide apiKey or use an executor.`);try{yield*Jn(this.client,this.options,e,this.withProviderCallbacks(t),this.name)}catch(e){let t=e instanceof Error?e.message:`Google API request failed`;throw Error(`Google stream failed: ${t}`)}}async generateImage(t){if(t.prompt.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image generation requires a non-empty prompt.`}};if(t.model.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image generation requires a non-empty model.`}};let n={id:e(),role:`user`,content:t.prompt,state:`complete`,parts:[{type:`text`,text:t.prompt}],timestamp:new Date};return $n(this.chat.bind(this),[n],t.model)}async editImage(t){if(t.prompt.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image edit requires a non-empty prompt.`}};if(t.model.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image edit requires a non-empty model.`}};let n=gn(t.image);if(!n.ok)return n;let r={id:e(),role:`user`,content:t.prompt,state:`complete`,parts:[n.value,{type:`text`,text:t.prompt}],timestamp:new Date};return $n(this.chat.bind(this),[r],t.model)}async composeImage(t){if(t.prompt.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image compose requires a non-empty prompt.`}};if(t.model.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image compose requires a non-empty model.`}};if(t.images.length<2)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image compose requires at least two input images.`}};let n=[];for(let e of t.images){let t=gn(e);if(!t.ok)return t;n.push(t.value)}n.push({type:`text`,text:t.prompt});let r={id:e(),role:`user`,content:t.prompt,state:`complete`,parts:n,timestamp:new Date};return $n(this.chat.bind(this),[r],t.model)}supportsTools(){return!0}validateConfig(){return this.executor?this.executor.validateConfig():!!this.client&&!!this.options&&!!this.options.apiKey}async dispose(){}withProviderCallbacks(e){let t=e?.onTextDelta??this.onTextDelta;return t?{...e,onTextDelta:t}:e}};const tr=`GEMINI_API_KEY`,nr=`$ENV:${tr}`,I=`gemini-3-flash-preview`,L=`https://ai.google.dev/api/models`,R=`2026-05-04`,rr=[{kind:`api-key`,label:`Google AI Studio API keys`,url:`https://aistudio.google.com/apikey`,sourceUrl:`https://ai.google.dev/gemini-api/docs/api-key`,lastVerifiedAt:`2026-05-08`}];function ir(){return{type:`gemini`,aliases:[`google`],displayName:`Gemini`,description:`Google Gemini API provider`,defaults:{model:I,apiKey:nr},modelCatalog:{status:`fallback`,sourceUrl:L,lastVerifiedAt:R,entries:[{id:I,displayName:`Gemini 3 Flash Preview`,capabilities:[`tools`,`vision`,`json_schema`,`reasoning`,`streaming`],lifecycle:`preview`,sourceUrl:L,lastVerifiedAt:R}]},setupHelpLinks:rr,setupSteps:[{key:`model`,title:`Gemini model`,defaultValue:I},{key:`apiKey`,title:`Gemini API key`,defaultValue:nr,masked:!0}],requiresApiKey:!0,refreshModelCatalog:({profile:e})=>sr(e),modelCatalogCacheTtlSeconds:86400,createProvider:e=>new er({apiKey:ar(e.apiKey),defaultModel:e.model})}}function ar(e){if(!e)throw Error(`Provider gemini requires apiKey`);return e}const or=`https://generativelanguage.googleapis.com/v1beta/models`;async function sr(e,t=ur){let n=await t(e.apiKey?`${or}?key=${e.apiKey}`:or);if(!n.ok)return{status:`unavailable`,sourceUrl:L,message:`Gemini model refresh failed: HTTP ${n.status}`};let r=((await n.json()).models??[]).filter(cr).map(lr);return{status:`live`,sourceUrl:L,lastVerifiedAt:new Date().toISOString(),entries:r,message:`Fetched ${r.length} Gemini models`}}function cr(e){return e.supportedGenerationMethods?.includes(`generateContent`)===!0}function lr(e){let t=e.name??``,n=t.startsWith(`models/`)?t.slice(7):t,r=t.includes(`preview`)?`preview`:`active`;return{id:n,displayName:e.displayName??n,lifecycle:r,sourceUrl:L,lastVerifiedAt:R}}async function ur(e,t){let n=await fetch(e);return{ok:n.ok,status:n.status,json:()=>n.json()}}const dr=`<|channel>`;function fr(e){let t=mr(e,{final:!0});return{rawText:e,visibleText:t.visibleParts.join(``),removedReasoning:t.removedReasoning}}var pr=class{buffer=``;emittedVisibleText=``;hasRemovedReasoning=!1;get rawText(){return this.buffer}get removedReasoning(){return this.hasRemovedReasoning}project(e){return e.length===0?``:(this.buffer+=e,this.projectVisibleText({final:!1}))}flush(){return this.projectVisibleText({final:!0})}projectVisibleText(e){let t=mr(this.buffer,e);this.hasRemovedReasoning=this.hasRemovedReasoning||t.removedReasoning;let n=t.visibleParts.join(``),r=n.slice(this.emittedVisibleText.length);return this.emittedVisibleText=n,r}};function mr(e,t){let n={visibleParts:[],removedReasoning:!1},r=0;for(;r<e.length;){let i=e.indexOf(dr,r);if(i===-1){hr(n,e.slice(r),t);break}hr(n,e.slice(r,i),t);let a=i+10,o=e.indexOf(`<channel|>`,a);if(o===-1){t.final&&(n.removedReasoning=!0);break}n.removedReasoning=!0,r=gr(e,a,o)}return n}function hr(e,t,n){if(t.length===0)return;if(n.final){e.visibleParts.push(t);return}let r=_r(t);e.visibleParts.push(t.slice(0,t.length-r))}function gr(e,t,n){let r=e.slice(t,n),i=n+10;if(r.trim().length===0){let t=e.slice(i).match(/^thought(?:\r?\n)*/);return t&&(i+=t[0].length),i}return r.split(/\r?\n/,1)[0]?.trim(),i}function _r(e){let t=Math.min(e.length,9);for(let n=t;n>0;--n)if(dr.startsWith(e.slice(e.length-n)))return n;return 0}function vr(e){return[`<`]}function yr(e,t,n){return e.indexOf(`<`,t)}function br(e,t){return+!!e.endsWith(`<`)}function xr(e,t){let n=e.indexOf(`>`,t+1);if(n===-1)return;let r=e.slice(t,n+1),i=r.match(/^<\s*([A-Za-z][\w:-]*)([\s/>][\s\S]*?|)>$/);if(!i)return;let a=i[1]??``;return{tagName:a,normalizedName:a.toLowerCase(),rawOpenTag:r,attributes:Tr(i[2]??``),openEnd:n+1,selfClosing:/\/\s*>$/.test(r)}}function Sr(e,t,n){if(t.selfClosing)return{innerText:``,end:t.openEnd,complete:!0};let r=Or(e,t.tagName,t.openEnd);if(r===-1)return{innerText:e.slice(t.openEnd),end:n.final?e.length:t.openEnd-t.rawOpenTag.length,complete:!1};let i=e.indexOf(`>`,r);return{innerText:e.slice(t.openEnd,r),end:i===-1?e.length:i+1,complete:!0}}function Cr(e,t){if(t.selfClosing)return{rawText:t.rawOpenTag,end:t.openEnd};let n=Or(e,t.tagName,t.openEnd);if(n===-1)return{rawText:t.rawOpenTag,end:t.openEnd};let r=e.indexOf(`>`,n),i=r===-1?e.length:r+1;return{rawText:e.slice(t.openEnd-t.rawOpenTag.length,i),end:i}}function wr(e,t){let n=kr(e);return t.find(e=>kr(e)===n)}function Tr(e){let t={},n=/([A-Za-z_][\w:-]*)\s*=\s*(?:"([^"]*)"|'([^']*)')/g,r=n.exec(e);for(;r;){let i=r[1]??``;t[i]=Er(Dr(r[2]??r[3]??``)),r=n.exec(e)}return t}function Er(e){return e===`true`?!0:e===`false`?!1:e===`null`?null:/^-?(?:0|[1-9]\d*)(?:\.\d+)?$/.test(e)?Number(e):e}function Dr(e){return e.replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`).replace(/&/g,`&`)}function Or(e,t,n){return e.toLowerCase().indexOf(`</${t.toLowerCase()}>`,n)}function kr(e){return e.replace(/[^a-z0-9]/gi,``).toLowerCase()}function Ar(e,t){let n=jr(e,t);return n?[n]:[]}function jr(e,t){let n=e.indexOf(`>`),r=e.lastIndexOf(`</`);if(n===-1||r===-1||r<=n)return;let i=Mr(e.slice(n+1,r).trim());if(!Nr(i))return;let a=i.command,o=i.args;if(typeof a!=`string`||!Nr(o))return;let s=wr(a,t);if(s)return{toolName:s,args:o}}function Mr(e){try{return JSON.parse(e)}catch{return}}function Nr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pr(e,t,n){let r=Wr(),i=vr(t.toolNames),a=0;for(;a<e.length;){let o=yr(e,a,i);if(o===-1){Br(r,e.slice(a),n,i);break}Br(r,e.slice(a,o),n,i);let s=Fr(e,o,r,t,n);if(!s.completed)break;a=s.cursor}return{visibleText:r.visibleParts.join(``),toolCalls:r.toolCalls,rawToolCallTextParts:r.rawToolCallTextParts,removedToolCallText:r.removedToolCallText}}function Fr(e,t,n,r,i){let a=xr(e,t);if(!a)return Ir(e,t,n,i);let o=wr(a.tagName,r.toolNames);return o?zr(e,a,o,n,r):Lr(e,t,a,n,r,i)}function Ir(e,t,n,r){return r.final?(n.visibleParts.push(e[t]??``),{cursor:t+1,completed:!0}):{cursor:t,completed:!1}}function Lr(e,t,n,r,i,a){let o=Sr(e,n,a);if(!o.complete&&!a.final)return{cursor:t,completed:!1};let s=e.slice(t,o.end),c=r.rawToolCallTextParts.length;return r.removedToolCallText=!0,Hr(r,s,i),Gr(r,Rr(o,r,i)),r.rawToolCallTextParts.length===c&&r.rawToolCallTextParts.push(s),{cursor:o.end,completed:!0}}function Rr(e,t,n){return Pr(e.innerText,{...n,startCallIndex:Kr(t,n)},{final:!0})}function zr(e,t,n,r,i){let a=Cr(e,t);return Vr(r,n,t.attributes,a.rawText,i),{cursor:a.end,completed:!0}}function Br(e,t,n,r){if(t.length===0)return;if(n.final){e.visibleParts.push(t);return}let i=br(t,r);e.visibleParts.push(t.slice(0,t.length-i))}function Vr(e,t,n,r,i){Object.keys(n).length!==0&&(e.toolCalls.push(Ur(t,n,i,e)),e.rawToolCallTextParts.push(r),e.removedToolCallText=!0)}function Hr(e,t,n){let r=Ar(t,n.toolNames);for(let i of r)e.toolCalls.push(Ur(i.toolName,i.args,n,e)),e.rawToolCallTextParts.push(t)}function Ur(e,t,n,r){return{id:`${n.callIdPrefix??`gemma_call`}_${Kr(r,n)}`,type:`function`,function:{name:e,arguments:JSON.stringify(t)}}}function Wr(){return{visibleParts:[],toolCalls:[],rawToolCallTextParts:[],removedToolCallText:!1}}function Gr(e,t){e.toolCalls.push(...t.toolCalls),e.rawToolCallTextParts.push(...t.rawToolCallTextParts),e.removedToolCallText=e.removedToolCallText||t.removedToolCallText}function Kr(e,t){return(t.startCallIndex??0)+e.toolCalls.length}const z=`<|"|>`;var qr=class{source;cursor=0;constructor(e){this.source=e}parse(){let e=this.parseObject();if(this.skipWhitespace(),this.cursor===this.source.length)return e}parseObject(){if(!this.consume(`{`))return;let e={};if(this.skipWhitespace(),this.consume(`}`))return e;for(;this.cursor<this.source.length;){let t=this.parseKey();if(!t||!this.consume(`:`))return;let n=this.parseValue();if(n===void 0)return;if(e[t]=n,this.skipWhitespace(),this.consume(`}`))return e;if(!this.consume(`,`))return}}parseArray(){if(!this.consume(`[`))return;let e=[];if(this.skipWhitespace(),this.consume(`]`))return e;for(;this.cursor<this.source.length;){let t=this.parseValue();if(t===void 0)return;if(e.push(t),this.skipWhitespace(),this.consume(`]`))return e;if(!this.consume(`,`))return}}parseValue(){return this.skipWhitespace(),this.source.startsWith(z,this.cursor)?this.parseString():this.source.startsWith(`{`,this.cursor)?this.parseObject():this.source.startsWith(`[`,this.cursor)?this.parseArray():this.consumeLiteral(`true`)?!0:this.consumeLiteral(`false`)?!1:this.consumeLiteral(`null`)?null:this.parseNumber()}parseKey(){if(this.skipWhitespace(),this.source.startsWith(z,this.cursor))return this.parseString();let e=/^[A-Za-z_][A-Za-z0-9_-]*/.exec(this.source.slice(this.cursor));if(e)return this.cursor+=e[0].length,this.skipWhitespace(),e[0]}parseString(){if(!this.consume(z))return;let e=this.source.indexOf(z,this.cursor);if(e===-1)return;let t=this.source.slice(this.cursor,e);return this.cursor=e+5,this.skipWhitespace(),t}parseNumber(){let e=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/.exec(this.source.slice(this.cursor));if(e)return this.cursor+=e[0].length,this.skipWhitespace(),Number(e[0])}consume(e){return this.skipWhitespace(),this.source.startsWith(e,this.cursor)?(this.cursor+=e.length,this.skipWhitespace(),!0):!1}consumeLiteral(e){return this.source.startsWith(e,this.cursor)?(this.cursor+=e.length,this.skipWhitespace(),!0):!1}skipWhitespace(){for(;/\s/.test(this.source[this.cursor]??``);)this.cursor+=1}};const Jr=`<|tool_call>`,Yr=`gemma_call`;function B(e){if(!(!e||e.length===0))return new Zr({toolNames:e.map(e=>e.name)})}function Xr(e,t){return ii(e,Qr(e,t,{final:!0}))}var Zr=class{options;buffer=``;emittedVisibleText=``;emittedRawToolCallText=``;emittedToolCallIds=new Set;constructor(e){this.options=e}project(e){return e.length===0?ai():(this.buffer+=e,this.projectVisibleText({final:!1}))}flush(){return this.projectVisibleText({final:!0})}projectVisibleText(e){let t=Qr(this.buffer,this.options,e),n=t.visibleParts.join(``),r=n.slice(this.emittedVisibleText.length),i=t.rawToolCallTextParts.join(``),a=i.slice(this.emittedRawToolCallText.length);return this.emittedVisibleText=n,this.emittedRawToolCallText=i,{visibleText:r,toolCalls:t.toolCalls.filter(e=>this.emittedToolCallIds.has(e.id)?!1:(this.emittedToolCallIds.add(e.id),!0)),removedToolCallText:a.length>0,...a.length>0&&{rawToolCallText:a}}}};function Qr(e,t,n){let r=$r(e,t,n),i=Pr(r.visibleParts.join(``),{toolNames:t.toolNames,callIdPrefix:t.callIdPrefix??Yr,startCallIndex:r.toolCalls.length},n);return{visibleParts:[i.visibleText],toolCalls:[...r.toolCalls,...i.toolCalls],rawToolCallTextParts:[...r.rawToolCallTextParts,...i.rawToolCallTextParts],removedToolCallText:r.removedToolCallText||i.removedToolCallText}}function $r(e,t,n){let r=ti(),i=new Set(t.toolNames),a=0,o=0;for(;a<e.length;){let s=e.indexOf(Jr,a);if(s===-1){ni(r,e.slice(a),n);break}ni(r,e.slice(a,s),n);let c=s+12,l=e.indexOf(`<tool_call|>`,c);if(l===-1){n.final&&r.visibleParts.push(e.slice(s));break}let u=e.slice(s,l+12),d=ei(e.slice(c,l),i,t,o);d?(r.toolCalls.push(d),r.rawToolCallTextParts.push(u),r.removedToolCallText=!0,o+=1):r.visibleParts.push(u),a=l+12}return r}function ei(e,t,n,r){let i=e.trim();if(!i.startsWith(`call:`))return;let a=i.slice(5).trimStart(),o=a.indexOf(`{`);if(o<=0)return;let s=a.slice(0,o).trim();if(!t.has(s))return;let c=new qr(a.slice(o)).parse();if(c)return{id:`${n.callIdPrefix??Yr}_${r}`,type:`function`,function:{name:s,arguments:JSON.stringify(c)}}}function ti(){return{visibleParts:[],toolCalls:[],rawToolCallTextParts:[],removedToolCallText:!1}}function ni(e,t,n){if(t.length===0)return;if(n.final){e.visibleParts.push(t);return}let r=ri(t);e.visibleParts.push(t.slice(0,t.length-r))}function ri(e){let t=Math.min(e.length,11);for(let n=t;n>0;--n)if(Jr.startsWith(e.slice(e.length-n)))return n;return 0}function ii(e,t){return{rawText:e,visibleText:t.visibleParts.join(``),toolCalls:t.toolCalls,removedToolCallText:t.removedToolCallText,...t.rawToolCallTextParts.length>0&&{rawToolCallText:t.rawToolCallTextParts.join(``)}}}function ai(){return{visibleText:``,toolCalls:[],removedToolCallText:!1}}function oi(e,t,n){let r=e.choices?.[0]?.message.content||``,i=new C({logger:t,...n?.tools&&{toolCallTextProjector:B(n.tools)}}).parseResponse(e),a=fr(i.content??``);return si({...i,content:a.visibleText},r,a.removedReasoning)}function si(e,t,n){return n?{...e,metadata:{...e.metadata??{},gemmaReasoningFiltered:!0,gemmaRawContent:t}}:e}function ci(t,n){return{id:e(),role:`assistant`,content:t,state:`complete`,timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:n===`stop`||n===`tool_calls`}}}function li(t,n){return{id:e(),role:`assistant`,content:``,toolCalls:t,state:`complete`,timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:n===`stop`||n===`tool_calls`}}}function ui(e,t){return{reasoningProjector:new pr,responseParser:new C({logger:e}),...t&&{toolCallProjector:B(t)}}}function di(e,t){let n=e.choices?.[0];if(!n)return[];let r=t.responseParser.parseStreamingChunk(e);return r&&o(r)&&r.toolCalls?.length?[r]:pi(n.delta.content||``,n.finish_reason,t)}function fi(e){let t=pi(``,null,e,!0),n=e.reasoningProjector.flush();return n.length>0&&t.push(ci(n,null)),t}function pi(e,t,n,r=!1){let i=r?n.toolCallProjector?.flush():n.toolCallProjector?.project(e),a=[];i?.toolCalls.length&&a.push(li(i.toolCalls,t));let o=i?.visibleText??e,s=n.reasoningProjector.project(o);return s.length>0&&a.push(ci(s,t)),a}var mi=class extends n{name=`gemma`;version=`1.0.0`;client;options;onTextDelta;constructor(e){if(super(e.logger||i),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new s({apiKey:e.apiKey,...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout}});else throw Error(`Either Gemma client, apiKey, or executor is required`)}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`Gemma Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Gemma client not available. Either provide a client/apiKey or use an executor.`);try{let n=this.buildRequestParams(e,t),r=t?.onTextDelta??this.onTextDelta;if(r)return await this.chatWithStreamingAssembly({...n,stream:!0},{...t,onTextDelta:r});t?.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let i=await this.client.chat.completions.create(n);return t?.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`response`,payload:i}),oi(i,this.logger,t)}catch(e){let t=e.message||`Gemma API request failed`;throw Error(`Gemma chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`Gemma Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Gemma client not available. Either provide a client/apiKey or use an executor.`);try{let n=this.buildStreamingRequestParams(e,t);t?.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=await this.client.chat.completions.create(n),i=ui(this.logger,t?.tools),a=T(r,{provider:`gemma`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t?.onProviderNativeRawPayload});for await(let e of this.streamWithAbort(a,t?.signal))for(let t of di(e,i))yield t;for(let e of fi(i))yield e}catch(e){let t=e.message||`Gemma API request failed`;throw Error(`Gemma stream failed: ${t}`)}}supportsTools(){return!0}getCapabilities(){return{functionCalling:{supported:!0},nativeWebTools:{webSearch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`Gemma OpenAI-compatible endpoints support declared function tools, not provider-native web search.`},webFetch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`Gemma OpenAI-compatible endpoints support declared function tools, not provider-native web fetch.`}}}}validateConfig(){return!!this.client&&!!this.options}async dispose(){}validateMessages(e){super.validateMessages(e);for(let t of e)if(t.role===`assistant`){let e=t;if(e.toolCalls&&e.toolCalls.length>0&&e.content===``)continue}}buildRequestParams(e,t){let n=t?.model??this.options.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return{model:n,messages:x(e),...t?.temperature!==void 0&&{temperature:t.temperature},...t?.maxTokens!==void 0&&{max_tokens:t.maxTokens},...t?.tools&&{tools:S(t.tools),tool_choice:`auto`}}}buildStreamingRequestParams(e,t){return{...this.buildRequestParams(e,t),stream:!0}}async chatWithStreamingAssembly(e,t){if(!this.client)throw Error(`Gemma client not available. Either provide a client/apiKey or use an executor.`);try{t.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`request`,payload:e});let n=await this.client.chat.completions.create(e,t.signal?{signal:t.signal}:void 0),r=new pr;return si(await w({stream:T(n,{provider:`gemma`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t.onProviderNativeRawPayload}),onTextDelta:t.onTextDelta,signal:t.signal,textProjector:e=>r.project(e),textProjectorFlush:()=>r.flush(),toolCallTextProjector:B(t.tools)}),r.rawText,r.removedReasoning)}catch(e){let t=e.message||`Gemma streaming request failed`;throw Error(`Gemma stream failed: ${t}`)}}};const V=`supergemma4-26b-uncensored-v2`,hi=`lm-studio`,gi=`http://localhost:1234/v1`,_i=`https://ai.google.dev/gemma`,vi=`2026-05-04`,yi=`https://lmstudio.ai/docs/developer`,bi=[{kind:`official`,label:`LM Studio local API documentation`,url:yi,sourceUrl:yi,lastVerifiedAt:`2026-05-08`}],xi={status:`fallback`,sourceUrl:_i,lastVerifiedAt:vi,entries:[{id:V,displayName:`SuperGemma 4 26B`,capabilities:[`tools`,`streaming`],lifecycle:`active`,sourceUrl:_i,lastVerifiedAt:vi}]};function Si(){return{type:`gemma`,displayName:`Gemma`,description:`Gemma-family local models through an OpenAI-compatible endpoint`,defaults:{model:V,apiKey:hi,baseURL:gi},modelCatalog:xi,setupHelpLinks:bi,setupSteps:[{key:`baseURL`,title:`Gemma OpenAI-compatible base URL`,defaultValue:gi},{key:`model`,title:`Gemma model`,defaultValue:V},{key:`apiKey`,title:`Gemma OpenAI-compatible API key`,defaultValue:hi,masked:!0}],requiresApiKey:!0,probeProfile:E,createProvider:e=>new mi({apiKey:Ci(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},defaultModel:e.model})}}function Ci(e){if(!e)throw Error(`Provider gemma requires apiKey`);return e}async function wi(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(),e.timeoutMs??6e4);try{let r=await fetch(Ti(e.baseUrl,t.path),{method:t.method,headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":`application/json`,...e.defaultHeaders??{}},body:t.body,signal:n.signal}),i=await r.text();if(!r.ok)return Oi(r.status,i);let a=Ei(i);return a.ok?{ok:!0,value:a.value}:a}catch(e){return e instanceof Error&&e.name===`AbortError`?{ok:!1,error:{code:`PROVIDER_TIMEOUT`,message:`Bytedance media request timed out.`}}:{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:e instanceof Error?e.message:`Bytedance media request failed.`}}}finally{clearTimeout(r)}}function Ti(e,t){return`${e.endsWith(`/`)?e.slice(0,-1):e}${t.startsWith(`/`)?t:`/${t}`}`}function Ei(e){try{return{ok:!0,value:JSON.parse(e)}}catch{return{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Bytedance response is not valid JSON.`}}}}function Di(e){try{return JSON.parse(e)}catch{return{message:e}}}function Oi(e,t){let n=Di(t);return e===401||e===403?{ok:!1,error:{code:`PROVIDER_AUTH_ERROR`,message:n.message??`Bytedance authentication failed.`,details:n.details}}:e===404?{ok:!1,error:{code:`PROVIDER_JOB_NOT_FOUND`,message:n.message??`Bytedance video job was not found.`,details:n.details}}:e===409?{ok:!1,error:{code:`PROVIDER_JOB_NOT_CANCELLABLE`,message:n.message??`Bytedance video job cannot be cancelled in current state.`,details:n.details}}:e===429?{ok:!1,error:{code:`PROVIDER_RATE_LIMITED`,message:n.message??`Bytedance rate limit exceeded.`,details:n.details}}:e>=400&&e<500?{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:n.message??`Bytedance rejected request payload.`,details:n.details}}:{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:n.message??`Bytedance upstream request failed.`,details:n.details}}}function ki(e){if(e.id.trim().length===0)return{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Bytedance video job response is missing task id.`}};let t=Ai(e.status);return t.ok?{ok:!0,value:{jobId:e.id,status:t.value,output:Ni(e),error:t.value===`failed`&&e.error_message?{code:`PROVIDER_UPSTREAM_ERROR`,message:e.error_message}:void 0,updatedAt:Mi(e.updated_at??e.created_at)}}:t}function Ai(e){let t=e.trim().toLowerCase();return t===`queued`||t===`pending`||t===`submitted`?{ok:!0,value:`queued`}:t===`running`||t===`processing`||t===`in_progress`?{ok:!0,value:`running`}:t===`succeeded`||t===`success`||t===`completed`?{ok:!0,value:`succeeded`}:t===`failed`||t===`error`?{ok:!0,value:`failed`}:t===`cancelled`||t===`canceled`?{ok:!0,value:`cancelled`}:{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Unexpected video job status from Bytedance: ${e}`}}}function ji(e){if(typeof e!=`string`||e.trim().length===0)return{ok:!0,value:`queued`};let t=e.trim().toLowerCase();return t===`queued`||t===`pending`||t===`submitted`?{ok:!0,value:`queued`}:t===`running`||t===`processing`||t===`in_progress`?{ok:!0,value:`running`}:{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Unexpected createVideo status from Bytedance: ${e}`}}}function Mi(e){if(typeof e==`number`&&Number.isFinite(e)){let t=e>0xe8d4a51000?e:e*1e3,n=new Date(t);if(!Number.isNaN(n.getTime()))return n.toISOString()}if(typeof e==`string`&&e.trim().length>0){let t=Number(e);if(Number.isFinite(t))return Mi(t);let n=new Date(e);if(!Number.isNaN(n.getTime()))return n.toISOString()}return new Date().toISOString()}function Ni(e){let t=typeof e.video_url==`string`&&e.video_url.trim().length>0?e.video_url:void 0,n=typeof e.content?.video_url==`string`&&e.content.video_url.trim().length>0?e.content.video_url:void 0,r=t??n;if(typeof r==`string`)return{kind:`uri`,uri:r,mimeType:e.mime_type,bytes:e.bytes}}var Pi=class{options;constructor(e){this.options=e}async createVideo(e){if(e.prompt.trim().length===0)return H(`Video generation requires non-empty prompt.`);if(e.model.trim().length===0)return H(`Video generation requires non-empty model.`);if(typeof e.seed==`number`)return H(`ModelArk Seedance provider does not support seed field in current contract.`);let t=this.buildContentPayload(e.prompt,e.inputImages);if(!t.ok)return t;let n={model:e.model.trim(),content:t.value,duration:e.durationSeconds,ratio:e.aspectRatio},r=await wi(this.options,{path:this.options.createVideoPath??`/contents/generations/tasks`,method:`POST`,body:JSON.stringify(n)});if(!r.ok)return r;if(r.value.id.trim().length===0)return Ii(`Bytedance createVideo response is missing task id.`);let i=ji(r.value.status);return i.ok?{ok:!0,value:{jobId:r.value.id,status:i.value,createdAt:Mi(r.value.created_at)}}:i}async getVideoJob(e){if(e.trim().length===0)return H(`Video job lookup requires non-empty jobId.`);let t=await wi(this.options,{path:Fi(this.options.getVideoTaskPathTemplate??`/contents/generations/tasks/{taskId}`,e),method:`GET`});return t.ok?ki(t.value):t}async cancelVideoJob(e){if(e.trim().length===0)return H(`Video job cancellation requires non-empty jobId.`);let t=this.options.cancelVideoTaskMethod??`DELETE`,n=await wi(this.options,{path:Fi(this.options.cancelVideoTaskPathTemplate??`/contents/generations/tasks/{taskId}`,e),method:t});return n.ok?ki(n.value):n}buildContentPayload(e,t){let n=e.trim();if(n.length===0)return H(`Video generation requires non-empty prompt.`);let r=[{type:`text`,text:n}];if(Array.isArray(t))for(let e of t){let t=Li(e);if(!t.ok)return t;r.push({type:`image_url`,image_url:{url:t.value}})}return{ok:!0,value:r}}};function Fi(e,t){return e.replace(`{taskId}`,encodeURIComponent(t))}function H(e){return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:e}}}function Ii(e){return{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:e}}}function Li(e){return e.kind===`uri`?e.uri.trim().length===0?H(`Image uri must be non-empty.`):{ok:!0,value:e.uri}:e.data.trim().length===0?H(`Inline image data must be non-empty.`):e.mimeType.trim().length===0?H(`Inline image mimeType must be non-empty.`):{ok:!0,value:`data:${e.mimeType};base64,${e.data}`}}const Ri={singapore:`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,usVirginia:`https://dashscope-us.aliyuncs.com/compatible-mode/v1`,beijing:`https://dashscope.aliyuncs.com/compatible-mode/v1`,hongKong:`https://cn-hongkong.dashscope.aliyuncs.com/compatible-mode/v1`},zi={singapore:`https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1`,usVirginia:`https://dashscope-us.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1`,beijing:`https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1`},U=`qwen-plus`,Bi=`DASHSCOPE_API_KEY`,Vi=`$ENV:${Bi}`,W=Ri.singapore,Hi=zi.singapore,G=`https://www.alibabacloud.com/help/en/model-studio/compatibility-of-openai-with-dashscope`,K=`2026-05-04`,q=`qwen-responses`;function Ui(e){let t=e.builtInWebTools,n=t?.webSearch===!0||t?.webFetch===!0,r=t?.webFetch===!0;return{functionCalling:{supported:!0},nativeWebTools:{webSearch:n?{supported:!0,enabled:!0,source:q}:{supported:!0,enabled:!1,source:q,reason:`Enable builtInWebTools.webSearch or builtInWebTools.webFetch.`},webFetch:r?{supported:!0,enabled:!0,source:q}:{supported:!0,enabled:!1,source:q,reason:`Enable builtInWebTools.webFetch.`}}}}async function Wi(e,t,n){try{return n.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`request`,payload:t}),w({stream:T(await e.chat.completions.create(t,n.signal?{signal:n.signal}:void 0),{provider:`qwen`,apiSurface:`chat-completions`,onProviderNativeRawPayload:n.onProviderNativeRawPayload}),onTextDelta:n.onTextDelta,signal:n.signal})}catch(e){let t=e.message||`Qwen streaming request failed`;throw Error(`Qwen stream failed: ${t}`)}}function J(e){let t=[];return(e?.webSearch===!0||e?.webFetch===!0)&&t.push(`web_search`),e?.webFetch===!0&&t.push(`web_extractor`),t}function Gi(e){return J(e).length>0}function Ki(e){return e.flatMap(e=>Yi(e))}function qi(e,t){let n=[...e.map(e=>({type:e})),...Ji(t)];return n.length>0?n:void 0}function Ji(e){return e?.map(e=>({type:`function`,name:e.name,description:e.description,parameters:e.parameters}))??[]}function Yi(e){return e.role===`user`?[Y(`user`,e.content)]:e.role===`system`?[Y(`system`,e.content)]:e.role===`tool`?[{type:`function_call_output`,call_id:e.toolCallId,output:e.content||``}]:Xi(e)}function Xi(e){let t=[];e.content&&e.content.length>0&&t.push(Y(`assistant`,e.content));for(let n of e.toolCalls??[])t.push({type:`function_call`,call_id:n.id,name:n.function.name,arguments:n.function.arguments});return t.length===0&&t.push(Y(`assistant`,``)),t}function Y(e,t){return{role:e,content:t??``}}async function*Zi(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Qi(n,t);if(e.done||t?.aborted)break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async function Qi(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}function $i(e,t){let n=e.output??[],r=Z(n,e.usage),i=la(n);return X({content:e.output_text??fa(n),toolCalls:i,response:e,usage:r,enabledBuiltInTools:t.enabledBuiltInTools})}async function ea(e){let t={textParts:[],toolCalls:[],usage:sa()};for await(let n of Zi(e.stream,e.signal))ta(t,n,e.onTextDelta);return t.completedResponse===void 0?X({content:t.textParts.join(``),toolCalls:t.toolCalls,usage:t.usage,enabledBuiltInTools:e.enabledBuiltInTools}):na(t,e.enabledBuiltInTools)}function ta(e,t,n){if(t.type===`response.output_text.delta`){e.textParts.push(t.delta),n?.(t.delta);return}if(t.type===`response.completed`){e.completedResponse=t.response,Q(e.usage,Z(t.response.output??[],t.response.usage));return}if(t.type===`response.output_item.done`){ra(e,t.item);return}if(t.type===`response.web_search_call.completed`){e.usage.webSearchCalls+=1;return}if(t.type===`response.error`||t.type===`response.failed`)throw Error(`Qwen Responses API failed: ${pa(t)}`)}function na(e,t){let n=e.completedResponse;if(n===void 0)throw Error(`Qwen Responses stream completed without response metadata`);let r=n.output??[],i=la(r),a=e.textParts.length>0?e.textParts.join(``):n.output_text??fa(r),o=Z(r,n.usage);return Q(o,e.usage),X({content:a,toolCalls:i.length>0?i:e.toolCalls,response:n,usage:o,enabledBuiltInTools:t})}function ra(e,t){if(t.type===`function_call`){ua(t)&&e.toolCalls.push(da(t));return}Q(e.usage,Z([t],void 0))}function X(t){return{id:e(),role:`assistant`,content:t.content,state:`complete`,timestamp:new Date,...t.toolCalls.length>0&&{toolCalls:t.toolCalls},...t.response?.usage!==void 0&&{usage:{promptTokens:t.response.usage.input_tokens??0,completionTokens:t.response.usage.output_tokens??0,totalTokens:t.response.usage.total_tokens??0}},metadata:ia(t.enabledBuiltInTools,t.usage,t.response)}}function ia(e,t,n){let r=aa(t);return{providerToolMode:`qwen_responses`,providerBuiltInToolsEnabled:[...e],...r.length>0&&{providerBuiltInToolsUsed:r},qwenWebSearchCalls:t.webSearchCalls,qwenWebExtractorCalls:t.webExtractorCalls,...t.unsupportedToolTypes.size>0&&{qwenUnsupportedProviderToolTypes:[...t.unsupportedToolTypes].sort()},...n?.id!==void 0&&{responseId:n.id},...n?.model!==void 0&&{model:n.model},...n?.status!==void 0&&{finishReason:n.status}}}function aa(e){let t=[];return e.webSearchCalls>0&&t.push(`web_search`),e.webExtractorCalls>0&&t.push(`web_extractor`),t}function Z(e,t){let n=sa();for(let t of e)t.type===`web_search_call`?n.webSearchCalls+=1:t.type===`web_extractor_call`?n.webExtractorCalls+=1:ca(t.type)&&n.unsupportedToolTypes.add(t.type);return oa(n,t),n}function oa(e,t){let n=t?.x_tools;if(n!==void 0){e.webSearchCalls=Math.max(e.webSearchCalls,n.web_search?.count??0),e.webExtractorCalls=Math.max(e.webExtractorCalls,n.web_extractor?.count??0);for(let t of Object.keys(n))t!==`web_search`&&t!==`web_extractor`&&e.unsupportedToolTypes.add(t)}}function Q(e,t){e.webSearchCalls=Math.max(e.webSearchCalls,t.webSearchCalls),e.webExtractorCalls=Math.max(e.webExtractorCalls,t.webExtractorCalls);for(let n of t.unsupportedToolTypes)e.unsupportedToolTypes.add(n)}function sa(){return{webSearchCalls:0,webExtractorCalls:0,unsupportedToolTypes:new Set}}function ca(e){return e.endsWith(`_call`)&&e!==`function_call`}function la(e){return e.filter(ua).map(e=>da(e))}function ua(e){return e.type===`function_call`&&`call_id`in e&&`name`in e&&`arguments`in e}function da(e){return{id:e.call_id,type:`function`,function:{name:e.name,arguments:e.arguments}}}function fa(e){return e.filter(e=>e.type===`message`).flatMap(e=>e.content).map(e=>e.text).join(``)}function pa(e){return e.message??e.error?.message??e.response?.error?.message??`unknown error`}async function ma(e){let t=e.chatOptions?.onTextDelta??e.onTextDelta;if(t)return ga({...e,chatOptions:{...e.chatOptions,onTextDelta:t}});if(!e.client)throw Error(`Qwen Responses client not available for built-in web tools.`);try{let t=_a(e);e.chatOptions?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`responses`,payloadKind:`request`,payload:t});let n=await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`responses`,payloadKind:`response`,payload:n}),$i(n,{enabledBuiltInTools:J(e.builtInWebTools)})}catch(e){let t=e.message||`Qwen Responses API request failed`;throw Error(`Qwen responses failed: ${t}`)}}async function*ha(e){let t=[],n=await ga({...e,chatOptions:{...e.chatOptions,onTextDelta:n=>{e.chatOptions?.onTextDelta?.(n),t.push(ya(n))}}});for(let e of t)yield e;yield{...n,content:``,metadata:{...n.metadata,isStreamChunk:!0,isComplete:!0}}}async function ga(e){if(!e.client)throw Error(`Qwen Responses client not available for built-in web tools.`);try{let t=va(e);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`responses`,payloadKind:`request`,payload:t}),ea({stream:T(await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0),{provider:`qwen`,apiSurface:`responses`,onProviderNativeRawPayload:e.chatOptions?.onProviderNativeRawPayload}),enabledBuiltInTools:J(e.builtInWebTools),onTextDelta:e.chatOptions?.onTextDelta,signal:e.chatOptions?.signal})}catch(e){let t=e.message||`Qwen Responses streaming request failed`;throw Error(`Qwen responses stream failed: ${t}`)}}function _a(e){let t=e.chatOptions?.model??e.defaultModel;if(!t)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let n=qi(J(e.builtInWebTools),e.chatOptions?.tools);return{model:t,input:Ki(e.messages),...n!==void 0&&{tools:n},...e.chatOptions?.temperature!==void 0&&{temperature:e.chatOptions.temperature},...e.chatOptions?.maxTokens!==void 0&&{max_output_tokens:e.chatOptions.maxTokens},...e.builtInWebTools?.enableThinking!==void 0&&{enable_thinking:e.builtInWebTools.enableThinking}}}function va(e){return{..._a(e),stream:!0}}function ya(t){return{id:e(),role:`assistant`,content:t,state:`complete`,timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:!1}}}var ba=class extends n{name=`qwen`;version=`1.0.0`;client;responsesClient;options;responseParser;onTextDelta;constructor(e){if(super(e.logger||i),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client,this.responsesClient=e.client;else if(e.apiKey)this.client=new s({apiKey:e.apiKey,baseURL:e.baseURL??W,...e.timeout!==void 0&&{timeout:e.timeout}}),this.responsesClient=new s({apiKey:e.apiKey,baseURL:e.responsesBaseURL??Hi,...e.timeout!==void 0&&{timeout:e.timeout}});else throw Error(`Either Qwen client, apiKey, or executor is required`);this.responseParser=new C({logger:this.logger})}async chat(e,t){return this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor?this.chatViaExecutor(e,t):this.shouldUseResponsesApi()?this.chatViaResponsesApi(e,t,this.getResponsesClient()):this.chatViaChatCompletions(e,t,this.getClient())}async chatViaExecutor(e,t){try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`Qwen Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}}async chatViaResponsesApi(e,t,n){return this.validateTools(t?.tools),ma({client:n,messages:e,chatOptions:t,defaultModel:this.options.defaultModel,builtInWebTools:this.options.builtInWebTools,onTextDelta:this.onTextDelta})}async chatViaChatCompletions(e,t,n){try{let r=this.buildRequestParams(e,t),i=t?.onTextDelta??this.onTextDelta;if(i)return Wi(n,{...r,stream:!0},{...t,onTextDelta:i});t?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`request`,payload:r});let a=await n.chat.completions.create(r);return t?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`response`,payload:a}),this.responseParser.parseResponse(a)}catch(e){let t=e.message||`Qwen API request failed`;throw Error(`Qwen chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`Qwen Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Qwen client not available. Either provide a client/apiKey or use an executor.`);if(this.shouldUseResponsesApi()){this.validateTools(t?.tools),yield*ha({client:this.responsesClient,messages:e,chatOptions:t,defaultModel:this.options.defaultModel,builtInWebTools:this.options.builtInWebTools,onTextDelta:this.onTextDelta});return}try{let n=this.buildStreamingRequestParams(e,t);t?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=T(await this.client.chat.completions.create(n),{provider:`qwen`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t?.onProviderNativeRawPayload});for await(let e of this.streamWithAbort(r,t?.signal)){let t=this.responseParser.parseStreamingChunk(e);t&&(yield t)}}catch(e){let t=e.message||`Qwen API request failed`;throw Error(`Qwen stream failed: ${t}`)}}supportsTools(){return!0}getCapabilities(){return Ui(this.options)}validateConfig(){return!!this.client&&!!this.options&&(!this.shouldUseResponsesApi()||!!this.responsesClient)}async dispose(){}buildRequestParams(e,t){this.validateTools(t?.tools);let n=t?.model??this.options.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return{model:n,messages:x(e),...t?.temperature!==void 0&&{temperature:t.temperature},...t?.maxTokens!==void 0&&{max_tokens:t.maxTokens},...t?.tools&&{tools:S(t.tools),tool_choice:`auto`}}}buildStreamingRequestParams(e,t){return{...this.buildRequestParams(e,t),stream:!0}}shouldUseResponsesApi(){return Gi(this.options.builtInWebTools)}getClient(){if(!this.client)throw Error(`Qwen client not available. Either provide a client/apiKey or use an executor.`);return this.client}getResponsesClient(){if(!this.responsesClient)throw Error(`Qwen Responses client not available for built-in web tools.`);return this.responsesClient}};async function xa(e,t=Ta){let n=await t(`${wa(e.baseURL??W)}/models`,Sa(e.apiKey));if(!n.ok)return{status:`unavailable`,sourceUrl:G,message:`Qwen model refresh failed: HTTP ${n.status}`};let r=((await n.json()).data??[]).map(e=>e.id).filter(e=>typeof e==`string`&&e.length>0).map(Ca);return{status:`live`,sourceUrl:G,lastVerifiedAt:K,entries:r,message:`Loaded ${r.length} models from Qwen API`}}function Sa(e){if(e)return{headers:{Authorization:`Bearer ${e}`}}}function Ca(e){return{id:e,displayName:e,lifecycle:`active`,sourceUrl:G,lastVerifiedAt:K}}function wa(e){return e.replace(/\/$/,``)}async function Ta(e,t){let n=await fetch(e,{...t?.headers!==void 0&&{headers:t.headers}});return{ok:n.ok,status:n.status,json:()=>n.json()}}const Ea=[{kind:`api-key`,label:`Alibaba Cloud Model Studio API keys`,url:`https://modelstudio.console.alibabacloud.com/?tab=api#/api-key`,sourceUrl:`https://www.alibabacloud.com/help/en/model-studio/get-api-key`,lastVerifiedAt:`2026-05-08`}],Da={status:`fallback`,sourceUrl:G,lastVerifiedAt:K,entries:[{id:U,displayName:`Qwen Plus`,capabilities:[`tools`,`reasoning`,`native_web`,`streaming`],lifecycle:`active`,sourceUrl:G,lastVerifiedAt:K},{id:`qwen-max`,displayName:`Qwen Max`,capabilities:[`tools`,`reasoning`,`native_web`,`streaming`],lifecycle:`active`,sourceUrl:G,lastVerifiedAt:K},{id:`qwen-flash`,displayName:`Qwen Flash`,capabilities:[`tools`,`native_web`,`streaming`],lifecycle:`active`,sourceUrl:G,lastVerifiedAt:K}]};function Oa(){return{type:`qwen`,displayName:`Qwen`,description:`Alibaba Cloud Model Studio OpenAI-compatible endpoint`,defaults:{model:U,apiKey:Vi,baseURL:W},modelCatalog:Da,refreshModelCatalog:({profile:e})=>xa(e),modelCatalogCacheTtlSeconds:86400,setupHelpLinks:Ea,setupSteps:[{key:`baseURL`,title:`Qwen OpenAI-compatible base URL`,defaultValue:W},{key:`model`,title:`Qwen model`,defaultValue:U},{key:`apiKey`,title:`Qwen Model Studio API key`,defaultValue:Vi,masked:!0}],requiresApiKey:!0,probeProfile:E,createProvider:e=>{let t=Aa(e.options);return new ba({apiKey:ka(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...t.responsesBaseURL!==void 0&&{responsesBaseURL:t.responsesBaseURL},...e.timeout!==void 0&&{timeout:e.timeout},...t.builtInWebTools!==void 0&&{builtInWebTools:t.builtInWebTools},defaultModel:e.model})}}}function ka(e){if(!e)throw Error(`Provider qwen requires apiKey`);return e}function Aa(e){let t=ja(Ma(e?.builtInWebTools)),n=Na(e?.responsesBaseURL);return{...n!==void 0&&{responsesBaseURL:n},...t!==void 0&&{builtInWebTools:t}}}function ja(e){if(e!==void 0)return{...$(e.webSearch)!==void 0&&{webSearch:$(e.webSearch)},...$(e.webFetch)!==void 0&&{webFetch:$(e.webFetch)},...$(e.enableThinking)!==void 0&&{enableThinking:$(e.enableThinking)}}}function Ma(e){if(!(e==null||e instanceof Date||Array.isArray(e)))return typeof e==`object`?e:void 0}function $(e){return typeof e==`boolean`?e:void 0}function Na(e){return typeof e==`string`&&e.length>0?e:void 0}function Pa(){return[oe(),zt(),ir(),Si(),Oa(),sn()]}export{b as ANTHROPIC_MODEL_LAST_VERIFIED_AT,y as ANTHROPIC_MODEL_SOURCE_URL,m as AnthropicProvider,Pi as BytedanceProvider,Xt as DEEPSEEK_DEPRECATED_ALIAS_RETIREMENT_DATE,N as DEEPSEEK_MODEL_CATALOG_SOURCE_URL,P as DEEPSEEK_MODEL_LAST_VERIFIED_AT,Yt as DEEPSEEK_MODEL_LIST_SOURCE_URL,re as DEFAULT_ANTHROPIC_PROVIDER_API_KEY_ENV,ie as DEFAULT_ANTHROPIC_PROVIDER_API_KEY_REFERENCE,v as DEFAULT_ANTHROPIC_PROVIDER_MODEL,Gt as DEFAULT_DEEPSEEK_PROVIDER_API_KEY_ENV,Kt as DEFAULT_DEEPSEEK_PROVIDER_API_KEY_REFERENCE,qt as DEFAULT_DEEPSEEK_PROVIDER_BASE_URL,M as DEFAULT_DEEPSEEK_PROVIDER_MODEL,tr as DEFAULT_GEMINI_PROVIDER_API_KEY_ENV,nr as DEFAULT_GEMINI_PROVIDER_API_KEY_REFERENCE,I as DEFAULT_GEMINI_PROVIDER_MODEL,hi as DEFAULT_GEMMA_PROVIDER_API_KEY,gi as DEFAULT_GEMMA_PROVIDER_BASE_URL,V as DEFAULT_GEMMA_PROVIDER_MODEL,Lt as DEFAULT_OPENAI_PROVIDER_API_KEY_REFERENCE,It as DEFAULT_OPENAI_PROVIDER_MODEL,Bi as DEFAULT_QWEN_PROVIDER_API_KEY_ENV,Vi as DEFAULT_QWEN_PROVIDER_API_KEY_REFERENCE,W as DEFAULT_QWEN_PROVIDER_BASE_URL,U as DEFAULT_QWEN_PROVIDER_MODEL,Hi as DEFAULT_QWEN_PROVIDER_RESPONSES_BASE_URL,Jt as DeepSeekProvider,R as GEMINI_MODEL_LAST_VERIFIED_AT,L as GEMINI_MODEL_SOURCE_URL,er as GeminiProvider,mi as GemmaProvider,pr as GemmaReasoningProjector,Zr as GemmaToolCallProjector,Ot as OpenAIConversationAdapter,wt as OpenAIProvider,K as QWEN_MODEL_LAST_VERIFIED_AT,G as QWEN_MODEL_SOURCE_URL,Ri as QWEN_PROVIDER_BASE_URLS,zi as QWEN_PROVIDER_RESPONSES_BASE_URLS,ba as QwenProvider,le as createAnthropicProvider,oe as createAnthropicProviderDefinition,sn as createDeepSeekProviderDefinition,Pa as createDefaultProviderDefinitions,ir as createGeminiProviderDefinition,Si as createGemmaProviderDefinition,B as createGemmaToolCallProjector,zt as createOpenAIProviderDefinition,Oa as createQwenProviderDefinition,fr as projectGemmaReasoningText,Xr as projectGemmaToolCallText,h as refreshAnthropicModelCatalog,$t as refreshDeepSeekModelCatalog,sr as refreshGeminiModelCatalog,At as refreshOpenAIModelCatalog,xa as refreshQwenModelCatalog};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|