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/index.cjs
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./responseBody.utils-
|
|
2
|
-
`).trim()}async resolveKey(e){return this.normalize(e)}async get(e){return this.inner.get(this.normalize(e))}async set(e,t,n){await this.inner.set(this.normalize(e),t,n)}async delete(e){await this.inner.delete?.(this.normalize(e))}},l=class{l1;l2;l1Ttl;l2ExpiresAt=new Map;expiryHeap=[];constructor(e,t,n){this.l1=e,this.l2=t,this.l1Ttl=n}async resolveKey(e){return this.l1.resolveKey?this.l1.resolveKey(e):this.l2.resolveKey?this.l2.resolveKey(e):e}async get(e){let t=await this.l1.get(e);if(t.hit)return t;let n=await this.l2.get(e);return n.hit&&await this.l1.set(e,n.value,this.promotionTtl(e)),n}async set(e,t,n){this.trackExpiry(e,n);let r=this.l1Ttl===void 0?n:Math.min(this.l1Ttl,n);await Promise.all([this.l1.set(e,t,r),this.l2.set(e,t,n)])}async delete(e){this.l2ExpiresAt.delete(e),await Promise.all([this.l1.delete?.(e),this.l2.delete?.(e)])}promotionTtl(e){let t=this.l1Ttl??60,n=this.l2ExpiresAt.get(e);return n===void 0?t:n<=Date.now()?(this.l2ExpiresAt.delete(e),t):Math.min(t,(n-Date.now())/1e3)}trackExpiry(e,t){let n=Date.now();if(this.pruneExpired(n),this.l2ExpiresAt.delete(e),typeof t!=`number`||Number.isNaN(t))return;let r=n+t*1e3;for(this.l2ExpiresAt.set(e,r),u(this.expiryHeap,{key:e,expiresAt:r});this.l2ExpiresAt.size>1e4;){let e=this.l2ExpiresAt.keys().next().value;if(e===void 0)break;this.l2ExpiresAt.delete(e)}if(this.expiryHeap.length>2*this.l2ExpiresAt.size+64){this.expiryHeap=[];for(let[e,t]of this.l2ExpiresAt)u(this.expiryHeap,{key:e,expiresAt:t})}}pruneExpired(e){for(;this.expiryHeap.length>0&&this.expiryHeap[0].expiresAt<=e;){let{key:e,expiresAt:t}=d(this.expiryHeap);this.l2ExpiresAt.get(e)===t&&this.l2ExpiresAt.delete(e)}}};function u(e,t){e.push(t);let n=e.length-1;for(;n>0;){let t=n-1>>1;if(e[t].expiresAt<=e[n].expiresAt)break;[e[t],e[n]]=[e[n],e[t]],n=t}}function d(e){let t=e[0],n=e.pop();if(t===void 0||n===void 0||e.length===0)return t;e[0]=n;let r=0;for(;;){let n=2*r+1,i=n+1,a=r;if(n<e.length&&e[n].expiresAt<e[a].expiresAt&&(a=n),i<e.length&&e[i].expiresAt<e[a].expiresAt&&(a=i),a===r)return t;[e[a],e[r]]=[e[r],e[a]],r=a}}function f(e){return e}function p(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`tool_calls`&&Array.isArray(t.toolCalls)}function m(e){return typeof e==`object`&&!!e&&typeof e.then==`function`}function h(e){return typeof e==`object`&&!!e&&typeof e[Symbol.asyncIterator]==`function`}function g(e){if(typeof e!=`object`||!e)return!1;let t=e;return h(t.chunks)&&m(t.finalResult)}const _=new Set([`unknown_tool`,`duplicate_tool_call_id`,`tool_choice_none_violated`,`unexpected_tool_calls`]),v=e=>e.type===`parse`||e.type===`validation`||e.type===`aborted`||e.type===`quota_exceeded`||e.code&&_.has(e.code)||e.type===`invalid_params`&&e.code!==`unsupported_capability`?`stop`:`next`;var y=class extends e.s{attempts;constructor(e){let t=e[e.length-1]?.error;super(`${e.length} provider${e.length===1?``:`s`} attempted and failed: ${e.map(e=>`${e.provider}(${e.error.type})`).join(` then `)}`,`fallback_exhausted`,{status:t?.status,cause:t,retryAfterMs:t?.retryAfterMs,code:`fallback_exhausted`,attempts:e}),this.attempts=e}get retryable(){let e=this.attempts[this.attempts.length-1]?.error;return e?e.retryable:super.retryable}};function b(e){return e instanceof y}function x(){return{}}function S(e){return{debugName:e}}function C(e){return S(e)}function w(e){return S(e)}function T(e){return{ref:e}}function E(e,t){return[e,t]}function D(e){let t=new Map(e);return{get(e){return t.get(e)},set(e,n){t.set(e,n)}}}function O(e){let{onError:t,...n}=e;return t?{...n,wrap:async(e,n,r)=>{try{return await n()}catch(e){try{await t(e,r)}catch{}throw e}}}:n}function ee(e,t){let n=e.completion_tokens_details?.reasoning_tokens,r=e.prompt_tokens_details;return{promptTokens:e.prompt_tokens??0,completionTokens:e.completion_tokens??0,totalTokens:e.total_tokens??0,...n===void 0?{}:{reasoningTokens:n},...r?.cached_tokens===void 0?{}:{cacheReadTokens:r.cached_tokens},...r?.cache_write_tokens===void 0?{}:{cacheWriteTokens:r.cache_write_tokens},...r?.cache_write_tokens_by_ttl?{cacheWriteTokensByTtl:{...r.cache_write_tokens_by_ttl}}:{},requestId:t.requestId,model:t.model,provider:t.providerName,usedFallback:t.isFallback}}async function te(t,n,r){if(!t.reserveUsage)return!1;try{return await t.reserveUsage({coalesced:n,signal:r}),!0}catch(t){throw r?.aborted?new e.s(`LLM request aborted`,`aborted`):new e.s(t instanceof Error?t.message:`Usage reservation failed`,`quota_exceeded`,{cause:t})}}function ne(e,t,n,r){return async i=>{try{await e.refundUsage?.({coalesced:t,signal:n})}catch(e){r(i,e)}}}async function re(t,n,r,i,a){if(i?.aborted)throw new e.s(`LLM request aborted`,`aborted`);let o=await te(t,n,i),s=ne(t,n,i,a);if(i?.aborted)throw o&&await s(`[VernLLM] refundUsage failed after abort`),new e.s(`LLM request aborted`,`aborted`);let c;try{c=await r()}catch(e){throw o&&await s(`[VernLLM] refundUsage failed`),e}if(i?.aborted)throw o&&await s(`[VernLLM] refundUsage failed after abort`),new e.s(`LLM request aborted`,`aborted`);return c}async function ie(t,n,r,i){if(r?.aborted)throw new e.s(`LLM request aborted`,`aborted`);let a=await te(t,!1,r),o=ne(t,!1,r,i);if(r?.aborted)throw a&&await o(`[VernLLM] refundUsage failed after abort`),new e.s(`LLM request aborted`,`aborted`);let s;try{s=await n()}catch(e){throw a&&await o(`[VernLLM] refundUsage failed after stream-open failure`),e}let c=s.finalResult.then(e=>e,async e=>{throw a&&await o(`[VernLLM] refundUsage failed after stream error`),e});return c.catch(()=>{}),{chunks:s.chunks,finalResult:c}}function ae(e,t){let n=0;return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator](),i=!1,a=!1,o=()=>{a=!0,i&&(i=!1,n--)};return{async next(){!i&&!a&&(i=!0,n++);try{let e=await r.next();return e.done&&o(),e}catch(e){throw o(),e}},async return(){return a||(o(),n===0&&t()),await r.return?.(),{done:!0,value:void 0}}}}}}function oe(e,t){if(!t)return e;let n=!1,r=()=>{n=!0};return e.finalResult.then(r,r),{chunks:ae(e.chunks,()=>{n||t.abort()}),finalResult:e.finalResult}}function se(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function k(e,t,n){j(e,`[VernLLM] ${t} failed`,n)}function A(e){return e instanceof Error?e.message:`unknown`}function j(e,t,n){e.error(t,{message:A(n),stack:n instanceof Error?n.stack:void 0})}function M(e,t,n){try{n()}catch(n){k(e,t,n)}}function ce(e){return{debug:le(e,`debug`),warn:le(e,`warn`),error:le(e,`error`)}}function le(e,t){let n=e[t].bind(e);return((...e)=>{try{de(n(...e))}catch{}})}function ue(e){return typeof e?.then==`function`}function de(e){ue(e)&&Promise.resolve(e).catch(()=>{})}var fe=class{debug(e){}warn(e){}error(e,t){}};function pe(){let e=new Map;function t(t){return e.get(t)}function n(t,n){return e.set(t,n),n.catch(()=>{}).finally(()=>{e.get(t)===n&&e.delete(t)}),n}return{get:t,track:n}}function me(e){return typeof e==`string`?e:JSON.stringify(e)??``}function he(e,t){let n=[];if(t){let t=e;t.type===`tool_calls`?(t.toolCalls.forEach((e,t)=>{n.push({type:`tool_call_delta`,index:t,id:e.id,name:e.name,argsDelta:JSON.stringify(e.arguments??{}),complete:!0})}),t.content&&n.push({type:`text-delta`,delta:t.content})):n.push({type:`text-delta`,delta:me(t.content)})}else n.push({type:`text-delta`,delta:me(e)});return{async*[Symbol.asyncIterator](){for(let e of n)yield e}}}function ge(e,t){return{async*[Symbol.asyncIterator](){yield*he(await e,t)}}}function _e(){let t=new AbortController,n=0,r=!1;return{signal:t.signal,get participants(){return n},join(){n++;let i=!1;return()=>{i||(i=!0,n--,n===0&&!r&&!t.signal.aborted&&t.abort(new e.s(`LLM request aborted`,`aborted`)))}},settle(){r=!0}}}function ve(){return new e.s(`LLM request aborted`,`aborted`)}function N(e,t){return t?t.aborted?(e.catch(()=>{}),Promise.reject(ve())):new Promise((n,r)=>{let i=()=>r(ve());t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e)})}):e}function ye(e,t){return{async*[Symbol.asyncIterator](){let n=e[Symbol.asyncIterator]();try{for(;;){let e=await N(n.next(),t);if(e.done)return;yield e.value}}finally{Promise.resolve(n.return?.()).catch(()=>{})}}}}var be=class{cache;logger;inFlight=pe();sharedAborts=new WeakMap;constructor(e,t){this.cache=e,this.logger=t}async resolveCacheKey(e){return this.cache.resolveKey?await this.cache.resolveKey(e):e}async deleteCache(e){if(this.cache.delete)try{await this.cache.delete(await this.resolveCacheKey(e))}catch(e){this.logger.warn(`[VernLLM] cache delete failed: ${A(e)}`)}}async getCached(e){try{return await this.cache.get(e)}catch(e){return this.logger.warn(`[VernLLM] cache read failed: ${A(e)}`),{hit:!1}}}async resolveKeyAndReadCache(e){let t=await this.resolveCacheKey(e.cacheKey);return{resolvedParams:t===e.cacheKey?e:{...e,cacheKey:t},cached:await this.getCached(t)}}inFlightFor(e){return this.inFlight.get(e)}joinable(e){let t=this.inFlight.get(e);if(!t)return;let n=this.sharedAborts.get(t);if(n&&!n.signal.aborted)return{promise:t,shared:n}}joinInFlight(e,t,n){let r=n.join(),i=re(e,!0,()=>N(t,e.signal),e.signal,(e,t)=>j(this.logger,e,t));return i.then(r,r),i}async runCached(e){let{resolvedParams:t,cached:n}=await this.resolveKeyAndReadCache(e);if(n.hit)return n.value;let r=this.joinable(t.cacheKey);return r?this.joinInFlight(t,r.promise,r.shared):this.registerTrigger(t)}createShared(e,t){let n=_e(),{promise:r,resolve:i,reject:a}=se();r.then(n.settle,n.settle),this.sharedAborts.set(r,n),this.inFlight.track(e,r);let o=!1,s=()=>{o=!0;let e=t(n.signal);return e.then(i,a),e};return{shared:n,promise:r,start:s,onTriggerFailed:e=>{if(!o){if(e.type===`aborted`&&n.participants>0){s();return}a(e)}}}}registerTrigger(e){let{shared:t,promise:n,start:r,onTriggerFailed:i}=this.createShared(e.cacheKey,t=>this.runAndCache(e,t)),a=t.join(),o=re(e,!1,()=>N(r(),e.signal),e.signal,(e,t)=>j(this.logger,e,t));return o.then(a,e=>{a(),i(e)}),n.catch(()=>{}),o}async runAndCache(e,t){let n=await e.fn(t);return await this.writeCache(e.cacheKey,n,e.ttl),n}async writeCache(e,t,n){if(typeof n!=`number`||Number.isNaN(n)){this.logger.warn(`[VernLLM] cachedCall ttl must be a number of seconds, got ${String(n)}. Nothing is cached.`);return}try{await this.cache.set(e,t,n)}catch(e){this.logger.warn(`[VernLLM] cache write failed: ${A(e)}`)}}async runCachedStream(e,t){let{resolvedParams:n,cached:r}=await this.resolveKeyAndReadCache(e);if(r.hit){let e=r.value;return{chunks:he(e,t),finalResult:Promise.resolve(e)}}let i=this.joinable(n.cacheKey);if(i){let e=this.joinInFlight(n,i.promise,i.shared);return e.catch(()=>{}),{chunks:ge(e,t),finalResult:e}}return this.registerStreamTrigger(n)}registerStreamTrigger(e){let t,n=n=>(t??=e.openStream(n).then(t=>({chunks:t.chunks,finalResult:t.finalResult.then(async t=>(await this.writeCache(e.cacheKey,t,e.ttl),t))})),t),{shared:r,promise:i,start:a,onTriggerFailed:o}=this.createShared(e.cacheKey,async e=>(await n(e)).finalResult),s=r.join();i.catch(()=>{});let c=new AbortController,l=e.signal?AbortSignal.any([e.signal,c.signal]):c.signal,u=ie(e,async()=>{a().catch(()=>{});let t=await N(n(r.signal),e.signal),i=N(t.finalResult,l);return i.catch(()=>{}),{chunks:ae(ye(t.chunks,e.signal),()=>c.abort()),finalResult:i}},e.signal,(e,t)=>j(this.logger,e,t)),d=e=>{s(),o(e)};return u.then(e=>{e.finalResult.then(s,d)},d),u}};function xe(e,t,n){let r=e.get(t);if(r)return{holder:r,release:()=>{}};let i={};return e.set(t,i),{holder:i,release:()=>{let r=()=>e.delete(t),i=n(t);i?i.then(r,r):r()}}}var Se=class{buckets;bucketStartMs=Date.now();bucketWidthMs;constructor(e){if(!Number.isFinite(e)||e<=0)throw RangeError(`RollingRatio: windowMs must be a finite number > 0, got ${e}`);this.bucketWidthMs=e/10,this.buckets=Array.from({length:10},()=>({total:0,failures:0}))}rotate(){let e=Date.now()-this.bucketStartMs,t=Math.floor(e/this.bucketWidthMs),n=Math.min(10,t);for(let e=0;e<n;e++)this.buckets.shift(),this.buckets.push({total:0,failures:0});t>0&&(this.bucketStartMs+=t*this.bucketWidthMs)}record(e){this.rotate();let t=this.buckets[9];t.total+=1,e&&(t.failures+=1)}getRatio(){this.rotate();let e=this.buckets.reduce((e,t)=>e+t.total,0),t=this.buckets.reduce((e,t)=>e+t.failures,0);return e===0?0:t/e}getCount(){return this.rotate(),this.buckets.reduce((e,t)=>e+t.total,0)}reset(){this.buckets=Array.from({length:10},()=>({total:0,failures:0})),this.bucketStartMs=Date.now()}};function Ce(e,t=`minCalls`){if(!Number.isInteger(e)||e<0)throw RangeError(`${t} must be a non-negative integer, got ${e}`)}function we(e,t){if(!Number.isFinite(e)||e<0||e>1)throw RangeError(`${t} must be a finite number between 0 and 1, got ${e}`)}var Te=class{options;ratio;constructor(e){this.options=e,this.ratio=new Se(e.windowMs),Ce(e.minCalls),we(e.retryRatio,`retryRatio`)}assertAvailable(){if(this.ratio.getCount()>=this.options.minCalls&&this.ratio.getRatio()>=this.options.retryRatio)throw new e.s(`Retry budget exhausted`,`rate_limited`,{code:`retry_budget_exhausted`})}recordAttempt(e){this.ratio.record(e)}getSnapshot(){return{attempts:this.ratio.getCount(),retryRatio:this.ratio.getRatio()}}};const Ee=Object.freeze({name:`custom`});function De(e){let t=e.adapter;return!t||typeof t.name!=`string`||t.name.trim()===``?Ee:Object.freeze(typeof t.provider==`string`&&t.provider.trim()!==``?{name:t.name,provider:t.provider}:{name:t.name})}function Oe(e,t,n={}){return r=>{e&&M(t,`onEvent`,()=>e(r)),r.kind===`usage`&&n.onUsage&&M(t,`onUsage`,()=>n.onUsage(r.usage)),r.kind===`usage_failure`&&n.onUsageFailure&&M(t,`onUsageFailure`,()=>n.onUsageFailure(r.usage,r.error))}}function P(e,t,n){let r=e[t];if(!r)throw RangeError(`${n}: no target at index ${t} (chain has ${e.length} target${e.length===1?``:`s`})`);return r}function F(e,t,n,r){t!==void 0&&!e&&r.warn(`[VernLLM] ${n}: \`model: '${t}'\` has no effect here. This target's circuitBreaker doesn't have isolateByModel on, so it only tracks one shared circuit regardless of \`model\`. Omit \`model\`, or set \`circuitBreaker.isolateByModel: true\` on this target if per-model tracking is what you want.`)}function ke(e,t,n){Promise.resolve(n).catch(n=>{try{e.error(t,{message:n instanceof Error?n.message:String(n)})}catch{}})}async function Ae(t,n,r,i){let a=r?.signal;if(a?.aborted)throw new e.s(`Circuit breaker check aborted`,`aborted`);let o=t.prepareTimeoutMs??1e3,s;try{s=Promise.resolve(t.prepare(n,r))}catch(e){je(i,e);return}let c,l,u=await Promise.race([s.then(()=>`ready`,e=>({failed:e})),new Promise(e=>{c=setTimeout(()=>e(`timeout`),o)}),new Promise(e=>{a&&(l=()=>e(`aborted`),a.addEventListener(`abort`,l,{once:!0}),a.aborted&&l())})]).finally(()=>{clearTimeout(c),a&&l&&a.removeEventListener(`abort`,l)});if(u===`aborted`)throw new e.s(`Circuit breaker check aborted`,`aborted`);u===`timeout`?i.warn(`[VernLLM] circuitBreaker.prepare took longer than ${o}ms, continuing with the adapter's local state`):u!==`ready`&&je(i,u.failed)}function je(e,t){e.warn(`[VernLLM] circuitBreaker.prepare failed, continuing with the adapter's local state: ${t instanceof Error?t.message:String(t)}`)}const I=new WeakMap;function Me(e,t){I.has(e)||I.set(e,t)}function L(e){return I.get(e)}const R=()=>{};function Ne(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function z(e,t=new Set){if(e===null||typeof e==`string`||typeof e==`boolean`)return!0;if(typeof e==`number`)return Number.isFinite(e);let n=Array.isArray(e)?Array.from(e):Ne(e)?Object.values(e):void 0;if(n===void 0||t.has(e))return!1;t.add(e);let r=n.every(e=>z(e,t));return t.delete(e),r}function Pe(e){return typeof e==`object`&&e&&(Object.values(e).forEach(Pe),Object.freeze(e)),e}function Fe(t){if(t===void 0)return;let n=!1;try{n=Ne(t)&&z(t)}catch{n=!1}if(!n)throw new e.s("`context` must be a plain JSON object",`invalid_params`,{code:`invalid_context`});return Pe(structuredClone(t))}function Ie(e){if(!Array.isArray(e)||e.length!==2)return!1;let t=e[0];return typeof t==`object`&&!!t&&typeof t.debugName==`string`}function Le(t){if(t!==void 0){if(!Array.isArray(t)||!t.every(Ie))throw new e.s("`state` must be an array of [key, value] pairs, with keys made by createStateKey",`invalid_params`);return t}}function B(e,t){return e.name??`[${t}]`}function Re(e){return Object.freeze(e.map((e,t)=>B(e,t)))}const ze=new WeakMap;function V(e){let t=ze.get(e);if(!t){let n=Re(e);t={registeredMiddlewareNames:n,transformMiddlewareNames:Object.freeze(n.filter((t,n)=>e[n].transform!==void 0))},ze.set(e,t)}return t}const Be=1e4,Ve=[{name:`Retry-After-Ms`,kind:`ms`},{name:`X-Retry-After-Ms`,kind:`ms`},{name:`Retry-After`,kind:`seconds`},{name:`Retry-After`,kind:`date`}];function He(e,t){let n=e;if(typeof n.get==`function`)return n.get(t)??void 0;let r=Object.entries(e).find(([e])=>e.toLowerCase()===t.toLowerCase())?.[1];return typeof r==`string`?r:void 0}function H(e,t){return e<0?void 0:Math.min(e,t)}function Ue(e,t=Be){if(!e||typeof e!=`object`)return;let n=e,r=n.headers??n.response?.headers;if(r&&typeof r==`object`)for(let{name:e,kind:n}of Ve){let i=He(r,e)?.trim();if(i){if(n===`ms`&&/^\d+$/.test(i))return H(Number(i),t);if(n===`seconds`&&/^\d+(\.\d+)?$/.test(i))return H(Number(i)*1e3,t);if(n===`date`){let e=Date.parse(i);if(!Number.isNaN(e))return H(e-Date.now(),t)}}}}function We(e,t){if(typeof e!=`number`||Number.isNaN(e)||e<0)throw RangeError(`${t}: maxRetryAfterMs must be 0 or more (Infinity for no cap), got ${String(e)}`);return e}const U=Symbol(`deadlineExceeded`),Ge=2147483647;function Ke(e,t){if(e===void 0||Number.isNaN(e)||e>2147483647)return{signal:t,timer:void 0};let n=new AbortController;if(e<=0)return n.abort(U),{signal:t?AbortSignal.any([t,n.signal]):n.signal,timer:void 0};let r=setTimeout(()=>n.abort(U),e);return{signal:t?AbortSignal.any([t,n.signal]):n.signal,timer:r}}function qe(t,n){return t instanceof e.s&&t.type===`aborted`&&t.code===void 0&&n?.reason===U&&(t.code=`deadline_exceeded`),t}function Je(e){return!e||e<=0||e===1/0?void 0:e}function W(e){return Math.min(e,Ge)}async function Ye(t,n,r){let i=new AbortController,a=Je(n),o=r?AbortSignal.any([r,i.signal]):i.signal,s=()=>new e.s(`Request timed out`,`timeout`,{code:`request_timeout`}),c,l=new Promise((e,t)=>{a!==void 0&&(c=setTimeout(()=>{i.abort(),t(s())},W(a)))});try{return await Promise.race([t(o),l])}catch(t){throw i.signal.aborted&&!r?.aborted?t instanceof e.s&&t.type===`timeout`?t:s():t}finally{clearTimeout(c)}}function Xe(t,n,r,i){let a=Je(n);if(a===void 0)return t();let o=!1;return new Promise((n,s)=>{let c=setTimeout(()=>{o=!0,r?.(),s(new e.s(`No stream chunk received for ${a}ms (idle timeout)`,`timeout`,{code:`idle_timeout`}))},W(a));t().then(e=>{if(clearTimeout(c),o){i?.debug(`[VernLLM] chunk resolved after idle timeout already fired; discarding`);return}o=!0,n(e)},e=>{if(clearTimeout(c),o){i?.debug(`[VernLLM] chunk rejection arrived after idle timeout already fired; discarding`);return}o=!0,s(e)})})}function Ze(e){return Math.random()*e}function Qe(e,t,n=Be,r=!1,i=!1){return Ze(Math.min(e*(r?2:i?1.5:1)*2**t,n))}async function $e(t,n){if(n?.aborted)throw new e.s(`Operation aborted`,`aborted`);await new Promise((r,i)=>{let a=()=>{clearTimeout(o),i(new e.s(`Operation aborted`,`aborted`))},o=setTimeout(()=>{n?.removeEventListener(`abort`,a),r()},W(t));n?.addEventListener(`abort`,a,{once:!0})})}function et(t,n,r,i){if(i?.aborted||t instanceof e.s&&!t.retryable)return!1;let a=r(t);return!(a!==void 0&&n.includes(a))}async function tt(e){let{requestId:t,model:n,attempt:r,error:i,state:a,signal:o,providerName:s,maxRetries:c,baseDelayMs:l,maxRetryAfterMs:u,middleware:d,middlewareTimeoutMs:f,logger:p,reportEvent:m,buildEventContext:h,extractStatus:g,normalizeError:_,emitEvent:v}=e,y=Ue(i,u),b=g(i),x=y??Qe(l,r,void 0,b===429,b!==void 0&&b>=500&&b<=599),S=y!==void 0;p.warn(`[VernLLM:${t}] recovery attempt ${r}/${c}, waiting ${Math.ceil(x)}ms`+(S?` (honoring Retry-After)`:``)),v({kind:`retry`,requestId:t,provider:s,model:n,attempt:r,maxRetries:c,delayMs:x,retryAfterHonored:S,error:_(i,o)},h(t,n,r,o,a),m,d,f,p),await $e(x,o)}function nt(e){return typeof e!=`number`||Number.isNaN(e)||e<0?0:Math.floor(e)}async function rt(e){let{fn:t,signal:n,onAttempt:r,attempts:i,shouldRetryAttempt:a,recoverDelayForAttempt:o,normalizeError:s}=e,c=nt(e.maxRetries),l,u;for(let e=0;e<=c;e++){u=void 0;try{return e>0&&await o(e,l),r?.(),await t(e,e=>{u=e})}catch(t){if(l=t,!(e<c&&a(t,n)))break;i?.push({index:e,error:s(t,n).toSnapshot(),request:u})}}throw l}function G(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.status==`number`)return t.status;if(typeof t.statusCode==`number`)return t.statusCode;if(typeof t.$metadata?.httpStatusCode==`number`)return t.$metadata.httpStatusCode}const it=new Set([`ECONNREFUSED`,`ENOTFOUND`,`ECONNRESET`,`ETIMEDOUT`,`EAI_AGAIN`,`EPIPE`,`ECONNABORTED`,`EHOSTUNREACH`,`ENETUNREACH`]),at=new Set([`fetch failed`,`failed to fetch`,`load failed`,`networkerror when attempting to fetch resource.`]);function ot(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.code==`string`&&it.has(t.code)||typeof t.message==`string`&&at.has(t.message.toLowerCase()))return!0;if(t.cause&&typeof t.cause==`object`){let e=t.cause;if(typeof e.code==`string`&&it.has(e.code))return!0}return!1}function st(e){try{return JSON.stringify(e,null,2)??String(e)}catch{try{return String(e)}catch{return`[unprintable error]`}}}function ct(e){if(e&&typeof e==`object`)try{let t=e;if(t.error!==void 0)return st(t.error);if(typeof t.message==`string`)return t.message}catch{}return st(e)}function lt(e){switch(e){case 429:return`provider_rate_limited`;case 401:return`authentication`;case 403:return`authorization`;case 404:return`not_found`;case 413:return`payload_too_large`;default:return e>=500?`server_error`:void 0}}const ut=/\(no body\)/i;function dt(e){return Object.keys(e).length===0}function ft(e){if(e&&typeof e==`object`){let{error:t,message:n}=e;if(t!=null){let e=typeof t==`string`&&t.trim().length===0,n=typeof t==`object`&&dt(t);if(!e&&!n)return!1}if(typeof n==`string`){let e=n.trim();return e.length===0||ut.test(e)}return!0}return!0}function K(t,n,r,i){if(n?.aborted)return new e.s(`LLM request aborted`,`aborted`,{attempts:r});if(t instanceof e.s)return t.code===void 0&&t.status!==void 0&&(t.code=lt(t.status)),t.attempts===void 0&&r!==void 0&&(t.attempts=r),i!==void 0&&t.retryAfterMs!==void 0&&(t.retryAfterMs=Math.min(t.retryAfterMs,i)),t;let a=G(t),o=Ue(t,i);if(a!==void 0){let n=ct(t),i=lt(a),s=i===void 0,c=ft(t)?s?`LLM request failed with status ${a} and no error detail from the provider. This usually means a field or value in the request isn't supported by the specific model (for example, a reasoning/thinking parameter the model doesn't accept), rather than a transport or auth problem.`:`LLM request failed with status ${a} and no error detail from the provider.`:`LLM request failed: ${n}`;return new e.s(c,`api`,{status:a,cause:t,retryAfterMs:o,code:i,attempts:r})}return ot(t)?new e.s(`LLM request failed`,`network`,{cause:t,retryAfterMs:o,code:`connection_failed`,attempts:r}):new e.s(`LLM request failed`,`unknown`,{cause:t,retryAfterMs:o,attempts:r})}function pt(e){let t=!1,n,r;function i(){return r||(t=!0,r=e().then(e=>(n=e,e)),r.catch(()=>{}),r)}return{call:i,wasCalled:()=>t,resolvedValue:()=>n}}const mt=[`temperature`,`max_tokens`,`reasoning_effort`,`budget_tokens`,`tool_choice`,`messages`,`addMessages`,`tools`,`addTools`];function ht(e,t){let n=t,r=mt.filter(e=>t[e]!==void 0);if(n.model!==void 0&&r.push(`model`),n.response_format!==void 0&&r.push(`response_format`),r.length===0)return{request:e,patchedFields:[]};let i={...e};return n.model!==void 0&&(i.model=n.model),n.response_format!==void 0&&(i.response_format=n.response_format),t.temperature!==void 0&&(i.temperature=t.temperature),t.max_tokens!==void 0&&(i.max_tokens=t.max_tokens),t.reasoning_effort!==void 0&&(i.reasoning_effort=t.reasoning_effort),t.budget_tokens!==void 0&&(i.budget_tokens=t.budget_tokens),t.tool_choice!==void 0&&(i.tool_choice=t.tool_choice),t.messages!==void 0&&(i.messages=t.messages),t.addMessages!==void 0&&t.addMessages.length>0&&(i.messages=[...i.messages,...t.addMessages]),t.tools!==void 0&&(i.tools=t.tools),t.addTools!==void 0&&t.addTools.length>0&&(i.tools=[...i.tools??[],...t.addTools]),{request:i,patchedFields:r}}function gt(t,n){if(!t.tools)return;let r=new Set,i=new Set;for(let e of t.tools)r.has(e.function.name)&&i.add(e.function.name),r.add(e.function.name);if(i.size>0)throw new e.s(`middleware "${n}" added tool(s) with duplicate name(s): [${[...i].join(`, `)}]. Tool names must be unique.`,`invalid_params`,{code:`duplicate_tool_names`,issues:{names:[...i]}})}function _t(t,n,r){if(n.model!==t.model)throw new e.s(`middleware "${r}" changed \`model\` via transform, which isn't supported. Configure the target's model instead.`,`invalid_params`);if(JSON.stringify(n.response_format)!==JSON.stringify(t.response_format))throw new e.s(`middleware "${r}" changed \`response_format\` via transform, which isn't supported.`,`invalid_params`)}const vt=new WeakMap;function q(e,t,n){let r=vt.get(e.state);r||(r=new Map,vt.set(e.state,r));let i=r.get(t);return i||(i={},r.set(t,i)),{...e,own:i,emit:(t,r)=>L(e.state)?.emitCustom(t,r,n,e)}}function yt(t,n,r){return n<=0?t():new Promise((i,a)=>{let o=setTimeout(()=>{a(new e.s(`middleware "${r}" timed out after ${n}ms`,`timeout`,{code:`middleware_timeout`}))},n);t().then(e=>{clearTimeout(o),i(e)},e=>{clearTimeout(o),a(e)})})}async function bt(e,t,n,r,i){let{enabled:a}=e;if(a===void 0)return!0;if(typeof a==`boolean`)return a;let o=e.timeoutMs??r;try{return await yt(async()=>a(q(t,e,n)),o,n)}catch(e){return j(i,`[VernLLM] middleware "${n}".enabled threw or timed out, treating as disabled`,e),!1}}async function xt(e){let{request:t,requestId:n,attempt:r,signal:i,state:a,middleware:o,middlewareTimeoutMs:s,logger:c,reportEvent:l,buildContext:u,enabledEntries:d}=e;if(o.length===0)return t;let f=t,p=t;for(let[e,t]of o.entries()){let f=B(t,e),m=u(r,i,a);if(!await bt(t,m,f,s,c)){t.enabled!==void 0&&J({kind:`middleware`,requestId:n,middleware:f,hook:`enabled_skip`},m,l,o,s,c);continue}if(d?.add(t),!t.transform)continue;let h=await St(t,structuredClone(p),m,f,s),{request:g,patchedFields:_}=ht(p,h);_.length>0&&((h.tools!==void 0||h.addTools?.length)&>(g,f),J({kind:`middleware`,requestId:n,middleware:f,hook:`transform`,patchedFields:_},m,l,o,s,c)),p=g}return _t(f,p,`chain`),p}async function St(e,t,n,r,i){if(!e.transform)return{};let a=e.timeoutMs??i;try{return await yt(async()=>e.transform(t,q(n,e,r)),a,r)}catch(e){throw wt(e,r,n.signal)}}async function Ct(t){let{request:n,hooks:r,ctx:i,send:a,logger:o}=t;if(r.length===0)return a();let s=pt(a),c=async t=>{if(t===r.length)return s.call();let{entry:a,label:l}=r[t],u=pt(()=>c(t+1)),d;try{await a.dispatch(structuredClone(n),u.call,q(i,a,l))}catch(e){d={error:e}}if(!u.wasCalled())throw d?wt(d.error,l,i.signal):new e.s(`middleware "${l}".dispatch returned without calling next(), so no request was sent`,`invalid_params`,{code:`middleware_threw`});try{await u.call()}catch(e){throw d&&d.error!==e&&k(o,`middleware "${l}".dispatch`,d.error),e}d&&k(o,`middleware "${l}".dispatch`,d.error)};return c(0)}function wt(t,n,r){let i=K(t,r);return i.type===`unknown`?new e.s(`middleware "${n}" threw: ${i.message}`,`invalid_params`,{code:`middleware_threw`,cause:t}):i}function J(e,t,n,r,i,a){let o=Tt(e,t);n(o),r.length!==0&&Dt(r,o,t,i,a)}function Tt(e,t){let{context:n}=t;return n===void 0?e:e.kind===`usage`||e.kind===`usage_failure`?{...e,context:n,usage:{...e.usage,context:n}}:{...e,context:n}}function Et(e,t,n,r,i){try{Promise.resolve(e.onEvent(n,q(r,e,t))).catch(e=>{k(i,`middleware "${t}".onEvent`,e)})}catch(e){k(i,`middleware "${t}".onEvent`,e)}}function Dt(e,t,n,r,i){for(let a=0;a<e.length;a++){let o=e[a];if(!o.onEvent)continue;let s=B(o,a),{enabled:c}=o;if(c===void 0||c===!0)Et(o,s,t,n,i);else if(c===!1)continue;else bt(o,n,s,r,i).then(e=>{e&&Et(o,s,t,n,i)})}}function Ot(e,t=e){let n=new Map(e.map((e,t)=>[e,t]));return t.flatMap(e=>e.dispatch?[{entry:e,label:B(e,n.get(e))}]:[])}const kt=new WeakSet;function At(e){return kt.has(e)}async function jt(e,t,n,r){if(!e)return{};let i;try{i=await e.acquire(e.estimate(t),n)}catch(e){let t=K(e,n);throw kt.add(t),t}return i.waitedMs>0&&r(i.waitedMs,i.reason??`rpm`),{release:i.release}}async function Mt(t){let{params:n,requestId:r,attempt:i,onRequest:a,middlewareState:o,gateway:s,requestBuilder:c,providerName:l,limiter:u,middleware:d,dispatchHooks:f,middlewareTimeoutMs:p,logger:m,reportEvent:h}=t,g=o??D(),_=c.build(n),{useJson:v,model:y}=_,b=new Set,x=await xt({request:_.request,requestId:r,attempt:i,signal:n.signal,state:g,middleware:d,middlewareTimeoutMs:p,logger:m,reportEvent:h,buildContext:(e,t,n)=>s.buildAttemptContext(e,t,n),enabledEntries:b});a?.(e.u(l,y,x,void 0,Date.now()));let{release:S}=await jt(u,x,n.signal,(e,t)=>{J({kind:`rate_limited`,requestId:r,provider:l,model:y,waitedMs:e,reason:t},s.buildAttemptContext(i,n.signal,g),h,d,p,m)}),C=f.filter(e=>b.has(e.entry));return{request:x,model:y,useJson:v,state:g,release:S,dispatch:e=>Ct({request:x,hooks:C,ctx:s.buildAttemptContext(i,n.signal,g),send:e,logger:m})}}function Nt(e,t){return Mt({...t,requestBuilder:e.requestBuilder,providerName:e.providerName,limiter:e.limiter,middleware:e.middleware,dispatchHooks:e.dispatchHooks,middlewareTimeoutMs:e.middlewareTimeoutMs,logger:e.logger,reportEvent:e.reportEvent})}function Pt(e,t){return e.redact?e.redact(t):t}function Ft(e,t,n){return{gateway:t,usageReporter:e.usageReporter,logger:e.logger,redactText:t=>Pt(e,t),parseJson:e.parseJson,detectSoftFailure:e.detectSoftFailure,providerName:e.providerName,isFallback:e.isFallback,model:n}}function It(e){return e.countsTowardBreaker&&!At(e)}function Lt(e){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}function Rt(e){return e.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.arguments??{})}}))}function zt(t){return t.map(t=>{let n;try{n=t.function.arguments.trim()?JSON.parse(t.function.arguments):{}}catch{throw new e.s(`Invalid JSON arguments for tool call "${t.function.name}"`,`parse`,{code:`tool_arguments_parse_failed`})}return{id:t.id,name:t.function.name,arguments:n}})}function Bt(t,n,r){let i;try{i=r(t)}catch{throw new e.s(`Invalid JSON response`,`parse`)}if(i==null)throw new e.s(`Invalid JSON response`,`parse`);if(!n)return i;let a=n.safeParse(i);if(!a.success)throw new e.s(`Schema validation failed`,`validation`,{issues:a.error});return a.data}function Vt(t,n){let r=new Map(n.map(e=>[e.name,e])),i=new Set,a=[];for(let e of t)i.has(e.id)&&a.push({name:e.name,toolCallId:e.id,code:`duplicate_tool_call_id`}),i.add(e.id),r.has(e.name)||a.push({name:e.name,toolCallId:e.id,code:`unknown_tool`});if(a.length>0){let t=a.find(e=>e.code===`unknown_tool`),n=t?`Model requested tool "${t.name}", which was not in the tools offered ([${[...r.keys()].join(`, `)}]).`:`Duplicate tool call id "${a[0].toolCallId}" in the model's response.`,i=a.length>1?`${n} (${a.length} tool call issues total, see error.issues.)`:n;throw new e.s(i,`validation`,{code:t?`unknown_tool`:`duplicate_tool_call_id`,issues:a})}return t.map(t=>{let n=r.get(t.name);if(!n?.argumentsSchema)return t;let i=n.argumentsSchema.safeParse(t.arguments);if(!i.success)throw new e.s(`Arguments for tool call "${t.name}" failed validation`,`validation`,{issues:i.error});return{...t,arguments:i.data}})}function Ht(t){let{rawContent:n,wireToolCalls:r,params:i,useJson:a,parseJson:o,requestId:s,logger:c,redactText:l}=t,u=n?.trim();if(!u&&!r?.length)throw new e.s(`Empty LLM response`,`api`,{code:`empty_response`});let d=l(u??`[${r.length} tool call(s)]`),f=d.length>800;if(c.debug(`[VernLLM:${s}] output:\n`+d.slice(0,800)+(f?`... (truncated, ${d.length} chars total)`:``)),r?.length){if(!i.tools)throw new e.s("Provider returned tool_calls but no `tools` were sent with this call.",`validation`,{code:`unexpected_tool_calls`});if(i.toolChoice===`none`)throw new e.s(`Provider returned tool_calls despite toolChoice: 'none'.`,`validation`,{code:`tool_choice_none_violated`});return{type:`tool_calls`,toolCalls:Vt(zt(r),i.tools),...u?{content:u}:{}}}let p=u??``;if(!a)return i.tools?{type:`content`,content:p}:p;let m=Bt(p,i.schema,o);return i.tools?{type:`content`,content:m}:m}function Ut(t,n,r,i,a,o,s,c,l,u=!1,d){let{gateway:f,usageReporter:p,logger:m,redactText:h,parseJson:g,detectSoftFailure:_}=l;try{let u=Wt(Ht({rawContent:t,wireToolCalls:n,params:r,useJson:i,parseJson:g,requestId:o,logger:m,redactText:h}),d),v=Kt(_,u,{requestId:o,model:l.model,providerName:l.providerName,isFallback:l.isFallback,attempt:s+1,usage:a},m);if(v!==void 0)throw new e.s(`Soft failure detected`,`api`,{code:v});return f.recordSuccess(s,r.signal,c),p.reportSuccess(a,f.buildAttemptContext(s,r.signal,c)),u}catch(e){let t=Gt(K(e,r.signal),u);throw a&&t.type!==`aborted`&&p.reportFailure(a,t,s,f.buildAttemptContext(s,r.signal,c)),t}}function Wt(e,t){return!t?.length||!p(e)?e:{...e,thinking:t}}function Gt(t,n){return!n||t.type!==`parse`?t:new e.s(`Response was cut off at max_tokens before it could be parsed: ${t.message}`,`parse`,{code:`response_truncated`,cause:t})}function Kt(e,t,n,r){if(e)try{return e(t,n)}catch(e){let t=e instanceof Error?e.message:String(e),n=e instanceof Error&&e.stack?`\n${e.stack}`:``;r.warn(`[VernLLM] detectSoftFailure threw and was ignored, treated as no soft failure: ${t}${n}`);return}}function qt(e,t){e&&G(t)===429&&e.signalRateLimit()}async function Jt(t,n,r,i){let a;try{await n(async()=>{try{await i()}catch(n){throw t.redact&&e.n(n,t.redact),qt(t.limiter,n),a={error:n},K(n,r,void 0,t.maxRetryAfterMs)}})}catch(e){throw a?a.error:e}}async function Yt(t,n){let{params:r,requestId:i,attempt:a,gateway:o}=n,{request:s,model:c,useJson:l,state:u,release:d,dispatch:f}=await Nt(t,n),p=d;try{let n;await Jt(t,f,r.signal,async()=>{n=await Ye(e=>t.client.chat.completions.create(s,{signal:e}),t.timeoutMs,r.signal)}),t.limiter?.reactToRateLimitHint(e.o(n));let d=t.usageReporter.extract(n,i,c),m=t.usageReporter.actualTokensFor(d),h=n.choices?.[0],g=h?.message?.content,_=h?.message?.tool_calls,v=h?.finish_reason===`length`,y=h?.message?.thinking,b;try{b=Ut(g,_,r,l,d,i,a,u,Ft(t,o,c),v,y)}catch(e){throw p?.(m),p=void 0,e}return p?.(m,!0),p=void 0,b}finally{p?.()}}function Xt(e){let{capacity:t,logger:n,label:r,stallError:i}=e,a=i?Je(e.stallTimeoutMs):void 0,o=[],s=[],c=!1,l=!1,u,d=!1,f=0,p=[],m,h;function g(){h=void 0,m={error:i()},n.warn(`[VernLLM] ${r} reader held a full buffer for ${a}ms; detaching it so the stream can finish.`),o.length=0,_()}function _(){clearTimeout(h),h=void 0;let e=p;p=[];for(let t of e)t()}function v(e){if(m)return;let i=s.shift();if(i){i.resolve({done:!1,value:e});return}if(o.push(e),f>0)return o.length<t?void 0:(a!==void 0&&h===void 0&&(h=setTimeout(g,W(a))),new Promise(e=>{p.push(e)}));o.length>t*2&&(d||(d=!0,n.warn(`[VernLLM] ${r} buffer exceeded cap (${t}), evicting ${o.length-t} oldest item(s); buffered=${o.length}. The iterable was never read (or fell far behind) for this channel.`)),o.splice(0,o.length-t))}function y(){c=!0,_();for(let e of s.splice(0))e.resolve({done:!0,value:void 0})}function b(e){c=!0,l=!0,u=e,_();for(let t of s.splice(0))t.reject(e)}return{push:v,finish:y,fail:b,iterable:{[Symbol.asyncIterator](){let e={},n=!1;return{next(){if(n||(n=!0,f++),m)return Promise.reject(m.error);if(o.length){let e=o.shift();return o.length<t&&_(),Promise.resolve({done:!1,value:e})}return c?l?Promise.reject(u):Promise.resolve({done:!0,value:void 0}):new Promise((t,n)=>{s.push({owner:e,resolve:t,reject:n})})},return(){n&&(n=!1,f--);for(let t=s.length-1;t>=0;t--)s[t].owner===e&&s.splice(t,1)[0].resolve({done:!0,value:void 0});return f===0&&_(),Promise.resolve({done:!0,value:void 0})}}}}}}const Zt=1e4,Qt=1e6;function $t(){let t=new Map;function n(n){let r=t.get(n.index);if(!r){if(t.size>=Zt)throw new e.s(`Stream contained more than ${Zt} distinct tool calls`,`validation`);r={args:``}}let i=n.argumentsDelta??``;if(r.args.length+i.length>Qt)throw new e.s(`Tool call arguments exceeded the ${Qt}-character stream limit`,`validation`);return r.id??=n.id,r.name??=n.name,r.args+=i,t.set(n.index,r),{type:`tool_call_delta`,index:n.index,id:n.id,name:n.name,argsDelta:n.argumentsDelta,complete:n.complete}}function r(){if(t.size)return[...t.entries()].sort(([e],[t])=>e-t).map(([,e])=>({id:e.id??``,type:`function`,function:{name:e.name??``,arguments:e.args}}))}return{apply:n,toWireToolCalls:r}}function en(e,t,n){let r=$t(),i=[],a=``,o;return{apply(s){switch(s.type){case`rate_limit_hint`:n?.(s.hint);return;case`text-delta`:return a+=s.delta,t({type:`text-delta`,delta:s.delta});case`tool_call_delta`:return t(r.apply(s));case`thinking_block`:i.push(s.block);return;case`usage`:return o=ee(s.usage,e),t({type:`usage`,usage:o});default:return}},get usage(){return o},result:()=>({text:a,wireToolCalls:r.toWireToolCalls(),usage:o,thinking:i.length?i:void 0})}}async function tn(e,t){try{await e.return?.()}catch{}t.abort()}function nn(e,t){let n=t.filter(e=>e!==void 0);return n.some(e=>e.aborted)?Promise.resolve():new Promise(t=>{let r=()=>{for(let e of n)e.removeEventListener(`abort`,r);t()};for(let e of n)e.addEventListener(`abort`,r,{once:!0});e.then(r)})}function rn(t,n,r){let{requestId:i,model:a,providerName:o,isFallback:s,chunkIdleTimeoutMs:c,readerStallTimeoutMs:l,streamController:u,logger:d,signal:f,maxRetryAfterMs:p,onRateLimitHint:m}=r,{promise:h,resolve:g,reject:_}=se();h.catch(()=>{});let v=Xt({capacity:1e4,logger:d,label:`stream chunk`,stallTimeoutMs:l,stallError:()=>new e.s(`The chunks reader stopped pulling for ${l}ms with a full buffer, so it was detached. finalResult still settles.`,`timeout`,{code:`reader_stall_timeout`})}),{push:y,finish:b,fail:x}=v,S=v.iterable,C=en({requestId:i,model:a,providerName:o,isFallback:s},y,m);return(async()=>{try{let r=n;for(;!r.done;){let n=C.apply(r.value);if(n&&await nn(n,[u.signal,f]),f?.aborted)throw new e.s(`LLM request aborted`,`aborted`);r=await Xe(()=>t.next(),c,()=>u.abort(),d)}}catch(e){await tn(t,u);let n=K(e,f,void 0,p);try{r.onStreamFailure(n,C.usage)}catch{}x(n),_(n);return}b();try{r.onStreamSuccess(C.usage)}catch{}try{let{text:e,wireToolCalls:t,usage:n,thinking:i}=C.result(),a=r.finalize(e,t,n,i);g(a)}catch(e){_(e)}})(),{chunks:S,finalResult:h}}async function an(t,n,r){let{params:i,requestId:a,attempt:o,gateway:s}=n,c=t.client.chat.completions;if(!c.createStream)throw new e.s(`stream: true requires a client/adapter with createStream`,`invalid_params`,{code:`unsupported_capability`,issues:{capability:`createStream`}});let l=c.createStream.bind(c),{request:u,model:d,useJson:f,state:p,release:m,dispatch:h}=await Nt(t,n),g=m,_=new AbortController,v=i.signal?AbortSignal.any([i.signal,_.signal]):_.signal;try{let n=i.chunkIdleTimeoutMs??t.chunkIdleTimeoutMs,c;await Jt(t,h,i.signal,async()=>{let{iterator:e,first:f}=await Ye(async e=>{let n=l(u,{signal:e})[Symbol.asyncIterator](),r=await n.next();for(;!r.done&&r.value.type===`rate_limit_hint`;)t.limiter?.reactToRateLimitHint(r.value.hint),r=await n.next();return{iterator:n,first:r}},t.timeoutMs,v);f.done||r?.(),c=await on(e,f,n,_,t.limiter,t.logger,(e,n)=>{let r=ee(e,{requestId:a,model:d,providerName:t.providerName,isFallback:t.isFallback}),c=K(n,i.signal,void 0,t.maxRetryAfterMs);c.type!==`aborted`&&t.usageReporter.reportFailure(r,c,o,s.buildAttemptContext(o,i.signal,p),!0),g?.(t.usageReporter.actualTokensFor(r)),g=void 0})});let{head:m,rest:y}=c;if(m.done)throw new e.s(`Empty LLM response`,`api`);let b=g,x=rn(y,m,{requestId:a,model:d,providerName:t.providerName,isFallback:t.isFallback,chunkIdleTimeoutMs:n,readerStallTimeoutMs:t.readerStallTimeoutMs,streamController:_,logger:t.logger,signal:i.signal,maxRetryAfterMs:t.maxRetryAfterMs,onRateLimitHint:e=>{t.limiter?.reactToRateLimitHint(e)},onStreamSuccess:e=>{},onStreamFailure:(e,n)=>{qt(t.limiter,e),e.type===`timeout`?s.recordFailure(o,i.signal,p,e.code):s.releaseTrial(o,i.signal,p),n&&e.type!==`aborted`&&t.usageReporter.reportFailure(n,e,o,s.buildAttemptContext(o,i.signal,p),!0),b?.(t.usageReporter.actualTokensFor(n))},finalize:(n,r,c,l)=>{let u=t.usageReporter.actualTokensFor(c);try{let e=Ut(n,r,i,f,c,a,o,p,Ft(t,s,d),!1,l);return b?.(u,!0),e}catch(t){throw b?.(u),t instanceof e.s&&It(t)?s.recordFailure(o,i.signal,p,t.code):s.releaseTrial(o,i.signal,p),t}}});return g=void 0,x}finally{g?.()}}async function on(e,t,n,r,i,a,o){let s=[],c=t;try{for(;!c.done&&!sn(c.value);){let t=c.value;t.type===`rate_limit_hint`?i?.reactToRateLimitHint(t.hint):t.type!==`ping`&&s.push(t),c=await Xe(()=>e.next(),n,()=>r.abort(),a)}}catch(t){r.abort(),Promise.resolve().then(()=>e.return?.()).catch(()=>{});let n=[...s].reverse().find(e=>e.type===`usage`);throw n?.type===`usage`&&o(n.usage,t),t}if(c.done||s.length===0)return{head:c,rest:e};let l=[...s.slice(1),c.value];return{head:{done:!1,value:s[0]},rest:{next:()=>{let t=l.shift();return t?Promise.resolve({done:!1,value:t}):e.next()},return:async()=>e.return?.()??{done:!0,value:void 0}}}}function sn(e){return e.type===`text-delta`||e.type===`tool_call_delta`}function cn(e){return typeof e==`string`?e:JSON.stringify(e)}function ln(t,n){if(t&&t.length===0)throw new e.s("`tools` was an empty array. This is almost always a bug (e.g. a filtered tool list that ended up empty). An empty `tools` array still switches on tool-call mode (response shape, jsonMode default, wire format) with nothing for the model to call. Omit `tools` entirely for a normal call, or make sure the array is non-empty.",`invalid_params`);if(t){let n=new Set,r=new Set;for(let e of t)n.has(e.name)&&r.add(e.name),n.add(e.name);if(r.size)throw new e.s(`\`tools\` has duplicate name(s): [${[...r].join(`, `)}]. Tool names must be unique.`,`invalid_params`,{code:`duplicate_tool_names`,issues:{names:[...r]}})}if(n&&!t)throw new e.s("`toolChoice` was set without `tools`. There is nothing for it to choose between. Set `tools`, or remove `toolChoice`.",`invalid_params`);if(t&&typeof n==`object`&&!t.some(e=>e.name===n.name))throw new e.s(`toolChoice names "${n.name}", which is not in \`tools\` ([${t.map(e=>e.name).join(`, `)}]).`,`invalid_params`,{code:`unknown_tool_choice`,issues:{requested:n.name,available:t.map(e=>e.name)}})}function un(t){let{jsonModeExplicit:n,hasTools:r,jsonSchema:i,hasSchema:a,supportsJsonObjectMode:o}=t,s=n??!r;if(!o&&!i&&n===!0)throw new e.s('jsonMode: true was set explicitly, but this client does not support `response_format: "json_object"` (see LLMClient.supportsJsonObjectMode). Neither Anthropic nor Bedrock has a field that mechanically guarantees JSON output for this mode. Use `jsonSchema` instead, which maps to a real constraint on both.',`invalid_params`);if(!o&&!i&&n===void 0&&a)throw new e.s('`schema` was provided, which requires JSON output to validate against, but this client does not support `response_format: "json_object"` (see LLMClient.supportsJsonObjectMode) and no `jsonSchema` was set. Neither Anthropic nor Bedrock has a field that mechanically guarantees JSON output without one. Use `jsonSchema` instead, which maps to a real constraint on both and still runs `schema` against its parsed result.',`invalid_params`);let c=(!o&&!i&&n===void 0?!1:s)||!!i;if(a&&!c)throw new e.s(`schema was provided but jsonMode: false disables JSON parsing, so nothing would validate it. Remove jsonMode: false, set jsonSchema, or remove schema.`,`invalid_params`);return c}function dn(e,t){return e?{type:`json_schema`,json_schema:{name:e.name,schema:e.schema,strict:e.strict??!0,description:e.description}}:t?{type:`json_object`}:void 0}function fn(e){return!e||e===`auto`?`auto`:e===`none`||e===`required`?e:{type:`function`,function:{name:e.name}}}function pn(e){return e.role===`tool`?(e.toolResults??[]).map(e=>({role:`tool`,tool_call_id:e.toolCallId,content:typeof e.content==`string`?e.content:JSON.stringify(e.content??null),...e.isError?{is_error:!0}:{}})):e.role===`assistant`&&e.toolCalls?.length?[{role:`assistant`,...e.content===void 0?{}:{content:cn(e.content)},tool_calls:Rt(e.toolCalls),...e.thinking?.length?{thinking:e.thinking}:{}}]:e.role===`assistant`?[{role:`assistant`,content:cn(e.content===void 0?``:e.content),...e.thinking?.length?{thinking:e.thinking}:{}}]:[{role:e.role,content:e.content??``}]}function mn(t,n){if(!Array.isArray(t))throw new e.s(`history[${n}].thinking must be an array`,`invalid_params`);for(let[r,i]of t.entries()){let t=i;if(!(typeof t==`object`&&t&&(t.type===`thinking`&&typeof t.thinking==`string`&&typeof t.signature==`string`||t.type===`redacted_thinking`&&typeof t.data==`string`)))throw new e.s(`history[${n}].thinking[${r}] must be { type: 'thinking', thinking, signature } or { type: 'redacted_thinking', data }, as returned on ToolCallResult.thinking`,`invalid_params`)}}function hn(t){let n;for(let[r,i]of t.entries()){if(i.role===`assistant`&&i.thinking!==void 0&&mn(i.thinking,r),i.role===`tool`){if(n?.role!==`assistant`||!n.toolCalls?.length)throw new e.s(`history[${r}] is a "tool" turn, but must immediately follow an "assistant" turn that requested tools`,`invalid_params`);if(!i.toolResults?.length)throw new e.s(`history[${r}] is a "tool" turn but has no toolResults`,`invalid_params`);let t=new Set(n.toolCalls.map(e=>e.id)),a=i.toolResults.map(e=>e.toolCallId),o=a.filter(e=>!t.has(e));if(o.length)throw new e.s(`history[${r}].toolResults references unknown toolCallId(s) [${o.join(`, `)}]`,`invalid_params`,{code:`unknown_tool_result_ids`,issues:{historyIndex:r,ids:o}});let s=new Set,c=new Set;for(let e of a)s.has(e)&&c.add(e),s.add(e);if(c.size)throw new e.s(`history[${r}].toolResults has duplicate toolCallId(s) [${[...c].join(`, `)}]`,`invalid_params`,{code:`duplicate_tool_result_ids`,issues:{historyIndex:r,ids:[...c]}});let l=[...t].filter(e=>!a.includes(e));if(l.length)throw new e.s(`history[${r}] is missing toolResults for toolCallId(s) [${l.join(`, `)}]`,`invalid_params`,{code:`missing_tool_results`,issues:{historyIndex:r,ids:l}})}else{if(i.role===n?.role)throw new e.s(`history must alternate user/assistant turns: consecutive "${i.role}" turns at history[${r-1}] and history[${r}]`,`invalid_params`);if(n?.role===`assistant`&&n.toolCalls?.length)throw new e.s(`history[${r}] follows an assistant tool request without tool results`,`invalid_params`)}n=i}if(n?.role===`assistant`&&n.toolCalls?.length)throw new e.s(`The last entry in history is an assistant tool request without tool results`,`invalid_params`);if(n?.role===`user`)throw new e.s(`The last entry in history is a "user" turn, which would collide with the current userContent turn.`,`invalid_params`)}var gn=class{model;defaultMaxTokens;defaultTemperature;defaultReasoningEffort;defaultBudgetTokens;supportsJsonObjectMode;constructor(e){this.model=e.model,this.defaultMaxTokens=e.defaultMaxTokens,this.defaultTemperature=e.defaultTemperature,this.defaultReasoningEffort=e.defaultReasoningEffort,this.defaultBudgetTokens=e.defaultBudgetTokens,this.supportsJsonObjectMode=e.supportsJsonObjectMode}build(e){let{systemPrompt:t,userContent:n,history:r=[],maxTokens:i=this.defaultMaxTokens,model:a=this.model,jsonSchema:o,tools:s,toolChoice:c}=e,l=e.temperature===void 0?this.defaultTemperature:e.temperature,u=e.reasoningEffort===void 0?this.defaultReasoningEffort:e.reasoningEffort,d=e.budgetTokens===void 0?this.defaultBudgetTokens:e.budgetTokens;ln(s,c);let f=un({jsonModeExplicit:e.jsonMode,hasTools:!!s,jsonSchema:o,hasSchema:!!e.schema,supportsJsonObjectMode:this.supportsJsonObjectMode}),p=dn(o,f);return hn(r),{useJson:f,model:a,request:{model:a,...l===null?{}:{temperature:l},max_tokens:i,...p?{response_format:p}:{},...u?{reasoning_effort:u}:{},...d==null?{}:{budget_tokens:d},...s?{tools:Lt(s)}:{},...s?{tool_choice:fn(c)}:{},messages:[...t?[{role:`system`,content:t}]:[],...r.flatMap(e=>pn(e)),{role:`user`,content:n}]}}}};function _n(e){let{providerName:t,isFallback:n,maxRetries:r,emitEvent:i,logger:a}=e,o=e.cacheReadsCountTowardRateLimit??!0;function s(e,r,i){if(e.usage)return ee(e.usage,{requestId:r,model:i,providerName:t,isFallback:n})}function c(e){if(!e)return;let t=e.totalTokens||e.promptTokens+e.completionTokens;if(o)return t===0?void 0:t;let n=t-(e.cacheReadTokens??0);return n>0?n:void 0}function l(e,t){e&&i({kind:`usage`,requestId:e.requestId,usage:e},t)}function u(e,t,n,o,s=!1){let c=e.totalTokens||e.promptTokens+e.completionTokens,l=s?`mid-stream failure (terminal, no further attempts)`:`attempt ${n+1}/${r+1}`;a.warn(`[VernLLM:${e.requestId}] usage failure, ${l}: type=${t.type} tokens=${c}`),i({kind:`usage_failure`,requestId:e.requestId,usage:e,error:t},o)}return{extract:s,actualTokensFor:c,reportSuccess:l,reportFailure:u}}function vn(e){let{breaker:t,logger:n,requestId:r,model:i,providerName:a,isFallback:o,supportsJsonObjectMode:s,middlewareNames:c,adapter:l}=e;function u(e,t,n){return{stage:`attempt`,requestId:r,requestedProvider:a,adapter:l,requestedModel:i,isFallbackAttempt:o,attempt:e+1,capabilities:{supportsJsonObjectMode:s},signal:t,state:n,own:{},emit:R,context:L(n)?.context,...c}}function d(e,t,n){return{requestId:r,state:n,signal:t,attempt:e+1}}function f(e,t){ke(n,`[VernLLM:${r}] circuitBreaker.${e} rejected`,t)}return{buildAttemptContext:u,buildCallContext:d,recordSuccess(e,n,r){f(`recordSuccess`,t?.recordSuccess(i,d(e,n,r)))},recordFailure(e,n,r,a){f(`recordFailure`,t?.recordFailure(i,d(e,n,r),a))},releaseTrial(e,n,r){f(`releaseTrial`,t?.releaseTrial?.(i,d(e,n,r)))}}}async function yn(e){let{fn:t,requestId:n,model:r,providerName:i,isFallback:a,supportsJsonObjectMode:o,adapter:s,breaker:c,budget:l,maxRetries:u,baseDelayMs:d,maxRetryAfterMs:f,nonRetryableStatus:p,signal:m,onAttempt:h,middleware:g,middlewareTimeoutMs:_,logger:v,reportEvent:y,logLabel:b,redactText:x,countsTowardBreaker:S}=e,C=e.state??D(),w=(e,t,n)=>K(e,t,n,f),T=[],E=vn({breaker:c,logger:v,requestId:n,model:r,providerName:i,isFallback:a,supportsJsonObjectMode:o,middlewareNames:V(g),adapter:s}),O;try{return await rt({fn:(e,n)=>(l?.recordAttempt(e>0),t(e,n,C,E)),maxRetries:u,signal:m,onAttempt:h,attempts:T,shouldRetryAttempt:(e,t)=>{if(!et(e,p,G,t))return!1;if(l)try{l.assertAvailable()}catch(e){return O=e,!1}return!0},recoverDelayForAttempt:(e,t)=>tt({requestId:n,model:r,attempt:e,error:t,state:C,signal:m,providerName:i,maxRetries:u,baseDelayMs:d,maxRetryAfterMs:f,middleware:g,middlewareTimeoutMs:_,logger:v,reportEvent:y,buildEventContext:(e,t,n,r,i)=>E.buildAttemptContext(n,r,i),extractStatus:G,normalizeError:w,emitEvent:J}),normalizeError:w})}catch(e){let t=w(O??e,m,T.length>0?T:void 0);throw S(t)?E.recordFailure(T.length,m,C,t.code):E.releaseTrial(T.length,m,C),v.debug(`[VernLLM:${n}] ${b}:\n${x(ct(e))}`),t}}function bn(e){try{return JSON.parse(e)}catch{return}}var xn=class{providerName;model;maxRetries;baseDelayMs;nonRetryableStatus;logger;breaker;budget;limiter;isFallback;supportsJsonObjectMode;env;adapter;constructor(e,t,n,r){this.providerName=e,this.model=n,this.maxRetries=nt(r.maxRetries),this.baseDelayMs=r.baseDelayMs;let i=We(r.maxRetryAfterMs,e);this.nonRetryableStatus=r.nonRetryableStatus,this.logger=r.logger,this.maxRetries!==r.maxRetries&&this.logger.warn(`[VernLLM] ${e}: maxRetries must be a non-negative whole number, got ${String(r.maxRetries)}. Using ${this.maxRetries}.`);let a=Oe(r.onEvent,this.logger,{onUsage:r.onUsage,onUsageFailure:r.onUsageFailure});this.breaker=r.breaker,this.budget=r.budget,this.limiter=r.limiter,this.isFallback=r.isFallback??!1;let o=r.middleware??[],s=Ot(o,r.dispatchOrder);this.adapter=De(t),M(this.logger,`client.setLogger`,()=>t.setLogger?.(this.logger));let c=r.middlewareTimeoutMs??5e3;this.supportsJsonObjectMode=t.supportsJsonObjectMode??!0;let l=_n({providerName:e,isFallback:this.isFallback,maxRetries:this.maxRetries,cacheReadsCountTowardRateLimit:t.cacheReadsCountTowardRateLimit,emitEvent:(e,t)=>J(e,t,a,o,c,this.logger),logger:this.logger}),u=new gn({model:n,defaultMaxTokens:r.defaultMaxTokens,defaultTemperature:r.defaultTemperature,defaultReasoningEffort:r.defaultReasoningEffort,defaultBudgetTokens:r.defaultBudgetTokens,supportsJsonObjectMode:this.supportsJsonObjectMode});this.env={client:t,providerName:e,isFallback:this.isFallback,timeoutMs:r.timeoutMs,chunkIdleTimeoutMs:r.chunkIdleTimeoutMs,readerStallTimeoutMs:r.readerStallTimeoutMs,maxRetryAfterMs:i,parseJson:r.parseJson??bn,logger:this.logger,redact:r.redact,usageReporter:l,reportEvent:a,limiter:this.limiter,requestBuilder:u,middleware:o,dispatchHooks:s,middlewareTimeoutMs:c,detectSoftFailure:r.detectSoftFailure}}previewRequest(e){let{model:t,request:n}=this.env.requestBuilder.build(e);return{model:t,request:n}}get jsonObjectModeSupported(){return this.supportsJsonObjectMode}getCircuitState(e){return this.breaker?.getState?.(e)}async readCircuitState(e){return this.breaker?.readState?this.breaker.readState(e):this.breaker?.getState?.(e)}getFailureBreakdown(e){return this.breaker?.getFailureBreakdown?.(e)}getRetryBudgetState(){return this.budget?.getSnapshot()}getRateLimitState(){return this.limiter?.getState?.()}async readRateLimitState(){return this.limiter?.readState?this.limiter.readState():this.limiter?.getState?.()}get isolateByModel(){return this.breaker?.isolateByModel??!1}openCircuit(e,t){this.breaker?.open?.(e,t)}closeCircuit(e,t){this.breaker?.close?.(e,t)}assertBreakerClosed(e,t){let n=this.breaker,r=e??this.model;if(!n?.prepare){n?.assertClosed(r,t);return}return Ae(n,r,t,this.logger).then(()=>n.assertClosed(r,t))}releaseBreakerTrial(e,t){ke(this.logger,`[VernLLM] circuitBreaker.releaseTrial rejected`,this.breaker?.releaseTrial?.(e??this.model,t))}async run(e,t,n,r){return yn(this.attemptLoopParams(e,t,n,r,`error`,(n,r,i,a)=>Yt(this.env,{params:e,requestId:t,attempt:n,onRequest:r,middlewareState:i,gateway:a})))}async runStream(e,t,n,r,i){return yn(this.attemptLoopParams(e,t,n,r,`stream-open error`,(n,r,a,o)=>an(this.env,{params:e,requestId:t,attempt:n,onRequest:r,middlewareState:a,gateway:o},i)))}attemptLoopParams(e,t,n,r,i,a){return{fn:a,requestId:t,model:e.model??this.model,providerName:this.providerName,isFallback:this.isFallback,supportsJsonObjectMode:this.supportsJsonObjectMode,adapter:this.adapter,breaker:this.breaker,budget:this.budget,maxRetries:this.maxRetries,baseDelayMs:this.baseDelayMs,maxRetryAfterMs:this.env.maxRetryAfterMs,nonRetryableStatus:this.nonRetryableStatus,signal:e.signal,onAttempt:n,state:r,middleware:this.env.middleware,middlewareTimeoutMs:this.env.middlewareTimeoutMs,logger:this.logger,reportEvent:this.env.reportEvent,logLabel:i,redactText:e=>Pt(this.env,e),countsTowardBreaker:It}}};function Sn(e){return e.map((e,t)=>({executor:e,index:t}))}function Cn(e,t){return e.map(({executor:e,index:n})=>({name:e.providerName,index:n,model:t(n)??e.model,adapter:e.adapter}))}function wn(t){return new e.s(t,`invalid_params`,{code:`no_eligible_targets`})}function Tn(t,n,r,i){if(r===void 0)return[...n];if(!Array.isArray(r)||r.some(e=>typeof e!=`string`))throw new e.s("`targets` must be an array of target names",`invalid_params`);if(r.length===0||new Set(r).size!==r.length)throw wn("`targets` must name at least one target, each at most once");let a=[];for(let o of r){if(!t.some(e=>e.executor.providerName===o)){let n=t.map(e=>`"${e.executor.providerName}"`).join(`, `);throw new e.s(`Unknown target "${o}". Valid targets: ${n}`,`invalid_params`,{code:`unknown_target`})}let r=n.find(e=>e.executor.providerName===o);r?a.push(r):i?.(o)}if(a.length===0)throw wn(`No target is left: every requested target was removed by an outer layer`);return a}function Y(e,t){return t===0?e.model:void 0}function En(e,t){return t===0||e.model===void 0?e:{...e,model:void 0}}async function Dn(t,n,r,i,a,o=!1){let s=[],{targets:c}=t;for(let e=0;e<c.length;e++){let{executor:l,index:u}=c[e],d=Y(n,u),f=Date.now(),p=0;try{if(!(e===0&&o)){let e=l.assertBreakerClosed(d,{requestId:r,state:i,signal:n.signal});e&&await e}return{result:await a(l,()=>{p+=1},u,e),executor:l,index:u,position:e,attemptCount:p,model:d??l.model}}catch(a){let o=K(a,n.signal);l.releaseBreakerTrial(d,{requestId:r,state:i,signal:n.signal}),s.push({index:u-1,provider:l.providerName,model:d??l.model,error:o.toSnapshot()});let m=e===c.length-1,[h,g]=Cn(c.slice(e,e+2),e=>Y(n,e)),_=t.fallbackOn(o,{isLastTarget:m,failed:h,...g?{next:g}:{}});if((m?`stop`:_)===`stop`)throw s.length>1?new y(s):o;On(t,{requestId:r,failed:c[e],next:c[e+1],failedModel:d??l.model,attempt:p,error:o,elapsedMs:Date.now()-f,signal:n.signal,middlewareState:i})}}throw new e.s(`No provider targets configured`,`invalid_params`)}function On(e,t){let{requestId:n,signal:r}=t,{executor:i,index:a}=t.failed,o=t.next.executor,s={stage:`attempt`,requestId:n,requestedProvider:i.providerName,adapter:i.adapter,requestedModel:t.failedModel,isFallbackAttempt:a>0,attempt:t.attempt||1,capabilities:{supportsJsonObjectMode:i.jsonObjectModeSupported},signal:r,state:t.middlewareState,own:{},emit:R,context:L(t.middlewareState)?.context,...V(e.middleware)};J({kind:`fallback`,requestId:n,from:i.providerName,to:o.providerName,fromIndex:a-1,toIndex:t.next.index-1,error:t.error,elapsedMs:t.elapsedMs},s,e.reportEvent,e.middleware,e.middlewareTimeoutMs,e.logger)}function kn(e,t,n,r,i){return{provider:e.providerName,model:i,fallbackIndex:t-1,usedFallback:t>0,attempts:r,position:n}}function An(e,t){let n=kn(e.executor,e.index,e.position,e.attemptCount,e.model);return t.meta&&(t.meta.current=n),{value:e.result,meta:n}}async function jn(e,t,n,r,i){return An(await Dn(e,t,n,i,(e,r,a)=>e.run(En(t,a),n,r,i),r),t)}async function Mn(e,t,n,r,i){let{promise:a,resolve:o}=se(),s=Dn(e,t,n,i,(e,r,a,s)=>{let c=0;return e.runStream(En(t,a),n,()=>{c+=1,r()},i,()=>o({executor:e,index:a,position:s,attempts:c}))},r);s.catch(()=>{});let c=await Promise.race([a.then(e=>({kind:`opened`,value:e})),s.then(e=>({kind:`settled`,value:e}))]);if(c.kind===`settled`)return An(c.value,t);let{executor:l,index:u,position:d,attempts:f}=c.value,p=kn(l,u,d,f,Y(t,u)??l.model);t.meta&&(t.meta.current=p);let m=s.then(e=>(Object.assign(p,kn(e.executor,e.index,e.position,e.attemptCount,e.model)),e.result.finalResult));return m.catch(()=>{}),{value:{chunks:{async*[Symbol.asyncIterator](){yield*(await s).result.chunks}},finalResult:m},meta:p}}async function Nn(t,n,{requestId:r,middlewareState:i,breakController:a,onRefundError:o}){let s=t.targets.length===1,c=Y(n,t.targets[0].index),l=()=>({requestId:r,state:i,signal:n.signal});if(s){if(n.signal?.aborted)throw new e.s(`LLM request aborted`,`aborted`);let r=t.targets[0].executor.assertBreakerClosed(c,l());r&&await r}try{let e,c=async t=>{let n=await t;return e=n.meta,n.value};return n.stream?{value:oe(await ie(n,()=>c(Mn(t,n,r,s,i)),n.signal,o),a),meta:e}:{value:await re(n,!1,()=>c(jn(t,n,r,s,i)),n.signal,o),meta:e}}catch(e){throw s&&t.targets[0].executor.releaseBreakerTrial(c,l()),e}}async function Pn(e,t,n,r,i,a,o=!1){let{wrapOrder:s,transformOrder:c,names:l,transformNames:u}=e.pipeline;if(s.length===0||o)return a(i);let d=e.primaryExecutor,{model:f,request:p}=d.previewRequest(t),m=new Map(c.map((e,t)=>[e,t])),h=a;for(let i=s.length-1;i>=0;i--){let a=s[i],o=B(a,m.get(a)),g=h;h=async i=>{let s={stage:`pre-dispatch`,requestId:n,primaryProvider:d.providerName,primaryAdapter:d.adapter,primaryModel:f,targets:Cn(i,e=>Y(t,e)),capabilities:{supportsJsonObjectMode:d.jsonObjectModeSupported},signal:t.signal,state:r,own:{},emit:R,context:L(r)?.context,registeredMiddlewareNames:l,transformMiddlewareNames:u};if(!await bt(a,s,o,e.middlewareTimeoutMs,e.logger))return a.enabled!==void 0&&J({kind:`middleware`,requestId:n,middleware:o,hook:`enabled_skip`},s,e.reportEvent,c,e.middlewareTimeoutMs,e.logger),g(i);if(!a.wrap)return g(i);let m,h=pt(async()=>g(Tn(e.targets,i,m,t=>e.logger.warn(`[VernLLM:${n}] middleware "${o}" asked for target "${t}", which an outer layer removed; ignoring it`)))),_=e=>(m=e?.targets,h.call());try{let t=await a.wrap(p,_,q(s,a,o));return h.wasCalled()||J({kind:`middleware`,requestId:n,middleware:o,hook:`wrap_short_circuit`},s,e.reportEvent,c,e.middlewareTimeoutMs,e.logger),t}catch(t){let n=h.resolvedValue();if(n!==void 0)return j(e.logger,`[VernLLM] middleware "${o}".wrap threw after next() resolved; keeping the original result`,t),n;throw wt(t,o,s.signal)}}}return h(i)}function Fn(e){let t=e.filter(e=>e!==void 0);return t.length>1?AbortSignal.any(t):t[0]}function In(e,t){let n=e.stream&&t?new AbortController:void 0,{signal:r,timer:i}=Ke(e.deadlineMs,Fn([e.signal,n?.signal]));return{params:r===e.signal?e:{...e,signal:r},signal:r,breakController:n,dispose:()=>clearTimeout(i)}}function Ln(e,t){let{reportEvent:n,middleware:r,middlewareTimeoutMs:i,logger:a}=e,o=0,s=!1,c=new Set;return{context:t,emitCustom(e,t,l,u){let d=(e,t)=>{c.has(e)||(c.add(e),a.warn(`[VernLLM:${u.requestId}] middleware "${l}" ${t}`))};if(!Rn(e,t)){d(`invalid`,`called ctx.emit with an empty name or data that is not plain JSON, dropping the event`);return}if(s){d(`reentrant`,`emitted "${e}" while a custom event was being delivered, dropping it`);return}if(o>=100){d(`limit`,`emitted more than 100 custom events in one call, dropping the rest`);return}o++,s=!0;try{J({kind:`custom`,requestId:u.requestId,name:e,source:l,...t===void 0?{}:{data:t}},u,n,r,i,a)}finally{s=!1}}}}function Rn(e,t){if(typeof e!=`string`||e===``)return!1;try{return t===void 0||z(t)}catch{return!1}}function zn(e){if(e===void 0)return;if(typeof e==`function`)return e;let{multiplier:t,maxMs:n=1/0}=e;return(e,r)=>{let i=Math.min(r*t**e,n),a=Math.min(r,n);return a+Ze((i>a?i:a)-a)}}function Bn(){return{state:`closed`,consecutiveFailures:0,openedAt:0,trial:null,reopenCount:0,failuresByReason:new Map,cooldownMsForOpen:0,openedInGeneration:0}}function X(e){return e??``}const Z=new WeakMap;function Vn(e,t){return!t||Z.get(t.state)===e.trial}function Hn(e,t){let n=t??`unknown`;e.failuresByReason.set(n,(e.failuresByReason.get(n)??0)+1)}function Un(e){e.consecutiveFailures=0,e.trial=null,e.reopenCount=0,e.failuresByReason.clear()}var Wn=class{threshold;failuresByKey=new Map;constructor(e){this.threshold=e}onSuccess(e){this.failuresByKey.delete(e)}onFailure(e){let t=(this.failuresByKey.get(e)??0)+1;return this.failuresByKey.set(e,t),t>=this.threshold}reset(e){this.failuresByKey.set(e,0)}forget(e){this.failuresByKey.delete(e)}},Gn=class{windowMs;minCalls;failureRatio;ratiosByKey=new Map;constructor(e,t,n){this.windowMs=e,this.minCalls=t,this.failureRatio=n,new Se(e),Ce(t),we(n,`failureRatio`)}ratioFor(e){let t=this.ratiosByKey.get(e);return t||(t=new Se(this.windowMs),this.ratiosByKey.set(e,t)),t}onSuccess(e){this.ratioFor(e).record(!1)}onFailure(e){let t=this.ratioFor(e);return t.record(!0),t.getCount()>=this.minCalls&&t.getRatio()>=this.failureRatio}reset(e){this.ratiosByKey.delete(e)}forget(e){this.ratiosByKey.delete(e)}};function Kn(e){return`onFailure`in e?e:e.kind===`consecutive`?new Wn(e.threshold):new Gn(e.windowMs,e.minCalls,e.failureRatio)}var qn=class{cooldownMs;onStateChange;isolateByModel;halfOpenProbes;halfOpenSuccessRatio;cooldownBackoff;tripping;sharedBucket=Bn();bucketsByModel=new Map;generation=0;admittedInGeneration=new WeakMap;constructor(e={}){let t=e.threshold??5;this.cooldownMs=e.cooldownMs??3e4,this.onStateChange=e.onStateChange??(()=>{}),this.isolateByModel=e.isolateByModel??!1;let n=e.halfOpenProbes;this.halfOpenProbes=Number.isFinite(n)?Math.max(1,Math.floor(n)):1;let r=e.halfOpenSuccessRatio;this.halfOpenSuccessRatio=Number.isFinite(r)?Math.min(1,Math.max(0,r)):1,this.cooldownBackoff=zn(e.cooldownBackoff),this.tripping=Kn(e.tripping??{kind:`consecutive`,threshold:t})}assertClosed(t,n){let r=this.ensureBucketFor(t);if(r.state===`closed`){this.markAdmitted(n);return}if(r.state===`open`){let i=Date.now()-r.openedAt,a=r.cooldownMsForOpen;if(i<a)throw new e.s(`Circuit open, provider has failed ${r.consecutiveFailures} times in a row. Retry in ${Math.ceil((a-i)/1e3)}s.`,`circuit_open`,{code:`circuit_cooling_down`});r.trial={slotsRemaining:this.halfOpenProbes-1,successes:0,failures:0},n&&Z.set(n.state,r.trial),this.markAdmitted(n),this.transition(r,`half-open`,t,n);return}if(!r.trial||r.trial.slotsRemaining<=0)throw new e.s(`Circuit half-open. Every trial slot is already in flight. Try again shortly.`,`circuit_open`,{code:`circuit_trial_in_flight`});--r.trial.slotsRemaining,n&&Z.set(n.state,r.trial),this.markAdmitted(n)}recordSuccess(e,t){let n=this.lookupBucket(e);if(n&&!this.isFromEarlierGeneration(n,t)){if(n.state===`half-open`&&n.trial&&Vn(n,t)){t&&Z.delete(t.state),n.trial.successes+=1,this.settleTrialIfComplete(n,e,t);return}n.state!==`half-open`&&n.state!==`open`&&(Un(n),this.tripping.onSuccess(this.trippingKeyFor(e)),this.transition(n,`closed`,e,t),this.isolateByModel&&n.state===`closed`&&n.consecutiveFailures===0&&this.dropBucket(e))}}recordFailure(e,t,n){let r=this.ensureBucketFor(e);if(!this.isFromEarlierGeneration(r,t)){if(r.state===`half-open`&&r.trial&&Vn(r,t)){t&&Z.delete(t.state),r.trial.failures+=1,Hn(r,n),this.settleTrialIfComplete(r,e,t);return}r.state!==`half-open`&&r.state!==`open`&&(r.consecutiveFailures+=1,Hn(r,n),this.tripping.onFailure(this.trippingKeyFor(e))&&this.openBucket(r,e,t))}}releaseTrial(e,t){if(!t)return;let n=this.lookupBucket(e);n&&n.state===`half-open`&&n.trial&&Vn(n,t)&&(Z.delete(t.state),n.trial.slotsRemaining+=1)}getState(e){let t=this.lookupBucket(e);return t?t.state===`open`&&Date.now()-t.openedAt>=t.cooldownMsForOpen?`half-open`:t.state:`closed`}getFailureBreakdown(e){let t=this.lookupBucket(e);return t?Object.fromEntries(t.failuresByReason):{}}open(e,t){let n=this.ensureBucketFor(e);n.trial=null,this.openBucket(n,e,t)}close(e,t){let n=this.ensureBucketFor(e);Un(n),this.tripping.reset(this.trippingKeyFor(e)),this.transition(n,`closed`,e,t),this.isolateByModel&&n.state===`closed`&&n.consecutiveFailures===0&&this.forgetModel(e)}openBucket(e,t,n){e.openedAt=Date.now(),e.cooldownMsForOpen=this.computeCooldown(e),e.openedInGeneration=++this.generation,this.transition(e,`open`,t,n)}computeCooldown(e){if(!this.cooldownBackoff)return this.cooldownMs;let t=this.cooldownBackoff(e.reopenCount,this.cooldownMs);return Number.isNaN(t)?0:Math.max(0,t)}markAdmitted(e){e&&this.admittedInGeneration.set(e.state,this.generation)}isFromEarlierGeneration(e,t){if(!t)return!1;let n=this.admittedInGeneration.get(t.state);return n!==void 0&&n<e.openedInGeneration}lookupBucket(e){return this.isolateByModel?this.bucketsByModel.get(X(e)):this.sharedBucket}trippingKeyFor(e){return this.isolateByModel?X(e):``}ensureBucketFor(e){if(!this.isolateByModel)return this.sharedBucket;let t=X(e),n=this.bucketsByModel.get(t);return n||(n=Bn(),this.bucketsByModel.set(t,n)),n}dropBucket(e){this.bucketsByModel.delete(X(e))}forgetModel(e){this.dropBucket(e),this.tripping.forget?.(this.trippingKeyFor(e))}transition(e,t,n,r){if(t===e.state)return;let i=e.state;e.state=t,this.onStateChange(i,t,e.consecutiveFailures,n,r)}settleTrialIfComplete(e,t,n){let r=e.trial;if(!r||r.successes+r.failures<this.halfOpenProbes)return;let i=r.successes/this.halfOpenProbes;if(e.trial=null,i>=this.halfOpenSuccessRatio){Un(e),this.tripping.reset(this.trippingKeyFor(t)),this.transition(e,`closed`,t,n),this.isolateByModel&&e.state===`closed`&&this.forgetModel(t);return}e.reopenCount+=1,this.openBucket(e,t,n)}};const Jn=[`assertClosed`,`recordSuccess`,`recordFailure`,`onStateChange`],Yn=[`assertClosed`,`recordSuccess`,`recordFailure`],Xn=[`getState`,`getFailureBreakdown`,`open`,`close`,`releaseTrial`,`setLogger`,`prepare`,`readState`];function Zn(e){let t=e;return Xn.filter(e=>t[e]!==void 0&&typeof t[e]!=`function`)}function Qn(e){let{prepareTimeoutMs:t}=e;return t!==void 0&&(!Number.isFinite(t)||t<=0)}function $n(e){let t=e;return{attemptsAdapter:Yn.some(e=>typeof t[e]==`function`),missing:Jn.filter(e=>typeof t[e]!=`function`),invalid:Zn(e)}}function er(e,t,n,r,i,a,o,s,c,l){return(u,d,f,p,m)=>{let h={kind:`circuit_state`,provider:t,model:p??n,from:u,to:d,consecutiveFailures:f},g=m??{requestId:globalThis.crypto.randomUUID(),state:D()};J(h,{stage:`attempt`,requestId:g.requestId,requestedProvider:t,adapter:l,requestedModel:p??n,isFallbackAttempt:s,attempt:g.attempt??1,capabilities:{supportsJsonObjectMode:c},signal:g.signal,state:g.state,own:{},emit:R,context:L(g.state)?.context,...V(a)},r,a,o,i),e&&M(i,`circuitBreaker.onStateChange`,()=>e(u,d,f,p,m))}}const tr=new WeakMap,nr=new WeakSet;function rr(e,t,n){let r=tr.get(e);if(r)nr.has(e)||(nr.add(e),n.warn(`[VernLLM] circuitBreaker: this adapter instance is already wired to another target. circuit_state events for it will now be reported to both, each tagged with its own provider/model. If that's intentional (a breaker genuinely shared across targets or clients), no action needed. If not, e.g. constructing VernLLM repeatedly with the same adapter instance, each wiring is kept for the life of the process, review whether the adapter should be constructed fresh per target instead.`));else{r=new Set,tr.set(e,r);let t=e.onStateChange,i=r;e.onStateChange=(e,r,a,o,s)=>{for(let t of i)M(n,`circuitBreaker.onStateChange`,()=>t(e,r,a,o,s));M(n,`circuitBreaker.onStateChange`,()=>t(e,r,a,o,s))}}r.add(t)}function ir(t,n,r,i,a,o,s,c,l,u=Ee){if(!t)return;let d=Oe(i,a),f=e=>er(e,n,r,d,a,o,s,c,l,u);if(typeof t==`object`){let{attemptsAdapter:n,missing:r,invalid:i}=$n(t);if(n&&r.length>0)throw new e.s(`circuitBreaker looks like a CircuitBreakerAdapter but is missing: ${r.join(`, `)}. All four members (${Jn.join(`, `)}) are required.`,`invalid_params`);if(n&&Qn(t))throw new e.s(`circuitBreaker's prepareTimeoutMs (${String(t.prepareTimeoutMs)}) must be a finite number greater than 0. It is optional, omit it to use the default.`,`invalid_params`);if(i.length>0){let n=t,r=i.map(e=>`${e} (${typeof n[e]})`).join(`, `);throw new e.s(`circuitBreaker's ${r} must be a function when present. ${i.length===1?`It is`:`They are`} optional, omit entirely rather than assigning a non function value.`,`invalid_params`)}if(n){let e=t;return rr(e,f(void 0),a),ke(a,`[VernLLM] circuitBreaker.setLogger rejected`,e.setLogger?.(a)),e}}let p=typeof t==`object`?t:void 0;return new qn({...p,onStateChange:f(p?.onStateChange)})}var ar=class{capacity;refillPerMs;available;lastRefill=Date.now();constructor(e,t){this.capacity=e,this.refillPerMs=t,this.available=e}refill(){if(this.refillPerMs===0)return;let e=Date.now(),t=e-this.lastRefill;this.available=Math.min(this.capacity,this.available+Math.max(0,t)*this.refillPerMs),this.lastRefill=e}tryTake(e){return this.refill(),this.available<e?!1:(this.available-=e,!0)}msUntilAvailable(e){return this.refill(),this.available>=e?0:this.refillPerMs===0?1/0:(e-this.available)/this.refillPerMs}give(e){this.available=Math.min(this.capacity,this.available+e)}getCapacity(){return this.capacity}getAvailable(){return this.refill(),this.available}resize(e){this.refill(),this.refillPerMs>0&&(this.refillPerMs=this.refillPerMs/this.capacity*e),this.capacity=e,this.available=Math.min(this.available,e)}};function or(t){if(t===void 0)return 1;if(!Number.isFinite(t)||t<=0)throw new e.s(`estimateFraction (${t}) must be a finite number greater than 0.`,`invalid_params`);return Math.min(t,1)}function sr(t){if(!t)return;let n=n=>{if(!Number.isFinite(t[n]))throw new e.s(`aimd.${n} (${t[n]}) must be a finite number.`,`invalid_params`)};for(let e of[`minCapacity`,`maxCapacity`,`increaseBy`,`decreaseFactor`])n(e);if(t.minCapacity<1||t.maxCapacity<1)throw new e.s(`aimd.minCapacity (${t.minCapacity}) and aimd.maxCapacity (${t.maxCapacity}) must both be at least 1, since the requests bucket always takes 1 per acquire; a capacity below 1 could never be satisfied.`,`invalid_params`);if(t.minCapacity>t.maxCapacity)throw new e.s(`aimd.minCapacity (${t.minCapacity}) must not exceed aimd.maxCapacity (${t.maxCapacity}).`,`invalid_params`);return{increaseBy:Math.max(0,t.increaseBy),decreaseFactor:Math.min(1,Math.max(Number.MIN_VALUE,t.decreaseFactor)),minCapacity:t.minCapacity,maxCapacity:t.maxCapacity,proactiveFloor:t.proactiveFloor??0}}function cr(t){let n=t=>{throw new e.s(t,`invalid_params`)};for(let e of[`requestsPerMinute`,`tokensPerMinute`]){let r=t[e];r!==void 0&&r!==0&&(!Number.isFinite(r)||r<1)&&n(`${e} (${r}) must be 0 (unlimited) or a finite number of at least 1.`)}for(let e of[`maxConcurrent`,`maxQueueSize`]){let r=t[e];r!==void 0&&(!Number.isInteger(r)||r<0)&&n(`${e} (${r}) must be a non-negative integer (0 means unlimited).`)}let{maxQueueMs:r}=t;r!==void 0&&(!Number.isFinite(r)||r<0||r>2147483647)&&n(`maxQueueMs (${r}) must be a finite number from 0 to ${Ge}. Pass 0 to wait indefinitely.`);let{aimd:i}=t;if(!i)return;t.requestsPerMinute||n(`aimd requires requestsPerMinute to be set.`);let a=i.proactiveFloor;a!==void 0&&(!Number.isFinite(a)||a<0)&&n(`aimd.proactiveFloor (${a}) must be a finite number that is not negative.`)}function lr(e){if(typeof e==`string`)return{chars:e.length,images:0};if(e==null)return{chars:0,images:0};if(Array.isArray(e)){let t=0,n=0;for(let r of e)r?.type===`image`?n+=1:r?.type===`text`&&typeof r.text==`string`?t+=r.text.length:t+=ur(r);return{chars:t,images:n}}return{chars:ur(e),images:0}}function ur(e){try{return JSON.stringify(e)?.length??0}catch{return 0}}function dr(e){let t=0,n=0;for(let r of e.messages){let e=lr(r.content);t+=e.chars,n+=e.images}return Math.ceil(t/4)+n*1600+(e.max_tokens??0)}function fr(e,t){return e===`tpm`?t:1}function pr(e){if(e)return new ar(e,e/6e4)}var mr=class{requests;tokens;concurrency;buckets;maxQueueMs;maxQueueSize;estimateTokensFn;estimateFraction;aimd;queue=[];wakeTimer;lastShrinkAt;constructor(e){cr(e),this.requests=pr(e.requestsPerMinute),this.tokens=pr(e.tokensPerMinute),e.maxConcurrent&&(this.concurrency=new ar(e.maxConcurrent,0)),this.buckets=[{reason:`concurrency`,bucket:this.concurrency},{reason:`rpm`,bucket:this.requests},{reason:`tpm`,bucket:this.tokens}].flatMap(({reason:e,bucket:t})=>t?[{reason:e,bucket:t}]:[]),this.maxQueueMs=e.maxQueueMs??3e4,this.maxQueueSize=e.maxQueueSize??0,this.estimateTokensFn=e.estimateTokens??dr,this.estimateFraction=or(e.estimateFraction),this.aimd=sr(e.aimd)}estimate(e){return Math.ceil(this.estimateTokensFn(e)*this.estimateFraction)}async acquire(t,n){if(n?.aborted)throw new e.s(`LLM request aborted`,`aborted`);if(!Number.isFinite(t)||t<0)throw new e.s(`estimatedTokens must be a finite, non-negative number, got ${String(t)}`,`invalid_params`);if(this.tokens&&t>this.tokens.getCapacity())throw new e.s(`estimatedTokens (${t}) exceeds the configured tokensPerMinute capacity (${this.tokens.getCapacity()}); this call could never acquire capacity.`,`rate_limited`,{code:`rate_limit_capacity_exceeded`});if(this.queue.length===0){let e=this.tryAcquireBuckets(t);return e.ok?{release:this.makeRelease(t),waitedMs:0}:this.enqueue(t,e.reason,n)}if(this.maxQueueSize>0&&this.queue.length>=this.maxQueueSize)throw this.queueFullError();return this.enqueue(t,void 0,n)}queueFullError(){return new e.s(`Rate limit queue is full`,`rate_limited`,{code:`rate_limit_queue_full`})}enqueue(t,n,r){return new Promise((i,a)=>{let o={estimatedTokens:t,enqueuedAt:Date.now(),lastReason:n,resolve:e=>{l(),i(e)},reject:e=>{l(),this.wakeTimer&&=(clearTimeout(this.wakeTimer),void 0),this.drain(),a(e)}},s,c=()=>{o.reject(new e.s(`LLM request aborted`,`aborted`))},l=()=>{s&&clearTimeout(s),r?.removeEventListener(`abort`,c);let e=this.queue.indexOf(o);e!==-1&&this.queue.splice(e,1)};this.maxQueueMs>0&&(s=setTimeout(()=>{o.reject(new e.s(`Rate limit queue timed out before capacity was available`,`rate_limited`,{code:`rate_limit_queue_timeout`}))},this.maxQueueMs)),r?.addEventListener(`abort`,c,{once:!0}),this.queue.push(o),this.drain()})}tryAcquireBuckets(e){let t=[];for(let{reason:n,bucket:r}of this.buckets){let i=fr(n,e);if(!r.tryTake(i)){for(let e of t)e.bucket.give(e.amount);return{ok:!1,reason:n}}t.push({bucket:r,amount:i})}return{ok:!0}}drain(){for(;this.queue.length>0;){let e=this.queue[0],t=this.tryAcquireBuckets(e.estimatedTokens);if(!t.ok){e.lastReason=t.reason,this.scheduleWake(t.reason,e.estimatedTokens);return}let n=Date.now()-e.enqueuedAt;e.resolve({release:this.makeRelease(e.estimatedTokens),waitedMs:n,reason:e.lastReason})}}scheduleWake(e,t){if(this.wakeTimer||e===`concurrency`)return;let n=(this.buckets.find(t=>t.reason===e)?.bucket)?.msUntilAvailable(fr(e,t));if(n===void 0||!Number.isFinite(n))return;let r=Math.min(Math.max(1,Math.ceil(n)),Ge);this.wakeTimer=setTimeout(()=>{this.wakeTimer=void 0,this.drain()},r)}makeRelease(e){let t=!1;return(n,r=!1)=>{t||(t=!0,this.concurrency?.give(1),this.tokens&&n!==void 0&&Number.isFinite(n)&&this.tokens.give(e-n),r&&this.growOnSuccess(),this.drain())}}resizeRequestsCeiling(e){this.aimd&&this.requests&&this.requests.resize(e(this.aimd,this.requests.getCapacity()))}growOnSuccess(){this.resizeRequestsCeiling((e,t)=>Math.min(t+e.increaseBy,e.maxCapacity))}signalRateLimit(){if(!this.aimd||!this.requests)return;let e=Date.now();this.lastShrinkAt!==void 0&&e>=this.lastShrinkAt&&e-this.lastShrinkAt<6e4||(this.lastShrinkAt=e,this.resizeRequestsCeiling((e,t)=>Math.max(t*e.decreaseFactor,e.minCapacity)))}reactToRateLimitHint(e){if(!this.aimd||!e||e.remainingRequests===void 0)return;let t=this.aimd.proactiveFloor??0;t>0&&e.remainingRequests<=t&&this.signalRateLimit()}getState(){return{requestsRemaining:this.requests?.getAvailable(),tokensRemaining:this.tokens?.getAvailable(),concurrentInFlight:this.concurrency?this.concurrency.getCapacity()-this.concurrency.getAvailable():void 0}}};const Q=[`estimate`,`acquire`,`signalRateLimit`,`reactToRateLimitHint`],hr=[`getState`,`readState`,`setLogger`];function gr(e){let t=e;return hr.filter(e=>t[e]!==void 0&&typeof t[e]!=`function`)}function _r(e){let t=e;return Q.every(e=>typeof t[e]==`function`)&&gr(e).length===0}function vr(e){let t=e;return Q.some(e=>typeof t[e]==`function`)}function yr(t,n){if(t===void 0)return;if(_r(t))return n&&t.setLogger?.(n),t;if(vr(t)){let n=Q.filter(e=>typeof t[e]!=`function`);if(n.length>0)throw new e.s(`rateLimit looks like a RateLimiterAdapter but is missing: ${n.join(`, `)}. All four methods (${Q.join(`, `)}) are required.`,`invalid_params`)}let r=gr(t);if(r.length>0){let n=t,i=r.map(e=>`${e} (${typeof n[e]})`).join(`, `);throw new e.s(`rateLimit's ${i} must be a function. ${r.length===1?`It is`:`They are`} optional; omit entirely rather than assigning a non-function value.`,`invalid_params`)}return new mr(t)}function br(e,t){let n=e.map((e,n)=>e.name??(n>0?`fallback[${n-1}]`:t)),r=n.find((e,t)=>n.indexOf(e)!==t);if(r!==void 0)throw Error(`target name "${r}" is used by more than one target; names identify targets in usage and events`);return n}function xr(e,t,n){let r=[e,...t],i=br(r,n.providerName);return r.map((e,t)=>{let r=t>0,a=i[t],o=ir(e.circuitBreaker,a,e.model,n.onEvent,n.logger,n.middleware,n.middlewareTimeoutMs,r,e.client.supportsJsonObjectMode??!0,De(e.client)),s=e.retryBudget?new Te(e.retryBudget):void 0;return new xn(a,e.client,e.model,{maxRetries:e.maxRetries??n.maxRetries??1,timeoutMs:e.timeoutMs??n.timeoutMs??25e3,chunkIdleTimeoutMs:e.chunkIdleTimeoutMs??n.chunkIdleTimeoutMs??3e4,readerStallTimeoutMs:e.readerStallTimeoutMs??n.readerStallTimeoutMs,baseDelayMs:e.baseDelayMs??n.baseDelayMs??500,maxRetryAfterMs:e.maxRetryAfterMs??n.maxRetryAfterMs??1e4,defaultMaxTokens:e.defaultMaxTokens??n.defaultMaxTokens??1e3,defaultTemperature:e.defaultTemperature===void 0?n.primaryDefaultTemperature:e.defaultTemperature,defaultReasoningEffort:e.defaultReasoningEffort===void 0?n.primaryDefaultReasoningEffort:e.defaultReasoningEffort,defaultBudgetTokens:e.defaultBudgetTokens===void 0?n.primaryDefaultBudgetTokens:e.defaultBudgetTokens,nonRetryableStatus:e.nonRetryableStatus??n.nonRetryableStatus??[400,401,402,403,404,413,422],parseJson:n.parseJson,logger:n.logger,redact:n.redact,onUsage:n.onUsage,onUsageFailure:n.onUsageFailure,onEvent:n.onEvent,breaker:o,budget:s,limiter:yr(e.rateLimit,n.logger),isFallback:r,middleware:n.middleware,dispatchOrder:n.dispatchOrder,middlewareTimeoutMs:n.middlewareTimeoutMs,detectSoftFailure:e.detectSoftFailure??n.detectSoftFailure})})}function $(e,t){return e.name??String(t)}function Sr(e){let t=new Set;for(let n of e){if(t.has(n))throw Error(`middleware has a duplicate label "${n}"; a name can't match an unnamed middleware's bracketed position`);t.add(n)}}function Cr(e){let t=e.map($),n=new Set;for(let e of t){if(n.has(e))throw Error(`middleware ordering has a duplicate name "${e}"; every middleware's resolved name must be unique`);n.add(e)}}function wr(e){let t=new Map;e.forEach((n,r)=>{let i=n.ref;if(!i)return;let a=t.get(i);if(a!==void 0)throw Error(`middleware ordering has a ref reused across two entries ("${$(e[a],a)}" and "${$(n,r)}"); each middleware's ref must be unique to that middleware`);t.set(i,r)})}function Tr(e){return`ref`in e?{ref:e.ref,required:!0}:{ref:e,required:!1}}function Er(e,t,n,r,i,a){let{ref:o,required:s}=Tr(r),c=t.get(o);if(!c){if(s)throw Error(`middleware "${n}" requires ref "${o.debugName}", which is not registered; this dependency is not optional`);a?.warn?.(`[VernLLM] middleware "${n}" references unknown ref "${o.debugName}" in runsAfter/runsBefore, ignoring it`);return}let l=i?c.id:n,u=i?n:c.id;e.get(l).mustPrecede.push(u)}function Dr(e,t){let n=e.map($),r=e.map((e,t)=>({id:n[t],entry:e,index:t,mustPrecede:[]})),i=new Map(r.map(e=>[e.id,e])),a=new Map(r.filter(e=>e.entry.ref).map(e=>[e.entry.ref,e]));for(let e of r){for(let n of e.entry.runsAfter??[])Er(i,a,e.id,n,!0,t);for(let n of e.entry.runsBefore??[])Er(i,a,e.id,n,!1,t)}return r}function Or(e,t){let n=(e.entry.priority??0)-(t.entry.priority??0);return n===0?e.index-t.index:n}function kr(e){let t=new Map(e.map(e=>[e.id,e])),n=new Map(e.map(e=>[e.id,0]));for(let t of e)for(let e of t.mustPrecede)n.set(e,n.get(e)+1);let r=e.filter(e=>n.get(e.id)===0),i=[],a=new Set;for(;r.length>0;){r.sort(Or);let e=r.shift();i.push(e.entry),a.add(e.id);for(let i of e.mustPrecede){let e=n.get(i)-1;n.set(i,e),e===0&&r.push(t.get(i))}}if(i.length<e.length){let t=e.filter(e=>!a.has(e.id)).map(e=>e.id);throw Error(`middleware ordering has a cycle among: ${t.join(`, `)}`)}return i}function Ar(e,t){Cr(e),wr(e);let n=e.some(e=>e.runsAfter?.length||e.runsBefore?.length);return e.length<=1&&!n?[...e]:n?kr(Dr(e,t)):e.map((e,t)=>({id:$(e,t),entry:e,index:t,mustPrecede:[]})).sort(Or).map(e=>e.entry)}function jr(e,t){let n=[],r=[],i=[];for(let t of e)t.position===`outermost`?n.push(t):t.position===`innermost`?r.push(t):i.push(t);let a=[...i].sort((e,t)=>(typeof e.position==`number`?e.position:0)-(typeof t.position==`number`?t.position:0)),o=(e,n)=>t.indexOf(e)-t.indexOf(n);return n.sort(o),r.sort(o),[...n,...a,...r]}function Mr(e,t){let n=Ar(e,t),{registeredMiddlewareNames:r,transformMiddlewareNames:i}=V(n);return Sr(r),{transformOrder:n,wrapOrder:jr(n,e),names:r,transformNames:i}}function Nr(e){let t=e;return typeof t.get==`function`&&typeof t.set==`function`}function Pr(e){if(e===void 0)return new s;if(Nr(e))return e;if(e.maxSize!==void 0&&(!Number.isFinite(e.maxSize)||e.maxSize<0||!Number.isInteger(e.maxSize)))throw RangeError(`cache.maxSize must be a finite, non-negative integer, got ${String(e.maxSize)}`);return new s(e.maxSize,e.eviction)}var Fr=class{debugEnabled;constructor(e){this.debugEnabled=e}debug(e){this.debugEnabled&&console.debug(e)}warn(e){console.warn(e)}error(e,t){console.error(e,t??``)}},Ir=class{logger;executors;cacheOrchestrator;declaredTargets;logicalCallDependencies;runOperationDependencies;callScopeDependencies;cachedCallInnerParams=new WeakMap;cachedCallMeta=new Map;constructor(e){this.logger=ce(e.logger===`silent`?new fe:e.logger??new Fr(e.debug??!1));let t=e.name??`primary`;this.cacheOrchestrator=new be(Pr(e.cache),this.logger);let n=Oe(e.onEvent,this.logger),r=Mr(e.middleware??[],this.logger),i=e.middlewareTimeoutMs??5e3,a=e.defaultTemperature===void 0?.2:e.defaultTemperature,o=e.defaultReasoningEffort,s=e.defaultBudgetTokens,c={client:e.client,model:e.model,name:t,maxRetries:e.maxRetries,timeoutMs:e.timeoutMs,chunkIdleTimeoutMs:e.chunkIdleTimeoutMs,readerStallTimeoutMs:e.readerStallTimeoutMs,baseDelayMs:e.baseDelayMs,maxRetryAfterMs:e.maxRetryAfterMs,defaultMaxTokens:e.defaultMaxTokens,defaultTemperature:a,defaultReasoningEffort:o,defaultBudgetTokens:s,nonRetryableStatus:e.nonRetryableStatus,circuitBreaker:e.circuitBreaker,rateLimit:e.rateLimit,retryBudget:e.retryBudget,detectSoftFailure:e.detectSoftFailure},l=Array.isArray(e.fallback)?e.fallback:e.fallback?[e.fallback]:[];this.executors=xr(c,l,{providerName:t,primaryDefaultTemperature:a,primaryDefaultReasoningEffort:o,primaryDefaultBudgetTokens:s,maxRetries:e.maxRetries,timeoutMs:e.timeoutMs,chunkIdleTimeoutMs:e.chunkIdleTimeoutMs,readerStallTimeoutMs:e.readerStallTimeoutMs,baseDelayMs:e.baseDelayMs,maxRetryAfterMs:e.maxRetryAfterMs,defaultMaxTokens:e.defaultMaxTokens,nonRetryableStatus:e.nonRetryableStatus,parseJson:e.parseJson,redact:e.redact,onUsage:e.onUsage,onUsageFailure:e.onUsageFailure,onEvent:e.onEvent,logger:this.logger,middleware:r.transformOrder,dispatchOrder:r.wrapOrder,middlewareTimeoutMs:i,detectSoftFailure:e.detectSoftFailure}),this.declaredTargets=Sn(this.executors),this.logicalCallDependencies={fallbackOn:e.fallbackOn??v,reportEvent:n,middleware:r.transformOrder,middlewareTimeoutMs:i,logger:this.logger},this.callScopeDependencies={reportEvent:n,middleware:r.transformOrder,middlewareTimeoutMs:i,logger:this.logger},this.runOperationDependencies={pipeline:r,primaryExecutor:this.executors[0],targets:this.declaredTargets,middlewareTimeoutMs:i,logger:this.logger,reportEvent:n}}async call(t){if(t.signal?.aborted)throw new e.s(`LLM request aborted`,`aborted`);let n=t.requestId??globalThis.crypto.randomUUID(),r=this.cachedCallInnerParams.get(t),i=r!==void 0,a=i?void 0:Fe(t.context),o=i?void 0:Le(t.state),s=this.resolveTargets(t.targets),{params:c,signal:l,breakController:u,dispose:d}=In(t,!i),f=r??D(o);Me(f,Ln(this.callScopeDependencies,a));try{return(await Pn(this.runOperationDependencies,c,n,f,s,e=>Nn({...this.logicalCallDependencies,targets:e},c,{requestId:n,middlewareState:f,breakController:u,onRefundError:(e,t)=>j(this.logger,e,t)}),i)).value}catch(e){throw qe(e,l)}finally{d()}}resolveTargets(e){return Tn(this.declaredTargets,this.declaredTargets,e)}runCached(e){return this.cacheOrchestrator.runCached(e)}async deleteCache(e){await this.cacheOrchestrator.deleteCache(e)}async cachedCall(t){let{call:n,...r}=t,i=n;if(i.reserveUsage||i.refundUsage)throw new e.s("`reserveUsage`/`refundUsage` were set inside `call`, where cachedCall ignores them. Move them to the top level of the cachedCall() params, alongside cacheKey/ttl, instead.",`invalid_params`);let a=i.requestId??globalThis.crypto.randomUUID(),o=D(Le(i.state));Me(o,Ln(this.callScopeDependencies,Fe(i.context)));let s=this.resolveTargets(i.targets),c=await this.cacheOrchestrator.resolveCacheKey(r.cacheKey),{holder:l,release:u}=xe(this.cachedCallMeta,c,e=>this.cacheOrchestrator.inFlightFor(e)),d=i.meta,f=()=>{d&&(d.current=l.current)},{signal:p,timer:m}=Ke(i.deadlineMs,Fn([r.signal,i.signal])),h={...r,signal:p},g={...i,requestId:a,signal:p},_=(e,t)=>{let{deadlineMs:n,...r}=g,i={...r,targets:t.map(e=>e.executor.providerName),signal:e,meta:l};return this.cachedCallInnerParams.set(i,o),this.call(i).finally(()=>{f(),this.cachedCallInnerParams.delete(i)})},v=!1;try{let e=await Pn(this.runOperationDependencies,g,a,o,s,async e=>({value:i.stream?await this.cacheOrchestrator.runCachedStream({...h,openStream:t=>_(t,e)},!!i.tools):await this.runCached({...h,fn:t=>_(t,e)}),meta:l.current}));if(i.stream){let t=e.value,n=()=>{f(),u()};return v=!0,t.finalResult.then(n,n),t}return f(),e.value}catch(e){throw qe(e,p)}finally{v||u(),clearTimeout(m)}}getCircuitState(e){let t=P(this.executors,e?.index??0,`getCircuitState`);return F(t.isolateByModel,e?.model,`getCircuitState`,this.logger),t.getCircuitState(e?.model??t.model)}getFailureBreakdown(e){let t=P(this.executors,e?.index??0,`getFailureBreakdown`);return F(t.isolateByModel,e?.model,`getFailureBreakdown`,this.logger),t.getFailureBreakdown(e?.model??t.model)}getRetryBudgetState(e){return P(this.executors,e?.index??0,`getRetryBudgetState`).getRetryBudgetState()}getRateLimitState(e){return P(this.executors,e?.index??0,`getRateLimitState`).getRateLimitState()}getCircuitStates(e){return this.executors.map((t,n)=>({provider:t.providerName,index:n,isFallback:n>0,isolateByModel:t.isolateByModel,state:t.getCircuitState(e??t.model)}))}async readRateLimitState(e){return P(this.executors,e?.index??0,`readRateLimitState`).readRateLimitState()}async readCircuitStates(e){return Promise.all(this.executors.map(async(t,n)=>({provider:t.providerName,index:n,isFallback:n>0,isolateByModel:t.isolateByModel,state:await t.readCircuitState(e??t.model)})))}openCircuit(e){let t=P(this.executors,e?.index??0,`openCircuit`);F(t.isolateByModel,e?.model,`openCircuit`,this.logger),t.openCircuit(e?.model??t.model,{requestId:globalThis.crypto.randomUUID(),state:D()})}closeCircuit(e){let t=P(this.executors,e?.index??0,`closeCircuit`);F(t.isolateByModel,e?.model,`closeCircuit`,this.logger),t.closeCircuit(e?.model??t.model,{requestId:globalThis.crypto.randomUUID(),state:D()})}};function Lr(e){return e}function Rr(e){return e}exports.CircuitBreaker=qn,exports.ConsecutiveTripping=Wn,exports.ConsoleLogger=Fr,exports.FallbackExhaustedError=y,exports.InMemoryCacheAdapter=s,exports.LLMError=e.s,exports.NormalizedCacheAdapter=c,exports.RateLimiter=mr,exports.RetryBudget=Te,exports.RollingTripping=Gn,exports.TieredCacheAdapter=l,exports.VernLLM=Ir,exports.createMiddleware=O,exports.createMiddlewareRef=w,exports.createMiddlewareStateBag=D,exports.createStateKey=C,exports.defaultEstimateTokens=dr,exports.defaultFallbackOn=v,exports.defineCachedCallParams=Rr,exports.defineCallParams=Lr,exports.defineTool=f,exports.hasIssues=e.c,exports.isFallbackExhaustedError=b,exports.isLLMError=e.l,exports.isStreamResult=g,exports.isToolCallResult=p,exports.metaRef=x,exports.requireRef=T,exports.stateEntry=E;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./responseBody.utils-DfrljpVb.cjs"),t={onAccess(){},onInsert(){},getEvictee:e=>e.keys().next().value};function n(e,t){
|
|
2
|
+
/* v8 ignore next */
|
|
3
|
+
if(!e.has(t))return;let n=e.get(t);e.delete(t),e.set(t,n)}const r={onAccess:n,onInsert:n,getEvictee:e=>e.keys().next().value};function i(e){return e===`lru`?r:t}function a(e){return typeof e==`number`&&e>0}function o(e,t=/* @__PURE__ */ new Set){if(e===null)return!0;let n=typeof e;if(n===`function`||n===`symbol`)return!1;if(n!==`object`)return!0;let r=e;if(t.has(r)||(t.add(r),r instanceof Date||r instanceof RegExp||r instanceof ArrayBuffer||ArrayBuffer.isView(r)))return!0;if(r instanceof Map){for(let[e,n]of r)if(!o(e,t)||!o(n,t))return!1;return!0}if(r instanceof Set){for(let e of r)if(!o(e,t))return!1;return!0}let i=Object.getPrototypeOf(r);if(!Array.isArray(r)&&i!==Object.prototype&&i!==null||Object.getOwnPropertySymbols(r).length>0)return!1;for(let e of Object.values(Object.getOwnPropertyDescriptors(r)))if(!(`value`in e)||!o(e.value,t))return!1;return!0}var s=class{maxSize;store=/* @__PURE__ */ new Map;eviction;constructor(e=1e3,t=`fifo`){this.maxSize=e,this.eviction=i(t)}async get(e){let t=this.store.get(e);return t?Date.now()>=t.expiresAt?(this.store.delete(e),{hit:!1,value:null}):(this.eviction.onAccess(this.store,e),{hit:!0,value:structuredClone(t.value)}):{hit:!1,value:null}}async set(e,t,n){this.cleanupExpiredEntries(),!a(n)||!o(t)?this.store.delete(e):(this.store.set(e,{value:structuredClone(t),expiresAt:Date.now()+n*1e3}),this.eviction.onInsert(this.store,e),this.enforceSizeLimit())}async delete(e){this.store.delete(e)}cleanupExpiredEntries(){let e=Date.now();for(let[t,n]of this.store)e>=n.expiresAt&&this.store.delete(t)}enforceSizeLimit(){for(;this.store.size>this.maxSize;){let e=this.eviction.getEvictee(this.store);if(e===void 0)break;this.store.delete(e)}}},c=class{inner;constructor(e=new s){this.inner=e}normalize(e){return e.normalize(`NFC`).replace(/\r\n?/g,`
|
|
4
|
+
`).trim()}async resolveKey(e){return this.normalize(e)}async get(e){return this.inner.get(this.normalize(e))}async set(e,t,n){await this.inner.set(this.normalize(e),t,n)}async delete(e){await this.inner.delete?.(this.normalize(e))}},l=class{l1;l2;l1Ttl;l2ExpiresAt=/* @__PURE__ */ new Map;expiryHeap=[];constructor(e,t,n){this.l1=e,this.l2=t,this.l1Ttl=n}async resolveKey(e){return this.l1.resolveKey?this.l1.resolveKey(e):this.l2.resolveKey?this.l2.resolveKey(e):e}async get(e){let t=await this.l1.get(e);if(t.hit)return t;let n=await this.l2.get(e);return n.hit&&await this.l1.set(e,n.value,this.promotionTtl(e)),n}async set(e,t,n){this.trackExpiry(e,n);let r=this.l1Ttl===void 0?n:Math.min(this.l1Ttl,n);await Promise.all([this.l1.set(e,t,r),this.l2.set(e,t,n)])}async delete(e){this.l2ExpiresAt.delete(e),await Promise.all([this.l1.delete?.(e),this.l2.delete?.(e)])}promotionTtl(e){let t=this.l1Ttl??60,n=this.l2ExpiresAt.get(e);return n===void 0?t:n<=Date.now()?(this.l2ExpiresAt.delete(e),t):Math.min(t,(n-Date.now())/1e3)}trackExpiry(e,t){let n=Date.now();if(this.pruneExpired(n),this.l2ExpiresAt.delete(e),typeof t!=`number`||Number.isNaN(t))return;let r=n+t*1e3;for(this.l2ExpiresAt.set(e,r),u(this.expiryHeap,{key:e,expiresAt:r});this.l2ExpiresAt.size>1e4;){let e=this.l2ExpiresAt.keys().next().value;
|
|
5
|
+
/* v8 ignore next */
|
|
6
|
+
if(e===void 0)break;this.l2ExpiresAt.delete(e)}if(this.expiryHeap.length>2*this.l2ExpiresAt.size+64){this.expiryHeap=[];for(let[e,t]of this.l2ExpiresAt)u(this.expiryHeap,{key:e,expiresAt:t})}}pruneExpired(e){for(;this.expiryHeap.length>0&&this.expiryHeap[0].expiresAt<=e;){let{key:e,expiresAt:t}=d(this.expiryHeap);this.l2ExpiresAt.get(e)===t&&this.l2ExpiresAt.delete(e)}}};function u(e,t){e.push(t);let n=e.length-1;for(;n>0;){let t=n-1>>1;if(e[t].expiresAt<=e[n].expiresAt)break;[e[t],e[n]]=[e[n],e[t]],n=t}}function d(e){let t=e[0],n=e.pop();if(t===void 0||n===void 0||e.length===0)return t;e[0]=n;let r=0;for(;;){let n=2*r+1,i=n+1,a=r;if(n<e.length&&e[n].expiresAt<e[a].expiresAt&&(a=n),i<e.length&&e[i].expiresAt<e[a].expiresAt&&(a=i),a===r)return t;[e[a],e[r]]=[e[r],e[a]],r=a}}function f(e){return e}function p(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`tool_calls`&&Array.isArray(t.toolCalls)}function m(e){return typeof e==`object`&&!!e&&typeof e.then==`function`}function h(e){return typeof e==`object`&&!!e&&typeof e[Symbol.asyncIterator]==`function`}function g(e){if(typeof e!=`object`||!e)return!1;let t=e;return h(t.chunks)&&m(t.finalResult)}const _=/* @__PURE__ */ new Set([`unknown_tool`,`duplicate_tool_call_id`,`tool_choice_none_violated`,`unexpected_tool_calls`]),v=e=>e.type===`parse`||e.type===`validation`||e.type===`aborted`||e.type===`quota_exceeded`||e.code&&_.has(e.code)||e.type===`invalid_params`&&e.code!==`unsupported_capability`?`stop`:`next`;var y=class extends e.s{attempts;constructor(e){let t=e[e.length-1]?.error;super(`${e.length} provider${e.length===1?``:`s`} attempted and failed: ${e.map(e=>`${e.provider}(${e.error.type})`).join(` then `)}`,`fallback_exhausted`,{status:t?.status,cause:t,retryAfterMs:t?.retryAfterMs,code:`fallback_exhausted`,attempts:e}),this.attempts=e}get retryable(){let e=this.attempts[this.attempts.length-1]?.error;return e?e.retryable:super.retryable}};function b(e){return e instanceof y}function x(){return{}}function S(e){return{debugName:e}}function C(e){return S(e)}function w(e){return S(e)}function ee(e){return{ref:e}}function T(e,t){return[e,t]}function E(e){let t=new Map(e);return{get(e){return t.get(e)},set(e,n){t.set(e,n)}}}function D(e){let{onError:t,...n}=e;return t?{...n,wrap:async(e,n,r)=>{try{return await n()}catch(e){try{await t(e,r)}catch{}throw e}}}:n}function te(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0}function ne(e,t){let n=e.completion_tokens_details?.reasoning_tokens,r=e.prompt_tokens_details;return{promptTokens:e.prompt_tokens??0,completionTokens:e.completion_tokens??0,totalTokens:e.total_tokens??0,...n===void 0?{}:{reasoningTokens:n},...r?.cached_tokens===void 0?{}:{cacheReadTokens:r.cached_tokens},...r?.cache_write_tokens===void 0?{}:{cacheWriteTokens:r.cache_write_tokens},...r?.cache_write_tokens_by_ttl?{cacheWriteTokensByTtl:{...r.cache_write_tokens_by_ttl}}:{},...te(e.cost)?{costUsd:e.cost}:{},requestId:t.requestId,model:t.model,provider:t.providerName,usedFallback:t.isFallback}}async function re(t,n,r){if(!t.reserveUsage)return!1;try{return await t.reserveUsage({coalesced:n,signal:r}),!0}catch(t){throw r?.aborted?new e.s(`LLM request aborted`,`aborted`):new e.s(t instanceof Error?t.message:`Usage reservation failed`,`quota_exceeded`,{cause:t})}}function ie(e,t,n,r){return async i=>{try{await e.refundUsage?.({coalesced:t,signal:n})}catch(e){r(i,e)}}}async function O(t,n,r,i,a){if(i?.aborted)throw new e.s(`LLM request aborted`,`aborted`);let o=await re(t,n,i),s=ie(t,n,i,a);if(i?.aborted)throw o&&await s(`[VernLLM] refundUsage failed after abort`),new e.s(`LLM request aborted`,`aborted`);let c;try{c=await r()}catch(e){throw o&&await s(`[VernLLM] refundUsage failed`),e}if(i?.aborted)throw o&&await s(`[VernLLM] refundUsage failed after abort`),new e.s(`LLM request aborted`,`aborted`);return c}async function ae(t,n,r,i){if(r?.aborted)throw new e.s(`LLM request aborted`,`aborted`);let a=await re(t,!1,r),o=ie(t,!1,r,i);if(r?.aborted)throw a&&await o(`[VernLLM] refundUsage failed after abort`),new e.s(`LLM request aborted`,`aborted`);let s;try{s=await n()}catch(e){throw a&&await o(`[VernLLM] refundUsage failed after stream-open failure`),e}let c=s.finalResult.then(e=>e,async e=>{throw a&&await o(`[VernLLM] refundUsage failed after stream error`),e});return c.catch(()=>{}),{chunks:s.chunks,finalResult:c}}function oe(e,t){let n=0;return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator](),i=!1,a=!1,o=()=>{a=!0,i&&(i=!1,n--)};return{async next(){!i&&!a&&(i=!0,n++);try{let e=await r.next();return e.done&&o(),e}catch(e){throw o(),e}},async return(){return a||(o(),n===0&&t()),await r.return?.(),{done:!0,value:void 0}}}}}}function se(e,t){if(!t)return e;let n=!1,r=()=>{n=!0};return e.finalResult.then(r,r),{chunks:oe(e.chunks,()=>{n||t.abort()}),finalResult:e.finalResult}}function ce(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function k(e,t,n){j(e,`[VernLLM] ${t} failed`,n)}function A(e){return e instanceof Error?e.message:`unknown`}function j(e,t,n){e.error(t,{message:A(n),stack:n instanceof Error?n.stack:void 0})}function M(e,t,n){try{n()}catch(n){k(e,t,n)}}function le(e){return{debug:ue(e,`debug`),warn:ue(e,`warn`),error:ue(e,`error`)}}function ue(e,t){let n=e[t].bind(e);return((...e)=>{try{fe(n(...e))}catch{}})}function de(e){return typeof e?.then==`function`}function fe(e){de(e)&&Promise.resolve(e).catch(()=>{})}var pe=class{debug(e){}warn(e){}error(e,t){}};function me(){let e=/* @__PURE__ */ new Map;function t(t){return e.get(t)}function n(t,n){return e.set(t,n),n.catch(()=>{}).finally(()=>{e.get(t)===n&&e.delete(t)}),n}return{get:t,track:n}}function he(e){return typeof e==`string`?e:JSON.stringify(e)??``}function ge(e,t){let n=[];if(t){let t=e;t.type===`tool_calls`?(t.toolCalls.forEach((e,t)=>{n.push({type:`tool_call_delta`,index:t,id:e.id,name:e.name,argsDelta:JSON.stringify(e.arguments??{}),complete:!0})}),t.content&&n.push({type:`text-delta`,delta:t.content})):n.push({type:`text-delta`,delta:he(t.content)})}else n.push({type:`text-delta`,delta:he(e)});return{async*[Symbol.asyncIterator](){for(let e of n)yield e}}}function _e(e,t){return{async*[Symbol.asyncIterator](){yield*ge(await e,t)}}}function ve(){let t=new AbortController,n=0,r=!1;return{signal:t.signal,get participants(){return n},join(){n++;let i=!1;return()=>{i||(i=!0,n--,n===0&&!r&&!t.signal.aborted&&t.abort(new e.s(`LLM request aborted`,`aborted`)))}},settle(){r=!0}}}function ye(){return new e.s(`LLM request aborted`,`aborted`)}function N(e,t){return t?t.aborted?(e.catch(()=>{}),Promise.reject(ye())):new Promise((n,r)=>{let i=()=>r(ye());t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e)})}):e}function be(e,t){return{async*[Symbol.asyncIterator](){let n=e[Symbol.asyncIterator]();try{for(;;){let e=await N(n.next(),t);if(e.done)return;yield e.value}}finally{Promise.resolve(n.return?.()).catch(()=>{})}}}}var xe=class{cache;logger;inFlight=me();sharedAborts=/* @__PURE__ */ new WeakMap;constructor(e,t){this.cache=e,this.logger=t}async resolveCacheKey(e){return this.cache.resolveKey?await this.cache.resolveKey(e):e}async deleteCache(e){if(this.cache.delete)try{await this.cache.delete(await this.resolveCacheKey(e))}catch(e){this.logger.warn(`[VernLLM] cache delete failed: ${A(e)}`)}}async getCached(e){try{return await this.cache.get(e)}catch(e){return this.logger.warn(`[VernLLM] cache read failed: ${A(e)}`),{hit:!1}}}async resolveKeyAndReadCache(e){let t=await this.resolveCacheKey(e.cacheKey);return{resolvedParams:t===e.cacheKey?e:{...e,cacheKey:t},cached:await this.getCached(t)}}inFlightFor(e){return this.inFlight.get(e)}joinable(e){let t=this.inFlight.get(e);if(!t)return;let n=this.sharedAborts.get(t);if(n&&!n.signal.aborted)return{promise:t,shared:n}}joinInFlight(e,t,n){let r=n.join(),i=O(e,!0,()=>N(t,e.signal),e.signal,(e,t)=>j(this.logger,e,t));return i.then(r,r),i}async runCached(e){let{resolvedParams:t,cached:n}=await this.resolveKeyAndReadCache(e);if(n.hit)return e.onOutcome?.(`hit`),n.value;let r=this.joinable(t.cacheKey);return r?(e.onOutcome?.(`join`),this.joinInFlight(t,r.promise,r.shared)):this.registerTrigger(t)}async runFresh(e){let t=await this.resolveCacheKey(e.cacheKey);return O(e,!1,()=>this.runAndCache({...e,cacheKey:t},e.signal),e.signal,(e,t)=>j(this.logger,e,t))}createShared(e,t){let n=ve(),{promise:r,resolve:i,reject:a}=ce();r.then(n.settle,n.settle),this.sharedAborts.set(r,n),this.inFlight.track(e,r);let o=!1,s=()=>{o=!0;let e=t(n.signal);return e.then(i,a),e};return{shared:n,promise:r,start:s,onTriggerFailed:e=>{o||(e.type===`aborted`&&n.participants>0?s():a(e))}}}registerTrigger(e){let{shared:t,promise:n,start:r,onTriggerFailed:i}=this.createShared(e.cacheKey,t=>this.runAndCache(e,t)),a=t.join(),o=O(e,!1,()=>N(r(),e.signal),e.signal,(e,t)=>j(this.logger,e,t));return o.then(a,e=>{a(),i(e)}),n.catch(()=>{}),o}async runAndCache(e,t){let n=await e.fn(t);return await this.writeCache(e.cacheKey,n,e.ttl),n}async writeCache(e,t,n){if(typeof n!=`number`||Number.isNaN(n))this.logger.warn(`[VernLLM] cachedCall ttl must be a number of seconds, got ${String(n)}. Nothing is cached.`);else try{await this.cache.set(e,t,n)}catch(e){this.logger.warn(`[VernLLM] cache write failed: ${A(e)}`)}}async runCachedStream(e,t){let{resolvedParams:n,cached:r}=await this.resolveKeyAndReadCache(e);if(r.hit){e.onOutcome?.(`hit`);let n=r.value;return{chunks:ge(n,t),finalResult:Promise.resolve(n)}}let i=this.joinable(n.cacheKey);if(i){e.onOutcome?.(`join`);let r=this.joinInFlight(n,i.promise,i.shared);return r.catch(()=>{}),{chunks:_e(r,t),finalResult:r}}return this.registerStreamTrigger(n)}async runFreshStream(e){let t=await this.resolveCacheKey(e.cacheKey),n=new AbortController,r=AbortSignal.any([e.signal,n.signal]);return ae(e,async()=>{let i=await e.openStream(r),a=i.finalResult.then(async n=>(await this.writeCache(t,n,e.ttl),n));return a.catch(()=>{}),{chunks:oe(i.chunks,()=>n.abort()),finalResult:a}},e.signal,(e,t)=>j(this.logger,e,t))}registerStreamTrigger(e){let t,n=n=>(t??=e.openStream(n).then(t=>({chunks:t.chunks,finalResult:t.finalResult.then(async t=>(await this.writeCache(e.cacheKey,t,e.ttl),t))})),t),{shared:r,promise:i,start:a,onTriggerFailed:o}=this.createShared(e.cacheKey,async e=>(await n(e)).finalResult),s=r.join();i.catch(()=>{});let c=new AbortController,l=e.signal?AbortSignal.any([e.signal,c.signal]):c.signal,u=ae(e,async()=>{a().catch(()=>{});let t=await N(n(r.signal),e.signal),i=N(t.finalResult,l);return i.catch(()=>{}),{chunks:oe(be(t.chunks,e.signal),()=>c.abort()),finalResult:i}},e.signal,(e,t)=>j(this.logger,e,t)),d=e=>{s(),o(e)};return u.then(e=>{e.finalResult.then(s,d)},d),u}};function Se(e,t,n){let r=e.get(t);if(r)return{holder:r,release:()=>{}};let i={};return e.set(t,i),{holder:i,release:()=>{let r=()=>e.delete(t),i=n(t);i?i.then(r,r):r()}}}var Ce=class{buckets;bucketStartMs=Date.now();bucketWidthMs;constructor(e){if(!Number.isFinite(e)||e<=0)throw RangeError(`RollingRatio: windowMs must be a finite number > 0, got ${e}`);this.bucketWidthMs=e/10,this.buckets=Array.from({length:10},()=>({total:0,failures:0}))}rotate(){let e=Date.now()-this.bucketStartMs,t=Math.floor(e/this.bucketWidthMs),n=Math.min(10,t);for(let e=0;e<n;e++)this.buckets.shift(),this.buckets.push({total:0,failures:0});t>0&&(this.bucketStartMs+=t*this.bucketWidthMs)}record(e){this.rotate();let t=this.buckets[9];t.total+=1,e&&(t.failures+=1)}getRatio(){this.rotate();let e=this.buckets.reduce((e,t)=>e+t.total,0),t=this.buckets.reduce((e,t)=>e+t.failures,0);return e===0?0:t/e}getCount(){return this.rotate(),this.buckets.reduce((e,t)=>e+t.total,0)}reset(){this.buckets=Array.from({length:10},()=>({total:0,failures:0})),this.bucketStartMs=Date.now()}};function we(e,t=`minCalls`){if(!Number.isInteger(e)||e<0)throw RangeError(`${t} must be a non-negative integer, got ${e}`)}function Te(e,t){if(!Number.isFinite(e)||e<0||e>1)throw RangeError(`${t} must be a finite number between 0 and 1, got ${e}`)}var Ee=class{options;ratio;constructor(e){this.options=e,this.ratio=new Ce(e.windowMs),we(e.minCalls),Te(e.retryRatio,`retryRatio`)}assertAvailable(){if(this.ratio.getCount()>=this.options.minCalls&&this.ratio.getRatio()>=this.options.retryRatio)throw new e.s(`Retry budget exhausted`,`rate_limited`,{code:`retry_budget_exhausted`})}recordAttempt(e){this.ratio.record(e)}getSnapshot(){return{attempts:this.ratio.getCount(),retryRatio:this.ratio.getRatio()}}};const De=Object.freeze({name:`custom`});function Oe(e){let t=e.adapter;return!t||typeof t.name!=`string`||t.name.trim()===``?De:Object.freeze(typeof t.provider==`string`&&t.provider.trim()!==``?{name:t.name,provider:t.provider}:{name:t.name})}function ke(e,t,n={}){return r=>{e&&M(t,`onEvent`,()=>e(r)),r.kind===`usage`&&n.onUsage&&M(t,`onUsage`,()=>n.onUsage(r.usage)),r.kind===`usage_failure`&&n.onUsageFailure&&M(t,`onUsageFailure`,()=>n.onUsageFailure(r.usage,r.error))}}function P(e,t,n){let r=e[t];if(!r)throw RangeError(`${n}: no target at index ${t} (chain has ${e.length} target${e.length===1?``:`s`})`);return r}function F(e,t,n,r){t!==void 0&&!e&&r.warn(`[VernLLM] ${n}: \`model: '${t}'\` has no effect here. This target's circuitBreaker doesn't have isolateByModel on, so it only tracks one shared circuit regardless of \`model\`. Omit \`model\`, or set \`circuitBreaker.isolateByModel: true\` on this target if per-model tracking is what you want.`)}function I(e,t,n){Promise.resolve(n).catch(n=>{try{e.error(t,{message:n instanceof Error?n.message:String(n)})}catch{}})}async function Ae(t,n,r,i){let a=r?.signal;if(a?.aborted)throw new e.s(`Circuit breaker check aborted`,`aborted`);let o=t.prepareTimeoutMs??1e3,s;try{s=Promise.resolve(t.prepare(n,r))}catch(e){je(i,e);return}let c,l,u=await Promise.race([s.then(()=>`ready`,e=>({failed:e})),new Promise(e=>{c=setTimeout(()=>e(`timeout`),o)}),new Promise(e=>{a&&(l=()=>e(`aborted`),a.addEventListener(`abort`,l,{once:!0}),a.aborted&&l())})]).finally(()=>{clearTimeout(c),a&&l&&a.removeEventListener(`abort`,l)});if(u===`aborted`)throw new e.s(`Circuit breaker check aborted`,`aborted`);u===`timeout`?i.warn(`[VernLLM] circuitBreaker.prepare took longer than ${o}ms, continuing with the adapter's local state`):u!==`ready`&&je(i,u.failed)}function je(e,t){e.warn(`[VernLLM] circuitBreaker.prepare failed, continuing with the adapter's local state: ${t instanceof Error?t.message:String(t)}`)}const Me=Symbol(`deadlineExceeded`),Ne=2147483647;function Pe(e,t){if(e===void 0||Number.isNaN(e)||e>2147483647)return{signal:t,timer:void 0};let n=new AbortController;if(e<=0)return n.abort(Me),{signal:t?AbortSignal.any([t,n.signal]):n.signal,timer:void 0};let r=setTimeout(()=>n.abort(Me),e);return{signal:t?AbortSignal.any([t,n.signal]):n.signal,timer:r}}function Fe(t,n){return t instanceof e.s&&t.type===`aborted`&&t.code===void 0&&n?.reason===Me&&(t.code=`deadline_exceeded`),t}function Ie(e,t=Date.now()){let{stream:n,targets:r,deadlineMs:i}=e,a=i!==void 0&&!Number.isNaN(i)&&i<=2147483647;return{streaming:n===!0,...r===void 0?{}:{callTargets:Object.freeze([...r])},...a?{deadlineAt:t+i}:{}}}function L(e){return R.get(e)?.facts??{}}const R=/* @__PURE__ */ new WeakMap;function Le(e,t){R.has(e)||R.set(e,t)}function z(e){return R.get(e)}const B=()=>{};function Re(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ze(e,t=/* @__PURE__ */ new Set){if(e===null||typeof e==`string`||typeof e==`boolean`)return!0;if(typeof e==`number`)return Number.isFinite(e);let n=Array.isArray(e)?Array.from(e):Re(e)?Object.values(e):void 0;if(n===void 0||t.has(e))return!1;t.add(e);let r=n.every(e=>ze(e,t));return t.delete(e),r}function Be(e){return typeof e==`object`&&e&&(Object.values(e).forEach(Be),Object.freeze(e)),e}function Ve(t){if(t===void 0)return;let n=!1;try{n=Re(t)&&ze(t)}catch{n=!1}if(!n)throw new e.s("`context` must be a plain JSON object",`invalid_params`,{code:`invalid_context`});return Be(structuredClone(t))}function He(e){if(!Array.isArray(e)||e.length!==2)return!1;let t=e[0];return typeof t==`object`&&!!t&&typeof t.debugName==`string`}function Ue(t){if(t!==void 0){if(!Array.isArray(t)||!t.every(He))throw new e.s("`state` must be an array of [key, value] pairs, with keys made by createStateKey",`invalid_params`);return t}}function V(e,t){return e.name??`[${t}]`}function We(e){return Object.freeze(e.map((e,t)=>V(e,t)))}const Ge=/* @__PURE__ */ new WeakMap;function H(e){let t=Ge.get(e);if(!t){let n=We(e);t={registeredMiddlewareNames:n,transformMiddlewareNames:Object.freeze(n.filter((t,n)=>e[n].transform!==void 0))},Ge.set(e,t)}return t}const Ke=1e4,qe=[{name:`Retry-After-Ms`,kind:`ms`},{name:`X-Retry-After-Ms`,kind:`ms`},{name:`Retry-After`,kind:`seconds`},{name:`Retry-After`,kind:`date`}];function Je(e,t){let n=e;if(typeof n.get==`function`)return n.get(t)??void 0;let r=Object.entries(e).find(([e])=>e.toLowerCase()===t.toLowerCase())?.[1];return typeof r==`string`?r:void 0}function Ye(e,t){return e<0?void 0:Math.min(e,t)}function Xe(e,t=Ke){if(!e||typeof e!=`object`)return;let n=e,r=n.headers??n.response?.headers;if(r&&typeof r==`object`)for(let{name:e,kind:n}of qe){let i=Je(r,e)?.trim();if(i){if(n===`ms`&&/^\d+$/.test(i))return Ye(Number(i),t);if(n===`seconds`&&/^\d+(\.\d+)?$/.test(i))return Ye(Number(i)*1e3,t);if(n===`date`){let e=Date.parse(i);if(!Number.isNaN(e))return Ye(e-Date.now(),t)}}}}function Ze(e,t){if(typeof e!=`number`||Number.isNaN(e)||e<0)throw RangeError(`${t}: maxRetryAfterMs must be 0 or more (Infinity for no cap), got ${String(e)}`);return e}function Qe(e){return!e||e<=0||e===1/0?void 0:e}function U(e){return Math.min(e,Ne)}async function $e(t,n,r){let i=new AbortController,a=Qe(n),o=r?AbortSignal.any([r,i.signal]):i.signal,s=()=>new e.s(`Request timed out`,`timeout`,{code:`request_timeout`}),c,l=new Promise((e,t)=>{a!==void 0&&(c=setTimeout(()=>{i.abort(),t(s())},U(a)))});try{return await Promise.race([t(o),l])}catch(t){throw i.signal.aborted&&!r?.aborted?t instanceof e.s&&t.type===`timeout`?t:s():t}finally{clearTimeout(c)}}function et(t,n,r,i){let a=Qe(n);if(a===void 0)return t();let o=!1;return new Promise((n,s)=>{let c=setTimeout(()=>{o=!0,r?.(),s(new e.s(`No stream chunk received for ${a}ms (idle timeout)`,`timeout`,{code:`idle_timeout`}))},U(a));t().then(e=>{clearTimeout(c),o?i?.debug(`[VernLLM] chunk resolved after idle timeout already fired; discarding`):(o=!0,n(e))},e=>{clearTimeout(c),o?i?.debug(`[VernLLM] chunk rejection arrived after idle timeout already fired; discarding`):(o=!0,s(e))})})}function tt(e){return Math.random()*e}function nt(e,t,n=Ke,r=!1,i=!1){return tt(Math.min(e*(r?2:i?1.5:1)*2**t,n))}async function rt(t,n){if(n?.aborted)throw new e.s(`Operation aborted`,`aborted`);await new Promise((r,i)=>{let a=()=>{clearTimeout(o),i(new e.s(`Operation aborted`,`aborted`))},o=setTimeout(()=>{n?.removeEventListener(`abort`,a),r()},U(t));n?.addEventListener(`abort`,a,{once:!0})})}function it(t,n,r,i){if(i?.aborted||t instanceof e.s&&!t.retryable)return!1;let a=r(t);return!(a!==void 0&&n.includes(a))}async function at(e){let{requestId:t,model:n,attempt:r,error:i,state:a,signal:o,providerName:s,maxRetries:c,baseDelayMs:l,maxRetryAfterMs:u,middleware:d,middlewareTimeoutMs:f,logger:p,reportEvent:m,buildEventContext:h,extractStatus:g,normalizeError:_,emitEvent:v}=e,y=Xe(i,u),b=g(i),x=y??nt(l,r,void 0,b===429,b!==void 0&&b>=500&&b<=599),S=y!==void 0;p.warn(`[VernLLM:${t}] recovery attempt ${r}/${c}, waiting ${Math.ceil(x)}ms`+(S?` (honoring Retry-After)`:``)),v({kind:`retry`,requestId:t,provider:s,model:n,attempt:r,maxRetries:c,delayMs:x,retryAfterHonored:S,error:_(i,o)},h(t,n,r,o,a),m,d,f,p),await rt(x,o)}function ot(e){return typeof e!=`number`||Number.isNaN(e)||e<0?0:Math.floor(e)}async function st(e){let{fn:t,signal:n,onAttempt:r,attempts:i,shouldRetryAttempt:a,recoverDelayForAttempt:o,normalizeError:s}=e,c=ot(e.maxRetries),l,u;for(let e=0;e<=c;e++){u=void 0;try{return e>0&&await o(e,l),r?.(),await t(e,e=>{u=e})}catch(t){if(l=t,!(e<c&&a(t,n)))break;i?.push({index:e,error:s(t,n).toSnapshot(),request:u})}}throw l}function W(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.status==`number`)return t.status;if(typeof t.statusCode==`number`)return t.statusCode;if(typeof t.$metadata?.httpStatusCode==`number`)return t.$metadata.httpStatusCode}const ct=/* @__PURE__ */ new Set([`ECONNREFUSED`,`ENOTFOUND`,`ECONNRESET`,`ETIMEDOUT`,`EAI_AGAIN`,`EPIPE`,`ECONNABORTED`,`EHOSTUNREACH`,`ENETUNREACH`]),lt=/* @__PURE__ */ new Set([`fetch failed`,`failed to fetch`,`load failed`,`networkerror when attempting to fetch resource.`]);function ut(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.code==`string`&&ct.has(t.code)||typeof t.message==`string`&<.has(t.message.toLowerCase()))return!0;if(t.cause&&typeof t.cause==`object`){let e=t.cause;if(typeof e.code==`string`&&ct.has(e.code))return!0}return!1}function dt(e){try{return JSON.stringify(e,null,2)??String(e)}catch{try{return String(e)}catch{return`[unprintable error]`}}}function ft(e){if(e&&typeof e==`object`)try{let t=e;if(t.error!==void 0)return dt(t.error);if(typeof t.message==`string`)return t.message}catch{}return dt(e)}function pt(e){switch(e){case 429:return`provider_rate_limited`;case 401:return`authentication`;case 403:return`authorization`;case 404:return`not_found`;case 413:return`payload_too_large`;default:return e>=500?`server_error`:void 0}}const mt=/\(no body\)/i;function ht(e){return Object.keys(e).length===0}function gt(e){
|
|
7
|
+
/* v8 ignore next */
|
|
8
|
+
if(e&&typeof e==`object`){let{error:t,message:n}=e;if(t!=null){let e=typeof t==`string`&&t.trim().length===0,n=typeof t==`object`&&ht(t);if(!e&&!n)return!1}if(typeof n==`string`){let e=n.trim();return e.length===0||mt.test(e)}return!0}
|
|
9
|
+
/* v8 ignore next */
|
|
10
|
+
return!0}function G(t,n,r,i){if(n?.aborted)return new e.s(`LLM request aborted`,`aborted`,{attempts:r});if(t instanceof e.s)return t.code===void 0&&t.status!==void 0&&(t.code=pt(t.status)),t.attempts===void 0&&r!==void 0&&(t.attempts=r),i!==void 0&&t.retryAfterMs!==void 0&&(t.retryAfterMs=Math.min(t.retryAfterMs,i)),t;let a=W(t),o=Xe(t,i);if(a!==void 0){let n=ft(t),i=pt(a),s=i===void 0,c=gt(t)?s?`LLM request failed with status ${a} and no error detail from the provider. This usually means a field or value in the request isn't supported by the specific model (for example, a reasoning/thinking parameter the model doesn't accept), rather than a transport or auth problem.`:`LLM request failed with status ${a} and no error detail from the provider.`:`LLM request failed: ${n}`;return new e.s(c,`api`,{status:a,cause:t,retryAfterMs:o,code:i,attempts:r})}return ut(t)?new e.s(`LLM request failed`,`network`,{cause:t,retryAfterMs:o,code:`connection_failed`,attempts:r}):new e.s(`LLM request failed`,`unknown`,{cause:t,retryAfterMs:o,attempts:r})}function _t(e){let t=!1,n,r;function i(){return r||(t=!0,r=e().then(e=>(n=e,e)),r.catch(()=>{}),r)}return{call:i,wasCalled:()=>t,resolvedValue:()=>n}}const vt=[`temperature`,`max_tokens`,`reasoning_effort`,`budget_tokens`,`tool_choice`,`messages`,`addMessages`,`tools`,`addTools`];function yt(e,t){let n=t,r=vt.filter(e=>t[e]!==void 0);if(n.model!==void 0&&r.push(`model`),n.response_format!==void 0&&r.push(`response_format`),r.length===0)return{request:e,patchedFields:[]};let i={...e};return n.model!==void 0&&(i.model=n.model),n.response_format!==void 0&&(i.response_format=n.response_format),t.temperature!==void 0&&(i.temperature=t.temperature),t.max_tokens!==void 0&&(i.max_tokens=t.max_tokens),t.reasoning_effort!==void 0&&(i.reasoning_effort=t.reasoning_effort),t.budget_tokens!==void 0&&(i.budget_tokens=t.budget_tokens),t.tool_choice!==void 0&&(i.tool_choice=t.tool_choice),t.messages!==void 0&&(i.messages=t.messages),t.addMessages!==void 0&&t.addMessages.length>0&&(i.messages=[...i.messages,...t.addMessages]),t.tools!==void 0&&(i.tools=t.tools),t.addTools!==void 0&&t.addTools.length>0&&(i.tools=[...i.tools??[],...t.addTools]),{request:i,patchedFields:r}}function bt(t,n){if(!t.tools)return;let r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set;for(let e of t.tools)r.has(e.function.name)&&i.add(e.function.name),r.add(e.function.name);if(i.size>0)throw new e.s(`middleware "${n}" added tool(s) with duplicate name(s): [${[...i].join(`, `)}]. Tool names must be unique.`,`invalid_params`,{code:`duplicate_tool_names`,issues:{names:[...i]}})}function xt(t,n,r){if(n.model!==t.model)throw new e.s(`middleware "${r}" changed \`model\` via transform, which isn't supported. Configure the target's model instead.`,`invalid_params`);if(JSON.stringify(n.response_format)!==JSON.stringify(t.response_format))throw new e.s(`middleware "${r}" changed \`response_format\` via transform, which isn't supported.`,`invalid_params`)}const St=/* @__PURE__ */ new WeakMap,Ct=/* @__PURE__ */ new WeakMap;function wt(e){let t=Ct.get(e);return t||(t={starts:/* @__PURE__ */ new Map,layers:/* @__PURE__ */ new Map},Ct.set(e,t)),t}function Tt(e,t){wt(e).layers=t}function Et(e,t,n){wt(e).starts.set(t,n)}function Dt(e,t,n){let r=Ct.get(e),i=r?.layers.get(n)??1/0,a=t;for(;a>0;){let e=r?.starts.get(a);if(e===void 0||i>e.layer)break;a=e.parent}return a}function K(e,t,n){let r=St.get(e.state);r||(r=/* @__PURE__ */ new Map,St.set(e.state,r));let i=r.get(t);i||(i=/* @__PURE__ */ new Map,r.set(t,i));let a=Dt(e.state,e.chain??0,t),o=i.get(a);return o||(o={},i.set(a,o)),{...e,own:o,emit:(t,r)=>z(e.state)?.emitCustom(t,r,n,e)}}function Ot(t,n,r){return n<=0?t():new Promise((i,a)=>{let o=setTimeout(()=>{a(new e.s(`middleware "${r}" timed out after ${n}ms`,`timeout`,{code:`middleware_timeout`}))},n);t().then(e=>{clearTimeout(o),i(e)},e=>{clearTimeout(o),a(e)})})}async function kt(e,t,n,r,i){let{enabled:a}=e;if(a===void 0)return!0;if(typeof a==`boolean`)return a;let o=e.timeoutMs??r;try{return await Ot(async()=>a(K(t,e,n)),o,n)}catch(e){return j(i,`[VernLLM] middleware "${n}".enabled threw or timed out, treating as disabled`,e),!1}}async function At(e){let{request:t,requestId:n,attempt:r,signal:i,state:a,middleware:o,middlewareTimeoutMs:s,logger:c,reportEvent:l,buildContext:u,enabledEntries:d}=e;if(o.length===0)return t;let f=t,p=t;for(let[e,t]of o.entries()){let f=V(t,e),m=u(r,i,a);if(!await kt(t,m,f,s,c)){t.enabled!==void 0&&q({kind:`middleware`,requestId:n,middleware:f,hook:`enabled_skip`},m,l,o,s,c);continue}if(d?.add(t),!t.transform)continue;let h=await jt(t,structuredClone(p),m,f,s),{request:g,patchedFields:_}=yt(p,h);_.length>0&&((h.tools!==void 0||h.addTools?.length)&&bt(g,f),q({kind:`middleware`,requestId:n,middleware:f,hook:`transform`,patchedFields:_},m,l,o,s,c)),p=g}return xt(f,p,`chain`),p}async function jt(e,t,n,r,i){if(!e.transform)return{};let a=e.timeoutMs??i;try{return await Ot(async()=>e.transform(t,K(n,e,r)),a,r)}catch(e){throw Nt(e,r,n.signal)}}async function Mt(t){let{request:n,hooks:r,ctx:i,send:a,logger:o}=t;if(r.length===0)return a();let s=_t(a),c=async t=>{if(t===r.length)return s.call();let{entry:a,label:l}=r[t],u=_t(()=>c(t+1)),d;try{await a.dispatch(structuredClone(n),u.call,K(i,a,l))}catch(e){d={error:e}}if(!u.wasCalled())throw d?Nt(d.error,l,i.signal):new e.s(`middleware "${l}".dispatch returned without calling next(), so no request was sent`,`invalid_params`,{code:`middleware_threw`});try{await u.call()}catch(e){throw d&&d.error!==e&&k(o,`middleware "${l}".dispatch`,d.error),e}d&&k(o,`middleware "${l}".dispatch`,d.error)};return c(0)}function Nt(t,n,r){let i=G(t,r);return i.type===`unknown`?new e.s(`middleware "${n}" threw: ${i.message}`,`invalid_params`,{code:`middleware_threw`,cause:t}):i}function q(e,t,n,r,i,a){let o=Pt(e,t);n(o),r.length!==0&&It(r,o,t,i,a)}function Pt(e,t){let{context:n,chain:r}=t;if(n===void 0&&r===void 0)return e;let i={...n===void 0?{}:{context:n},...r===void 0?{}:{chain:r}};return n!==void 0&&(e.kind===`usage`||e.kind===`usage_failure`)?{...e,...i,usage:{...e.usage,context:n}}:{...e,...i}}function Ft(e,t,n,r,i){try{Promise.resolve(e.onEvent(n,K(r,e,t))).catch(e=>{k(i,`middleware "${t}".onEvent`,e)})}catch(e){k(i,`middleware "${t}".onEvent`,e)}}function It(e,t,n,r,i){for(let a=0;a<e.length;a++){let o=e[a];if(!o.onEvent)continue;let s=V(o,a),{enabled:c}=o;if(c===void 0||c===!0)Ft(o,s,t,n,i);else if(c===!1)continue;else kt(o,n,s,r,i).then(e=>{e&&Ft(o,s,t,n,i)})}}function Lt(e,t=e){let n=new Map(e.map((e,t)=>[e,t]));return t.flatMap(e=>e.dispatch?[{entry:e,label:V(e,n.get(e))}]:[])}const Rt=/* @__PURE__ */ new WeakSet;function zt(e){return Rt.has(e)}async function Bt(e,t,n,r){if(!e)return{};let i;try{i=await e.acquire(e.estimate(t),n)}catch(e){let t=G(e,n);throw Rt.add(t),t}return i.waitedMs>0&&r(i.waitedMs,i.reason??`rpm`),{release:i.release}}async function Vt(t){let{params:n,requestId:r,attempt:i,onRequest:a,middlewareState:o,gateway:s,requestBuilder:c,providerName:l,limiter:u,middleware:d,dispatchHooks:f,middlewareTimeoutMs:p,logger:m,reportEvent:h}=t,g=o??E(),_=c.build(n),{useJson:v,model:y}=_,b=/* @__PURE__ */ new Set,x=await At({request:_.request,requestId:r,attempt:i,signal:n.signal,state:g,middleware:d,middlewareTimeoutMs:p,logger:m,reportEvent:h,buildContext:(e,t,n)=>s.buildAttemptContext(e,t,n),enabledEntries:b});a?.(e.u(l,y,x,void 0,Date.now()));let{release:S}=await Bt(u,x,n.signal,(e,t)=>{q({kind:`rate_limited`,requestId:r,provider:l,model:y,waitedMs:e,reason:t},s.buildAttemptContext(i,n.signal,g),h,d,p,m)}),C=f.filter(e=>b.has(e.entry));return{request:x,model:y,useJson:v,state:g,release:S,dispatch:e=>Mt({request:x,hooks:C,ctx:s.buildAttemptContext(i,n.signal,g),send:e,logger:m})}}function Ht(e,t){return Vt({...t,requestBuilder:e.requestBuilder,providerName:e.providerName,limiter:e.limiter,middleware:e.middleware,dispatchHooks:e.dispatchHooks,middlewareTimeoutMs:e.middlewareTimeoutMs,logger:e.logger,reportEvent:e.reportEvent})}function Ut(e,t){return e.redact?e.redact(t):t}function Wt(e,t,n){return{gateway:t,usageReporter:e.usageReporter,logger:e.logger,redactText:t=>Ut(e,t),parseJson:e.parseJson,detectSoftFailure:e.detectSoftFailure,providerName:e.providerName,isFallback:e.isFallback,model:n}}function Gt(e){return e.countsTowardBreaker&&!zt(e)}function Kt(e){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}function qt(e){return e.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.arguments??{})}}))}function Jt(t){return t.map(t=>{let n;try{n=t.function.arguments.trim()?JSON.parse(t.function.arguments):{}}catch{throw new e.s(`Invalid JSON arguments for tool call "${t.function.name}"`,`parse`,{code:`tool_arguments_parse_failed`})}return{id:t.id,name:t.function.name,arguments:n}})}function Yt(t,n,r){let i;try{i=r(t)}catch{throw new e.s(`Invalid JSON response`,`parse`)}if(i==null)throw new e.s(`Invalid JSON response`,`parse`);if(!n)return i;let a=n.safeParse(i);if(!a.success)throw new e.s(`Schema validation failed`,`validation`,{issues:a.error});return a.data}function Xt(t,n){let r=new Map(n.map(e=>[e.name,e])),i=/* @__PURE__ */ new Set,a=[];for(let e of t)i.has(e.id)&&a.push({name:e.name,toolCallId:e.id,code:`duplicate_tool_call_id`}),i.add(e.id),r.has(e.name)||a.push({name:e.name,toolCallId:e.id,code:`unknown_tool`});if(a.length>0){let t=a.find(e=>e.code===`unknown_tool`),n=t?`Model requested tool "${t.name}", which was not in the tools offered ([${[...r.keys()].join(`, `)}]).`:`Duplicate tool call id "${a[0].toolCallId}" in the model's response.`,i=a.length>1?`${n} (${a.length} tool call issues total, see error.issues.)`:n;throw new e.s(i,`validation`,{code:t?`unknown_tool`:`duplicate_tool_call_id`,issues:a})}return t.map(t=>{let n=r.get(t.name);if(!n?.argumentsSchema)return t;let i=n.argumentsSchema.safeParse(t.arguments);if(!i.success)throw new e.s(`Arguments for tool call "${t.name}" failed validation`,`validation`,{issues:i.error});return{...t,arguments:i.data}})}function Zt(){return new e.s(`The model refused the request`,`invalid_params`,{code:`model_refused`})}function Qt(t){let{rawContent:n,wireToolCalls:r,refusal:i,params:a,useJson:o,parseJson:s,requestId:c,logger:l,redactText:u}=t,d=n?.trim();if(!d&&!r?.length)throw i?Zt():new e.s(`Empty LLM response`,`api`,{code:`empty_response`});let f=u(d??`[${r.length} tool call(s)]`),p=f.length>800;if(l.debug(`[VernLLM:${c}] output:\n`+f.slice(0,800)+(p?`... (truncated, ${f.length} chars total)`:``)),r?.length){if(!a.tools)throw new e.s("Provider returned tool_calls but no `tools` were sent with this call.",`validation`,{code:`unexpected_tool_calls`});if(a.toolChoice===`none`)throw new e.s(`Provider returned tool_calls despite toolChoice: 'none'.`,`validation`,{code:`tool_choice_none_violated`});return{type:`tool_calls`,toolCalls:Xt(Jt(r),a.tools),...d?{content:d}:{}}}
|
|
11
|
+
/* v8 ignore next */
|
|
12
|
+
let m=d??``;if(!o)return a.tools?{type:`content`,content:m}:m;let h=Yt(m,a.schema,s);return a.tools?{type:`content`,content:h}:h}function $t(t,n,r,i,a,o,s,c,l,u=!1,d,f){let{gateway:p,usageReporter:m,logger:h,redactText:g,parseJson:_,detectSoftFailure:v}=l;try{let u=en(Qt({rawContent:t,wireToolCalls:n,refusal:f,params:r,useJson:i,parseJson:_,requestId:o,logger:h,redactText:g}),d),y=nn(v,u,{requestId:o,model:l.model,providerName:l.providerName,isFallback:l.isFallback,attempt:s+1,usage:a},h);if(y!==void 0)throw new e.s(`Soft failure detected`,`api`,{code:y});return p.recordSuccess(s,r.signal,c),m.reportSuccess(a,p.buildAttemptContext(s,r.signal,c)),u}catch(e){let t=tn(G(e,r.signal),u);throw a&&t.type!==`aborted`&&m.reportFailure(a,t,s,p.buildAttemptContext(s,r.signal,c)),t}}function en(e,t){return!t?.length||!p(e)?e:{...e,thinking:t}}function tn(t,n){return!n||t.type!==`parse`?t:new e.s(`Response was cut off at max_tokens before it could be parsed: ${t.message}`,`parse`,{code:`response_truncated`,cause:t})}function nn(e,t,n,r){if(e)try{return e(t,n)}catch(e){let t=e instanceof Error?e.message:String(e),n=e instanceof Error&&e.stack?`\n${e.stack}`:``;r.warn(`[VernLLM] detectSoftFailure threw and was ignored, treated as no soft failure: ${t}${n}`);return}}const rn=/* @__PURE__ */ new Set([`stop`,`length`,`tool_calls`,`refusal`,`guardrail`,`content_filter`,`other`]);function an(e,t=!1){let n=e?e===`function_call`?`tool_calls`:e:void 0,r=n===void 0?void 0:rn.has(n)?n:`other`;return t&&(r===void 0||r===`stop`)?`refusal`:r}function on(e,t){e&&W(t)===429&&e.signalRateLimit()}async function sn(t,n,r,i){let a;try{await n(async()=>{try{await i()}catch(n){throw t.redact&&e.n(n,t.redact),on(t.limiter,n),a={error:n},G(n,r,void 0,t.maxRetryAfterMs)}})}catch(e){throw a?a.error:e}}async function cn(t,n){let{params:r,requestId:i,attempt:a,gateway:o}=n,{request:s,model:c,useJson:l,state:u,release:d,dispatch:f}=await Ht(t,n),p=d;try{let d;await sn(t,f,r.signal,async()=>{d=await $e(e=>t.client.chat.completions.create(s,{signal:e}),t.timeoutMs,r.signal)}),t.limiter?.reactToRateLimitHint(e.o(d));let m=t.usageReporter.extract(d,i,c),h=t.usageReporter.actualTokensFor(m),g=d.choices?.[0],_=g?.message?.content,v=g?.message?.tool_calls,y=g?.finish_reason===`length`,b=g?.message?.thinking,x=g?.message?.refusal,S=an(g?.finish_reason,!!x),C;try{C=$t(_,v,r,l,m,i,a,u,Wt(t,o,c),y,b,x)}catch(e){throw p?.(h),p=void 0,e}return p?.(h,!0),p=void 0,n.onFinish?.(S),C}finally{p?.()}}function ln(e){let{capacity:t,logger:n,label:r,stallError:i}=e,a=i?Qe(e.stallTimeoutMs):void 0,o=[],s=[],c=!1,l=!1,u,d=!1,f=0,p=[],m,h;function g(){h=void 0,m={error:i()},n.warn(`[VernLLM] ${r} reader held a full buffer for ${a}ms; detaching it so the stream can finish.`),o.length=0,_()}function _(){clearTimeout(h),h=void 0;let e=p;p=[];for(let t of e)t()}function v(e){if(m)return;let i=s.shift();if(i)i.resolve({done:!1,value:e});else{if(o.push(e),f>0)return o.length<t?void 0:(a!==void 0&&h===void 0&&(h=setTimeout(g,U(a))),new Promise(e=>{p.push(e)}));o.length>t*2&&(d||(d=!0,n.warn(`[VernLLM] ${r} buffer exceeded cap (${t}), evicting ${o.length-t} oldest item(s); buffered=${o.length}. The iterable was never read (or fell far behind) for this channel.`)),o.splice(0,o.length-t))}}function y(){c=!0,_();for(let e of s.splice(0))e.resolve({done:!0,value:void 0})}function b(e){c=!0,l=!0,u=e,_();for(let t of s.splice(0))t.reject(e)}return{push:v,finish:y,fail:b,iterable:{[Symbol.asyncIterator](){let e={},n=!1;return{next(){if(n||(n=!0,f++),m)return Promise.reject(m.error);if(o.length){let e=o.shift();return o.length<t&&_(),Promise.resolve({done:!1,value:e})}return c?l?Promise.reject(u):Promise.resolve({done:!0,value:void 0}):new Promise((t,n)=>{s.push({owner:e,resolve:t,reject:n})})},return(){n&&(n=!1,f--);for(let t=s.length-1;t>=0;t--)s[t].owner===e&&s.splice(t,1)[0].resolve({done:!0,value:void 0});return f===0&&_(),Promise.resolve({done:!0,value:void 0})}}}}}}const un=1e4,dn=1e6;function fn(){let t=/* @__PURE__ */ new Map;function n(n){let r=t.get(n.index);if(!r){if(t.size>=un)throw new e.s(`Stream contained more than ${un} distinct tool calls`,`validation`);r={args:``}}let i=n.argumentsDelta??``;if(r.args.length+i.length>dn)throw new e.s(`Tool call arguments exceeded the ${dn}-character stream limit`,`validation`);return r.id??=n.id,r.name??=n.name,r.args+=i,t.set(n.index,r),{type:`tool_call_delta`,index:n.index,id:n.id,name:n.name,argsDelta:n.argumentsDelta,complete:n.complete}}function r(){if(t.size)return[...t.entries()].sort(([e],[t])=>e-t).map(([,e])=>({id:e.id??``,type:`function`,function:{name:e.name??``,arguments:e.args}}))}return{apply:n,toWireToolCalls:r}}function pn(e,t,n){let r=fn(),i=[],a=``,o,s,c=!1;return{apply(l){switch(l.type){case`rate_limit_hint`:n?.(l.hint);return;case`text-delta`:return a+=l.delta,t({type:`text-delta`,delta:l.delta});case`tool_call_delta`:return t(r.apply(l));case`thinking_block`:i.push(l.block);return;case`usage`:return o=ne(l.usage,e),t({type:`usage`,usage:o});case`finish`:s=l.reason;return;case`refusal`:c=!0;return;default:return}},get usage(){return o},result:()=>({text:a,wireToolCalls:r.toWireToolCalls(),usage:o,thinking:i.length?i:void 0,finishReason:an(s,c)})}}async function mn(e,t){try{await e.return?.()}catch{}t.abort()}function hn(e,t){let n=t.filter(e=>e!==void 0);return n.some(e=>e.aborted)?Promise.resolve():new Promise(t=>{let r=()=>{for(let e of n)e.removeEventListener(`abort`,r);t()};for(let e of n)e.addEventListener(`abort`,r,{once:!0});e.then(r)})}function gn(t,n,r){let{requestId:i,model:a,providerName:o,isFallback:s,chunkIdleTimeoutMs:c,readerStallTimeoutMs:l,streamController:u,logger:d,signal:f,maxRetryAfterMs:p,onRateLimitHint:m}=r,{promise:h,resolve:g,reject:_}=ce();h.catch(()=>{});let v=ln({capacity:1e4,logger:d,label:`stream chunk`,stallTimeoutMs:l,stallError:()=>new e.s(`The chunks reader stopped pulling for ${l}ms with a full buffer, so it was detached. finalResult still settles.`,`timeout`,{code:`reader_stall_timeout`})}),{push:y,finish:b,fail:x}=v,S=v.iterable,C=pn({requestId:i,model:a,providerName:o,isFallback:s},y,m);return(async()=>{try{let r=n;for(;!r.done;){let n=C.apply(r.value);if(n&&await hn(n,[u.signal,f]),f?.aborted)throw new e.s(`LLM request aborted`,`aborted`);r=await et(()=>t.next(),c,()=>u.abort(),d)}}catch(e){await mn(t,u);let n=G(e,f,void 0,p);try{r.onStreamFailure(n,C.usage)}catch{}x(n),_(n);return}b();try{r.onStreamSuccess(C.usage)}catch{}try{let{text:e,wireToolCalls:t,usage:n,thinking:i,finishReason:a}=C.result(),o=r.finalize(e,t,n,i,a);g(o)}catch(e){_(e)}})(),{chunks:S,finalResult:h}}async function _n(t,n,r){let{params:i,requestId:a,attempt:o,gateway:s}=n,c=t.client.chat.completions;if(!c.createStream)throw new e.s(`stream: true requires a client/adapter with createStream`,`invalid_params`,{code:`unsupported_capability`,issues:{capability:`createStream`}});let l=c.createStream.bind(c),{request:u,model:d,useJson:f,state:p,release:m,dispatch:h}=await Ht(t,n),g=m,_=new AbortController,v=i.signal?AbortSignal.any([i.signal,_.signal]):_.signal;try{let c=i.chunkIdleTimeoutMs??t.chunkIdleTimeoutMs,m;await sn(t,h,i.signal,async()=>{let{iterator:e,first:n}=await $e(async e=>{let n=l(u,{signal:e})[Symbol.asyncIterator](),r=await n.next();for(;!r.done&&r.value.type===`rate_limit_hint`;)t.limiter?.reactToRateLimitHint(r.value.hint),r=await n.next();return{iterator:n,first:r}},t.timeoutMs,v);n.done||r?.(),m=await vn(e,n,c,_,t.limiter,t.logger,(e,n)=>{let r=ne(e,{requestId:a,model:d,providerName:t.providerName,isFallback:t.isFallback}),c=G(n,i.signal,void 0,t.maxRetryAfterMs);c.type!==`aborted`&&t.usageReporter.reportFailure(r,c,o,s.buildAttemptContext(o,i.signal,p),!0),g?.(t.usageReporter.actualTokensFor(r)),g=void 0})});let{head:y,rest:b}=m;if(y.done)throw new e.s(`Empty LLM response`,`api`);let x=g,S=gn(b,y,{requestId:a,model:d,providerName:t.providerName,isFallback:t.isFallback,chunkIdleTimeoutMs:c,readerStallTimeoutMs:t.readerStallTimeoutMs,streamController:_,logger:t.logger,signal:i.signal,maxRetryAfterMs:t.maxRetryAfterMs,onRateLimitHint:e=>{t.limiter?.reactToRateLimitHint(e)},onStreamSuccess:e=>{},onStreamFailure:(e,n)=>{on(t.limiter,e),e.type===`timeout`?s.recordFailure(o,i.signal,p,e.code):s.releaseTrial(o,i.signal,p),n&&e.type!==`aborted`&&t.usageReporter.reportFailure(n,e,o,s.buildAttemptContext(o,i.signal,p),!0),x?.(t.usageReporter.actualTokensFor(n))},finalize:(r,c,l,u,m)=>{let h=t.usageReporter.actualTokensFor(l);try{let e=$t(r,c,i,f,l,a,o,p,Wt(t,s,d),m===`length`,u);return x?.(h,!0),n.onFinish?.(m),e}catch(t){throw x?.(h),t instanceof e.s&&Gt(t)?s.recordFailure(o,i.signal,p,t.code):s.releaseTrial(o,i.signal,p),t}}});return g=void 0,S}finally{g?.()}}async function vn(e,t,n,r,i,a,o){let s=[],c=t,l=!1;try{for(;!c.done&&!yn(c.value);){let t=c.value;t.type===`rate_limit_hint`?i?.reactToRateLimitHint(t.hint):t.type!==`ping`&&(t.type===`refusal`&&(l=!0),s.push(t)),c=await et(()=>e.next(),n,()=>r.abort(),a)}if(c.done&&l)throw Zt()}catch(t){r.abort(),Promise.resolve().then(()=>e.return?.()).catch(()=>{});let n=[...s].reverse().find(e=>e.type===`usage`);throw n?.type===`usage`&&o(n.usage,t),t}if(c.done||s.length===0)return{head:c,rest:e};let u=[...s.slice(1),c.value];return{head:{done:!1,value:s[0]},rest:{next:()=>{let t=u.shift();return t?Promise.resolve({done:!1,value:t}):e.next()},return:async()=>e.return?.()??{done:!0,value:void 0}}}}function yn(e){return e.type===`text-delta`&&e.delta!==``||e.type===`tool_call_delta`}function bn(e){return typeof e==`string`?e:JSON.stringify(e)}function xn(t,n){if(t&&t.length===0)throw new e.s("`tools` was an empty array. This is almost always a bug (e.g. a filtered tool list that ended up empty). An empty `tools` array still switches on tool-call mode (response shape, jsonMode default, wire format) with nothing for the model to call. Omit `tools` entirely for a normal call, or make sure the array is non-empty.",`invalid_params`);if(t){let n=/* @__PURE__ */ new Set,r=/* @__PURE__ */ new Set;for(let e of t)n.has(e.name)&&r.add(e.name),n.add(e.name);if(r.size)throw new e.s(`\`tools\` has duplicate name(s): [${[...r].join(`, `)}]. Tool names must be unique.`,`invalid_params`,{code:`duplicate_tool_names`,issues:{names:[...r]}})}if(n&&!t)throw new e.s("`toolChoice` was set without `tools`. There is nothing for it to choose between. Set `tools`, or remove `toolChoice`.",`invalid_params`);if(t&&typeof n==`object`&&!t.some(e=>e.name===n.name))throw new e.s(`toolChoice names "${n.name}", which is not in \`tools\` ([${t.map(e=>e.name).join(`, `)}]).`,`invalid_params`,{code:`unknown_tool_choice`,issues:{requested:n.name,available:t.map(e=>e.name)}})}function Sn(t){let{jsonModeExplicit:n,hasTools:r,jsonSchema:i,hasSchema:a,supportsJsonObjectMode:o}=t,s=n??!r;if(!o&&!i&&n===!0)throw new e.s('jsonMode: true was set explicitly, but this client does not support `response_format: "json_object"` (see LLMClient.supportsJsonObjectMode). Neither Anthropic nor Bedrock has a field that mechanically guarantees JSON output for this mode. Use `jsonSchema` instead, which maps to a real constraint on both.',`invalid_params`);if(!o&&!i&&n===void 0&&a)throw new e.s('`schema` was provided, which requires JSON output to validate against, but this client does not support `response_format: "json_object"` (see LLMClient.supportsJsonObjectMode) and no `jsonSchema` was set. Neither Anthropic nor Bedrock has a field that mechanically guarantees JSON output without one. Use `jsonSchema` instead, which maps to a real constraint on both and still runs `schema` against its parsed result.',`invalid_params`);let c=(!o&&!i&&n===void 0?!1:s)||!!i;if(a&&!c)throw new e.s(`schema was provided but jsonMode: false disables JSON parsing, so nothing would validate it. Remove jsonMode: false, set jsonSchema, or remove schema.`,`invalid_params`);return c}function Cn(e,t){return e?{type:`json_schema`,json_schema:{name:e.name,schema:e.schema,strict:e.strict??!0,description:e.description}}:t?{type:`json_object`}:void 0}function wn(e){return!e||e===`auto`?`auto`:e===`none`||e===`required`?e:{type:`function`,function:{name:e.name}}}function Tn(e){return e.role===`tool`?(e.toolResults??[]).map(e=>({role:`tool`,tool_call_id:e.toolCallId,content:typeof e.content==`string`?e.content:JSON.stringify(e.content??null),...e.isError?{is_error:!0}:{}})):e.role===`assistant`&&e.toolCalls?.length?[{role:`assistant`,...e.content===void 0?{}:{content:bn(e.content)},tool_calls:qt(e.toolCalls),...e.thinking?.length?{thinking:e.thinking}:{}}]:e.role===`assistant`?[{role:`assistant`,content:bn(e.content===void 0?``:e.content),...e.thinking?.length?{thinking:e.thinking}:{}}]:[{role:e.role,content:e.content??``}]}function En(t,n){if(!Array.isArray(t))throw new e.s(`history[${n}].thinking must be an array`,`invalid_params`);for(let[r,i]of t.entries()){let t=i;if(!(typeof t==`object`&&t&&(t.type===`thinking`&&typeof t.thinking==`string`&&typeof t.signature==`string`||t.type===`redacted_thinking`&&typeof t.data==`string`)))throw new e.s(`history[${n}].thinking[${r}] must be { type: 'thinking', thinking, signature } or { type: 'redacted_thinking', data }, as returned on ToolCallResult.thinking`,`invalid_params`)}}function Dn(t){let n;for(let[r,i]of t.entries()){if(i.role===`assistant`&&i.thinking!==void 0&&En(i.thinking,r),i.role===`tool`){if(n?.role!==`assistant`||!n.toolCalls?.length)throw new e.s(`history[${r}] is a "tool" turn, but must immediately follow an "assistant" turn that requested tools`,`invalid_params`);if(!i.toolResults?.length)throw new e.s(`history[${r}] is a "tool" turn but has no toolResults`,`invalid_params`);let t=new Set(n.toolCalls.map(e=>e.id)),a=i.toolResults.map(e=>e.toolCallId),o=a.filter(e=>!t.has(e));if(o.length)throw new e.s(`history[${r}].toolResults references unknown toolCallId(s) [${o.join(`, `)}]`,`invalid_params`,{code:`unknown_tool_result_ids`,issues:{historyIndex:r,ids:o}});let s=/* @__PURE__ */ new Set,c=/* @__PURE__ */ new Set;for(let e of a)s.has(e)&&c.add(e),s.add(e);if(c.size)throw new e.s(`history[${r}].toolResults has duplicate toolCallId(s) [${[...c].join(`, `)}]`,`invalid_params`,{code:`duplicate_tool_result_ids`,issues:{historyIndex:r,ids:[...c]}});let l=[...t].filter(e=>!a.includes(e));if(l.length)throw new e.s(`history[${r}] is missing toolResults for toolCallId(s) [${l.join(`, `)}]`,`invalid_params`,{code:`missing_tool_results`,issues:{historyIndex:r,ids:l}})}else{if(i.role===n?.role)throw new e.s(`history must alternate user/assistant turns: consecutive "${i.role}" turns at history[${r-1}] and history[${r}]`,`invalid_params`);if(n?.role===`assistant`&&n.toolCalls?.length)throw new e.s(`history[${r}] follows an assistant tool request without tool results`,`invalid_params`)}n=i}if(n?.role===`assistant`&&n.toolCalls?.length)throw new e.s(`The last entry in history is an assistant tool request without tool results`,`invalid_params`);if(n?.role===`user`)throw new e.s(`The last entry in history is a "user" turn, which would collide with the current userContent turn.`,`invalid_params`)}var On=class{model;defaultMaxTokens;defaultTemperature;defaultReasoningEffort;defaultBudgetTokens;supportsJsonObjectMode;constructor(e){this.model=e.model,this.defaultMaxTokens=e.defaultMaxTokens,this.defaultTemperature=e.defaultTemperature,this.defaultReasoningEffort=e.defaultReasoningEffort,this.defaultBudgetTokens=e.defaultBudgetTokens,this.supportsJsonObjectMode=e.supportsJsonObjectMode}build(e){let{systemPrompt:t,userContent:n,history:r=[],maxTokens:i=this.defaultMaxTokens,model:a=this.model,jsonSchema:o,tools:s,toolChoice:c}=e,l=e.temperature===void 0?this.defaultTemperature:e.temperature,u=e.reasoningEffort===void 0?this.defaultReasoningEffort:e.reasoningEffort,d=e.budgetTokens===void 0?this.defaultBudgetTokens:e.budgetTokens;xn(s,c);let f=Sn({jsonModeExplicit:e.jsonMode,hasTools:!!s,jsonSchema:o,hasSchema:!!e.schema,supportsJsonObjectMode:this.supportsJsonObjectMode}),p=Cn(o,f);return Dn(r),{useJson:f,model:a,request:{model:a,...l===null?{}:{temperature:l},max_tokens:i,...p?{response_format:p}:{},...u?{reasoning_effort:u}:{},...d==null?{}:{budget_tokens:d},...s?{tools:Kt(s)}:{},...s?{tool_choice:wn(c)}:{},messages:[...t?[{role:`system`,content:t}]:[],...r.flatMap(e=>Tn(e)),{role:`user`,content:n}]}}}};function kn(e){let{providerName:t,isFallback:n,maxRetries:r,emitEvent:i,logger:a}=e,o=e.cacheReadsCountTowardRateLimit??!0;function s(e,r,i){if(e.usage)return ne(e.usage,{requestId:r,model:i,providerName:t,isFallback:n})}function c(e){if(!e)return;let t=e.totalTokens||e.promptTokens+e.completionTokens;if(o)return t===0?void 0:t;let n=t-(e.cacheReadTokens??0);return n>0?n:void 0}function l(e,t){e&&i({kind:`usage`,requestId:e.requestId,usage:e},t)}function u(e,t,n,o,s=!1){let c=e.totalTokens||e.promptTokens+e.completionTokens,l=s?`mid-stream failure (terminal, no further attempts)`:`attempt ${n+1}/${r+1}`;a.warn(`[VernLLM:${e.requestId}] usage failure, ${l}: type=${t.type} tokens=${c}`),i({kind:`usage_failure`,requestId:e.requestId,usage:e,error:t},o)}return{extract:s,actualTokensFor:c,reportSuccess:l,reportFailure:u}}function An(e){let t=e.filter(e=>e!==void 0);return t.length>1?AbortSignal.any(t):t[0]}function jn(e,t){let n=e.stream&&t?new AbortController:void 0,{signal:r,timer:i}=Pe(e.deadlineMs,An([e.signal,n?.signal]));return{params:r===e.signal?e:{...e,signal:r},signal:r,breakController:n,dispose:()=>clearTimeout(i)}}const Mn=/* @__PURE__ */ new WeakMap;function Nn(e,t,n){return Pn(An([e,t]),n)}function Pn(e,t){return t>0&&Mn.set(e,t),e}function J(e){let t=e===void 0?void 0:Mn.get(e);return t===void 0?{}:{chain:t}}function Fn(e){let{breaker:t,logger:n,requestId:r,model:i,providerName:a,isFallback:o,supportsJsonObjectMode:s,middlewareNames:c,adapter:l}=e;function u(e,t,n){return{stage:`attempt`,requestId:r,requestedProvider:a,adapter:l,requestedModel:i,isFallbackAttempt:o,attempt:e+1,capabilities:{supportsJsonObjectMode:s},signal:t,...J(t),state:n,own:{},emit:B,context:z(n)?.context,...L(n),...c}}function d(e,t,n){return{requestId:r,state:n,signal:t,attempt:e+1}}function f(e,t){I(n,`[VernLLM:${r}] circuitBreaker.${e} rejected`,t)}return{buildAttemptContext:u,buildCallContext:d,recordSuccess(e,n,r){f(`recordSuccess`,t?.recordSuccess(i,d(e,n,r)))},recordFailure(e,n,r,a){f(`recordFailure`,t?.recordFailure(i,d(e,n,r),a))},releaseTrial(e,n,r){f(`releaseTrial`,t?.releaseTrial?.(i,d(e,n,r)))}}}async function In(t){let{fn:n,requestId:r,model:i,providerName:a,isFallback:o,supportsJsonObjectMode:s,adapter:c,breaker:l,budget:u,maxRetries:d,baseDelayMs:f,maxRetryAfterMs:p,nonRetryableStatus:m,signal:h,onAttempt:g,middleware:_,middlewareTimeoutMs:v,logger:y,reportEvent:b,logLabel:x,redactText:S,countsTowardBreaker:C}=t,w=t.state??E(),ee=(e,t,n)=>G(e,t,n,p),T=[],D=Fn({breaker:l,logger:y,requestId:r,model:i,providerName:a,isFallback:o,supportsJsonObjectMode:s,middlewareNames:H(_),adapter:c}),te;try{return await st({fn:(e,t)=>(u&&Ln(u,e>0,y),n(e,t,w,D)),maxRetries:d,signal:h,onAttempt:g,attempts:T,shouldRetryAttempt:(t,n)=>{if(!it(t,m,W,n))return!1;if(u)try{u.assertAvailable()}catch(t){return t instanceof e.s?(te=t,!1):(j(y,`[VernLLM] retryBudget.assertAvailable threw a non-LLMError`,t),!0)}return!0},recoverDelayForAttempt:(e,t)=>at({requestId:r,model:i,attempt:e,error:t,state:w,signal:h,providerName:a,maxRetries:d,baseDelayMs:f,maxRetryAfterMs:p,middleware:_,middlewareTimeoutMs:v,logger:y,reportEvent:b,buildEventContext:(e,t,n,r,i)=>D.buildAttemptContext(n,r,i),extractStatus:W,normalizeError:ee,emitEvent:q}),normalizeError:ee})}catch(e){let t=ee(te??e,h,T.length>0?T:void 0);throw C(t)?D.recordFailure(T.length,h,w,t.code):D.releaseTrial(T.length,h,w),y.debug(`[VernLLM:${r}] ${x}:\n${S(ft(e))}`),t}}function Ln(e,t,n){try{I(n,`[VernLLM] retryBudget.recordAttempt rejected`,e.recordAttempt(t))}catch(e){j(n,`[VernLLM] retryBudget.recordAttempt threw`,e)}}function Rn(e){try{return JSON.parse(e)}catch{return}}var zn=class{providerName;model;maxRetries;baseDelayMs;nonRetryableStatus;logger;breaker;budget;limiter;isFallback;supportsJsonObjectMode;env;adapter;constructor(e,t,n,r){this.providerName=e,this.model=n,this.maxRetries=ot(r.maxRetries),this.baseDelayMs=r.baseDelayMs;let i=Ze(r.maxRetryAfterMs,e);this.nonRetryableStatus=r.nonRetryableStatus,this.logger=r.logger,this.maxRetries!==r.maxRetries&&this.logger.warn(`[VernLLM] ${e}: maxRetries must be a non-negative whole number, got ${String(r.maxRetries)}. Using ${this.maxRetries}.`);let a=ke(r.onEvent,this.logger,{onUsage:r.onUsage,onUsageFailure:r.onUsageFailure});this.breaker=r.breaker,this.budget=r.budget,this.limiter=r.limiter,this.isFallback=r.isFallback??!1;let o=r.middleware??[],s=Lt(o,r.dispatchOrder);this.adapter=Oe(t),M(this.logger,`client.setLogger`,()=>t.setLogger?.(this.logger));let c=r.middlewareTimeoutMs??5e3;this.supportsJsonObjectMode=t.supportsJsonObjectMode??!0;let l=kn({providerName:e,isFallback:this.isFallback,maxRetries:this.maxRetries,cacheReadsCountTowardRateLimit:t.cacheReadsCountTowardRateLimit,emitEvent:(e,t)=>q(e,t,a,o,c,this.logger),logger:this.logger}),u=new On({model:n,defaultMaxTokens:r.defaultMaxTokens,defaultTemperature:r.defaultTemperature,defaultReasoningEffort:r.defaultReasoningEffort,defaultBudgetTokens:r.defaultBudgetTokens,supportsJsonObjectMode:this.supportsJsonObjectMode});this.env={client:t,providerName:e,isFallback:this.isFallback,timeoutMs:r.timeoutMs,chunkIdleTimeoutMs:r.chunkIdleTimeoutMs,readerStallTimeoutMs:r.readerStallTimeoutMs,maxRetryAfterMs:i,parseJson:r.parseJson??Rn,logger:this.logger,redact:r.redact,usageReporter:l,reportEvent:a,limiter:this.limiter,requestBuilder:u,middleware:o,dispatchHooks:s,middlewareTimeoutMs:c,detectSoftFailure:r.detectSoftFailure}}previewRequest(e){let{model:t,request:n}=this.env.requestBuilder.build(e);return{model:t,request:n}}get jsonObjectModeSupported(){return this.supportsJsonObjectMode}getCircuitState(e){return this.breaker?.getState?.(e)}async readCircuitState(e){return this.breaker?.readState?this.breaker.readState(e):this.breaker?.getState?.(e)}getFailureBreakdown(e){return this.breaker?.getFailureBreakdown?.(e)}getRetryBudgetState(){return this.budget?.getSnapshot?.()}async readRetryBudgetState(){return this.budget?.readState?this.budget.readState():this.budget?.getSnapshot?.()}getRateLimitState(){return this.limiter?.getState?.()}async readRateLimitState(){return this.limiter?.readState?this.limiter.readState():this.limiter?.getState?.()}get isolateByModel(){return this.breaker?.isolateByModel??!1}openCircuit(e,t){this.breaker?.open?.(e,t)}closeCircuit(e,t){this.breaker?.close?.(e,t)}assertBreakerClosed(e,t){let n=this.breaker,r=e??this.model;if(!n?.prepare)n?.assertClosed(r,t);else return Ae(n,r,t,this.logger).then(()=>n.assertClosed(r,t))}releaseBreakerTrial(e,t){I(this.logger,`[VernLLM] circuitBreaker.releaseTrial rejected`,this.breaker?.releaseTrial?.(e??this.model,t))}async run(e,t,n,r,i){return In(this.attemptLoopParams(e,t,n,r,`error`,(n,r,a,o)=>cn(this.env,{params:e,requestId:t,attempt:n,onRequest:r,middlewareState:a,gateway:o,onFinish:i})))}async runStream(e,t,n,r,i,a){return In(this.attemptLoopParams(e,t,n,r,`stream-open error`,(n,r,o,s)=>_n(this.env,{params:e,requestId:t,attempt:n,onRequest:r,middlewareState:o,gateway:s,onFinish:a},i)))}attemptLoopParams(e,t,n,r,i,a){return{fn:a,requestId:t,model:e.model??this.model,providerName:this.providerName,isFallback:this.isFallback,supportsJsonObjectMode:this.supportsJsonObjectMode,adapter:this.adapter,breaker:this.breaker,budget:this.budget,maxRetries:this.maxRetries,baseDelayMs:this.baseDelayMs,maxRetryAfterMs:this.env.maxRetryAfterMs,nonRetryableStatus:this.nonRetryableStatus,signal:e.signal,onAttempt:n,state:r,middleware:this.env.middleware,middlewareTimeoutMs:this.env.middlewareTimeoutMs,logger:this.logger,reportEvent:this.env.reportEvent,logLabel:i,redactText:e=>Ut(this.env,e),countsTowardBreaker:Gt}}};function Bn(e){return e.map((e,t)=>({executor:e,index:t}))}function Vn(e,t){return e.map(({executor:e,index:n})=>({name:e.providerName,index:n,model:t(n)??e.model,adapter:e.adapter}))}function Hn(t){return new e.s(t,`invalid_params`,{code:`no_eligible_targets`})}function Un(t,n,r,i){if(r===void 0)return[...n];if(!Array.isArray(r)||r.some(e=>typeof e!=`string`))throw new e.s("`targets` must be an array of target names",`invalid_params`);if(r.length===0||new Set(r).size!==r.length)throw Hn("`targets` must name at least one target, each at most once");let a=[];for(let o of r){if(!t.some(e=>e.executor.providerName===o)){let n=t.map(e=>`"${e.executor.providerName}"`).join(`, `);throw new e.s(`Unknown target "${o}". Valid targets: ${n}`,`invalid_params`,{code:`unknown_target`})}let r=n.find(e=>e.executor.providerName===o);r?a.push(r):i?.(o)}if(a.length===0)throw Hn(`No target is left: every requested target was removed by an outer layer`);return a}function Y(e,t){return t===0?e.model:void 0}function Wn(e,t){return t===0||e.model===void 0?e:{...e,model:void 0}}async function Gn(t,n,r,i,a,o=!1){let s=[],{targets:c}=t;for(let e=0;e<c.length;e++){let{executor:l,index:u}=c[e],d=Y(n,u),f=Date.now(),p=0;try{if(!(e===0&&o)){let e=l.assertBreakerClosed(d,{requestId:r,state:i,signal:n.signal});e&&await e}return{result:await a(l,()=>{p+=1},u,e),executor:l,index:u,position:e,attemptCount:p,model:d??l.model}}catch(a){let o=G(a,n.signal);l.releaseBreakerTrial(d,{requestId:r,state:i,signal:n.signal}),s.push({index:u-1,provider:l.providerName,model:d??l.model,error:o.toSnapshot()});let m=e===c.length-1,[h,g]=Vn(c.slice(e,e+2),e=>Y(n,e)),_=t.fallbackOn(o,{isLastTarget:m,failed:h,...g?{next:g}:{}});if((m?`stop`:_)===`stop`)throw s.length>1?new y(s):o;Kn(t,{requestId:r,failed:c[e],next:c[e+1],failedModel:d??l.model,attempt:p,error:o,elapsedMs:Date.now()-f,signal:n.signal,middlewareState:i})}}throw new e.s(`No provider targets configured`,`invalid_params`)}function Kn(e,t){let{requestId:n,signal:r}=t,{executor:i,index:a}=t.failed,o=t.next.executor,s={stage:`attempt`,requestId:n,requestedProvider:i.providerName,adapter:i.adapter,requestedModel:t.failedModel,isFallbackAttempt:a>0,attempt:t.attempt||1,capabilities:{supportsJsonObjectMode:i.jsonObjectModeSupported},signal:r,...J(r),state:t.middlewareState,own:{},emit:B,context:z(t.middlewareState)?.context,...L(t.middlewareState),...H(e.middleware)};q({kind:`fallback`,requestId:n,from:i.providerName,to:o.providerName,fromIndex:a-1,toIndex:t.next.index-1,error:t.error,elapsedMs:t.elapsedMs},s,e.reportEvent,e.middleware,e.middlewareTimeoutMs,e.logger)}function qn(e,t,n,r,i,a){return{provider:e.providerName,model:i,fallbackIndex:t-1,usedFallback:t>0,attempts:r,position:n,...J(a)}}function Jn(e,t,n){let r=qn(e.executor,e.index,e.position,e.attemptCount,e.model,t.signal);return n&&(r.finishReason=n),t.meta&&(t.meta.current=r),{value:e.result,meta:r}}async function Yn(e,t,n,r,i){let a;return Jn(await Gn(e,t,n,i,(e,r,o)=>e.run(Wn(t,o),n,r,i,e=>{a=e}),r),t,a)}async function Xn(e,t,n,r,i){let{promise:a,resolve:o}=ce(),s,c=Gn(e,t,n,i,(e,r,a,c)=>{let l=0;return e.runStream(Wn(t,a),n,()=>{l+=1,r()},i,()=>o({executor:e,index:a,position:c,attempts:l}),e=>{s=e})},r);c.catch(()=>{});let l=await Promise.race([a.then(e=>({kind:`opened`,value:e})),c.then(e=>({kind:`settled`,value:e}))]);if(l.kind===`settled`)return Jn(l.value,t);let{executor:u,index:d,position:f,attempts:p}=l.value,m=qn(u,d,f,p,Y(t,d)??u.model,t.signal);t.meta&&(t.meta.current=m);let h=c.then(async e=>{Object.assign(m,qn(e.executor,e.index,e.position,e.attemptCount,e.model,t.signal));let n=await e.result.finalResult;return s&&(m.finishReason=s),n});return h.catch(()=>{}),{value:{chunks:{async*[Symbol.asyncIterator](){yield*(await c).result.chunks}},finalResult:h},meta:m}}async function Zn(t,n,{requestId:r,middlewareState:i,breakController:a,onRefundError:o}){let s=t.targets.length===1,c=Y(n,t.targets[0].index),l=()=>({requestId:r,state:i,signal:n.signal});if(s){if(n.signal?.aborted)throw new e.s(`LLM request aborted`,`aborted`);let r=t.targets[0].executor.assertBreakerClosed(c,l());r&&await r}try{let e,c=async t=>{let n=await t;return e=n.meta,n.value};return n.stream?{value:se(await ae(n,()=>c(Xn(t,n,r,s,i)),n.signal,o),a),meta:e}:{value:await O(n,!1,()=>c(Yn(t,n,r,s,i)),n.signal,o),meta:e}}catch(e){throw s&&t.targets[0].executor.releaseBreakerTrial(c,l()),e}}var Qn=class{incoming;reruns;layer;state;entries=[];resolved=[];constructor(e,t,n,r){this.incoming=e,this.reruns=t,this.layer=n,this.state=r}main(e){return this.start(this.incoming.number,!0,e)}get canRerun(){return this.reruns.count<4}rerun(t){return this.canRerun?(this.reruns.count++,Et(this.state,this.reruns.count,{parent:this.incoming.number,layer:this.layer}),this.start(this.reruns.count,!1,t)):Promise.reject(new e.s(`At most 4 chains can run again per call`,`invalid_params`))}get startedAny(){return this.entries.length>0}firstResolved(){return this.resolved[0]}keep(e){let t=e===void 0?void 0:this.entries.find(t=>t.result===e)??this.entries.find(t=>t.result!==void 0&&t.result.value===e.value);for(let e of this.entries)e!==t&&e.controller.abort();return t?.result?{number:t.number,result:t.result}:void 0}start(e,t,n){let r=new AbortController,i={number:e,controller:r},a=this.incoming.params;this.entries.push(i);let o;try{o=n({number:e,params:{...a,signal:Nn(a.signal,r.signal,e),...t?{}:{meta:void 0}}})}catch(e){o=Promise.reject(e)}return o.then(e=>{i.result=e,this.resolved.push(e)},()=>{}),o}};const $n=/* @__PURE__ */ new WeakSet;function er(e,t,n){let r=e.keep(t);return r!==void 0&&r.number!==n.number&&n.params.meta&&(n.params.meta.current=r.result.meta),r}function tr(e,t,n){$n.has(t)||($n.add(t),e.warn(`[VernLLM] middleware "${n}" returned a value no chain produced; every chain was cancelled`))}async function nr(t,n,r,i,a,o,s=!1){let{wrapOrder:c,transformOrder:l,names:u,transformNames:d}=t.pipeline,f={number:0,params:n};if(c.length===0||s)return o(a,f);let p=t.primaryExecutor,{model:m,request:h}=p.previewRequest(n),g=new Map(l.map((e,t)=>[e,t]));Tt(i,new Map(c.map((e,t)=>[e,t])));let _={count:0},v=o;for(let a=c.length-1;a>=0;a--){let o=c[a],s=V(o,g.get(o)),f=v;v=async(c,g)=>{let v={stage:`pre-dispatch`,requestId:r,primaryProvider:p.providerName,primaryAdapter:p.adapter,primaryModel:m,targets:Vn(c,e=>Y(n,e)),capabilities:{supportsJsonObjectMode:p.jsonObjectModeSupported},signal:g.params.signal,...g.number>0?{chain:g.number}:{},state:i,own:{},emit:B,context:z(i)?.context,...L(i),registeredMiddlewareNames:u,transformMiddlewareNames:d};if(!await kt(o,v,s,t.middlewareTimeoutMs,t.logger))return o.enabled!==void 0&&q({kind:`middleware`,requestId:r,middleware:s,hook:`enabled_skip`},v,t.reportEvent,l,t.middlewareTimeoutMs,t.logger),f(c,g);if(!o.wrap)return f(c,g);let y=o.reruns===!0?new Qn(g,_,a,i):void 0,b=e=>Un(t.targets,c,e,e=>t.logger.warn(`[VernLLM:${r}] middleware "${s}" asked for target "${e}", which an outer layer removed; ignoring it`)),x,S=_t(async()=>{let e=b(x);return y?y.main(t=>f(e,t)):f(e,g)}),C=(e=>(x=e?.targets,S.call()));if(y){let e=e=>{let t;try{t=b(e?.targets)}catch(e){return Promise.reject(e)}return y.rerun(e=>f(t,e))};Object.defineProperty(C,"again",{get:()=>y.canRerun?e:void 0})}try{let e=await o.wrap(h,C,K(v,o,s));return!S.wasCalled()&&!y?.startedAny&&q({kind:`middleware`,requestId:r,middleware:s,hook:`wrap_short_circuit`},v,t.reportEvent,l,t.middlewareTimeoutMs,t.logger),y&&er(y,e,g)===void 0&&y.firstResolved()!==void 0&&tr(t.logger,o,s),e}catch(n){let r=y?y.firstResolved():S.resolvedValue();if(r!==void 0){if(e.l(n)&&n.code===`content_blocked`)throw y?.keep(void 0),n;return j(t.logger,`[VernLLM] middleware "${s}".wrap threw after next() resolved; keeping the original result`,n),y&&er(y,r,g),r}throw y?.keep(void 0),Nt(n,s,v.signal)}}}return v(a,f)}function rr(e,t,n={}){let{reportEvent:r,middleware:i,middlewareTimeoutMs:a,logger:o}=e,s=0,c=!1,l=/* @__PURE__ */ new Set;return{context:t,facts:n,emitCustom(e,t,n,u){let d=(e,t)=>{l.has(e)||(l.add(e),o.warn(`[VernLLM:${u.requestId}] middleware "${n}" ${t}`))};if(!ir(e,t))d(`invalid`,`called ctx.emit with an empty name or data that is not plain JSON, dropping the event`);else if(c)d(`reentrant`,`emitted "${e}" while a custom event was being delivered, dropping it`);else if(s>=100)d(`limit`,`emitted more than 100 custom events in one call, dropping the rest`);else{s++,c=!0;try{q({kind:`custom`,requestId:u.requestId,name:e,source:n,...t===void 0?{}:{data:t}},u,r,i,a,o)}finally{c=!1}}}}}function ir(e,t){if(typeof e!=`string`||e===``)return!1;try{return t===void 0||ze(t)}catch{return!1}}function ar(e){if(e===void 0)return;if(typeof e==`function`)return e;let{multiplier:t,maxMs:n=1/0}=e;return(e,r)=>{let i=Math.min(r*t**e,n),a=Math.min(r,n);return a+tt((i>a?i:a)-a)}}function or(){return{state:`closed`,consecutiveFailures:0,openedAt:0,trial:null,reopenCount:0,failuresByReason:/* @__PURE__ */ new Map,cooldownMsForOpen:0,openedInGeneration:0}}function X(e){return e??``}const Z=/* @__PURE__ */ new WeakMap;function sr(e,t){return!t||Z.get(t.state)===e.trial}function cr(e,t){let n=t??`unknown`;e.failuresByReason.set(n,(e.failuresByReason.get(n)??0)+1)}function lr(e){e.consecutiveFailures=0,e.trial=null,e.reopenCount=0,e.failuresByReason.clear()}var ur=class{threshold;failuresByKey=/* @__PURE__ */ new Map;constructor(e){this.threshold=e}onSuccess(e){this.failuresByKey.delete(e)}onFailure(e){let t=(this.failuresByKey.get(e)??0)+1;return this.failuresByKey.set(e,t),t>=this.threshold}reset(e){this.failuresByKey.set(e,0)}forget(e){this.failuresByKey.delete(e)}},dr=class{windowMs;minCalls;failureRatio;ratiosByKey=/* @__PURE__ */ new Map;constructor(e,t,n){this.windowMs=e,this.minCalls=t,this.failureRatio=n,new Ce(e),we(t),Te(n,`failureRatio`)}ratioFor(e){let t=this.ratiosByKey.get(e);return t||(t=new Ce(this.windowMs),this.ratiosByKey.set(e,t)),t}onSuccess(e){this.ratioFor(e).record(!1)}onFailure(e){let t=this.ratioFor(e);return t.record(!0),t.getCount()>=this.minCalls&&t.getRatio()>=this.failureRatio}reset(e){this.ratiosByKey.delete(e)}forget(e){this.ratiosByKey.delete(e)}};function fr(e){return`onFailure`in e?e:e.kind===`consecutive`?new ur(e.threshold):new dr(e.windowMs,e.minCalls,e.failureRatio)}var pr=class{cooldownMs;onStateChange;isolateByModel;halfOpenProbes;halfOpenSuccessRatio;cooldownBackoff;tripping;sharedBucket=or();bucketsByModel=/* @__PURE__ */ new Map;generation=0;admittedInGeneration=/* @__PURE__ */ new WeakMap;constructor(e={}){let t=e.threshold??5;this.cooldownMs=e.cooldownMs??3e4,this.onStateChange=e.onStateChange??(()=>{}),this.isolateByModel=e.isolateByModel??!1;let n=e.halfOpenProbes;this.halfOpenProbes=Number.isFinite(n)?Math.max(1,Math.floor(n)):1;let r=e.halfOpenSuccessRatio;this.halfOpenSuccessRatio=Number.isFinite(r)?Math.min(1,Math.max(0,r)):1,this.cooldownBackoff=ar(e.cooldownBackoff),this.tripping=fr(e.tripping??{kind:`consecutive`,threshold:t})}assertClosed(t,n){let r=this.ensureBucketFor(t);if(r.state===`closed`)this.markAdmitted(n);else if(r.state===`open`){let i=Date.now()-r.openedAt,a=r.cooldownMsForOpen;if(i<a)throw new e.s(`Circuit open, provider has failed ${r.consecutiveFailures} times in a row. Retry in ${Math.ceil((a-i)/1e3)}s.`,`circuit_open`,{code:`circuit_cooling_down`});r.trial={slotsRemaining:this.halfOpenProbes-1,successes:0,failures:0},n&&Z.set(n.state,r.trial),this.markAdmitted(n),this.transition(r,`half-open`,t,n)}else{if(!r.trial||r.trial.slotsRemaining<=0)throw new e.s(`Circuit half-open. Every trial slot is already in flight. Try again shortly.`,`circuit_open`,{code:`circuit_trial_in_flight`});--r.trial.slotsRemaining,n&&Z.set(n.state,r.trial),this.markAdmitted(n)}}recordSuccess(e,t){let n=this.lookupBucket(e);n&&(this.isFromEarlierGeneration(n,t)||(n.state===`half-open`&&n.trial&&sr(n,t)?(t&&Z.delete(t.state),n.trial.successes+=1,this.settleTrialIfComplete(n,e,t)):n.state!==`half-open`&&n.state!==`open`&&(lr(n),this.tripping.onSuccess(this.trippingKeyFor(e)),this.transition(n,`closed`,e,t),this.isolateByModel&&n.state===`closed`&&n.consecutiveFailures===0&&this.dropBucket(e))))}recordFailure(e,t,n){let r=this.ensureBucketFor(e);this.isFromEarlierGeneration(r,t)||(r.state===`half-open`&&r.trial&&sr(r,t)?(t&&Z.delete(t.state),r.trial.failures+=1,cr(r,n),this.settleTrialIfComplete(r,e,t)):r.state!==`half-open`&&r.state!==`open`&&(r.consecutiveFailures+=1,cr(r,n),this.tripping.onFailure(this.trippingKeyFor(e))&&this.openBucket(r,e,t)))}releaseTrial(e,t){if(!t)return;let n=this.lookupBucket(e);n&&n.state===`half-open`&&n.trial&&sr(n,t)&&(Z.delete(t.state),n.trial.slotsRemaining+=1)}getState(e){let t=this.lookupBucket(e);return t?t.state===`open`&&Date.now()-t.openedAt>=t.cooldownMsForOpen?`half-open`:t.state:`closed`}getFailureBreakdown(e){let t=this.lookupBucket(e);return t?Object.fromEntries(t.failuresByReason):{}}open(e,t){let n=this.ensureBucketFor(e);n.trial=null,this.openBucket(n,e,t)}close(e,t){let n=this.ensureBucketFor(e);lr(n),this.tripping.reset(this.trippingKeyFor(e)),this.transition(n,`closed`,e,t),this.isolateByModel&&n.state===`closed`&&n.consecutiveFailures===0&&this.forgetModel(e)}openBucket(e,t,n){e.openedAt=Date.now(),e.cooldownMsForOpen=this.computeCooldown(e),e.openedInGeneration=++this.generation,this.transition(e,`open`,t,n)}computeCooldown(e){if(!this.cooldownBackoff)return this.cooldownMs;let t=this.cooldownBackoff(e.reopenCount,this.cooldownMs);return Number.isNaN(t)?0:Math.max(0,t)}markAdmitted(e){e&&this.admittedInGeneration.set(e.state,this.generation)}isFromEarlierGeneration(e,t){if(!t)return!1;let n=this.admittedInGeneration.get(t.state);return n!==void 0&&n<e.openedInGeneration}lookupBucket(e){return this.isolateByModel?this.bucketsByModel.get(X(e)):this.sharedBucket}trippingKeyFor(e){return this.isolateByModel?X(e):``}ensureBucketFor(e){if(!this.isolateByModel)return this.sharedBucket;let t=X(e),n=this.bucketsByModel.get(t);return n||(n=or(),this.bucketsByModel.set(t,n)),n}dropBucket(e){this.bucketsByModel.delete(X(e))}forgetModel(e){this.dropBucket(e),this.tripping.forget?.(this.trippingKeyFor(e))}transition(e,t,n,r){if(t===e.state)return;let i=e.state;e.state=t,this.onStateChange(i,t,e.consecutiveFailures,n,r)}settleTrialIfComplete(e,t,n){let r=e.trial;if(!r||r.successes+r.failures<this.halfOpenProbes)return;let i=r.successes/this.halfOpenProbes;e.trial=null,i>=this.halfOpenSuccessRatio?(lr(e),this.tripping.reset(this.trippingKeyFor(t)),this.transition(e,`closed`,t,n),this.isolateByModel&&e.state===`closed`&&this.forgetModel(t)):(e.reopenCount+=1,this.openBucket(e,t,n))}};const mr=[`assertClosed`,`recordSuccess`,`recordFailure`,`onStateChange`],hr=[`assertClosed`,`recordSuccess`,`recordFailure`],gr=[`getState`,`getFailureBreakdown`,`open`,`close`,`releaseTrial`,`setLogger`,`prepare`,`readState`];function _r(e){let t=e;return gr.filter(e=>t[e]!==void 0&&typeof t[e]!=`function`)}function vr(e){let{prepareTimeoutMs:t}=e;return t!==void 0&&(!Number.isFinite(t)||t<=0)}function yr(e){let t=e;return{attemptsAdapter:hr.some(e=>typeof t[e]==`function`),missing:mr.filter(e=>typeof t[e]!=`function`),invalid:_r(e)}}function br(e,t,n,r,i,a,o,s,c,l){return(u,d,f,p,m)=>{let h={kind:`circuit_state`,provider:t,model:p??n,from:u,to:d,consecutiveFailures:f},g=m??{requestId:globalThis.crypto.randomUUID(),state:E()};q(h,{stage:`attempt`,requestId:g.requestId,requestedProvider:t,adapter:l,requestedModel:p??n,isFallbackAttempt:s,attempt:g.attempt??1,capabilities:{supportsJsonObjectMode:c},signal:g.signal,...J(g.signal),state:g.state,own:{},emit:B,context:z(g.state)?.context,...L(g.state),...H(a)},r,a,o,i),e&&M(i,`circuitBreaker.onStateChange`,()=>e(u,d,f,p,m))}}const xr=/* @__PURE__ */ new WeakMap,Sr=/* @__PURE__ */ new WeakSet;function Cr(e,t,n){let r=xr.get(e);if(r)Sr.has(e)||(Sr.add(e),n.warn(`[VernLLM] circuitBreaker: this adapter instance is already wired to another target. circuit_state events for it will now be reported to both, each tagged with its own provider/model. If that's intentional (a breaker genuinely shared across targets or clients), no action needed. If not, e.g. constructing VernLLM repeatedly with the same adapter instance, each wiring is kept for the life of the process, review whether the adapter should be constructed fresh per target instead.`));else{r=/* @__PURE__ */ new Set,xr.set(e,r);let t=e.onStateChange,i=r;e.onStateChange=(e,r,a,o,s)=>{for(let t of i)M(n,`circuitBreaker.onStateChange`,()=>t(e,r,a,o,s));M(n,`circuitBreaker.onStateChange`,()=>t(e,r,a,o,s))}}r.add(t)}function wr(t,n,r,i,a,o,s,c,l,u=De){if(!t)return;let d=ke(i,a),f=e=>br(e,n,r,d,a,o,s,c,l,u);if(typeof t==`object`){let{attemptsAdapter:n,missing:r,invalid:i}=yr(t);if(n&&r.length>0)throw new e.s(`circuitBreaker looks like a CircuitBreakerAdapter but is missing: ${r.join(`, `)}. All four members (${mr.join(`, `)}) are required.`,`invalid_params`);if(n&&vr(t))throw new e.s(`circuitBreaker's prepareTimeoutMs (${String(t.prepareTimeoutMs)}) must be a finite number greater than 0. It is optional, omit it to use the default.`,`invalid_params`);if(i.length>0){let n=t,r=i.map(e=>`${e} (${typeof n[e]})`).join(`, `);throw new e.s(`circuitBreaker's ${r} must be a function when present. ${i.length===1?`It is`:`They are`} optional, omit entirely rather than assigning a non function value.`,`invalid_params`)}if(n){let e=t;return Cr(e,f(void 0),a),I(a,`[VernLLM] circuitBreaker.setLogger rejected`,e.setLogger?.(a)),e}}let p=typeof t==`object`?t:void 0;return new pr({...p,onStateChange:f(p?.onStateChange)})}var Tr=class{capacity;refillPerMs;available;lastRefill=Date.now();constructor(e,t){this.capacity=e,this.refillPerMs=t,this.available=e}refill(){if(this.refillPerMs===0)return;let e=Date.now(),t=e-this.lastRefill;this.available=Math.min(this.capacity,this.available+Math.max(0,t)*this.refillPerMs),this.lastRefill=e}tryTake(e){return this.refill(),this.available<e?!1:(this.available-=e,!0)}msUntilAvailable(e){return this.refill(),this.available>=e?0:this.refillPerMs===0?1/0:(e-this.available)/this.refillPerMs}give(e){this.available=Math.min(this.capacity,this.available+e)}getCapacity(){return this.capacity}getAvailable(){return this.refill(),this.available}resize(e){this.refill(),this.refillPerMs>0&&(this.refillPerMs=this.refillPerMs/this.capacity*e),this.capacity=e,this.available=Math.min(this.available,e)}};function Er(t){if(t===void 0)return 1;if(!Number.isFinite(t)||t<=0)throw new e.s(`estimateFraction (${t}) must be a finite number greater than 0.`,`invalid_params`);return Math.min(t,1)}function Dr(t){if(!t)return;let n=n=>{if(!Number.isFinite(t[n]))throw new e.s(`aimd.${n} (${t[n]}) must be a finite number.`,`invalid_params`)};for(let e of[`minCapacity`,`maxCapacity`,`increaseBy`,`decreaseFactor`])n(e);if(t.minCapacity<1||t.maxCapacity<1)throw new e.s(`aimd.minCapacity (${t.minCapacity}) and aimd.maxCapacity (${t.maxCapacity}) must both be at least 1, since the requests bucket always takes 1 per acquire; a capacity below 1 could never be satisfied.`,`invalid_params`);if(t.minCapacity>t.maxCapacity)throw new e.s(`aimd.minCapacity (${t.minCapacity}) must not exceed aimd.maxCapacity (${t.maxCapacity}).`,`invalid_params`);return{increaseBy:Math.max(0,t.increaseBy),decreaseFactor:Math.min(1,Math.max(Number.MIN_VALUE,t.decreaseFactor)),minCapacity:t.minCapacity,maxCapacity:t.maxCapacity,proactiveFloor:t.proactiveFloor??0}}function Or(t){let n=t=>{throw new e.s(t,`invalid_params`)};for(let e of[`requestsPerMinute`,`tokensPerMinute`]){let r=t[e];r!==void 0&&r!==0&&(!Number.isFinite(r)||r<1)&&n(`${e} (${r}) must be 0 (unlimited) or a finite number of at least 1.`)}for(let e of[`maxConcurrent`,`maxQueueSize`]){let r=t[e];r!==void 0&&(!Number.isInteger(r)||r<0)&&n(`${e} (${r}) must be a non-negative integer (0 means unlimited).`)}let{maxQueueMs:r}=t;r!==void 0&&(!Number.isFinite(r)||r<0||r>2147483647)&&n(`maxQueueMs (${r}) must be a finite number from 0 to ${Ne}. Pass 0 to wait indefinitely.`);let{aimd:i}=t;if(!i)return;t.requestsPerMinute||n(`aimd requires requestsPerMinute to be set.`);let a=i.proactiveFloor;a!==void 0&&(!Number.isFinite(a)||a<0)&&n(`aimd.proactiveFloor (${a}) must be a finite number that is not negative.`)}function kr(e){if(typeof e==`string`)return{chars:e.length,images:0};if(e==null)return{chars:0,images:0};if(Array.isArray(e)){let t=0,n=0;for(let r of e)r?.type===`image`?n+=1:r?.type===`text`&&typeof r.text==`string`?t+=r.text.length:t+=Ar(r);return{chars:t,images:n}}return{chars:Ar(e),images:0}}function Ar(e){try{return JSON.stringify(e)?.length??0}catch{return 0}}function jr(e){let t=0,n=0;for(let r of e.messages){let e=kr(r.content);t+=e.chars,n+=e.images}return Math.ceil(t/4)+n*1600+(e.max_tokens??0)}function Mr(e,t){return e===`tpm`?t:1}function Nr(e){if(e)return new Tr(e,e/6e4)}var Pr=class{requests;tokens;concurrency;buckets;maxQueueMs;maxQueueSize;estimateTokensFn;estimateFraction;aimd;queue=[];wakeTimer;lastShrinkAt;constructor(e){Or(e),this.requests=Nr(e.requestsPerMinute),this.tokens=Nr(e.tokensPerMinute),e.maxConcurrent&&(this.concurrency=new Tr(e.maxConcurrent,0)),this.buckets=[{reason:`concurrency`,bucket:this.concurrency},{reason:`rpm`,bucket:this.requests},{reason:`tpm`,bucket:this.tokens}].flatMap(({reason:e,bucket:t})=>t?[{reason:e,bucket:t}]:[]),this.maxQueueMs=e.maxQueueMs??3e4,this.maxQueueSize=e.maxQueueSize??0,this.estimateTokensFn=e.estimateTokens??jr,this.estimateFraction=Er(e.estimateFraction),this.aimd=Dr(e.aimd)}estimate(e){return Math.ceil(this.estimateTokensFn(e)*this.estimateFraction)}async acquire(t,n){if(n?.aborted)throw new e.s(`LLM request aborted`,`aborted`);if(!Number.isFinite(t)||t<0)throw new e.s(`estimatedTokens must be a finite, non-negative number, got ${String(t)}`,`invalid_params`);if(this.tokens&&t>this.tokens.getCapacity())throw new e.s(`estimatedTokens (${t}) exceeds the configured tokensPerMinute capacity (${this.tokens.getCapacity()}); this call could never acquire capacity.`,`rate_limited`,{code:`rate_limit_capacity_exceeded`});if(this.queue.length===0){let e=this.tryAcquireBuckets(t);return e.ok?{release:this.makeRelease(t),waitedMs:0}:this.enqueue(t,e.reason,n)}if(this.maxQueueSize>0&&this.queue.length>=this.maxQueueSize)throw this.queueFullError();return this.enqueue(t,void 0,n)}queueFullError(){return new e.s(`Rate limit queue is full`,`rate_limited`,{code:`rate_limit_queue_full`})}enqueue(t,n,r){return new Promise((i,a)=>{let o={estimatedTokens:t,enqueuedAt:Date.now(),lastReason:n,resolve:e=>{l(),i(e)},reject:e=>{l(),this.wakeTimer&&=(clearTimeout(this.wakeTimer),void 0),this.drain(),a(e)}},s,c=()=>{o.reject(new e.s(`LLM request aborted`,`aborted`))},l=()=>{s&&clearTimeout(s),r?.removeEventListener(`abort`,c);let e=this.queue.indexOf(o);
|
|
13
|
+
/* v8 ignore next */
|
|
14
|
+
e!==-1&&this.queue.splice(e,1)};this.maxQueueMs>0&&(s=setTimeout(()=>{o.reject(new e.s(`Rate limit queue timed out before capacity was available`,`rate_limited`,{code:`rate_limit_queue_timeout`}))},this.maxQueueMs)),r?.addEventListener(`abort`,c,{once:!0}),this.queue.push(o),this.drain()})}tryAcquireBuckets(e){let t=[];for(let{reason:n,bucket:r}of this.buckets){let i=Mr(n,e);if(!r.tryTake(i)){for(let e of t)e.bucket.give(e.amount);return{ok:!1,reason:n}}t.push({bucket:r,amount:i})}return{ok:!0}}drain(){for(;this.queue.length>0;){let e=this.queue[0],t=this.tryAcquireBuckets(e.estimatedTokens);if(!t.ok){e.lastReason=t.reason,this.scheduleWake(t.reason,e.estimatedTokens);return}let n=Date.now()-e.enqueuedAt;e.resolve({release:this.makeRelease(e.estimatedTokens),waitedMs:n,reason:e.lastReason})}}scheduleWake(e,t){if(this.wakeTimer||e===`concurrency`)return;let n=(this.buckets.find(t=>t.reason===e)?.bucket)?.msUntilAvailable(Mr(e,t));
|
|
15
|
+
/* v8 ignore next */
|
|
16
|
+
if(n===void 0||!Number.isFinite(n))return;let r=Math.min(Math.max(1,Math.ceil(n)),Ne);this.wakeTimer=setTimeout(()=>{this.wakeTimer=void 0,this.drain()},r)}makeRelease(e){let t=!1;return(n,r=!1)=>{t||(t=!0,this.concurrency?.give(1),this.tokens&&n!==void 0&&Number.isFinite(n)&&this.tokens.give(e-n),r&&this.growOnSuccess(),this.drain())}}resizeRequestsCeiling(e){this.aimd&&this.requests&&this.requests.resize(e(this.aimd,this.requests.getCapacity()))}growOnSuccess(){this.resizeRequestsCeiling((e,t)=>Math.min(t+e.increaseBy,e.maxCapacity))}signalRateLimit(){if(!this.aimd||!this.requests)return;let e=Date.now();this.lastShrinkAt!==void 0&&e>=this.lastShrinkAt&&e-this.lastShrinkAt<6e4||(this.lastShrinkAt=e,this.resizeRequestsCeiling((e,t)=>Math.max(t*e.decreaseFactor,e.minCapacity)))}reactToRateLimitHint(e){if(!this.aimd||!e||e.remainingRequests===void 0)return;
|
|
17
|
+
/* v8 ignore next */
|
|
18
|
+
let t=this.aimd.proactiveFloor??0;t>0&&e.remainingRequests<=t&&this.signalRateLimit()}getState(){return{requestsRemaining:this.requests?.getAvailable(),tokensRemaining:this.tokens?.getAvailable(),concurrentInFlight:this.concurrency?this.concurrency.getCapacity()-this.concurrency.getAvailable():void 0}}};const Q=[`estimate`,`acquire`,`signalRateLimit`,`reactToRateLimitHint`],Fr=[`getState`,`readState`,`setLogger`];function Ir(e){let t=e;return Fr.filter(e=>t[e]!==void 0&&typeof t[e]!=`function`)}function Lr(e){let t=e;return Q.every(e=>typeof t[e]==`function`)&&Ir(e).length===0}function Rr(e){let t=e;return Q.some(e=>typeof t[e]==`function`)}function zr(t,n){if(t===void 0)return;if(Lr(t))return n&&t.setLogger?.(n),t;if(Rr(t)){let n=Q.filter(e=>typeof t[e]!=`function`);if(n.length>0)throw new e.s(`rateLimit looks like a RateLimiterAdapter but is missing: ${n.join(`, `)}. All four methods (${Q.join(`, `)}) are required.`,`invalid_params`)}let r=Ir(t);if(r.length>0){let n=t,i=r.map(e=>`${e} (${typeof n[e]})`).join(`, `);throw new e.s(`rateLimit's ${i} must be a function. ${r.length===1?`It is`:`They are`} optional; omit entirely rather than assigning a non-function value.`,`invalid_params`)}return new Pr(t)}const Br=[`assertAvailable`,`recordAttempt`],Vr=[`getSnapshot`,`readState`,`setLogger`];function Hr(t,n){if(!t)return;let r=t,i=e=>typeof r[e]==`function`;if(!Br.some(i))return new Ee(t);let a=Br.filter(e=>!i(e));if(a.length>0)throw new e.s(`retryBudget looks like a RetryBudgetAdapter but is missing: ${a.join(`, `)}. Both ${Br.join(` and `)} are required.`,`invalid_params`);let o=Vr.filter(e=>r[e]!==void 0&&!i(e));if(o.length>0){let t=o.map(e=>`${e} (${typeof r[e]})`).join(`, `);throw new e.s(`retryBudget's ${t} must be a function. ${o.length===1?`It is`:`They are`} optional; omit entirely rather than assigning a non-function value.`,`invalid_params`)}let s=t;return n&&s.setLogger?.(n),s}function Ur(e,t){let n=e.map((e,n)=>e.name??(n>0?`fallback[${n-1}]`:t)),r=n.find((e,t)=>n.indexOf(e)!==t);if(r!==void 0)throw Error(`target name "${r}" is used by more than one target; names identify targets in usage and events`);return n}function Wr(e,t,n){let r=[e,...t],i=Ur(r,n.providerName);return r.map((e,t)=>{let r=t>0,a=i[t],o=wr(e.circuitBreaker,a,e.model,n.onEvent,n.logger,n.middleware,n.middlewareTimeoutMs,r,e.client.supportsJsonObjectMode??!0,Oe(e.client)),s=Hr(e.retryBudget,n.logger);return new zn(a,e.client,e.model,{maxRetries:e.maxRetries??n.maxRetries??1,timeoutMs:e.timeoutMs??n.timeoutMs??25e3,chunkIdleTimeoutMs:e.chunkIdleTimeoutMs??n.chunkIdleTimeoutMs??3e4,readerStallTimeoutMs:e.readerStallTimeoutMs??n.readerStallTimeoutMs,baseDelayMs:e.baseDelayMs??n.baseDelayMs??500,maxRetryAfterMs:e.maxRetryAfterMs??n.maxRetryAfterMs??1e4,defaultMaxTokens:e.defaultMaxTokens??n.defaultMaxTokens??1e3,defaultTemperature:e.defaultTemperature===void 0?n.primaryDefaultTemperature:e.defaultTemperature,defaultReasoningEffort:e.defaultReasoningEffort===void 0?n.primaryDefaultReasoningEffort:e.defaultReasoningEffort,defaultBudgetTokens:e.defaultBudgetTokens===void 0?n.primaryDefaultBudgetTokens:e.defaultBudgetTokens,nonRetryableStatus:e.nonRetryableStatus??n.nonRetryableStatus??[400,401,402,403,404,413,422],parseJson:n.parseJson,logger:n.logger,redact:n.redact,onUsage:n.onUsage,onUsageFailure:n.onUsageFailure,onEvent:n.onEvent,breaker:o,budget:s,limiter:zr(e.rateLimit,n.logger),isFallback:r,middleware:n.middleware,dispatchOrder:n.dispatchOrder,middlewareTimeoutMs:n.middlewareTimeoutMs,detectSoftFailure:e.detectSoftFailure??n.detectSoftFailure})})}function $(e,t){return e.name??String(t)}function Gr(e){let t=/* @__PURE__ */ new Set;for(let n of e){if(t.has(n))throw Error(`middleware has a duplicate label "${n}"; a name can't match an unnamed middleware's bracketed position`);t.add(n)}}function Kr(e){let t=e.map($),n=/* @__PURE__ */ new Set;for(let e of t){if(n.has(e))throw Error(`middleware ordering has a duplicate name "${e}"; every middleware's resolved name must be unique`);n.add(e)}}function qr(e){let t=/* @__PURE__ */ new Map;e.forEach((n,r)=>{let i=n.ref;if(!i)return;let a=t.get(i);if(a!==void 0)throw Error(`middleware ordering has a ref reused across two entries ("${$(e[a],a)}" and "${$(n,r)}"); each middleware's ref must be unique to that middleware`);t.set(i,r)})}function Jr(e){return`ref`in e?{ref:e.ref,required:!0}:{ref:e,required:!1}}function Yr(e,t,n,r,i,a){let{ref:o,required:s}=Jr(r),c=t.get(o);if(!c){if(s)throw Error(`middleware "${n}" requires ref "${o.debugName}", which is not registered; this dependency is not optional`);a?.warn?.(`[VernLLM] middleware "${n}" references unknown ref "${o.debugName}" in runsAfter/runsBefore, ignoring it`);return}let l=i?c.id:n,u=i?n:c.id;e.get(l).mustPrecede.push(u)}function Xr(e,t){let n=e.map($),r=e.map((e,t)=>({id:n[t],entry:e,index:t,mustPrecede:[]})),i=new Map(r.map(e=>[e.id,e])),a=new Map(r.filter(e=>e.entry.ref).map(e=>[e.entry.ref,e]));for(let e of r){for(let n of e.entry.runsAfter??[])Yr(i,a,e.id,n,!0,t);for(let n of e.entry.runsBefore??[])Yr(i,a,e.id,n,!1,t)}return r}function Zr(e,t){let n=(e.entry.priority??0)-(t.entry.priority??0);return n===0?e.index-t.index:n}function Qr(e){let t=new Map(e.map(e=>[e.id,e])),n=new Map(e.map(e=>[e.id,0]));for(let t of e)for(let e of t.mustPrecede)n.set(e,n.get(e)+1);let r=e.filter(e=>n.get(e.id)===0),i=[],a=/* @__PURE__ */ new Set;for(;r.length>0;){r.sort(Zr);let e=r.shift();i.push(e.entry),a.add(e.id);for(let i of e.mustPrecede){let e=n.get(i)-1;n.set(i,e),e===0&&r.push(t.get(i))}}if(i.length<e.length){let t=e.filter(e=>!a.has(e.id)).map(e=>e.id);throw Error(`middleware ordering has a cycle among: ${t.join(`, `)}`)}return i}function $r(e,t){Kr(e),qr(e);let n=e.some(e=>e.runsAfter?.length||e.runsBefore?.length);return e.length<=1&&!n?[...e]:n?Qr(Xr(e,t)):e.map((e,t)=>({id:$(e,t),entry:e,index:t,mustPrecede:[]})).sort(Zr).map(e=>e.entry)}function ei(e,t){let n=[],r=[],i=[];for(let t of e)t.position===`outermost`?n.push(t):t.position===`innermost`?r.push(t):i.push(t);let a=[...i].sort((e,t)=>(typeof e.position==`number`?e.position:0)-(typeof t.position==`number`?t.position:0)),o=(e,n)=>t.indexOf(e)-t.indexOf(n);return n.sort(o),r.sort(o),[...n,...a,...r]}function ti(e,t){let n=$r(e,t),{registeredMiddlewareNames:r,transformMiddlewareNames:i}=H(n);return Gr(r),{transformOrder:n,wrapOrder:ei(n,e),names:r,transformNames:i}}function ni(e){let t=e;return typeof t.get==`function`&&typeof t.set==`function`}function ri(e){if(e===void 0)return new s;if(ni(e))return e;if(e.maxSize!==void 0&&(!Number.isFinite(e.maxSize)||e.maxSize<0||!Number.isInteger(e.maxSize)))throw RangeError(`cache.maxSize must be a finite, non-negative integer, got ${String(e.maxSize)}`);return new s(e.maxSize,e.eviction)}var ii=class{debugEnabled;constructor(e){this.debugEnabled=e}debug(e){this.debugEnabled&&console.debug(e)}warn(e){console.warn(e)}error(e,t){console.error(e,t??``)}},ai=class{logger;executors;cacheOrchestrator;declaredTargets;logicalCallDependencies;runOperationDependencies;callScopeDependencies;cachedCallInnerParams=/* @__PURE__ */ new WeakMap;cachedCallMeta=/* @__PURE__ */ new Map;constructor(e){this.logger=le(e.logger===`silent`?new pe:e.logger??new ii(e.debug??!1));let t=e.name??`primary`;this.cacheOrchestrator=new xe(ri(e.cache),this.logger);let n=ke(e.onEvent,this.logger),r=ti(e.middleware??[],this.logger),i=e.middlewareTimeoutMs??5e3,a=e.defaultTemperature===void 0?.2:e.defaultTemperature,o=e.defaultReasoningEffort,s=e.defaultBudgetTokens,c={client:e.client,model:e.model,name:t,maxRetries:e.maxRetries,timeoutMs:e.timeoutMs,chunkIdleTimeoutMs:e.chunkIdleTimeoutMs,readerStallTimeoutMs:e.readerStallTimeoutMs,baseDelayMs:e.baseDelayMs,maxRetryAfterMs:e.maxRetryAfterMs,defaultMaxTokens:e.defaultMaxTokens,defaultTemperature:a,defaultReasoningEffort:o,defaultBudgetTokens:s,nonRetryableStatus:e.nonRetryableStatus,circuitBreaker:e.circuitBreaker,rateLimit:e.rateLimit,retryBudget:e.retryBudget,detectSoftFailure:e.detectSoftFailure},l=Array.isArray(e.fallback)?e.fallback:e.fallback?[e.fallback]:[];this.executors=Wr(c,l,{providerName:t,primaryDefaultTemperature:a,primaryDefaultReasoningEffort:o,primaryDefaultBudgetTokens:s,maxRetries:e.maxRetries,timeoutMs:e.timeoutMs,chunkIdleTimeoutMs:e.chunkIdleTimeoutMs,readerStallTimeoutMs:e.readerStallTimeoutMs,baseDelayMs:e.baseDelayMs,maxRetryAfterMs:e.maxRetryAfterMs,defaultMaxTokens:e.defaultMaxTokens,nonRetryableStatus:e.nonRetryableStatus,parseJson:e.parseJson,redact:e.redact,onUsage:e.onUsage,onUsageFailure:e.onUsageFailure,onEvent:e.onEvent,logger:this.logger,middleware:r.transformOrder,dispatchOrder:r.wrapOrder,middlewareTimeoutMs:i,detectSoftFailure:e.detectSoftFailure}),this.declaredTargets=Bn(this.executors),this.logicalCallDependencies={fallbackOn:e.fallbackOn??v,reportEvent:n,middleware:r.transformOrder,middlewareTimeoutMs:i,logger:this.logger},this.callScopeDependencies={reportEvent:n,middleware:r.transformOrder,middlewareTimeoutMs:i,logger:this.logger},this.runOperationDependencies={pipeline:r,primaryExecutor:this.executors[0],targets:this.declaredTargets,middlewareTimeoutMs:i,logger:this.logger,reportEvent:n}}async call(t){if(t.signal?.aborted)throw new e.s(`LLM request aborted`,`aborted`);let n=t.requestId??globalThis.crypto.randomUUID(),r=this.cachedCallInnerParams.get(t),i=r!==void 0,a=i?void 0:Ve(t.context),o=i?void 0:Ue(t.state),s=this.resolveTargets(t.targets),{params:c,signal:l,breakController:u,dispose:d}=jn(t,!i),f=r??E(o);Le(f,rr(this.callScopeDependencies,a,Ie(t)));try{return(await nr(this.runOperationDependencies,c,n,f,s,(e,t)=>Zn({...this.logicalCallDependencies,targets:e},t.params,{requestId:n,middlewareState:f,breakController:u,onRefundError:(e,t)=>j(this.logger,e,t)}),i)).value}catch(e){throw Fe(e,l)}finally{d()}}resolveTargets(e){return Un(this.declaredTargets,this.declaredTargets,e)}runCached(e){return this.cacheOrchestrator.runCached(e)}async deleteCache(e){await this.cacheOrchestrator.deleteCache(e)}async cachedCall(t){let{call:n,...r}=t,i=n;if(i.reserveUsage||i.refundUsage)throw new e.s("`reserveUsage`/`refundUsage` were set inside `call`, where cachedCall ignores them. Move them to the top level of the cachedCall() params, alongside cacheKey/ttl, instead.",`invalid_params`);let a=i.requestId??globalThis.crypto.randomUUID(),o=E(Ue(i.state));Le(o,rr(this.callScopeDependencies,Ve(i.context),Ie(i)));let s=this.resolveTargets(i.targets),c=await this.cacheOrchestrator.resolveCacheKey(r.cacheKey),{holder:l,release:u}=Se(this.cachedCallMeta,c,e=>this.cacheOrchestrator.inFlightFor(e)),d=i.meta,f=/* @__PURE__ */ new Set,p=!1,m=()=>{d&&!p&&(d.current=l.current)},{signal:h,timer:g}=Pe(i.deadlineMs,An([r.signal,i.signal])),_={...r,signal:h},v={...i,requestId:a,signal:h},y=(e,t,n)=>{let{deadlineMs:r,...i}=v,a={...i,targets:t.map(e=>e.executor.providerName),signal:e,meta:n};return this.cachedCallInnerParams.set(a,o),this.call(a).finally(()=>{this.cachedCallInnerParams.delete(a)})},b=(e,t)=>y(e,t,l).finally(m),x,S=e=>{x=e},C=!1;try{let e=await nr(this.runOperationDependencies,v,a,o,s,async(e,t)=>{if(t.number>0){let n={},r={..._,signal:t.params.signal},a=i.stream?await this.cacheOrchestrator.runFreshStream({...r,openStream:r=>y(Pn(r,t.number),e,n)}):await this.cacheOrchestrator.runFresh({...r,fn:r=>y(Pn(r,t.number),e,n)});return f.add(n.current),{value:a,meta:n.current}}let n={..._,signal:t.params.signal??h},r=i.stream?await this.cacheOrchestrator.runCachedStream({...n,onOutcome:S,openStream:t=>b(t,e)},!!i.tools):await this.runCached({...n,onOutcome:S,fn:t=>b(t,e)});return x?{value:r,meta:l.current,cache:x}:{value:r,meta:l.current}});if(p=d?.current!==void 0&&f.has(d.current),i.stream){let t=e.value,n=()=>{m(),u()};return C=!0,t.finalResult.then(n,n),t}return m(),e.value}catch(e){throw Fe(e,h)}finally{C||u(),clearTimeout(g)}}getCircuitState(e){let t=P(this.executors,e?.index??0,`getCircuitState`);return F(t.isolateByModel,e?.model,`getCircuitState`,this.logger),t.getCircuitState(e?.model??t.model)}getFailureBreakdown(e){let t=P(this.executors,e?.index??0,`getFailureBreakdown`);return F(t.isolateByModel,e?.model,`getFailureBreakdown`,this.logger),t.getFailureBreakdown(e?.model??t.model)}getRetryBudgetState(e){return P(this.executors,e?.index??0,`getRetryBudgetState`).getRetryBudgetState()}getRateLimitState(e){return P(this.executors,e?.index??0,`getRateLimitState`).getRateLimitState()}getCircuitStates(e){return this.executors.map((t,n)=>({provider:t.providerName,index:n,isFallback:n>0,isolateByModel:t.isolateByModel,state:t.getCircuitState(e??t.model)}))}async readRateLimitState(e){return P(this.executors,e?.index??0,`readRateLimitState`).readRateLimitState()}async readCircuitStates(e){return Promise.all(this.executors.map(async(t,n)=>({provider:t.providerName,index:n,isFallback:n>0,isolateByModel:t.isolateByModel,state:await t.readCircuitState(e??t.model)})))}async readRetryBudgetState(e){return P(this.executors,e?.index??0,`readRetryBudgetState`).readRetryBudgetState()}openCircuit(e){let t=P(this.executors,e?.index??0,`openCircuit`);F(t.isolateByModel,e?.model,`openCircuit`,this.logger),t.openCircuit(e?.model??t.model,{requestId:globalThis.crypto.randomUUID(),state:E()})}closeCircuit(e){let t=P(this.executors,e?.index??0,`closeCircuit`);F(t.isolateByModel,e?.model,`closeCircuit`,this.logger),t.closeCircuit(e?.model??t.model,{requestId:globalThis.crypto.randomUUID(),state:E()})}};function oi(e){return e}function si(e){return e}exports.CircuitBreaker=pr,exports.ConsecutiveTripping=ur,exports.ConsoleLogger=ii,exports.FallbackExhaustedError=y,exports.InMemoryCacheAdapter=s,exports.LLMError=e.s,exports.NormalizedCacheAdapter=c,exports.RateLimiter=Pr,exports.RetryBudget=Ee,exports.RollingTripping=dr,exports.TieredCacheAdapter=l,exports.VernLLM=ai,exports.createMiddleware=D,exports.createMiddlewareRef=w,exports.createMiddlewareStateBag=E,exports.createStateKey=C,exports.defaultEstimateTokens=jr,exports.defaultFallbackOn=v,exports.defineCachedCallParams=si,exports.defineCallParams=oi,exports.defineTool=f,exports.hasIssues=e.c,exports.isFallbackExhaustedError=b,exports.isLLMError=e.l,exports.isStreamResult=g,exports.isToolCallResult=p,exports.metaRef=x,exports.requireRef=ee,exports.stateEntry=T;
|
|
3
19
|
//# sourceMappingURL=index.cjs.map
|