vern-llm 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/index.cjs +3 -3
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +22 -26
- package/dist/adapters/index.d.cts.map +1 -1
- package/dist/adapters/index.d.mts +22 -26
- package/dist/adapters/index.d.mts.map +1 -1
- package/dist/adapters/index.mjs +3 -3
- package/dist/adapters/index.mjs.map +1 -1
- package/dist/{client-HWxkwVvj.d.cts → client-D4eRQMgc.d.cts} +153 -77
- package/dist/client-D4eRQMgc.d.cts.map +1 -0
- package/dist/{client-HWxkwVvj.d.mts → client-D4eRQMgc.d.mts} +153 -77
- package/dist/client-D4eRQMgc.d.mts.map +1 -0
- package/dist/index.cjs +18 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -22
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +14 -22
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +18 -2
- package/dist/index.mjs.map +1 -1
- package/dist/responseBody.utils-DFXqo6oy.mjs +2 -0
- package/dist/responseBody.utils-DFXqo6oy.mjs.map +1 -0
- package/dist/responseBody.utils-DfrljpVb.cjs +2 -0
- package/dist/responseBody.utils-DfrljpVb.cjs.map +1 -0
- package/package.json +16 -13
- package/dist/client-HWxkwVvj.d.cts.map +0 -1
- package/dist/client-HWxkwVvj.d.mts.map +0 -1
- package/dist/responseBody.utils-B2tQiGUi.mjs +0 -2
- package/dist/responseBody.utils-B2tQiGUi.mjs.map +0 -1
- package/dist/responseBody.utils-CknznUJA.cjs +0 -2
- package/dist/responseBody.utils-CknznUJA.cjs.map +0 -1
package/dist/adapters/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../responseBody.utils-CknznUJA.cjs");async function t(e){let{data:t,response:n}=await e.withResponse();return{data:t,headers:n.headers}}function n(e){return e.remainingRequests!==void 0||e.limitRequests!==void 0?{type:`rate_limit_hint`,hint:e}:void 0}async function r(e,n){return n?t(e()):{data:await e()}}const i={minimal:1024,low:4096,medium:16e3,high:32e3};function a(t){if(!t)return i;let n={...i,...t};if(!(n.minimal<n.low&&n.low<n.medium&&n.medium<n.high))throw new e.s(`reasoningEffortTokens must keep tiers in strictly ascending order (minimal < low < medium < high), got ${JSON.stringify(n)}. An out-of-order override doesn't just misrank tiers, it can make some of them unreachable.`,`invalid_params`);return n}function o(e,t=i){return t[e]}function s(e,t=i){return e<=t.minimal?`minimal`:e<=t.low?`low`:e<=t.medium?`medium`:`high`}function c(e){let t=/opus-(\d+)(?:-(\d+))?/.exec(e);if(!t)return null;let n=t[2],r=n===void 0||n.length>=8?0:Number(n);return[Number(t[1]),r]}function l(e){let t=c(e);if(t){let[e,n]=t;return e>4||e===4&&n>=7}return[`sonnet-5`,`fable-5`,`mythos`].some(t=>e.includes(t))}function u(e,t){return l(e)?!0:t?Array.isArray(t)?t.includes(e):t(e):!1}function d(e,t){return!u(e,t)}function f(t,n){if(t<1024)throw new e.s(`budgetTokens (${t}) is below Anthropic's minimum of 1024. Raise budgetTokens, or use a reasoningEffort tier of 'low' or above with the default conversion table.`,`invalid_params`);if(t>=n)throw new e.s(`budgetTokens (${t}) must be less than maxTokens (${n}); the thinking budget and the reply share the same max_tokens ceiling on Anthropic. Raise maxTokens, or lower budgetTokens/reasoningEffort.`,`invalid_params`)}function p(t){if(t)throw new e.s(`budgetTokens/reasoningEffort was set alongside ${t}. Anthropic rejects thinking combined with a tool_choice that forces tool use, the model has to be able to reply with plain text for thinking to run. Use toolChoice: 'auto' (or omit toolChoice) for this call, or drop budgetTokens/reasoningEffort for it.`,`invalid_params`)}function m(e){return e===`minimal`?`low`:e}function h(e,t){return te(t,e.toUpperCase())}function ee(e){let t=/gemini-\d+\.(\d+)/.exec(e);return t?Number(t[1]):0}function te(e,t){if(!e.includes(`pro`))return t;let n=g(e);return n===null||n<3?t:ee(e)===0?t===`HIGH`?`HIGH`:`LOW`:t===`MINIMAL`?`LOW`:t}function g(e){let t=/gemini-(\d+)/.exec(e);return t?Number(t[1]):null}function _(e){let t=g(e);return t!==null&&t>=3}function ne(e,t){return _(e)?!0:t?Array.isArray(t)?t.includes(e):t(e):!1}const v=new Set;function y(e,t,n){return r=>{if(v.has(e))return;let i=t();i!==void 0&&i>0&&(v.add(e),r.warn(`[VernLLM] ${e}: the SDK client retries up to ${i} times on its own, hidden from VernLLM's retries, circuit breaker, rate limiter, and events. ${n} so VernLLM is the only retry owner.`))}}function b(e){let t=e?.maxRetries;return typeof t==`number`?t:void 0}function x(t,n){return new e.s(t,`invalid_params`,{code:`unsupported_capability`,issues:{capability:n}})}function S(t,n,r){let i=e.t(`${t} (${n.status})`,r);return i.status=n.status,i.headers=n.headers,i}function re(e){let t=/claude-([a-z]+)-(\d+)(?:[-.](\d+))?/i.exec(e),n=t??/claude-(\d+)(?:[-.](\d+))?/i.exec(e);if(!n)return null;let[,r,i,a]=t?n:[n[0],void 0,n[1],n[2]],o=a===void 0||a.length>=8?0:Number(a);return{family:r?.toLowerCase(),major:Number(i),minor:o}}function C(e,t,n,r){return e>n||e===n&&t>=r}function w(e){let t=re(e);if(!t)return!1;let{family:n,major:r,minor:i}=t;return r>=6?!0:n===`fable`?C(r,i,5,1):n===`opus`&&C(r,i,5,5)}function T(e,t){return t?Array.isArray(t)?t.includes(e):t(e):w(e)}function E(e,t,n,r){if(n&&n!==`auto`&&n!==`none`&&T(t,r))throw x(`${e} model "${t}" rejects a tool_choice that forces tool use, so ${n===`required`?`toolChoice: 'required'`:`toolChoice: { name: '${n.function.name}' }`} can't be sent. Use toolChoice: 'auto' and ask for the tool in the prompt instead. If this model does accept it, list the models that reject it in forcedToolChoiceUnsupportedModels.`,`forced_tool_choice`)}function D(e,t){return t?Array.isArray(t)?t.includes(e):t(e):!1}function ie(t,n,r,i){let a=n.response_format?.type===`json_schema`?n.response_format.json_schema:void 0,o=a?.name.trim();if(a&&!o)throw new e.s(`json_schema.name must not be empty.`,`validation`);let s=T(n.model,r.forcedToolChoiceUnsupportedModels);n.tools?.length&&E(t,n.model,n.tool_choice,r.forcedToolChoiceUnsupportedModels);let c=!!a&&(s||D(n.model,r.nativeStructuredOutputModels));if(a&&n.tools?.length&&!c)throw x(i.toolsWithJsonSchema(n.model),`tools_with_json_schema`);if(n.response_format?.type===`json_object`)throw new e.s(i.jsonObject,`validation`);return!a||!o?{mode:`none`}:{mode:c?`native`:`forcedTool`,jsonSchema:a,schemaName:o}}function ae(e,t,n){if(e.budget_tokens!==void 0||e.reasoning_effort!==void 0){if(p(t),d(e.model,n.adaptiveOnlyModels)){let t=e.budget_tokens??o(e.reasoning_effort,n.effortTokenTable);return f(t,e.max_tokens),{thinking:{type:`enabled`,budget_tokens:t}}}return{thinking:{type:`adaptive`},effort:m(e.reasoning_effort??s(e.budget_tokens,n.effortTokenTable))}}}const O=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`];function k(t){if(O.includes(t))return t;throw new e.s(`Unsupported image mimeType "${t}": expected one of ${O.join(`, `)}`,`invalid_params`)}function oe(e){return e.map(e=>e.type===`image`?{type:`image`,source:{type:`base64`,media_type:k(e.mimeType),data:e.data}}:{type:`text`,text:e.text})}function A(t,n){if(t.type!==`object`)throw new e.s(`Tool "${n}"'s schema must have "type": "object" (Anthropic requires object-shaped tool parameters).`,`validation`);return t}function se(e){let t=e||`auto`;switch(t){case`auto`:return{type:`auto`};case`none`:return{type:`none`};case`required`:return{type:`any`};default:return{type:`tool`,name:t.function.name}}}function ce(e,t){return{tools:e.map(e=>({name:e.function.name,description:e.function.description,input_schema:A(e.function.parameters,e.function.name)})),toolChoice:se(t)}}const le={toolsWithJsonSchema:e=>`Anthropic model "${e}" is not covered by nativeStructuredOutputModels, so \`jsonSchema\` is emulated as a forced single tool call there, which collides with the \`tools\` you also provided. Either drop \`tools\` or \`jsonSchema\` for this call, or pass this model in fromAnthropic's \`nativeStructuredOutputModels\` option once you've confirmed it supports Anthropic's \`output_config.format\`.`,jsonObject:'response_format: "json_object" is not supported on Anthropic. Unlike OpenAI, Anthropic has no API-level field that mechanically guarantees valid JSON output for this mode, so it used to be emulated by injecting a "respond with JSON only" instruction into the system prompt, a guarantee this adapter can no longer make. Use `jsonSchema` instead, which maps to a real API-level constraint (Anthropic\'s native output_config.format on covered models, or a forced single tool call otherwise).'};function ue(e){if(e?.type===`tool`)return`toolChoice forcing the "${e.name}" tool`;if(e?.type===`any`)return`toolChoice: 'required' (Anthropic's "any" tool_choice)`}function de(e,t,n,r,i){let a=e.messages.find(e=>e.role===`system`),o=e.messages.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool`),s=ie(`Anthropic`,e,{nativeStructuredOutputModels:t,forcedToolChoiceUnsupportedModels:i},le),c,l,u,d;if(s.mode===`forcedTool`){let{schema:e,description:t,strict:n}=s.jsonSchema;c=s.schemaName,u=[{name:c,description:t,input_schema:A(e,c),strict:n}],d={type:`tool`,name:c}}else s.mode===`native`&&(l={type:`json_schema`,schema:s.jsonSchema.schema}),e.tools?.length&&({tools:u,toolChoice:d}=ce(e.tools,e.tool_choice));let f=ae(e,ue(d),{adaptiveOnlyModels:r,effortTokenTable:n}),p=f?.effort,m=a?.content,h=f?void 0:e.temperature;return{body:{model:e.model,max_tokens:e.max_tokens,...h===void 0?{}:{temperature:h},system:m||void 0,messages:fe(o.map(e=>pe(e))),...u?{tools:u,tool_choice:d}:{},...l||p?{output_config:{...l?{format:l}:{},...p?{effort:p}:{}}}:{},...f?{thinking:f.thinking}:{}},toolName:c}}function fe(e){let t=e=>e.role===`user`&&Array.isArray(e.content)&&e.content.length>0&&e.content.every(e=>e.type===`tool_result`),n=[];for(let r of e){let e=n.at(-1);t(r)&&e&&t(e)?e.content.push(...r.content):n.push(r)}return n}function pe(t){if(t.role===`tool`)return{role:`user`,content:[{type:`tool_result`,tool_use_id:t.tool_call_id,content:t.content,...t.is_error?{is_error:!0}:{}}]};if(t.role===`assistant`&&(t.tool_calls?.length||t.thinking?.length)){let n=(t.thinking??[]).map(e=>e.type===`thinking`?{type:`thinking`,thinking:e.thinking,signature:e.signature}:{type:`redacted_thinking`,data:e.data});t.content&&n.push({type:`text`,text:t.content});for(let r of t.tool_calls??[]){let t;try{t=r.function.arguments.trim()?JSON.parse(r.function.arguments):{}}catch(t){throw new e.s(`Assistant tool call "${r.function.name}" (${r.id}) has arguments that are not valid JSON.`,`validation`,{cause:t})}if(t===null||Array.isArray(t)||typeof t!=`object`)throw new e.s(`Assistant tool call "${r.function.name}" (${r.id}) arguments must be a JSON object.`,`validation`);n.push({type:`tool_use`,id:r.id,name:r.function.name,input:t})}return{role:`assistant`,content:n}}return{role:t.role,content:Array.isArray(t.content)?oe(t.content):t.content??``}}function j(e,t){return e===t?{finish_reason:`length`}:{}}function M(t,n){throw new e.s(`${t} did not return the required structured output tool "${n}".`,`validation`)}function N(t,n,r){if(!r||typeof r!=`object`||Array.isArray(r))throw new e.s(`${t} returned invalid structured output for tool "${n}". Expected an object.`,`validation`)}const P=e=>typeof e==`number`&&Number.isFinite(e)?e:0;function F(e){let t=[e?.input_tokens,e?.cache_creation_input_tokens,e?.cache_read_input_tokens];if(!t.every(e=>e==null))return t.reduce((e,t)=>e+P(t),0)}function I(e){if(!e)return;let t=e.cache_creation?{"5m":P(e.cache_creation.ephemeral_5m_input_tokens),"1h":P(e.cache_creation.ephemeral_1h_input_tokens)}:void 0;return{cached_tokens:e.cache_read_input_tokens??void 0,cache_write_tokens:e.cache_creation_input_tokens??void 0,...t?{cache_write_tokens_by_ttl:t}:{}}}function L(e){return e.flatMap(e=>e.type===`thinking`?[{type:`thinking`,thinking:e.thinking??``,signature:e.signature??``}]:e.type===`redacted_thinking`?[{type:`redacted_thinking`,data:e.data??``}]:[])}function R(e,t){let n,r,i=L(e.content);if(t){let r=e.content.find(e=>e.type===`tool_use`&&e.name===t);r||M(`Anthropic`,t),N(`Anthropic`,t,r.input),n=JSON.stringify(r.input)}else{n=e.content.filter(e=>e.type===`text`).map(e=>e.text??``).join(``);let t=e.content.filter(e=>e.type===`tool_use`);t.length&&(r=t.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.input??{})}})))}return{choices:[{message:{content:n,...r?{tool_calls:r}:{},...i.length?{thinking:i}:{}},...j(e.stop_reason,`max_tokens`)}],usage:{prompt_tokens:F(e.usage),completion_tokens:e.usage?.output_tokens,total_tokens:(F(e.usage)??0)+(e.usage?.output_tokens??0),prompt_tokens_details:I(e.usage),...e.usage?.output_tokens_details?.thinking_tokens===void 0?{}:{completion_tokens_details:{reasoning_tokens:e.usage.output_tokens_details.thinking_tokens}}}}}function*z(e,t){let n=t.content_block;switch(n.type){case`tool_use`:{let r=n.name===e.toolName?`json-tool`:`tool_use`;e.blockKinds.set(t.index,r),r===`json-tool`?e.sawJsonTool=!0:e.toolName||(yield{type:`tool_call_delta`,index:t.index,id:n.id,name:n.name});return}case`thinking`:e.thinkingBlocks.set(t.index,{type:`thinking`,thinking:n.thinking??``,signature:n.signature??``});return;case`redacted_thinking`:e.thinkingBlocks.set(t.index,{type:`redacted_thinking`,data:n.data??``});return;default:e.blockKinds.set(t.index,`text`)}}function*B(e,t){let{delta:n}=t;switch(n.type){case`text_delta`:e.toolName||(yield{type:`text-delta`,delta:n.text});return;case`thinking_delta`:{let r=e.thinkingBlocks.get(t.index);r?.type===`thinking`&&(r.thinking+=n.thinking),yield{type:`ping`};return}case`signature_delta`:{let r=e.thinkingBlocks.get(t.index);r?.type===`thinking`&&(r.signature+=n.signature),yield{type:`ping`};return}case`input_json_delta`:e.blockKinds.get(t.index)===`json-tool`?yield{type:`text-delta`,delta:n.partial_json}:e.toolName||(yield{type:`tool_call_delta`,index:t.index,argumentsDelta:n.partial_json})}}function*me(e,t){let n=e.thinkingBlocks.get(t.index);n&&(e.thinkingBlocks.delete(t.index),yield{type:`thinking_block`,block:n})}const he=[`input_tokens`,`cache_creation_input_tokens`,`cache_read_input_tokens`];function ge(e,t){let n={...e};for(let e of he){let r=t?.[e];r!=null&&(n[e]=r)}return n}function _e(e,t){let n=ge(e.startUsage,t.usage),r=F(n)??0,i=t.usage?.output_tokens??0,a=t.usage?.output_tokens_details?.thinking_tokens;return{type:`usage`,usage:{prompt_tokens:r,completion_tokens:i,total_tokens:r+i,prompt_tokens_details:I(n),...a===void 0?{}:{completion_tokens_details:{reasoning_tokens:a}}}}}async function*ve(e,t){let n={toolName:t,blockKinds:new Map,thinkingBlocks:new Map,startUsage:void 0,sawJsonTool:!1};for await(let t of e)switch(t.type){case`message_start`:n.startUsage=t.message.usage;break;case`content_block_start`:yield*z(n,t);break;case`content_block_delta`:yield*B(n,t);break;case`content_block_stop`:yield*me(n,t);break;case`message_delta`:yield _e(n,t);break;case`ping`:yield{type:`ping`}}t&&!n.sawJsonTool&&M(`Anthropic`,t)}function ye(t,i){let o=a(i?.reasoningEffortTokens),s=i?.supportsWithResponse??!1,c=y(`anthropic`,()=>b(t),`Pass maxRetries: 0 to the client`),l=e=>de(e,i?.nativeStructuredOutputModels,o,i?.adaptiveOnlyModels,i?.forcedToolChoiceUnsupportedModels),u=(e,n)=>r(()=>t.messages.create(e,n),s);return{supportsJsonObjectMode:!1,cacheReadsCountTowardRateLimit:!1,adapter:{name:`anthropic`,provider:`anthropic`},setLogger:c,chat:{completions:{async create(t,n){let{body:r,toolName:i}=l(t),{data:a,headers:o}=await u(r,n),s=R(a,i);return o&&e.r(s,e.i(o)),s},async*createStream(t,r){let{body:i,toolName:a}=l(t),{data:o,headers:s}=await u({...i,stream:!0},r);if(s){let t=n(e.i(s));t&&(yield t)}yield*ve(o,a)}}}}}function be(e){return e.map(e=>e.type===`image`?{inlineData:{mimeType:k(e.mimeType),data:e.data}}:{text:e.text})}function xe(e){let t=e||`auto`;switch(t){case`auto`:return{functionCallingConfig:{mode:`AUTO`}};case`none`:return{functionCallingConfig:{mode:`NONE`}};case`required`:return{functionCallingConfig:{mode:`ANY`}};default:return{functionCallingConfig:{mode:`ANY`,allowedFunctionNames:[t.function.name]}}}}function Se(e){let t=new Map;for(let n of e)if(n.role===`assistant`)for(let e of n.tool_calls??[])t.set(e.id,e.function.name);return t}function Ce(e,t){if(e.role===`tool`)return{role:`user`,parts:[{functionResponse:{id:e.tool_call_id,name:t.get(e.tool_call_id)??e.tool_call_id,response:Te(e.content)}}]};if(e.role===`assistant`&&e.tool_calls?.length){let t=[];return typeof e.content==`string`&&e.content&&t.push({text:e.content}),t.push(...e.tool_calls.map(e=>({functionCall:{id:e.id,name:e.function.name,args:we(e.function.arguments,e.function.name)}}))),{role:`model`,parts:t}}return{role:e.role===`assistant`?`model`:`user`,parts:Array.isArray(e.content)?be(e.content):[{text:e.content??``}]}}function we(t,n){let r;try{r=t.trim()?JSON.parse(t):{}}catch(t){throw new e.s(`Tool call "${n}" arguments are not valid JSON.`,`parse`,{cause:t,code:`tool_arguments_parse_failed`})}if(!r||Array.isArray(r)||typeof r!=`object`)throw new e.s(`Tool call "${n}" arguments must be a JSON object.`,`validation`);return r}function Te(e){let t;try{t=e.trim()?JSON.parse(e):``}catch{t=e}return t&&!Array.isArray(t)&&typeof t==`object`?t:{output:t}}function Ee(e){let t=e=>e.role===`user`&&e.parts.length>0&&e.parts.every(e=>`functionResponse`in e),n=[];for(let r of e){let e=n.at(-1);t(r)&&e&&t(e)?e.parts.push(...r.parts):n.push(r)}return n}function De(e,t,n){if(ne(e.model,n)){let n=e.reasoning_effort??(e.budget_tokens===void 0?void 0:s(e.budget_tokens,t));return n===void 0?void 0:{thinkingLevel:h(n,e.model)}}let r=e.budget_tokens??(e.reasoning_effort?o(e.reasoning_effort,t):void 0);return r===void 0?void 0:{thinkingBudget:r}}function V(e,t,n){let r=e.messages.find(e=>e.role===`system`),i=e.messages.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool`),a=!!e.response_format,o={...e.temperature===void 0?{}:{temperature:e.temperature},maxOutputTokens:e.max_tokens,...r?{systemInstruction:{parts:[{text:r.content}]}}:{}};if(a&&(o.responseMimeType=`application/json`),e.response_format?.type===`json_schema`){let{schema:t,description:n}=e.response_format.json_schema;o.responseSchema={...t,...n?{description:n}:{}}}e.tools?.length&&(o.tools=[{functionDeclarations:e.tools.map(e=>({name:e.function.name,description:e.function.description,parameters:e.function.parameters}))}],o.toolConfig=xe(e.tool_choice));let s=De(e,t,n);s&&(o.thinkingConfig=s);let c=Se(i);return{model:e.model,contents:Ee(i.map(e=>Ce(e,c))),config:o}}function H(e,t){return`${e}#${t}`}function U(e){return{prompt_tokens:e?.promptTokenCount,completion_tokens:e?.candidatesTokenCount,total_tokens:e?.totalTokenCount,prompt_tokens_details:{cached_tokens:e?.cachedContentTokenCount},...e?.thoughtsTokenCount===void 0?{}:{completion_tokens_details:{reasoning_tokens:e.thoughtsTokenCount}}}}function Oe(e){let t=e.candidates?.[0]?.content?.parts??[],n=t.map(e=>e.text??``).join(``),r=t.filter(e=>e.functionCall),i;if(r.length){let e=new Map;i=r.map(t=>{let n=t.functionCall.name,r=t.functionCall.id,i=e.get(n)??0;return e.set(n,i+1),{id:r??H(n,i),type:`function`,function:{name:n,arguments:JSON.stringify(t.functionCall.args??{})}}})}return{choices:[{message:{content:n,...i?{tool_calls:i}:{}},...j(e.candidates?.[0]?.finishReason,`MAX_TOKENS`)}],usage:U(e.usageMetadata)}}async function*ke(e){let t=0,n=new Map,r;for await(let i of e){let e=i.candidates?.[0]?.content?.parts??[];for(let r of e)if(r.text&&(yield{type:`text-delta`,delta:r.text}),r.functionCall){let e=r.functionCall.name,i=r.functionCall.id,a=e?n.get(e)??0:0;e&&n.set(e,a+1),yield{type:`tool_call_delta`,index:t,id:i??(e?H(e,a):void 0),name:r.functionCall.name,argumentsDelta:JSON.stringify(r.functionCall.args??{}),complete:!0},t++}i.usageMetadata&&(r=i.usageMetadata)}r&&(yield{type:`usage`,usage:U(r)})}function Ae(e){return e.vertexai===!0?{provider:`gcp.vertex_ai`}:e.vertexai===!1?{provider:`gcp.gemini`}:{}}function je(e){let t=e.httpOptions?.retryOptions;if(t&&typeof t==`object`)return Math.max(1,Number(t.attempts??5))-1}function Me(e,t){let n=a(t?.reasoningEffortTokens),r=t?.thinkingLevelModels,i=e.models;if(!i&&typeof e.generateContent==`function`)throw x(`fromGemini takes the top level client: pass ai (new GoogleGenAI(...)), not ai.models.`,`top_level_client`);if(typeof i?.generateContent!=`function`)throw x(`fromGemini requires a client with models.generateContent: pass ai (new GoogleGenAI(...)).`,`generateContent`);let o=y(`gemini`,()=>je(e),`Remove httpOptions.retryOptions from the client, or set its attempts to 1,`),s=i.generateContent.bind(i),c=typeof i.generateContentStream==`function`?i.generateContentStream.bind(i):void 0;return{adapter:{name:`gemini`,...Ae(e)},setLogger:o,chat:{completions:{async create(e,t){let i=V(e,n,r);return i.config={...i.config,abortSignal:t.signal},Oe(await s(i))},async*createStream(e,t){if(!c)throw x(`stream: true requires a Gemini client with generateContentStream`,`generateContentStream`);let i=V(e,n,r);i.config={...i.config,abortSignal:t.signal},yield*ke(await c(i))}}}}}async function*W(t){let n=new TextDecoder(`utf-8`,{fatal:!0}),r=Ne();for await(let i of t){let t;try{t=typeof i==`string`?i:n.decode(i,{stream:!0})}catch(t){throw new e.s(`Invalid UTF-8 in SSE stream`,`parse`,{cause:t})}for(let e of r.push(t)){let t=J(e);if(t===G)return;t!==K&&(yield t)}}let i;try{i=n.decode()}catch(t){throw new e.s(`Invalid UTF-8 in SSE stream`,`parse`,{cause:t})}let{frames:a,trailing:o}=r.end(i);for(let e of a){let t=J(e);if(t===G)return;t!==K&&(yield t)}let s=o.trim();if(s){let e=J(s);e!==G&&e!==K&&(yield e)}}function Ne(){let e=[],t=!1,n=!1;function r(r){let i=n?`\r${r}`:r;n=i.endsWith(`\r`),n&&(i=i.slice(0,-1)),i=i.replace(/\r\n?/g,`
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../responseBody.utils-DfrljpVb.cjs");async function t(e){let{data:t,response:n}=await e.withResponse();return{data:t,headers:n.headers}}function n(e){return e.remainingRequests!==void 0||e.limitRequests!==void 0?{type:`rate_limit_hint`,hint:e}:void 0}async function r(e,n){return n?t(e()):{data:await e()}}const i={minimal:1024,low:4096,medium:16e3,high:32e3};function a(t){if(!t)return i;let n={...i,...t};if(!(n.minimal<n.low&&n.low<n.medium&&n.medium<n.high))throw new e.s(`reasoningEffortTokens must keep tiers in strictly ascending order (minimal < low < medium < high), got ${JSON.stringify(n)}. An out-of-order override doesn't just misrank tiers, it can make some of them unreachable.`,`invalid_params`);return n}function o(e,t=i){return t[e]}function s(e,t=i){return e<=t.minimal?`minimal`:e<=t.low?`low`:e<=t.medium?`medium`:`high`}function c(e){let t=/opus-(\d+)(?:-(\d+))?/.exec(e);if(!t)return null;let n=t[2],r=n===void 0||n.length>=8?0:Number(n);return[Number(t[1]),r]}function l(e){let t=c(e);if(t){let[e,n]=t;return e>4||e===4&&n>=7}return[`sonnet-5`,`fable-5`,`mythos`].some(t=>e.includes(t))}function u(e,t){return l(e)?!0:t?Array.isArray(t)?t.includes(e):t(e):!1}function d(e,t){return!u(e,t)}function f(t,n){if(t<1024)throw new e.s(`budgetTokens (${t}) is below Anthropic's minimum of 1024. Raise budgetTokens, or use a reasoningEffort tier of 'low' or above with the default conversion table.`,`invalid_params`);if(t>=n)throw new e.s(`budgetTokens (${t}) must be less than maxTokens (${n}); the thinking budget and the reply share the same max_tokens ceiling on Anthropic. Raise maxTokens, or lower budgetTokens/reasoningEffort.`,`invalid_params`)}function p(t){if(t)throw new e.s(`budgetTokens/reasoningEffort was set alongside ${t}. Anthropic rejects thinking combined with a tool_choice that forces tool use, the model has to be able to reply with plain text for thinking to run. Use toolChoice: 'auto' (or omit toolChoice) for this call, or drop budgetTokens/reasoningEffort for it.`,`invalid_params`)}function m(e){return e===`minimal`?`low`:e}function h(e,t){return ee(t,e.toUpperCase())}function g(e){let t=/gemini-\d+\.(\d+)/.exec(e);return t?Number(t[1]):0}function ee(e,t){if(!e.includes(`pro`))return t;let n=_(e);return n===null||n<3?t:g(e)===0?t===`HIGH`?`HIGH`:`LOW`:t===`MINIMAL`?`LOW`:t}function _(e){let t=/gemini-(\d+)/.exec(e);return t?Number(t[1]):null}function te(e){let t=_(e);return t!==null&&t>=3}function ne(e,t){return te(e)?!0:t?Array.isArray(t)?t.includes(e):t(e):!1}const v=/* @__PURE__ */ new Set;function y(e,t,n){return r=>{if(v.has(e))return;let i=t();i!==void 0&&i>0&&(v.add(e),r.warn(`[VernLLM] ${e}: the SDK client retries up to ${i} times on its own, hidden from VernLLM's retries, circuit breaker, rate limiter, and events. ${n} so VernLLM is the only retry owner.`))}}function b(e){let t=e?.maxRetries;return typeof t==`number`?t:void 0}function x(t,n){return new e.s(t,`invalid_params`,{code:`unsupported_capability`,issues:{capability:n}})}function S(t,n,r){let i=e.t(`${t} (${n.status})`,r);return i.status=n.status,i.headers=n.headers,i}function C(e){let t=/claude-([a-z]+)-(\d+)(?:[-.](\d+))?/i.exec(e),n=t??/claude-(\d+)(?:[-.](\d+))?/i.exec(e);if(!n)return null;let[,r,i,a]=t?n:[n[0],void 0,n[1],n[2]],o=a===void 0||a.length>=8?0:Number(a);return{family:r?.toLowerCase(),major:Number(i),minor:o}}function w(e,t,n,r){return e>n||e===n&&t>=r}function re(e){let t=C(e);if(!t)return!1;let{family:n,major:r,minor:i}=t;return r>=6?!0:n===`fable`?w(r,i,5,1):n===`opus`&&w(r,i,5,5)}function T(e,t){return t?Array.isArray(t)?t.includes(e):t(e):re(e)}function ie(e,t,n,r){if(n&&n!==`auto`&&n!==`none`&&T(t,r))throw x(`${e} model "${t}" rejects a tool_choice that forces tool use, so ${n===`required`?`toolChoice: 'required'`:`toolChoice: { name: '${n.function.name}' }`} can't be sent. Use toolChoice: 'auto' and ask for the tool in the prompt instead. If this model does accept it, list the models that reject it in forcedToolChoiceUnsupportedModels.`,`forced_tool_choice`)}function ae(e,t){return t?Array.isArray(t)?t.includes(e):t(e):!1}function E(t,n,r,i){let a=n.response_format?.type===`json_schema`?n.response_format.json_schema:void 0,o=a?.name.trim();if(a&&!o)throw new e.s(`json_schema.name must not be empty.`,`validation`);let s=T(n.model,r.forcedToolChoiceUnsupportedModels);n.tools?.length&&ie(t,n.model,n.tool_choice,r.forcedToolChoiceUnsupportedModels);let c=!!a&&(s||ae(n.model,r.nativeStructuredOutputModels));if(a&&n.tools?.length&&!c)throw x(i.toolsWithJsonSchema(n.model),`tools_with_json_schema`);if(n.response_format?.type===`json_object`)throw new e.s(i.jsonObject,`validation`);return!a||!o?{mode:`none`}:{mode:c?`native`:`forcedTool`,jsonSchema:a,schemaName:o}}function oe(e,t,n){if(e.budget_tokens!==void 0||e.reasoning_effort!==void 0){if(p(t),d(e.model,n.adaptiveOnlyModels)){let t=e.budget_tokens??o(e.reasoning_effort,n.effortTokenTable);return f(t,e.max_tokens),{thinking:{type:`enabled`,budget_tokens:t}}}return{thinking:{type:`adaptive`},effort:m(e.reasoning_effort??s(e.budget_tokens,n.effortTokenTable))}}}const D=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`];function O(t){if(D.includes(t))return t;throw new e.s(`Unsupported image mimeType "${t}": expected one of ${D.join(`, `)}`,`invalid_params`)}function se(e){let t=C(e);return t!==null&&w(t.major,t.minor,4,7)}function ce(e){return e.map(e=>e.type===`image`?{type:`image`,source:{type:`base64`,media_type:O(e.mimeType),data:e.data}}:{type:`text`,text:e.text})}function k(t,n){if(t.type!==`object`)throw new e.s(`Tool "${n}"'s schema must have "type": "object" (Anthropic requires object-shaped tool parameters).`,`validation`);return t}function le(e){let t=e||`auto`;switch(t){case`auto`:return{type:`auto`};case`none`:return{type:`none`};case`required`:return{type:`any`};default:return{type:`tool`,name:t.function.name}}}function ue(e,t){return{tools:e.map(e=>({name:e.function.name,description:e.function.description,input_schema:k(e.function.parameters,e.function.name)})),toolChoice:le(t)}}const de={toolsWithJsonSchema:e=>`Anthropic model "${e}" is not covered by nativeStructuredOutputModels, so \`jsonSchema\` is emulated as a forced single tool call there, which collides with the \`tools\` you also provided. Either drop \`tools\` or \`jsonSchema\` for this call, or pass this model in fromAnthropic's \`nativeStructuredOutputModels\` option once you've confirmed it supports Anthropic's \`output_config.format\`.`,jsonObject:'response_format: "json_object" is not supported on Anthropic. Unlike OpenAI, Anthropic has no API-level field that mechanically guarantees valid JSON output for this mode, so it used to be emulated by injecting a "respond with JSON only" instruction into the system prompt, a guarantee this adapter can no longer make. Use `jsonSchema` instead, which maps to a real API-level constraint (Anthropic\'s native output_config.format on covered models, or a forced single tool call otherwise).'};function fe(e){if(e?.type===`tool`)return`toolChoice forcing the "${e.name}" tool`;if(e?.type===`any`)return`toolChoice: 'required' (Anthropic's "any" tool_choice)`}function pe(e,t,n,r,i,a=!1){let o=e.messages.find(e=>e.role===`system`),s=e.messages.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool`),c=E(`Anthropic`,e,{nativeStructuredOutputModels:t,forcedToolChoiceUnsupportedModels:i},de),l,u,d,f;if(c.mode===`forcedTool`){let{schema:e,description:t,strict:n}=c.jsonSchema;l=c.schemaName,d=[{name:l,description:t,input_schema:k(e,l),strict:n}],f={type:`tool`,name:l}}else c.mode===`native`&&(u={type:`json_schema`,schema:c.jsonSchema.schema}),e.tools?.length&&({tools:d,toolChoice:f}=ue(e.tools,e.tool_choice));let p=oe(e,fe(f),{adaptiveOnlyModels:r,effortTokenTable:n}),m=p?.effort,h=o?.content,g=p||!a||se(e.model)?void 0:e.temperature;return{body:{model:e.model,max_tokens:e.max_tokens,...g===void 0?{}:{temperature:g},system:h||void 0,messages:me(s.map(e=>he(e))),...d?{tools:d,tool_choice:f}:{},...u||m?{output_config:{...u?{format:u}:{},...m?{effort:m}:{}}}:{},...p?{thinking:p.thinking}:{}},toolName:l}}function me(e){let t=e=>e.role===`user`&&Array.isArray(e.content)&&e.content.length>0&&e.content.every(e=>e.type===`tool_result`),n=[];for(let r of e){let e=n.at(-1);t(r)&&e&&t(e)?e.content.push(...r.content):n.push(r)}return n}function he(t){if(t.role===`tool`)return{role:`user`,content:[{type:`tool_result`,tool_use_id:t.tool_call_id,content:t.content,...t.is_error?{is_error:!0}:{}}]};if(t.role===`assistant`&&(t.tool_calls?.length||t.thinking?.length)){let n=(t.thinking??[]).map(e=>e.type===`thinking`?{type:`thinking`,thinking:e.thinking,signature:e.signature}:{type:`redacted_thinking`,data:e.data});t.content&&n.push({type:`text`,text:t.content});for(let r of t.tool_calls??[]){let t;try{t=r.function.arguments.trim()?JSON.parse(r.function.arguments):{}}catch(t){throw new e.s(`Assistant tool call "${r.function.name}" (${r.id}) has arguments that are not valid JSON.`,`validation`,{cause:t})}if(t===null||Array.isArray(t)||typeof t!=`object`)throw new e.s(`Assistant tool call "${r.function.name}" (${r.id}) arguments must be a JSON object.`,`validation`);n.push({type:`tool_use`,id:r.id,name:r.function.name,input:t})}return{role:`assistant`,content:n}}return{role:t.role,content:Array.isArray(t.content)?ce(t.content):t.content??``}}function A(e,t){return e?t[e]??`other`:void 0}function j(e,t){let n=A(e,t);return n?{finish_reason:n}:{}}function M(t,n){throw new e.s(`${t} did not return the required structured output tool "${n}".`,`validation`)}function ge(t,n,r){if(!r||typeof r!=`object`||Array.isArray(r))throw new e.s(`${t} returned invalid structured output for tool "${n}". Expected an object.`,`validation`)}function N(e,t){return e&&t.has(e)?{refusal:e}:{}}const P={end_turn:`stop`,stop_sequence:`stop`,max_tokens:`length`,tool_use:`tool_calls`,refusal:`refusal`},_e=e=>A(e,P),F=/* @__PURE__ */ new Set([`refusal`]),I=e=>typeof e==`number`&&Number.isFinite(e)?e:0;function L(e){let t=[e?.input_tokens,e?.cache_creation_input_tokens,e?.cache_read_input_tokens];if(!t.every(e=>e==null))return t.reduce((e,t)=>e+I(t),0)}function R(e){if(!e)return;let t=e.cache_creation?{"5m":I(e.cache_creation.ephemeral_5m_input_tokens),"1h":I(e.cache_creation.ephemeral_1h_input_tokens)}:void 0;return{cached_tokens:e.cache_read_input_tokens??void 0,cache_write_tokens:e.cache_creation_input_tokens??void 0,...t?{cache_write_tokens_by_ttl:t}:{}}}function ve(e){return e.flatMap(e=>e.type===`thinking`?[{type:`thinking`,thinking:e.thinking??``,signature:e.signature??``}]:e.type===`redacted_thinking`?[{type:`redacted_thinking`,data:e.data??``}]:[])}function ye(e,t){let n,r,i=ve(e.content),a=N(e.stop_reason,F);if(t){let r=e.content.find(e=>e.type===`tool_use`&&e.name===t);r?(ge(`Anthropic`,t,r.input),n=JSON.stringify(r.input)):a.refusal?n=``:M(`Anthropic`,t)}else{n=e.content.filter(e=>e.type===`text`).map(e=>e.text??``).join(``);let t=e.content.filter(e=>e.type===`tool_use`);t.length&&(r=t.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.input??{})}})))}return{choices:[{message:{content:n,...r?{tool_calls:r}:{},...i.length?{thinking:i}:{},...a},...j(e.stop_reason,P)}],usage:{prompt_tokens:L(e.usage),completion_tokens:e.usage?.output_tokens,total_tokens:(L(e.usage)??0)+(e.usage?.output_tokens??0),prompt_tokens_details:R(e.usage),...e.usage?.output_tokens_details?.thinking_tokens===void 0?{}:{completion_tokens_details:{reasoning_tokens:e.usage.output_tokens_details.thinking_tokens}}}}}function*be(e,t){let n=t.content_block;switch(n.type){case`tool_use`:{let r=n.name===e.toolName?`json-tool`:`tool_use`;e.blockKinds.set(t.index,r),r===`json-tool`?e.sawJsonTool=!0:e.toolName||(yield{type:`tool_call_delta`,index:t.index,id:n.id,name:n.name});return}case`thinking`:e.thinkingBlocks.set(t.index,{type:`thinking`,thinking:n.thinking??``,signature:n.signature??``});return;case`redacted_thinking`:e.thinkingBlocks.set(t.index,{type:`redacted_thinking`,data:n.data??``});return;default:e.blockKinds.set(t.index,`text`)}}function*xe(e,t){let{delta:n}=t;switch(n.type){case`text_delta`:e.toolName||(yield{type:`text-delta`,delta:n.text});return;case`thinking_delta`:{let r=e.thinkingBlocks.get(t.index);r?.type===`thinking`&&(r.thinking+=n.thinking),yield{type:`ping`};return}case`signature_delta`:{let r=e.thinkingBlocks.get(t.index);r?.type===`thinking`&&(r.signature+=n.signature),yield{type:`ping`};return}case`input_json_delta`:e.blockKinds.get(t.index)===`json-tool`?yield{type:`text-delta`,delta:n.partial_json}:e.toolName||(yield{type:`tool_call_delta`,index:t.index,argumentsDelta:n.partial_json})}}function*Se(e,t){let n=e.thinkingBlocks.get(t.index);n&&(e.thinkingBlocks.delete(t.index),yield{type:`thinking_block`,block:n})}const Ce=[`input_tokens`,`cache_creation_input_tokens`,`cache_read_input_tokens`];function we(e,t){let n={...e};for(let e of Ce){let r=t?.[e];r!=null&&(n[e]=r)}return n}function Te(e,t){let n=we(e.startUsage,t.usage),r=L(n)??0,i=t.usage?.output_tokens??0,a=t.usage?.output_tokens_details?.thinking_tokens;return{type:`usage`,usage:{prompt_tokens:r,completion_tokens:i,total_tokens:r+i,prompt_tokens_details:R(n),...a===void 0?{}:{completion_tokens_details:{reasoning_tokens:a}}}}}async function*Ee(e,t){let n={toolName:t,blockKinds:/* @__PURE__ */ new Map,thinkingBlocks:/* @__PURE__ */ new Map,startUsage:void 0,sawJsonTool:!1,refused:!1};for await(let t of e)switch(t.type){case`message_start`:n.startUsage=t.message.usage;break;case`content_block_start`:yield*be(n,t);break;case`content_block_delta`:yield*xe(n,t);break;case`content_block_stop`:yield*Se(n,t);break;case`message_delta`:t.delta?.stop_reason&&F.has(t.delta.stop_reason)&&(n.refused=!0,yield{type:`refusal`}),t.delta?.stop_reason&&(yield{type:`finish`,reason:_e(t.delta.stop_reason)}),yield Te(n,t);break;case`ping`:yield{type:`ping`}}t&&!n.sawJsonTool&&!n.refused&&M(`Anthropic`,t)}function De(t,i){let o=a(i?.reasoningEffortTokens),s=i?.supportsWithResponse??!1,c=y(`anthropic`,()=>b(t),`Pass maxRetries: 0 to the client`),l=e=>pe(e,i?.nativeStructuredOutputModels,o,i?.adaptiveOnlyModels,i?.forcedToolChoiceUnsupportedModels,i?.sendTemperature),u=(e,n)=>r(()=>t.messages.create(e,n),s);return{supportsJsonObjectMode:!1,cacheReadsCountTowardRateLimit:!1,adapter:{name:`anthropic`,provider:`anthropic`},setLogger:c,chat:{completions:{async create(t,n){let{body:r,toolName:i}=l(t),{data:a,headers:o}=await u(r,n),s=ye(a,i);return o&&e.r(s,e.i(o)),s},async*createStream(t,r){let{body:i,toolName:a}=l(t),{data:o,headers:s}=await u({...i,stream:!0},r);if(s){let t=n(e.i(s));t&&(yield t)}yield*Ee(o,a)}}}}}function Oe(e){return e.map(e=>e.type===`image`?{inlineData:{mimeType:O(e.mimeType),data:e.data}}:{text:e.text})}function ke(e){let t=e||`auto`;switch(t){case`auto`:return{functionCallingConfig:{mode:`AUTO`}};case`none`:return{functionCallingConfig:{mode:`NONE`}};case`required`:return{functionCallingConfig:{mode:`ANY`}};default:return{functionCallingConfig:{mode:`ANY`,allowedFunctionNames:[t.function.name]}}}}function Ae(e){let t=/* @__PURE__ */ new Map;for(let n of e)if(n.role===`assistant`)for(let e of n.tool_calls??[])t.set(e.id,e.function.name);return t}function je(e,t){if(e.role===`tool`)return{role:`user`,parts:[{functionResponse:{id:e.tool_call_id,name:t.get(e.tool_call_id)??e.tool_call_id,response:Ne(e.content)}}]};if(e.role===`assistant`&&e.tool_calls?.length){let t=[];return typeof e.content==`string`&&e.content&&t.push({text:e.content}),t.push(...e.tool_calls.map(e=>({functionCall:{id:e.id,name:e.function.name,args:Me(e.function.arguments,e.function.name)}}))),{role:`model`,parts:t}}return{role:e.role===`assistant`?`model`:`user`,parts:Array.isArray(e.content)?Oe(e.content):[{text:e.content??``}]}}function Me(t,n){let r;try{r=t.trim()?JSON.parse(t):{}}catch(t){throw new e.s(`Tool call "${n}" arguments are not valid JSON.`,`parse`,{cause:t,code:`tool_arguments_parse_failed`})}if(!r||Array.isArray(r)||typeof r!=`object`)throw new e.s(`Tool call "${n}" arguments must be a JSON object.`,`validation`);return r}function Ne(e){let t;try{t=e.trim()?JSON.parse(e):``}catch{t=e}return t&&!Array.isArray(t)&&typeof t==`object`?t:{output:t}}function Pe(e){let t=e=>e.role===`user`&&e.parts.length>0&&e.parts.every(e=>`functionResponse`in e),n=[];for(let r of e){let e=n.at(-1);t(r)&&e&&t(e)?e.parts.push(...r.parts):n.push(r)}return n}function Fe(e,t,n){if(ne(e.model,n)){let n=e.reasoning_effort??(e.budget_tokens===void 0?void 0:s(e.budget_tokens,t));return n===void 0?void 0:{thinkingLevel:h(n,e.model)}}let r=e.budget_tokens??(e.reasoning_effort?o(e.reasoning_effort,t):void 0);return r===void 0?void 0:{thinkingBudget:r}}function z(e,t,n){let r=e.messages.find(e=>e.role===`system`),i=e.messages.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool`),a=!!e.response_format,o={...e.temperature===void 0?{}:{temperature:e.temperature},maxOutputTokens:e.max_tokens,...r?{systemInstruction:{parts:[{text:r.content}]}}:{}};if(a&&(o.responseMimeType=`application/json`),e.response_format?.type===`json_schema`){let{schema:t,description:n}=e.response_format.json_schema;o.responseSchema={...t,...n?{description:n}:{}}}e.tools?.length&&(o.tools=[{functionDeclarations:e.tools.map(e=>({name:e.function.name,description:e.function.description,parameters:e.function.parameters}))}],o.toolConfig=ke(e.tool_choice));let s=Fe(e,t,n);s&&(o.thinkingConfig=s);let c=Ae(i);return{model:e.model,contents:Pe(i.map(e=>je(e,c))),config:o}}function B(e,t){return`${e}#${t}`}function V(e){return{prompt_tokens:e?.promptTokenCount,completion_tokens:e?.candidatesTokenCount,total_tokens:e?.totalTokenCount,prompt_tokens_details:{cached_tokens:e?.cachedContentTokenCount},...e?.thoughtsTokenCount===void 0?{}:{completion_tokens_details:{reasoning_tokens:e.thoughtsTokenCount}}}}const H={STOP:`stop`,MAX_TOKENS:`length`,SAFETY:`content_filter`,BLOCKLIST:`content_filter`,PROHIBITED_CONTENT:`content_filter`,SPII:`content_filter`},Ie=e=>A(e,H),Le=/* @__PURE__ */ new Set([`SAFETY`,`BLOCKLIST`,`PROHIBITED_CONTENT`,`SPII`]);function U(e,t){let n=t?.blockReason;return n&&n!==`BLOCKED_REASON_UNSPECIFIED`?{refusal:n}:N(e?.finishReason,Le)}function Re(e){let t=e.candidates?.[0]?.content?.parts??[],n=t.map(e=>e.text??``).join(``),r=t.filter(e=>e.functionCall),i;if(r.length){let e=/* @__PURE__ */ new Map;i=r.map(t=>{let n=t.functionCall.name,r=t.functionCall.id,i=e.get(n)??0;return e.set(n,i+1),{id:r??B(n,i),type:`function`,function:{name:n,arguments:JSON.stringify(t.functionCall.args??{})}}})}return{choices:[{message:{content:n,...i?{tool_calls:i}:{},...U(e.candidates?.[0],e.promptFeedback)},...j(e.candidates?.[0]?.finishReason,H)}],usage:V(e.usageMetadata)}}async function*ze(e){let t=0,n=/* @__PURE__ */ new Map,r;for await(let i of e){let e=i.candidates?.[0]?.content?.parts??[];for(let r of e)if(r.text&&(yield{type:`text-delta`,delta:r.text}),r.functionCall){let e=r.functionCall.name,i=r.functionCall.id,a=e?n.get(e)??0:0;e&&n.set(e,a+1),yield{type:`tool_call_delta`,index:t,id:i??(e?B(e,a):void 0),name:r.functionCall.name,argumentsDelta:JSON.stringify(r.functionCall.args??{}),complete:!0},t++}U(i.candidates?.[0],i.promptFeedback).refusal&&(yield{type:`refusal`});let a=Ie(i.candidates?.[0]?.finishReason);a&&(yield{type:`finish`,reason:a}),i.usageMetadata&&(r=i.usageMetadata)}r&&(yield{type:`usage`,usage:V(r)})}function Be(e){return e.vertexai===!0?{provider:`gcp.vertex_ai`}:e.vertexai===!1?{provider:`gcp.gemini`}:{}}function Ve(e){let t=e.httpOptions?.retryOptions;if(t&&typeof t==`object`)return Math.max(1,Number(t.attempts??5))-1}function He(e,t){let n=a(t?.reasoningEffortTokens),r=t?.thinkingLevelModels,i=e.models;if(!i&&typeof e.generateContent==`function`)throw x(`fromGemini takes the top level client: pass ai (new GoogleGenAI(...)), not ai.models.`,`top_level_client`);if(typeof i?.generateContent!=`function`)throw x(`fromGemini requires a client with models.generateContent: pass ai (new GoogleGenAI(...)).`,`generateContent`);let o=y(`gemini`,()=>Ve(e),`Remove httpOptions.retryOptions from the client, or set its attempts to 1,`),s=i.generateContent.bind(i),c=typeof i.generateContentStream==`function`?i.generateContentStream.bind(i):void 0;return{adapter:{name:`gemini`,...Be(e)},setLogger:o,chat:{completions:{async create(e,t){let i=z(e,n,r);return i.config={...i.config,abortSignal:t.signal},Re(await s(i))},async*createStream(e,t){if(!c)throw x(`stream: true requires a Gemini client with generateContentStream`,`generateContentStream`);let i=z(e,n,r);i.config={...i.config,abortSignal:t.signal},yield*ze(await c(i))}}}}}async function*W(t){let n=new TextDecoder(`utf-8`,{fatal:!0}),r=Ue();for await(let i of t){let t;try{t=typeof i==`string`?i:n.decode(i,{stream:!0})}catch(t){throw new e.s(`Invalid UTF-8 in SSE stream`,`parse`,{cause:t})}for(let e of r.push(t)){let t=J(e);if(t===G)return;t!==K&&(yield t)}}let i;try{i=n.decode()}catch(t){throw new e.s(`Invalid UTF-8 in SSE stream`,`parse`,{cause:t})}let{frames:a,trailing:o}=r.end(i);for(let e of a){let t=J(e);if(t===G)return;t!==K&&(yield t)}let s=o.trim();if(s){let e=J(s);e!==G&&e!==K&&(yield e)}}function Ue(){let e=[],t=!1,n=!1;function r(r){let i=n?`\r${r}`:r;n=i.endsWith(`\r`),n&&(i=i.slice(0,-1)),i=i.replace(/\r\n?/g,`
|
|
2
2
|
`);let a=[],o=0;t&&i.startsWith(`
|
|
3
3
|
`)&&(a.push(e.join(``).slice(0,-1)),e=[],t=!1,o=1);let s=i.indexOf(`
|
|
4
4
|
|
|
@@ -7,6 +7,6 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
|
|
|
7
7
|
`,o);let c=i.slice(o);return c?(e.push(c),t=c.endsWith(`
|
|
8
8
|
`)):o>0&&(t=!1),a}return{push:r,end(t){let i=r(t);return n&&(n=!1,i.push(...r(`
|
|
9
9
|
`))),{frames:i,trailing:e.join(``)}}}}const G=Symbol(`sse-stream-done`),K=Symbol(`sse-frame-no-data`),q=Symbol(`sse-frame-ping`);function J(t){let n=[],r=!1;for(let e of t.split(`
|
|
10
|
-
`))
|
|
11
|
-
`);if(i===`[DONE]`)return G;try{return JSON.parse(i)}catch(t){throw new e.s(`Invalid JSON in SSE frame: ${i.slice(0,200)}`,`parse`,{cause:t,code:`stream_frame_invalid`})}}function
|
|
10
|
+
`))e.startsWith(`:`)?r=!0:e.startsWith(`data:`)&&n.push(e.startsWith(`data: `)?e.slice(6):e.slice(5));if(!n.length)return r?q:K;let i=n.join(`
|
|
11
|
+
`);if(i===`[DONE]`)return G;try{return JSON.parse(i)}catch(t){throw new e.s(`Invalid JSON in SSE frame: ${i.slice(0,200)}`,`parse`,{cause:t,code:`stream_frame_invalid`})}}function Y(e){return e.cacheReadTokens!==void 0||e.cacheWriteTokens!==void 0||e.cacheWriteTokensByTtl!==void 0}function We(e){let{content:t,refusal:n,finishReason:r,usage:i,toolCalls:a}=e,o=a?.length?a.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:e.arguments}})):void 0;return{choices:[{message:{content:t,...n?{refusal:n}:{},...o?{tool_calls:o}:{}},...r?{finish_reason:r}:{}}],usage:i?{prompt_tokens:i.promptTokens,completion_tokens:i.completionTokens,total_tokens:i.totalTokens,...i.costUsd===void 0?{}:{cost:i.costUsd},...Y(i)?{prompt_tokens_details:{cached_tokens:i.cacheReadTokens,cache_write_tokens:i.cacheWriteTokens,cache_write_tokens_by_ttl:i.cacheWriteTokensByTtl}}:{}}:void 0}}async function*Ge(e,t){for await(let n of e){if(n===q){yield{type:`ping`};continue}let e=t(n);e&&(Array.isArray(e)?yield*e:yield e)}}async function*Ke(e){let t=e.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)return;n&&(yield n)}}finally{try{await t.cancel()}catch{}t.releaseLock()}}async function qe(e,t){let n=await fetch(e,t);if(!n.ok)throw S(`Fetch adapter stream request failed`,n,await n.text().catch(()=>``));if(!n.body)throw Error(`Fetch adapter stream request received a response with no body.`);return{headers:n.headers,body:Ke(n.body)}}async function X(e,t,n){let r=typeof e.url==`function`?e.url(t):e.url,i=typeof e.headers==`function`?await e.headers():e.headers,a=e.method??`POST`,o=![`GET`,`HEAD`].includes(a.toUpperCase());return{url:r,method:a,headers:o?{"Content-Type":`application/json`,...i}:{...i},...o?{body:JSON.stringify(n)}:{}}}async function Je(e,t,n){let{url:r,method:i,headers:a,body:o}=await X(e,t,e.mapRequest(t)),s=await(e.request??fetch)(r,{method:i,headers:a,body:o,signal:n});if(!s.ok)throw S(`Fetch adapter request failed`,s,await s.text().catch(()=>``));return s}async function Ye(e,t,n){if(e.request&&!e.requestStream)throw x("`stream: true` requires `requestStream` to be configured on fromFetch when a custom `request` transport is set. `requestStream` does not fall back to `request` (it needs an async-iterable byte stream, which `RequestLike`'s buffered `ResponseLike` has no way to provide), without it, `stream: true` would silently use plain native `fetch` instead of your configured transport. Add a `requestStream` that opens the same connection your `request` does, or omit `request` if native `fetch` is fine for both.",`requestStream`);let{url:r,method:i,headers:a,body:o}=await X(e,t,e.mapRequest(t)),s={method:i,headers:a,body:o,signal:n};return e.requestStream?{body:await e.requestStream(r,s)}:qe(r,s)}function Z(t,n){if(n&&typeof n.get==`function`)return(t.parseRateLimitHint??e.a)(n)}function Xe(t){return{adapter:{name:`fetch`,...typeof t.provider==`string`&&t.provider.trim()!==``?{provider:t.provider}:{}},chat:{completions:{async create(n,r){let i=await Je(t,n,r.signal),a=We(t.mapResponse(await i.json()));return e.r(a,Z(t,i.headers)),a},async*createStream(e,r){let{mapStreamEvent:i}=t;if(!i)throw x(`stream: true requires mapStreamEvent to be configured on fromFetch`,`mapStreamEvent`);let a=t.parseStreamFrames??W,o=await Ye(t,e,r.signal),s=Z(t,o.headers),c=s&&n(s);c&&(yield c),yield*Ge(a(o.body),i)}}}}}const Ze=[[/^api\.openai\.com$/,`openai`],[/\.openai\.azure\.com$/,`azure.ai.openai`],[/^api\.groq\.com$/,`groq`],[/^api\.mistral\.ai$/,`mistral_ai`],[/^api\.deepseek\.com$/,`deepseek`],[/^api\.x\.ai$/,`x_ai`],[/^api\.perplexity\.ai$/,`perplexity`]];function Qe(e,t){if(typeof t==`string`&&t.trim()!==``)return t;let n=e.baseURL;if(typeof n!=`string`)return;let r;try{r=new URL(n).hostname.toLowerCase()}catch{return}return Ze.find(([e])=>e.test(r))?.[1]}function $e(e){if(/-chat/.test(e))return!1;let t=/^gpt-(\d+)/.exec(e)?.[1];return t!==void 0&&Number(t)>=6}function et(e,t){return t?Array.isArray(t)?t.includes(e):t(e):$e(e)}function tt(e,t){if(!e.tools?.length||!et(e.model,t))return!1;if(e.reasoning_effort!==void 0||e.budget_tokens!==void 0)throw x(`OpenAI model "${e.model}" only accepts tools on Chat Completions with reasoning_effort "none", but this call asks for reasoning through reasoningEffort or budgetTokens (an instance default counts). Pass reasoningEffort: null and budgetTokens: null for this call, or use the Responses API for reasoning with tools.`,`tools_with_reasoning`);return!0}function nt(e,t,n){return t?(n?.debug(`[VernLLM] ${e.model}: sending reasoning_effort "none", required for tools on Chat Completions`),{...e,reasoning_effort:`none`}):e}function rt(e,t){if(e.budget_tokens===void 0)return e;let{budget_tokens:n,...r}=e;return r.reasoning_effort===void 0?{...r,reasoning_effort:s(n,t)}:r}function it(e){if(/-chat/.test(e))return!1;if(/^o\d/.test(e))return!0;let t=/^gpt-(\d+)/.exec(e)?.[1];return t!==void 0&&Number(t)>=5}function at(e){if(!it(e.model))return e;let{max_tokens:t,temperature:n,...r}=e;return{...r,max_completion_tokens:t}}function ot(e){return e.map(e=>e.type===`image`?{type:`image_url`,image_url:{url:`data:${O(e.mimeType)};base64,${e.data}`}}:{type:`text`,text:e.text})}function st(e){return e.messages.map(e=>{if(e.role===`user`&&Array.isArray(e.content))return{...e,content:ot(e.content)};if(e.role===`tool`){let{is_error:t,...n}=e;return t?{...n,content:`Error: ${n.content}`}:n}if(e.role===`assistant`&&e.thinking){let{thinking:t,...n}=e;return n}return e})}function ct(e,t){return t?.type===`json_object`?e.some(e=>{let t=e.content;return(Array.isArray(t)?t:[t]).some(e=>{let t=typeof e==`string`?e:e?.text;return typeof t==`string`&&/json/i.test(t)})})?e:[{role:`system`,content:`Respond with a valid JSON object.`},...e]:e}function Q(e){let t=e.prompt_tokens_details?.cached_tokens??e.prompt_cache_hit_tokens;return t===void 0?e:{...e,prompt_tokens_details:{...e.prompt_tokens_details,cached_tokens:t}}}function*lt(e){let t=e.choices?.[0]?.delta;if(t?.content&&(yield{type:`text-delta`,delta:t.content}),t?.refusal&&(yield{type:`refusal`,delta:t.refusal}),t?.tool_calls?.length)for(let e of t.tool_calls)yield{type:`tool_call_delta`,index:e.index,id:e.id,name:e.function?.name,argumentsDelta:e.function?.arguments};let n=e.choices?.[0]?.finish_reason;n&&(yield{type:`finish`,reason:n}),e.usage&&(yield{type:`usage`,usage:Q(e.usage)})}function $(t,i={}){let o=t,{supportsStreamUsage:s=!0,supportsWithResponse:c=!1}=i,l=a(i.reasoningEffortTokens),u=Qe(t,i.provider),d,f=y(`openai-compatible`,()=>b(t),`Pass maxRetries: 0 to the client`),p=(e,t={})=>{let n=tt(e,i.noReasoningToolModels),r=ct(st(e),e.response_format);return nt(at(rt({...e,messages:r,...t},l)),n,d)},m=(e,t)=>r(()=>o.chat.completions.create(e,t),c);return{adapter:{name:`openai-compatible`,...u?{provider:u}:{}},setLogger(e){d=e,f(e)},chat:{completions:{async create(t,n){let{data:r,headers:i}=await m(p(t),n),a=r?.usage?{...r,usage:Q(r.usage)}:r;return i&&a&&typeof a==`object`&&e.r(a,e.a(i)),a},async*createStream(t,r){let i=p(t,{stream:!0,...s?{stream_options:{include_usage:!0}}:{}}),{data:a,headers:o}=await m(i,r);if(o){let t=n(e.a(o));t&&(yield t)}for await(let e of a)yield*lt(e)}}}}}const ut=$,dt=$,ft=$,pt=$,mt=$,ht=$,gt=$,_t=$,vt=$,yt=$,bt=$,xt=$,St=$,Ct=$,wt=$,Tt=$,Et=$,Dt=$,Ot=$,kt=$,At=$,jt=$,Mt=$,Nt=$,Pt=$,Ft=$,It=$,Lt=$,Rt=$,zt=$,Bt=$,Vt=$,Ht=$,Ut=$,Wt=$,Gt=$,Kt=$,qt=$;exports.SSE_PING=q,exports.from01AI=qt,exports.fromAnthropic=De,exports.fromAnyscale=Ht,exports.fromAtlasCloud=Kt,exports.fromBaseten=Nt,exports.fromCerebras=mt,exports.fromCloudflareWorkersAI=At,exports.fromDeepInfra=bt,exports.fromDeepSeek=pt,exports.fromFeatherless=Pt,exports.fromFetch=Xe,exports.fromFireworks=gt,exports.fromFriendli=Ft,exports.fromGemini=He,exports.fromGroq=dt,exports.fromHyperbolic=St,exports.fromInferenceNet=Wt,exports.fromInfermatic=Gt,exports.fromLMStudio=Tt,exports.fromLambdaLabs=Bt,exports.fromLepton=Ut,exports.fromMiniMax=zt,exports.fromMistral=ft,exports.fromMoonshot=Ct,exports.fromNebius=jt,exports.fromNovita=xt,exports.fromNvidiaNIM=Ot,exports.fromOllama=_t,exports.fromOpenAI=ut,exports.fromOpenAICompatible=$,exports.fromOpenRouter=vt,exports.fromParasail=Lt,exports.fromPerplexity=yt,exports.fromSambaNova=Mt,exports.fromSiliconFlow=It,exports.fromSnowflakeCortex=Vt,exports.fromStepFun=Rt,exports.fromTogether=ht,exports.fromVLLM=Et,exports.fromVercelAIGateway=kt,exports.fromXAI=Dt,exports.fromZhipu=wt,exports.parseSseStream=W;
|
|
12
12
|
//# sourceMappingURL=index.cjs.map
|