@bivelio/savings-layer 0.4.28 → 0.4.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/gateway/bin.js +516 -512
- package/dist/index.d.ts +59 -7
- package/dist/index.js +1057 -1050
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var bo="2026-09-27",Yt={"gpt-4.1":{inputPer1k:.002,outputPer1k:.008,cachedInputPer1k:5e-4},"gpt-4.1-mini":{inputPer1k:4e-4,outputPer1k:.0016,cachedInputPer1k:1e-4},"gpt-4.1-nano":{inputPer1k:1e-4,outputPer1k:4e-4,
|
|
2
2
|
cachedInputPer1k:25e-6},"gpt-4o":{inputPer1k:.0025,outputPer1k:.01,cachedInputPer1k:.00125},"gpt-4o-mini":{inputPer1k:15e-5,outputPer1k:6e-4,cachedInputPer1k:75e-6},"gpt-4-turbo":{inputPer1k:.01,outputPer1k:.03},
|
|
3
3
|
"gpt-4":{inputPer1k:.03,outputPer1k:.06},"gpt-3.5-turbo":{inputPer1k:5e-4,outputPer1k:.0015},"gpt-5":{inputPer1k:.00125,outputPer1k:.01,cachedInputPer1k:125e-6},"gpt-5-codex":{inputPer1k:.00125,outputPer1k:.01,
|
|
4
4
|
cachedInputPer1k:125e-6},"gpt-5-mini":{inputPer1k:25e-5,outputPer1k:.002,cachedInputPer1k:25e-6},"gpt-5-nano":{inputPer1k:5e-5,outputPer1k:4e-4,cachedInputPer1k:5e-6},"gpt-5.1-codex":{inputPer1k:.00125,
|
|
@@ -20,25 +20,25 @@ haiku":{inputPer1k:25e-5,outputPer1k:.00125,cachedInputPer1k:3e-5},"gemini-3.8-f
|
|
|
20
20
|
cachedInputPer1k:75e-6},"gemini-3.6-flash":{inputPer1k:75e-5,outputPer1k:.00375,cachedInputPer1k:75e-6},"gemini-3.1-flash-lite":{inputPer1k:25e-5,outputPer1k:.0015,cachedInputPer1k:25e-6},"gemini-3-fl\
|
|
21
21
|
ash-preview":{inputPer1k:5e-4,outputPer1k:.003,cachedInputPer1k:5e-5},"gemini-3.5-flash":{inputPer1k:.0015,outputPer1k:.009,cachedInputPer1k:15e-5},"gemini-3.5-flash-lite":{inputPer1k:3e-4,outputPer1k:.0025,
|
|
22
22
|
cachedInputPer1k:3e-5},"gemini-3.1-pro-preview":{inputPer1k:.002,outputPer1k:.012,cachedInputPer1k:2e-4},"gemini-2.5-pro":{inputPer1k:.00125,outputPer1k:.01,cachedInputPer1k:125e-6},"gemini-2.5-flash":{
|
|
23
|
-
inputPer1k:3e-4,outputPer1k:.0025,cachedInputPer1k:3e-5}},
|
|
24
|
-
|
|
25
|
-
cachedInputPer1k:15e-5}}],"gemini-3.6-flash":[{vigenteDesde:"2027-01-01",precio:{inputPer1k:.0015,outputPer1k:.0075,cachedInputPer1k:15e-5}}]},
|
|
26
|
-
precio:
|
|
27
|
-
for(let n of
|
|
28
|
-
""&&c!=="-"&&c!=="."&&c!=="_")continue;let u=i.slice(a.length+1);if(!(/^\d/.test(u)&&!/^\d{4}/.test(u)))return t[a]}}function
|
|
29
|
-
p-research","o4-mini-deep-research","gpt-5.5-pro","gpt-5.4-pro","gpt-5.2-pro","gpt-5-pro","gpt-5.5-cyber","gemini-3.8-flash-tts","gemini-3.8-flash-lite-tts","gemini-3.1-flash-lite-image"],
|
|
30
|
-
fromEntries(
|
|
31
|
-
return
|
|
32
|
-
1))))return
|
|
23
|
+
inputPer1k:3e-4,outputPer1k:.0025,cachedInputPer1k:3e-5}},id={"gemini-3.8-flash":{vigenteHasta:"2027-01-01"},"gemini-3.7-flash":{vigenteHasta:"2027-01-01"},"gemini-3.6-flash":{vigenteHasta:"2027-01-01"}},
|
|
24
|
+
sd={"gemini-3.8-flash":[{vigenteDesde:"2027-01-01",precio:{inputPer1k:.0015,outputPer1k:.0075,cachedInputPer1k:15e-5}}],"gemini-3.7-flash":[{vigenteDesde:"2027-01-01",precio:{inputPer1k:.0015,outputPer1k:.0075,
|
|
25
|
+
cachedInputPer1k:15e-5}}],"gemini-3.6-flash":[{vigenteDesde:"2027-01-01",precio:{inputPer1k:.0015,outputPer1k:.0075,cachedInputPer1k:15e-5}}]},ad=Object.fromEntries(Object.keys(Yt).map(t=>[t,[{...id[t],
|
|
26
|
+
precio:Yt[t]},...sd[t]??[]]]));var cd=864e13;function Vs(t){let e=t instanceof Date?t.getTime():t,n=typeof e=="number"&&Number.isFinite(e)&&Math.abs(e)<=cd?e:Date.now();return new Date(n).toISOString().slice(0,10)}function Us(t,e){
|
|
27
|
+
for(let n of ad[t]??[])if(!(n.vigenteDesde!==void 0&&e<n.vigenteDesde)&&!(n.vigenteHasta!==void 0&&e>=n.vigenteHasta))return n.precio}function vo(t,e,n){if(!n)return;let r=t[n];if(r)return r;let o=n.lastIndexOf("/"),i=o>=0?n.slice(o+1):n,s=t[i];if(s)return s;for(let a of e){if(!i.startsWith(a))continue;let c=i.charAt(a.length);if(c!==
|
|
28
|
+
""&&c!=="-"&&c!=="."&&c!=="_")continue;let u=i.slice(a.length+1);if(!(/^\d/.test(u)&&!/^\d{4}/.test(u)))return t[a]}}function yo(t){return Object.keys(t).sort((e,n)=>n.length-e.length)}var ud=["o3-dee\
|
|
29
|
+
p-research","o4-mini-deep-research","gpt-5.5-pro","gpt-5.4-pro","gpt-5.2-pro","gpt-5-pro","gpt-5.5-cyber","gemini-3.8-flash-tts","gemini-3.8-flash-lite-tts","gemini-3.1-flash-lite-image"],go={...Yt,...Object.
|
|
30
|
+
fromEntries(ud.map(t=>[t,null]))},ld=yo(go);function jn(t,e){let n=Tt(t);return n===void 0?void 0:Us(n,Vs(e))}var dd=Object.fromEntries(Object.keys(go).map(t=>[t,go[t]===null?null:t]));function Tt(t){
|
|
31
|
+
return vo(dd,ld,t)??void 0}var pd=/^\d{4}-?\d{2}-?\d{2}$/;function We(t,e){let n=Tt(t);if(n===void 0)return;let r=t.lastIndexOf("/"),o=r>=0?t.slice(r+1):t;if(!(n!==t&&n!==o&&!pd.test(o.slice(n.length+
|
|
32
|
+
1))))return Us(n,Vs(e))}var Me="0.4.29",Nn="x-bvsala-version";var fd=0;function Qt(){let t=globalThis.crypto;if(t?.randomUUID)return t.randomUUID();let e=new Uint8Array(16);if(t?.getRandomValues)t.getRandomValues(e);else {let r=++fd,o=Date.now?Date.now():0;for(let i=0;i<
|
|
33
33
|
16;i++)e[i]=(i<6?r>>>i*8:o>>>(i-6)*8)&255;}e[6]=e[6]&15|64,e[8]=e[8]&63|128;let n=[];for(let r=0;r<16;r++)n.push(e[r].toString(16).padStart(2,"0"));return `${n[0]}${n[1]}${n[2]}${n[3]}-${n[4]}${n[5]}-${n[6]}${n[7]}\
|
|
34
|
-
-${n[8]}${n[9]}-${n[10]}${n[11]}${n[12]}${n[13]}${n[14]}${n[15]}`}var
|
|
34
|
+
-${n[8]}${n[9]}-${n[10]}${n[11]}${n[12]}${n[13]}${n[14]}${n[15]}`}var rg=["exact","task_equivalent","not_verified","bounded_degradation","rejected"];function ig(t){return {v:1,task:t.task,goal:t.goal,rules:t.rules??[],facts:t.facts??[],refs:t.refs??[],...t.delta?{delta:t.delta}:{},outputContract:t.outputContract}}var ko=class{id;exact=false;constructor(e="heuristic"){this.id=e;}count(e){if(e.length===0)return 0;let n=e.match(/[A-Za-z]+|\d+|\s+|[^\sA-Za-z\d]/g)??[],r=0;for(let o of n){let i=o[0];if(/\s/.test(i)){let s=(o.
|
|
35
35
|
match(/\n/g)??[]).length;r+=s+Math.floor(Math.max(0,o.length-1)/2);}else /[A-Za-z]/.test(i)?r+=Math.max(1,Math.ceil(o.length/4)):/\d/.test(i)?r+=Math.max(1,Math.ceil(o.length/2)):r+=1;}return Math.max(r,
|
|
36
|
-
Math.ceil(e.length/4))}},
|
|
36
|
+
Math.ceil(e.length/4))}},Ct=new ko;var xo=class{estimators=new Map;modelToTokenizer=new Map;fallbackId;constructor(e=Ct){this.fallbackId=e.id,this.estimators.set(e.id,e);}register(e){return this.estimators.set(e.id,e),this}mapModel(e,n){
|
|
37
37
|
return this.modelToTokenizer.set(e,n),this}resolve(e){let n=e.tokenizer?this.estimators.get(e.tokenizer):void 0;if(n)return n;if(e.model){let r=this.modelToTokenizer.get(e.model);if(r){let o=this.estimators.
|
|
38
|
-
get(r);if(o)return o}}return this.estimators.get(this.fallbackId)}count(e,n){return this.resolve(n).count(e)}},
|
|
39
|
-
"gpt-4.1-nano","o1","o1-mini","o3","o3-mini","o4-mini"],cl100k_base:["gpt-4","gpt-4-turbo","gpt-3.5-turbo","text-embedding-3-small","text-embedding-3-large"]};async function
|
|
40
|
-
["o200k_base","cl100k_base"],r=false;for(let o of n){let i;try{i=await import(`gpt-tokenizer/encoding/${o}`);}catch{continue}if(typeof i.encode=="function"){t.register(new
|
|
41
|
-
[])t.mapModel(s,o),t.mapModel(`openai/${s}`,o);}}return r}var
|
|
38
|
+
get(r);if(o)return o}}return this.estimators.get(this.fallbackId)}count(e,n){return this.resolve(n).count(e)}},wo=new xo;var So=class{constructor(e,n){this.encoder=n;this.id=e;}encoder;id;exact=true;count(e){return e.length===0?0:this.encoder.encode(e).length}},$n={o200k_base:["gpt-4o","gpt-4o-mini","gpt-4.1","gpt-4.1-mini",
|
|
39
|
+
"gpt-4.1-nano","o1","o1-mini","o3","o3-mini","o4-mini"],cl100k_base:["gpt-4","gpt-4-turbo","gpt-3.5-turbo","text-embedding-3-small","text-embedding-3-large"]};async function To(t,e={}){let n=e.codificaciones??
|
|
40
|
+
["o200k_base","cl100k_base"],r=false;for(let o of n){let i;try{i=await import(`gpt-tokenizer/encoding/${o}`);}catch{continue}if(typeof i.encode=="function"){t.register(new So(o,i)),r=true;for(let s of $n[o]??
|
|
41
|
+
[])t.mapModel(s,o),t.mapModel(`openai/${s}`,o);}}return r}var gg=$n,bg=To;var Ws=2592e6,Js=.95,Ks=8,Et=class{avoidedLlm=0;baselineLlm=1;actualLlm=0;baselineRetrieval=0;actualRetrieval=0;baselineTools=0;actualTools=0;retries=0;baselineInput=0;actualInput=0;eliminatedInput=0;compressedInput=0;baselineOutput=0;actualOutput=0;eliminatedOutput=0;providerCachedInput=0;cacheWriteInputTokens=0;cacheWritePremiumUsd=0;providerCacheWritePremiumUsd=0;sentInputLocal=0;removedInputLocal=0;elididoLocal=0;compactedLocal=0;estimatorExact=false;repairOutput=0;repairInput=0;callsWithoutUsage=0;discoveryInput=0;discoveryOutput=0;extraCostUsd=0;cascadeInput=0;cascadeOutput=0;cascadeAttempt(e,n,r=1){
|
|
42
42
|
this.cascadeInput+=Math.max(0,e.inputTokens),this.cascadeOutput+=Math.max(0,e.outputTokens);let o=Math.max(0,e.cacheWriteInputTokens??0);this.extraCostUsd+=Math.max(0,e.inputTokens)/1e3*n.inputPer1k+Math.
|
|
43
43
|
max(0,e.outputTokens)/1e3*n.outputPer1k+o/1e3*n.inputPer1k*Math.max(0,r-1);}cacheWritePremium(e,n,r){let o=Math.max(0,e);this.cacheWriteInputTokens+=o,this.cacheWritePremiumUsd+=o/1e3*r.inputPer1k*Math.
|
|
44
44
|
max(0,n-1);}compressionReport=void 0;eliminate(e){this.eliminatedInput+=Math.max(0,e);}compress(e,n){this.compressedInput+=Math.max(0,e-n);}providerCached(e){this.providerCachedInput+=Math.max(0,e);}providerCacheWritePremium(e,n,r){
|
|
@@ -49,42 +49,45 @@ repairOutput-this.discoveryOutput):this.baselineOutput}estimateCost(e){let n=thi
|
|
|
49
49
|
removedInputLocal===0?"measured":"estimated";}else this.actualInput>0?(this.baselineInput=this.actualInput,r="measured"):(this.baselineInput=0,r="unmeasured");let o=n?Math.max(0,this.actualOutput-this.
|
|
50
50
|
repairOutput-this.discoveryOutput):this.baselineOutput,i=e.cachedInputPer1k??e.inputPer1k,s=Math.min(this.providerCachedInput,this.actualInput),a=h=>Math.max(0,h-s)/1e3*e.inputPer1k+s/1e3*i,c=n?null:this.
|
|
51
51
|
reference,u=n?this.providerCacheWritePremiumUsd:0,l=c?c.tierFactor*(this.baselineInput/1e3*c.cachedInputPer1k+this.baselineOutput/1e3*c.outputPer1k):a(this.baselineInput)+o/1e3*e.outputPer1k+u;c&&(r=l>
|
|
52
|
-
0?"reference":"estimated");let d=a(this.actualInput)+this.actualOutput/1e3*e.outputPer1k+this.extraCostUsd+this.cacheWritePremiumUsd+u,p=l===0?0:1-d/l;return {baselineEstimate:
|
|
53
|
-
p),basis:r}}};function
|
|
52
|
+
0?"reference":"estimated");let d=a(this.actualInput)+this.actualOutput/1e3*e.outputPer1k+this.extraCostUsd+this.cacheWritePremiumUsd+u,p=l===0?0:1-d/l;return {baselineEstimate:Hs(l),actual:Hs(d),netSavings:md(
|
|
53
|
+
p),basis:r}}};function Hs(t){return Math.round(t*1e10)/1e10}function md(t){return Math.round(t*1e6)/1e6}var hd=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,
|
|
54
54
|
4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,
|
|
55
55
|
1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,
|
|
56
|
-
1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),
|
|
56
|
+
1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),gd=new TextEncoder;function Re(t,e){return t>>>e|t<<32-e}function Gs(t){let e=gd.encode(t),n=e.length*
|
|
57
57
|
8,r=(e.length+8>>6)+1,o=new Uint8Array(r*64);o.set(e),o[e.length]=128;let i=new DataView(o.buffer);i.setUint32(o.length-8,Math.floor(n/4294967296)),i.setUint32(o.length-4,n>>>0);let s=new Uint32Array(
|
|
58
58
|
[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),a=new Uint32Array(64);for(let u=0;u<o.length;u+=64){for(let b=0;b<16;b++)a[b]=i.getUint32(u+b*4);for(let b=16;b<
|
|
59
59
|
64;b++){let y=a[b-15],k=a[b-2],T=Re(y,7)^Re(y,18)^y>>>3,w=Re(k,17)^Re(k,19)^k>>>10;a[b]=a[b-16]+T+a[b-7]+w|0;}let l=s[0],d=s[1],p=s[2],h=s[3],m=s[4],g=s[5],f=s[6],v=s[7];for(let b=0;b<64;b++){let y=Re(
|
|
60
|
-
m,6)^Re(m,11)^Re(m,25),k=m&g^~m&f,T=v+y+k+
|
|
61
|
-
s[4]=s[4]+m|0,s[5]=s[5]+g|0,s[6]=s[6]+f|0,s[7]=s[7]+v|0;}let c="";for(let u=0;u<8;u++)c+=(s[u]>>>0).toString(16).padStart(8,"0");return c}var
|
|
62
|
-
|
|
63
|
-
normalize("NFC"),e=e.replace(
|
|
64
|
-
|
|
65
|
-
return
|
|
66
|
-
return t}function
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
60
|
+
m,6)^Re(m,11)^Re(m,25),k=m&g^~m&f,T=v+y+k+hd[b]+a[b]|0,w=Re(l,2)^Re(l,13)^Re(l,22),P=l&d^l&p^d&p,x=w+P|0;v=f,f=g,g=m,m=h+T|0,h=p,p=d,d=l,l=T+x|0;}s[0]=s[0]+l|0,s[1]=s[1]+d|0,s[2]=s[2]+p|0,s[3]=s[3]+h|0,
|
|
61
|
+
s[4]=s[4]+m|0,s[5]=s[5]+g|0,s[6]=s[6]+f|0,s[7]=s[7]+v|0;}let c="";for(let u=0;u<8;u++)c+=(s[u]>>>0).toString(16).padStart(8,"0");return c}var bd=/\s+/g,vd=[[/′′/g,'"'],[/[‘’‚‛′´`]/g,"'"],[/[“”„‟″«»]/g,'"'],[/[‐-―−]/g,"-"],[/⁄/g,"/"],[/…/g,""]],yd=/[¿?¡!;.,:'"·•]/g,kd=/([a-z])\p{M}+/gu,xd=/(^|\s)\p{M}+/gu,
|
|
62
|
+
Co=/\p{L}/u;function me(t){return t>="0"&&t<="9"}function Bn(t){let e=t.normalize("NFKC").toLowerCase();for(let[n,r]of vd)e=e.replace(n,r);return e=e.normalize("NFD").replace(kd,"$1").replace(xd,"$1").
|
|
63
|
+
normalize("NFC"),e=e.replace(yd,(n,r,o)=>{let i=o[r-1]??"",s=o[r+1]??"";switch(n){case "\xBF":case "?":case "\xA1":case ";":return me(i)&&me(s)?n:"";case "!":return me(i)?n:"";case ".":case ",":return me(i)&&
|
|
64
|
+
me(s)||me(s)&&!me(i)&&!Co.test(i)?n:"";case ":":return me(i)&&me(s)?n:"";case "'":case '"':return Co.test(i)&&Co.test(s)||me(i)||me(s)?n:"";default:return me(i)||me(s)?n:""}}),e.replace(bd," ").trim()}function Y(t){
|
|
65
|
+
return Gs(t)}function he(t){return JSON.stringify(Eo(t))}function Eo(t){if(Array.isArray(t))return t.map(Eo);if(t&&typeof t=="object"){let e={};for(let n of Object.keys(t).sort())e[n]=Eo(t[n]);return e}
|
|
66
|
+
return t}function Po(t){return t.replace(/[-_]?\d{4,}.*$/,"").replace(/[-_](mini|nano|small|large|latest)$/i,"")}function wd(t){let e=new Map,n=o=>{if(typeof o!="string"||o==="")return {sin:o??null};let i=e.
|
|
67
|
+
get(o);return i===void 0&&e.set(o,i=e.size),i},r=t.map(o=>{if(o.role==="assistant")return !o.toolCalls||o.toolCalls.length===0?null:{calls:o.toolCalls.map(a=>({...a.id!=null?{id:n(a.id)}:{},name:a.name,
|
|
68
|
+
arguments:a.arguments}))};if(o.role!=="tool")return null;let i=o.toolCallId??o.metadata?.tool_call_id,s={...i!==void 0?{id:n(i)}:{},...o.isError===true?{isError:true}:{},...o.name?{name:o.name}:{}};return Object.
|
|
69
|
+
keys(s).length>0?s:null});if(!r.every(o=>o===null))return Y(he(r))}function Ro(t){let e=t.context??{},n=wd(t.messages),r=t.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
|
|
70
|
+
`),o=t.messages.filter(s=>s.role!=="system").map(s=>`${s.role}:${Bn(s.content)}`).join(`
|
|
71
|
+
`),i=(t.tools??[]).map(s=>({id:s.id,risk:s.risk,parameters:s.parameters??null})).sort((s,a)=>s.id.localeCompare(a.id));return {model:t.model,modelFamily:Po(t.model),messages:t.messages,normalizedText:o,
|
|
72
|
+
systemPromptHash:Y(r),toolsetHash:Y(he(i)),...n!==void 0?{toolTurnsHash:n}:{},structuredDataHash:t.structuredData!==void 0?Y(he(t.structuredData)):"none",schemaVersion:t.response?.version??t.response?.
|
|
73
|
+
contractId??"none",contractId:t.response?.contractId??null,temperature:t.temperature??null,seed:t.seed??null,tenantId:e.tenantId??"anonymous",authorizationScope:e.authorizationScope??"default",principal:e.
|
|
74
|
+
sessionId??null,locale:e.locale??"und",knowledgeEpoch:e.knowledgeEpoch??"none",freshnessBucket:e.freshnessBucket??"any",safetyPolicyVersion:e.safetyPolicyVersion??"none",tokenizer:t.tokenizer,original:t}}var Zs="n2";function Ys(t){return t.toolTurnsHash!==void 0?{toolTurns:t.toolTurnsHash}:{}}function Do(t,e={}){let n=e.servedModel??t.model,r=he({tenant:t.tenantId,scope:t.authorizationScope,principal:t.
|
|
75
|
+
principal,text:t.normalizedText,modelFamily:n===t.model?t.modelFamily:Po(n),model:n,system:t.systemPromptHash,contract:t.contractId,schema:t.schemaVersion,tools:t.toolsetHash,...Ys(t),data:t.structuredDataHash,
|
|
76
|
+
locale:t.locale,temperature:t.temperature,seed:t.seed,knowledgeEpoch:t.knowledgeEpoch,freshness:t.freshnessBucket,safety:t.safetyPolicyVersion});return `bvsala:exact:${Zs}:${Y(r)}`}function Qs(t,e={}){
|
|
77
|
+
let n=he({tenant:t.tenantId,scope:t.authorizationScope,principal:t.principal,text:t.normalizedText,model:e.servedModel??t.model,system:t.systemPromptHash,contract:t.contractId,schema:t.schemaVersion,tools:t.
|
|
78
|
+
toolsetHash,...Ys(t),data:t.structuredDataHash,temperature:t.temperature,seed:t.seed,deferrable:e.deferrable===true,toolDiscovery:e.toolDiscovery===true,maxOut:e.maxOutputTokens??null});return `bvsala:infl\
|
|
79
|
+
ight:${Zs}:${Y(n)}`}var Sd=new RegExp("\\b("+["now|today|current|currently|latest|live|price|prices|stock|availability|weather|score|breaking","ahora|hoy|actual|actualmente|ultimo|\xFAltimo|precio|precios|disponibilidad|cot\
|
|
77
80
|
izacion|cotizaci\xF3n","ara|avui|preu|preus|disponibilitat|darrer","maintenant|aujourd'hui|actuel|actuelle|dernier|prix|disponibilite|disponibilit\xE9|meteo|m\xE9t\xE9o","jetzt|heute|aktuell|aktuelle|\
|
|
78
81
|
neueste|preis|preise|verfugbarkeit|verf\xFCgbarkeit|wetter|kurs","adesso|oggi|attuale|ultimo|prezzo|prezzi|disponibilita|disponibilit\xE0|meteo","agora|hoje|atual|ultimo|\xFAltimo|preco|pre\xE7o|precos|pre\xE7\
|
|
79
82
|
os|disponibilidade|cotacao|cota\xE7\xE3o","nu|vandaag|huidige|laatste|prijs|prijzen|beschikbaarheid|weer|koers","teraz|dzisiaj|dzis|dzi\u015B|aktualny|aktualna|najnowszy|cena|ceny|dostepnosc|dost\u0119pno\u015B\u0107|pog\
|
|
80
83
|
oda","simdi|\u015Fimdi|bugun|bug\xFCn|guncel|g\xFCncel|son|fiyat|fiyatlar|stok|hava","sekarang|hari ini|terkini|terbaru|harga|ketersediaan|cuaca","bay gio|b\xE2y gi\u1EDD|hom nay|h\xF4m nay|hien tai|hi\u1EC7n t\u1EA1i|moi\
|
|
81
|
-
nhat|m\u1EDBi nh\u1EA5t|gia|gi\xE1|thoi tiet|th\u1EDDi ti\u1EBFt"].join("|")+")\\b","i"),
|
|
84
|
+
nhat|m\u1EDBi nh\u1EA5t|gia|gi\xE1|thoi tiet|th\u1EDDi ti\u1EBFt"].join("|")+")\\b","i"),Td=new RegExp("\\b("+["my|mine|our|ours|account|balance|subscription|invoice|order|profile","mi|mis|mio|m\xEDo|nu\
|
|
82
85
|
estro|nuestra|cuenta|factura|pedido|saldo|suscripcion|suscripci\xF3n|perfil","meu|meva|nostre|compte|factura|comanda|saldo|subscripcio|subscripci\xF3|perfil","mon|ma|mes|notre|nos|compte|solde|facture\
|
|
83
86
|
|commande|abonnement|profil","mein|meine|meinem|unser|unsere|konto|kontostand|saldo|rechnung|bestellung|abo|abonnement|profil","mio|mia|miei|nostro|nostra|conto|saldo|fattura|ordine|abbonamento|profil\
|
|
84
87
|
o","meu|minha|meus|nosso|nossa|conta|saldo|fatura|pedido|assinatura|perfil","mijn|onze|ons|rekening|saldo|factuur|bestelling|abonnement|profiel","moj|m\xF3j|moja|moje|nasz|nasza|konto|saldo|faktura|zamow\
|
|
85
88
|
ienie|zam\xF3wienie|subskrypcja|profil","benim|bizim|hesap|hesabim|hesab\u0131m|bakiye|fatura|siparis|sipari\u015F|abonelik|profil","saya|kami|akun|saldo|tagihan|pesanan|langganan|profil","cua toi|c\u1EE7a\
|
|
86
|
-
t\xF4i|tai khoan|t\xE0i kho\u1EA3n|so du|s\u1ED1 d\u01B0|hoa don|h\xF3a \u0111\u01A1n|don hang|\u0111\u01A1n h\xE0ng|thue bao|thu\xEA bao"].join("|")+")\\b","i");function
|
|
87
|
-
r=(t.original.tools??[]).some(b=>b.risk==="write"||b.risk==="destructive"),o=t.freshnessBucket==="live"||t.freshnessBucket==="hour"||
|
|
89
|
+
t\xF4i|tai khoan|t\xE0i kho\u1EA3n|so du|s\u1ED1 d\u01B0|hoa don|h\xF3a \u0111\u01A1n|don hang|\u0111\u01A1n h\xE0ng|thue bao|thu\xEA bao"].join("|")+")\\b","i");function Fn(t){let e=[],n=t.normalizedText,
|
|
90
|
+
r=(t.original.tools??[]).some(b=>b.risk==="write"||b.risk==="destructive"),o=t.freshnessBucket==="live"||t.freshnessBucket==="hour"||Sd.test(n),i=Td.test(n),s=(t.temperature??0)>.3&&t.seed==null,a=t.messages.
|
|
88
91
|
filter(b=>b.role==="user").length,c=(t.original?.tools?.length??0)>0,u=t.messages.some(b=>b.role==="tool"||b.role==="assistant"&&(b.toolCalls?.length??0)>0),l=c||u||a>1,d=t.original?.savings?.semanticCache===
|
|
89
92
|
"include-agentic";r&&e.push("write/destructive tools present"),o&&e.push("freshness-sensitive request"),i&&e.push("personalized/account-scoped request"),s&&e.push("stochastic sampling (temp>0.3, no se\
|
|
90
93
|
ed)");let p=o&&(t.freshnessBucket==null||t.freshnessBucket==="any"),h=t.freshnessBucket==="live",m=i&&t.principal==null,g=!s&&!p&&!h&&!m&&!r;r&&e.push("write/destructive tools \u2192 exact cache off (side \
|
|
@@ -92,248 +95,249 @@ effects must execute)"),h&&e.push("freshnessBucket=live \u2192 exact cache off (
|
|
|
92
95
|
personalized request with no principal (context.sessionId) \u2192 exact cache off");let f=!r&&!o&&!i&&!s&&t.freshnessBucket!=="day"&&(!l||d);l&&!d?e.push('agentic request (tools, tool calls/results or\
|
|
93
96
|
more than one user turn) \u2192 semantic cache off by default (opt in with savings.semanticCache: "include-agentic")'):l&&d&&e.push('agentic request admitted to the semantic cache by savings.semantic\
|
|
94
97
|
Cache: "include-agentic" (write, freshness, personalization and sampling vetoes still apply)');let v=!r&&!o&&!i&&!s&&t.freshnessBucket!=="day";return {allowExactCache:g,allowSemanticCache:f,allowElision:v,
|
|
95
|
-
allowSingleflight:!r&&!m,allowCompression:true,requiresFreshData:o,hasSideEffects:r,isPersonalized:i,isAgentic:l,maxCacheAgeMs:t.freshnessBucket==="hour"?36e5:t.freshnessBucket==="day"?864e5:null,reasons:e}}var
|
|
96
|
-
now()>n.expiresAtMs?(this.store.delete(e),null):(this.store.delete(e),this.store.set(e,n),
|
|
97
|
-
next().value;o!==void 0&&this.store.delete(o);}this.store.set(e,{value:
|
|
98
|
-
try{return structuredClone(t)}catch{return t}}var
|
|
98
|
+
allowSingleflight:!r&&!m,allowCompression:true,requiresFreshData:o,hasSideEffects:r,isPersonalized:i,isAgentic:l,maxCacheAgeMs:t.freshnessBucket==="hour"?36e5:t.freshnessBucket==="day"?864e5:null,reasons:e}}var zn=class{store=new Map;maxEntries;now;constructor(e={}){this.maxEntries=e.maxEntries??1e4,this.now=e.now??(()=>Date.now());}async get(e){let n=this.store.get(e);return n?n.expiresAtMs!==null&&this.
|
|
99
|
+
now()>n.expiresAtMs?(this.store.delete(e),null):(this.store.delete(e),this.store.set(e,n),Xs(n.value)):null}async set(e,n,r){if(this.store.size>=this.maxEntries&&!this.store.has(e)){let o=this.store.keys().
|
|
100
|
+
next().value;o!==void 0&&this.store.delete(o);}this.store.set(e,{value:Xs(n),expiresAtMs:r!=null?this.now()+r:null});}async delete(e){this.store.delete(e);}get size(){return this.store.size}};function Xs(t){
|
|
101
|
+
try{return structuredClone(t)}catch{return t}}var qn=class{inflight=new Map;waiters=new Map;async run(e,n){let r=this.inflight.get(e);if(r)return this.waiters.set(e,(this.waiters.get(e)??1)+1),{value:await r,coalesced:true};let o=(async()=>n())();this.
|
|
99
102
|
inflight.set(e,o),this.waiters.set(e,1);try{return {value:await o,coalesced:!1}}finally{this.inflight.delete(e),this.waiters.delete(e);}}join(e){let n=this.inflight.get(e);return n&&this.waiters.set(e,(this.
|
|
100
|
-
waiters.get(e)??1)+1),n}get activeKeys(){return this.inflight.size}};function
|
|
101
|
-
o=Math.log1p(-n),i=t*o,s=[i],a=i;for(let u=0;u<e;u++)i+=Math.log(t-u)-Math.log(u+1)+r-o,s.push(i),i>a&&(a=i);let c=0;for(let u of s)c+=Math.exp(u-a);return Math.min(1,Math.exp(a+Math.log(c)))}function
|
|
102
|
-
return t<=0||e>=t*n?false:
|
|
103
|
+
waiters.get(e)??1)+1),n}get activeKeys(){return this.inflight.size}};function tn(t){return !Number.isFinite(t)||t<0?-1:t>=1?1e3:Math.floor(t*1e3+1e-9)}var nn=t=>t/1e3;function Cd(t,e,n){if(e>=t)return 1;if(e<0)return 0;if(n<=0)return 1;if(n>=1)return 0;let r=Math.log(n),
|
|
104
|
+
o=Math.log1p(-n),i=t*o,s=[i],a=i;for(let u=0;u<e;u++)i+=Math.log(t-u)-Math.log(u+1)+r-o,s.push(i),i>a&&(a=i);let c=0;for(let u of s)c+=Math.exp(u-a);return Math.min(1,Math.exp(a+Math.log(c)))}function Ao(t,e,n,r){
|
|
105
|
+
return t<=0||e>=t*n?false:Cd(t,e,n)<=r}function Hn(t,e){return Math.ceil(Math.log(e)/Math.log1p(-t))}function Vn(t,e){return 6*t/(Math.PI*Math.PI*(e+1)*(e+1))}var Je=class{total=new Uint32Array(1001);erroneas=new Uint32Array(
|
|
103
106
|
1001);n=0;anotar(e,n){this.total[e]++,n||this.erroneas[e]++,this.n++;}copiarDe(e){this.total.set(e.total),this.erroneas.set(e.erroneas),this.n=e.n;}acumulados(){let e=new Uint32Array(1002),n=new Uint32Array(
|
|
104
|
-
1002);for(let r=1e3;r>=0;r--)e[r]=e[r+1]+this.total[r],n[r]=n[r+1]+this.erroneas[r];return {n:e,e:n}}};function
|
|
105
|
-
s);if(i==null)return null;for(;i<1e3&&t.total[i]===0;)i++;return i}function
|
|
106
|
-
n:o,e:i}=t.acumulados(),s=[...new Set(e)].sort((c,u)=>u-c),a=null;for(let c of s){if(!
|
|
107
|
-
e;this.alfa=n;this.primeraMirada=2*
|
|
107
|
+
1002);for(let r=1e3;r>=0;r--)e[r]=e[r+1]+this.total[r],n[r]=n[r+1]+this.erroneas[r];return {n:e,e:n}}};function Ed(t,e,n){let{n:r,e:o}=t.acumulados(),i=null;for(let s=1e3;s>=0;s--)Ao(r[s],o[s],e,n)&&(i=
|
|
108
|
+
s);if(i==null)return null;for(;i<1e3&&t.total[i]===0;)i++;return i}function Oo(t,e,n){let r=[];for(let o of [1,1/4,1/16,1/64,1/256]){let i=Ed(t,e,n*o);i!=null&&r.push(i);}return r}function Mo(t,e,n,r){let{
|
|
109
|
+
n:o,e:i}=t.acumulados(),s=[...new Set(e)].sort((c,u)=>u-c),a=null;for(let c of s){if(!Ao(o[c],i[c],n,r))break;a={indice:c,retenidas:o[c],erroneas:i[c]};}return a}var en=class t{constructor(e,n){this.delta=
|
|
110
|
+
e;this.alfa=n;this.primeraMirada=2*Hn(e,Vn(n,0));}delta;alfa;seleccion=new Je;retenida=new Je;etiquetas=0;miradas=0;candidatoPrevio=null;certificado=null;primeraMirada;etiquetasDeLaMirada(e){return Io(
|
|
108
111
|
this.primeraMirada,e)}exportar(){return {labeled:this.etiquetas,looks:this.miradas,previousCandidate:this.candidatoPrevio,certified:this.certificado?{floorIndex:this.certificado.indice,heldOut:this.certificado.
|
|
109
|
-
retenidas,wrong:this.certificado.erroneas}:null,selection:
|
|
110
|
-
(r===null||typeof r!="object"||Array.isArray(r))&&s("not an object");let a=r,c=a.labeled;
|
|
111
|
-
`${o}.heldOut`);(l.n!==Math.ceil(u/2)||d.n!==Math.floor(u/2))&&s(`the two halves hold ${l.n} and ${d.n} labels, but ${u} labels split by arrival order give ${Math.ceil(u/2)} and ${Math.floor(u/2)}`);let p=
|
|
112
|
+
retenidas,wrong:this.certificado.erroneas}:null,selection:ea(this.seleccion),heldOut:ea(this.retenida)}}static restaurar(e,n,r,o){let i=new t(e,n),s=f=>{throw new we(`importCalibration: ${o}: ${f}`)};
|
|
113
|
+
(r===null||typeof r!="object"||Array.isArray(r))&&s("not an object");let a=r,c=a.labeled;Xt(c)||s("`labeled` must be a non-negative integer");let u=c,l=ta(a.selection,`${o}.selection`),d=ta(a.heldOut,
|
|
114
|
+
`${o}.heldOut`);(l.n!==Math.ceil(u/2)||d.n!==Math.floor(u/2))&&s(`the two halves hold ${l.n} and ${d.n} labels, but ${u} labels split by arrival order give ${Math.ceil(u/2)} and ${Math.floor(u/2)}`);let p=Pd(
|
|
112
115
|
i.primeraMirada,u);a.looks!==p&&s(`\`looks\` is ${String(a.looks)}, but ${u} labels have already spent ${p} tests of the confidence budget; a state cannot start that spending over`);let h=a.previousCandidate;
|
|
113
|
-
h!==null&&!
|
|
114
|
-
ct");let f=m;
|
|
115
|
-
floorIndex,retenidas:f.heldOut,erroneas:f.wrong},p===0&&s("a floor is certified but no test has run yet"),h!==g.indice&&s("`previousCandidate` must be the certified floor");let v=p-1,b=
|
|
116
|
-
v),y=Math.floor(b/2);(g.retenidas>y||g.erroneas>g.retenidas)&&s("the certificate counts more held-out labels than there were when it was issued"),
|
|
117
|
-
te does not pass the test it claims to have passed");let{n:k,e:T}=d.acumulados(),w=k[g.indice]-g.retenidas,
|
|
116
|
+
h!==null&&!_o(h)&&s("`previousCandidate` must be null or a grid index");let m=a.certified,g=null;if(m!==null){(m===void 0||typeof m!="object"||Array.isArray(m))&&s("`certified` must be null or an obje\
|
|
117
|
+
ct");let f=m;_o(f.floorIndex)||s("`certified.floorIndex` must be a grid index"),(!Xt(f.heldOut)||!Xt(f.wrong))&&s("`certified.heldOut` and `certified.wrong` must be non-negative integers"),g={indice:f.
|
|
118
|
+
floorIndex,retenidas:f.heldOut,erroneas:f.wrong},p===0&&s("a floor is certified but no test has run yet"),h!==g.indice&&s("`previousCandidate` must be the certified floor");let v=p-1,b=Io(i.primeraMirada,
|
|
119
|
+
v),y=Math.floor(b/2);(g.retenidas>y||g.erroneas>g.retenidas)&&s("the certificate counts more held-out labels than there were when it was issued"),Ao(g.retenidas,g.erroneas,e,Vn(n,v))||s("the certifica\
|
|
120
|
+
te does not pass the test it claims to have passed");let{n:k,e:T}=d.acumulados(),w=k[g.indice]-g.retenidas,P=T[g.indice]-g.erroneas;(w<0||P<0||P>w||w>d.n-y)&&s("the held-out labels at the floor do not\
|
|
118
121
|
extend the ones the certificate counted");}else p===0&&h!==null&&s("`previousCandidate` is set but no test has run yet");return i.seleccion.copiarDe(l),i.retenida.copiarDe(d),i.etiquetas=u,i.miradas=p,
|
|
119
|
-
i.candidatoPrevio=h,i.certificado=g,i}anotar(e,n){let r=
|
|
120
|
-
this.mirar());}mirar(){let e=
|
|
122
|
+
i.candidatoPrevio=h,i.certificado=g,i}anotar(e,n){let r=tn(e);r<0||((this.etiquetas%2===0?this.seleccion:this.retenida).anotar(r,n),this.etiquetas++,this.etiquetas>=this.etiquetasDeLaMirada(this.miradas)&&
|
|
123
|
+
this.mirar());}mirar(){let e=Vn(this.alfa,this.miradas);this.miradas++;let n=Oo(this.seleccion,this.delta,e),r=this.candidatoPrevio==null?n:[...n,this.candidatoPrevio],o=Mo(this.retenida,r,this.delta,e);
|
|
121
124
|
this.certificado=o,this.candidatoPrevio=o?.indice??n[n.length-1]??this.candidatoPrevio;}get suelo(){return this.certificado?.indice??null}resumen(){return {suelo:this.suelo,etiquetas:this.etiquetas,retenidas:this.
|
|
122
|
-
retenida.n,retenidasEnSuelo:this.certificado?.retenidas??0,erroneasEnSuelo:this.certificado?.erroneas??0,miradas:this.miradas,minimasParaLaSiguiente:
|
|
123
|
-
etiquetasDeLaMirada(this.miradas)}}},we=class extends Error{constructor(e){super(`[bvsala] ${e}`),this.name="CalibrationStateError";}},
|
|
124
|
-
function
|
|
125
|
-
confidence,similarityThreshold:t.similarityThreshold,grid:1e3},segments:n}}function
|
|
126
|
-
state must be an object");let r=t;r.format!==
|
|
127
|
-
wer SDK (version ${o}); this one reads version ${
|
|
125
|
+
retenida.n,retenidasEnSuelo:this.certificado?.retenidas??0,erroneasEnSuelo:this.certificado?.erroneas??0,miradas:this.miradas,minimasParaLaSiguiente:Hn(this.delta,Vn(this.alfa,this.miradas)),etiquetasParaLaSiguiente:this.
|
|
126
|
+
etiquetasDeLaMirada(this.miradas)}}},we=class extends Error{constructor(e){super(`[bvsala] ${e}`),this.name="CalibrationStateError";}},na="bvsala.semantic-calibration",Un=1,ra=["single_shot","agentic"];
|
|
127
|
+
function oa(t,e){let n={};for(let r of ra){let o=e.get(r);o&&(n[r]=o.exportar());}return {format:na,version:Un,embedder:t.embedder,verifier:t.verifier,judge:t.judge,config:{maxErrorRate:t.maxErrorRate,confidence:t.
|
|
128
|
+
confidence,similarityThreshold:t.similarityThreshold,grid:1e3},segments:n}}function ia(t,e){let n=l=>{throw new we(`importCalibration: ${l}`)};(t===null||typeof t!="object"||Array.isArray(t))&&n("the \
|
|
129
|
+
state must be an object");let r=t;r.format!==na&&n(`not a semantic calibration state (format ${JSON.stringify(r.format)})`);let o=r.version;typeof o=="number"&&o>Un&&n(`this state was exported by a ne\
|
|
130
|
+
wer SDK (version ${o}); this one reads version ${Un}`),o!==Un&&n(`unknown state version ${JSON.stringify(o)}`);let i=r.config??{},s=[],a=(l,d,p)=>{d!==p&&s.push(`${l}: ${JSON.stringify(d)} in the stat\
|
|
128
131
|
e, ${JSON.stringify(p)} here`);};a("embedder",r.embedder,e.embedder),a("verifier",r.verifier,e.verifier),a("judge",r.judge,e.judge),a("maxErrorRate",i.maxErrorRate,e.maxErrorRate),a("confidence",i.confidence,
|
|
129
132
|
e.confidence),a("similarityThreshold",i.similarityThreshold,e.similarityThreshold),a("grid",i.grid,1e3),s.length>0&&n(`the state was recorded under a different setup (${s.join("; ")}). A floor certifi\
|
|
130
133
|
ed under one setup says nothing about another: start a new calibration instead`);let c=r.segments;(c===null||typeof c!="object"||Array.isArray(c))&&n("`segments` must be an object");let u=new Map;for(let[
|
|
131
|
-
l,d]of Object.entries(c))
|
|
132
|
-
e)}function
|
|
133
|
-
t)&&t>=0&&t<=1e3}function
|
|
134
|
-
isArray(t)||n("must be an array of [gridIndex, labels, wrong]");let r=new Je,o=-1;for(let i of t){(!Array.isArray(i)||i.length!==3)&&n("each entry must be [gridIndex, labels, wrong]");let[s,a,c]=i;(!
|
|
135
|
-
s)||s<=o)&&n("grid indices must be increasing integers in [0, 1000]"),(!
|
|
136
|
-
el count"),r.total[s]=a,r.erroneas[s]=c,r.n+=a,o=s;}return r.n>4294967295&&n("too many labels"),r}function
|
|
134
|
+
l,d]of Object.entries(c))ra.includes(l)||n(`unknown segment ${JSON.stringify(l)}`),u.set(l,en.restaurar(e.maxErrorRate,1-e.confidence,d,`segments.${l}`));return u}function Io(t,e){return Math.ceil(t*1.5**
|
|
135
|
+
e)}function Pd(t,e){let n=0;for(;Io(t,n)<=e;)n++;return n}function Xt(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0&&t<=4294967295}function _o(t){return typeof t=="number"&&Number.isInteger(
|
|
136
|
+
t)&&t>=0&&t<=1e3}function ea(t){let e=[];for(let n=0;n<=1e3;n++)t.total[n]>0&&e.push([n,t.total[n],t.erroneas[n]]);return e}function ta(t,e){let n=i=>{throw new we(`importCalibration: ${e}: ${i}`)};Array.
|
|
137
|
+
isArray(t)||n("must be an array of [gridIndex, labels, wrong]");let r=new Je,o=-1;for(let i of t){(!Array.isArray(i)||i.length!==3)&&n("each entry must be [gridIndex, labels, wrong]");let[s,a,c]=i;(!_o(
|
|
138
|
+
s)||s<=o)&&n("grid indices must be increasing integers in [0, 1000]"),(!Xt(a)||a===0)&&n("label counts must be positive integers"),(!Xt(c)||c>a)&&n("wrong counts must be integers between 0 and the lab\
|
|
139
|
+
el count"),r.total[s]=a,r.erroneas[s]=c,r.n+=a,o=s;}return r.n>4294967295&&n("too many labels"),r}function Wn(t){let{maxErrorRate:e}=t,n=t.confidence??.95,r=t.auditRate??.05;if(!(e>0&&e<=.5))throw new RangeError(
|
|
137
140
|
`calibration.maxErrorRate must be in (0, 0.5]; got ${e}`);if(!(n>.5&&n<1))throw new RangeError(`calibration.confidence must be in (0.5, 1); got ${n}`);if(!(r>=0&&r<1))throw new RangeError(`calibration\
|
|
138
|
-
.auditRate must be in [0, 1); got ${r}`);return {maxErrorRate:e,confidence:n,auditRate:r}}function
|
|
139
|
-
7,61|n)^n,((n^n>>>14)>>>0)/4294967296}}function
|
|
140
|
-
isArray(t))return `[${t.map(
|
|
141
|
-
stringify(t)??"null"}function
|
|
142
|
-
let u=
|
|
143
|
-
o)}}function
|
|
144
|
-
Boolean)}function
|
|
145
|
-
1]}`;r.set(a,(r.get(a)??0)+1);}}for(let[i,s]of r){let a=
|
|
146
|
-
e[i]/=o;return e}function
|
|
141
|
+
.auditRate must be in [0, 1); got ${r}`);return {maxErrorRate:e,confidence:n,auditRate:r}}function sa(t){let e=t>>>0;return ()=>{e=e+1831565813|0;let n=Math.imul(e^e>>>15,1|e);return n=n+Math.imul(n^n>>>
|
|
142
|
+
7,61|n)^n,((n^n>>>14)>>>0)/4294967296}}function Lo(t,e){let n=o=>o!==null&&typeof o=="object";if(n(t.data)&&n(e.data))return Jn(t.data)===Jn(e.data);let r=o=>o.trim().replace(/\s+/g," ");return r(t.text)===r(e.text)}function Jn(t){if(Array.
|
|
143
|
+
isArray(t))return `[${t.map(Jn).join(",")}]`;if(t!==null&&typeof t=="object"){let e=t;return `{${Object.keys(e).sort().filter(n=>e[n]!==void 0).map(n=>`${JSON.stringify(n)}:${Jn(e[n])}`).join(",")}}`}return JSON.
|
|
144
|
+
stringify(t)??"null"}function Fg(t,e){let{maxErrorRate:n,confidence:r}=Wn(e),o=1-r,i=new Je,s=new Je,a=sa(1592642065),c=0;for(let l of t){let d=tn(l.score),p=a()<.5;d<0||((p?i:s).anotar(d,l.correct),c++);}
|
|
145
|
+
let u=Mo(s,Oo(i,n,o),n,o);return {maxErrorRate:n,confidence:r,floor:u?nn(u.indice):null,labeled:c,heldOut:s.n,heldOutAtFloor:u?.retenidas??0,wrongHeldOutAtFloor:u?.erroneas??0,minHeldOutToCertify:Hn(n,
|
|
146
|
+
o)}}function Rd(t){let e=2166136261;for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e=Math.imul(e,16777619)>>>0;return e}function Dd(t){return t.toLowerCase().normalize("NFKC").split(/[^\p{L}\p{N}]+/u).filter(
|
|
147
|
+
Boolean)}function Id(t){let e=new Array(256).fill(0),n=Dd(t);if(n.length===0)return e;let r=new Map;for(let i=0;i<n.length;i++){let s=n[i];if(r.set(s,(r.get(s)??0)+1),i+1<n.length){let a=`${s}\0${n[i+
|
|
148
|
+
1]}`;r.set(a,(r.get(a)??0)+1);}}for(let[i,s]of r){let a=Rd(i),c=a%256,u=a>>>31===1?-1:1;e[c]+=u*(1+Math.log(s));}let o=0;for(let i of e)o+=i*i;if(o=Math.sqrt(o),o===0)return e;for(let i=0;i<e.length;i++)
|
|
149
|
+
e[i]/=o;return e}function aa(t){return Id(t)}var ca=.72;function _d(t,e){if(t.length!==e.length)return 0;let n=t.length,r=0,o=0,i=0;for(let s=0;s<n;s++){let a=t[s],c=e[s];r+=a*c,o+=a*a,i+=c*c;}return o===0||i===0?0:r/(Math.sqrt(o)*Math.sqrt(i))}var Ad=new Set(
|
|
147
150
|
["no","not","never","none","cannot","cant","without","nor","nt","isnt","arent","wasnt","werent","dont","doesnt","didnt","wont","shouldnt","sin","nunca","jamas","jam\xE1s","tampoco","ni","ningun","ning\
|
|
148
|
-
\xFAn","ninguna","ninguno","nada","nadie","sense","mai","tampoc","cap","gens","ningu","ning\xFA","res"]),
|
|
151
|
+
\xFAn","ninguna","ninguno","nada","nadie","sense","mai","tampoc","cap","gens","ningu","ning\xFA","res"]),Od=new Set(["the","a","an","of","to","in","on","for","and","or","is","are","was","were","what",
|
|
149
152
|
"whats","which","who","whom","how","when","where","me","my","i","you","please","tell","give","show","find","do","does","did","be","that","this","it","with","as","at","by","from","about","into","over",
|
|
150
153
|
"than","then","s","el","la","los","las","un","una","unos","unas","de","del","al","en","por","para","con","sin","sobre","y","o","u","es","son","era","eran","ser","estar","esta","este","esto","estos","e\
|
|
151
154
|
stas","ese","esa","eso","que","cual","cuales","quien","quienes","como","cuando","donde","dame","dime","quiero","necesito","puedes","podrias","favor","porfavor","gracias","me","mi","mis","tu","tus","su",
|
|
152
155
|
"sus","lo","le","se","hay","el","la","els","les","un","una","uns","unes","de","del","dels","al","als","en","per","amb","sense","sobre","i","o","es","son","era","eren","ser","estar","aquest","aquesta",
|
|
153
|
-
"aquests","aquestes","aquell","aquella","que","quin","quina","qui","com","quan","on","dona","vull","necessito","pots","podries","sisplau","gracies","meu","meva","seu","seva","hi"]);function
|
|
154
|
-
match(/\d[\d.,:/-]*/g)??[]).map(e=>e.replace(/[.,:/-]+$/,""))}function
|
|
155
|
-
return false;n.set(r,o-1);}return true}function
|
|
156
|
-
function
|
|
157
|
-
`).map(e=>{let n=
|
|
158
|
-
r[o].rol||!
|
|
159
|
-
n.filter(o)),s=new Set(r.filter(o));if(i.size===0&&s.size===0)return true;let a=0;for(let u of i)s.has(u)&&a++;let c=i.size+s.size-a;return c===0?true:a/c>=.75}var
|
|
160
|
-
let n=e.embed==null;if(this.embebedorPropio=n,this.embed=e.embed??
|
|
156
|
+
"aquests","aquestes","aquell","aquella","que","quin","quina","qui","com","quan","on","dona","vull","necessito","pots","podries","sisplau","gracies","meu","meva","seu","seva","hi"]);function rn(t){return (t.
|
|
157
|
+
match(/\d[\d.,:/-]*/g)??[]).map(e=>e.replace(/[.,:/-]+$/,""))}function jo(t,e){if(t.length!==e.length)return false;let n=new Map;for(let r of t)n.set(r,(n.get(r)??0)+1);for(let r of e){let o=n.get(r);if(!o)
|
|
158
|
+
return false;n.set(r,o-1);}return true}function on(t){return t.split(/\s+/).filter(Boolean)}function sn(t){return t.filter(e=>Ad.has(e.replace(/'/g,""))||e.endsWith("n't")).length}var Md=/^(system|user|assistant|tool):/;
|
|
159
|
+
function ua(t){return t.split(`
|
|
160
|
+
`).map(e=>{let n=Md.exec(e);return n?{rol:n[1],texto:e.slice(n[0].length)}:{rol:"",texto:e}})}function Ld(t,e){let n=ua(t),r=ua(e);if(n.length!==r.length)return false;for(let o=0;o<n.length;o++)if(n[o].rol!==
|
|
161
|
+
r[o].rol||!jd(n[o].texto,r[o].texto))return false;return true}function jd(t,e){if(!jo(rn(t),rn(e)))return false;let n=on(t),r=on(e);if(sn(n)!==sn(r))return false;let o=u=>u.length>1&&!Od.has(u)&&!/^\d/.test(u),i=new Set(
|
|
162
|
+
n.filter(o)),s=new Set(r.filter(o));if(i.size===0&&s.size===0)return true;let a=0;for(let u of i)s.has(u)&&a++;let c=i.size+s.size-a;return c===0?true:a/c>=.75}var Nd="lexical-256-v1",$d="same-answer-v1",la=class{records=[];embed;verify;similarityThreshold;acceptThreshold;ttlMs;maxRecords;now;embebedorPropio;calibracion;estados=new Map;nombres;pendientes=new Set;aceptacionExplicita;constructor(e={}){
|
|
163
|
+
let n=e.embed==null;if(this.embebedorPropio=n,this.embed=e.embed??aa,this.verify=e.verify,this.similarityThreshold=e.similarityThreshold??(n?ca:.9),this.acceptThreshold=e.acceptThreshold??.85,this.aceptacionExplicita=
|
|
161
164
|
e.acceptThreshold!=null,this.nombres={...e.embedderId!=null?{embedder:e.embedderId}:{},...e.verifierId!=null?{verifier:e.verifierId}:{},...e.calibration?.judgeId!=null?{judge:e.calibration.judgeId}:{}},
|
|
162
|
-
this.ttlMs=e.ttlMs,this.maxRecords=e.maxRecords??5e3,this.now=e.now??(()=>Date.now()),e.calibration){let r=
|
|
165
|
+
this.ttlMs=e.ttlMs,this.maxRecords=e.maxRecords??5e3,this.now=e.now??(()=>Date.now()),e.calibration){let r=Wn(e.calibration);this.calibracion={...r,judge:e.calibration.judge??Lo,perRecordFloors:e.calibration.
|
|
163
166
|
perRecordFloors??true,random:e.calibration.random??Math.random};}}get calibrated(){return this.calibracion!=null}async find(e){return this.calibracion?(await this.lookup(e)).hit:this.mejorCandidata(e,true)}async mejorCandidata(e,n){
|
|
164
167
|
if(this.records.length===0)return null;let r=await this.embed(e.normalizedText),o=null;for(let i of this.records){if(i.tenantId!==e.tenantId||i.authorizationScope!==e.authorizationScope||i.principal!==
|
|
165
168
|
e.principal||i.knowledgeEpoch!==e.knowledgeEpoch||i.contractId!==e.contractId||i.model!==e.model||i.systemPromptHash!==e.systemPromptHash||i.structuredDataHash!==e.structuredDataHash||i.locale!==e.locale||
|
|
166
|
-
i.schemaVersion!==e.schemaVersion||i.safetyPolicyVersion!==e.safetyPolicyVersion||i.toolsetHash!==e.toolsetHash||i.temperature!==e.temperature||i.seed!==e.seed||this.
|
|
167
|
-
this.ttlMs)continue;let s=
|
|
168
|
-
acceptThreshold||(!o||c>o.confidence)&&(o={record:i,similarity:s,verifierScore:a,confidence:c,ageMs:this.now()-i.storedAtMs,similarityFloor:this.similarityThreshold,
|
|
169
|
-
embebedorPropio?"built_in":"custom",verifierRan:this.verify!=null});}return o}async lookup(e,n={}){let r=this.calibracion;if(!r)return {hit:await this.mejorCandidata(
|
|
170
|
-
|
|
171
|
-
if(a==null)return u("calibrating");if(
|
|
172
|
-
"record_floor");if(r.auditRate>0&&r.random()<r.auditRate)return u("audit");let l=
|
|
173
|
-
maxErrorRate:r.maxErrorRate,confidence:r.confidence,floor:l,heldOutAtFloor:d.retenidasEnSuelo,wrongHeldOutAtFloor:d.erroneasEnSuelo,labeled:d.etiquetas,segment:o}},
|
|
174
|
-
etiquetar(e,n);return this.pendientes.add(r),r.finally(()=>this.pendientes.delete(r)),r}async etiquetar(e,n){let r=this.calibracion;if(!r)return null;let o;try{o=await r.
|
|
175
|
-
return null}return this.estadoDe(e.segment).anotar(e.score,o),!o&&r.perRecordFloors&&(e.record.failedAtScore=Math.max(e.record.failedAtScore??-1/0,e.score)),o}async settled(){
|
|
176
|
-
0;)await Promise.allSettled([...this.pendientes]);}calibrationStatus(e="single_shot"){let n=this.calibracion;if(!n)return null;let r=this.estadoDe(e).resumen();return {maxErrorRate:n.
|
|
177
|
-
confidence,floor:r.suelo==null?null:
|
|
178
|
-
nextTestAt:r.etiquetasParaLaSiguiente}}exportCalibration(){return
|
|
179
|
-
string")try{r=JSON.parse(e);}catch{throw new we("importCalibration: the state is a string but not JSON")}let o=
|
|
180
|
-
`importCalibration: this cache has already recorded ${s.resumen().etiquetas} labels in the ${i} segment; import right after constructing it`)}for(let[i,s]of o)this.estados.set(
|
|
181
|
-
calibracion;if(!n)throw new we(`${e}: this cache runs without \`calibration\``);let r=(a,c)=>{throw new we(`${e}: pass \`${a}\` naming your ${c}, so that a saved
|
|
182
|
-
|
|
183
|
-
verifier")}`,s=n.judge===
|
|
184
|
-
similarityThreshold}}estadoDe(e){let n=this.estados.get(e);if(!n){let r=this.calibracion;n=new
|
|
185
|
-
e.normalizedText);this.records.length>=this.maxRecords&&this.records.shift(),this.records.push({embedding:r,query:e.normalizedText,answer:n,tenantId:e.
|
|
186
|
-
principal:e.principal,knowledgeEpoch:e.knowledgeEpoch,contractId:e.contractId,model:e.model,systemPromptHash:e.systemPromptHash,structuredDataHash:e.structuredDataHash,
|
|
187
|
-
schemaVersion,safetyPolicyVersion:e.safetyPolicyVersion,toolsetHash:e.toolsetHash
|
|
188
|
-
1;r>=0;r--)this.records[r].knowledgeEpoch===e&&(this.records.splice(r,1),n++);return n}get size(){return this.
|
|
169
|
+
i.schemaVersion!==e.schemaVersion||i.safetyPolicyVersion!==e.safetyPolicyVersion||i.toolsetHash!==e.toolsetHash||i.toolTurnsHash!==e.toolTurnsHash||i.temperature!==e.temperature||i.seed!==e.seed||this.
|
|
170
|
+
ttlMs!=null&&this.now()-i.storedAtMs>this.ttlMs)continue;let s=_d(r,i.embedding);if(s<this.similarityThreshold||!Ld(e.normalizedText,i.query))continue;let a=this.verify?await this.verify(e.normalizedText,
|
|
171
|
+
i.query):s,c=Math.min(s,a);n&&c<this.acceptThreshold||(!o||c>o.confidence)&&(o={record:i,similarity:s,verifierScore:a,confidence:c,ageMs:this.now()-i.storedAtMs,similarityFloor:this.similarityThreshold,
|
|
172
|
+
acceptFloor:this.acceptThreshold,embedder:this.embebedorPropio?"built_in":"custom",verifierRan:this.verify!=null});}return o}async lookup(e,n={}){let r=this.calibracion;if(!r)return {hit:await this.mejorCandidata(
|
|
173
|
+
e,true),probe:null};let o=n.agentic?"agentic":"single_shot",i=await this.mejorCandidata(e,false);if(!i)return {hit:null,probe:null};let s=this.estadoDe(o),a=s.suelo,c=i.confidence,u=p=>({hit:null,probe:{reason:p,
|
|
174
|
+
score:c,segment:o,record:i.record}});if(a==null)return u("calibrating");if(tn(c)<a||this.aceptacionExplicita&&c<this.acceptThreshold)return u("below_floor");if(r.perRecordFloors&&i.record.failedAtScore!=
|
|
175
|
+
null&&c<=i.record.failedAtScore)return u("record_floor");if(r.auditRate>0&&r.random()<r.auditRate)return u("audit");let l=nn(a),d=s.resumen();return {hit:{...i,acceptFloor:this.aceptacionExplicita?Math.
|
|
176
|
+
max(l,this.acceptThreshold):l,calibration:{maxErrorRate:r.maxErrorRate,confidence:r.confidence,floor:l,heldOutAtFloor:d.retenidasEnSuelo,wrongHeldOutAtFloor:d.erroneasEnSuelo,labeled:d.etiquetas,segment:o}},
|
|
177
|
+
probe:null}}observe(e,n){let r=this.etiquetar(e,n);return this.pendientes.add(r),r.finally(()=>this.pendientes.delete(r)),r}async etiquetar(e,n){let r=this.calibracion;if(!r)return null;let o;try{o=await r.
|
|
178
|
+
judge(e.record.answer,n)===!0;}catch{return null}return this.estadoDe(e.segment).anotar(e.score,o),!o&&r.perRecordFloors&&(e.record.failedAtScore=Math.max(e.record.failedAtScore??-1/0,e.score)),o}async settled(){
|
|
179
|
+
for(;this.pendientes.size>0;)await Promise.allSettled([...this.pendientes]);}calibrationStatus(e="single_shot"){let n=this.calibracion;if(!n)return null;let r=this.estadoDe(e).resumen();return {maxErrorRate:n.
|
|
180
|
+
maxErrorRate,confidence:n.confidence,floor:r.suelo==null?null:nn(r.suelo),labeled:r.etiquetas,heldOut:r.retenidas,heldOutAtFloor:r.retenidasEnSuelo,wrongHeldOutAtFloor:r.erroneasEnSuelo,minHeldOutToCertify:r.
|
|
181
|
+
minimasParaLaSiguiente,nextTestAt:r.etiquetasParaLaSiguiente}}exportCalibration(){return oa(this.identidad("exportCalibration"),this.estados)}importCalibration(e){let n=this.identidad("importCalibrati\
|
|
182
|
+
on"),r=e;if(typeof e=="string")try{r=JSON.parse(e);}catch{throw new we("importCalibration: the state is a string but not JSON")}let o=ia(r,n);for(let[i]of o){let s=this.estados.get(i);if(s&&s.resumen().
|
|
183
|
+
etiquetas>0)throw new we(`importCalibration: this cache has already recorded ${s.resumen().etiquetas} labels in the ${i} segment; import right after constructing it`)}for(let[i,s]of o)this.estados.set(
|
|
184
|
+
i,s);}identidad(e){let n=this.calibracion;if(!n)throw new we(`${e}: this cache runs without \`calibration\``);let r=(a,c)=>{throw new we(`${e}: pass \`${a}\` naming your ${c}, so that a saved calibrati\
|
|
185
|
+
on is only ever restored under the same one`)},o=this.embebedorPropio?`built_in:${Nd}`:`custom:${this.nombres.embedder??r("embedderId","embed function")}`,i=this.verify==null?null:`custom:${this.nombres.
|
|
186
|
+
verifier??r("verifierId","verifier")}`,s=n.judge===Lo?`built_in:${$d}`:`custom:${this.nombres.judge??r("calibration.judgeId","judge")}`;return {embedder:o,verifier:i,judge:s,maxErrorRate:n.maxErrorRate,
|
|
187
|
+
confidence:n.confidence,similarityThreshold:this.similarityThreshold}}estadoDe(e){let n=this.estados.get(e);if(!n){let r=this.calibracion;n=new en(r.maxErrorRate,1-r.confidence),this.estados.set(e,n);}
|
|
188
|
+
return n}async store(e,n){let r=await this.embed(e.normalizedText);this.records.length>=this.maxRecords&&this.records.shift(),this.records.push({embedding:r,query:e.normalizedText,answer:n,tenantId:e.
|
|
189
|
+
tenantId,authorizationScope:e.authorizationScope,principal:e.principal,knowledgeEpoch:e.knowledgeEpoch,contractId:e.contractId,model:e.model,systemPromptHash:e.systemPromptHash,structuredDataHash:e.structuredDataHash,
|
|
190
|
+
locale:e.locale,schemaVersion:e.schemaVersion,safetyPolicyVersion:e.safetyPolicyVersion,toolsetHash:e.toolsetHash,...e.toolTurnsHash!==void 0?{toolTurnsHash:e.toolTurnsHash}:{},temperature:e.temperature,
|
|
191
|
+
seed:e.seed,storedAtMs:this.now()});}invalidateEpoch(e){let n=0;for(let r=this.records.length-1;r>=0;r--)this.records[r].knowledgeEpoch===e&&(this.records.splice(r,1),n++);return n}get size(){return this.
|
|
192
|
+
records.length}};var da=class{entradas=new Map;maxEntries;now;constructor(e={}){this.maxEntries=Math.max(1,e.maxEntries??1024),this.now=e.now??(()=>Date.now());}async get(e){let n=this.entradas.get(e);return n?this.now()>
|
|
189
193
|
n.vence?(this.entradas.delete(e),null):n.valor:null}async set(e,n,r){if(this.entradas.delete(e),this.entradas.size>=this.maxEntries){let o=this.entradas.keys().next().value;o!==void 0&&this.entradas.delete(
|
|
190
|
-
o);}this.entradas.set(e,{valor:n,vence:this.now()+r});}get size(){return this.entradas.size}};var
|
|
191
|
-
|
|
192
|
-
let r=
|
|
193
|
-
return Number.isInteger(t)?String(t):String(Math.round(t*1e9)/1e9)}function
|
|
194
|
+
o);}this.entradas.set(e,{valor:n,vence:this.now()+r});}get size(){return this.entradas.size}};var No=class{resolvers=[];register(e){return this.resolvers.push(e),this}try(e){for(let n of this.resolvers)try{let r=n.try(e);if(r)return r}catch{}return null}get size(){return this.resolvers.length}},
|
|
195
|
+
Bd={name:"arithmetic",try(t){let n=(t.normalizedText.match(/(?:what\s+is|calculate|compute|how\s+much\s+is|cu[aá]nto\s+es)\s+([0-9+\-*/%.()\s]+)\??$/i)?.[1]??Fd(t.normalizedText))?.trim();if(!n)return null;
|
|
196
|
+
let r=qd(n);return r===null||!Number.isFinite(r)?null:{text:zd(r),data:{value:r},resolver:"arithmetic"}}};function Fd(t){return /^[0-9+\-*/%.()\s]+$/.test(t.trim())&&/[+\-*/%]/.test(t)?t.trim():null}function zd(t){
|
|
197
|
+
return Number.isInteger(t)?String(t):String(Math.round(t*1e9)/1e9)}function qd(t){let e=t.match(/\d+\.?\d*|[+\-*/%()]/g);if(!e||e.join("")!==t.replace(/\s+/g,""))return null;let n=[],r=[],o={"+":1,"-":1,
|
|
194
198
|
"*":2,"/":2,"%":2},i=a=>{let c=n.pop(),u=n.pop();if(u===void 0||c===void 0)return false;switch(a){case "+":return n.push(u+c),true;case "-":return n.push(u-c),true;case "*":return n.push(u*c),true;case "/":return c===
|
|
195
199
|
0?false:(n.push(u/c),true);case "%":return c===0?false:(n.push(u%c),true);default:return false}},s=true;for(let a of e)if(/^\d/.test(a))n.push(Number(a)),s=false;else if(a==="(")r.push(a),s=true;else if(a===")"){for(;r.length&&
|
|
196
200
|
r[r.length-1]!=="(";)if(!i(r.pop()))return null;if(r.pop()!=="(")return null;s=false;}else {if(s)return null;for(;r.length&&r[r.length-1]!=="("&&o[r[r.length-1]]>=o[a];)if(!i(r.pop()))return null;r.push(a),
|
|
197
|
-
s=true;}for(;r.length;){let a=r.pop();if(a==="("||!i(a))return null}return n.length===1?n[0]:null}function
|
|
198
|
-
|
|
201
|
+
s=true;}for(;r.length;){let a=r.pop();if(a==="("||!i(a))return null}return n.length===1?n[0]:null}function pa(){return new No().register(Bd)}var Vd=/\b(compare|versus|\bvs\b|difference between|both|and then|after that|which is (?:better|cheaper|faster)|compar[ae]|diferencia entre)\b/i,fa=/\b(who|what|when|where|which|how many|how much|define|definition|qui[eé]n|qu[eé]|cu[aá]ndo|d[oó]nde|cu[aá]nto)\b/i,
|
|
202
|
+
Ud=/\b(summarize|rewrite|translate|classify|extract|reformat|fix|convert|the following|below|above|this text|resume|reescribe|traduce|clasifica)\b/i,Kn=class{classifier;maxRounds;constructor(e={}){this.
|
|
199
203
|
classifier=e.classifier,this.maxRounds=e.maxRounds??2;}classify(e){let n=e.original.retrieval?.mode,r=e.normalizedText;if((e.original.tools??[]).some(s=>s.risk==="write"||s.risk==="destructive")&&/\b(create|update|delete|send|pay|book|cancel|crea|actualiza|elimina|env[ií]a|paga)\b/i.
|
|
200
|
-
test(r))return Le("TOOL_ACTION",.9,"imperative + write tool available",0);if(n==="off")return Le("NO_RETRIEVAL",1,"retrieval disabled by caller",0);if(
|
|
201
|
-
.8,"self-contained transformation",0);let i=this.classifier?.classify(r);return i&&i.confidence>=.75?Le(i.executionClass,i.confidence,"local classifier",
|
|
202
|
-
e"?Le("SINGLE_RETRIEVAL",.7,"caller hint: single",1):n==="multi"?Le("MULTI_HOP_RETRIEVAL",.7,"caller hint: multi",Math.min(this.maxRounds,2)):
|
|
203
|
-
d question",Math.min(this.maxRounds,2)):
|
|
204
|
-
"SINGLE_RETRIEVAL"?1:t==="MULTI_HOP_RETRIEVAL"?Math.min(e,2):0}function Le(t,e,n,r){return {executionClass:t,confidence:e,reason:n,rounds:r}}var
|
|
205
|
-
us-4-5-20251101","claude-sonnet-4-5-20250929","claude-haiku-4-5-20251001"],
|
|
206
|
-
name:"tool_search_tool_bm25"},regex:{type:"tool_search_tool_regex_20251119",name:"tool_search_tool_regex"}},
|
|
207
|
-
function
|
|
204
|
+
test(r))return Le("TOOL_ACTION",.9,"imperative + write tool available",0);if(n==="off")return Le("NO_RETRIEVAL",1,"retrieval disabled by caller",0);if(Ud.test(r)&&!fa.test(r))return Le("NO_RETRIEVAL",
|
|
205
|
+
.8,"self-contained transformation",0);let i=this.classifier?.classify(r);return i&&i.confidence>=.75?Le(i.executionClass,i.confidence,"local classifier",Hd(i.executionClass,this.maxRounds)):n==="singl\
|
|
206
|
+
e"?Le("SINGLE_RETRIEVAL",.7,"caller hint: single",1):n==="multi"?Le("MULTI_HOP_RETRIEVAL",.7,"caller hint: multi",Math.min(this.maxRounds,2)):Vd.test(r)?Le("MULTI_HOP_RETRIEVAL",.7,"comparison/compoun\
|
|
207
|
+
d question",Math.min(this.maxRounds,2)):fa.test(r)?Le("SINGLE_RETRIEVAL",.65,"single factual lookup",1):Le("NO_RETRIEVAL",.5,"no retrieval signal (conservative default)",0)}};function Hd(t,e){return t===
|
|
208
|
+
"SINGLE_RETRIEVAL"?1:t==="MULTI_HOP_RETRIEVAL"?Math.min(e,2):0}function Le(t,e,n,r){return {executionClass:t,confidence:e,reason:n,rounds:r}}var Wd=["claude-fable-5-1","claude-mythos-5-1","claude-fable-5","claude-mythos-5","claude-opus-5-5","claude-opus-5","claude-opus-4-8","claude-opus-4-7","claude-opus-4-6","claude-sonnet-4-6","claude-op\
|
|
209
|
+
us-4-5-20251101","claude-sonnet-4-5-20250929","claude-haiku-4-5-20251001"],ma={herramientas:10,tokensDeEsquemas:1e4},ha=5,Jd={regex:200,bm25:500},ga=1e4,Gn={bm25:{type:"tool_search_tool_bm25_20251119",
|
|
210
|
+
name:"tool_search_tool_bm25"},regex:{type:"tool_search_tool_regex_20251119",name:"tool_search_tool_regex"}},Kd="bvsala_contract";function ba(t){let e=t.lastIndexOf("/");return (e>=0?t.slice(e+1):t).toLowerCase()}
|
|
211
|
+
function $o(t){let e=r=>r.replace(/-\d{8}$/,""),n=e(ba(t));return Wd.some(r=>e(r)===n)}function Bo(t){let e={modo:"off",siempreCargadas:[],variante:"bm25"};if(t===void 0)return e;let n=r=>r==="off"||r===
|
|
208
212
|
"auto"||r==="always";return typeof t=="string"?n(t)?{...e,modo:t}:e:typeof t!="object"||t===null||!n(t.mode)?e:{modo:t.mode,siempreCargadas:Array.isArray(t.alwaysLoaded)?[...new Set(t.alwaysLoaded.filter(
|
|
209
|
-
r=>typeof r=="string"))]:[],variante:t.variant==="regex"?"regex":"bm25"}}function
|
|
213
|
+
r=>typeof r=="string"))]:[],variante:t.variant==="regex"?"regex":"bm25"}}function an(t){return !t.some(e=>Array.isArray(e.intents)&&e.intents.length>0)&&!t.some(e=>typeof e.risk=="string")}function va(t){
|
|
210
214
|
let{opciones:e}=t,n=e.variante,r=(y,k={})=>({aplicar:false,razon:y,variante:n,siempreCargadas:[],diferidas:0,tokensDiferidos:0,...k});if(e.modo==="off")return r("toolSearch is off");if(t.herramientas.length===
|
|
211
215
|
0)return r("no tools in this request");if(t.capacidad===void 0)return r("this provider is not an adapter of this package that can send the provider's tool search; OpenAI documents tool search for its \
|
|
212
|
-
Responses and Agents APIs, not for Chat Completions, which is what the OpenAI-compatible adapter speaks");if(
|
|
216
|
+
Responses and Agents APIs, not for Chat Completions, which is what the OpenAI-compatible adapter speaks");if(!$o(t.modelo))return r(`${ba(t.modelo)} is not in the provider's tool search model compatib\
|
|
213
217
|
ility table`);if(t.hayContrato)return r("this request carries an output contract, which travels as a forced tool on this provider; combining it with deferred tools is not documented, so the selector k\
|
|
214
|
-
eeps this request");if(t.cascadaActiva)return r("the model cascade is on: the cheaper model and the escalation would both have to support tool search");let o=
|
|
215
|
-
return r(`one of your tools is already named \`${o.name}\``);let i=new Set(t.herramientas.map(y=>y.id)),s=e.siempreCargadas.filter(y=>i.has(y)&&y!==
|
|
216
|
-
id)),u=c.reduce((y,k)=>y+k.tokens,0),l={siempreCargadas:s,diferidas:c.length,tokensDiferidos:u};if(c.length===0)return r("every tool is in `alwaysLoaded`: nothing to defer",l);if(c.length>
|
|
217
|
-
`${c.length} tools to defer, over the provider's limit of ${
|
|
218
|
+
eeps this request");if(t.cascadaActiva)return r("the model cascade is on: the cheaper model and the escalation would both have to support tool search");let o=Gn[n];if(t.herramientas.some(y=>y.id===o.name))
|
|
219
|
+
return r(`one of your tools is already named \`${o.name}\``);let i=new Set(t.herramientas.map(y=>y.id)),s=e.siempreCargadas.filter(y=>i.has(y)&&y!==Kd),a=new Set(s),c=t.herramientas.filter(y=>!a.has(y.
|
|
220
|
+
id)),u=c.reduce((y,k)=>y+k.tokens,0),l={siempreCargadas:s,diferidas:c.length,tokensDiferidos:u};if(c.length===0)return r("every tool is in `alwaysLoaded`: nothing to defer",l);if(c.length>ga)return r(
|
|
221
|
+
`${c.length} tools to defer, over the provider's limit of ${ga}`,l);if(e.modo==="always")return {aplicar:true,variante:n,...l,razon:`toolSearch "always": ${c.length} tool(s) deferred behind the provider'\
|
|
218
222
|
s ${n} search, ${s.length} always loaded; no size or cost check (you chose it)`};if(t.capacidad!=="oficial")return r(`the adapter is not talking to the provider's own API host; a proxy may not forward\
|
|
219
|
-
the search blocks. Use toolSearch "always" if yours does`,l);let d=t.herramientas.reduce((y,k)=>y+k.tokens,0);if(t.herramientas.length<
|
|
223
|
+
the search blocks. Use toolSearch "always" if yours does`,l);let d=t.herramientas.reduce((y,k)=>y+k.tokens,0);if(t.herramientas.length<ma.herramientas&&d<=ma.tokensDeEsquemas)return r(`${t.herramientas.
|
|
220
224
|
length} tools and about ${d} tokens of definitions: under the provider's documented threshold (10 or more tools, or more than 10k tokens), where standard tool calling fits better`,l);let p=t.precio.inputPer1k/
|
|
221
|
-
1e3,h=t.precio.outputPer1k/1e3,m=Math.min(1,Math.max(0,t.lecturaDeCache)),g=c.map(y=>y.tokens).sort((y,k)=>k-y).slice(0,
|
|
222
|
-
return f<v?r(`deferring ${u} tokens of definitions saves ${f.toFixed(6)} per request even with a warm prompt cache, less than one worst-case search costs (${v.toFixed(6)}: the ${
|
|
225
|
+
1e3,h=t.precio.outputPer1k/1e3,m=Math.min(1,Math.max(0,t.lecturaDeCache)),g=c.map(y=>y.tokens).sort((y,k)=>k-y).slice(0,ha).reduce((y,k)=>y+k,0),f=m*p*u,v=p*g+h*Jd[n],b={ahorroDelPrefijo:f,costeDeUnaBusqueda:v};
|
|
226
|
+
return f<v?r(`deferring ${u} tokens of definitions saves ${f.toFixed(6)} per request even with a warm prompt cache, less than one worst-case search costs (${v.toFixed(6)}: the ${ha} largest definition\
|
|
223
227
|
s uncached plus the longest query); the selector keeps this request`,{...l,...b}):{aplicar:true,variante:n,...l,...b,razon:`${c.length} tool(s) deferred behind the provider's ${n} search (${u} tokens of\
|
|
224
228
|
definitions out of the cached prefix): it pays even if every request searches once with a warm cache (${f.toFixed(6)} saved vs ${v.toFixed(6)} worst-case search). The provider's counter measures it; \
|
|
225
|
-
the layer credits nothing for it`}}function
|
|
226
|
-
this.maxTools=e.maxTools??8,this.scoreIntentMatch=e.scoreIntentMatch??
|
|
229
|
+
the layer credits nothing for it`}}function ya(t,e,n){return n||an(t)?[...t]:t.filter(r=>e||r.risk==="read")}var Fo=class{constructor(e=512){this.cap=e;}cap;map=new Map;read(e){return this.map.get(e)}record(e,n,r){this.map.size>=this.cap&&!this.map.has(e)&&this.map.clear(),this.map.set(e,{ids:n,turns:r});}},Zn=class{maxTools;scoreIntentMatch;learningTurns;freezer;constructor(e={}){
|
|
230
|
+
this.maxTools=e.maxTools??8,this.scoreIntentMatch=e.scoreIntentMatch??Gd,this.learningTurns=e.learningTurns??16,this.freezer=e.freezer??new Fo;}passthrough(e){if(!e||e.length===0)return {tools:[],droppedIds:[],
|
|
227
231
|
reason:"no tools provided",setIsStable:true};let n=e.slice(0,this.maxTools),r=e.slice(this.maxTools).map(o=>o.id);return {tools:n,droppedIds:r,reason:`router off: caller tools passed through unfiltered (${n.
|
|
228
232
|
length}/${e.length}, capped at maxTools=${this.maxTools}; risk gating is the caller's responsibility while routing is off)`,setIsStable:true}}select(e,n,r,o){if(!n||n.length===0)return {tools:[],droppedIds:[],
|
|
229
|
-
reason:"no tools provided",setIsStable:true};if(
|
|
233
|
+
reason:"no tools provided",setIsStable:true};if(an(n)){let f=this.passthrough(n);return {...f,reason:`catalogue declares no \`intents\` and no \`risk\`: nothing to select on, passed through (${f.tools.length}\
|
|
230
234
|
/${n.length}, capped at maxTools=${this.maxTools}). Declare ToolDescriptor.intents/risk to enable pruning`}}let i=r==="TOOL_ACTION",s=n.filter(f=>i||f.risk==="read"),a=f=>i&&f.risk!=="read",c=s.filter(
|
|
231
235
|
f=>!a(f)),u=s.filter(f=>a(f)),l=u.map(f=>({tool:f,score:this.scoreIntentMatch(e,f)})).sort((f,v)=>v.score-f.score).map(f=>f.tool),d=c.map(f=>({tool:f,score:this.scoreIntentMatch(e,f)})).filter(f=>f.score>
|
|
232
236
|
0).sort((f,v)=>v.score-f.score).map(f=>f.tool),h=[...l.slice(0,this.maxTools),...d.slice(0,Math.max(0,this.maxTools-u.length))].map(f=>({tool:f})).map(f=>f.tool).sort((f,v)=>f.id<v.id?-1:f.id>v.id?1:0);
|
|
233
237
|
if(o!==void 0){let f=this.freezer.read(o),v=(f?.turns??0)+1;if(f&&v>this.learningTurns){let y=new Set(f.ids),k=n.filter(w=>y.has(w.id));this.freezer.record(o,f.ids,v);let T=new Set(k.map(w=>w.id));return {
|
|
234
238
|
tools:k,droppedIds:n.filter(w=>!T.has(w.id)).map(w=>w.id),reason:`frozen tool set after ${this.learningTurns} turns (${k.length}/${n.length}): it no longer depends on this request's text, so the prefi\
|
|
235
239
|
x cache survives`,setIsStable:true}}let b=[...new Set([...f?.ids??[],...h.map(y=>y.id)])].sort().slice(0,this.maxTools);this.freezer.record(o,b,v);}let m=new Set(h.map(f=>f.id)),g=n.filter(f=>!m.has(f.id)).
|
|
236
|
-
map(f=>f.id);return {tools:h,droppedIds:g,reason:`selected ${h.length}/${n.length} by intent match (writes ${i?"allowed":"blocked"})`,setIsStable:g.length===0}}};function
|
|
237
|
-
isArray(e.intents)?e.intents:[]){let i
|
|
240
|
+
map(f=>f.id);return {tools:h,droppedIds:g,reason:`selected ${h.length}/${n.length} by intent match (writes ${i?"allowed":"blocked"})`,setIsStable:g.length===0}}};function Gd(t,e){let n=Bn(t),r=0;for(let o of Array.
|
|
241
|
+
isArray(e.intents)?e.intents:[]){let i=Bn(o);i&&(n.includes(i)?r+=2:i.split(/\s+/).some(s=>s.length>3&&n.includes(s))&&(r+=1));}return r}function Zd(t){let e=new Set,n=[];for(let r of t){let o=r.hash??Qd(r.text);e.has(o)||(e.add(o),n.push(r));}return n}function Yd(t,e={maxDocuments:5}){let n=e.minDocuments??1,r=[...t].sort((s,a)=>(a.score??
|
|
238
242
|
0)-(s.score??0));if(r.length<=n)return r;let o=r[0]?.score??0;if(o<=0)return r.slice(0,e.maxDocuments);let i=[];for(let s of r){let a=(s.score??0)/o;if(i.length<n||a>=.4&&i.length<e.maxDocuments)i.push(
|
|
239
|
-
s);else break}return i}async function
|
|
240
|
-
let n=t.execution==="MULTI_HOP_RETRIEVAL"?Math.min(t.maxRounds,2):1,r=[];for(let s=0;s<n;s++){let a=await e.retriever.retrieve(t.query,t.maxDocuments*2);r.push(...a);}let o=r.length;r=
|
|
241
|
-
(r=await e.reranker.rerank(t.query,r));let i=
|
|
242
|
-
...t.userPreferences},decisions:[...t.decisions],openItems:[...t.openItems],evidenceRefs:[...t.evidenceRefs]};for(let[r,o]of Object.entries(e.set??{}))r==="userPreferences"&&
|
|
243
|
-
o):n.confirmedFacts[r]=o;for(let[r,o]of Object.entries(e.append??{})){let i=
|
|
244
|
-
|
|
245
|
-
${r}`});let o=t.history.slice(-e);return n.push(...o,t.current),n}function
|
|
243
|
+
s);else break}return i}async function ka(t,e){if(t.execution==="NO_RETRIEVAL"||t.execution==="TOOL_ACTION"||t.execution==="NON_CACHEABLE"||!e.retriever)return {docs:[],rounds:0,retrievedCount:0,keptCount:0};
|
|
244
|
+
let n=t.execution==="MULTI_HOP_RETRIEVAL"?Math.min(t.maxRounds,2):1,r=[];for(let s=0;s<n;s++){let a=await e.retriever.retrieve(t.query,t.maxDocuments*2);r.push(...a);}let o=r.length;r=Zd(r),e.reranker&&
|
|
245
|
+
(r=await e.reranker.rerank(t.query,r));let i=Yd(r,{maxDocuments:t.maxDocuments});return {docs:i,rounds:n,retrievedCount:o,keptCount:i.length}}function Qd(t){return t.trim().replace(/\s+/g," ").toLowerCase()}function h0(){return {goals:[],confirmedFacts:{},userPreferences:{},decisions:[],openItems:[],evidenceRefs:[]}}function g0(t,e){let n={goals:[...t.goals],confirmedFacts:{...t.confirmedFacts},userPreferences:{
|
|
246
|
+
...t.userPreferences},decisions:[...t.decisions],openItems:[...t.openItems],evidenceRefs:[...t.evidenceRefs]};for(let[r,o]of Object.entries(e.set??{}))r==="userPreferences"&&np(o)?Object.assign(n.userPreferences,
|
|
247
|
+
o):n.confirmedFacts[r]=o;for(let[r,o]of Object.entries(e.append??{})){let i=ep(n,r);i?i.push(...o.map(String)):n.confirmedFacts[r]=o;}for(let r of e.remove??[])delete n.confirmedFacts[r],delete n.userPreferences[r],
|
|
248
|
+
tp(n,r);return n}function b0(t){let e=t.rawTurns??3,n=[],r=Xd(t.state);r&&n.push({role:"system",content:`Conversation state:
|
|
249
|
+
${r}`});let o=t.history.slice(-e);return n.push(...o,t.current),n}function Xd(t){let e=[];return t.goals.length&&e.push(`goals: ${t.goals.join("; ")}`),Object.keys(t.confirmedFacts).length&&e.push(`fa\
|
|
246
250
|
cts: ${JSON.stringify(t.confirmedFacts)}`),Object.keys(t.userPreferences).length&&e.push(`preferences: ${JSON.stringify(t.userPreferences)}`),t.decisions.length&&e.push(`decisions: ${t.decisions.join(
|
|
247
251
|
"; ")}`),t.openItems.length&&e.push(`open: ${t.openItems.join("; ")}`),e.join(`
|
|
248
|
-
`)}function
|
|
249
|
-
for(let n of ["goals","decisions","openItems","evidenceRefs"]){let r=t[n].indexOf(e);r>=0&&t[n].splice(r,1);}}function
|
|
250
|
-
`).filter(c=>c.trim().length>0).map(c=>({indent:
|
|
251
|
-
c[2],n),d=Number(c[1]),p=[];for(let h=0,m=1;h<d&&m<i.length;h++,m++){let g=i[m];if(g.indent!==1)break;let f=
|
|
252
|
-
match(/^\[(\d+)\]:\s*(.*)$/);if(u){let l=u[2];return Number(u[1])===0||l.trim()===""?[]:
|
|
253
|
-
function
|
|
252
|
+
`)}function ep(t,e){switch(e){case "goals":return t.goals;case "decisions":return t.decisions;case "openItems":return t.openItems;case "evidenceRefs":return t.evidenceRefs;default:return null}}function tp(t,e){
|
|
253
|
+
for(let n of ["goals","decisions","openItems","evidenceRefs"]){let r=t[n].indexOf(e);r>=0&&t[n].splice(r,1);}}function np(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var xa={format:"json-compact",supports(){return true},encode(t){return JSON.stringify(t)},instruction(){return ""}};function wa(t,e={}){let n=e.delimiter??",",r=e.indent??" ",i=t.split(`
|
|
254
|
+
`).filter(c=>c.trim().length>0).map(c=>({indent:rp(c,r),content:c.slice(Sa(c,r))}));if(i.length===0)return {};let s=i[0];if(s.indent===0){let c=s.content.match(/^\[(\d+)\]\{(.*)\}:\s*$/);if(c){let l=Pt(
|
|
255
|
+
c[2],n),d=Number(c[1]),p=[];for(let h=0,m=1;h<d&&m<i.length;h++,m++){let g=i[m];if(g.indent!==1)break;let f=Pt(g.content,n),v={};l.forEach((b,y)=>{v[b]=cn(f[y]??"null");}),p.push(v);}return p}let u=s.content.
|
|
256
|
+
match(/^\[(\d+)\]:\s*(.*)$/);if(u){let l=u[2];return Number(u[1])===0||l.trim()===""?[]:Pt(l,n).map(cn)}}let[a]=Ta(i,0,0,n);return a}function Sa(t,e){let n=0;for(;t.startsWith(e,n);)n+=e.length;return n}
|
|
257
|
+
function rp(t,e){return Sa(t,e)/e.length}function Ta(t,e,n,r){let o={},i=e;for(;i<t.length;){let s=t[i];if(s.indent<n)break;if(s.indent>n){i++;continue}let a=op(s.content,r);if(!a){i++;continue}let{key:c,
|
|
254
258
|
kind:u}=a;if(u.type==="scalar")o[c]=u.value,i++;else if(u.type==="inlineArray")o[c]=u.values,i++;else if(u.type==="emptyArray")o[c]=[],i++;else if(u.type==="table"){let l=[];i++;for(let d=0;d<u.count&&
|
|
255
|
-
i<t.length;d++,i++){let p=t[i];if(p.indent!==n+1)break;let h=
|
|
256
|
-
i]}function
|
|
257
|
-
let i=Number(r[2]),s=r[3];return i===0||s.trim()===""?{key:
|
|
258
|
-
o[1]),s=o[2];return s===""?{key:i,kind:{type:"object"}}:{key:i,kind:{type:"scalar",value:
|
|
259
|
-
'"'?(r+='"',i++):o=false:r+=s:s==='"'?o=true:s===e?(n.push(r),r=""):r+=s;}return n.push(r),n.map(i=>i.trim())}function
|
|
260
|
-
'"'):t==="null"?null:t==="true"?true:t==="false"?false:/^-?\d+$/.test(t)||/^-?\d*\.\d+$/.test(t)?Number(t):t}function
|
|
261
|
-
'"'):e}function
|
|
262
|
-
`)}function
|
|
263
|
-
e))
|
|
264
|
-
join(o);r.push(`${s}${a}[${e.length}]: ${d}`);return}let c=
|
|
265
|
-
return}r.push(`${s}${a}[${e.length}]:`);let u=n+1,l=i.repeat(u);for(let d of e)if(
|
|
266
|
-
r.push(`${l}${i}${g}`);}}function
|
|
267
|
-
o))return null;let i=Object.keys(o);if(i.slice().sort().join("\0")!==r)return null;for(let s of i)if(!
|
|
259
|
+
i<t.length;d++,i++){let p=t[i];if(p.indent!==n+1)break;let h=Pt(p.content,r),m={};u.columns.forEach((g,f)=>{m[g]=cn(h[f]??"null");}),l.push(m);}o[c]=l;}else {let[l,d]=Ta(t,i+1,n+1,r);o[c]=l,i=d;}}return [o,
|
|
260
|
+
i]}function op(t,e){let n=t.match(/^([^[:]+)\[(\d+)\]\{(.*)\}:\s*$/);if(n)return {key:Yn(n[1]),kind:{type:"table",count:Number(n[2]),columns:Pt(n[3],e)}};let r=t.match(/^([^[:]+)\[(\d+)\]:\s*(.*)$/);if(r){
|
|
261
|
+
let i=Number(r[2]),s=r[3];return i===0||s.trim()===""?{key:Yn(r[1]),kind:{type:"emptyArray"}}:{key:Yn(r[1]),kind:{type:"inlineArray",values:Pt(s,e).map(cn)}}}let o=t.match(/^([^:]+):\s*(.*)$/);if(o){let i=Yn(
|
|
262
|
+
o[1]),s=o[2];return s===""?{key:i,kind:{type:"object"}}:{key:i,kind:{type:"scalar",value:cn(s)}}}return null}function Pt(t,e){let n=[],r="",o=false;for(let i=0;i<t.length;i++){let s=t[i];o?s==='"'?t[i+1]===
|
|
263
|
+
'"'?(r+='"',i++):o=false:r+=s:s==='"'?o=true:s===e?(n.push(r),r=""):r+=s;}return n.push(r),n.map(i=>i.trim())}function cn(t){return t.startsWith('"')&&t.endsWith('"')&&t.length>=2?t.slice(1,-1).replace(/""/g,
|
|
264
|
+
'"'):t==="null"?null:t==="true"?true:t==="false"?false:/^-?\d+$/.test(t)||/^-?\d*\.\d+$/.test(t)?Number(t):t}function Yn(t){let e=t.trim();return e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1).replace(/""/g,
|
|
265
|
+
'"'):e}function ip(t,e={}){let n=e.delimiter??",",r=e.indent??" ",o=[];return Vo(null,t,0,o,n,r),o.join(`
|
|
266
|
+
`)}function Vo(t,e,n,r,o,i){let s=i.repeat(n),a=t===null?"":`${ap(t)}`;if(Array.isArray(e)){sp(a,e,n,r,o,i);return}if(qo(e)){t!==null&&r.push(`${s}${a}:`);let c=t===null?n:n+1;for(let[u,l]of Object.entries(
|
|
267
|
+
e))Vo(u,l,c,r,o,i);return}r.push(`${s}${a}: ${Qn(e,o)}`);}function sp(t,e,n,r,o,i){let s=i.repeat(n),a=t===""?"":t;if(e.length===0){r.push(`${s}${a}[0]:`);return}if(e.every(zo)){let d=e.map(p=>Qn(p,o)).
|
|
268
|
+
join(o);r.push(`${s}${a}[${e.length}]: ${d}`);return}let c=Xn(e);if(c){r.push(`${s}${a}[${e.length}]{${c.join(o)}}:`);let d=i.repeat(n+1);for(let p of e){let h=c.map(m=>Qn(p[m],o)).join(o);r.push(`${d}${h}`);}
|
|
269
|
+
return}r.push(`${s}${a}[${e.length}]:`);let u=n+1,l=i.repeat(u);for(let d of e)if(zo(d))r.push(`${l}- ${Qn(d,o)}`);else {let p=[];Vo(null,d,0,p,o,i);let[h,...m]=p;r.push(`${l}- ${h??""}`);for(let g of m)
|
|
270
|
+
r.push(`${l}${i}${g}`);}}function Xn(t){if(t.length===0)return null;let e=t[0];if(!qo(e))return null;let n=Object.keys(e);if(n.length===0)return null;let r=n.slice().sort().join("\0");for(let o of t){if(!qo(
|
|
271
|
+
o))return null;let i=Object.keys(o);if(i.slice().sort().join("\0")!==r)return null;for(let s of i)if(!zo(o[s]))return null}return n}function ap(t){return /^[A-Za-z_][A-Za-z0-9_]*$/.test(t)?t:Ca(t)}function Qn(t,e){
|
|
268
272
|
if(t==null)return "null";if(typeof t=="number")return Number.isFinite(t)?String(t):"null";if(typeof t=="boolean")return t?"true":"false";let n=String(t);return n===""||n.includes(e)||n.includes(`
|
|
269
|
-
`)||n.includes('"')||n!==n.trim()||/^(true|false|null)$/.test(n)||/^-?\d/.test(n)?
|
|
270
|
-
"number"||typeof t=="boolean"}function
|
|
271
|
-
ch following indented line is one row of delimiter-separated values. `key[N]: a,b` is an inline list. Quoted values use CSV-style escaping.";function
|
|
272
|
-
encode(e){return
|
|
273
|
-
`)},instruction(){return "Data is CSV: first line is the header row; each subsequent line is one record."}};function
|
|
274
|
-
'""')}"`:e}var
|
|
273
|
+
`)||n.includes('"')||n!==n.trim()||/^(true|false|null)$/.test(n)||/^-?\d/.test(n)?Ca(n):n}function Ca(t){return `"${t.replace(/"/g,'""')}"`}function zo(t){return t===null||typeof t=="string"||typeof t==
|
|
274
|
+
"number"||typeof t=="boolean"}function qo(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var cp="Data is the compact encoder: `key[N]{c1,c2}:` declares an N-row table with columns c1,c2; ea\
|
|
275
|
+
ch following indented line is one row of delimiter-separated values. `key[N]: a,b` is an inline list. Quoted values use CSV-style escaping.";function up(t={}){return {format:"compact-rows",supports(){return true},
|
|
276
|
+
encode(e){return ip(e,t)},instruction(){return cp},decode(e){return wa(e,t)}}}var Ea=up();var Ra={format:"csv",supports(t){return Array.isArray(t)&&Xn(t)!==null},encode(t){let e=t,n=Xn(e),r=n.map(Pa).join(","),o=e.map(i=>n.map(s=>Pa(i[s])).join(","));return [r,...o].join(`
|
|
277
|
+
`)},instruction(){return "Data is CSV: first line is the header row; each subsequent line is one record."}};function Pa(t){if(t==null)return "";let e=String(t);return /[",\n]/.test(e)?`"${e.replace(/"/g,
|
|
278
|
+
'""')}"`:e}var er=class{tokenizer;serializers;minSavingsTokens;minSavingsRatio;qualityPenalty;constructor(e){this.tokenizer=e.tokenizer,this.serializers=e.serializers??[xa,Ea,Ra],this.minSavingsTokens=e.minimumSavingsTokens??
|
|
275
279
|
64,this.minSavingsRatio=e.minimumSavingsRatio??.08,this.qualityPenalty=e.qualityPenalty??(()=>0);}choose(e,n){let r={model:n.model,tokenizer:n.tokenizer},o=[];for(let u of this.serializers){if(!u.supports(
|
|
276
|
-
e))continue;let l=u.encode(e);if(u.format!=="json-compact"&&!
|
|
280
|
+
e))continue;let l=u.encode(e);if(u.format!=="json-compact"&&!lp(u,l,e))continue;let d=u.instruction(e),p=this.tokenizer.count(l,r),h=d?this.tokenizer.count(d,r):0,m=this.qualityPenalty(n.model??"",u.format);
|
|
277
281
|
o.push({format:u.format,encoded:l,instruction:d,payloadTokens:p,instructionTokens:h,penalty:m,total:p+h+m});}let i=o.find(u=>u.format==="json-compact"),s={};for(let u of o)s[u.format]=u.total;if(!i){let u=o[0];
|
|
278
|
-
return u?
|
|
282
|
+
return u?Da(u,s,"json baseline unavailable"):{chosen:"json-compact",encoded:JSON.stringify(e),instruction:"",candidateTokens:s,instructionOverheadTokens:0,reason:"no serializer supported payload; defa\
|
|
279
283
|
ulted to JSON"}}let a=i,c="json baseline (no challenger cleared thresholds)";for(let u of o){if(u.format==="json-compact")continue;let l=i.total-u.total,d=i.total===0?0:l/i.total;l>=this.minSavingsTokens&&
|
|
280
|
-
d>=this.minSavingsRatio&&u.total<a.total&&(a=u,c=`${u.format} saved ${l} tokens (${(d*100).toFixed(1)}%) vs json`);}return
|
|
281
|
-
n)}catch{return false}}function
|
|
282
|
-
length)return false;for(let s=0;s<t.length;s++)if(!
|
|
283
|
-
call(e,s)||!
|
|
284
|
-
string":return "string";case "number":return "number";case "boolean":return "boolean";default:return}}function
|
|
285
|
-
e.type??
|
|
286
|
-
message:"expected boolean"});break;case "null":t!==null&&r.push({path:n,message:"expected null"});break;}}function
|
|
284
|
+
d>=this.minSavingsRatio&&u.total<a.total&&(a=u,c=`${u.format} saved ${l} tokens (${(d*100).toFixed(1)}%) vs json`);}return Da(a,s,c)}};function lp(t,e,n){if(!t.decode)return false;try{return Uo(t.decode(e),
|
|
285
|
+
n)}catch{return false}}function Uo(t,e){if(t===e)return true;if(t===null||e===null||typeof t!="object"||typeof e!="object")return false;let n=Array.isArray(t),r=Array.isArray(e);if(n||r){if(!n||!r||t.length!==e.
|
|
286
|
+
length)return false;for(let s=0;s<t.length;s++)if(!Uo(t[s],e[s]))return false;return true}let o=Object.keys(t),i=Object.keys(e);if(o.length!==i.length)return false;for(let s of o)if(!Object.prototype.hasOwnProperty.
|
|
287
|
+
call(e,s)||!Uo(t[s],e[s]))return false;return true}function Da(t,e,n){return {chosen:t.format,encoded:t.encoded,instruction:t.instruction,candidateTokens:e,instructionOverheadTokens:t.instructionTokens,reason:n}}function de(t,e,n="$"){let r=[];return Ho(t,e,n,r),{valid:r.length===0,errors:r}}function dp(t){if(Array.isArray(t))return "array";if(t===null)return "null";switch(typeof t){case "object":return "object";case "\
|
|
288
|
+
string":return "string";case "number":return "number";case "boolean":return "boolean";default:return}}function Ho(t,e,n,r){switch(e.enum&&!e.enum.some(i=>gp(i,t))&&r.push({path:n,message:"value not in enum"}),
|
|
289
|
+
e.type??dp(t)){case "object":pp(t,e,n,r);break;case "array":fp(t,e,n,r);break;case "string":mp(t,e,n,r);break;case "number":case "integer":hp(t,e,n,r);break;case "boolean":typeof t!="boolean"&&r.push({path:n,
|
|
290
|
+
message:"expected boolean"});break;case "null":t!==null&&r.push({path:n,message:"expected null"});break;}}function pp(t,e,n,r){if(typeof t!="object"||t===null||Array.isArray(t)){r.push({path:n,
|
|
287
291
|
message:"expected object"});return}let o=t;for(let i of e.required??[])i in o||r.push({path:`${n}.${i}`,message:"missing required property"});if(e.additionalProperties===false&&e.properties){let i=new Set(
|
|
288
292
|
Object.keys(e.properties));for(let s of Object.keys(o))i.has(s)||r.push({path:`${n}.${s}`,message:"additional property not allowed"});}if(e.properties)for(let[i,s]of Object.entries(e.properties))i in o&&
|
|
289
|
-
|
|
290
|
-
ms ${e.maxItems}`}),e.minItems!=null&&t.length<e.minItems&&r.push({path:n,message:`array below minItems ${e.minItems}`}),e.items&&t.forEach((o,i)=>
|
|
293
|
+
Ho(o[i],s,`${n}.${i}`,r);}function fp(t,e,n,r){if(!Array.isArray(t)){r.push({path:n,message:"expected array"});return}e.maxItems!=null&&t.length>e.maxItems&&r.push({path:n,message:`array exceeds maxIte\
|
|
294
|
+
ms ${e.maxItems}`}),e.minItems!=null&&t.length<e.minItems&&r.push({path:n,message:`array below minItems ${e.minItems}`}),e.items&&t.forEach((o,i)=>Ho(o,e.items,`${n}[${i}]`,r));}function mp(t,e,n,r){if(typeof t!=
|
|
291
295
|
"string"){r.push({path:n,message:"expected string"});return}if(e.maxLength!=null&&t.length>e.maxLength&&r.push({path:n,message:`string exceeds maxLength ${e.maxLength}`}),e.minLength!=null&&t.length<e.
|
|
292
296
|
minLength&&r.push({path:n,message:`string below minLength ${e.minLength}`}),e.pattern){let o=null;try{o=new RegExp(e.pattern);}catch{r.push({path:n,message:`schema pattern is not a valid regular expres\
|
|
293
|
-
sion: ${e.pattern}`});}o&&!o.test(t)&&r.push({path:n,message:"string does not match pattern"});}}function
|
|
297
|
+
sion: ${e.pattern}`});}o&&!o.test(t)&&r.push({path:n,message:"string does not match pattern"});}}function hp(t,e,n,r){if(typeof t!="number"||Number.isNaN(t)){r.push({path:n,message:"expected number"});return}
|
|
294
298
|
e.type==="integer"&&!Number.isInteger(t)&&r.push({path:n,message:"expected integer"}),e.maximum!=null&&t>e.maximum&&r.push({path:n,message:`number exceeds maximum ${e.maximum}`}),e.minimum!=null&&t<e.
|
|
295
|
-
minimum&&r.push({path:n,message:`number below minimum ${e.minimum}`});}function
|
|
296
|
-
e,n,r),r}};function
|
|
297
|
-
.${r}`,n);}t.type==="array"&&(t.maxItems==null&&n.push(`${e}: array should set maxItems to bound output`),t.items&&
|
|
298
|
-
tring should set maxLength or use an enum`);}function
|
|
299
|
-
ate + repair"}}function
|
|
300
|
-
return r<n?{compress:false,reason:`net saving ${r} < ${n} min`}:{compress:true,reason:`net saving ${r} tokens`}}function
|
|
299
|
+
minimum&&r.push({path:n,message:`number below minimum ${e.minimum}`});}function gp(t,e){return t===e?true:typeof t!=typeof e?false:t&&e&&typeof t=="object"?JSON.stringify(t)===JSON.stringify(e):false}var tr=class{contracts=new Map;register(e){return this.contracts.set(e.contractId,e),this}resolve(e){return this.contracts.get(e)}has(e){return this.contracts.has(e)}static lint(e,n="$"){let r=[];return Wo(
|
|
300
|
+
e,n,r),r}};function Wo(t,e,n){if(t.type==="object"){t.additionalProperties!==false&&n.push(`${e}: object should set additionalProperties:false`);for(let[r,o]of Object.entries(t.properties??{}))Wo(o,`${e}\
|
|
301
|
+
.${r}`,n);}t.type==="array"&&(t.maxItems==null&&n.push(`${e}: array should set maxItems to bound output`),t.items&&Wo(t.items,`${e}[]`,n)),t.type==="string"&&t.maxLength==null&&!t.enum&&n.push(`${e}: s\
|
|
302
|
+
tring should set maxLength or use an enum`);}function Ia(t,e,n){for(let r of n)if(r.supports(t,e))return {backend:r.id,reason:`first supporting backend: ${r.id}`};return {backend:"none",reason:"no constrained-decoding backend available; will valid\
|
|
303
|
+
ate + repair"}}function F0(t=()=>true){return {id:"provider-native",supports:t}}function Jo(t){let e=t.minimumContextTokens??2e3,n=t.minimumNetTokens??200;if(t.contextTokens<e)return {compress:false,reason:`context ${t.contextTokens} < ${e} min`};let r=t.projectedEliminable-t.compressorCostTokens;
|
|
304
|
+
return r<n?{compress:false,reason:`net saving ${r} < ${n} min`}:{compress:true,reason:`net saving ${r} tokens`}}function J0(t){return {async compress(e){let n=e.protectedSpans??[],r=e.text,o=[];n.forEach((c,u)=>{
|
|
301
305
|
let l=`\0PROTECT_${u}\0`;o.push({token:l,span:c}),r=r.split(c.text).join(l);});let i=await t.compress({text:r,...e.targetRatio!=null?{targetRatio:e.targetRatio}:{}}),s=i.compressed,a=true;for(let{token:c,
|
|
302
306
|
span:u}of o){if(!s.includes(c)){a=false;break}s=s.split(c).join(u.text);}return a?{...i,compressed:s,protectedSpans:n.length,fidelityPassed:true}:{compressed:e.text,originalTokens:i.originalTokens,compressedTokens:i.
|
|
303
|
-
originalTokens,protectedSpans:n.length,fidelityPassed:false,skipped:true,reason:"protected span lost during compression; fell back to original"}}}}var
|
|
304
|
-
compressedTokens:0,protectedSpans:(t.protectedSpans??[]).length,fidelityPassed:true,skipped:true,reason:"no compressor configured (noop)"}}};function
|
|
307
|
+
originalTokens,protectedSpans:n.length,fidelityPassed:false,skipped:true,reason:"protected span lost during compression; fell back to original"}}}}var K0={async compress(t){return {compressed:t.text,originalTokens:0,
|
|
308
|
+
compressedTokens:0,protectedSpans:(t.protectedSpans??[]).length,fidelityPassed:true,skipped:true,reason:"no compressor configured (noop)"}}};function _a(t,e){let n=s=>s.toLowerCase().replace(/[.,;:!¡?¿()[\]{}"«»…]/g,
|
|
305
309
|
" ").replace(/\s+/g," ").trim(),o=n((s=>{let a=new Set,c=[];for(let u of s.split(`
|
|
306
310
|
`)){let l=u.trim();l&&a.has(l)||(l&&a.add(l),c.push(u));}return c.join(`
|
|
307
|
-
`)})(t)),i=n(e);return !(!
|
|
308
|
-
let e=t.replace(
|
|
311
|
+
`)})(t)),i=n(e);return !(!jo(rn(o),rn(i))||sn(on(o))!==sn(on(i)))}var Ko=["ansi","carriage-return","json","repeated-lines"],bp=256,vp=/\u001b(?:\[[0-?]*[ -/]*[@-~]|\][^\u0007\u001b]*(?:\u0007|\u001b\\)|[ -/]+[0-~]|[@-_])/g;function yp(t){if(!t.includes("\x1B"))return null;
|
|
312
|
+
let e=t.replace(vp,"");return e.length<t.length?e:null}function kp(t){let e="";for(let n of t.split("\r"))e=n+e.slice(n.length);return e}function xp(t){if(!t.includes("\r")||t.includes(`\r
|
|
309
313
|
`))return null;let e=t.split(`
|
|
310
|
-
`).map(n=>n.includes("\r")?
|
|
311
|
-
`);return e.length<t.length?e:null}var
|
|
312
|
-
i=0,s=false;for(let c=0;c<e.length;c++){let u=e.charCodeAt(c);if(s){u===92?c+=1:u===34&&(s=false);continue}if(u===34){s=true;continue}
|
|
313
|
-
join("");if(a.length>=t.length)return null;try{if(JSON.stringify(JSON.parse(a))!==JSON.stringify(r))return null}catch{return null}return a}var
|
|
314
|
-
[previous line repeated ${t} more times]`,
|
|
315
|
-
`)){let r=
|
|
316
|
-
`)}function
|
|
317
|
-
`);if(e.length<
|
|
314
|
+
`).map(n=>n.includes("\r")?kp(n):n).join(`
|
|
315
|
+
`);return e.length<t.length?e:null}var wp=t=>t===32||t===9||t===10||t===13;function Sp(t){let e=t.trim(),n=e.charCodeAt(0);if(n!==123&&n!==91)return null;let r;try{r=JSON.parse(e);}catch{return null}let o=[],
|
|
316
|
+
i=0,s=false;for(let c=0;c<e.length;c++){let u=e.charCodeAt(c);if(s){u===92?c+=1:u===34&&(s=false);continue}if(u===34){s=true;continue}wp(u)&&(c>i&&o.push(e.slice(i,c)),i=c+1);}i<e.length&&o.push(e.slice(i));let a=o.
|
|
317
|
+
join("");if(a.length>=t.length)return null;try{if(JSON.stringify(JSON.parse(a))!==JSON.stringify(r))return null}catch{return null}return a}var Ma=/^\[previous line repeated (\d+) more times\]$/,Tp=t=>`\
|
|
318
|
+
[previous line repeated ${t} more times]`,Aa=3;function Cp(t){let e=[];for(let n of t.split(`
|
|
319
|
+
`)){let r=Ma.exec(n);if(r&&e.length>0){let o=e[e.length-1];for(let i=Number(r[1]);i>0;i--)e.push(o);}else e.push(n);}return e.join(`
|
|
320
|
+
`)}function Ep(t){let e=t.split(`
|
|
321
|
+
`);if(e.length<Aa||e.some(i=>Ma.test(i)))return null;let n=[],r=0;for(let i=0;i<e.length;){let s=e[i],a=i+1;for(;a<e.length&&e[a]===s;)a++;let c=a-i-1,u=Tp(c);if(c+1>=Aa&&c*(s.length+1)>u.length+1)n.push(
|
|
318
322
|
s,u),r+=c;else for(let l=i;l<a;l++)n.push(e[l]);i=a;}if(r===0)return null;let o=n.join(`
|
|
319
|
-
`);return
|
|
320
|
-
o=t,i=[];for(let a of
|
|
321
|
-
ould save ${s} chars, below the ${r} minimum`):{text:o,changed:true,applied:i,originalChars:t.length,compactChars:o.length,reason:`${i.join(", ")}: ${s} chars removed`}}function
|
|
322
|
-
applied:[],originalChars:t.length,compactChars:t.length,reason:e}}var
|
|
323
|
-
if(!t)return false;let e;try{e=JSON.parse(t);}catch{return false}return !e||typeof e!="object"||Array.isArray(e)?false:Object.keys(e).some(n=>
|
|
323
|
+
`);return Cp(o)!==t?null:o.length<t.length?o:null}var Pp={ansi:yp,"carriage-return":xp,json:Sp,"repeated-lines":Ep};function La(t,e={}){let n=new Set(e.transforms??Ko),r=Math.max(1,e.minSavedChars??256),
|
|
324
|
+
o=t,i=[];for(let a of Ko){if(!n.has(a))continue;let c=Pp[a](o);c!=null&&c.length<o.length&&(o=c,i.push(a));}let s=t.length-o.length;return i.length===0?Oa(t,"nothing to compact"):s<r?Oa(t,`compaction w\
|
|
325
|
+
ould save ${s} chars, below the ${r} minimum`):{text:o,changed:true,applied:i,originalChars:t.length,compactChars:o.length,reason:`${i.join(", ")}: ${s} chars removed`}}function Oa(t,e){return {text:t,changed:false,
|
|
326
|
+
applied:[],originalChars:t.length,compactChars:t.length,reason:e}}var Rp=new Set(["path","paths","file","files","filepath","filename","absolutepath","relativepath","targetfile","notebookpath"]);function Dp(t){
|
|
327
|
+
if(!t)return false;let e;try{e=JSON.parse(t);}catch{return false}return !e||typeof e!="object"||Array.isArray(e)?false:Object.keys(e).some(n=>Rp.has(n.toLowerCase().replace(/[_-]/g,"")))}function ja(t,e={}){let n=new Map,
|
|
324
328
|
r=-1;t.forEach((s,a)=>{if(s.role==="assistant"){r=a;for(let c of s.toolCalls??[])c.id&&n.set(c.id,{nombre:c.name,argumentos:c.arguments});}});let o=new Set(e.exceptTools??[]),i={compactados:[],vistasDeFichero:0,
|
|
325
|
-
exceptuados:0};return t.forEach((s,a)=>{if(s.role!=="tool")return;let c=s.toolCallId?n.get(s.toolCallId):void 0,u=c?.nombre??s.name;if(u&&o.has(u)){i.exceptuados+=1;return}if(!e.compactFileViews&&
|
|
326
|
-
argumentos)){i.vistasDeFichero+=1;return}let l=
|
|
327
|
-
`),o=
|
|
328
|
-
options.data??
|
|
329
|
+
exceptuados:0};return t.forEach((s,a)=>{if(s.role!=="tool")return;let c=s.toolCallId?n.get(s.toolCallId):void 0,u=c?.nombre??s.name;if(u&&o.has(u)){i.exceptuados+=1;return}if(!e.compactFileViews&&Dp(c?.
|
|
330
|
+
argumentos)){i.vistasDeFichero+=1;return}let l=La(s.content,e);l.changed&&i.compactados.push({indice:a,texto:l.text,aplicadas:l.applied,enLaCola:a>r});}),i}var Na=new WeakSet;function $a(t){Na.add(t);}function Go(t){return typeof t=="object"&&t!==null&&Na.has(t)}var Zo=class{id="mock";options;constructor(e={}){this.options=e,$a(this);}async generate(e,n){let r=e.messages.map(c=>c.content).join(`
|
|
331
|
+
`),o=Ct.count(r);if(e.tools&&e.tools.length>0){let c=JSON.stringify(e.tools.map(u=>({name:u.id,description:u.description,parameters:u.parameters??{}})));o+=Ct.count(c);}let i,s=false;if(e.schema){let c=this.
|
|
332
|
+
options.data??nr(e.schema);i=JSON.stringify(c),s=true;}else i=this.options.answer??`mock-response(${e.model})`;let a=Math.min(e.maxOutputTokens??Number.MAX_SAFE_INTEGER,Ct.count(i));return {text:i,usage:{
|
|
329
333
|
inputTokens:o,outputTokens:a,...this.options.cachedInputTokens!=null?{cachedInputTokens:this.options.cachedInputTokens}:{}},structuredNatively:s}}async*generateStream(e){let n=await this.generate(e),r=Math.
|
|
330
|
-
max(1,this.options.streamChunkChars??8);for(let o=0;o<n.text.length;o+=r)yield {type:"text",delta:n.text.slice(o,o+r)};yield {type:"done",response:n};}};function
|
|
331
|
-
enum[0];switch(t.type){case "object":{let e={};for(let n of t.required??[]){let r=t.properties?.[n];e[n]=r?
|
|
332
|
-
array":return t.items?[
|
|
333
|
-
t)}function
|
|
334
|
-
Number(e[2]);return n>5||n===5&&r>=6}function Ke(t){let e=
|
|
335
|
-
return
|
|
336
|
-
|
|
334
|
+
max(1,this.options.streamChunkChars??8);for(let o=0;o<n.text.length;o+=r)yield {type:"text",delta:n.text.slice(o,o+r)};yield {type:"done",response:n};}};function nr(t){if(t.enum&&t.enum.length>0)return t.
|
|
335
|
+
enum[0];switch(t.type){case "object":{let e={};for(let n of t.required??[]){let r=t.properties?.[n];e[n]=r?nr(r):null;}for(let[n,r]of Object.entries(t.properties??{}))n in e||(e[n]=nr(r));return e}case "\
|
|
336
|
+
array":return t.items?[nr(t.items)]:[];case "string":return "mock";case "number":case "integer":return t.minimum??0;case "boolean":return true;case "null":return null;default:return null}}function rb(t){return new Zo(
|
|
337
|
+
t)}function Yo(t){let e=t.toLowerCase(),n=e.lastIndexOf("/");return n>=0?e.slice(n+1):e}function Ba(t){let e=/^gpt-(\d+)(?:\.(\d+))?(?![\d.])/.exec(t);if(!e)return false;let n=Number(e[1]),r=e[2]===void 0?0:
|
|
338
|
+
Number(e[2]);return n>5||n===5&&r>=6}function Ke(t){let e=Yo(t);return e.startsWith("gpt-")||e.startsWith("o1")||e.startsWith("o3")||e.startsWith("o4")?Ba(e)?1.25:1:e.startsWith("gemini")?1:1.25}function un(t){
|
|
339
|
+
return Ba(Yo(t))?1.25:1}function Qo(t){let e=t.toLowerCase();return e.startsWith("claude")||e.startsWith("anthropic/")||Yo(e).startsWith("claude")?2:Ke(t)}var Ip="https://developers.openai.com/api/docs/pricing",_p="https://ai.google.dev/gemini-api/docs/pricing",Xo="2026-09-27",$=t=>({...t,fuente:Ip,consultado:Xo}),De=t=>({...t,fuente:_p,consultado:Xo}),
|
|
340
|
+
Ap="https://platform.claude.com/docs/en/about-claude/pricing",te=t=>({...t,fuente:Ap,consultado:Xo}),Op={openai:{flex:{"gpt-5":$({inputPer1k:625e-6,cachedInputPer1k:625e-7,outputPer1k:.005}),"gpt-5-mi\
|
|
337
341
|
ni":$({inputPer1k:125e-6,cachedInputPer1k:125e-7,outputPer1k:.001}),"gpt-5-nano":$({inputPer1k:25e-6,cachedInputPer1k:25e-7,outputPer1k:2e-4}),"gpt-5.2":$({inputPer1k:875e-6,cachedInputPer1k:875e-7,outputPer1k:.007}),
|
|
338
342
|
"gpt-5.4":$({inputPer1k:.00125,cachedInputPer1k:13e-5,outputPer1k:.0075,largo:{estandar:{inputPer1k:.005,cachedInputPer1k:5e-4,outputPer1k:.0225},tier:{inputPer1k:.0025,cachedInputPer1k:25e-5,outputPer1k:.01125}}}),
|
|
339
343
|
"gpt-5.4-mini":$({inputPer1k:375e-6,cachedInputPer1k:375e-7,outputPer1k:.00225}),"gpt-5.4-nano":$({inputPer1k:1e-4,cachedInputPer1k:1e-5,outputPer1k:625e-6}),"gpt-5.5":$({inputPer1k:.0025,cachedInputPer1k:25e-5,
|
|
@@ -361,143 +365,144 @@ outputPer1k:.00225}),"gpt-5.4-nano":$({inputPer1k:1e-4,cachedInputPer1k:1e-5,out
|
|
|
361
365
|
cachedInputPer1k:625e-7,outputPer1k:.005}),"gpt-5-mini":$({inputPer1k:125e-6,cachedInputPer1k:125e-7,outputPer1k:.001}),"gpt-5-nano":$({inputPer1k:25e-6,cachedInputPer1k:25e-7,outputPer1k:2e-4}),"gpt-\
|
|
362
366
|
4.1":$({inputPer1k:.001,outputPer1k:.004}),"gpt-4.1-mini":$({inputPer1k:2e-4,outputPer1k:8e-4}),"gpt-4.1-nano":$({inputPer1k:5e-5,outputPer1k:2e-4}),"gpt-4o":$({inputPer1k:.00125,outputPer1k:.005}),"g\
|
|
363
367
|
pt-4o-mini":$({inputPer1k:75e-6,outputPer1k:3e-4}),o3:$({inputPer1k:.001,outputPer1k:.004}),"o4-mini":$({inputPer1k:55e-5,outputPer1k:.0022}),"o3-mini":$({inputPer1k:55e-5,outputPer1k:.0022}),"o3-pro":$(
|
|
364
|
-
{inputPer1k:.01,outputPer1k:.04})}},anthropic:{batch:{"claude-fable-5-1":
|
|
365
|
-
cacheWritePer1k:.00625,outputPer1k:.025}),"claude-fable-5":
|
|
366
|
-
cacheWritePer1k:.00625,outputPer1k:.025}),"claude-opus-5-5":
|
|
367
|
-
cacheWritePer1k:.003125,outputPer1k:.0125}),"claude-opus-4-8":
|
|
368
|
-
cacheWritePer1k:.003125,outputPer1k:.0125}),"claude-opus-4-6":
|
|
369
|
-
cacheWritePer1k:.003125,outputPer1k:.0125}),"claude-opus-4":
|
|
370
|
-
cacheWritePer1k:.00125,outputPer1k:.005}),"claude-sonnet-4-6":
|
|
371
|
-
cacheWritePer1k:.001875,outputPer1k:.0075}),"claude-sonnet-4":
|
|
372
|
-
cacheWritePer1k:625e-6,outputPer1k:.0025}),"claude-3-5-haiku":
|
|
368
|
+
{inputPer1k:.01,outputPer1k:.04})}},anthropic:{batch:{"claude-fable-5-1":te({inputPer1k:.005,cachedInputPer1k:125e-6,cacheWritePer1k:.00625,outputPer1k:.025}),"claude-mythos-5-1":te({inputPer1k:.005,cachedInputPer1k:125e-6,
|
|
369
|
+
cacheWritePer1k:.00625,outputPer1k:.025}),"claude-fable-5":te({inputPer1k:.005,cachedInputPer1k:5e-4,cacheWritePer1k:.00625,outputPer1k:.025}),"claude-mythos-5":te({inputPer1k:.005,cachedInputPer1k:5e-4,
|
|
370
|
+
cacheWritePer1k:.00625,outputPer1k:.025}),"claude-opus-5-5":te({inputPer1k:.002,cachedInputPer1k:1e-4,cacheWritePer1k:.0025,outputPer1k:.01}),"claude-opus-5":te({inputPer1k:.0025,cachedInputPer1k:25e-5,
|
|
371
|
+
cacheWritePer1k:.003125,outputPer1k:.0125}),"claude-opus-4-8":te({inputPer1k:.0025,cachedInputPer1k:25e-5,cacheWritePer1k:.003125,outputPer1k:.0125}),"claude-opus-4-7":te({inputPer1k:.0025,cachedInputPer1k:25e-5,
|
|
372
|
+
cacheWritePer1k:.003125,outputPer1k:.0125}),"claude-opus-4-6":te({inputPer1k:.0025,cachedInputPer1k:25e-5,cacheWritePer1k:.003125,outputPer1k:.0125}),"claude-opus-4-5":te({inputPer1k:.0025,cachedInputPer1k:25e-5,
|
|
373
|
+
cacheWritePer1k:.003125,outputPer1k:.0125}),"claude-opus-4":te({inputPer1k:.0075,cachedInputPer1k:75e-5,cacheWritePer1k:.009375,outputPer1k:.0375}),"claude-sonnet-5":te({inputPer1k:.001,cachedInputPer1k:1e-4,
|
|
374
|
+
cacheWritePer1k:.00125,outputPer1k:.005}),"claude-sonnet-4-6":te({inputPer1k:.0015,cachedInputPer1k:15e-5,cacheWritePer1k:.001875,outputPer1k:.0075}),"claude-sonnet-4-5":te({inputPer1k:.0015,cachedInputPer1k:15e-5,
|
|
375
|
+
cacheWritePer1k:.001875,outputPer1k:.0075}),"claude-sonnet-4":te({inputPer1k:.0015,cachedInputPer1k:15e-5,cacheWritePer1k:.001875,outputPer1k:.0075}),"claude-haiku-4-5":te({inputPer1k:5e-4,cachedInputPer1k:5e-5,
|
|
376
|
+
cacheWritePer1k:625e-6,outputPer1k:.0025}),"claude-3-5-haiku":te({inputPer1k:4e-4,cachedInputPer1k:4e-5,cacheWritePer1k:5e-4,outputPer1k:.002})}},google:{flex:{"gemini-3.7-flash":De({inputPer1k:375e-6,
|
|
373
377
|
outputPer1k:.001875,cachedInputPer1k:375e-7,vigenteHasta:"2026-12-31"}),"gemini-3.5-flash":De({inputPer1k:75e-5,outputPer1k:.0045,cachedInputPer1k:8e-5}),"gemini-3.5-flash-lite":De({inputPer1k:15e-5,outputPer1k:.00125,
|
|
374
378
|
cachedInputPer1k:2e-5}),"gemini-3.1-pro-preview":De({inputPer1k:.001,outputPer1k:.006,cachedInputPer1k:2e-4,largo:{estandar:{inputPer1k:.004,outputPer1k:.018,cachedInputPer1k:4e-4},tier:{inputPer1k:.002,
|
|
375
379
|
outputPer1k:.009,cachedInputPer1k:4e-4}}}),"gemini-2.5-pro":De({inputPer1k:625e-6,outputPer1k:.005,cachedInputPer1k:125e-6,largo:{estandar:{inputPer1k:.0025,outputPer1k:.015,cachedInputPer1k:25e-5},tier:{
|
|
376
380
|
inputPer1k:.00125,outputPer1k:.0075,cachedInputPer1k:25e-5}}}),"gemini-2.5-flash":De({inputPer1k:15e-5,outputPer1k:.00125,cachedInputPer1k:3e-5}),"gemini-3.8-flash":De({inputPer1k:375e-6,outputPer1k:.001875,
|
|
377
381
|
cachedInputPer1k:375e-7,vigenteHasta:"2026-12-31"}),"gemini-3.6-flash":De({inputPer1k:375e-6,outputPer1k:.001875,cachedInputPer1k:375e-7,vigenteHasta:"2026-12-31"}),"gemini-3.1-flash-lite":De({inputPer1k:125e-6,
|
|
378
382
|
outputPer1k:75e-5,cachedInputPer1k:125e-7}),"gemini-3-flash-preview":De({inputPer1k:25e-5,outputPer1k:.0015,cachedInputPer1k:5e-5})}}};function Ge(t){let e=t.lastIndexOf("/");return e>=0?t.slice(e+1):
|
|
379
|
-
t}function
|
|
380
|
-
opic":/^(gpt-|o[1-9](-|$))/.test(o)?"openai":o.startsWith("gemini")?"google":o.startsWith("claude-")?"anthropic":null}function
|
|
381
|
-
if(We(n)===void 0)return;let o=
|
|
382
|
-
inputPer1k*Ke(Ge(t))}}var
|
|
383
|
-
null?{servido:t,factor:null,conDescuento:false}:{servido:t,factor:e,conDescuento:e<1}}var
|
|
384
|
-
"number"&&Number.isFinite(t);function
|
|
385
|
-
standard-rate-tier"};let n=t.uso;if(n.complete===false||!
|
|
386
|
-
return {ok:false,motivo:"incomplete-usage"};let r=
|
|
383
|
+
t}function ln(t){let e=t.toLowerCase(),n=e.indexOf("/"),r=n>0?e.slice(0,n):"",o=Ge(e);return r==="openai"||r==="azure-openai"?"openai":r==="google"||r==="google-vertex"?"google":r==="anthropic"?"anthr\
|
|
384
|
+
opic":/^(gpt-|o[1-9](-|$))/.test(o)?"openai":o.startsWith("gemini")?"google":o.startsWith("claude-")?"anthropic":null}function Mp(t){return Date.parse(`${t}T23:59:59.999Z`)}function dn(t,e,n,r=Date.now()){
|
|
385
|
+
if(We(n)===void 0)return;let o=Tt(n);if(o===void 0)return;let i=Op[t]?.[e],s=i?i[o]:void 0;if(s&&!(s.vigenteHasta&&r>Mp(s.vigenteHasta)))return s}function rr(t){let e=We(t);if(e)return {...e,cacheWritePer1k:e.
|
|
386
|
+
inputPer1k*Ke(Ge(t))}}var Fa={flex:.5,default:1,auto:1,priority:1,fast:1,scale:1,standard:1,batch:.5},za=Math.min(...Object.values(Fa).filter(t=>t<1)),Rt="flex";function ei(t){if(t==null||t==="")return null;let e=Fa[t];return e==
|
|
387
|
+
null?{servido:t,factor:null,conDescuento:false}:{servido:t,factor:e,conDescuento:e<1}}var or=1e10;function ti(t){let e=Math.floor(t*or)/or;return e>t&&(e=(Math.floor(t*or)-1)/or),e<=0?0:e}var ir=t=>typeof t==
|
|
388
|
+
"number"&&Number.isFinite(t);function sr(t){let e=ei(t.tierServido);if(!e)return {ok:false,motivo:"no-served-tier"};if(e.factor==null)return {ok:false,motivo:"unknown-tier"};if(!e.conDescuento)return {ok:false,motivo:"\
|
|
389
|
+
standard-rate-tier"};let n=t.uso;if(n.complete===false||!ir(n.inputTokens)||!ir(n.outputTokens)||n.cachedInputTokens!=null&&!ir(n.cachedInputTokens)||n.cacheWriteInputTokens!=null&&!ir(n.cacheWriteInputTokens))
|
|
390
|
+
return {ok:false,motivo:"incomplete-usage"};let r=rr(t.modelo);if(!r)return {ok:false,motivo:"no-standard-price"};let o=t.origen??ln(t.modelo),i=o?dn(o,e.servido,t.modelo,t.ahoraMs):void 0;if(!i)return {ok:false,
|
|
387
391
|
motivo:"no-tier-price"};let s=Math.max(0,n.inputTokens),a=Ke(Ge(t.modelo)),c=n.cachedInputTokens!=null,u=a<=1||n.cacheWriteInputTokens!=null,l=c?Math.min(Math.max(0,n.cachedInputTokens??0),s):0,d=a>1&&
|
|
388
392
|
u?Math.min(Math.max(0,n.cacheWriteInputTokens??0),s-l):0,p=s-l-d,h=Math.max(0,n.outputTokens),m={input:r.inputPer1k,"cached input":r.cachedInputPer1k??r.inputPer1k,"cache write":r.cacheWritePer1k,output:r.
|
|
389
393
|
outputPer1k},g={input:i.inputPer1k,"cached input":i.cachedInputPer1k,"cache write":i.cacheWritePer1k,output:i.outputPer1k},f=[{tokens:p,posibles:["input",...c?[]:["cached input"],...u?[]:["cache write"]]},
|
|
390
394
|
{tokens:l,posibles:["cached input"]},{tokens:d,posibles:["cache write"]},{tokens:h,posibles:["output"]}],v=p>0&&f[0].posibles.length>1,b=t.precioDelCliente,y=b?{input:b.inputPer1k,"cached input":b.cachedInputPer1k??
|
|
391
395
|
b.inputPer1k,"cache write":b.inputPer1k*a,output:b.outputPer1k}:void 0,k=(j,B)=>{let V=B?y[j]:m[j],z=g[j];return z===void 0?{std:V,aplicado:V}:B?{std:V,aplicado:m[j]>0?V*(z/m[j]):V}:{std:V,aplicado:z}},
|
|
392
|
-
T=new Set,w=j=>{let B=0,V=0;for(let z of f){if(z.tokens<=0)continue;let ee=z.posibles[0],L=k(ee,j);for(let
|
|
393
|
-
void 0&&z.posibles.length===1&&T.add(ee),B+=z.tokens/1e3*L.std,V+=z.tokens/1e3*L.aplicado;}return {std:B,aplicado:V}},
|
|
394
|
-
std-j.aplicado;
|
|
395
|
-
the endpoint is not the provider's own API as attested by this package's adapter, so the rate cards it bills cannot be confirmed"):t.tierLeidoDe!=="cuerpo"&&t.tierLeidoDe!=="lote"&&
|
|
396
|
-
tier was read from a response header whose values the provider does not document"),b&&
|
|
397
|
-
t the difference between the two published rate cards":"")),v){let j=[...c?[]:["read from"],...u?[]:["written to"]].join(" or ");
|
|
398
|
-
its prompt cache, so those tokens are priced at the smallest per-token difference they could have had`);}T.size>0&&
|
|
399
|
-
e tokens add nothing`);let
|
|
396
|
+
T=new Set,w=j=>{let B=0,V=0;for(let z of f){if(z.tokens<=0)continue;let ee=z.posibles[0],L=k(ee,j);for(let se of z.posibles.slice(1)){let ae=k(se,j);ae.std-ae.aplicado<L.std-L.aplicado&&(ee=se,L=ae);}g[ee]===
|
|
397
|
+
void 0&&z.posibles.length===1&&T.add(ee),B+=z.tokens/1e3*L.std,V+=z.tokens/1e3*L.aplicado;}return {std:B,aplicado:V}},P=w(false),x=P.std-P.aplicado,S=P.std,O=P.aplicado,R=x,C=false;if(b){let j=w(true);S=j.std;let B=j.
|
|
398
|
+
std-j.aplicado;C=B>x,R=Math.min(B,x),O=C?j.std-R:j.aplicado;}if(!(R>0))return {ok:false,motivo:"no-difference"};let I=ti(R);if(I<=0)return {ok:false,motivo:"no-difference"};let D=[];if(t.origen===null?D.push("\
|
|
399
|
+
the endpoint is not the provider's own API as attested by this package's adapter, so the rate cards it bills cannot be confirmed"):t.tierLeidoDe!=="cuerpo"&&t.tierLeidoDe!=="lote"&&D.push("the served \
|
|
400
|
+
tier was read from a response header whose values the provider does not document"),b&&D.push("priced from your costModels: your standard rate times the published tier-to-standard ratio"+(C?", capped a\
|
|
401
|
+
t the difference between the two published rate cards":"")),v){let j=[...c?[]:["read from"],...u?[]:["written to"]].join(" or ");D.push(`the provider's usage did not say how many input tokens were ${j}\
|
|
402
|
+
its prompt cache, so those tokens are priced at the smallest per-token difference they could have had`);}T.size>0&&D.push(`the provider publishes no ${[...T].join(" or ")} price for this tier, so thos\
|
|
403
|
+
e tokens add nothing`);let A=D.length===0;return {ok:true,importe:I,basis:A?"measured":"estimated",costeEstandar:S,costeAplicado:O,factorEfectivo:O/S,motivoBasis:A?`the provider's own usage for this call\
|
|
400
404
|
at two published rate cards (${i.fuente}, checked ${i.consultado}), with the served tier read back from the provider's official API`+(t.tierLeidoDe==="lote"?" (its batch record: a batch result is bil\
|
|
401
|
-
led at the batch rate card)":""):`estimated: ${
|
|
405
|
+
led at the batch rate card)":""):`estimated: ${D.join("; ")}`,consultado:i.consultado}}function qa(t,e,n){let r=e??ln(t);return r!==null&&dn(r,"batch",t,n)!==void 0}var Lp="slower and variable: OpenAI\
|
|
402
406
|
publishes no latency commitment for the flex tier. What IS documented is the failure shape \u2014 the default SDK timeout is 10 minutes and a request that exceeds it returns 408, and when flex capacity is\
|
|
403
|
-
short the request returns 429 and is not charged. Do not put a deferrable request on a user-facing path.",
|
|
407
|
+
short the request returns 429 and is not charged. Do not put a deferrable request on a user-facing path.",jp='slower and variable: Google targets minutes for the Flex tier ("Minutes (1\u201315 min target)\
|
|
404
408
|
", https://ai.google.dev/gemini-api/docs/flex-inference) and treats it as sheddable. When Flex capacity is unavailable the request fails with 503 or 429 and is never upgraded to the Standard tier on t\
|
|
405
|
-
he server side. Do not put a deferrable request on a user-facing path.',
|
|
409
|
+
he server side. Do not put a deferrable request on a user-facing path.',Np="slower and variable, and unknown here: this endpoint is not attested as OpenAI's or Google's own API, so this layer has no p\
|
|
406
410
|
ublished latency statement for it. On those two providers a flex request without capacity fails (429, or 503 on Google) instead of waiting; expect that failure shape. Do not put a deferrable request o\
|
|
407
|
-
n a user-facing path."
|
|
411
|
+
n a user-facing path.",$p="unchanged: this provider has no cheaper synchronous processing tier, so nothing was asked for and the request was scheduled exactly as it would have been.",Va="this provider\
|
|
408
412
|
has no cheaper synchronous processing tier, so the request was sent unchanged and nothing is credited; on this provider the deferred discount lives only in the asynchronous batch API, which is not a \
|
|
409
|
-
request/response call (with the built-in Anthropic and OpenAI providers, layer.batches.submit() sends such requests there)";function
|
|
410
|
-
google"?
|
|
411
|
-
st on a user-facing path.`}var
|
|
412
|
-
return {minimumCacheTokens:
|
|
413
|
-
0),n),o=Math.min(Math.max(0,t.uso.cacheWriteInputTokens??0),n-r),i=n-r-o;if(n<
|
|
414
|
-
cacheWritePer1k,a=i/1e3*t.fila.inputPer1k;return {importe:
|
|
415
|
-
"https:"||e.port!==""?null:
|
|
416
|
-
function
|
|
417
|
-
null?
|
|
418
|
-
n")return;let r=n.call(t);return r==="oficial"||r==="no-oficial"?r:void 0}catch{return}}function
|
|
419
|
-
return typeof t=="object"&&t!==null?
|
|
420
|
-
hash="",e.toString().replace(/\/+$/,"")}catch{return t.replace(/\/+$/,"")}}function
|
|
421
|
-
l: a batch request path must be relative to the provider base (got "${t}")`);return t}var
|
|
413
|
+
request/response call (with the built-in Anthropic and OpenAI providers, layer.batches.submit() sends such requests there)";function Ua(t,e=null){return t==null||t===""?$p:t===Rt?e==="openai"?Lp:e==="\
|
|
414
|
+
google"?jp:Np:`unknown: this layer has no published latency statement for the "${t}" tier. A cheaper tier without capacity usually fails (429 or 503) rather than waiting; do not put a deferrable reque\
|
|
415
|
+
st on a user-facing path.`}var Ha=1024;function lt(t,e){return e==="openai"&&ln(Ge(t))==="openai"&&Ke(Ge(t))>1}function ni(t){let e=We(t);if(!e||!(e.inputPer1k>0))return null;let n=(e.cachedInputPer1k??e.inputPer1k)/e.inputPer1k;
|
|
416
|
+
return {minimumCacheTokens:Ha,cacheReadMultiplier:n,cacheWriteMultiplier:Ke(Ge(t))}}function Wa(t){let e=t.consultado??bo,n=Math.max(0,t.uso.inputTokens),r=Math.min(Math.max(0,t.uso.cachedInputTokens??
|
|
417
|
+
0),n),o=Math.min(Math.max(0,t.uso.cacheWriteInputTokens??0),n-r),i=n-r-o;if(n<Ha||i<=0)return {importe:0,costeEstandar:0,costeAplicado:0,tokensOrdinarios:Math.max(0,i),consultado:e};let s=i/1e3*t.fila.
|
|
418
|
+
cacheWritePer1k,a=i/1e3*t.fila.inputPer1k;return {importe:ti(s-a),costeEstandar:s,costeAplicado:a,tokensOrdinarios:i,consultado:e}}var Ja=new Set;function ye(t,e){Ja.has(t)||(Ja.add(t),console.warn(e));}var Bp={"api.anthropic.com":"anthropic","api.openai.com":"openai","generativelanguage.googleapis.com":"google"};function pn(t){if(typeof t!="string")return null;try{let e=new URL(t);return e.protocol!==
|
|
419
|
+
"https:"||e.port!==""?null:Bp[e.hostname.toLowerCase()]??null}catch{return null}}function ar(t){return pn(t)!==null?"oficial":"no-oficial"}var Ka=Symbol.for("@bivelio/savings-layer:provider-origin");function fn(t){return {esquemaEnFormatoNativo:false,esquemaEstricto:false,esquemaPorPrompt:false,piezasDelAdaptador:t}}var Fp=2;function Dt(t){return Fp*(t??[]).filter(e=>e.parameters==null).length}var cr=new WeakMap;
|
|
420
|
+
function It(t,e){return cr.set(t,e),t}function ur(t){return typeof t=="object"&&t!==null?cr.get(t):void 0}var Ga=new WeakMap;function Za(t,e){Ga.set(t,e);}function dt(t){return typeof t=="object"&&t!==
|
|
421
|
+
null?Ga.get(t):void 0}var Ya=new WeakMap;function lr(t,e){Ya.set(t,e);}function Qa(t){if(typeof t!="object"||t===null)return;let e=Ya.get(t);if(e!==void 0)return e;try{let n=t[Ka];if(typeof n!="functio\
|
|
422
|
+
n")return;let r=n.call(t);return r==="oficial"||r==="no-oficial"?r:void 0}catch{return}}function Xa(t,e){let n=cr.get(t);return n&&cr.set(e,n),e}var ec=new WeakMap;function tc(t,e){ec.set(t,e);}function ri(t){
|
|
423
|
+
return typeof t=="object"&&t!==null?ec.get(t):void 0}var nc=new WeakSet;function rc(t){typeof t=="object"&&t!==null&&nc.add(t);}function zp(t){return nc.has(t)}function _t(t,e,n){zp(t)||ye(e,n);}var oc=new WeakMap;function dr(t,e){oc.set(t,e);}function ic(t){return typeof t=="object"&&t!==null?oc.get(t):void 0}function pr(t){try{let e=new URL(t);return e.username="",e.password="",e.search="",e.
|
|
424
|
+
hash="",e.toString().replace(/\/+$/,"")}catch{return t.replace(/\/+$/,"")}}function fr(t){if(!t.startsWith("/")||t.startsWith("//")||/^\/*[a-z][a-z0-9+.-]*:/i.test(t))throw new Error(`[bvsala] interna\
|
|
425
|
+
l: a batch request path must be relative to the provider base (got "${t}")`);return t}var oi=class{decoder;resto="";crPendiente=false;alPrincipio=true;datos="";evento="";ultimoId;push(e){let n=typeof e=="string"?e:(this.decoder??=new TextDecoder("utf-8")).decode(e,{stream:true});return this.procesar(
|
|
422
426
|
n)}end(){let e=[];if(this.decoder){let n=this.decoder.decode();n!==""&&e.push(...this.procesar(n));}return this.resto!==""&&(this.linea(this.resto,e),this.resto=""),this.despachar(e),this.crPendiente=false,
|
|
423
427
|
e}procesar(e){let n=[];if(e==="")return n;let r=e;if(this.alPrincipio&&(this.alPrincipio=false,r.charCodeAt(0)===65279&&(r=r.slice(1)),r===""))return n;let o=0;this.crPendiente&&(this.crPendiente=false,r.charCodeAt(
|
|
424
428
|
0)===10&&(o=1));let i=o;for(;o<r.length;){let s=r.charCodeAt(o);if(s!==10&&s!==13){o++;continue}this.linea(this.resto+r.slice(i,o),n),this.resto="",s===13&&(o+1<r.length?r.charCodeAt(o+1)===10&&o++:this.
|
|
425
429
|
crPendiente=true),o++,i=o;}return this.resto+=r.slice(i),n}linea(e,n){if(e===""){this.despachar(n);return}if(e.charCodeAt(0)===58)return;let r=e.indexOf(":"),o,i;switch(r===-1?(o=e,i=""):(o=e.slice(0,r),
|
|
426
430
|
i=e.slice(r+1),i.charCodeAt(0)===32&&(i=i.slice(1))),o){case "data":this.datos+=i+`
|
|
427
431
|
`;break;case "event":this.evento=i;break;case "id":i.includes("\0")||(this.ultimoId=i);break;}}despachar(e){if(this.datos===""){this.evento="";return}e.push({event:this.evento===""?"message":
|
|
428
|
-
this.evento,data:this.datos.slice(0,-1),...this.ultimoId!==void 0?{id:this.ultimoId}:{}}),this.datos="",this.evento="";}};async function*
|
|
432
|
+
this.evento,data:this.datos.slice(0,-1),...this.ultimoId!==void 0?{id:this.ultimoId}:{}}),this.datos="",this.evento="";}};async function*mr(t){let e=new oi;if(typeof t=="string"){yield*e.push(t),yield*e.
|
|
429
433
|
end();return}let n=t.getReader();try{for(;;){let{done:r,value:o}=await n.read();if(r)break;o!==void 0&&(yield*e.push(o));}yield*e.end();}finally{try{await n.cancel();}catch{}}}function Ze(t){if(t==null||typeof t!="object")return true;let e=t,n=e.properties;if(n&&typeof n=="object"){if(e.additionalProperties!==false)return false;let o=Object.keys(n),i=Array.isArray(e.required)?e.required.
|
|
430
434
|
map(String):[];if(o.some(s=>!i.includes(s)))return false;for(let s of Object.values(n))if(!Ze(s))return false}if(e.items!==void 0&&!Ze(e.items))return false;for(let o of ["anyOf","oneOf","allOf"]){let i=e[o];if(Array.
|
|
431
|
-
isArray(i)&&i.some(s=>!Ze(s)))return false}let r=e.$defs??e.definitions;return !(r&&typeof r=="object"&&Object.values(r).some(o=>!Ze(o)))}function
|
|
432
|
-
test(t)?false:/invalid parameter|not supported|unsupported|unrecognized request argument|unknown parameter/i.test(t)}function
|
|
435
|
+
isArray(i)&&i.some(s=>!Ze(s)))return false}let r=e.$defs??e.definitions;return !(r&&typeof r=="object"&&Object.values(r).some(o=>!Ze(o)))}function qp(t){return !/response_format/i.test(t)||/invalid schema/i.
|
|
436
|
+
test(t)?false:/invalid parameter|not supported|unsupported|unrecognized request argument|unknown parameter/i.test(t)}function Vp(t){return `Respond with a single JSON object and nothing else: no prose, no\
|
|
433
437
|
explanation, no markdown code fences. The object must validate against this JSON Schema:
|
|
434
|
-
`+JSON.stringify(t)}var
|
|
435
|
-
null}var
|
|
438
|
+
`+JSON.stringify(t)}var Up=/(^|\.)api\.openai\.com$|\.openai\.azure\.com$/i;function ii(t,e,n){return e??Wp(n)?t.replace(/^[^/]+\//,""):t}function Hp(t){let e=pn(t);return e==="openai"||e==="google"?e:
|
|
439
|
+
null}var sc="x-gemini-service-tier";function ac(t,e){try{let n=t.headers?.get?.(e);return typeof n=="string"&&n.trim()!==""?n.trim():void 0}catch{return}}function si(t,e,n){if(e.explicitCacheWrites!==
|
|
436
440
|
true||!lt(t,n))return null;let r=e.stablePrefixMessages;if(r==null||!Number.isInteger(r)||r<=0||r>e.messages.length)return {puntos:0,indice:-1};let o=e.messages[r-1];return (o.role==="system"||o.role==="u\
|
|
437
|
-
ser"||o.role==="tool")&&typeof o.content=="string"&&o.content!==""?{puntos:1,indice:r-1}:{puntos:0,indice:-1}}function
|
|
438
|
-
this.opts=e,this.id=`openai-compatible:${e.baseUrl}`,this.fetchImpl=e.fetchImpl??fetch,this.origen=
|
|
439
|
-
has(i),r=o=>
|
|
440
|
-
i))},leer:(o,i)=>{let s=r(i.model);return this.leerJson(o,void 0,i,n(i,s),s,false)},solicitar:(o,i)=>this.fetchImpl(`${this.opts.baseUrl.replace(/\/$/,"")}${
|
|
441
|
+
ser"||o.role==="tool")&&typeof o.content=="string"&&o.content!==""?{puntos:1,indice:r-1}:{puntos:0,indice:-1}}function Wp(t){try{return Up.test(new URL(t).hostname)}catch{return false}}var cc=class{id;opts;fetchImpl;sinResponseFormat=new Set;streamOptionsRejected=false;origen;constructor(e){
|
|
442
|
+
this.opts=e,this.id=`openai-compatible:${e.baseUrl}`,this.fetchImpl=e.fetchImpl??fetch,this.origen=Hp(e.baseUrl),Za(this,this.origen),lr(this,ar(e.baseUrl));let n=(o,i)=>o.schema!=null&&!this.sinResponseFormat.
|
|
443
|
+
has(i),r=o=>ii(o,this.opts.stripProviderPrefix,this.opts.baseUrl);dr(this,{protocolo:"openai",origen:this.origen,endpoint:pr(e.baseUrl),cuerpo:o=>{let i=r(o.model);return this.construirCuerpo(i,o,n(o,
|
|
444
|
+
i))},leer:(o,i)=>{let s=r(i.model);return this.leerJson(o,void 0,i,n(i,s),s,false)},solicitar:(o,i)=>this.fetchImpl(`${this.opts.baseUrl.replace(/\/$/,"")}${fr(o)}`,{method:i.method,headers:{...i.json!==
|
|
441
445
|
void 0?{"content-type":"application/json"}:{},...this.opts.apiKey?{authorization:`Bearer ${this.opts.apiKey}`}:{},...this.opts.headers},...i.json!==void 0?{body:JSON.stringify(i.json)}:i.form?{body:i.
|
|
442
|
-
form}:{},...i.signal?{signal:i.signal}:{}})});}async generate(e,n){let r=
|
|
443
|
-
enviar(r,e,i,void 0,o);if(!s.ok&&s.status===400&&i){let a=await
|
|
444
|
-
"${r}" rejects \`response_format\` with a 400: it has no structured outputs. The request is repeated asking for the JSON via prompt (once only: the model is noted and the following requests go
|
|
445
|
-
there). The schema still travels and the layer still validates, but the guarantee comes from the layer, not the provider, and the report says so: \`constraints.backend: "none"\`. To recover the
|
|
446
|
-
guarantee, use a model with structured outputs (gpt-4o or later).`),i=false,s=await this.enviar(r,e,false,void 0,o);}if(!s.ok){let a=await
|
|
447
|
-
s,e,i,r)}async*generateStream(e,n={}){if(e.schema!=null||e.deferrable===true){let
|
|
448
|
-
model,this.opts.stripProviderPrefix,this.opts.baseUrl),o=n.signal,i=!this.streamOptionsRejected,s=await this.enviar(r,e,false,{includeUsage:i,...o?{signal:o}:{}});if(!s.ok&&i&&(s.status===400||s.status===
|
|
449
|
-
422)){let
|
|
450
|
-
endpoint rejects stream_options, so a streamed answer would carry no usage and requireUsage is set. ${
|
|
451
|
-
true,
|
|
452
|
-
|
|
453
|
-
application/json")){let
|
|
454
|
-
u="",l=new Map,d,p,h,m=false;for await(let
|
|
455
|
-
message=="string"?
|
|
456
|
-
"string"&&
|
|
457
|
-
|
|
458
|
-
(d=
|
|
459
|
-
|
|
460
|
-
let
|
|
461
|
-
{},...
|
|
462
|
-
arguments:
|
|
463
|
-
{toolCalls:
|
|
464
|
-
{}})};}async enviar(e,n,r,o,i){let s=this.construirCuerpo(e,n,r,o);return await this.fetchImpl(`${this.opts.baseUrl.replace(/\/$/,"")}/
|
|
465
|
-
|
|
466
|
-
let i=n.messages.map(c=>c.role==="tool"?{role:"tool",content:c.content,tool_call_id:c.toolCallId??c.metadata?.tool_call_id,...c.name?{name:c.
|
|
467
|
-
0?{role:"assistant",content:c.content||null,tool_calls:c.toolCalls.map((u,l)=>({id:u.id??`call_${l}`,type:"function",function:{name:u.name,
|
|
468
|
-
e,n,this.origen);if(s?.puntos===1){let c=i[s.indice];c.content=[{type:"text",text:c.content,prompt_cache_breakpoint:{mode:"explicit"}}];}
|
|
469
|
-
model:e,messages:i};if(n.maxOutputTokens!=null&&(a.max_tokens=n.maxOutputTokens),n.temperature!=null&&(a.temperature=n.temperature),n.
|
|
470
|
-
n.promptCacheKey),n.deferrable===true&&(a.service_tier=
|
|
471
|
-
|
|
472
|
-
is still guided and the layer still validates, but the guarantee comes from the layer, not the provider. To recover it, make
|
|
473
|
-
json_schema:{name:"bvsala_contract",schema:n.schema,strict:c}};}return n.tools&&n.tools.length>0&&(a.tools=n.tools.map(c=>({type:"
|
|
474
|
-
{},parameters:c.parameters??{type:"object",properties:{}}}}))),o&&(a.stream=true,o.includeUsage&&(a.stream_options={include_usage:true})),
|
|
475
|
-
e,n,r,o,this.opts.requireUsage===true)}leerJson(e,n,r,o,i,s){let a=e.choices?.[0]?.message,c=a?.content??"",u=
|
|
476
|
-
arguments??""})).filter(
|
|
477
|
-
|
|
478
|
-
n&&(
|
|
479
|
-
{
|
|
480
|
-
|
|
481
|
-
schema!=null&&o
|
|
482
|
-
|
|
483
|
-
"number"
|
|
484
|
-
|
|
485
|
-
|
|
446
|
+
form}:{},...i.signal?{signal:i.signal}:{}})});}async generate(e,n){let r=ii(e.model,this.opts.stripProviderPrefix,this.opts.baseUrl),o=n?.signal,i=e.schema!=null&&!this.sinResponseFormat.has(r),s=await this.
|
|
447
|
+
enviar(r,e,i,void 0,o);if(!s.ok&&s.status===400&&i){let a=await gr(s);if(!qp(a))throw new Error(`provider ${s.status}: ${a}`);this.sinResponseFormat.add(r),_t(this,`sin-response-format:${r}`,`[bvsala]\
|
|
448
|
+
Model "${r}" rejects \`response_format\` with a 400: it has no structured outputs. The request is repeated asking for the JSON via prompt (once only: the model is noted and the following requests go st\
|
|
449
|
+
raight there). The schema still travels and the layer still validates, but the guarantee comes from the layer, not the provider, and the report says so: \`constraints.backend: "none"\`. To recover the n\
|
|
450
|
+
ative guarantee, use a model with structured outputs (gpt-4o or later).`),i=false,s=await this.enviar(r,e,false,void 0,o);}if(!s.ok){let a=await gr(s);throw new Error(`provider ${s.status}: ${a}`)}return this.
|
|
451
|
+
leer(s,e,i,r)}async*generateStream(e,n={}){if(e.schema!=null||e.deferrable===true){let x=await this.generate(e);x.text!==""&&(yield {type:"text",delta:x.text}),yield {type:"done",response:x};return}let r=ii(
|
|
452
|
+
e.model,this.opts.stripProviderPrefix,this.opts.baseUrl),o=n.signal,i=!this.streamOptionsRejected,s=await this.enviar(r,e,false,{includeUsage:i,...o?{signal:o}:{}});if(!s.ok&&i&&(s.status===400||s.status===
|
|
453
|
+
422)){let x=await gr(s);if(s.status!==422&&!/stream_options|include_usage/i.test(x))throw new Error(`provider ${s.status}: ${x}`);if(this.opts.requireUsage)throw new Error(`provider ${s.status}: this \
|
|
454
|
+
endpoint rejects stream_options, so a streamed answer would carry no usage and requireUsage is set. ${x}`);s=await this.enviar(r,e,false,{includeUsage:false,...o?{signal:o}:{}}),s.ok&&(this.streamOptionsRejected=
|
|
455
|
+
true,_t(this,`sin-stream-options:${this.opts.baseUrl}`,"[bvsala] This endpoint rejects `stream_options`, so streamed answers from it carry no usage: they are reported as `unmeasured` and never billed. U\
|
|
456
|
+
se `generate()` for a measured figure, or an endpoint that reports usage when streaming."));}if(!s.ok)throw new Error(`provider ${s.status}: ${await gr(s)}`);if((s.headers.get("content-type")??"").includes(
|
|
457
|
+
"application/json")){let x=await this.leer(s,e,false,r);x.text!==""&&(yield {type:"text",delta:x.text}),yield {type:"done",response:x};return}let a=s.body,c=a&&typeof a.getReader=="function"?a:await s.text(),
|
|
458
|
+
u="",l=new Map,d,p,h,m=false,g="";for await(let x of mr(c)){if(x.data==="[DONE]")break;let S;try{S=JSON.parse(x.data);}catch{continue}if(S===null||typeof S!="object")continue;if(S.error!=null){let C=S.error,
|
|
459
|
+
I=typeof C.message=="string"?C.message:JSON.stringify(S.error);throw new Error(`provider stream error: ${I}`)}let O=S.choices?.[0],R=O?.delta;(hr(R?.reasoning_content)||hr(R?.reasoning))&&(m=true),typeof R?.
|
|
460
|
+
content=="string"&&R.content!==""&&(u+=R.content,yield {type:"text",delta:R.content}),typeof R?.refusal=="string"&&(g+=R.refusal);for(let C of R?.tool_calls??[]){let I=typeof C.index=="number"?C.index:
|
|
461
|
+
0,D=l.get(I)??{args:""};!D.id&&typeof C.id=="string"&&C.id!==""&&(D.id=C.id);let A=C.function?.name;!D.name&&typeof A=="string"&&A!==""&&(D.name=A),typeof C.function?.arguments=="string"&&(D.args+=C.function.
|
|
462
|
+
arguments),l.set(I,D);}O?.finish_reason!=null&&(d=O.finish_reason),S.usage!=null&&typeof S.usage=="object"&&(p=S.usage),typeof S.service_tier=="string"&&S.service_tier!==""&&(h=S.service_tier);}if(d===void 0)
|
|
463
|
+
throw new Error("provider stream ended before completion (no finish_reason)");let f=typeof p?.prompt_tokens!="number",v=typeof p?.completion_tokens!="number";if(this.opts.requireUsage&&(f||v))throw new Error(
|
|
464
|
+
dc(p?.prompt_tokens,p?.completion_tokens));let b=uc(p,m),y=lc(p),k={inputTokens:p?.prompt_tokens??0,outputTokens:p?.completion_tokens??0,...p?.prompt_tokens_details?.cached_tokens!=null?{cachedInputTokens:p.
|
|
465
|
+
prompt_tokens_details.cached_tokens}:{},...y!==void 0?{cacheWriteInputTokens:y}:{},...b!==void 0?{reasoningTokens:b}:{},...f||v?{complete:false}:{}},T=[...l.entries()].sort((x,S)=>x[0]-S[0]).map(([,x])=>({
|
|
466
|
+
...x.id?{id:x.id}:{},name:x.name??"",arguments:x.args})).filter(x=>x.name!==""),w=h?"cuerpo":void 0;!h&&this.origen==="google"&&(h=ac(s,sc),h&&(w="cabecera"));let P=si(r,e,this.origen);yield {type:"don\
|
|
467
|
+
e",response:It({text:u,...T.length>0?{toolCalls:T}:{},finishReason:d,...g!==""?{refusal:g}:{},...h?{servedServiceTier:h}:{},usage:k,structuredNatively:false,raw:p??null},{...fn(Dt(e.tools)),origen:this.origen,
|
|
468
|
+
...w?{tierLeidoDe:w}:{},...P?{cacheExplicita:{puntos:P.puntos}}:{}})};}async enviar(e,n,r,o,i){let s=this.construirCuerpo(e,n,r,o);return await this.fetchImpl(`${this.opts.baseUrl.replace(/\/$/,"")}/ch\
|
|
469
|
+
at/completions`,{method:"POST",headers:{"content-type":"application/json",...this.opts.apiKey?{authorization:`Bearer ${this.opts.apiKey}`}:{},...this.opts.headers},body:JSON.stringify(s),...o?.signal?
|
|
470
|
+
{signal:o.signal}:!o&&i?{signal:i}:{}})}construirCuerpo(e,n,r,o){let i=n.messages.map(c=>c.role==="tool"?{role:"tool",content:c.content,tool_call_id:c.toolCallId??c.metadata?.tool_call_id,...c.name?{name:c.
|
|
471
|
+
name}:{}}:c.role==="assistant"&&c.toolCalls&&c.toolCalls.length>0?{role:"assistant",content:c.content||null,tool_calls:c.toolCalls.map((u,l)=>({id:u.id??`call_${l}`,type:"function",function:{name:u.name,
|
|
472
|
+
arguments:u.arguments}}))}:{role:c.role,content:c.content}),s=si(e,n,this.origen);if(s?.puntos===1){let c=i[s.indice];c.content=[{type:"text",text:c.content,prompt_cache_breakpoint:{mode:"explicit"}}];}
|
|
473
|
+
n.schema&&!r&&i.push({role:"system",content:Vp(n.schema)});let a={model:e,messages:i};if(n.maxOutputTokens!=null&&(a.max_tokens=n.maxOutputTokens),n.temperature!=null&&(a.temperature=n.temperature),n.
|
|
474
|
+
seed!=null&&(a.seed=n.seed),n.promptCacheKey!=null&&(a.prompt_cache_key=n.promptCacheKey),n.deferrable===true&&(a.service_tier=Rt),s&&(a.prompt_cache_options={mode:"explicit"}),n.schema&&r){let c=Ze(n.schema);
|
|
475
|
+
c||_t(this,"strict-incompatible","[bvsala] The response contract does not meet OpenAI's `strict` mode (in strict, `required` must list ALL the keys in `properties`, and every object needs `additionalP\
|
|
476
|
+
roperties: false`). The schema is sent with `strict: false`: the model is still guided and the layer still validates, but the guarantee comes from the layer, not the provider. To recover it, make ever\
|
|
477
|
+
y key in the contract required."),a.response_format={type:"json_schema",json_schema:{name:"bvsala_contract",schema:n.schema,strict:c}};}return n.tools&&n.tools.length>0&&(a.tools=n.tools.map(c=>({type:"\
|
|
478
|
+
function",function:{name:c.id,...c.description?{description:c.description}:{},parameters:c.parameters??{type:"object",properties:{}}}}))),o&&(a.stream=true,o.includeUsage&&(a.stream_options={include_usage:true})),
|
|
479
|
+
a}async leer(e,n,r,o){let i=await e.json();return this.leerJson(i,e,n,r,o,this.opts.requireUsage===true)}leerJson(e,n,r,o,i,s){let a=e.choices?.[0]?.message,c=a?.content??"",u=typeof a?.refusal=="string"&&
|
|
480
|
+
a.refusal!==""?a.refusal:void 0,l=(a?.tool_calls??[]).map(w=>({...w.id?{id:w.id}:{},name:w.function?.name??"",arguments:w.function?.arguments??""})).filter(w=>w.name!==""),d=e.usage??{},p=d.prompt_tokens??
|
|
481
|
+
0,h=d.completion_tokens??0,m=typeof d.prompt_tokens!="number",g=typeof d.completion_tokens!="number";if(s&&(m||g))throw new Error(dc(d.prompt_tokens,d.completion_tokens));let f=e.choices?.[0]?.finish_reason,
|
|
482
|
+
v=typeof e.service_tier=="string"&&e.service_tier!==""?e.service_tier:void 0,b=v?"cuerpo":void 0;!v&&this.origen==="google"&&n&&(v=ac(n,sc),v&&(b="cabecera"));let y=lc(d),k=si(i,r,this.origen),T=uc(d,
|
|
483
|
+
hr(a?.reasoning_content)||hr(a?.reasoning));return It({text:c,...l.length>0?{toolCalls:l}:{},...f?{finishReason:f}:{},...u!==void 0?{refusal:u}:{},...v?{servedServiceTier:v}:{},...r.deferrable===true?{requestedServiceTier:Rt}:
|
|
484
|
+
{},usage:{inputTokens:p,outputTokens:h,...d.prompt_tokens_details?.cached_tokens!=null?{cachedInputTokens:d.prompt_tokens_details.cached_tokens}:{},...y!==void 0?{cacheWriteInputTokens:y}:{},...T!==void 0?
|
|
485
|
+
{reasoningTokens:T}:{},...m||g?{complete:false}:{}},structuredNatively:r.schema!=null&&o,raw:e},{esquemaEnFormatoNativo:r.schema!=null&&o,esquemaEstricto:r.schema!=null&&o&&Ze(r.schema),esquemaPorPrompt:r.
|
|
486
|
+
schema!=null&&!o,piezasDelAdaptador:Dt(r.tools),origen:this.origen,...b?{tierLeidoDe:b}:{},...k?{cacheExplicita:{puntos:k.puntos}}:{}})}};function uc(t,e){let n=t?.completion_tokens_details?.reasoning_tokens;
|
|
487
|
+
if(!(typeof n!="number"||!Number.isInteger(n)||n<0)&&!(n===0&&e))return n}function lc(t){let e=t?.prompt_tokens_details?.cache_write_tokens;return typeof e=="number"&&Number.isInteger(e)&&e>=0?e:void 0}
|
|
488
|
+
function hr(t){return typeof t=="string"&&t!==""}function dc(t,e){return `provider returned incomplete usage (prompt=${t??"absent"}, completion=${e??"absent"}); cannot measure cost. For gateways/stream\
|
|
489
|
+
ing, ensure usage reporting is enabled.`}async function gr(t){try{return (await t.text()).slice(0,500)}catch{return "<no body>"}}function pc(t){return `Respond with a single JSON object and nothing else: no prose, no explanation, no markdown code fences. The object must validate against this JSON Schema:
|
|
490
|
+
`+JSON.stringify(t)}function fc(t){let e=[];for(let n of t){if(n.type!=="server_tool_use")continue;let r=n.id,o=n.name;if(typeof r!="string"||typeof o!="string"||!o.startsWith("tool_search_tool"))continue;let i=t.find(u=>u.
|
|
486
491
|
type==="tool_search_tool_result"&&u.tool_use_id===r),s=i?.content;if(!i||!s||s.type!=="tool_search_tool_search_result"||!Array.isArray(s.tool_references)||s.tool_references.length===0)continue;let a=[],
|
|
487
|
-
c=true;for(let u of s.tool_references){if(typeof u?.tool_name!="string"){c=false;break}a.includes(u.tool_name)||a.push(u.tool_name);}c&&e.push({busqueda:o,id:r,uso:n,resultado:i,herramientas:a});}return e}var
|
|
488
|
-
bytes:4*1024*1024,porEntrada:64*1024,claves:4096},
|
|
492
|
+
c=true;for(let u of s.tool_references){if(typeof u?.tool_name!="string"){c=false;break}a.includes(u.tool_name)||a.push(u.tool_name);}c&&e.push({busqueda:o,id:r,uso:n,resultado:i,herramientas:a});}return e}var Jp={
|
|
493
|
+
bytes:4*1024*1024,porEntrada:64*1024,claves:4096},br=class{constructor(e=Jp){this.topes=e;}topes;entradas=new Map;bytes=0;recordar(e,n){if(e.length===0||n.length===0)return;let r=JSON.parse(JSON.stringify(
|
|
489
494
|
n)),o=JSON.stringify(r).length;if(o>this.topes.porEntrada)return;let i={pares:r,bytes:o};for(let s of new Set(e))this.quitar(s),this.entradas.set(s,i),this.bytes+=o;for(;this.entradas.size>0&&(this.bytes>
|
|
490
495
|
this.topes.bytes||this.entradas.size>this.topes.claves);){let s=this.entradas.keys().next().value;this.quitar(s);}}para(e){let n;for(let r of e){let o=this.entradas.get(r);o&&(this.entradas.delete(r),this.
|
|
491
|
-
entradas.set(r,o),n??=o);}return n?JSON.parse(JSON.stringify(n.pares)):void 0}get tamano(){return this.entradas.size}quitar(e){let n=this.entradas.get(e);n&&(this.entradas.delete(e),this.bytes-=n.bytes);}};var
|
|
492
|
-
if(n===null||typeof n!="object")continue;let r=n;if(r.type!=="compaction")continue;e.iteraciones++,e.input+=
|
|
493
|
-
let o=r.cache_creation,i=
|
|
494
|
-
Math.min(s,a);}return e.iteraciones>0?e:null}function
|
|
496
|
+
entradas.set(r,o),n??=o);}return n?JSON.parse(JSON.stringify(n.pares)):void 0}get tamano(){return this.entradas.size}quitar(e){let n=this.entradas.get(e);n&&(this.entradas.delete(e),this.bytes-=n.bytes);}};var At=t=>typeof t=="number"&&Number.isFinite(t)&&t>0?t:0;function mc(t){if(!Array.isArray(t))return null;let e={input:0,output:0,cacheRead:0,cacheWrite:0,cacheWrite1h:0,iteraciones:0};for(let n of t){
|
|
497
|
+
if(n===null||typeof n!="object")continue;let r=n;if(r.type!=="compaction")continue;e.iteraciones++,e.input+=At(r.input_tokens),e.output+=At(r.output_tokens),e.cacheRead+=At(r.cache_read_input_tokens);
|
|
498
|
+
let o=r.cache_creation,i=At(o?.ephemeral_5m_input_tokens),s=At(o?.ephemeral_1h_input_tokens),a=typeof r.cache_creation_input_tokens=="number"?At(r.cache_creation_input_tokens):i+s;e.cacheWrite+=a,e.cacheWrite1h+=
|
|
499
|
+
Math.min(s,a);}return e.iteraciones>0?e:null}function ai(t,e,n){let r=t??{},o=mc(r.iterations),i=hc(r.cache_read_input_tokens,o?.cacheRead),s=hc(r.cache_creation_input_tokens,o?.cacheWrite),a=r.cache_creation?.ephemeral_1h_input_tokens,c=typeof a==
|
|
495
500
|
"number"||(o?.cacheWrite1h??0)>0?Math.min(Math.max(0,(typeof a=="number"?a:0)+(o?.cacheWrite1h??0)),s??0):void 0,u=(r.input_tokens??0)+(o?.input??0)+(s??0)+(i??0),l=(e??0)+(o?.output??0),d=typeof r.input_tokens!=
|
|
496
501
|
"number",p=typeof e!="number";return {usage:{inputTokens:u,outputTokens:l,...i!=null?{cachedInputTokens:i}:{},...s!=null?{cacheWriteInputTokens:s}:{},...c!==void 0?{cacheWrite1hInputTokens:c}:{},...n||
|
|
497
|
-
p||o?{}:{reasoningTokens:0},...d||p?{complete:false}:{}},entradaAusente:d,salidaAusente:p}}function
|
|
498
|
-
function
|
|
499
|
-
{},...n,...r?{cache_creation:r}:{}}}function
|
|
500
|
-
tool_calls";case "refusal":return "content_filter";default:return t}}var
|
|
502
|
+
p||o?{}:{reasoningTokens:0},...d||p?{complete:false}:{}},entradaAusente:d,salidaAusente:p}}function hc(t,e){return e?(t??0)+e:t}function ci(t){let e=t?.service_tier;return typeof e=="string"&&e!==""?e:void 0}
|
|
503
|
+
function ui(t,e){let n=Object.fromEntries(Object.entries(e??{}).filter(([,o])=>o!=null)),r=t?.cache_creation||e?.cache_creation?{...t?.cache_creation??{},...e?.cache_creation??{}}:void 0;return {...t??
|
|
504
|
+
{},...n,...r?{cache_creation:r}:{}}}function li(t){return t==="thinking"||t==="redacted_thinking"}function di(t){switch(t){case "end_turn":return "stop";case "max_tokens":return "length";case "tool_use":return "\
|
|
505
|
+
tool_calls";case "refusal":return "content_filter";default:return t}}var vr=4,Ye="bvsala_contract",Kp={"sin-ids":'[bvsala] A tool conversation reached the Anthropic adapter without its call ids. To send it the way the Messages API expects (`tool_use` blocks in the assi\
|
|
501
506
|
stant turn, `tool_result` blocks in the next user turn), each entry of the assistant turn\'s `toolCalls` needs its `id`, and each `role: "tool"` message the `toolCallId` of the call it answers: the sam\
|
|
502
507
|
e ids that came back in `result.toolCalls`. Without them the exchange is sent as plain text, as in earlier versions: the model reads the results but not its own calls.',"sin-pareja":'[bvsala] A tool e\
|
|
503
508
|
xchange sent to the Anthropic adapter does not pair up. The Messages API wants one result for every call, right after the assistant turn that made them, and each call\'s `arguments` must be a JSON obje\
|
|
@@ -505,102 +510,102 @@ ct. This exchange has a call without its result, a result for a call that turn d
|
|
|
505
510
|
. Answer every call of a turn with one `role: "tool"` message carrying its `toolCallId`, before the next user or assistant message.',"no-disponibles":"[bvsala] A tool exchange names a tool this reques\
|
|
506
511
|
t does not make available to the model: it is missing from `tools` (not passed, or left out by the layer's tool selection), or it is deferred behind tool search and this adapter no longer holds the se\
|
|
507
512
|
arch that loaded it. The Messages API does not document a `tool_use` block for such a tool as valid, so that exchange is sent as plain text, as in earlier versions. Pass the tool in `tools` on every t\
|
|
508
|
-
urn of the conversation to keep the native tool loop."},
|
|
509
|
-
fetchImpl=e.fetchImpl??fetch,
|
|
510
|
-
anthropic",origen:
|
|
513
|
+
urn of the conversation to keep the native tool loop."},gc=class{id;opts;fetchImpl;busquedas=new br;constructor(e={}){this.opts=e,this.id=`anthropic:${e.baseUrl??"https://api.anthropic.com/v1"}`,this.
|
|
514
|
+
fetchImpl=e.fetchImpl??fetch,tc(this,yr(e.baseUrl)?"oficial":"compatible"),lr(this,ar(e.baseUrl??"https://api.anthropic.com/v1"));let n=this.opts.baseUrl??"https://api.anthropic.com/v1";dr(this,{protocolo:"\
|
|
515
|
+
anthropic",origen:tf(n),endpoint:pr(n),cuerpo:r=>this.construirCuerpo(r).body,leer:(r,o)=>this.leerMensaje(r,o,false,false,false,false),solicitar:(r,o)=>{let i=`${n.replace(/\/$/,"")}${fr(r)}`;return this.fetchImpl(
|
|
511
516
|
i,{method:o.method,headers:{...o.json!==void 0?{"content-type":"application/json"}:{},"anthropic-version":this.opts.apiVersion??"2023-06-01",...this.opts.apiKey?{"x-api-key":this.opts.apiKey}:{},...this.
|
|
512
|
-
opts.headers},...o.json!==void 0?{body:JSON.stringify(o.json)}:{},...o.signal?{signal:o.signal}:{}})}});}modeloEnElCable(e){return this.opts.stripProviderPrefix??
|
|
513
|
-
""):e}async generate(e,n){let r=this.construirCuerpo(e),o=await this.enviar(r.body,n?.signal);if(!o.ok)throw new Error(`provider ${o.status}: ${await
|
|
517
|
+
opts.headers},...o.json!==void 0?{body:JSON.stringify(o.json)}:{},...o.signal?{signal:o.signal}:{}})}});}modeloEnElCable(e){return this.opts.stripProviderPrefix??yr(this.opts.baseUrl)?e.replace(/^[^/]+\//,
|
|
518
|
+
""):e}async generate(e,n){let r=this.construirCuerpo(e),o=await this.enviar(r.body,n?.signal);if(!o.ok)throw new Error(`provider ${o.status}: ${await kc(o)}`);return this.leer(o,e,r.contratoNativo,r.turnoAnadido,
|
|
514
519
|
r.esquemaPorPrompt,r.reenviadas)}async*generateStream(e,n={}){if(e.schema!=null||e.deferrable===true){let x=await this.generate(e);x.text!==""&&(yield {type:"text",delta:x.text}),yield {type:"done",response:x};
|
|
515
|
-
return}let r=this.construirCuerpo(e),o=r.body;o.stream=true;let i=await this.enviar(o,n.signal);if(!i.ok)throw new Error(`provider ${i.status}: ${await
|
|
520
|
+
return}let r=this.construirCuerpo(e),o=r.body;o.stream=true;let i=await this.enviar(o,n.signal);if(!i.ok)throw new Error(`provider ${i.status}: ${await kc(i)}`);if((i.headers.get("content-type")??"").includes(
|
|
516
521
|
"application/json")){let x=await this.leer(i,e,r.contratoNativo,r.turnoAnadido,r.esquemaPorPrompt,r.reenviadas);x.text!==""&&(yield {type:"text",delta:x.text}),yield {type:"done",response:x};return}let s=i.
|
|
517
|
-
body,a=s&&typeof s.getReader=="function"?s:await i.text(),c="",u=new Map,l,d,p=false,h=false,m,g=false,f,v;for await(let x of
|
|
518
|
-
continue;let
|
|
519
|
-
"content_block_start"){let R=
|
|
520
|
-
{},json:"",...R.content!==void 0?{content:R.content}:{},...e.toolSearch&&(R.type==="server_tool_use"||R.type==="tool_search_tool_result")?{crudo:R}:{}});}else if(
|
|
521
|
-
if(R?.type==="text_delta"&&typeof R.text=="string"&&R.text!=="")c+=R.text,yield {type:"text",delta:R.text};else if(R?.type==="input_json_delta"&&typeof R.partial_json=="string"){let
|
|
522
|
-
number"?u.get(
|
|
523
|
-
or")throw new Error(`provider stream error: ${
|
|
524
|
-
g):void 0)?.usage??{inputTokens:0,outputTokens:0,complete:false};if(this.opts.requireUsage&&k.complete===false)throw new Error(
|
|
525
|
-
(x,
|
|
526
|
-
entries()].sort((x,
|
|
527
|
-
"tool_use")x.push({type:"tool_use",id:
|
|
528
|
-
{}:
|
|
529
|
-
{},...
|
|
522
|
+
body,a=s&&typeof s.getReader=="function"?s:await i.text(),c="",u=new Map,l,d,p=false,h=false,m,g=false,f,v;for await(let x of mr(a)){let S;try{S=JSON.parse(x.data);}catch{continue}if(S===null||typeof S!="object")
|
|
523
|
+
continue;let O=x.event!=="message"?x.event:S.type??x.event;if(O==="message_start")l=S.message?.usage??l,typeof S.message?.id=="string"&&S.message.id!==""&&(f=S.message.id),v=S.message?.diagnostics;else if(O===
|
|
524
|
+
"content_block_start"){let R=S.content_block;li(R?.type)&&(g=true),typeof S.index=="number"&&R&&u.set(S.index,{tipo:R.type??"",...typeof R.id=="string"?{id:R.id}:{},...typeof R.name=="string"?{name:R.name}:
|
|
525
|
+
{},json:"",...R.content!==void 0?{content:R.content}:{},...e.toolSearch&&(R.type==="server_tool_use"||R.type==="tool_search_tool_result")?{crudo:R}:{}});}else if(O==="content_block_delta"){let R=S.delta;
|
|
526
|
+
if(R?.type==="text_delta"&&typeof R.text=="string"&&R.text!=="")c+=R.text,yield {type:"text",delta:R.text};else if(R?.type==="input_json_delta"&&typeof R.partial_json=="string"){let C=typeof S.index=="\
|
|
527
|
+
number"?u.get(S.index):void 0;C&&(C.json+=R.partial_json);}}else if(O==="message_delta")p=true,m=S.delta?.stop_reason??m,S.usage&&(d=ui(d,S.usage));else if(O==="message_stop"){h=true;break}else if(O==="err\
|
|
528
|
+
or")throw new Error(`provider stream error: ${S.error?.type}: ${S.error?.message}`)}if(!h&&!p)throw new Error("provider stream ended before completion (no message_delta)");let b=ui(l,d),k=(p?ai(b,d?.output_tokens,
|
|
529
|
+
g):void 0)?.usage??{inputTokens:0,outputTokens:0,complete:false};if(this.opts.requireUsage&&k.complete===false)throw new Error(yc(p?b.input_tokens:void 0,p?d?.output_tokens:void 0));let T=[...u.entries()].sort(
|
|
530
|
+
(x,S)=>x[0]-S[0]).map(([,x])=>x).filter(x=>x.tipo==="tool_use"&&x.name!==Ye).map(x=>({...x.id?{id:x.id}:{},name:x.name??"",arguments:ef(x.json)})).filter(x=>x.name!==""),w=ci(b),P=e.toolSearch?vc([...u.
|
|
531
|
+
entries()].sort((x,S)=>x[0]-S[0]).map(([,x])=>({type:x.tipo,name:x.name,content:x.content})),r.reenviadas):void 0;if(e.toolSearch){let x=[];for(let[,S]of [...u.entries()].sort((O,R)=>O[0]-R[0]))if(S.tipo===
|
|
532
|
+
"tool_use")x.push({type:"tool_use",id:S.id,name:S.name});else if(S.tipo==="tool_search_tool_result"&&S.crudo)x.push(S.crudo);else if(S.tipo==="server_tool_use"&&S.crudo){let O=S.json===""?S.crudo.input??
|
|
533
|
+
{}:Xp(S.json);O!==void 0&&x.push({...S.crudo,input:O});}this.recordarBusquedas(x);}yield {type:"done",response:It({text:c,...T.length>0?{toolCalls:T}:{},...m?{finishReason:di(m)}:{},...w?{servedServiceTier:w}:
|
|
534
|
+
{},...P?{toolSearch:P}:{},...f?{providerMessageId:f}:{},...this.diagnosticoDe(e,v),usage:k,structuredNatively:false,raw:{usage:b,stop_reason:m}},fn((r.turnoAnadido?1:0)+Dt(e.tools)))};}async enviar(e,n){let r=(this.
|
|
530
535
|
opts.baseUrl??"https://api.anthropic.com/v1").replace(/\/$/,"");return await this.fetchImpl(`${r}/messages`,{method:"POST",headers:{"content-type":"application/json","anthropic-version":this.opts.apiVersion??
|
|
531
536
|
"2023-06-01",...this.opts.apiKey?{"x-api-key":this.opts.apiKey}:{},...this.opts.headers},body:JSON.stringify(e),...n?{signal:n}:{}})}construirCuerpo(e){let n=this.reenvioDeBusquedas(e),{system:r,messages:o,
|
|
532
|
-
finDelPrefijo:i,prefijoEnSystem:s,turnoAnadido:a}=
|
|
537
|
+
finDelPrefijo:i,prefijoEnSystem:s,turnoAnadido:a}=Gp(e,n?.anteponer,m=>this.avisar(`anthropic-herramientas-${m}`,Kp[m]));if(o.length===0)throw new Error("anthropic: the request has no user/assistant m\
|
|
533
538
|
essage. The Messages API needs at least one, and system prompts travel in the `system` field \u2014 they do not count.");let c=(e.tools??[]).map(m=>({name:m.id,...m.description?{description:m.description}:
|
|
534
|
-
{},input_schema:m.parameters??{type:"object",properties:{}}}));if(e.toolSearch&&c.length>0){let m=new Set(e.toolSearch.alwaysLoaded);for(let g of c)m.has(g.name)||(g.defer_loading=true);c.unshift({...
|
|
535
|
-
toolSearch.variant]});}let u=false,l=false,d=false;if(e.schema){let m=c.length>0,g=c.some(v=>v.name===Ye),f=Ze(e.schema);g?(r.push({type:"text",text:
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
need data; call this one instead of writing the answer as text.":"Return the final answer in the required shape.",input_schema:e.schema,...u?{strict:true}:{}}),m&&(d=this.opts.forceAnswerThroughTool!==
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
SOME tool \u2014 yours or the contract \u2014 and can no longer reply in prose. Your tool turn is untouched. The guarantee is still the layer\'s, not the provider\'s (`constraints.backend: "none"`)
|
|
544
|
-
model may pick one of your tools and defer the final answer to the next turn.':", not forced (`forceAnswerThroughTool: false`). The guarantee is the layer's, not the provider's (`
|
|
545
|
-
\"none\"`), and if the model answers in prose the layer pays a second full call to repair it \u2014 on this API that second call re-pays the whole tool-use overhead.")+" Dropping either
|
|
546
|
-
he contract from this request is what makes the guarantee free.")));}let p={model:this.modeloEnElCable(e.model),max_tokens:e.maxOutputTokens??this.opts.defaultMaxOutputTokens??4096,messages:o};
|
|
547
|
-
0&&(p.system=r),e.temperature!=null&&(p.temperature=e.temperature),c.length>0&&(p.tools=c),u?p.tool_choice={type:"tool",name:Ye}:d&&(p.tool_choice={type:"any"}),e.deferrable===true&&
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
previousMessageId}),this.opts.automaticCache===true&&e.cachePlacement==null&&e.stablePrefixMessages!=null&&h<Math.min(this.opts.maxCacheBreakpoints??
|
|
552
|
-
contratoNativo:u,turnoAnadido:a,esquemaPorPrompt:l,reenviadas:n}}reenvioDeBusquedas(e){if(!e.toolSearch||!e.tools||e.tools.length===0)return;let n=new Set(e.tools.map(a=>a.id)),r=
|
|
553
|
-
name,o=new Set,i=this.busquedas,s={resultados:0,herramientas:[],anteponer(a){let c=(a.toolCalls??[]).map(d=>d.id).filter(d=>typeof d=="string"&&d!=="");if(c.length===0)return;let u=i.
|
|
554
|
-
let l=[];for(let d of u)if(!(d.busqueda!==r||o.has(d.id))&&d.herramientas.every(p=>n.has(p))){o.add(d.id),l.push(d.uso,d.resultado),s.resultados+=1;for(let p of d.herramientas)s.herramientas.
|
|
555
|
-
p)||s.herramientas.push(p);}return l.length>0?l:void 0}};return s}recordarBusquedas(e){let n=e.filter(r=>r.type==="tool_use"&&r.name!==Ye).map(r=>r.id).filter(r=>typeof r=="string"&&r!=="");n.
|
|
556
|
-
0&&this.busquedas.recordar(n,
|
|
557
|
-
|
|
539
|
+
{},input_schema:m.parameters??{type:"object",properties:{}}}));if(e.toolSearch&&c.length>0){let m=new Set(e.toolSearch.alwaysLoaded);for(let g of c)m.has(g.name)||(g.defer_loading=true);c.unshift({...Gn[e.
|
|
540
|
+
toolSearch.variant]});}let u=false,l=false,d=false;if(e.schema){let m=c.length>0,g=c.some(v=>v.name===Ye),f=Ze(e.schema);g?(r.push({type:"text",text:pc(e.schema)}),l=true,this.avisar("anthropic-contrato-nombre-oc\
|
|
541
|
+
upado",`[bvsala] One of your tools is already named \`${Ye}\`, so the output contract cannot travel as a tool without colliding with it (duplicate tool names are a provider error). The schema is sent a\
|
|
542
|
+
s prompt text instead, which is measurably more expensive on this API. Rename that tool to get the cheaper path.`)):(!f&&!m&&this.avisar("anthropic-strict-incompatible","[bvsala] The response contract\
|
|
543
|
+
does not meet `strict` mode (in strict, `required` must list ALL the keys in `properties`, and every object needs `additionalProperties: false`). The schema is sent without `strict`: the model is sti\
|
|
544
|
+
ll guided and the layer still validates, but the guarantee comes from the layer, not the provider."),u=f&&!m,c.push({name:Ye,description:m?"Return the final answer in the required shape. Use the other\
|
|
545
|
+
tools first if you need data; call this one instead of writing the answer as text.":"Return the final answer in the required shape.",input_schema:e.schema,...u?{strict:true}:{}}),m&&(d=this.opts.forceAnswerThroughTool!==
|
|
546
|
+
false,this.avisar("anthropic-contrato-con-herramientas","[bvsala] This request carries BOTH your tools and an output contract. On Anthropic's Messages API a specific shape is only GUARANTEED by forcing t\
|
|
547
|
+
hat exact tool, and forcing ours would leave the model unable to call yours. The contract travels as one extra tool"+(d?' and the request is sent with `tool_choice: {type: "any"}`, so the model must a\
|
|
548
|
+
nswer through SOME tool \u2014 yours or the contract \u2014 and can no longer reply in prose. Your tool turn is untouched. The guarantee is still the layer\'s, not the provider\'s (`constraints.backend: "none"`),\
|
|
549
|
+
because the model may pick one of your tools and defer the final answer to the next turn.':", not forced (`forceAnswerThroughTool: false`). The guarantee is the layer's, not the provider's (`constrai\
|
|
550
|
+
nts.backend: \"none\"`), and if the model answers in prose the layer pays a second full call to repair it \u2014 on this API that second call re-pays the whole tool-use overhead.")+" Dropping either t\
|
|
551
|
+
he tools or the contract from this request is what makes the guarantee free.")));}let p={model:this.modeloEnElCable(e.model),max_tokens:e.maxOutputTokens??this.opts.defaultMaxOutputTokens??4096,messages:o};
|
|
552
|
+
r.length>0&&(p.system=r),e.temperature!=null&&(p.temperature=e.temperature),c.length>0&&(p.tools=c),u?p.tool_choice={type:"tool",name:Ye}:d&&(p.tool_choice={type:"any"}),e.deferrable===true&&this.avisar(
|
|
553
|
+
"anthropic-sin-tier-diferible","[bvsala] This request was declared deferrable, but the Anthropic Messages API has NO cheaper synchronous tier: its `service_tier` chooses between priority capacity (mor\
|
|
554
|
+
e expensive) and standard, not a flex. The request goes out unchanged and the report credits no discount. The 50% for deferring exists in the Message Batches API, which is asynchronous and does not fi\
|
|
555
|
+
t a request/response call: send such requests with layer.batches.submit() instead.");let h=this.marcarCache(e,r,o,i,s);return e.cacheDiagnostics&&yr(this.opts.baseUrl)&&(p.diagnostics={previous_message_id:e.
|
|
556
|
+
cacheDiagnostics.previousMessageId}),this.opts.automaticCache===true&&e.cachePlacement==null&&e.stablePrefixMessages!=null&&h<Math.min(this.opts.maxCacheBreakpoints??vr,vr)&&(p.cache_control={type:"ephe\
|
|
557
|
+
meral"}),{body:p,contratoNativo:u,turnoAnadido:a,esquemaPorPrompt:l,reenviadas:n}}reenvioDeBusquedas(e){if(!e.toolSearch||!e.tools||e.tools.length===0)return;let n=new Set(e.tools.map(a=>a.id)),r=Gn[e.
|
|
558
|
+
toolSearch.variant].name,o=new Set,i=this.busquedas,s={resultados:0,herramientas:[],anteponer(a){let c=(a.toolCalls??[]).map(d=>d.id).filter(d=>typeof d=="string"&&d!=="");if(c.length===0)return;let u=i.
|
|
559
|
+
para(c);if(!u)return;let l=[];for(let d of u)if(!(d.busqueda!==r||o.has(d.id))&&d.herramientas.every(p=>n.has(p))){o.add(d.id),l.push(d.uso,d.resultado),s.resultados+=1;for(let p of d.herramientas)s.herramientas.
|
|
560
|
+
includes(p)||s.herramientas.push(p);}return l.length>0?l:void 0}};return s}recordarBusquedas(e){let n=e.filter(r=>r.type==="tool_use"&&r.name!==Ye).map(r=>r.id).filter(r=>typeof r=="string"&&r!=="");n.
|
|
561
|
+
length!==0&&this.busquedas.recordar(n,fc(e));}avisar(e,n){_t(this,e,n);}marcarCache(e,n,r,o,i){if(e.promptCacheKey!=null,e.stablePrefixMessages==null)return 0;let s=Math.min(this.opts.maxCacheBreakpoints??
|
|
562
|
+
vr,vr);if(s<=0)return 0;let a=s,c=()=>e.cachePlacement?.ttl==="1h"?{type:"ephemeral",ttl:"1h"}:{type:"ephemeral"},u=i>0?n[i-1]:void 0;u&&(u.cache_control=c(),s-=1);let l=r[r.length-1],d=l?.content[l.content.
|
|
558
563
|
length-1];if(e.cachePlacement?.tail===true&&s>0&&d&&(d.cache_control=c(),s-=1),s>0&&o){let p=r[o.mensaje]?.content[o.bloque];p&&p.cache_control==null&&(p.cache_control=c(),s-=1);}return a-s}async leer(e,n,r,o,i,s){
|
|
559
|
-
let a=await e.json();return this.leerMensaje(a,n,r,o,i,this.opts.requireUsage===true,s)}diagnosticoDe(e,n){if(e.cacheDiagnostics?.previousMessageId==null||!
|
|
564
|
+
let a=await e.json();return this.leerMensaje(a,n,r,o,i,this.opts.requireUsage===true,s)}diagnosticoDe(e,n){if(e.cacheDiagnostics?.previousMessageId==null||!yr(this.opts.baseUrl))return {};if(n===void 0)return {};
|
|
560
565
|
if(n===null)return {cacheDiagnostics:{missReason:"none"}};if(typeof n!="object")return {};let r=n.cache_miss_reason;if(r===null)return {cacheDiagnostics:{missReason:"pending"}};if(r===void 0||typeof r!="\
|
|
561
566
|
object")return {};let o=r.type,i=r.cache_missed_input_tokens;return typeof o!="string"||o===""?{}:{cacheDiagnostics:{missReason:o,...typeof i=="number"&&Number.isFinite(i)&&i>=0?{missedInputTokens:i}:{}}}}leerMensaje(e,n,r,o,i,s,a){
|
|
562
|
-
let c=e.content??[],u=c.some(k=>
|
|
563
|
-
stringify(k.input??{})})).filter(k=>k.name!==""),p=c.find(k=>k.type==="tool_use"&&k.name===Ye),h=p?JSON.stringify(p.input??{}):l,m=e.usage,{usage:g,entradaAusente:f,salidaAusente:v}=
|
|
564
|
-
u);if(s&&(f||v))throw new Error(
|
|
565
|
-
...e.stop_reason?{finishReason:
|
|
566
|
-
id}:{},...this.diagnosticoDe(n,e.diagnostics),raw:e},{...
|
|
567
|
+
let c=e.content??[],u=c.some(k=>li(k.type)),l=c.filter(k=>k.type==="text").map(k=>k.text??"").join(""),d=c.filter(k=>k.type==="tool_use"&&k.name!==Ye).map(k=>({...k.id?{id:k.id}:{},name:k.name??"",arguments:JSON.
|
|
568
|
+
stringify(k.input??{})})).filter(k=>k.name!==""),p=c.find(k=>k.type==="tool_use"&&k.name===Ye),h=p?JSON.stringify(p.input??{}):l,m=e.usage,{usage:g,entradaAusente:f,salidaAusente:v}=ai(m,m?.output_tokens,
|
|
569
|
+
u);if(s&&(f||v))throw new Error(yc(m?.input_tokens,m?.output_tokens));let b=ci(m),y=n.toolSearch?vc(c,a):void 0;return n.toolSearch&&this.recordarBusquedas(c),It({text:h,...d.length>0?{toolCalls:d}:{},
|
|
570
|
+
...e.stop_reason?{finishReason:di(e.stop_reason)}:{},...b?{servedServiceTier:b}:{},usage:g,structuredNatively:n.schema!=null&&r,...y?{toolSearch:y}:{},...typeof e.id=="string"&&e.id!==""?{providerMessageId:e.
|
|
571
|
+
id}:{},...this.diagnosticoDe(n,e.diagnostics),raw:e},{...fn((o?1:0)+Dt(n.tools)),esquemaPorPrompt:i})}};function Gp(t,e,n){let r=[],o=[],i=t.stablePrefixMessages??0,s,a=0,c=true,u=Qp(t),l=new Set,d=t.messages,
|
|
567
572
|
p=g=>{if(g>=i)return;let f=o.length-1;s={mensaje:f,bloque:o[f].content.length-1};},h=(g,f)=>{g.content!==""&&(o.push({role:g.role==="assistant"?"assistant":"user",content:[{type:"text",text:g.content}]}),
|
|
568
573
|
p(f));};for(let g=0;g<d.length;g++){let f=d[g];if(f.role==="system"&&c){r.push({type:"text",text:f.content}),g<i&&(a=r.length);continue}if(c=false,f.role!=="assistant"){f.role==="tool"&&n(f.toolCallId?"si\
|
|
569
574
|
n-pareja":"sin-ids"),h(f,g);continue}let v=e?e(f):void 0;v&&u.cargar(v);let b=f.content!==""?[{type:"text",text:f.content}]:[],y=f.toolCalls??[],k=g+1;if(y.length>0){for(;k<d.length&&d[k].role==="tool";)
|
|
570
|
-
k+=1;let w=
|
|
571
|
-
push(x),p(g+1+
|
|
575
|
+
k+=1;let w=Zp(y,d.slice(g+1,k),u,l);if("llamadas"in w){o.push({role:"assistant",content:[...v??[],...b,...w.llamadas]}),p(g);let P={role:"user",content:[]};o.push(P),w.resultados.forEach((x,S)=>{P.content.
|
|
576
|
+
push(x),p(g+1+S);}),g=k-1;continue}n(w.motivo);}let T=v?[...v,...b]:b;T.length>0&&(o.push({role:"assistant",content:T}),p(g));for(let w=g+1;w<k;w++)h(d[w],w);g=k-1;}let m=false;return o.length>0&&o[0].role===
|
|
572
577
|
"assistant"&&(o.unshift({role:"user",content:[{type:"text",text:"(continue)"}]}),s&&(s={mensaje:s.mensaje+1,bloque:s.bloque}),m=true),{system:r,messages:o,finDelPrefijo:s,prefijoEnSystem:a,turnoAnadido:m}}
|
|
573
|
-
function
|
|
574
|
-
let s=e.map(c=>
|
|
578
|
+
function Zp(t,e,n,r){if(t.some(c=>!c.id)||e.some(c=>!c.toolCallId))return {motivo:"sin-ids"};let o=t.map(c=>bc(c.id)),i=new Set(o);if(i.size!==o.length||o.some(c=>r.has(c)))return {motivo:"sin-pareja"};
|
|
579
|
+
let s=e.map(c=>bc(c.toolCallId));if(s.length!==o.length||new Set(s).size!==s.length||s.some(c=>!i.has(c)))return {motivo:"sin-pareja"};let a=t.map(c=>Yp(c.arguments));if(a.some(c=>c===void 0))return {motivo:"\
|
|
575
580
|
sin-pareja"};if(t.some(c=>!n.tiene(c.name)))return {motivo:"no-disponibles"};for(let c of o)r.add(c);return {llamadas:t.map((c,u)=>({type:"tool_use",id:o[u],name:c.name,input:a[u]})),resultados:e.map((c,u)=>({
|
|
576
|
-
type:"tool_result",tool_use_id:s[u],...c.content!==""?{content:c.content}:{},...c.isError===true?{is_error:true}:{}}))}}function
|
|
577
|
-
"object"&&n!==null&&!Array.isArray(n);if(e(t))return t;if(typeof t=="string"){if(t.trim()==="")return {};try{let n=JSON.parse(t);return e(n)?n:void 0}catch{return}}}function
|
|
581
|
+
type:"tool_result",tool_use_id:s[u],...c.content!==""?{content:c.content}:{},...c.isError===true?{is_error:true}:{}}))}}function bc(t){return t.replace(/[^a-zA-Z0-9_-]/g,"_")}function Yp(t){let e=n=>typeof n==
|
|
582
|
+
"object"&&n!==null&&!Array.isArray(n);if(e(t))return t;if(typeof t=="string"){if(t.trim()==="")return {};try{let n=JSON.parse(t);return e(n)?n:void 0}catch{return}}}function Qp(t){let e=new Set((t.tools??
|
|
578
583
|
[]).map(r=>r.id));if(!t.toolSearch)return {tiene:r=>e.has(r),cargar:()=>{}};let n=new Set(t.toolSearch.alwaysLoaded.filter(r=>e.has(r)));return {tiene:r=>n.has(r),cargar(r){for(let o of r){if(o.type!=="\
|
|
579
|
-
tool_search_tool_result")continue;let i=o.content?.tool_references;if(Array.isArray(i))for(let s of i)typeof s?.tool_name=="string"&&e.has(s.tool_name)&&n.add(s.tool_name);}}}}function
|
|
580
|
-
test(new URL(t??"https://api.anthropic.com/v1").hostname)}catch{return false}}function
|
|
584
|
+
tool_search_tool_result")continue;let i=o.content?.tool_references;if(Array.isArray(i))for(let s of i)typeof s?.tool_name=="string"&&e.has(s.tool_name)&&n.add(s.tool_name);}}}}function yr(t){try{return /(^|\.)api\.anthropic\.com$/i.
|
|
585
|
+
test(new URL(t??"https://api.anthropic.com/v1").hostname)}catch{return false}}function vc(t,e){let n=0,r=0,o=[];for(let i of t)if(i.type==="server_tool_use"&&typeof i.name=="string"&&i.name.startsWith("to\
|
|
581
586
|
ol_search_tool"))n+=1;else if(i.type==="tool_search_tool_result"){let s=i.content;if(s&&s.type==="tool_search_tool_result_error")r+=1;else if(s&&Array.isArray(s.tool_references))for(let a of s.tool_references)
|
|
582
|
-
typeof a?.tool_name=="string"&&!o.includes(a.tool_name)&&o.push(a.tool_name);}return {searches:n,loaded:o,errors:r,...e&&e.resultados>0?{resent:{results:e.resultados,tools:[...e.herramientas]}}:{}}}function
|
|
583
|
-
try{return JSON.parse(t)}catch{return}}function
|
|
584
|
-
t"}, output=${e??"absent"}); cannot measure cost.`}async function
|
|
585
|
-
now()-this.start}all(){return this.events}};var Qe=class extends Error{status;constructor(e,n){super(e),this.name="LicenseError",n&&(this.status=n);}};function
|
|
587
|
+
typeof a?.tool_name=="string"&&!o.includes(a.tool_name)&&o.push(a.tool_name);}return {searches:n,loaded:o,errors:r,...e&&e.resultados>0?{resent:{results:e.resultados,tools:[...e.herramientas]}}:{}}}function Xp(t){
|
|
588
|
+
try{return JSON.parse(t)}catch{return}}function ef(t){try{return JSON.stringify(JSON.parse(t===""?"{}":t))}catch{return t}}function yc(t,e){return `provider returned incomplete usage (input=${t??"absen\
|
|
589
|
+
t"}, output=${e??"absent"}); cannot measure cost.`}async function kc(t){try{return (await t.text()).slice(0,500)}catch{return "<no body>"}}function tf(t){return pn(t)==="anthropic"?"anthropic":null}var mn=class{events=[];start;now;constructor(e=()=>Date.now()){this.now=e,this.start=e();}record(e,n,r){this.events.push({stage:e,outcome:n,...r?{detail:r}:{},atMs:this.now()-this.start});}elapsed(){return this.
|
|
590
|
+
now()-this.start}all(){return this.events}};var Qe=class extends Error{status;constructor(e,n){super(e),this.name="LicenseError",n&&(this.status=n);}};function pi(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function kr(t,e=""){if(typeof t!="number"){let n=e&&
|
|
586
591
|
`"${e}" `;throw new TypeError(`${n}expected number, got ${typeof t}`)}if(!Number.isSafeInteger(t)||t<0){let n=e&&`"${e}" `;throw new RangeError(`${n}expected integer >= 0, got ${t}`)}}function Se(t,e,n=""){
|
|
587
|
-
let r=
|
|
588
|
-
new TypeError(u)}return t}function
|
|
589
|
-
o() output");let n=e.outputLen;if(t.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function
|
|
590
|
-
let e="";for(let n=0;n<t.length;n++)e+=
|
|
591
|
-
t<=je.f)return t-(je.a-10)}function
|
|
592
|
-
new RangeError(o.message):o}let e=t.length,n=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);let r=new Uint8Array(n);for(let o=0,i=0;o<n;o++,i+=2){let s=
|
|
593
|
-
i)),a=
|
|
594
|
-
|
|
595
|
-
`"bytesLength" expected <= 65536, got ${t}`);return e.getRandomValues(new Uint8Array(t))}var
|
|
596
|
-
new Uint8Array(e),this.view=
|
|
597
|
-
o)this.process(c,s);continue}r.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(n,0),this.pos=0);}return this.length+=e.length,this.roundClean(),this}digestInto(e){
|
|
598
|
-
|
|
599
|
-
o-8,BigInt(this.length*8),i),this.process(r,0);let a=
|
|
592
|
+
let r=pi(t),o=t?.length,i=e!==void 0;if(!r||i&&o!==e){let s=n&&`"${n}" `,a=i?` of length ${e}`:"",c=r?`length=${o}`:`type=${typeof t}`,u=s+"expected Uint8Array"+a+", got "+c;throw r?new RangeError(u):
|
|
593
|
+
new TypeError(u)}return t}function fi(t,e=true){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function wc(t,e){Se(t,void 0,"digestInt\
|
|
594
|
+
o() output");let n=e.outputLen;if(t.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function hn(...t){for(let e=0;e<t.length;e++)t[e].fill(0);}function xr(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}var Sc=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",nf=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function wr(t){if(Se(t),Sc)return t.toHex();
|
|
595
|
+
let e="";for(let n=0;n<t.length;n++)e+=nf[t[n]];return e}var je={_0:48,_9:57,A:65,F:70,a:97,f:102};function xc(t){if(t>=je._0&&t<=je._9)return t-je._0;if(t>=je.A&&t<=je.F)return t-(je.A-10);if(t>=je.a&&
|
|
596
|
+
t<=je.f)return t-(je.a-10)}function gn(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);if(Sc)try{return Uint8Array.fromHex(t)}catch(o){throw o instanceof SyntaxError?
|
|
597
|
+
new RangeError(o.message):o}let e=t.length,n=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);let r=new Uint8Array(n);for(let o=0,i=0;o<n;o++,i+=2){let s=xc(t.charCodeAt(
|
|
598
|
+
i)),a=xc(t.charCodeAt(i+1));if(s===void 0||a===void 0){let c=t[i]+t[i+1];throw new RangeError('hex string expected, got non-hex character "'+c+'" at index '+i)}r[o]=s*16+a;}return r}function mi(...t){let e=0;for(let r=0;r<t.length;r++){let o=t[r];Se(o),e+=o.length;}let n=new Uint8Array(e);for(let r=0,o=0;r<t.length;r++){let i=t[r];n.set(i,o),o+=i.length;}return n}function Tc(t,e={}){let n=(o,i)=>t(i).update(o).digest(),r=t(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>t(o),Object.assign(n,e),Object.freeze(n)}function Cc(t=32){
|
|
599
|
+
kr(t,"bytesLength");let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(t>65536)throw new RangeError(
|
|
600
|
+
`"bytesLength" expected <= 65536, got ${t}`);return e.getRandomValues(new Uint8Array(t))}var Ec=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});var Sr=class{blockLen;outputLen;canXOF=false;padOffset;isLE;buffer;view;finished=false;length=0;pos=0;destroyed=false;constructor(e,n,r,o){this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=
|
|
601
|
+
new Uint8Array(e),this.view=xr(this.buffer);}update(e){fi(this),Se(e);let{view:n,buffer:r,blockLen:o}=this,i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=xr(e);for(;o<=i-s;s+=
|
|
602
|
+
o)this.process(c,s);continue}r.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(n,0),this.pos=0);}return this.length+=e.length,this.roundClean(),this}digestInto(e){fi(this),
|
|
603
|
+
wc(e,this),this.finished=true;let{buffer:n,view:r,blockLen:o,isLE:i}=this,{pos:s}=this;n[s++]=128,hn(this.buffer.subarray(s)),this.padOffset>o-s&&(this.process(r,0),s=0);for(let d=s;d<o;d++)n[d]=0;r.setBigUint64(
|
|
604
|
+
o-8,BigInt(this.length*8),i),this.process(r,0);let a=xr(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_s\
|
|
600
605
|
ha2: outputLen bigger than state");for(let d=0;d<u;d++)a.setUint32(4*d,l[d],i);}digest(){let{buffer:e,outputLen:n}=this;this.digestInto(e);let r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||=new this.
|
|
601
|
-
constructor,e.set(...this.get());let{blockLen:n,buffer:r,length:o,finished:i,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=i,e.length=o,e.pos=a,o%n&&e.buffer.set(r),e}clone(){return this._cloneInto()}};var
|
|
602
|
-
o=new Uint32Array(n);for(let i=0;i<n;i++){let{h:s,l:a}=
|
|
603
|
-
n+r+o+(t/2**32|0)|0,
|
|
606
|
+
constructor,e.set(...this.get());let{blockLen:n,buffer:r,length:o,finished:i,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=i,e.length=o,e.pos=a,o%n&&e.buffer.set(r),e}clone(){return this._cloneInto()}};var ne=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Tr=BigInt(4294967295),Pc=BigInt(32);function rf(t,e=false){return e?{h:Number(t&Tr),l:Number(t>>Pc&Tr)}:{h:Number(t>>Pc&Tr)|0,l:Number(t&Tr)|0}}function Rc(t,e=false){let n=t.length,r=new Uint32Array(n),
|
|
607
|
+
o=new Uint32Array(n);for(let i=0;i<n;i++){let{h:s,l:a}=rf(t[i],e);[r[i],o[i]]=[s,a];}return [r,o]}var hi=(t,e,n)=>t>>>n,gi=(t,e,n)=>t<<32-n|e>>>n,pt=(t,e,n)=>t>>>n|e<<32-n,ft=(t,e,n)=>t<<32-n|e>>>n,bn=(t,e,n)=>t<<64-n|e>>>n-32,vn=(t,e,n)=>t>>>n-32|e<<64-n;function Ie(t,e,n,r){let o=(e>>>0)+(r>>>0);return {h:t+n+(o/2**32|0)|0,l:o|0}}var Dc=(t,e,n)=>(t>>>0)+(e>>>0)+(n>>>0),Ic=(t,e,n,r)=>e+n+r+(t/2**32|0)|0,_c=(t,e,n,r)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0),Ac=(t,e,n,r,o)=>e+
|
|
608
|
+
n+r+o+(t/2**32|0)|0,Oc=(t,e,n,r,o)=>(t>>>0)+(e>>>0)+(n>>>0)+(r>>>0)+(o>>>0),Mc=(t,e,n,r,o,i)=>e+n+r+o+i+(t/2**32|0)|0;var Lc=Rc(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242",
|
|
604
609
|
"0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc6\
|
|
605
610
|
8b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","\
|
|
606
611
|
0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3\
|
|
@@ -608,159 +613,159 @@ c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a6
|
|
|
608
613
|
x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5d\
|
|
609
614
|
efb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0x\
|
|
610
615
|
eada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c1\
|
|
611
|
-
00d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),
|
|
616
|
+
00d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(t=>BigInt(t))),sf=Lc[0],af=Lc[1],Xe=new Uint32Array(80),et=new Uint32Array(80),bi=class extends Sr{constructor(e){
|
|
612
617
|
super(128,e,16,false);}get(){let{Ah:e,Al:n,Bh:r,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:u,El:l,Fh:d,Fl:p,Gh:h,Gl:m,Hh:g,Hl:f}=this;return [e,n,r,o,i,s,a,c,u,l,d,p,h,m,g,f]}set(e,n,r,o,i,s,a,c,u,l,d,p,h,m,g,f){this.Ah=
|
|
613
618
|
e|0,this.Al=n|0,this.Bh=r|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=u|0,this.El=l|0,this.Fh=d|0,this.Fl=p|0,this.Gh=h|0,this.Gl=m|0,this.Hh=g|0,this.Hl=f|0;}process(e,n){for(let y=0;y<
|
|
614
|
-
16;y++,n+=4)Xe[y]=e.getUint32(n),et[y]=e.getUint32(n+=4);for(let y=16;y<80;y++){let k=Xe[y-15]|0,T=et[y-15]|0,w=pt(k,T,1)^pt(k,T,8)^
|
|
615
|
-
x,
|
|
616
|
-
Gh:g,Gl:f,Hh:v,Hl:b}=this;for(let y=0;y<80;y++){let k=pt(d,p,14)^pt(d,p,18)^
|
|
617
|
-
R=pt(r,o,28)^
|
|
618
|
-
let
|
|
619
|
+
16;y++,n+=4)Xe[y]=e.getUint32(n),et[y]=e.getUint32(n+=4);for(let y=16;y<80;y++){let k=Xe[y-15]|0,T=et[y-15]|0,w=pt(k,T,1)^pt(k,T,8)^hi(k,T,7),P=ft(k,T,1)^ft(k,T,8)^gi(k,T,7),x=Xe[y-2]|0,S=et[y-2]|0,O=pt(
|
|
620
|
+
x,S,19)^bn(x,S,61)^hi(x,S,6),R=ft(x,S,19)^vn(x,S,61)^gi(x,S,6),C=_c(P,R,et[y-7],et[y-16]),I=Ac(C,w,O,Xe[y-7],Xe[y-16]);Xe[y]=I|0,et[y]=C|0;}let{Ah:r,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:u,Dl:l,Eh:d,El:p,Fh:h,Fl:m,
|
|
621
|
+
Gh:g,Gl:f,Hh:v,Hl:b}=this;for(let y=0;y<80;y++){let k=pt(d,p,14)^pt(d,p,18)^bn(d,p,41),T=ft(d,p,14)^ft(d,p,18)^vn(d,p,41),w=d&h^~d&g,P=p&m^~p&f,x=Oc(b,T,P,af[y],et[y]),S=Mc(x,v,k,w,sf[y],Xe[y]),O=x|0,
|
|
622
|
+
R=pt(r,o,28)^bn(r,o,34)^bn(r,o,39),C=ft(r,o,28)^vn(r,o,34)^vn(r,o,39),I=r&i^r&a^i&a,D=o&s^o&c^s&c;v=g|0,b=f|0,g=h|0,f=m|0,h=d|0,m=p|0,{h:d,l:p}=Ie(u|0,l|0,S|0,O|0),u=a|0,l=c|0,a=i|0,c=s|0,i=r|0,s=o|0;
|
|
623
|
+
let A=Dc(O,C,D);r=Ic(A,S,R,I),o=A|0;}(({h:r,l:o}=Ie(this.Ah|0,this.Al|0,r|0,o|0))),{h:i,l:s}=Ie(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=Ie(this.Ch|0,this.Cl|0,a|0,c|0),{h:u,l}=Ie(this.Dh|0,this.Dl|0,u|0,l|
|
|
619
624
|
0),{h:d,l:p}=Ie(this.Eh|0,this.El|0,d|0,p|0),{h,l:m}=Ie(this.Fh|0,this.Fl|0,h|0,m|0),{h:g,l:f}=Ie(this.Gh|0,this.Gl|0,g|0,f|0),{h:v,l:b}=Ie(this.Hh|0,this.Hl|0,v|0,b|0),this.set(r,o,i,s,a,c,u,l,d,p,h,
|
|
620
|
-
m,g,f,v,b);}roundClean(){
|
|
621
|
-
0;Dh=
|
|
622
|
-
xpected boolean, got type="+typeof t)}return t}function
|
|
623
|
-
"number"){let n=e&&`"${e}" `;throw new TypeError(n+"expected number, got type="+typeof t)}if(!Number.isSafeInteger(t)){let n=e&&`"${e}" `;throw new RangeError(n+"expected safe integer, got "+t)}}function
|
|
624
|
-
function
|
|
625
|
-
return
|
|
626
|
-
"expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function
|
|
625
|
+
m,g,f,v,b);}roundClean(){hn(Xe,et);}destroy(){this.destroyed=true,hn(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);}},vi=class extends bi{Ah=ne[0]|0;Al=ne[1]|0;Bh=ne[2]|0;Bl=ne[3]|0;Ch=ne[4]|0;Cl=ne[5]|
|
|
626
|
+
0;Dh=ne[6]|0;Dl=ne[7]|0;Eh=ne[8]|0;El=ne[9]|0;Fh=ne[10]|0;Fl=ne[11]|0;Gh=ne[12]|0;Gl=ne[13]|0;Hh=ne[14]|0;Hl=ne[15]|0;constructor(){super(64);}};var Cr=Tc(()=>new vi,Ec(3));var K=(t,e,n)=>Se(t,e,n),ki=kr,xi=wr,_e=(...t)=>mi(...t),jc=t=>gn(t),Rr=pi,Nc=t=>Cc(t),Pr=BigInt(0),yi=BigInt(1);function Ot(t,e=""){if(typeof t!="boolean"){let n=e&&`"${e}" `;throw new TypeError(n+"e\
|
|
627
|
+
xpected boolean, got type="+typeof t)}return t}function cf(t){if(typeof t=="bigint"){if(!Er(t))throw new RangeError("positive bigint expected, got "+t)}else ki(t);return t}function Ne(t,e=""){if(typeof t!=
|
|
628
|
+
"number"){let n=e&&`"${e}" `;throw new TypeError(n+"expected number, got type="+typeof t)}if(!Number.isSafeInteger(t)){let n=e&&`"${e}" `;throw new RangeError(n+"expected safe integer, got "+t)}}function $c(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);return t===""?Pr:BigInt("0x"+t)}function wi(t){return $c(wr(t))}function $e(t){return $c(wr(yn(Se(t)).reverse()))}
|
|
629
|
+
function Si(t,e){if(kr(e),e===0)throw new RangeError("zero length");t=cf(t);let n=t.toString(16);if(n.length>e*2)throw new RangeError("number too large");return gn(n.padStart(e*2,"0"))}function Bc(t,e){
|
|
630
|
+
return Si(t,e).reverse()}function Fc(t,e){if(t=K(t),e=K(e),t.length!==e.length)return false;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function yn(t){return Uint8Array.from(K(t))}var Er=t=>typeof t=="bigint"&&Pr<=t;function uf(t,e,n){return Er(t)&&Er(e)&&Er(n)&&e<=t&&t<n}function Ti(t,e,n,r){if(!uf(e,n,r))throw new RangeError(
|
|
631
|
+
"expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function Ci(t){if(t<Pr)throw new Error("expected non-negative bigint, got "+t);let e;for(e=0;t>Pr;t>>=yi,e+=1);return e}var zc=t=>(yi<<BigInt(t))-yi;function mt(t,e={},n={}){if(Object.prototype.toString.call(t)!=="[object Object]")throw new TypeError("expected valid options object");function r(i,s,a){if(!a&&s!=="function"&&!Object.hasOwn(t,i))throw new TypeError(
|
|
627
632
|
`param "${i}" is invalid: expected own property`);let c=t[i];if(a&&c===void 0)return;let u=typeof c;if(u!==s||c===null)throw new TypeError(`param "${i}" is invalid: expected ${s}, got ${u}`)}let o=(i,s)=>Object.
|
|
628
|
-
entries(i).forEach(([a,c])=>r(a,c,s));o(e,false),o(n,true);}var
|
|
629
|
-
odulus, got "+e);let n=t%e;return n>=
|
|
630
|
-
o number");if(e<=
|
|
631
|
-
"invert: does not exist");return
|
|
632
|
-
e),o}function
|
|
633
|
-
e.ONE)),o=n(e,r),i=n(e,e.neg(r)),s=(t+
|
|
634
|
-
eql(u.sqr(d),c),v=u.cmov(l,d,f);return
|
|
635
|
-
1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return
|
|
633
|
+
entries(i).forEach(([a,c])=>r(a,c,s));o(e,false),o(n,true);}var Ei=()=>{throw new Error("not implemented")};var re=BigInt(0),Q=BigInt(1),ht=BigInt(2),Hc=BigInt(3),Wc=BigInt(4),Jc=BigInt(5),lf=BigInt(7),Kc=BigInt(8),df=BigInt(9),Gc=BigInt(16);function W(t,e){if(e<=re)throw new Error("mod: expected positive m\
|
|
634
|
+
odulus, got "+e);let n=t%e;return n>=re?n:e+n}function Te(t,e,n){if(e<re)throw new Error("pow2: expected non-negative exponent, got "+e);let r=t;for(;e-- >re;)r*=r,r%=n;return r}function qc(t,e){if(t===re)throw new Error("invert: expected non-zer\
|
|
635
|
+
o number");if(e<=re)throw new Error("invert: expected positive modulus, got "+e);let n=W(t,e),r=e,o=re,s=Q;for(;n!==re;){let u=r/n,l=r-n*u,d=o-s*u;r=n,n=l,o=s,s=d;}if(r!==Q)throw new Error(
|
|
636
|
+
"invert: does not exist");return W(o,e)}function Pi(t,e,n){let r=t;if(!r.eql(r.sqr(e),n))throw new Error("Cannot find square root")}function Zc(t,e){let n=t,r=(n.ORDER+Q)/Wc,o=n.pow(e,r);return Pi(n,o,
|
|
637
|
+
e),o}function pf(t,e){let n=t,r=(n.ORDER-Jc)/Kc,o=n.mul(e,ht),i=n.pow(o,r),s=n.mul(e,i),a=n.mul(n.mul(s,ht),i),c=n.mul(s,n.sub(a,n.ONE));return Pi(n,c,e),c}function ff(t){let e=Ar(t),n=Yc(t),r=n(e,e.neg(
|
|
638
|
+
e.ONE)),o=n(e,r),i=n(e,e.neg(r)),s=(t+lf)/Gc;return((a,c)=>{let u=a,l=u.pow(c,s),d=u.mul(l,r),p=u.mul(l,o),h=u.mul(l,i),m=u.eql(u.sqr(d),c),g=u.eql(u.sqr(p),c);l=u.cmov(l,d,m),d=u.cmov(h,p,g);let f=u.
|
|
639
|
+
eql(u.sqr(d),c),v=u.cmov(l,d,f);return Pi(u,v,c),v})}function Yc(t){if(t<Hc)throw new Error("sqrt is not defined for small field");let e=t-Q,n=0;for(;e%ht===re;)e/=ht,n++;let r=ht,o=Ar(t);for(;Vc(o,r)===
|
|
640
|
+
1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return Zc;let i=o.pow(r,e),s=(e+Q)/ht;return function(c,u){let l=c;if(l.is0(u))return u;if(Vc(l,u)!==1)throw new Error(
|
|
636
641
|
"Cannot find square root");let d=n,p=l.mul(l.ONE,i),h=l.pow(u,e),m=l.pow(u,s);for(;!l.eql(h,l.ONE);){if(l.is0(h))return l.ZERO;let g=1,f=l.sqr(h);for(;!l.eql(f,l.ONE);)if(g++,f=l.sqr(f),g===d)throw new Error(
|
|
637
|
-
"Cannot find square root");let v=Q<<BigInt(d-g-1),b=l.pow(p,v);d=g,p=l.sqr(b),h=l.mul(h,p),m=l.mul(m,b);}return m}}function
|
|
638
|
-
t,e)&Q)===Q,
|
|
642
|
+
"Cannot find square root");let v=Q<<BigInt(d-g-1),b=l.pow(p,v);d=g,p=l.sqr(b),h=l.mul(h,p),m=l.mul(m,b);}return m}}function mf(t){return t%Wc===Hc?Zc:t%Kc===Jc?pf:t%Gc===df?ff(t):Yc(t)}var Be=(t,e)=>(W(
|
|
643
|
+
t,e)&Q)===Q,hf=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Qc(t){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},n=hf.
|
|
639
644
|
reduce((r,o)=>(r[o]="function",r),e);if(mt(t,n),Ne(t.BYTES,"BYTES"),Ne(t.BITS,"BITS"),t.BYTES<1||t.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(t.ORDER<=Q)throw new Error("inval\
|
|
640
|
-
id field: expected ORDER > 1, got "+t.ORDER);return t}function
|
|
641
|
-
i=e;for(;n>
|
|
642
|
-
i);return e.reduceRight((a,c,u)=>r.is0(c)?a:(o[u]=r.mul(a,o[u]),r.mul(a,c)),s),o}function
|
|
643
|
-
let n=
|
|
644
|
-
|
|
645
|
+
id field: expected ORDER > 1, got "+t.ORDER);return t}function gf(t,e,n){let r=t;if(n<re)throw new Error("invalid exponent, negatives unsupported");if(n===re)return r.ONE;if(n===Q)return e;let o=r.ONE,
|
|
646
|
+
i=e;for(;n>re;)n&Q&&(o=r.mul(o,i)),i=r.sqr(i),n>>=Q;return o}function _r(t,e,n=false){let r=t,o=new Array(e.length).fill(n?r.ZERO:void 0),i=e.reduce((a,c,u)=>r.is0(c)?a:(o[u]=a,r.mul(a,c)),r.ONE),s=r.inv(
|
|
647
|
+
i);return e.reduceRight((a,c,u)=>r.is0(c)?a:(o[u]=r.mul(a,o[u]),r.mul(a,c)),s),o}function Vc(t,e){let n=t,r=(n.ORDER-Q)/ht,o=n.pow(e,r),i=n.eql(o,n.ONE),s=n.eql(o,n.ZERO),a=n.eql(o,n.neg(n.ONE));if(!i&&!s&&!a)throw new Error("invalid Legendre symbol result");return i?1:s?0:-1}function bf(t,e){if(e!==void 0&&ki(e),t<=re)throw new Error("invalid n length: expected positive n, got "+t);if(e!==void 0&&e<1)throw new Error("invalid n length: expected positive bit length, got "+e);
|
|
648
|
+
let n=Ci(t);if(e!==void 0&&e<n)throw new Error(`invalid n length: expected bit length (${n}) >= n.length (${e})`);let r=e!==void 0?e:n,o=Math.ceil(r/8);return {nBitLength:r,nByteLength:o}}var Uc=new WeakMap,
|
|
649
|
+
Ir=class{ORDER;BITS;BYTES;isLE;ZERO=re;ONE=Q;_lengths;_mod;constructor(e,n={}){if(e<=Q)throw new Error("invalid field: expected ORDER > 1, got "+e);let r;this.isLE=false,n!=null&&typeof n=="object"&&(typeof n.
|
|
645
650
|
BITS=="number"&&(r=n.BITS),typeof n.sqrt=="function"&&Object.defineProperty(this,"sqrt",{value:n.sqrt,enumerable:true}),typeof n.isLE=="boolean"&&(this.isLE=n.isLE),n.allowedLengths&&(this._lengths=Object.
|
|
646
|
-
freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));let{nBitLength:o,nByteLength:i}=
|
|
647
|
-
048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=i,Object.freeze(this);}create(e){return
|
|
648
|
-
"+typeof e);return
|
|
649
|
-
e*e,this.ORDER)}add(e,n){return
|
|
650
|
-
return e*e}addN(e,n){return e+n}subN(e,n){return e-n}mulN(e,n){return e*n}inv(e){return
|
|
651
|
-
isLE
|
|
651
|
+
freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));let{nBitLength:o,nByteLength:i}=bf(e,r);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2\
|
|
652
|
+
048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=i,Object.freeze(this);}create(e){return W(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new TypeError("invalid field element: expected bigint, got\
|
|
653
|
+
"+typeof e);return re<=e&&e<this.ORDER}is0(e){return e===re}isValidNot0(e){return !this.is0(e)&&this.isValid(e)}isOdd(e){return (e&Q)===Q}neg(e){return W(-e,this.ORDER)}eql(e,n){return e===n}sqr(e){return W(
|
|
654
|
+
e*e,this.ORDER)}add(e,n){return W(e+n,this.ORDER)}sub(e,n){return W(e-n,this.ORDER)}mul(e,n){return W(e*n,this.ORDER)}pow(e,n){return gf(this,e,n)}div(e,n){return W(e*qc(n,this.ORDER),this.ORDER)}sqrN(e){
|
|
655
|
+
return e*e}addN(e,n){return e+n}subN(e,n){return e-n}mulN(e,n){return e*n}inv(e){return qc(e,this.ORDER)}sqrt(e){let n=Uc.get(this);return n||Uc.set(this,n=mf(this.ORDER)),n(this,e)}toBytes(e){return this.
|
|
656
|
+
isLE?Bc(e,this.BYTES):Si(e,this.BYTES)}fromBytes(e,n=false){K(e);let{_lengths:r,BYTES:o,isLE:i,ORDER:s,_mod:a}=this;if(r){if(e.length<1||!r.includes(e.length)||e.length>o)throw new Error("Field.fromBytes\
|
|
652
657
|
: expected "+r+" bytes, got "+e.length);let u=new Uint8Array(o);u.set(e,i?0:u.length-e.length),e=u;}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let c=i?$e(e):
|
|
653
|
-
|
|
654
|
-
freeze(
|
|
655
|
-
throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function
|
|
656
|
-
shiftBy:s}}function
|
|
657
|
-
isNeg:p,isNegF:h,offsetF:u}}var
|
|
658
|
-
e.ZERO,this.Fn=e.Fn,this.bits=n;}_unsafeLadder(e,n,r=this.ZERO){let o=e;for(;n>
|
|
658
|
+
wi(e);if(a&&(c=W(c,s)),!n&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return _r(this,e)}cmov(e,n,r){return Ot(r,"condition"),r?n:e}};Object.
|
|
659
|
+
freeze(Ir.prototype);function Ar(t,e={}){return new Ir(t,e)}var Or=BigInt(0),_i=BigInt(1);function Xc(t,e){let n=e.negate();return t?n:e}function Lr(t,e){let n=_r(t.Fp,e.map(r=>r.Z));return e.map((r,o)=>t.fromAffine(r.toAffine(n[o])))}function ru(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)
|
|
660
|
+
throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function Ri(t,e){ru(t,e);let n=Math.ceil(e/t)+1,r=2**(t-1),o=2**t,i=zc(t),s=BigInt(t);return {windows:n,windowSize:r,mask:i,maxNumber:o,
|
|
661
|
+
shiftBy:s}}function eu(t,e,n){let{windowSize:r,mask:o,maxNumber:i,shiftBy:s}=n,a=Number(t&o),c=t>>s;a>r&&(a-=i,c+=_i);let u=e*r,l=u+Math.abs(a)-1,d=a===0,p=a<0,h=e%2!==0;return {nextN:c,offset:l,isZero:d,
|
|
662
|
+
isNeg:p,isNegF:h,offsetF:u}}var Di=new WeakMap,ou=new WeakMap;function Ii(t){return ou.get(t)||1}function tu(t){if(t!==Or)throw new Error("invalid wNAF")}var Mr=class{BASE;ZERO;Fn;bits;constructor(e,n){this.BASE=e.BASE,this.ZERO=
|
|
663
|
+
e.ZERO,this.Fn=e.Fn,this.bits=n;}_unsafeLadder(e,n,r=this.ZERO){let o=e;for(;n>Or;)n&_i&&(r=r.add(o)),o=o.double(),n>>=_i;return r}precomputeWindow(e,n){let{windows:r,windowSize:o}=Ri(n,this.bits),i=[],
|
|
659
664
|
s=e,a=s;for(let c=0;c<r;c++){a=s,i.push(a);for(let u=1;u<o;u++)a=a.add(s),i.push(a);s=a.double();}return i}wNAF(e,n,r){if(!this.Fn.isValid(r))throw new Error("invalid scalar");let o=this.ZERO,i=this.BASE,
|
|
660
|
-
s=
|
|
661
|
-
ZERO){let i=
|
|
662
|
-
get(n);return o||(o=this.precomputeWindow(n,e),e!==1&&(typeof r=="function"&&(o=r(o)),
|
|
663
|
-
e);return i===1?this._unsafeLadder(e,n,o):this.wNAFUnsafe(i,this.getPrecomputes(i,e,r),n,o)}createCache(e,n){
|
|
664
|
-
ds"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(let c of ["p","n","h"]){let u=e[c];if(!(typeof u=="bigint"&&u>
|
|
665
|
-
let o=
|
|
666
|
-
freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:i}}function
|
|
667
|
-
let n=e,r=
|
|
668
|
-
sqrt(o.div(g,f))}}catch{return {isValid:false,value:tt}}}:n.uvRatio;if(!
|
|
665
|
+
s=Ri(e,this.bits);for(let a=0;a<s.windows;a++){let{nextN:c,offset:u,isZero:l,isNeg:d,isNegF:p,offsetF:h}=eu(r,a,s);r=c,l?i=i.add(Xc(p,n[h])):o=o.add(Xc(d,n[u]));}return tu(r),{p:o,f:i}}wNAFUnsafe(e,n,r,o=this.
|
|
666
|
+
ZERO){let i=Ri(e,this.bits);for(let s=0;s<i.windows&&r!==Or;s++){let{nextN:a,offset:c,isZero:u,isNeg:l}=eu(r,s,i);if(r=a,!u){let d=n[c];o=o.add(l?d.negate():d);}}return tu(r),o}getPrecomputes(e,n,r){let o=Di.
|
|
667
|
+
get(n);return o||(o=this.precomputeWindow(n,e),e!==1&&(typeof r=="function"&&(o=r(o)),Di.set(n,o))),o}cached(e,n,r){let o=Ii(e);return this.wNAF(o,this.getPrecomputes(o,e,r),n)}unsafe(e,n,r,o){let i=Ii(
|
|
668
|
+
e);return i===1?this._unsafeLadder(e,n,o):this.wNAFUnsafe(i,this.getPrecomputes(i,e,r),n,o)}createCache(e,n){ru(n,this.bits),ou.set(e,n),Di.delete(e);}hasCache(e){return Ii(e)!==1}};function nu(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Qc(e),e}else return Ar(t,{isLE:n})}function iu(t,e,n={},r){if(r===void 0&&(r=t==="edwar\
|
|
669
|
+
ds"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(let c of ["p","n","h"]){let u=e[c];if(!(typeof u=="bigint"&&u>Or))throw new Error(`CURVE.${c} must be positive bigint`)}
|
|
670
|
+
let o=nu(e.p,n.Fp,r),i=nu(e.n,n.Fn,r),a=["Gx","Gy","a","d"];for(let c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.
|
|
671
|
+
freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:i}}function su(t,e){return function(r){let o=t(r);return {secretKey:o,publicKey:e(o)}}}var tt=BigInt(0),X=BigInt(1),Ai=BigInt(2),vf=BigInt(8);function yf(t,e,n,r){let o=t.sqr(n),i=t.sqr(r),s=t.add(t.mul(e.a,o),i),a=t.add(t.ONE,t.mul(e.d,t.mul(o,i)));return t.eql(s,a)}function au(t,e={}){
|
|
672
|
+
let n=e,r=iu("edwards",t,n,n.FpFnLE),{Fp:o,Fn:i}=r,s=r.CURVE,{h:a}=s;mt(n,{},{uvRatio:"function"});let c=Ai<<BigInt(i.BYTES*8)-X,u=g=>o.create(g),l=n.uvRatio===void 0?(g,f)=>{try{return {isValid:!0,value:o.
|
|
673
|
+
sqrt(o.div(g,f))}}catch{return {isValid:false,value:tt}}}:n.uvRatio;if(!yf(o,s,s.Gx,s.Gy))throw new Error("bad curve params: generator point");function d(g,f,v=false){let b=v?X:tt;return Ti("coordinate "+g,f,
|
|
669
674
|
b,c),f}function p(g){if(!(g instanceof h))throw new Error("EdwardsPoint expected")}class h{static BASE=new h(s.Gx,s.Gy,X,u(s.Gx*s.Gy));static ZERO=new h(tt,X,X,tt);static Fp=o;static Fn=i;X;Y;Z;T;constructor(f,v,b,y){
|
|
670
675
|
this.X=d("x",f),this.Y=d("y",v),this.Z=d("z",b,true),this.T=d("t",y),Object.freeze(this);}static CURVE(){return s}static fromAffine(f){if(f instanceof h)throw new Error("extended point not allowed");let{
|
|
671
|
-
x:v,y:b}=f||{};return d("x",v),d("y",b),new h(v,b,X,u(v*b))}static fromBytes(f,v=false){let b=o.BYTES,{a:y,d:k}=s;f=
|
|
672
|
-
o.ORDER;
|
|
673
|
-
"bad point: x=0 and x_0=1");return
|
|
674
|
-
return m.createCache(this,f),v||this.multiply(
|
|
675
|
-
R=u(
|
|
676
|
-
p(f);let{X:v,Y:b,Z:y}=this,{X:k,Y:T,Z:w}=f,
|
|
677
|
-
let{a:f}=s,{X:v,Y:b,Z:y}=this,k=u(v*v),T=u(b*b),w=u(
|
|
678
|
-
Y:k,Z:T,T:w}=this,{X:
|
|
679
|
-
f),this.add(f.negate())}multiply(f){if(!i.isValidNot0(f))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");let{p:v,f:b}=m.cached(this,f,y=>
|
|
680
|
-
if(!i.isValid(f))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return f===tt?h.ZERO:this.is0()||f===X?this:m.unsafe(this,f,v=>
|
|
681
|
-
return m.unsafe(this,s.n).is0()}toAffine(f){let v=this,b=f,{X:y,Y:k,Z:T}=v,w=v.is0();b==null&&(b=w?
|
|
682
|
-
was invalid");return {x:
|
|
683
|
-
return `<Point ${this.is0()?"ZERO":this.toHex()}>`}}let m=new
|
|
684
|
-
this.ep=e;}static fromBytes(e){
|
|
685
|
-
return this.ep.toAffine(e)}toHex(){return
|
|
676
|
+
x:v,y:b}=f||{};return d("x",v),d("y",b),new h(v,b,X,u(v*b))}static fromBytes(f,v=false){let b=o.BYTES,{a:y,d:k}=s;f=yn(K(f,b,"point")),Ot(v,"zip215");let T=yn(f),w=f[b-1];T[b-1]=w&-129;let P=$e(T),x=v?c:
|
|
677
|
+
o.ORDER;Ti("point.y",P,tt,x);let S=u(P*P),O=u(S-X),R=u(k*S-y),{isValid:C,value:I}=l(O,R);if(!C)throw new Error("bad point: invalid y coordinate");let D=(I&X)===X,A=(w&128)!==0;if(!v&&I===tt&&A)throw new Error(
|
|
678
|
+
"bad point: x=0 and x_0=1");return A!==D&&(I=u(-I)),h.fromAffine({x:I,y:P})}static fromHex(f,v=false){return h.fromBytes(jc(f),v)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(f=8,v=true){
|
|
679
|
+
return m.createCache(this,f),v||this.multiply(Ai),this}assertValidity(){let f=this,{a:v,d:b}=s;if(f.is0())throw new Error("bad point: ZERO");let{X:y,Y:k,Z:T,T:w}=f,P=u(y*y),x=u(k*k),S=u(T*T),O=u(S*S),
|
|
680
|
+
R=u(P*v),C=u(S*u(R+x)),I=u(O+u(b*u(P*x)));if(C!==I)throw new Error("bad point: equation left != right (1)");let D=u(y*k),A=u(T*w);if(D!==A)throw new Error("bad point: equation left != right (2)")}equals(f){
|
|
681
|
+
p(f);let{X:v,Y:b,Z:y}=this,{X:k,Y:T,Z:w}=f,P=u(v*w),x=u(k*y),S=u(b*w),O=u(T*y);return P===x&&S===O}is0(){return this.equals(h.ZERO)}negate(){return new h(u(-this.X),this.Y,this.Z,u(-this.T))}double(){
|
|
682
|
+
let{a:f}=s,{X:v,Y:b,Z:y}=this,k=u(v*v),T=u(b*b),w=u(Ai*u(y*y)),P=u(f*k),x=v+b,S=u(u(x*x)-k-T),O=P+T,R=O-w,C=P-T,I=u(S*R),D=u(O*C),A=u(S*C),j=u(R*O);return new h(I,D,j,A)}add(f){p(f);let{a:v,d:b}=s,{X:y,
|
|
683
|
+
Y:k,Z:T,T:w}=this,{X:P,Y:x,Z:S,T:O}=f,R=u(y*P),C=u(k*x),I=u(w*b*O),D=u(T*S),A=u((y+k)*(P+x)-R-C),j=D-I,B=D+I,V=u(C-v*R),z=u(A*j),ee=u(B*V),L=u(A*V),se=u(j*B);return new h(z,ee,se,L)}subtract(f){return p(
|
|
684
|
+
f),this.add(f.negate())}multiply(f){if(!i.isValidNot0(f))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");let{p:v,f:b}=m.cached(this,f,y=>Lr(h,y));return Lr(h,[v,b])[0]}multiplyUnsafe(f){
|
|
685
|
+
if(!i.isValid(f))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return f===tt?h.ZERO:this.is0()||f===X?this:m.unsafe(this,f,v=>Lr(h,v))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){
|
|
686
|
+
return m.unsafe(this,s.n).is0()}toAffine(f){let v=this,b=f,{X:y,Y:k,Z:T}=v,w=v.is0();b==null&&(b=w?vf:o.inv(T));let P=u(y*b),x=u(k*b),S=o.mul(T,b);if(w)return {x:tt,y:X};if(S!==X)throw new Error("invZ \
|
|
687
|
+
was invalid");return {x:P,y:x}}clearCofactor(){return a===X?this:this.multiplyUnsafe(a)}toBytes(){let{x:f,y:v}=this.toAffine(),b=o.toBytes(v);return b[b.length-1]|=f&X?128:0,b}toHex(){return xi(this.toBytes())}toString(){
|
|
688
|
+
return `<Point ${this.is0()?"ZERO":this.toHex()}>`}}let m=new Mr(h,i.BITS);return i.BITS>=8&&h.BASE.precompute(8),Object.freeze(h.prototype),Object.freeze(h),h}var jr=class{static BASE;static ZERO;static Fp;static Fn;ep;constructor(e){
|
|
689
|
+
this.ep=e;}static fromBytes(e){Ei();}static fromHex(e){Ei();}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity();}toAffine(e){
|
|
690
|
+
return this.ep.toAffine(e)}toHex(){return xi(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return true}isSmallOrder(){return false}add(e){return this.assertSame(e),this.init(this.ep.add(e.ep))}subtract(e){
|
|
686
691
|
return this.assertSame(e),this.init(this.ep.subtract(e.ep))}multiply(e){return this.init(this.ep.multiply(e))}multiplyUnsafe(e){return this.init(this.ep.multiplyUnsafe(e))}double(){return this.init(this.
|
|
687
|
-
ep.double())}negate(){return this.init(this.ep.negate())}precompute(e,n){return this.ep.precompute(e,n),this}};function
|
|
692
|
+
ep.double())}negate(){return this.init(this.ep.negate())}precompute(e,n){return this.ep.precompute(e,n),this}};function cu(t,e,n={}){if(typeof e!="function")throw new Error('"hash" function param is r\
|
|
688
693
|
equired');let r=e,o=n;mt(o,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",zip215:"boolean",mapToCurve:"function"});let{prehash:i}=o,{BASE:s,Fp:a,Fn:c}=t,u=r.
|
|
689
|
-
outputLen,l=2*a.BYTES;if(u!==void 0&&(Ne(u,"hash.outputLen"),u!==l))throw new Error(`hash.outputLen must be ${l}, got ${u}`);let d=o.randomBytes===void 0?
|
|
690
|
-
|
|
691
|
-
let
|
|
692
|
-
|
|
693
|
-
"context"),!!i)))}function y(
|
|
694
|
-
if(!c.isValid(L))throw new Error("sign failed: invalid s");let
|
|
695
|
-
!!k.zip215:
|
|
696
|
-
ae,
|
|
697
|
-
is0()}let w=a.BYTES,
|
|
698
|
-
try{return !!t.fromBytes(
|
|
699
|
-
|
|
700
|
-
|
|
694
|
+
outputLen,l=2*a.BYTES;if(u!==void 0&&(Ne(u,"hash.outputLen"),u!==l))throw new Error(`hash.outputLen must be ${l}, got ${u}`);let d=o.randomBytes===void 0?Nc:o.randomBytes,p=o.adjustScalarBytes===void 0?
|
|
695
|
+
C=>C:o.adjustScalarBytes,h=o.domain===void 0?(C,I,D)=>{if(Ot(D,"phflag"),I.length||D)throw new Error("Contexts/pre-hash are not supported");return C}:o.domain;function m(C){return c.create($e(C))}function g(C){
|
|
696
|
+
let I=P.secretKey;K(C,P.secretKey,"secretKey");let D=K(r(C),2*I,"hashedSecretKey"),A=p(D.slice(0,I)),j=D.slice(I,2*I),B=m(A);return {head:A,prefix:j,scalar:B}}function f(C){let{head:I,prefix:D,scalar:A}=g(
|
|
697
|
+
C),j=s.multiply(A),B=j.toBytes();return {head:I,prefix:D,scalar:A,point:j,pointBytes:B}}function v(C){return f(C).pointBytes}function b(C=Uint8Array.of(),...I){let D=_e(...I);return m(r(h(D,K(C,void 0,
|
|
698
|
+
"context"),!!i)))}function y(C,I,D={}){C=K(C,void 0,"message"),i&&(C=i(C));let{prefix:A,scalar:j,pointBytes:B}=f(I),V=b(D.context,A,C),z=s.multiply(V).toBytes(),ee=b(D.context,z,B,C),L=c.create(V+ee*j);
|
|
699
|
+
if(!c.isValid(L))throw new Error("sign failed: invalid s");let se=_e(z,c.toBytes(L));return K(se,P.signature,"result")}let k={zip215:o.zip215};function T(C,I,D,A=k){let{context:j}=A,B=A.zip215===void 0?
|
|
700
|
+
!!k.zip215:A.zip215,V=P.signature;C=K(C,V,"signature"),I=K(I,void 0,"message"),D=K(D,P.publicKey,"publicKey"),B!==void 0&&Ot(B,"zip215"),i&&(I=i(I));let z=V/2,ee=C.subarray(0,z),L=$e(C.subarray(z,V)),
|
|
701
|
+
se,ae,G;try{se=t.fromBytes(D,B),ae=t.fromBytes(ee,B),G=s.multiplyUnsafe(L);}catch{return false}if(!B&&se.isSmallOrder())return false;let Wt=b(j,ee,D,I);return ae.add(se.multiplyUnsafe(Wt)).subtract(G).clearCofactor().
|
|
702
|
+
is0()}let w=a.BYTES,P={secretKey:w,publicKey:w,signature:2*w,seed:w};function x(C){return C=C===void 0?d(P.seed):C,K(C,P.seed,"seed")}function S(C){return Rr(C)&&C.length===P.secretKey}function O(C,I){
|
|
703
|
+
try{return !!t.fromBytes(C,I===void 0?k.zip215:I)}catch{return false}}let R={getExtendedPublicKey:f,randomSecretKey:x,isValidSecretKey:S,isValidPublicKey:O,toMontgomery(C){let{y:I}=t.fromBytes(C),D=P.publicKey,
|
|
704
|
+
A=D===32;if(!A&&D!==57)throw new Error("only defined for 25519 and 448");let j=A?a.div(X+I,X-I):a.div(I-X,I+X);return a.toBytes(j)},toMontgomerySecret(C){let I=P.secretKey;K(C,I);let D=r(C.subarray(0,
|
|
705
|
+
I));return p(D).subarray(0,I)}};return Object.freeze(P),Object.freeze(R),Object.freeze({keygen:su(x,v),getPublicKey:v,sign:y,verify:T,utils:R,Point:t,lengths:P})}var wf=BigInt(0),Fe=BigInt(1),lu=BigInt(2);var Sf=BigInt(5),Tf=BigInt(8),Mt=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),Ni={p:Mt,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:Tf,
|
|
701
706
|
a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6d\
|
|
702
|
-
c5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function
|
|
703
|
-
i*t%i,c=Te(a,
|
|
704
|
-
return t[0]&=248,t[31]&=127,t[31]|=64,t}var
|
|
705
|
-
s=
|
|
706
|
-
"1159843021668779879193775521855586647937357759715417654439879720876111806838");BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var
|
|
707
|
-
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
|
|
708
|
-
rt.BASE);static ZERO=new t(rt.ZERO);static Fp=nt;static Fn=
|
|
709
|
-
oint expected")}init(e){return new t(e)}static fromBytes(e){Se(e,32);let{a:n,d:r}=
|
|
710
|
-
let a=i(s*s),c=i(Fe+n*a),u=i(Fe-n*a),l=i(c*c),d=i(u*u),p=i(n*r*l-d),{isValid:h,value:m}=
|
|
711
|
-
"invalid ristretto255 encoding 2");return new t(new rt(v,b,Fe,y))}static fromHex(e){return t.fromBytes(
|
|
712
|
-
u=s(c*c),{value:l}=
|
|
707
|
+
c5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Cf(t){let e=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),i=Mt,a=t*t%
|
|
708
|
+
i*t%i,c=Te(a,lu,i)*a%i,u=Te(c,Fe,i)*t%i,l=Te(u,Sf,i)*u%i,d=Te(l,e,i)*l%i,p=Te(d,n,i)*d%i,h=Te(p,r,i)*p%i,m=Te(h,o,i)*h%i,g=Te(m,o,i)*h%i,f=Te(g,e,i)*l%i;return {pow_p_5_8:Te(f,lu,i)*t%i,b2:a}}function Ef(t){
|
|
709
|
+
return t[0]&=248,t[31]&=127,t[31]|=64,t}var Mi=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function $i(t,e){let n=Mt,r=W(e*e*e,n),o=W(r*r*e,n),i=Cf(t*o).pow_p_5_8,
|
|
710
|
+
s=W(t*r*i,n),a=W(e*s*s,n),c=s,u=W(s*Mi,n),l=a===t,d=a===W(-t,n),p=a===W(-t*Mi,n);return l&&(s=c),(d||p)&&(s=u),Be(s,n)&&(s=W(-s,n)),{isValid:l||d,value:s}}var rt=au(Ni,{uvRatio:$i}),nt=rt.Fp,fu=rt.Fn;function Pf(t){return cu(rt,Cr,Object.assign({adjustScalarBytes:Ef,zip215:true},t))}var mu=Pf({});var Li=Mi;BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235");var Df=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578");BigInt(
|
|
711
|
+
"1159843021668779879193775521855586647937357759715417654439879720876111806838");BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var du=t=>$i(Fe,t),Af=BigInt("0x7\
|
|
712
|
+
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),ji=t=>nt.create($e(t)&Af);var ot=class t extends jr{static BASE=new t(
|
|
713
|
+
rt.BASE);static ZERO=new t(rt.ZERO);static Fp=nt;static Fn=fu;constructor(e){super(e);}static fromAffine(e){return new t(rt.fromAffine(e))}assertSame(e){if(!(e instanceof t))throw new Error("RistrettoP\
|
|
714
|
+
oint expected")}init(e){return new t(e)}static fromBytes(e){Se(e,32);let{a:n,d:r}=Ni,o=Mt,i=k=>nt.create(k),s=ji(e);if(!Fc(nt.toBytes(s),e)||Be(s,o))throw new Error("invalid ristretto255 encoding 1");
|
|
715
|
+
let a=i(s*s),c=i(Fe+n*a),u=i(Fe-n*a),l=i(c*c),d=i(u*u),p=i(n*r*l-d),{isValid:h,value:m}=du(i(p*d)),g=i(m*u),f=i(m*g*p),v=i((s+s)*g);Be(v,o)&&(v=i(-v));let b=i(c*f),y=i(v*b);if(!h||Be(y,o)||b===wf)throw new Error(
|
|
716
|
+
"invalid ristretto255 encoding 2");return new t(new rt(v,b,Fe,y))}static fromHex(e){return t.fromBytes(gn(e))}toBytes(){let{X:e,Y:n,Z:r,T:o}=this.ep,i=Mt,s=f=>nt.create(f),a=s(s(r+n)*s(r-n)),c=s(e*n),
|
|
717
|
+
u=s(c*c),{value:l}=du(s(a*u)),d=s(l*a),p=s(l*c),h=s(d*p*o),m;if(Be(o*h,i)){let f=s(n*Li),v=s(e*Li);e=f,n=v,m=s(d*Df);}else m=p;Be(e*h,i)&&(n=s(-n));let g=s((r-n)*m);return Be(g,i)&&(g=s(-g)),nt.toBytes(
|
|
713
718
|
g)}equals(e){this.assertSame(e);let{X:n,Y:r}=this.ep,{X:o,Y:i}=e.ep,s=u=>nt.create(u),a=s(n*i)===s(r*o),c=s(r*i)===s(n*o);return a||c}is0(){return this.equals(t.ZERO)}};Object.freeze(ot.BASE);Object.freeze(
|
|
714
|
-
ot.ZERO);Object.freeze(ot.prototype);Object.freeze(ot);var
|
|
719
|
+
ot.ZERO);Object.freeze(ot.prototype);Object.freeze(ot);var hu=`-----BEGIN PUBLIC KEY-----
|
|
715
720
|
MCowBQYDK2VwAyEAWBiklf0kmDIVmM7nMiCxwiEAkwQIiqWGuRiRDJonsFY=
|
|
716
|
-
-----END PUBLIC KEY-----`;function
|
|
717
|
-
length%4?"=".repeat(4-e.length%4):"";return
|
|
718
|
-
function
|
|
719
|
-
function
|
|
720
|
-
oken"};let n=t.split("."),r=n[0],o=n[1],i=n[2],s;try{s=JSON.parse(
|
|
721
|
-
d=e.keys[l];if(!d)return {ok:false,reason:`unknown key id "${l}"`};a=d;}else {if(!e)return {ok:false,reason:"no verification key"};a=e;}let c;try{if(c=
|
|
722
|
-
return {ok:false,reason:"invalid public key"}}let u=false;try{u=
|
|
723
|
-
{ok:false,reason:"bad signature"}}function
|
|
724
|
-
n.payloadBytes))}}catch{return {signatureValid:false,reason:"payload is not valid JSON"}}}function
|
|
725
|
-
active":e<=r?"grace":"expired"}function
|
|
726
|
-
{reason:i.reason}:{}};let s=i.payload,a=n.nowSeconds??Math.floor(Date.now()/1e3),c=
|
|
727
|
-
if(o.header?.typ!==
|
|
721
|
+
-----END PUBLIC KEY-----`;function gu(t){let e=atob(t),n=new Uint8Array(e.length);for(let r=0;r<e.length;r++)n[r]=e.charCodeAt(r);return n}function Bi(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),n=e.
|
|
722
|
+
length%4?"=".repeat(4-e.length%4):"";return gu(e+n)}function Mf(t){let e=t.replace(/-----[^-]+-----/g,"").replace(/\s+/g,""),n=gu(e);return n.subarray(n.length-32)}var Lf=new TextEncoder,bu=new TextDecoder;
|
|
723
|
+
function jf(t){return typeof t=="object"&&t!==null&&"keys"in t}function Lt(t){let e=t.trim(),n=/^(["'])([\s\S]*)\1$/.exec(e);return n&&(e=n[2].trim()),e=e.replace(/^bearer\s+/i,""),e.trim()}var Nf=/^[A-Za-z0-9_-]+$/;
|
|
724
|
+
function vu(t){let e=t.split(".");return e.length===3&&e.every(n=>Nf.test(n))}function Fi(t){return t===""?"empty":vu(t)?"token":"malformed"}function zi(t,e){if(!vu(t))return {ok:false,reason:"malformed t\
|
|
725
|
+
oken"};let n=t.split("."),r=n[0],o=n[1],i=n[2],s;try{s=JSON.parse(bu.decode(Bi(r)));}catch{return {ok:false,reason:"header is not valid JSON"}}let a;if(jf(e)){let l=typeof s.kid=="string"?s.kid:e.defaultKid,
|
|
726
|
+
d=e.keys[l];if(!d)return {ok:false,reason:`unknown key id "${l}"`};a=d;}else {if(!e)return {ok:false,reason:"no verification key"};a=e;}let c;try{if(c=Mf(a),c.length!==32)return {ok:!1,reason:"invalid public key"}}catch{
|
|
727
|
+
return {ok:false,reason:"invalid public key"}}let u=false;try{u=mu.verify(Bi(i),Lf.encode(`${r}.${o}`),c);}catch{return {ok:false,reason:"signature verification error"}}return u?{ok:true,header:s,payloadBytes:Bi(o)}:
|
|
728
|
+
{ok:false,reason:"bad signature"}}function jt(t,e){let n=zi(t,e);if(!n.ok||!n.payloadBytes)return {signatureValid:false,...n.reason?{reason:n.reason}:{}};try{return {signatureValid:!0,payload:JSON.parse(bu.decode(
|
|
729
|
+
n.payloadBytes))}}catch{return {signatureValid:false,reason:"payload is not valid JSON"}}}function qi(t,e,n){if(n?.has(t.jti))return "revoked";let r=t.expires_at+t.grace_days*86400;return e<=t.expires_at?"\
|
|
730
|
+
active":e<=r?"grace":"expired"}function jv(t,e,n={}){let r=Lt(t);if(Fi(r)==="empty")return {status:"none",reason:"empty"};let i=jt(r,e);if(!i.signatureValid||!i.payload)return {status:"invalid",...i.reason?
|
|
731
|
+
{reason:i.reason}:{}};let s=i.payload,a=n.nowSeconds??Math.floor(Date.now()/1e3),c=qi(s,a,n.revoked);return c==="revoked"?{status:c,payload:s,reason:"license revoked"}:{status:c,payload:s}}var yu="BVSALA-REVOC",$f=300,Bf=new TextDecoder;function ku(t,e,n={}){let r=u=>({ok:false,seq:-1,asOf:0,revoked:new Set,reason:u}),o=zi(t,e);if(!o.ok||!o.payloadBytes)return r(o.reason??"bad signature");
|
|
732
|
+
if(o.header?.typ!==yu)return r(`unexpected token type "${String(o.header?.typ??"")}" (want ${yu})`);let i;try{i=JSON.parse(Bf.decode(o.payloadBytes));}catch{return r("payload is not valid JSON")}if(typeof i.
|
|
728
733
|
seq!="number"||typeof i.asOf!="number"||!Array.isArray(i.revoked))return r("malformed revocation payload");let s=n.minSeq??0;if(i.seq<s)return r(`stale/rolled-back list (seq ${i.seq} < ${s})`);let a=n.
|
|
729
|
-
nowSeconds??Math.floor(Date.now()/1e3),c=n.maxSkewSeconds
|
|
734
|
+
nowSeconds??Math.floor(Date.now()/1e3),c=n.maxSkewSeconds??$f;return i.asOf>a+c?r(`asOf too far in the future (${i.asOf} > ${a+c})`):{ok:true,seq:i.seq,asOf:i.asOf,revoked:new Set(i.revoked)}}var Nt=class{_seq=-1;_asOf=0;_lastContactAt=0;set=new Set;get seq(){
|
|
730
735
|
return this._seq}get asOf(){return this._asOf}get lastContactAt(){return this._lastContactAt}markContact(e){e>this._lastContactAt&&(this._lastContactAt=e);}has(e){return this.set.has(e)}snapshot(){return this.
|
|
731
736
|
set}apply(e){if(e.seq<this._seq)return false;let n=this.set.size;for(let i of e.revoked)this.set.add(i);let r=this.set.size>n,o=e.seq>this._seq;return e.seq>this._seq&&(this._seq=e.seq),e.asOf>this._asOf&&
|
|
732
|
-
(this._asOf=e.asOf),r||o}};function
|
|
733
|
-
c?.features??[]),l=()=>{if(s==="empty")return "none";if(!c)return "invalid";let p=
|
|
737
|
+
(this._asOf=e.asOf),r||o}};function Nr(t,e,n){let r=()=>Math.floor((n.now?n.now():Date.now())/1e3),o=n.startedAt??r(),i=Lt(t),s=Fi(i),a=s==="token"?jt(i,e):{signatureValid:false,reason:s},c=a.signatureValid?a.payload:void 0,u=new Set(
|
|
738
|
+
c?.features??[]),l=()=>{if(s==="empty")return "none";if(!c)return "invalid";let p=qi(c,r(),n.revocation.snapshot());if(n.maxStalenessSeconds!=null&&(p==="active"||p==="grace")){let h=c.expires_at+c.grace_days*
|
|
734
739
|
86400,m=Math.min(o,h),g=Math.max(n.revocation.lastContactAt,m);if(r()-g>n.maxStalenessSeconds)return "stale"}return p},d=()=>{let p=l();return p==="active"||p==="grace"};return {isEntitled:p=>d()&&u.has(
|
|
735
|
-
p),isActive:()=>d(),status:l,reason:()=>c?void 0:a.reason,refreshAfter:()=>{if(c)return Math.min(c.expires_at,r()+86400)}}}function
|
|
740
|
+
p),isActive:()=>d(),status:l,reason:()=>c?void 0:a.reason,refreshAfter:()=>{if(c)return Math.min(c.expires_at,r()+86400)}}}function xu(t,e,n){return Nr(t,e,{revocation:new Nt,...n?{now:n}:{}})}var $t={pollIntervalSeconds:900,floorSeconds:300,maxIntervalSeconds:3600,jitterRatio:.1,maxSkewSeconds:300,requestTimeoutMs:3e4},wu=3,Ff=12;function zf(t){let e=t.random??Math.random,n;if(t.consecutiveFailures>
|
|
736
741
|
0){let o=Math.pow(2,Math.min(t.consecutiveFailures,4));n=Math.min(t.maxIntervalSeconds,t.floorSeconds*o);}else {let o=t.refreshAfter!=null?t.refreshAfter-t.nowSeconds:t.pollIntervalSeconds,i=o<0?t.pollIntervalSeconds:
|
|
737
|
-
o;n=Math.min(t.pollIntervalSeconds,Math.max(t.floorSeconds,i));}let r=1+(e()*2-1)*t.jitterRatio;return Math.max(t.floorSeconds,n*r)}var
|
|
742
|
+
o;n=Math.min(t.pollIntervalSeconds,Math.max(t.floorSeconds,i));}let r=1+(e()*2-1)*t.jitterRatio;return Math.max(t.floorSeconds,n*r)}var qf=10,$r=class{constructor(e){this.opts=e;}opts;timer=null;controller=null;consecutiveFailures=0;stopped=false;started=false;lastEtag=null;consecutive304=0;now(){
|
|
738
743
|
return this.opts.nowSeconds?this.opts.nowSeconds():Math.floor(Date.now()/1e3)}resolveFetch(){return this.opts.fetchImpl?this.opts.fetchImpl:typeof fetch<"u"?fetch:void 0}async pollOnce(){let e=this.resolveFetch();
|
|
739
|
-
if(!e){this.
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
opts.pollIntervalSeconds
|
|
744
|
+
if(!e){this.avisar("sin-fetch","[bv-sala] no global fetch available; revocation call-home disabled (offline). License expiry is still enforced from the token."),this.opts.onEvent?.({type:"no-fetch"});
|
|
745
|
+
return}let n=new AbortController;this.controller=n;let r=this.opts.requestTimeoutMs??$t.requestTimeoutMs,o=setTimeout(()=>n.abort(),r);o.unref?.();let i={accept:"application/json"};this.lastEtag&&(i["\
|
|
746
|
+
if-none-match"]=this.lastEtag);try{let s=await e(this.opts.url,{signal:n.signal,headers:i});if(s.status===304){this.consecutiveFailures=0,this.opts.snapshot.markContact(this.now()),this.opts.onEvent?.(
|
|
747
|
+
{type:"unchanged",seq:this.opts.snapshot.seq}),this.consecutive304+=1,this.consecutive304>=qf&&(this.consecutive304=0,this.lastEtag=null);return}if(this.consecutive304=0,!s.ok)throw new Error(`revocat\
|
|
748
|
+
ions HTTP ${s.status}`);let a=s.headers.get("etag"),c=await s.json();if(!c.list)throw new Error("response missing `list`");this.consecutiveFailures=0;let u=ku(c.list,this.opts.publicKeyPem,{minSeq:this.
|
|
749
|
+
opts.snapshot.seq,nowSeconds:this.now(),maxSkewSeconds:this.opts.maxSkewSeconds??$t.maxSkewSeconds});if(!u.ok){let d=u.reason??"rejected";this.opts.onEvent?.({type:"rejected",reason:d}),this.avisar(`r\
|
|
750
|
+
echazada:${d}`,`[bv-sala] the revocation list does NOT verify (${d}). The last known-good list is kept, so revocations ALREADY known still apply, but new ones are not arriving. Check ${this.opts.url}.`);
|
|
751
|
+
return}a&&(this.lastEtag=a),this.opts.snapshot.markContact(this.now());let l=this.opts.snapshot.apply(u);this.opts.onEvent?.(l?{type:"applied",seq:u.seq,size:this.opts.snapshot.snapshot().size}:{type:"\
|
|
752
|
+
unchanged",seq:u.seq});}catch(s){this.consecutiveFailures++,this.opts.onEvent?.({type:"error",error:s}),this.avisarFalloDeRed(s);}finally{clearTimeout(o),this.controller=null;}}callado(){return !!(this.opts.
|
|
753
|
+
silenceWarnings??this.opts.silenciarAvisos)}avisar(e,n){this.callado()||ye(`poller:${this.opts.url}:${e}`,n);}avisarFalloDeRed(e){if(this.callado())return;let n=this.consecutiveFailures;if(n<wu||(n-wu)%
|
|
754
|
+
Ff!==0)return;let r=e instanceof Error?e.message:String(e);console.warn(`[bv-sala] could not reach the revocation server ${n} times in a row (${r}). The license KEEPS working and known revocations sti\
|
|
755
|
+
ll apply, but NEW ones are not arriving. Check egress to ${this.opts.url}.`);}start(){this.started||this.stopped||(this.started=true,this.pollOnce().finally(()=>this.schedule()));}schedule(){if(this.stopped)
|
|
756
|
+
return;let e=zf({refreshAfter:this.opts.getRefreshAfter?.(),nowSeconds:this.now(),consecutiveFailures:this.consecutiveFailures,floorSeconds:this.opts.floorSeconds??$t.floorSeconds,pollIntervalSeconds:this.
|
|
757
|
+
opts.pollIntervalSeconds??$t.pollIntervalSeconds,maxIntervalSeconds:this.opts.maxIntervalSeconds??$t.maxIntervalSeconds,jitterRatio:this.opts.jitterRatio??$t.jitterRatio,...this.opts.random?{random:this.
|
|
753
758
|
opts.random}:{}});this.timer=setTimeout(()=>{this.pollOnce().finally(()=>this.schedule());},e*1e3),this.timer.unref?.();}stop(){this.stopped=true,this.timer&&(clearTimeout(this.timer),this.timer=null),this.
|
|
754
|
-
controller?.abort();}};var
|
|
759
|
+
controller?.abort();}};var xn=class{options;now;flushIntervalMs;maxBatch;maxBuffer;buffer=[];seatId;ci;timer;inflight=null;fallosSeguidos=0;constructor(e){this.options=e,this.now=e.now??(()=>Date.now()),this.flushIntervalMs=
|
|
755
760
|
e.flushIntervalMs??15e3,this.maxBatch=e.maxBatch??50,this.maxBuffer=e.maxBuffer??1e3,this.ci=e.ci??false;}setSeat(e,n){e&&(this.seatId=e),this.ci=n;}record(e){this.buffer.push({report:e,at:this.now()}),this.
|
|
756
761
|
buffer.length>this.maxBuffer&&this.buffer.splice(0,this.buffer.length-this.maxBuffer),this.buffer.length>=this.maxBatch&&this.flush();}start(){this.timer||(this.timer=setInterval(()=>{this.flush();},this.
|
|
757
762
|
flushIntervalMs),this.timer.unref?.());}stop(){this.timer&&(clearInterval(this.timer),this.timer=void 0),this.flush();}async stopAndDrain(e){this.timer&&(clearInterval(this.timer),this.timer=void 0);let n=e??
|
|
758
763
|
Math.ceil(this.maxBuffer/this.maxBatch)+4,r=0;for(let o=0;o<n&&this.buffer.length>0;o++){let i=this.buffer.length;if(await this.flush(),r=this.buffer.length>=i?r+1:0,r>=2)break}}async flush(){if(this.
|
|
759
764
|
inflight)return this.inflight;if(this.buffer.length!==0){this.inflight=this.hacerFlush();try{await this.inflight;}finally{this.inflight=null;}}}async hacerFlush(){let e=this.options.fetchImpl??globalThis.
|
|
760
765
|
fetch;if(!e)return;let n=this.buffer.splice(0,this.maxBatch);try{let r=n.map(i=>this.toWire(i)),o=await e(this.options.url,{method:"POST",headers:{"content-type":"application/json",authorization:`Bear\
|
|
761
|
-
er ${this.options.serviceAccountKey}`,[
|
|
762
|
-
`the server responded ${o.status}`)):o.status===401||o.status===403?(
|
|
763
|
-
|
|
766
|
+
er ${this.options.serviceAccountKey}`,[Nn]:`${this.options.surface??"sdk"}/${Me}`},body:JSON.stringify(r)});o.ok?this.fallosSeguidos=0:o.status>=500?(this.fallosSeguidos++,this.requeue(n),this.avisarDeFallo(
|
|
767
|
+
`the server responded ${o.status}`)):o.status===401||o.status===403?(ye(`metering-auth-${o.status}`,`[bv-sala] usage reporting is being rejected with HTTP ${o.status} at ${this.options.url}. Check 'se\
|
|
768
|
+
rviceAccountKey' (rotated? revoked? from another organization?). Until it works, no usage is reported: the dashboard will say it sees no traffic and billable seats will show zero.`),this.options.onAuthError?.(
|
|
764
769
|
o.status)):(this.fallosSeguidos++,this.avisarDeFallo(o.status===404||o.status===405?`HTTP ${o.status}: the reporting URL looks wrong`:`the server rejected the batch with HTTP ${o.status}`));}catch(r){this.
|
|
765
770
|
fallosSeguidos++,this.requeue(n),this.avisarDeFallo(r instanceof Error?r.message:"network error");}}avisarDeFallo(e){if(this.options.silenceWarnings)return;let n=this.fallosSeguidos;n<3||(n-3)%12!==0||
|
|
766
771
|
console.warn(`[bv-sala] usage reporting has failed ${n} times in a row against ${this.options.url} (${e}). Requests keep working, but usage is not arriving: the dashboard will say it sees no traffic a\
|
|
@@ -771,207 +776,207 @@ tokens.compressedInput,baselineOutputTokens:n.tokens.baselineOutput,actualOutput
|
|
|
771
776
|
eliminatedInputFloorCost!==void 0&&Number.isFinite(n.cost.eliminatedInputFloorCost)&&n.cost.eliminatedInputFloorCost>0&&n.tokens.eliminatedInput>0?{eliminatedInputFloorCost:n.cost.eliminatedInputFloorCost}:
|
|
772
777
|
{},baselineCost:n.cost.baselineEstimate,actualCost:n.cost.actual,netSavings:n.cost.netSavings,...n.cost.basis?{basis:n.cost.basis}:{},...n.cost.basis==="reference"&&n.cache.reference&&/^[A-Za-z0-9._:/-]{1,128}$/.
|
|
773
778
|
test(n.cache.reference.requestId)&&Number.isInteger(n.cache.reference.at)?{referenceRequestId:n.cache.reference.requestId,referenceAt:n.cache.reference.at}:{},...n.attribution?.sessionId?{sessionId:n.
|
|
774
|
-
attribution.sessionId}:{},...n.attribution?.agentId?{agentId:n.attribution.agentId}:{}}}};function
|
|
775
|
-
]";return new RegExp(`-${e}{8,10}-${e}{5}$`).test(t)}function
|
|
776
|
-
t.NETLIFY)}async function
|
|
777
|
-
if(t.KUBERNETES_SERVICE_HOST||
|
|
778
|
-
t.arch,t.execPath,n,e.USER??e.USERNAME??e.LOGNAME,e.HOME??e.USERPROFILE].filter(o=>typeof o=="string"&&o.length>0);return r.length?r.join("|"):void 0}var
|
|
779
|
-
ONS","GITLAB_CI","CIRCLECI","TRAVIS","JENKINS_URL","BUILDKITE","TF_BUILD","TEAMCITY_VERSION","BITBUCKET_BUILD_NUMBER","CODEBUILD_BUILD_ID","HEROKU_TEST_RUN_ID","DRONE"];function
|
|
780
|
-
return false;for(let e of
|
|
779
|
+
attribution.sessionId}:{},...n.attribution?.agentId?{agentId:n.attribution.agentId}:{}}}};function Br(){return globalThis.process}function Vf(t){if(/^[0-9a-f]{12}$/.test(t)||/^\d{1,3}(\.\d{1,3}){3}$/.test(t)||/^ip-\d{1,3}(-\d{1,3}){3}$/i.test(t))return true;let e="[bcdfghjklmnpqrstvwxz2456789\
|
|
780
|
+
]";return new RegExp(`-${e}{8,10}-${e}{5}$`).test(t)}function Uf(t){return !!(t.AWS_LAMBDA_FUNCTION_NAME??t.LAMBDA_TASK_ROOT??t.VERCEL??t.VERCEL_ENV??t.K_SERVICE??t.FUNCTION_TARGET??t.FUNCTIONS_WORKER_RUNTIME??
|
|
781
|
+
t.NETLIFY)}async function Hf(){if(Br()?.execPath)try{let e=await import(["node","os"].join(":")),n=typeof e.hostname=="function"?e.hostname():"";return n.length>0?n:void 0}catch{return}}async function Wf(t,e=Hf){
|
|
782
|
+
if(t.KUBERNETES_SERVICE_HOST||Uf(t))return;let n=t.HOSTNAME??t.COMPUTERNAME??await e();if(!(!n||Vf(n)))return n}async function Jf(){let t=Br();if(!t||!t.env)return;let e=t.env,n=await Wf(e),r=[t.platform,
|
|
783
|
+
t.arch,t.execPath,n,e.USER??e.USERNAME??e.LOGNAME,e.HOME??e.USERPROFILE].filter(o=>typeof o=="string"&&o.length>0);return r.length?r.join("|"):void 0}var Kf=["CI","CONTINUOUS_INTEGRATION","GITHUB_ACTI\
|
|
784
|
+
ONS","GITLAB_CI","CIRCLECI","TRAVIS","JENKINS_URL","BUILDKITE","TF_BUILD","TEAMCITY_VERSION","BITBUCKET_BUILD_NUMBER","CODEBUILD_BUILD_ID","HEROKU_TEST_RUN_ID","DRONE"];function Vi(){let t=Br()?.env;if(!t)
|
|
785
|
+
return false;for(let e of Kf){let n=t[e];if(n&&n!=="false"&&n!=="0")return true}return false}async function Gf(t,e){let n=globalThis.crypto,r=new TextEncoder;if(n?.subtle)try{let s=await n.subtle.importKey("raw",
|
|
781
786
|
r.encode(t),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),a=await n.subtle.sign("HMAC",s,r.encode(e));return [...new Uint8Array(a)].map(c=>c.toString(16).padStart(2,"0")).join("")}catch{}let o=2166136261,i=`${t}\
|
|
782
|
-
|${e}`;for(let s=0;s<i.length;s++)o^=i.charCodeAt(s),o=Math.imul(o,16777619);return (o>>>0).toString(16).padStart(8,"0")}async function
|
|
783
|
-
if(!r)return;let o=await
|
|
784
|
-
new
|
|
785
|
-
ted before any provider request was sent"),this.name="StreamAbortedError",this.requestSent=e;}},
|
|
786
|
-
job=n,this.notSubmitted=r;}};var
|
|
787
|
+
|${e}`;for(let s=0;s<i.length;s++)o^=i.charCodeAt(s),o=Math.imul(o,16777619);return (o>>>0).toString(16).padStart(8,"0")}async function Ui(t){let n=Br()?.env?.BVSALA_SEAT_ID;if(n&&Zf.test(n))return n;let r=await Jf();
|
|
788
|
+
if(!r)return;let o=await Gf(t,r);if(o)return `m-${o.slice(0,32)}`}var Zf=/^[A-Za-z0-9._:/-]{1,128}$/;var Su={inputPer1k:5e-4,outputPer1k:.0015,cachedInputPer1k:5e-5};function Tu(t){return {exactCache:t.exactCache??new zn,semanticCache:t.semanticCache,singleflight:t.singleflight??new qn,resolvers:t.resolvers??pa(),router:t.router??new Kn,toolSelector:t.toolSelector??
|
|
789
|
+
new Zn,formatSelector:t.formatSelector??new er({tokenizer:t.tokenizer}),schemaRegistry:t.schemaRegistry??new tr,constraintBackends:t.constraintBackends??[]}}var ke=class extends Error{requestSent;constructor(e){super(e?"[bvsala] stream aborted: the provider request was cancelled before its final usage; nothing was cached or recorded":"[bvsala] stream abor\
|
|
790
|
+
ted before any provider request was sent"),this.name="StreamAbortedError",this.requestSent=e;}},Fr=class extends Error{job;notSubmitted;constructor(e,n,r,o){super(e,o),this.name="BatchSubmitError",this.
|
|
791
|
+
job=n,this.notSubmitted=r;}};var Yf={"gpt-4.1":false,"gpt-4.1-mini":false,"gpt-4.1-nano":false,"gpt-4o":false,"gpt-4o-mini":false,"gpt-4-turbo":false,"gpt-4":false,"gpt-3.5-turbo":false,"gpt-5":true,"gpt-5-codex":true,"gpt-5-mini":true,"gpt-5-nano":true,"gpt-5.\
|
|
787
792
|
1-codex":true,"gpt-5.1-codex-max":true,"gpt-5.1-codex-mini":true,"gpt-5.1-thinking":true,"gpt-5.2":true,"gpt-5.2-codex":true,"gpt-5.3-codex":true,"gpt-5.4":true,"gpt-5.4-mini":true,"gpt-5.4-nano":true,"gpt-5.5":true,"gpt-5\
|
|
788
793
|
.6-luna":true,"gpt-5.6-sol":true,"gpt-5.6-terra":true,"gpt-6-astra":true,"gpt-6-sol":true,"gpt-6-luna":true,o3:true,"o3-mini":true,"o3-pro":true,"o4-mini":true,"claude-opus-4-5":false,"claude-opus-4-6":false,"claude-opus-4-7":false,
|
|
789
794
|
"claude-opus-4-8":false,"claude-opus-5":true,"claude-opus-5-5":true,"claude-opus-4":false,"claude-sonnet-4-5":false,"claude-sonnet-4-6":false,"claude-sonnet-5":true,"claude-fable-5":true,"claude-fable-5-1":true,"claude-myt\
|
|
790
795
|
hos-5-1":true,"claude-mythos-5":true,"claude-sonnet-4":false,"claude-haiku-4-5":false,"claude-3-5-sonnet":false,"claude-3-5-haiku":false,"claude-3-opus":false,"claude-3-haiku":false,"gemini-3.8-flash":true,"gemini-3.7-flash":true,
|
|
791
|
-
"gemini-3.6-flash":true,"gemini-3.1-flash-lite":true,"gemini-3-flash-preview":true,"gemini-3.5-flash":true,"gemini-3.5-flash-lite":true,"gemini-3.1-pro-preview":true,"gemini-2.5-pro":true,"gemini-2.5-flash":true},
|
|
792
|
-
["claude-opus-4-7","claude-opus-4-8"]),
|
|
793
|
-
/^qwq/,/^qwen3/,/^glm-(4\.[5-9]|[5-9])/,/magistral/];function
|
|
794
|
-
return "unclassified-model";let o=
|
|
796
|
+
"gemini-3.6-flash":true,"gemini-3.1-flash-lite":true,"gemini-3-flash-preview":true,"gemini-3.5-flash":true,"gemini-3.5-flash-lite":true,"gemini-3.1-pro-preview":true,"gemini-2.5-pro":true,"gemini-2.5-flash":true},Qf=new Set(
|
|
797
|
+
["claude-opus-4-7","claude-opus-4-8"]),Xf=[/^o\d/,/^gpt-5/,/^gpt-([6-9]|\d{2})/,/^gpt-oss/,/^gemini-(2\.5|[3-9])/,/^claude-[a-z]+-([5-9]|\d{2})/,/^grok-(3-mini|[4-9])/,/reason/,/think/,/(^|[-_.])r\d($|[-_.])/,
|
|
798
|
+
/^qwq/,/^qwen3/,/^glm-(4\.[5-9]|[5-9])/,/magistral/];function Cu(t){let e=t.lastIndexOf("/"),n=(e>=0?t.slice(e+1):t).toLowerCase();if(Xf.some(i=>i.test(n)))return "reasoning-model";let r=Tt(t);if(r===void 0)
|
|
799
|
+
return "unclassified-model";let o=Yf[r];if(o===true)return "reasoning-model";if(o!==false)return "unclassified-model";if(Qf.has(r))return "temperature-ignored"}var Hi={minimumCacheTokens:1024,cacheReadMultiplier:.5,cacheWriteMultiplier:1},Eu={minimumCacheTokens:1024,cacheReadMultiplier:.1,cacheWriteMultiplier:1.25},em=[["claude-fable-5-1",512],["claude-mytho\
|
|
795
800
|
s-5-1",512],["claude-fable-5",512],["claude-mythos-5",512],["claude-opus-5-5",512],["claude-opus-5",512],["claude-opus-4-7",2048],["claude-opus-4-6",4096],["claude-opus-4-5",4096],["claude-haiku-4-5",
|
|
796
|
-
4096],["claude-3-5-haiku",2048]];function
|
|
797
|
-
n)),c=a*i*r.cacheReadMultiplier+(1-a)*i*r.cacheWriteMultiplier;return s+c}function
|
|
801
|
+
4096],["claude-3-5-haiku",2048]];function Wi(t){for(let[e,n]of em)if(t===e||t.startsWith(`${e}-`))return {...Eu,minimumCacheTokens:n};return Eu}var Ji={minimumCacheTokens:1024,cacheReadMultiplier:.1,cacheWriteMultiplier:1};var Pu={minimumCacheTokens:1024,cacheReadMultiplier:1,cacheWriteMultiplier:1};function zr(t,e,n,r){let o=r.minimumCacheTokens;if(o==null||t<o)return t;let i=Math.min(e,t),s=t-i,a=Math.min(1,Math.max(0,
|
|
802
|
+
n)),c=a*i*r.cacheReadMultiplier+(1-a)*i*r.cacheWriteMultiplier;return s+c}function Ki(t){let e=zr(t.originalTokens,t.stablePrefixTokens,t.prefixHitRate,t.tier),n=zr(t.compressedTokens,0,0,t.tier)+(t.compressorCostTokens??
|
|
798
803
|
0),r=e-n,o=t.tier.minimumCacheTokens,s=o!=null&&t.originalTokens>=o&&t.compressedTokens<o,a;if(r<=0){let c=e<t.originalTokens;a=s?`compressing drops the prompt out of the cacheable tier (${t.compressedTokens}\
|
|
799
804
|
< ${o}) and costs more than it saves`:c?`not compressing is cheaper: the provider's prefix cache already discounts this prompt (${e.toFixed(0)} vs ${n.toFixed(0)} equivalent tokens, at a ${(t.prefixHitRate*
|
|
800
805
|
100).toFixed(0)}% hit rate)`:"the saving does not cover the compressor's cost";}else s?a=`pays off even after losing the prefix cache (${(t.prefixHitRate*100).toFixed(0)}% hit rate)`:a="pays off and do\
|
|
801
|
-
es not touch the cache tier";return {comprimir:r>0,costeComprimido:n,costeSinComprimir:e,ganancia:r,razon:a}}function
|
|
802
|
-
r=1;for(let o=0;o<40;o++){let i=(n+r)/2;e(i)>0?n=i:r=i;}return (n+r)/2}function
|
|
803
|
-
totalTokens?null:1)}var
|
|
804
|
-
1)*e}estado(e){return this.estados.get(e)}decidir(e,n){let r=
|
|
805
|
-
{marcar:true,razon:"marking cannot lose money at this tier (no write premium)",umbral:r,observada:i}:o?.apagada?{marcar:false,razon:`prefix-cache marking OFF: measured hit rate ${
|
|
806
|
+
es not touch the cache tier";return {comprimir:r>0,costeComprimido:n,costeSinComprimir:e,ganancia:r,razon:a}}function Ru(t){let e=o=>Ki({...t,prefixHitRate:o}).ganancia;if(e(0)<=0||e(1)>0)return null;let n=0,
|
|
807
|
+
r=1;for(let o=0;o<40;o++){let i=(n+r)/2;e(i)>0?n=i:r=i;}return (n+r)/2}function tm(t){let e=Ru({originalTokens:t.totalTokens,compressedTokens:t.totalTokens,stablePrefixTokens:t.stablePrefixTokens,tier:t.tier});return e??(zr(t.totalTokens,t.stablePrefixTokens,0,t.tier)<=t.
|
|
808
|
+
totalTokens?null:1)}var qr=class{exploracion;estados=new Map;constructor(e={}){this.exploracion=Math.max(1,e.exploracion??8);}costeDeExploracion(e,n){return this.exploracion*Math.max(0,n.cacheWriteMultiplier-
|
|
809
|
+
1)*e}estado(e){return this.estados.get(e)}decidir(e,n){let r=tm(n),o=this.estados.get(e),i=nm(o);return n.stablePrefixTokens<=0?{marcar:false,razon:"no stable prefix to cache",umbral:r,observada:i}:r==null?
|
|
810
|
+
{marcar:true,razon:"marking cannot lose money at this tier (no write premium)",umbral:r,observada:i}:o?.apagada?{marcar:false,razon:`prefix-cache marking OFF: measured hit rate ${Bt(i)} did not reach the ${Bt(
|
|
806
811
|
r)} break-even, so marking was costing money`,umbral:r,observada:i}:o==null||o.marcadas<this.exploracion?{marcar:true,razon:`exploring the prefix cache (${o?.marcadas??0}/${this.exploracion}); hit rate \
|
|
807
|
-
is only observable on requests that were marked`,umbral:r,observada:i}:i!=null&&i>r?{marcar:true,razon:`measured hit rate ${
|
|
808
|
-
razon:`prefix-cache marking OFF: measured hit rate ${
|
|
809
|
-
tokensLeidos:0,tokensEscritos:0,apagada:false};r.marcadas+=1,r.tokensLeidos+=Math.max(0,n.cachedInputTokens??0),r.tokensEscritos+=Math.max(0,n.cacheWriteInputTokens??0),this.estados.set(e,r);}};function
|
|
810
|
-
if(!t)return null;let e=t.tokensLeidos+t.tokensEscritos;return e<=0?t.marcadas>0?0:null:t.tokensLeidos/e}function
|
|
811
|
-
imul(r^i,1597334677);}return n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)}function
|
|
812
|
-
return
|
|
813
|
-
"";return `${t.role}${t.name??""}${t.toolCallId??""}${e}${t.content}${n}`}function
|
|
814
|
-
let e=0;for(;e<t.length&&t[e].role==="system";)e+=1;return e}function
|
|
815
|
-
tardias:0},"1h":{resueltas:0,reutilizadas:0,tardias:0}}}var
|
|
812
|
+
is only observable on requests that were marked`,umbral:r,observada:i}:i!=null&&i>r?{marcar:true,razon:`measured hit rate ${Bt(i)} beats the ${Bt(r)} break-even`,umbral:r,observada:i}:(o.apagada=true,{marcar:false,
|
|
813
|
+
razon:`prefix-cache marking OFF: measured hit rate ${Bt(i)} did not reach the ${Bt(r)} break-even, so marking was costing money`,umbral:r,observada:i})}registrar(e,n){let r=this.estados.get(e)??{marcadas:0,
|
|
814
|
+
tokensLeidos:0,tokensEscritos:0,apagada:false};r.marcadas+=1,r.tokensLeidos+=Math.max(0,n.cachedInputTokens??0),r.tokensEscritos+=Math.max(0,n.cacheWriteInputTokens??0),this.estados.set(e,r);}};function nm(t){
|
|
815
|
+
if(!t)return null;let e=t.tokensLeidos+t.tokensEscritos;return e<=0?t.marcadas>0?0:null:t.tokensLeidos/e}function Bt(t){return t==null?"n/a":`${(t*100).toFixed(1)}%`}var Ft={"5m":3e5,"30m":18e5,"1h":36e5},Ce=["5m","30m","1h"],_u=20;function Du(t,e){let n=3735928559^e,r=1103547991^e;for(let o=0;o<t.length;o++){let i=t.charCodeAt(o);n=Math.imul(n^i,2654435761),r=Math.
|
|
816
|
+
imul(r^i,1597334677);}return n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)}function Iu(t){
|
|
817
|
+
return Du(t,0).toString(36)+"."+Du(t,2654435769).toString(36)}function rm(t){let e=t.toolCalls?.length?t.toolCalls.map(r=>`${r.id??""}${r.name}${r.arguments}`).join(""):"",n=t.isError===true?"error":
|
|
818
|
+
"";return `${t.role}${t.name??""}${t.toolCallId??""}${e}${t.content}${n}`}function Au(t,e){let n=[Iu(`bvsala-prefijo\0${t}`)];for(let r of e)n.push(Iu(`${n[n.length-1]}${rm(r)}`));return n}function ts(t){
|
|
819
|
+
let e=0;for(;e<t.length&&t[e].role==="system";)e+=1;return e}function Gi(){return {"5m":0,"30m":0,"1h":0}}function Zi(){return {"5m":{resueltas:0,reutilizadas:0,tardias:0},"30m":{resueltas:0,reutilizadas:0,
|
|
820
|
+
tardias:0},"1h":{resueltas:0,reutilizadas:0,tardias:0}}}var Vr=1,Ou=1440*6e4;function ns(t){return `bvsala:cache-breakpoints:v${Vr}:${t}`}var qt=class{clases=new Map;porHuella=new Map;maxPorClase;maxClases;prediccionesMinimas;confirmacionMinima;memoria;constructor(e={}){
|
|
816
821
|
this.maxPorClase=Math.max(16,e.maxPorClase??2048),this.maxClases=Math.max(1,e.maxClases??256),this.prediccionesMinimas=Math.max(1,e.prediccionesMinimas??8),this.confirmacionMinima=e.confirmacionMinima??
|
|
817
822
|
.5,this.memoria=Math.max(32,e.memoria??512);}observar(e,n,r){let o=this.estadoDe(e);this.vencer(o,r);let i=null;for(let s=1;s<n.length;s++){let a=this.porHuella.get(n[s]);if(!a||a.descartada||a.clase!==
|
|
818
|
-
e||a.indice!==s)continue;let c=Math.max(0,r-a.escrita);c
|
|
823
|
+
e||a.indice!==s)continue;let c=Math.max(0,r-a.escrita);c>Ft["1h"]||(this.resolverReutilizada(o,a,c),i={tipo:a.tipo,indice:s,huecoMs:c,...a.posicionDelProveedor!==void 0?{posicionDelProveedor:a.posicionDelProveedor}:
|
|
819
824
|
{},...a.ttl?{ttl:a.ttl}:{},...a.idDelProveedor?{idDelProveedor:a.idDelProveedor}:{}});}return i}registrar(e){let n=this.estadoDe(e.clase);this.vencer(n,e.enviada);let r=e.enviada;for(let o of ["S","H","\
|
|
820
825
|
T"]){let i=e.tramos[o];if(i===void 0||i<=0||i>=e.huellas.length)continue;if(n.cola.length-n.cabeza>=this.maxPorClase)break;let s=e.huellas[i],a=e.ultimoMarcado===o,c={clase:e.clase,tipo:o,huella:s,indice:i,
|
|
821
826
|
escrita:r,contadas:0,descartada:false,...a&&e.posicionDelProveedor!=null&&e.posicionDelProveedor>0?{posicionDelProveedor:e.posicionDelProveedor}:{},...a&&e.ttl?{ttl:e.ttl}:{},...a&&e.idDelProveedor?{idDelProveedor:e.
|
|
822
827
|
idDelProveedor}:{}},u=this.porHuella.get(s);u&&u.contadas!==7&&this.descartar(u),this.porHuella.set(s,c),n.cola.push(c);for(let l of Ce)n.pendientes[o][l]+=1;}}verificar(e,n,r){if(n.posicionDelProveedor===
|
|
823
|
-
void 0)return;let o=n.ttl??"5m";if(n.huecoMs
|
|
828
|
+
void 0)return;let o=n.ttl??"5m";if(n.huecoMs>Ft[o])return;let i=this.estadoDe(e);i.predichas+=1,r>=n.posicionDelProveedor*.98&&(i.confirmadas+=1),i.predichas>=this.prediccionesMinimas&&i.confirmadas/i.
|
|
824
829
|
predichas<this.confirmacionMinima&&(i.apagada=true);}estadistica(e,n){let r=this.estadoDe(e);this.vencer(r,n);let o=(i,s)=>({pendientes5m:s["5m"],pendientes30m:s["30m"],pendientes1h:s["1h"],muestras5m:i["\
|
|
825
|
-
5m"].resueltas,muestras30m:i["30m"].resueltas,muestras1h:i["1h"].resueltas,k5m:i["5m"].reutilizadas,k30m:i["30m"].reutilizadas,k1h:i["1h"].reutilizadas,kTardias:i["1h"].tardias,en5m:
|
|
826
|
-
i["30m"]),en1h:
|
|
830
|
+
5m"].resueltas,muestras30m:i["30m"].resueltas,muestras1h:i["1h"].resueltas,k5m:i["5m"].reutilizadas,k30m:i["30m"].reutilizadas,k1h:i["1h"].reutilizadas,kTardias:i["1h"].tardias,en5m:Yi(i["5m"]),en30m:Yi(
|
|
831
|
+
i["30m"]),en1h:Yi(i["1h"])});return {S:o(r.contadores.S,r.pendientes.S),H:o(r.contadores.H,r.pendientes.H),T:o(r.contadores.T,r.pendientes.T),predichas:r.predichas,confirmadas:r.confirmadas,apagada:r.apagada}}get vivas(){
|
|
827
832
|
return this.porHuella.size}exportarClase(e){let r=this.clases.get(e)??this.estadoVacio(),o=r.cabeza,i=c=>Ce.map(u=>{let l=r.contadores[c][u];return [l.resueltas,l.reutilizadas,l.tardias]}),s=c=>Ce.map(
|
|
828
|
-
u=>r.pendientes[c][u]),a={v:
|
|
833
|
+
u=>r.pendientes[c][u]),a={v:Vr,clase:e,c:{S:i("S"),H:i("H"),T:i("T")},p:{S:s("S"),H:s("H"),T:s("T")},e:r.cola.slice(o).map(c=>c.descartada?["",c.tipo,c.indice,c.escrita,c.contadas,1,null,null,null]:[c.
|
|
829
834
|
huella,c.tipo,c.indice,c.escrita,c.contadas,0,c.posicionDelProveedor??null,c.ttl??null,c.idDelProveedor??null]),cur:Ce.map(c=>Math.max(0,r.cursores[c]-o)),pr:r.predichas,co:r.confirmadas,off:r.apagada};
|
|
830
835
|
return JSON.stringify(a)}importarClase(e,n){let r=n;if(typeof n=="string")try{r=JSON.parse(n);}catch{return "invalid"}let o=r;if(o===null||typeof o!="object")return "invalid";if(typeof o.v=="number"&&o.v>
|
|
831
|
-
|
|
832
|
-
delete(c.huella);}this.clases.delete(e);}this.clases.set(e,i);for(let a of i.cola)a.descartada||this.porHuella.set(a.huella,a);return "loaded"}leerInstantanea(e,n){if(e.v!==
|
|
836
|
+
Vr)return "newer";let i=this.leerInstantanea(o,e);if(!i)return "invalid";let s=this.clases.get(e);if(s){for(let a=s.cabeza;a<s.cola.length;a++){let c=s.cola[a];this.porHuella.get(c.huella)===c&&this.porHuella.
|
|
837
|
+
delete(c.huella);}this.clases.delete(e);}this.clases.set(e,i);for(let a of i.cola)a.descartada||this.porHuella.set(a.huella,a);return "loaded"}leerInstantanea(e,n){if(e.v!==Vr||e.clase!==n)return null;let r=i=>typeof i==
|
|
833
838
|
"number"&&Number.isInteger(i)&&i>=0,o=this.estadoVacio();for(let i of ["S","H","T"]){let s=e.c?.[i],a=e.p?.[i];if(!Array.isArray(s)||s.length!==3||!Array.isArray(a)||a.length!==3)return null;for(let c=0;c<
|
|
834
839
|
3;c++){let u=s[c];if(!Array.isArray(u)||u.length!==3||!u.every(r))return null;let[l,d,p]=u;if(d>l||p>d||!r(a[c]))return null;let h=Ce[c];o.contadores[i][h]={resueltas:l,reutilizadas:d,tardias:p},o.pendientes[i][h]=
|
|
835
840
|
a[c];}}if(!Array.isArray(e.e)||e.e.length>this.maxPorClase)return null;for(let i of e.e){if(!Array.isArray(i)||i.length!==9)return null;let[s,a,c,u,l,d,p,h,m]=i;if(typeof s!="string"||d===0&&s===""||a!==
|
|
836
841
|
"S"&&a!=="H"&&a!=="T"||!r(c)||c===0||typeof u!="number"||!Number.isFinite(u)||!r(l)||l>7||d!==0&&d!==1||p!==null&&!(typeof p=="number"&&Number.isFinite(p)&&p>0)||h!==null&&h!=="5m"&&h!=="1h"||m!==null&&
|
|
837
842
|
!(typeof m=="string"&&m!==""&&m.length<=256))return null;o.cola.push({clase:n,tipo:a,huella:s,indice:c,escrita:u,contadas:l,descartada:d===1,...p!==null?{posicionDelProveedor:p}:{},...h!==null?{ttl:h}:
|
|
838
843
|
{},...m!==null?{idDelProveedor:m}:{}});}if(!Array.isArray(e.cur)||e.cur.length!==3)return null;for(let i=0;i<3;i++){let s=e.cur[i];if(!r(s)||s>o.cola.length)return null;o.cursores[Ce[i]]=s;}return !r(e.pr)||
|
|
839
|
-
!r(e.co)||e.co>e.pr||typeof e.off!="boolean"?null:(o.predichas=e.pr,o.confirmadas=e.co,o.apagada=e.off,o)}estadoVacio(){return {contadores:{S:
|
|
844
|
+
!r(e.co)||e.co>e.pr||typeof e.off!="boolean"?null:(o.predichas=e.pr,o.confirmadas=e.co,o.apagada=e.off,o)}estadoVacio(){return {contadores:{S:Zi(),H:Zi(),T:Zi()},pendientes:{S:Gi(),H:Gi(),T:Gi()},cola:[],
|
|
840
845
|
cabeza:0,cursores:{"5m":0,"30m":0,"1h":0},predichas:0,confirmadas:0,apagada:false}}estadoDe(e){let n=this.clases.get(e);if(n)return this.clases.delete(e),this.clases.set(e,n),n;for(n=this.estadoVacio(),this.
|
|
841
846
|
clases.set(e,n);this.clases.size>this.maxClases;){let[r,o]=this.clases.entries().next().value;for(let i=o.cabeza;i<o.cola.length;i++){let s=o.cola[i];this.porHuella.get(s.huella)===s&&this.porHuella.delete(
|
|
842
847
|
s.huella);}this.clases.delete(r);}return n}descartar(e){let n=this.clases.get(e.clase);Ce.forEach((r,o)=>{e.contadas&1<<o||(n&&(n.pendientes[e.tipo][r]=Math.max(0,n.pendientes[e.tipo][r]-1)),e.contadas|=
|
|
843
848
|
1<<o);}),e.descartada=true;}resolverReutilizada(e,n,r){Ce.forEach((o,i)=>{if(n.contadas&1<<i)return;e.pendientes[n.tipo][o]=Math.max(0,e.pendientes[n.tipo][o]-1);let s=e.contadores[n.tipo][o];s.resueltas+=
|
|
844
|
-
1,r
|
|
845
|
-
e.cabeza);for(;i<e.cola.length&&n-e.cola[i].escrita
|
|
849
|
+
1,r<=Ft[o]&&(s.reutilizadas+=1),o==="1h"&&r<=Ft["1h"]&&r>Ft["5m"]&&(s.tardias+=1),n.contadas|=1<<i;}),this.reducirSiHaceFalta(e.contadores[n.tipo]);}vencer(e,n){for(Ce.forEach((r,o)=>{let i=Math.max(e.cursores[r],
|
|
850
|
+
e.cabeza);for(;i<e.cola.length&&n-e.cola[i].escrita>Ft[r];){let s=e.cola[i];!s.descartada&&!(s.contadas&1<<o)&&(e.pendientes[s.tipo][r]=Math.max(0,e.pendientes[s.tipo][r]-1),e.contadores[s.tipo][r].resueltas+=
|
|
846
851
|
1,this.reducirSiHaceFalta(e.contadores[s.tipo])),s.contadas|=1<<o,i+=1;}e.cursores[r]=i;});e.cabeza<e.cursores["1h"];){let r=e.cola[e.cabeza];this.porHuella.get(r.huella)===r&&this.porHuella.delete(r.huella),
|
|
847
852
|
e.cabeza+=1;}if(e.cabeza>1024&&e.cabeza*2>e.cola.length){e.cola.splice(0,e.cabeza);for(let r of Ce)e.cursores[r]-=e.cabeza;e.cabeza=0;}}reducirSiHaceFalta(e){for(let n of Ce)e[n].resueltas>=this.memoria&&
|
|
848
|
-
(e[n].resueltas=Math.floor(e[n].resueltas/2),e[n].reutilizadas=Math.floor(e[n].reutilizadas/2),e[n].tardias=Math.floor(e[n].tardias/2));}};function
|
|
849
|
-
0}function
|
|
850
|
-
0,i-s),Math.min(1,i+s)]}function
|
|
851
|
-
o=t.primaDeUnaHora!=null&&t.primaDeUnaHora>r?t.primaDeUnaHora:null,i=
|
|
853
|
+
(e[n].resueltas=Math.floor(e[n].resueltas/2),e[n].reutilizadas=Math.floor(e[n].reutilizadas/2),e[n].tardias=Math.floor(e[n].tardias/2));}};function Yi(t){return t.resueltas>0?t.reutilizadas/t.resueltas:
|
|
854
|
+
0}function Qi(t,e){let n=t-e;return n>0?Math.max(0,(t-1)/n):1}function Xi(t,e,n=1.96){if(e<=0)return [0,1];let r=t/e,o=n*n,i=(r+o/(2*e))/(1+o/e),s=n*Math.sqrt(r*(1-r)/e+o/(4*e*e))/(1+o/e);return [Math.max(
|
|
855
|
+
0,i-s),Math.min(1,i+s)]}function es(t,e,n,r,o){return e+n>=o&&Xi(t,e+n)[0]>r?true:e>=o&&Xi(t,e)[1]<r?false:null}function Mu(t){let e=t.muestrasMinimas??5,n=t.tramo.cacheReadMultiplier,r=t.tramo.cacheWriteMultiplier,
|
|
856
|
+
o=t.primaDeUnaHora!=null&&t.primaDeUnaHora>r?t.primaDeUnaHora:null,i=Qi(r,n),s=o!=null?Qi(o,n):null,a={historial:true,cola:false,ttl:"5m",razon:"",equilibrio:i};if(t.estadistica.apagada)return {...a,razon:`\
|
|
852
857
|
fixed placement: the provider's counter confirmed only ${t.estadistica.confirmadas} of ${t.estadistica.predichas} cache reads the layer predicted for this traffic, so the layer stopped trusting its ow\
|
|
853
|
-
n reuse measurement here`};let c=b=>({en5m:
|
|
858
|
+
n reuse measurement here`};let c=b=>({en5m:es(b.k5m,b.muestras5m,b.pendientes5m,i,e),en1h:s!=null?es(b.k1h,b.muestras1h,b.pendientes1h,s,e):null}),u=[],l=t.estadistica.H,d=t.estadistica.T,p=c(l),h=c(d),
|
|
854
859
|
m=b=>`${b.k5m}/${b.muestras5m} in 5 min, ${b.k1h}/${b.muestras1h} in 1 h`,g=true;t.hayHistorial&&(p.en5m===true||p.en1h===true?u.push(`history re-sent (${m(l)}): above break-even, marked`):p.en5m===false?(g=false,
|
|
855
|
-
u.push(`history re-sent only ${m(l)} (break-even ${
|
|
860
|
+
u.push(`history re-sent only ${m(l)} (break-even ${zt(i)}): breakpoint moved back to the system header, no write premium on a prefix nobody re-reads`)):u.push(`history: not conclusive yet (${m(l)}), f\
|
|
856
861
|
ixed placement kept`));let f=h.en5m===true||h.en1h===true;u.push(f?`continued ${m(d)}: above break-even, tail marked so the next turn reads this whole prompt`:h.en5m===false?`continued only ${m(d)} (break-ev\
|
|
857
|
-
en ${
|
|
858
|
-
tokens.T:b==="H"?t.tokens.H:t.tokens.S;if(k.en5m!==true&&k.en1h===true)v="1h",u.push(`1h TTL: re-sent ${m(y)} (1 h break-even ${
|
|
859
|
-
0){let[w]=
|
|
860
|
-
tokens then beats the extra premium on the ${
|
|
861
|
-
t.tramo.cacheReadMultiplier),r=t.estadistica.T,o=t.estadistica.H,i=(a,c,u)=>
|
|
862
|
+
en ${zt(i)}): tail not marked`:`tail: not conclusive yet (${m(d)}), not marked`);let v="5m";if(o!=null){let b=f?"T":g&&t.hayHistorial?"H":"S",y=t.estadistica[b],k=b==="T"?h:b==="H"?p:c(y),T=b==="T"?t.
|
|
863
|
+
tokens.T:b==="H"?t.tokens.H:t.tokens.S;if(k.en5m!==true&&k.en1h===true)v="1h",u.push(`1h TTL: re-sent ${m(y)} (1 h break-even ${zt(s)}), while 5 min does not pay`);else if(k.en5m===true&&y.muestras1h>=e&&T>
|
|
864
|
+
0){let[w]=Xi(y.kTardias,y.muestras1h+y.pendientes1h),P=Math.max(0,T-t.lecturaPrevista()),x=w*(r-n)*T,S=(o-r)*P;x>S&&(v="1h",u.push(`1h TTL: at least ${zt(w)} of re-sends come after 5 min; re-reading ${T}\
|
|
865
|
+
tokens then beats the extra premium on the ${P} written now`));}}return {historial:g,cola:f,ttl:v,razon:u.join("; "),equilibrio:i}}function Lu(t){let e=t.muestrasMinimas??5,n=Qi(t.tramo.cacheWriteMultiplier,
|
|
866
|
+
t.tramo.cacheReadMultiplier),r=t.estadistica.T,o=t.estadistica.H,i=(a,c,u)=>es(a,c,u,n,e)===false;if(t.estadistica.apagada)return {explicita:false,historial:true,razon:`provider default kept: the provider's co\
|
|
862
867
|
unter confirmed only ${t.estadistica.confirmadas} of ${t.estadistica.predichas} predicted cache reads`,equilibrio:n};if(!i(r.k30m,r.muestras30m,r.pendientes30m))return {explicita:false,historial:true,razon:`\
|
|
863
|
-
provider default kept: continued ${r.k30m}/${r.muestras30m} within 30 min, not clearly below the ${
|
|
864
|
-
explicita:true,historial:s,razon:`explicit mode: continued only ${r.k30m}/${r.muestras30m} within 30 min (break-even ${
|
|
865
|
-
istory":"system header"}`,equilibrio:n}}function
|
|
866
|
-
if(!t||!e)return null;let r=
|
|
868
|
+
provider default kept: continued ${r.k30m}/${r.muestras30m} within 30 min, not clearly below the ${zt(n)} break-even`,equilibrio:n};let s=!t.hayHistorial||!i(o.k30m,o.muestras30m,o.pendientes30m);return {
|
|
869
|
+
explicita:true,historial:s,razon:`explicit mode: continued only ${r.k30m}/${r.muestras30m} within 30 min (break-even ${zt(n)}), so the question is not written; breakpoint at the ${s?"end of the stable h\
|
|
870
|
+
istory":"system header"}`,equilibrio:n}}function zt(t){return `${(t*100).toFixed(1)}%`}var ju=.5;function om(t,e){return e.inputPer1k<=0||e.outputPer1k<=0?null:Math.max(t.inputPer1k/e.inputPer1k,t.outputPer1k/e.outputPer1k)}function im(t){return 1-t}function sm(t,e=ju){return e-t}function Nu(t,e,n=ju){
|
|
871
|
+
if(!t||!e)return null;let r=om(t,e);if(r==null||!Number.isFinite(r))return null;let o=im(r),i=sm(r,n),s=i>0,a=c=>`${(c*100).toFixed(1)}%`;return {r,equilibrio:o,escaladoMaximo:i,viable:s,razon:s?`the c\
|
|
867
872
|
heap model costs ${a(r)} of the strong one, so routing pays off while escalations stay under ${a(i)} (it stops saving money at ${a(o)})`:`the cheap model costs ${a(r)} of the strong one: even with zer\
|
|
868
|
-
o escalations it cannot reach the ${a(n)} target, so this pair is not worth the quality risk`}}var
|
|
869
|
-
ude-opus-4":"claude-haiku-4-5","claude-sonnet-4":"claude-haiku-4-5","claude-3-opus":"claude-3-haiku","claude-3-5-sonnet":"claude-3-5-haiku"};function
|
|
870
|
-
length||e.localeCompare(n))}function
|
|
871
|
-
for(let n of
|
|
872
|
-
e)}decidir(e,n){let r=this.estados.get(e),o=
|
|
873
|
+
o escalations it cannot reach the ${a(n)} target, so this pair is not worth the quality risk`}}var rs={"gpt-4":"gpt-4o","gpt-4-turbo":"gpt-4o-mini","gpt-4o":"gpt-4o-mini","gpt-4.1":"gpt-4.1-mini","cla\
|
|
874
|
+
ude-opus-4":"claude-haiku-4-5","claude-sonnet-4":"claude-haiku-4-5","claude-3-opus":"claude-3-haiku","claude-3-5-sonnet":"claude-3-5-haiku"};function am(t){return Object.keys(t).sort((e,n)=>n.length-e.
|
|
875
|
+
length||e.localeCompare(n))}function $u(t,e=rs){if(!t)return null;let n=t.lastIndexOf("/"),r=n>=0?t.slice(0,n+1):"",o=n>=0?t.slice(n+1):t,i=e[t]??e[o]??cm(o,e);return !i||i===o?null:r+i}function cm(t,e){
|
|
876
|
+
for(let n of am(e))if(t.startsWith(n)&&t.charAt(n.length)==="-"&&/^\d{4}/.test(t.slice(n.length+1)))return e[n]}var Ur=class{exploracion;estados=new Map;constructor(e={}){this.exploracion=Math.max(1,e.exploracion??20);}costeDeExploracion(e){return this.exploracion*Math.max(0,e)}estado(e){return this.estados.get(
|
|
877
|
+
e)}decidir(e,n){let r=this.estados.get(e),o=um(r),i=r?.enrutadas??0,s=a=>a==null?"n/a":`${(a*100).toFixed(1)}%`;return r?.apagada?{enrutar:false,razon:`model cascade OFF for this workload: measured escal\
|
|
873
878
|
ation rate ${s(o)} is at or above the ${s(n.equilibrio)} break-even, so routing was costing money`,observada:o,muestras:i}:i<this.exploracion?{enrutar:true,razon:`measuring this workload (${i}/${this.exploracion}\
|
|
874
879
|
); the escalation rate is only observable on requests that were actually routed`,observada:o,muestras:i}:o!=null&&o<n.equilibrio?{enrutar:true,razon:`measured escalation rate ${s(o)} stays under the ${s(
|
|
875
880
|
n.equilibrio)} break-even (this is a MONEY check, not a quality one)`,observada:o,muestras:i}:(r&&(r.apagada=true),{enrutar:false,razon:`model cascade OFF for this workload: measured escalation rate ${s(o)}\
|
|
876
881
|
is at or above the ${s(n.equilibrio)} break-even, so routing was costing money`,observada:o,muestras:i})}registrar(e,n){let r=this.estados.get(e)??{enrutadas:0,escaladas:0,apagada:false};r.enrutadas+=1,
|
|
877
|
-
n&&(r.escaladas+=1),this.estados.set(e,r);}};function
|
|
878
|
-
for(let r of
|
|
882
|
+
n&&(r.escaladas+=1),this.estados.set(e,r);}};function um(t){return !t||t.enrutadas<=0?null:t.escaladas/t.enrutadas}var lm=["enum","pattern","maximum","minimum","maxLength","minLength","maxItems","minItems"];function dm(t){return t?os(t)?"value-constrained":"structural":"none"}function os(t,e=0){if(e>12)return false;let n=t;
|
|
883
|
+
for(let r of lm)if(n[r]!==void 0)return true;if(t.properties){for(let r of Object.values(t.properties))if(os(r,e+1))return true}return !!(t.items&&os(t.items,e+1))}function Bu(t){let e=dm(t.schema),n=(t.tools??
|
|
879
884
|
[]).filter(r=>r.risk==="write"||r.risk==="destructive");return n.length>0?{elegible:false,fuerza:e,razon:`the request carries ${n.length} write/destructive tool(s); a cheaper model's choice of ACTION can\
|
|
880
885
|
not be checked by an output contract, so the cascade never applies here`}:e==="none"?{elegible:false,fuerza:e,razon:"no output contract: the deterministic verifier would accept anything, which would repo\
|
|
881
886
|
rt a perfect escalation rate over answers nobody checked. Declare `response.schema` to route"}:{elegible:true,fuerza:e,razon:e==="value-constrained"?"output contract carries value constraints, so wrong \
|
|
882
|
-
content has somewhere to fall":"output contract checks shape only: a well-formed answer with wrong content passes"}}function
|
|
887
|
+
content has somewhere to fall":"output contract checks shape only: a well-formed answer with wrong content passes"}}function is(t){let e=[];if(e.push("non-empty"),t.texto.trim()==="")return {acepta:false,
|
|
883
888
|
motivo:"the cheap model returned an empty answer",comprobaciones:e};if(e.push("final-answer"),t.pidioHerramientas)return {acepta:false,motivo:"the cheap model asked to run tools: that is an action, not a \
|
|
884
889
|
final answer, and the output contract cannot check it",comprobaciones:e};if(e.push("not-truncated"),t.finishReason==="length")return {acepta:false,motivo:"the cheap model's answer was cut off by maxOutput\
|
|
885
890
|
Tokens",comprobaciones:e};if(e.push("output-contract"),!t.schema)return {acepta:false,motivo:"no output contract to verify against",comprobaciones:e};let n;try{n=JSON.parse(t.texto);}catch{return {acepta:false,
|
|
886
|
-
motivo:"the cheap model's answer is not valid JSON",comprobaciones:e}}let r=
|
|
887
|
-
acepta:false,motivo:`the cheap model's answer does not satisfy the output contract (${r.errors.slice(0,3).map(i=>`${i.path}: ${i.message}`).join("; ")})`,comprobaciones:e}}function
|
|
888
|
-
JSON.parse(t),r=JSON.parse(e);}catch{return {divergen:false,motivo:"not comparable (at least one answer is not JSON)"}}let o=
|
|
889
|
-
le facts (free prose only)"}:
|
|
890
|
-
of a false valid \u2014 it is a reason to look, never a verdict"}}var
|
|
891
|
-
an")n.push(`b:${t}`);else if(typeof t=="string"){let r=t.trim();r.length>0&&r.length<=
|
|
892
|
-
t")for(let r of Object.keys(t).sort())
|
|
893
|
-
, because a number nobody can check is not a number at all but a promise, and this product exists to stop making those. ";function
|
|
894
|
-
0,t)}function
|
|
895
|
-
"object":t.items?"array":void 0)){case "string":return t.maxLength!=null?{valor:
|
|
896
|
-
{valor:Math.trunc(t.maximum)}:void 0;case "number":return;case "array":{if(t.maxItems==null||!t.items)return;let n=
|
|
897
|
-
ject":{if(t.additionalProperties!==false||!t.properties)return;let n={};for(let[r,o]of Object.entries(t.properties)){let i=
|
|
898
|
-
t);return e?JSON.stringify(e.valor):null}function
|
|
899
|
-
let o=r.minimumSavingsTokens??
|
|
891
|
+
motivo:"the cheap model's answer is not valid JSON",comprobaciones:e}}let r=de(n,t.schema);return r.valid?{acepta:true,motivo:"the cheap model's answer satisfies the output contract",comprobaciones:e}:{
|
|
892
|
+
acepta:false,motivo:`the cheap model's answer does not satisfy the output contract (${r.errors.slice(0,3).map(i=>`${i.path}: ${i.message}`).join("; ")})`,comprobaciones:e}}function Fu(t,e){let n,r;try{n=
|
|
893
|
+
JSON.parse(t),r=JSON.parse(e);}catch{return {divergen:false,motivo:"not comparable (at least one answer is not JSON)"}}let o=Hr(n),i=Hr(r);return o.length===0&&i.length===0?{divergen:false,motivo:"no comparab\
|
|
894
|
+
le facts (free prose only)"}:fm(o,i)?{divergen:false,motivo:"the hard values agree"}:{divergen:true,motivo:"both answers satisfy the contract but disagree on at least one hard value; this is the signature \
|
|
895
|
+
of a false valid \u2014 it is a reason to look, never a verdict"}}var pm=40;function Hr(t,e=0,n=[]){if(e>12)return n;if(typeof t=="number"&&Number.isFinite(t))n.push(`n:${t}`);else if(typeof t=="boole\
|
|
896
|
+
an")n.push(`b:${t}`);else if(typeof t=="string"){let r=t.trim();r.length>0&&r.length<=pm&&n.push(`s:${r.toLowerCase()}`);}else if(Array.isArray(t))for(let r of t)Hr(r,e+1,n);else if(t&&typeof t=="objec\
|
|
897
|
+
t")for(let r of Object.keys(t).sort())Hr(t[r],e+1,n);return n.sort()}function fm(t,e){if(t.length!==e.length)return false;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return false;return true}var zu="the layer measures both worlds against the same provider so that no baseline can be fabricated, keeps one ledger per lever, and refuses to publish a saving whose answer got worse along the way\
|
|
898
|
+
, because a number nobody can check is not a number at all but a promise, and this product exists to stop making those. ";function mm(t){if(t<=0)return "";let e=zu;for(;e.length<t;)e+=zu;return e.slice(
|
|
899
|
+
0,t)}function hm(t){let e=t[0],n=-1;for(let r of t){let o=JSON.stringify(r)?.length??0;o>n&&(n=o,e=r);}return e}function ss(t){if(t.enum&&t.enum.length>0)return {valor:hm(t.enum)};switch(t.type??(t.properties?
|
|
900
|
+
"object":t.items?"array":void 0)){case "string":return t.maxLength!=null?{valor:mm(t.maxLength)}:void 0;case "boolean":return {valor:false};case "null":return {valor:null};case "integer":return t.maximum!=null?
|
|
901
|
+
{valor:Math.trunc(t.maximum)}:void 0;case "number":return;case "array":{if(t.maxItems==null||!t.items)return;let n=ss(t.items);return n?{valor:Array.from({length:t.maxItems},()=>n.valor)}:void 0}case "ob\
|
|
902
|
+
ject":{if(t.additionalProperties!==false||!t.properties)return;let n={};for(let[r,o]of Object.entries(t.properties)){let i=ss(o);if(!i)return;n[r]=i.valor;}return {valor:n}}default:return}}function gm(t){let e=ss(
|
|
903
|
+
t);return e?JSON.stringify(e.valor):null}function qu(t,e){let n=gm(t);return n===null?null:e(n)}var Wr=16,Vu=64,bm=8,vm="measured live on the same triage contract, 8 paired reps each: gpt-4o-mini wrote 16 tokens MORE (-8.2% net) and gpt-4o wrote 3 tokens FEWER (+8.0% net)";function Uu(t,e,n,r={}){
|
|
904
|
+
let o=r.minimumSavingsTokens??bm,i;try{if(us(t,0))return {applied:!1,reason:"schema has a pattern; no witness can be synthesised to prove the round trip"};i=ds(t,0);}catch(O){return {applied:false,reason:O instanceof
|
|
900
905
|
RangeError?"schema too deep or cyclic":"schema could not be compacted"}}if(i.renamed===0&&i.coded===0)return {applied:false,reason:"nothing to compact (no renameable keys, no codeable enums)"};let s=i.node;
|
|
901
|
-
if(!s)return {applied:false,reason:"nothing to compact"};let a=
|
|
902
|
-
i.compact)),h=d-p,m=Number.POSITIVE_INFINITY;for(let
|
|
906
|
+
if(!s)return {applied:false,reason:"nothing to compact"};let a=O=>Vt(O,s,true),c=O=>Vt(O,s,false),u=Tm(t),l=ym(t,i.compact,s,u);if(!l.ok)return {applied:false,reason:l.reason};let d=e(JSON.stringify(t)),p=e(JSON.stringify(
|
|
907
|
+
i.compact)),h=d-p,m=Number.POSITIVE_INFINITY;for(let O of u){let R=e(JSON.stringify(O))-e(JSON.stringify(a(O)));R<m&&(m=R);}Number.isFinite(m)||(m=0);let g=O=>O/1e3*n.inputPer1k,f=O=>O/1e3*n.outputPer1k,
|
|
903
908
|
v=g(o),b=n.outputPer1k>0?(o-h)*n.inputPer1k/n.outputPer1k:Number.NEGATIVE_INFINITY,y=Number.isFinite(b)?b.toFixed(1):"any",k=n.inputPer1k>0?`${(n.outputPer1k/n.inputPer1k).toFixed(1)}x`:"more than",T=r.
|
|
904
909
|
evidencia;if(T==null)return {applied:false,reason:`no measured output delta for this model, so the codebook is not applied. Short field names change how much the model WRITES, and that is a property of th\
|
|
905
|
-
e model, not of the schema: ${
|
|
910
|
+
e model, not of the schema: ${vm}. Here the compact contract saves ${h} input tokens and output is billed ${k} input, so it only pays while the output delta stays above ${y} tokens. Measure yours (ben\
|
|
906
911
|
chmarks/ab-live.ts) and pass it in`};let w=T.deltaTokens;if(w<0)return {applied:false,reason:`the measured output delta is ${w} tokens: this model writes MORE from a compact contract (${T.procedencia}). T\
|
|
907
|
-
he input win is capped by the size of the schema while the output loss grows with the answer and is billed ${k} input, so no schema is big enough to buy it back`};let
|
|
908
|
-
n.inputPer1k:h,
|
|
909
|
-
ut tokens ($${v.toFixed(9)}): the compact contract saves ${h} input tokens and the measured output delta is ${
|
|
910
|
-
1)} input tokens equivalent): the compact contract saves ${h} input tokens and the measured output delta is ${
|
|
911
|
-
codedEnumValues:i.coded,schemaTokensOriginal:d,schemaTokensCompact:p,modelledShapeSavingTokens:m,measuredOutputDeltaTokens:w,outputDeltaProvenance:T.procedencia,breakEvenOutputDeltaTokens:b,netSavingUsd:
|
|
912
|
-
function
|
|
913
|
-
ok:false,reason:"compact witness does not validate against the compact schema"};if(!
|
|
914
|
-
ject"||t.type==null&&t.properties!=null}function
|
|
915
|
-
ng")?null:e}function
|
|
912
|
+
he input win is capped by the size of the schema while the output loss grows with the answer and is billed ${k} input, so no schema is big enough to buy it back`};let P=g(h)+f(w),x=n.inputPer1k>0?P*1e3/
|
|
913
|
+
n.inputPer1k:h,S=`+${w} tokens (${w>0?"the model wrote LESS":"no measured change"}), ${T.procedencia}`;return P<v?{applied:false,reason:`net saving $${P.toFixed(9)}/request is below the floor of ${o} inp\
|
|
914
|
+
ut tokens ($${v.toFixed(9)}): the compact contract saves ${h} input tokens and the measured output delta is ${S}; break-even at ${y}`}:{applied:true,reason:`net saving $${P.toFixed(9)}/request (${x.toFixed(
|
|
915
|
+
1)} input tokens equivalent): the compact contract saves ${h} input tokens and the measured output delta is ${S}; break-even at ${y}`,plan:{compactSchema:i.compact,expand:c,compact:a,renamedKeys:i.renamed,
|
|
916
|
+
codedEnumValues:i.coded,schemaTokensOriginal:d,schemaTokensCompact:p,modelledShapeSavingTokens:m,measuredOutputDeltaTokens:w,outputDeltaProvenance:T.procedencia,breakEvenOutputDeltaTokens:b,netSavingUsd:P}}}
|
|
917
|
+
function ym(t,e,n,r){for(let o of r){if(!de(o,t).valid)return {ok:false,reason:"synthesised witness does not satisfy the caller's own schema; nothing can be proven"};let i=Vt(o,n,true);if(!de(i,e).valid)return {
|
|
918
|
+
ok:false,reason:"compact witness does not validate against the compact schema"};if(!ls(Vt(i,n,false),o))return {ok:false,reason:"round trip is not the identity"}}return {ok:true}}function Hu(t){return t.type==="ob\
|
|
919
|
+
ject"||t.type==null&&t.properties!=null}function Wu(t){return t.type==="array"||t.type==null&&t.items!=null}function km(t){let e=t.enum;return !e||e.length===0||e.length>Vu||!e.every(n=>typeof n=="stri\
|
|
920
|
+
ng")?null:e}function ds(t,e){if(e>Wr)throw new RangeError("schema too deep");let n=km(t);if(n){if(t.minLength!=null)return {compact:t,renamed:0,coded:0};let r=Ju(n,true);if(!r)return {compact:t,renamed:0,
|
|
916
921
|
coded:0};let o=[...r].filter(([s,a])=>s!==a).length;if(o===0)return {compact:t,renamed:0,coded:0};let i=new Map;for(let[s,a]of r)i.set(a,s);return {compact:{...t,enum:n.map(s=>r.get(s))},node:{enumFwd:r,
|
|
917
|
-
enumBack:i},renamed:0,coded:o}}return
|
|
918
|
-
let r=0,o=0,i=new Map,s=new Map;for(let[p,h]of n){let m=
|
|
922
|
+
enumBack:i},renamed:0,coded:o}}return Hu(t)?xm(t,e):Wu(t)?wm(t,e):{compact:t,renamed:0,coded:0}}function xm(t,e){let n=Object.entries(t.properties??{});if(n.length===0)return {compact:t,renamed:0,coded:0};
|
|
923
|
+
let r=0,o=0,i=new Map,s=new Map;for(let[p,h]of n){let m=ds(h,e+1);s.set(p,m.compact),m.node&&i.set(p,m.node),r+=m.renamed,o+=m.coded;}let a=null;t.additionalProperties===false&&(a=Ju(n.map(([p])=>p),false));
|
|
919
924
|
let c={};for(let[p]of n)c[a?.get(p)??p]=s.get(p);let u={...t,properties:c};t.required&&(u.required=t.required.map(p=>a?.get(p)??p));let l={};if(a){let p=new Map;for(let[m,g]of a)p.set(g,m);let h=false;for(let[
|
|
920
|
-
m,g]of a)m!==g&&(h=true);if(h){l.keysFwd=a,l.keysBack=p;for(let[m,g]of a)m!==g&&(r+=1);}}i.size>0&&(l.props=i);let d=!l.keysFwd&&!l.props;return {compact:u,...d?{}:{node:l},renamed:r,coded:o}}function
|
|
921
|
-
if(!t.items)return {compact:t,renamed:0,coded:0};let n=
|
|
925
|
+
m,g]of a)m!==g&&(h=true);if(h){l.keysFwd=a,l.keysBack=p;for(let[m,g]of a)m!==g&&(r+=1);}}i.size>0&&(l.props=i);let d=!l.keysFwd&&!l.props;return {compact:u,...d?{}:{node:l},renamed:r,coded:o}}function wm(t,e){
|
|
926
|
+
if(!t.items)return {compact:t,renamed:0,coded:0};let n=ds(t.items,e+1);return {compact:{...t,items:n.compact},...n.node?{node:{items:n.node}}:{},renamed:n.renamed,coded:n.coded}}function Ju(t,e){let n=[
|
|
922
927
|
...t].sort(),r=new Set,o=new Map;n.forEach((s,a)=>{let c=e?s.toUpperCase():s,u=s;for(let l=1;l<s.length;l++){let d=c.slice(0,l);if(!r.has(d)){u=d;break}}if(u===s){let l=a.toString(36);l.length<s.length&&
|
|
923
|
-
!r.has(l)&&(u=l);}r.add(u),o.set(s,u);});let i=new Set(t);for(let[s,a]of o)if(a!==s&&i.has(a))return null;return o}function
|
|
924
|
-
t;if(e.items&&Array.isArray(t))return t.map(i=>
|
|
925
|
-
u);i[c]=l?
|
|
926
|
-
r,0));return n}function
|
|
927
|
-
if(n>
|
|
928
|
-
0)return [];let r=Math.max(1,t.minItems??1),o=t.maxItems!=null?Math.min(r,t.maxItems):r,i=t.items;return Array.from({length:o},()=>i?
|
|
928
|
+
!r.has(l)&&(u=l);}r.add(u),o.set(s,u);});let i=new Set(t);for(let[s,a]of o)if(a!==s&&i.has(a))return null;return o}function Vt(t,e,n){let r=n?e.enumFwd:e.enumBack;if(r&&typeof t=="string")return r.get(t)??
|
|
929
|
+
t;if(e.items&&Array.isArray(t))return t.map(i=>Vt(i,e.items,n));let o=n?e.keysFwd:e.keysBack;if((o||e.props)&&Sm(t)){let i={};for(let[s,a]of Object.entries(t)){let c=o?.get(s)??s,u=n?s:c,l=e.props?.get(
|
|
930
|
+
u);i[c]=l?Vt(a,l,n):a;}return i}return t}function Sm(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Tm(t){let e=Math.min(Vu,Math.max(1,as(t,0))),n=[];for(let r=0;r<e;r++)n.push(cs(t,
|
|
931
|
+
r,0));return n}function as(t,e){if(e>Wr)return 0;let n=t.enum?.length??0;for(let r of Object.values(t.properties??{}))n=Math.max(n,as(r,e+1));return t.items&&(n=Math.max(n,as(t.items,e+1))),n}function cs(t,e,n){
|
|
932
|
+
if(n>Wr)return null;if(t.enum&&t.enum.length>0)return t.enum[Math.min(e,t.enum.length-1)];if(Hu(t)){let r={};for(let[o,i]of Object.entries(t.properties??{}))r[o]=cs(i,e,n+1);return r}if(Wu(t)){if(t.maxItems===
|
|
933
|
+
0)return [];let r=Math.max(1,t.minItems??1),o=t.maxItems!=null?Math.min(r,t.maxItems):r,i=t.items;return Array.from({length:o},()=>i?cs(i,e,n+1):null)}switch(t.type){case "string":{if(t.maxLength===0)return "";
|
|
929
934
|
let r=Math.max(1,t.minLength??1),o=t.maxLength!=null?Math.min(r,t.maxLength):r;return "x".repeat(o)}case "number":case "integer":{let r=t.minimum??1;return t.maximum!=null&&r>t.maximum&&(r=t.maximum),t.type===
|
|
930
|
-
"integer"?Math.round(r):r}case "boolean":return true;case "null":return null;default:return null}}function
|
|
931
|
-
values(t.properties??{}))if(
|
|
932
|
-
isArray(t),r=Array.isArray(e);if(n||r){if(!n||!r||t.length!==e.length)return false;for(let s=0;s<t.length;s++)if(!
|
|
933
|
-
return false;for(let s of o)if(!Object.prototype.hasOwnProperty.call(e,s)||!
|
|
934
|
-
enums)",pares:8}},
|
|
935
|
+
"integer"?Math.round(r):r}case "boolean":return true;case "null":return null;default:return null}}function us(t,e){if(e>Wr)throw new RangeError("schema too deep");if(t.pattern!=null)return true;for(let n of Object.
|
|
936
|
+
values(t.properties??{}))if(us(n,e+1))return true;return !!(t.items&&us(t.items,e+1))}function ls(t,e){if(t===e)return true;if(t===null||e===null||typeof t!="object"||typeof e!="object")return false;let n=Array.
|
|
937
|
+
isArray(t),r=Array.isArray(e);if(n||r){if(!n||!r||t.length!==e.length)return false;for(let s=0;s<t.length;s++)if(!ls(t[s],e[s]))return false;return true}let o=Object.keys(t),i=Object.keys(e);if(o.length!==i.length)
|
|
938
|
+
return false;for(let s of o)if(!Object.prototype.hasOwnProperty.call(e,s)||!ls(t[s],e[s]))return false;return true}var Cm="2026-08-14",Ku={"gpt-4o-mini":{deltaTokens:-16,salidaDelBrazoA:72,contrato:"triage (6 fields, long enums)",pares:8},"gpt-4o":{deltaTokens:3,salidaDelBrazoA:75,contrato:"triage (6 fields, long \
|
|
939
|
+
enums)",pares:8}},Em=yo(Ku);function Pm(t){return vo(Ku,Em,t)}var Jr=class t{deltas=new Map;static clave(e,n){return `${e}\0${n}`}recordar(e,n,r){this.deltas.set(t.clave(e,n),r);}resolver(e,n,r){if(r!=null&&
|
|
935
940
|
Number.isFinite(r))return this.recordar(e,n,r),{deltaTokens:r,origen:"caller",procedencia:`measured by the caller for this contract on ${e}`};let o=this.deltas.get(t.clave(e,n));if(o!=null)return {deltaTokens:o,
|
|
936
|
-
origen:"remembered",procedencia:`measured by the caller on an earlier request for this contract on ${e}`};let i=
|
|
937
|
-
Velio on ${e} (${
|
|
938
|
-
r=
|
|
939
|
-
n)}:${
|
|
940
|
-
o=new Map;for(let u=0;u<t.length;u++){let l=t[u];if(l.role!=="tool")continue;r.push(u);let d=(l.toolCallId?n.get(l.toolCallId):void 0)??l.name,p=l.toolCallId?e.get(l.toolCallId):void 0,h=
|
|
941
|
+
origen:"remembered",procedencia:`measured by the caller on an earlier request for this contract on ${e}`};let i=Pm(e);return i?{deltaTokens:i.deltaTokens,origen:"catalogue",procedencia:`measured by Bi\
|
|
942
|
+
Velio on ${e} (${Cm}, ${i.pares} paired reps, ${i.contrato}, ${i.salidaDelBrazoA}-token answers) \u2014 NOT measured on YOUR contract`}:null}};var fs="[BiVelio Savings: an older tool result was trimmed here to lower the cost; the most recent results travel in full.]",Rm=new TextEncoder;function Dm(t){return Rm.encode(t).length}function Im(t,e){if(!t)return null;let n=(e??"").trim();if(n===""||n==="{}"||n==="[]")return null;let r;try{let o=JSON.parse(n);if(o&&typeof o=="object"&&!Array.isArray(o)&&Object.keys(o).length===0)return null;
|
|
943
|
+
r=ps(o);}catch{r=n;}return `${t} ${r}`}function ps(t){return t===null||typeof t!="object"?JSON.stringify(t)??"null":Array.isArray(t)?`[${t.map(ps).join(",")}]`:`{${Object.keys(t).sort().map(n=>`${JSON.stringify(
|
|
944
|
+
n)}:${ps(t[n])}`).join(",")}}`}function Gu(t){let e=new Map,n=new Map;for(let u of t)if(u.role==="assistant"&&u.toolCalls)for(let l of u.toolCalls)l.id&&(e.set(l.id,l.arguments),n.set(l.id,l.name));let r=[],
|
|
945
|
+
o=new Map;for(let u=0;u<t.length;u++){let l=t[u];if(l.role!=="tool")continue;r.push(u);let d=(l.toolCallId?n.get(l.toolCallId):void 0)??l.name,p=l.toolCallId?e.get(l.toolCallId):void 0,h=Im(d,p);h!==null&&
|
|
941
946
|
o.set(u,h);}let i=r.length?r[r.length-1]:-1,s=new Map;for(let u of r){let l=o.get(u);if(l===void 0)continue;let d=s.get(l);(d===void 0||u>d)&&s.set(l,u);}let a=[],c=0;for(let u of r){if(u===i)continue;let l=o.
|
|
942
|
-
get(u);if(l===void 0||s.get(l)===u)continue;let d=
|
|
943
|
-
(r,o)=>n.has(o)?{...r,content:
|
|
944
|
-
o==="google"||o==="google-vertex"?
|
|
947
|
+
get(u);if(l===void 0||s.get(l)===u)continue;let d=Dm(t[u].content);d<1024||(a.push(u),c+=d);}return {indices:a,bytesOriginales:c}}function Zu(t,e){if(e.length===0)return t;let n=new Set(e);return t.map(
|
|
948
|
+
(r,o)=>n.has(o)?{...r,content:fs}:r)}function Kr(t,e){if(e?.cacheTier)return e.cacheTier;let n=t.toLowerCase(),r=n.indexOf("/"),o=r>0?n.slice(0,r):"",i=r>=0?n.slice(r+1):n;return o==="openai"||o==="azure-openai"?Hi:o==="anthropic"?Wi(i):
|
|
949
|
+
o==="google"||o==="google-vertex"?Ji:/^(gpt-|o[1-9](-|$)|chatgpt)/.test(i)?Hi:i.startsWith("claude")?Wi(i):i.startsWith("gemini")?Ji:Pu}function Yu(t){let e=t.prefix!=null,n=Ki({originalTokens:t.originalTokens,
|
|
945
950
|
compressedTokens:t.compressedTokens,stablePrefixTokens:t.prefix?.stableTokens??0,prefixHitRate:t.prefix?.hitRate??0,tier:t.tier,...t.compressorCostTokens!=null?{compressorCostTokens:t.compressorCostTokens}:
|
|
946
951
|
{}});if(e)return n;let r=t.tier.minimumCacheTokens;return r!=null&&t.originalTokens>=r&&t.compressedTokens<r?{...n,comprimir:false,razon:`compressing would drop the prompt out of the cacheable tier (${t.
|
|
947
|
-
compressedTokens} < ${r}) and nobody has measured the prefix hit rate, so it cannot be claimed to pay for itself. Declare it in \`compressionEconomics.prefix\` to unlock the full decision`}:n}function
|
|
952
|
+
compressedTokens} < ${r}) and nobody has measured the prefix hit rate, so it cannot be claimed to pay for itself. Declare it in \`compressionEconomics.prefix\` to unlock the full decision`}:n}function Xu(t){let e=l=>l/1e3*t.precio.inputPer1k,n=l=>l/1e3*t.precio.outputPer1k,r=e(t.promptTokens+t.descriptoresLigeros)+n(t.salidaDelSondeo),o=e(t.promptTokens+t.esquemasCompletos)+n(t.salidaFinal),
|
|
948
953
|
i=r+e(t.promptTokens+t.esquemasDeLaSegunda)+n(t.salidaFinal),s=o-i,a=r,c=s>0&&s>=a,u;return s<=0?u=`discovery costs more than it saves: the prompt (${t.promptTokens} tokens) is paid twice and the sche\
|
|
949
954
|
mas avoided (${t.esquemasCompletos-t.esquemasDeLaSegunda}) do not cover it`:c?u=`${t.esquemasCompletos-t.esquemasDeLaSegunda} schema tokens avoided in the worst case, enough to pay for the repeated pr\
|
|
950
955
|
ompt and the probe`:u="the gain does not cover the cost of degrading: if the probe does not choose, the request goes out unchanged with every schema and the probe is pure cost",{aplicar:c,costeDeUnaLlamada:o,
|
|
951
|
-
costeDeDosLlamadas:i,ganancia:s,perdidaSiDegrada:a,razon:u}}function
|
|
952
|
-
0,
|
|
953
|
-
get(c);if(!u){i.push(c);continue}o.includes(u.id)||(o.push(u.id),u.risk==="read"&&s.size<Math.max(0,n)&&s.add(u.id));}return {tools:e.filter(c=>c.risk!=="read"||s.has(c.id)),reconocidos:o,ignorados:i}}function
|
|
954
|
-
let n=0,r=[];for(let o of t)o.risk==="read"?r.push(o.tokens):n+=o.tokens;r.sort((o,i)=>i-o);for(let o of r.slice(0,Math.max(0,e)))n+=o;return n}var
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
956
|
+
costeDeDosLlamadas:i,ganancia:s,perdidaSiDegrada:a,razon:u}}function el(t){let n=(t.description??(Array.isArray(t.intents)?t.intents.join("; "):"")).trim().split(/\r?\n/,1)[0]??"",r=n.length>Qu?n.slice(
|
|
957
|
+
0,Qu-1).trimEnd()+"\u2026":n;return {id:t.id,intents:t.intents,risk:t.risk,...r?{description:r}:{}}}var Qu=200;function tl(t,e,n){let r=new Map(e.map(c=>[c.id,c])),o=[],i=[],s=new Set;for(let c of t){let u=r.
|
|
958
|
+
get(c);if(!u){i.push(c);continue}o.includes(u.id)||(o.push(u.id),u.risk==="read"&&s.size<Math.max(0,n)&&s.add(u.id));}return {tools:e.filter(c=>c.risk!=="read"||s.has(c.id)),reconocidos:o,ignorados:i}}function nl(t,e){
|
|
959
|
+
let n=0,r=[];for(let o of t)o.risk==="read"?r.push(o.tokens):n+=o.tokens;r.sort((o,i)=>i-o);for(let o of r.slice(0,Math.max(0,e)))n+=o;return n}var Am=2;function ms(t){return Y(he({messages:t.messages,structuredData:t.structuredData??null,tools:t.tools??[],schema:t.response?.schema??null}))}function rl(t){return t.temperature===0}var it=t=>typeof t==
|
|
960
|
+
"number"&&Number.isInteger(t)&&t>=0;function Om(t,e){if(it(t.reasoningTokens)){if(!e)return t.reasoningTokens;if(it(e.reasoningTokens))return t.reasoningTokens+e.reasoningTokens}}function ol(t){if(t.contadorSimulado)
|
|
961
|
+
return "simulated-provider";if(t.origen==="no-oficial")return "unofficial-origin";let e=t.usoPrimario;if(!e||e.complete===false||!it(e.inputTokens)||e.inputTokens<=0||!it(e.outputTokens))return "no-usage";let n=t.
|
|
962
|
+
usoReparacion;if(n&&(n.complete===false||!it(n.outputTokens)))return "no-usage";if(t.eliminatedInput!==0||t.compressedInput!==0||t.elididoLocal!==0||Math.abs(t.sentLocalSinSondeo-t.baselineInput)>Am)return "\
|
|
963
|
+
layer-changed-request";if(t.codebookAplicado)return "codebook";if(t.tokensDelSondeo!==0||t.sondeoAplicado)return "tool-discovery";if(t.busquedaNativa===true)return "native-tool-search";if(t.hayEsquema&&(!t.
|
|
964
|
+
esquemaNativo||t.esquemaPorPrompt))return "schema-in-prompt";if(t.hayEsquema&&!t.esquemaEnFormatoNativo)return "schema-not-verbatim";if(t.hayEsquema&&!t.esquemaEstricto)return "schema-not-strict";if(t.modeloServido!==
|
|
965
|
+
t.modeloPedido)return "cheaper-model-served";if(!t.cacheable)return "not-cacheable";let r=ei(t.tierServido),o=r?.conDescuento&&r.factor!=null&&r.factor>0&&r.factor<1?r.factor:void 0,i=Om(e,n);return {v:2,
|
|
966
|
+
requestId:t.requestId,at:t.at,model:t.modeloPedido,inputTokens:e.inputTokens,outputTokens:n?Math.min(e.outputTokens,n.outputTokens):e.outputTokens,...o!==void 0?{tierFactor:o}:{},layerInsertions:Math.
|
|
967
|
+
max(0,t.mensajesDeLaCapa)+Math.max(0,t.piezasDelAdaptador)+(t.hayEsquema?1:0),...i!==void 0?{reasoningTokens:i}:{},requestFingerprint:t.huella(),textSha256:Y(t.textoServido)}}var Gr=t=>typeof t=="stri\
|
|
968
|
+
ng"&&t.length>0;function il(t){if(t==null||typeof t!="object")return "absent";let e=t.reference;if(e==null)return "absent";if(typeof e!="object"||Array.isArray(e))return "malformed";let n=e,r=n.tierFactor,
|
|
969
|
+
o=n.reasoningTokens;return n.v===2&&typeof n.inputTokens=="number"&&Number.isInteger(n.inputTokens)&&n.inputTokens>0&&it(n.outputTokens)&&typeof n.at=="number"&&Number.isFinite(n.at)&&(r===void 0||typeof r==
|
|
970
|
+
"number"&&r>0&&r<1)&&it(n.layerInsertions)&&(o===void 0||it(o))&&Gr(n.requestId)&&Gr(n.model)&&Gr(n.requestFingerprint)&&Gr(n.textSha256)?{v:2,requestId:n.requestId,at:n.at,model:n.model,inputTokens:n.
|
|
971
|
+
inputTokens,outputTokens:n.outputTokens,...r!==void 0?{tierFactor:r}:{},layerInsertions:n.layerInsertions,...o!==void 0?{reasoningTokens:o}:{},requestFingerprint:n.requestFingerprint,textSha256:n.textSha256,
|
|
972
|
+
...typeof n.cacheKey=="string"?{cacheKey:n.cacheKey}:{}}:"malformed"}function Mm(t,e){if(!e.determinista)return "sampled";if(e.salidaDelModelo!==void 0)return e.salidaDelModelo;if(t.reasoningTokens===void 0)
|
|
973
|
+
return "reasoning-not-reported";if(t.reasoningTokens!==0)return "reasoning-reported"}function sl(t,e){if(e.textoServidoSha256!==t.textSha256)return {ok:false,reason:"witness"};if(e.claveLeida!==void 0&&t.cacheKey!==
|
|
974
|
+
e.claveLeida)return {ok:false,reason:"witness"};if(t.model!==e.modeloPedido||e.modeloServido!==e.modeloPedido)return {ok:false,reason:"model-mismatch"};let n=e.ahoraMs-t.at;if(!(n>=-3e5&&n<=2592e6))return {ok:false,
|
|
975
|
+
reason:"expired"};if(e.huella!==t.requestFingerprint)return {ok:false,reason:"different-request"};if(!e.calidadOk)return {ok:false,reason:"quality"};let r=e.precio,o=r?.cachedInputPer1k;if(!r||typeof o!="numb\
|
|
976
|
+
er"||!Number.isFinite(o)||!(o>0)||!Number.isFinite(r.inputPer1k)||o>r.inputPer1k||typeof r.outputPer1k!="number"||!Number.isFinite(r.outputPer1k)||r.outputPer1k<0)return {ok:false,reason:"no-cached-price"};
|
|
977
|
+
let i=t.inputTokens-8*t.layerInsertions;if(!(i>0))return {ok:false,reason:"no-credit"};let s=typeof e.topeDeSalida=="number"&&Number.isFinite(e.topeDeSalida)?Math.max(0,e.topeDeSalida):Number.POSITIVE_INFINITY,
|
|
978
|
+
a=Mm(t,e),c=a===void 0?Math.floor(.95*Math.min(t.outputTokens,s)):0,u=Math.min(1,t.tierFactor??1,e.diferible?za:1);return {ok:true,...a!==void 0?{outputNotCredited:a}:{},credit:{requestId:t.requestId,at:t.
|
|
979
|
+
at,inputTokens:t.inputTokens,outputTokens:t.outputTokens,creditedInputTokens:i,creditedOutputTokens:c,cachedInputPer1k:o,outputPer1k:r.outputPer1k,tierFactor:u}}}var wn={done:true,value:void 0},Sn=class{handle;sumidero;now;inicio;controlador=new AbortController;resolver;rechazar;cola=[];esperas=[];cerrada=false;errorPendiente=null;consumidorSalio=false;iterado=false;_abortado=false;vivo=false;proveedorTerminado=false;terminado=false;primerEventoAt;quitarEscucha;constructor(e,n){
|
|
975
980
|
this.now=e,this.inicio=e();let r,o,i=new Promise((a,c)=>{r=a,o=c;});i.catch(()=>{}),this.resolver=r,this.rechazar=o;let s=this;if(this.sumidero={senal:this.controlador.signal,texto(a){s.recibirTexto(a);},
|
|
976
981
|
proveedorTermino(){s.proveedorTerminado=true;},sirvioEnVivo:false},this.handle={result:i,abort:a=>this.abort(a),[Symbol.asyncIterator]:()=>this.iterador()},n)if(n.aborted)this.abort(n.reason);else {let a=()=>this.
|
|
977
982
|
abort(n.reason);n.addEventListener("abort",a,{once:true}),this.quitarEscucha=()=>n.removeEventListener("abort",a);}}get abortado(){return this._abortado}entrarEnVivo(){this.vivo=true;}completar(e,n){if(this.
|
|
@@ -980,54 +985,54 @@ terminado)return;let r=e.toolCalls?.length??0,o=this.primerEventoAt??(n.vivo&&r>
|
|
|
980
985
|
encolar({type:"tool_call",call:a});this.encolar({type:"done",result:s});}this.cerrar(),this.acabar();}fallar(e){this.terminado||(this.rechazar(e),this._abortado?this.cerrar():this.fallarCola(e),this.acabar());}acabar(){
|
|
981
986
|
this.terminado=true,this.quitarEscucha?.(),this.quitarEscucha=void 0;}abort(e){this.terminado||this._abortado||(this._abortado=true,this.cola.length=0,this.cerrar(),this.vivo&&!this.proveedorTerminado&&this.
|
|
982
987
|
controlador.abort(e));}recibirTexto(e){e===""||this._abortado||this.terminado||(this.primerEventoAt===void 0&&(this.primerEventoAt=this.now()),this.encolar({type:"text",delta:e}));}encolar(e){if(this.cerrada)
|
|
983
|
-
return;let n=this.esperas.shift();n?n.resolve({done:false,value:e}):this.cola.push(e);}cerrar(){this.cerrada=true;for(let e of this.esperas.splice(0))e.resolve(
|
|
984
|
-
esperas.splice(0);if(n){n.reject(e);for(let o of r)o.resolve(
|
|
985
|
-
resolve({done:false,value:e});if(this.errorPendiente){let{valor:n}=this.errorPendiente;return this.errorPendiente=null,Promise.reject(n)}return this.cerrada?Promise.resolve(
|
|
988
|
+
return;let n=this.esperas.shift();n?n.resolve({done:false,value:e}):this.cola.push(e);}cerrar(){this.cerrada=true;for(let e of this.esperas.splice(0))e.resolve(wn);}fallarCola(e){this.cerrada=true;let[n,...r]=this.
|
|
989
|
+
esperas.splice(0);if(n){n.reject(e);for(let o of r)o.resolve(wn);}else this.errorPendiente={valor:e};}siguiente(){if(this.consumidorSalio)return Promise.resolve(wn);let e=this.cola.shift();if(e)return Promise.
|
|
990
|
+
resolve({done:false,value:e});if(this.errorPendiente){let{valor:n}=this.errorPendiente;return this.errorPendiente=null,Promise.reject(n)}return this.cerrada?Promise.resolve(wn):new Promise((n,r)=>{this.esperas.
|
|
986
991
|
push({resolve:n,reject:r});})}iterador(){if(this.iterado)throw new Error("[bvsala] a SavingsStream can be iterated only once");return this.iterado=true,{next:()=>this.siguiente(),return:()=>(this.abort(),
|
|
987
|
-
this.consumidorSalio=true,this.cola.length=0,Promise.resolve(
|
|
988
|
-
"fail_open"?"fail_open":"provider"}}function
|
|
989
|
-
void 0?{sampleDiverged:t.divergedOnSample}:{}};let e=t.servedModel!==t.requestedModel?"accepted":t.escalated===true?"escalated":"not_routed";return {mode:"on",gate:t.verifier,outcome:e}}function
|
|
990
|
-
hechos,n=
|
|
992
|
+
this.consumidorSalio=true,this.cola.length=0,Promise.resolve(wn))}}};function Lm(t,e){switch(t){case "deterministic":return "deterministic";case "exact":return "exact_cache";case "semantic":return "semantic_cache";case "singleflight":return "coalesced";default:return e?.origen===
|
|
993
|
+
"fail_open"?"fail_open":"provider"}}function jm(t){if(!t||t.mode!=="shadow"&&t.mode!=="on")return;if(t.mode==="shadow")return {mode:"shadow",gate:t.verifier,outcome:"not_applied",...t.divergedOnSample!==
|
|
994
|
+
void 0?{sampleDiverged:t.divergedOnSample}:{}};let e=t.servedModel!==t.requestedModel?"accepted":t.escalated===true?"escalated":"not_routed";return {mode:"on",gate:t.verifier,outcome:e}}function al(t){let e=t.
|
|
995
|
+
hechos,n=Lm(t.cacheResult,e),r={source:n};if(t.hayEsquema)if(t.structurallyValid===null)r.schema={outcome:"not_applicable",decodeTimeConstraint:t.backend!=="none",errorCount:0};else {let i=e?.validacion,
|
|
991
996
|
s=i?.errores??(t.structurallyValid?0:1);r.schema={outcome:t.structurallyValid?"passed":"failed",decodeTimeConstraint:t.backend!=="none",errorCount:s,...i?.desenvuelto?{unwrapped:true}:{}};}if(n==="provid\
|
|
992
997
|
er"&&e?.reparacion&&(r.repair={...e.reparacion}),n==="provider"||n==="fail_open"){let i=e?.final,s=i?.topeDelLlamante;r.truncation={truncated:i?.finishReason==="length",...i?.finishReason!==void 0?{finishReason:i.
|
|
993
998
|
finishReason}:{},capSetByCaller:s!=null,...s!=null?{outputLimit:s}:{}};}if(n==="exact_cache")r.cacheMatch={kind:"exact",...t.ageMs!==void 0?{ageMs:t.ageMs}:{}};else if(n==="semantic_cache"&&e?.semantico){
|
|
994
999
|
let i=e.semantico;r.cacheMatch={kind:"semantic",ageMs:i.ageMs,similarity:i.similarity,similarityFloor:i.similarityFloor,acceptFloor:i.acceptFloor,...i.verifierRan?{verifierScore:i.verifierScore}:{},embedder:i.
|
|
995
|
-
embedder,factGuard:"passed",...i.calibration?{calibration:{...i.calibration}}:{}};}let o=
|
|
1000
|
+
embedder,factGuard:"passed",...i.calibration?{calibration:{...i.calibration}}:{}};}let o=jm(t.cascada);return o&&(r.cascade=o),r}function cl(t){return {source:"coalesced",sharedFrom:t==null?"provider":t.
|
|
996
1001
|
source==="coalesced"?t.sharedFrom??"provider":t.source,...t?.schema?{schema:{...t.schema}}:{},...t?.repair?{repair:{...t.repair}}:{},...t?.truncation?{truncation:{...t.truncation}}:{},...t?.cacheMatch?
|
|
997
|
-
{cacheMatch:
|
|
1002
|
+
{cacheMatch:Nm(t.cacheMatch)}:{},...t?.cascade?{cascade:{...t.cascade}}:{}}}function Nm(t){return t.kind==="semantic"&&t.calibration?{...t,calibration:{...t.calibration}}:{...t}}function Zr(t){if(t==null)return {activo:false,motivo:"ausente"};if(typeof t!="object")return {activo:false,motivo:"invalido"};let e=t.sampleRate;if(typeof e!="number"||!Number.isFinite(e)||e<0||e>1)return {activo:false,
|
|
998
1003
|
motivo:"invalido"};let n=t.maxCheckCostUsd;if(n!==void 0&&(typeof n!="number"||!Number.isFinite(n)||n<=0))return {activo:false,motivo:"invalido"};if(e===0)return {activo:false,motivo:"cero"};let r=typeof t.onCheck==
|
|
999
|
-
"function"?t.onCheck:void 0,o=typeof t.waitUntil=="function"?t.waitUntil:void 0;return {activo:true,tasa:e,...n!==void 0?{tope:n}:{},...r?{onCheck:r}:{},...o?{waitUntil:o}:{}}}function
|
|
1000
|
-
n=Math.round(e*100)/100;return n===0?"<0.01%":Number.isInteger(n)?`${n}%`:`${n.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}%`}function
|
|
1004
|
+
"function"?t.onCheck:void 0,o=typeof t.waitUntil=="function"?t.waitUntil:void 0;return {activo:true,tasa:e,...n!==void 0?{tope:n}:{},...r?{onCheck:r}:{},...o?{waitUntil:o}:{}}}function $m(t){let e=t*100,
|
|
1005
|
+
n=Math.round(e*100)/100;return n===0?"<0.01%":Number.isInteger(n)?`${n}%`:`${n.toFixed(2).replace(/0+$/,"").replace(/\.$/,"")}%`}function ul(t){let e=$m(t);return `[bvsala] Verification sampling is ON \
|
|
1001
1006
|
(sampleRate ${t}): about ${e} of eligible requests are sent a second time, unoptimized, to your own provider \u2014 in the background, after your answer is returned \u2014 and the second answer is discarded. Yo\
|
|
1002
1007
|
u pay your provider for those calls: roughly ${e} of what that traffic would cost without the layer. The pairs appear under Proof \u203A Your bench in your dashboard; they are informational and never enter\
|
|
1003
|
-
your statement or any commission.`}function
|
|
1004
|
-
\` must be a number from 0 to 1 and \`verification.maxCheckCostUsd\`, when set, a positive number (got sampleRate ${e}); verification sampling is OFF.`}var
|
|
1008
|
+
your statement or any commission.`}function ll(t){let e;try{let n=t?.sampleRate;e=typeof n=="string"?JSON.stringify(n):String(n);}catch{e="an unreadable value";}return `[bvsala] \`verification.sampleRate\
|
|
1009
|
+
\` must be a number from 0 to 1 and \`verification.maxCheckCostUsd\`, when set, a positive number (got sampleRate ${e}); verification sampling is OFF.`}var dl="[bvsala] Verification sampling is set, b\
|
|
1005
1010
|
ut its pairs have nowhere to go: set `serviceAccountKey` and `licenseServerUrl` (with metering on) to see them in your dashboard \u2014 a custom `meteringUrl` is followed only when it ends in `/api/meterin\
|
|
1006
|
-
g/usage` \u2014 or pass `verification.onCheck` to receive them yourself. No request will be sent twice until then.",
|
|
1007
|
-
request was not affected.";function
|
|
1011
|
+
g/usage` \u2014 or pass `verification.onCheck` to receive them yourself. No request will be sent twice until then.",pl="[bvsala] verification sampling hit an internal error and skipped a request; your\
|
|
1012
|
+
request was not affected.";function fl(t){let e=t.messages.map(n=>({...n}));return t.structuredData!==void 0&&e.push({role:"user",content:JSON.stringify(t.structuredData)}),{model:t.model,messages:e,...t.tools&&t.tools.length>0?
|
|
1008
1013
|
{tools:[...t.tools]}:{},...t.response?.schema?{schema:t.response.schema}:{},...t.response?.maxOutputTokens!=null?{maxOutputTokens:t.response.maxOutputTokens}:{},...t.temperature!==void 0?{temperature:t.
|
|
1009
|
-
temperature}:{},...t.seed!==void 0?{seed:t.seed}:{}}}function
|
|
1014
|
+
temperature}:{},...t.seed!==void 0?{seed:t.seed}:{}}}function ml(t){let{request:e,result:n,via:r}=t,o=n.report;if(r==="fail-open")return {excluida:"fail_open"};if(e.savings?.verification===false)return {excluida:"opted_out"};let i=n.finishReason;return i==="\
|
|
1010
1015
|
length"?{excluida:"truncated"}:i!==void 0&&i!=="stop"&&i!=="tool_calls"?{excluida:"incomplete"}:o.constraints.structurallyValid===false||o.qualityStatus==="rejected"?{excluida:"contract_failed"}:o.cost.basis===
|
|
1011
1016
|
"unmeasured"?{excluida:"unmeasured"}:o.calls.actualRetrieval>0?{excluida:"retrieval"}:t.precio(e.model)===void 0||t.precio(o.model)===void 0?{excluida:"no_price"}:t.tope!==void 0&&o.cost.baselineEstimate>
|
|
1012
1017
|
t.tope?{excluida:"over_cap"}:o.calls.avoidedLlm>0?{estrato:"avoided_call"}:o.model!==e.model?{estrato:"cheaper_model"}:o.tokens.eliminatedInput>0?{estrato:"tokens_removed"}:o.tokens.compressedInput>0?
|
|
1013
|
-
{estrato:"tokens_compressed"}:{estrato:"unchanged"}}function
|
|
1014
|
-
i*1e10)/1e10}var
|
|
1018
|
+
{estrato:"tokens_compressed"}:{estrato:"unchanged"}}function hl(t,e){if(!(e>0))return false;if(e>=1)return true;let n=Y(`${t}:verification-sample`);return Number.parseInt(n.slice(0,13),16)/2**52<e}function gl(t,e){let n=t.inputTokens,r=Math.min(t.cachedInputTokens??0,n),o=e.cachedInputPer1k??e.inputPer1k,i=Math.max(0,n-r)/1e3*e.inputPer1k+r/1e3*o+t.outputTokens/1e3*e.outputPer1k;return Math.round(
|
|
1019
|
+
i*1e10)/1e10}var Bm=32,Fm=6e5;function zm(t){return new Date(t).toISOString().slice(0,10)}var Yr=class{tasa;tope;onCheck;waitUntil;provider;precio;contrato;now;sumidero;avisar;enVuelo=new Set;cerrado=false;constructor(e){
|
|
1015
1020
|
this.tasa=e.ajustes.tasa,this.tope=e.ajustes.tope,this.onCheck=e.ajustes.onCheck,this.waitUntil=e.ajustes.waitUntil,this.provider=e.provider,this.precio=e.precio,this.contrato=e.contrato,this.now=e.now,
|
|
1016
|
-
this.sumidero=e.sumidero,this.avisar=e.avisar;}get copiasEnVuelo(){return this.enVuelo.size}decidir(e,n,r){if(this.cerrado)return n;try{let o=n.report,i=
|
|
1017
|
-
via:r,precio:this.precio,...this.tope!==void 0?{tope:this.tope}:{}}),a;if(i&&"estrato"in s){let l=this.precio(e.model);if(!l)throw new Error("price vanished between classification and launch");a={peticion:
|
|
1018
|
-
e),precios:l,estrato:s.estrato};}let c=this.now();this.sumidero.contar?.(
|
|
1019
|
-
excluida};return {...n,report:{...o,verification:u}}}catch{return this.avisar("verificacion-fallo-interno",
|
|
1021
|
+
this.sumidero=e.sumidero,this.avisar=e.avisar;}get copiasEnVuelo(){return this.enVuelo.size}decidir(e,n,r){if(this.cerrado)return n;try{let o=n.report,i=hl(o.requestId,this.tasa),s=ml({request:e,result:n,
|
|
1022
|
+
via:r,precio:this.precio,...this.tope!==void 0?{tope:this.tope}:{}}),a;if(i&&"estrato"in s){let l=this.precio(e.model);if(!l)throw new Error("price vanished between classification and launch");a={peticion:fl(
|
|
1023
|
+
e),precios:l,estrato:s.estrato};}let c=this.now();this.sumidero.contar?.(zm(c),"estrato"in s?s.estrato:s.excluida),a&&this.lanzar(e,n,c,a);let u="estrato"in s?{sampled:i,stratum:s.estrato}:{sampled:i,excluded:s.
|
|
1024
|
+
excluida};return {...n,report:{...o,verification:u}}}catch{return this.avisar("verificacion-fallo-interno",pl),n}}cerrar(){this.cerrado=true;let e=[...this.enVuelo];this.enVuelo.clear();for(let n of e)if(!n.
|
|
1020
1025
|
decidido){n.decidido=true,n.reloj&&clearTimeout(n.reloj);try{n.abortar.abort();}catch{}this.registrar({...n.base,outcome:"abandoned"}),n.terminar();}}lanzar(e,n,r,o){let i=n.report,s=o.precios,a={requestId:i.
|
|
1021
1026
|
requestId,at:r,stratum:o.estrato,requestedModel:e.model,servedModel:i.model,cacheResult:i.cache.result,optimized:{cost:i.cost.actual,inputTokens:i.tokens.actualInput,cachedInputTokens:i.tokens.providerCachedInput??
|
|
1022
|
-
0,outputTokens:i.tokens.actualOutput},prices:{inputPer1k:s.inputPer1k,...s.cachedInputPer1k!==void 0?{cachedInputPer1k:s.cachedInputPer1k}:{},outputPer1k:s.outputPer1k}};if(this.enVuelo.size>=
|
|
1027
|
+
0,outputTokens:i.tokens.actualOutput},prices:{inputPer1k:s.inputPer1k,...s.cachedInputPer1k!==void 0?{cachedInputPer1k:s.cachedInputPer1k}:{},outputPer1k:s.outputPer1k}};if(this.enVuelo.size>=Bm){this.
|
|
1023
1028
|
registrar({...a,outcome:"dropped"});return}let c=()=>{},u=new Promise(d=>{c=d;}),l={base:a,abortar:new AbortController,decidido:false,reloj:void 0,terminar:c};if(this.enVuelo.add(l),l.reloj=setTimeout(()=>{
|
|
1024
|
-
try{l.abortar.abort();}catch{}this.resolverVuelo(l,{...a,outcome:"check_failed"});},
|
|
1029
|
+
try{l.abortar.abort();}catch{}this.resolverVuelo(l,{...a,outcome:"check_failed"});},Fm),l.reloj.unref?.(),setTimeout(()=>{if(l.decidido)return;let d;try{d=Promise.resolve(this.provider.generate(o.peticion,
|
|
1025
1030
|
{signal:l.abortar.signal}));}catch(p){d=Promise.reject(p);}d.then(p=>{let h;try{h=this.checkDeLaRespuesta(a,o.peticion,p,s);}catch{h={...a,outcome:"check_failed"};}this.resolverVuelo(l,h);},()=>{this.resolverVuelo(
|
|
1026
1031
|
l,{...a,outcome:"check_failed"});});},0),this.waitUntil)try{this.waitUntil(u.catch(()=>{}));}catch{}}checkDeLaRespuesta(e,n,r,o){let i=r?.usage,s=i?.inputTokens,a=i?.outputTokens,c=i?.cachedInputTokens??
|
|
1027
1032
|
0,u=h=>typeof h=="number"&&Number.isSafeInteger(h)&&h>=0;if(!i||i.complete===false||!u(s)||!u(a)||!u(c)||s===0&&a===0)return {...e,outcome:"check_unmeasured"};let l=Math.min(c,s),d=r.finishReason,p=typeof d==
|
|
1028
|
-
"string"?/^[a-z_]{1,32}$/.test(d)?d:"other":void 0;return {...e,outcome:"paired",naive:{cost:
|
|
1033
|
+
"string"?/^[a-z_]{1,32}$/.test(d)?d:"other":void 0;return {...e,outcome:"paired",naive:{cost:gl({inputTokens:s,outputTokens:a,cachedInputTokens:l},o),inputTokens:s,cachedInputTokens:l,outputTokens:a,...p!==
|
|
1029
1034
|
void 0?{finishReason:p}:{},contract:this.contrato(n,r)}}}async resolverVuelo(e,n){if(!e.decidido){if(e.decidido=true,e.reloj&&clearTimeout(e.reloj),this.enVuelo.delete(e),this.registrar(n),this.enVuelo.
|
|
1030
|
-
size===0)try{await this.sumidero.enReposo();}catch{}e.terminar();}}registrar(e){try{this.sumidero.encolar(e);}catch{}if(this.onCheck)try{this.onCheck(e);}catch{}}};var
|
|
1035
|
+
size===0)try{await this.sumidero.enReposo();}catch{}e.terminar();}}registrar(e){try{this.sumidero.encolar(e);}catch{}if(this.onCheck)try{this.onCheck(e);}catch{}}};var hs=true,Tl=new WeakSet;function qm(t){typeof t=="object"&&t!==null&&Tl.add(t);}function yl(t){return typeof t=="object"&&t!==null&&Tl.has(t)}function kl(t,e){switch(t){case "none":return Vm();case "inv\
|
|
1031
1036
|
alid":return e==="malformed"?"BiVelio license key is not a license token (malformed): a BiVelio license key looks like `xxxx.yyyy.zzzz` \u2014 three dot-separated base64url segments, several hundred charac\
|
|
1032
1037
|
ters long \u2014 did you paste the `bvk_` service-account key by mistake? That one goes in `serviceAccountKey`; the license key is the other value on https://savings.bivelio.com/dashboard/install (license \
|
|
1033
1038
|
status: invalid)":"BiVelio license key is not valid (it does not verify). Check you pasted the WHOLE key, and that it is the license key from your dashboard \u2014 not the `bvk_` service-account key, which\
|
|
@@ -1035,19 +1040,19 @@ status: invalid)":"BiVelio license key is not valid (it does not verify). Check
|
|
|
1035
1040
|
lling status at https://savings.bivelio.com/dashboard/account or write to support@bivelio.com (license status: revoked)";case "stale":return "BiVelio could not confirm your license with the control plan\
|
|
1036
1041
|
e in time \u2014 this is a connectivity problem, not a billing one: your license is still valid. Allow outbound HTTPS to your `licenseServerUrl` (https://savings.bivelio.com by default) and retry. (license\
|
|
1037
1042
|
status: stale)";case "expired":case "grace":return `BiVelio license is not active. Renew your subscription at https://savings.bivelio.com/dashboard/account (license status: ${t})`;default:return `BiVelio\
|
|
1038
|
-
license is not active. See https://savings.bivelio.com/dashboard/account${t?` (license status: ${t})`:""}`}}function
|
|
1043
|
+
license is not active. See https://savings.bivelio.com/dashboard/account${t?` (license status: ${t})`:""}`}}function Vm(){return "BiVelio license required: none was configured. Pass { licenseKey } \u2014 t\
|
|
1039
1044
|
he signed token from your subscription, verified offline. This published package has no unlicensed mode. Copy your key and a ready-to-paste snippet at https://savings.bivelio.com/dashboard/install (li\
|
|
1040
|
-
cense status: none)"}function
|
|
1041
|
-
path at all \u2014 pass { licenseKey } instead, from https://savings.bivelio.com/dashboard/install (license status: invalid)"}var
|
|
1042
|
-
this.config=e,e.silenceWarnings===true&&
|
|
1043
|
-
verjaDeCascada=new
|
|
1044
|
-
precio:o=>this.precioConocido(o),contrato:(o,i)=>
|
|
1045
|
+
cense status: none)"}function Um(){return "licenseGate must implement isActive(): a gate that cannot prove the license is live is refused. In this published package an injected gate is not a licensing \
|
|
1046
|
+
path at all \u2014 pass { licenseKey } instead, from https://savings.bivelio.com/dashboard/install (license status: invalid)"}var Xr=class{deps;config;now;generateId;contratosQueIncumplen;verjaDeCache=new qr;espejoDeCache=new qt;verjaDeCascada;memoriaDelCodebook=new Jr;referenciasDeLider=new WeakMap;noReproducibles=new WeakSet;comprobador;constructor(e,n={}){
|
|
1047
|
+
this.config=e,e.silenceWarnings===true&&rc(e.provider),this.deps=Tu(e),this.now=e.now??(()=>Date.now()),this.generateId=e.generateId??(()=>Qt()),this.contratosQueIncumplen=e.constraintMemory??new Set,this.
|
|
1048
|
+
verjaDeCascada=new Ur(e.modelCascade?.exploration!=null?{exploracion:e.modelCascade.exploration}:{});let r=Zr(e.verification);this.comprobador=r.activo&&n.verificacion?new Yr({ajustes:r,provider:e.provider,
|
|
1049
|
+
precio:o=>this.precioConocido(o),contrato:(o,i)=>Hm(o,i),now:this.now,sumidero:n.verificacion,avisar:(o,i)=>this.avisar(o,i)}):void 0;}conVerificacion(e,n,r){return this.comprobador?this.comprobador.decidir(
|
|
1045
1050
|
e,n,r):n}cerrarVerificacion(){this.comprobador?.cerrar();}async generate(e){this.assertLicensed(),e=this.conPalancasPorDefecto(e);let n={llamadas:0,falloDelProveedor:false,sinContador:0},r;try{r=await this.
|
|
1046
|
-
generateOptimized(e,n);}catch(o){if(o instanceof Qe||this.config.failOpen===false||n.falloDelProveedor||n.llamadas>0||
|
|
1047
|
-
return this.conVerificacion(e,r,"optimizado")}generateStream(e,n={},r){let o;try{o=new
|
|
1051
|
+
generateOptimized(e,n);}catch(o){if(o instanceof Qe||this.config.failOpen===false||n.falloDelProveedor||n.llamadas>0||yl(o))throw o;return this.conVerificacion(e,await this.failOpenDirect(e,o),"fail-open")}
|
|
1052
|
+
return this.conVerificacion(e,r,"optimizado")}generateStream(e,n={},r){let o;try{o=new Sn(this.now,n?.signal);}catch(i){let s=new Sn(this.now);return s.fallar(i),s.handle}return this.ejecutarStream(e,o,
|
|
1048
1053
|
r),o.handle}async ejecutarStream(e,n,r){try{if(r&&await r,n.abortado)throw new ke(!1);e=this.conPalancasPorDefecto(e);let o=this.motivoDeEntregaEntera(e);if(o){let a=await this.generate(e);n.completar(
|
|
1049
1054
|
a,{vivo:!1,motivo:o});return}this.assertLicensed(),n.entrarEnVivo();let i={llamadas:0,falloDelProveedor:!1,sinContador:0},s;try{s=await this.generateOptimized(e,i,n.sumidero);}catch(a){if(a instanceof Qe||
|
|
1050
|
-
a instanceof ke)throw a;if(n.sumidero.senal.aborted)throw new ke(i.llamadas>0);if(this.config.failOpen===!1||i.falloDelProveedor||i.llamadas>0||
|
|
1055
|
+
a instanceof ke)throw a;if(n.sumidero.senal.aborted)throw new ke(i.llamadas>0);if(this.config.failOpen===!1||i.falloDelProveedor||i.llamadas>0||yl(a))throw a;let c=this.conVerificacion(e,await this.failOpenDirect(
|
|
1051
1056
|
e,a),"fail-open");n.completar(c,{vivo:!1,motivo:"fail-open"});return}s=this.conVerificacion(e,s,"optimizado"),n.completar(s,n.sumidero.sirvioEnVivo?{vivo:!0}:{vivo:!1,motivo:"shortcut"});}catch(o){n.fallar(
|
|
1052
1057
|
o);}}conPalancasPorDefecto(e){let n=this.config.priceLevers;if(!n)return e;let r=e.savings,o=n.deferrable===true&&r?.deferrable===void 0,i=n.standalone===true&&r?.standalone===void 0;return !o&&!i?e:{...e,savings:{
|
|
1053
1058
|
...r??{},...o?{deferrable:true}:{},...i?{standalone:true}:{}}}}motivoDeEntregaEntera(e){return e.response?.schema!=null?"output-contract":e.savings?.deferrable===true?"deferrable":typeof this.config.provider.
|
|
@@ -1056,50 +1061,50 @@ usage.complete===false&&(n.sinContador+=1),r}async llamarProveedorEnStream(e,n,r
|
|
|
1056
1061
|
e,{signal:r.senal})){if(r.senal.aborted)break;if(s.type==="text")s.delta!==""&&(o+=s.delta,r.texto(s.delta));else if(s.type==="done"){i=s.response;break}}}catch(s){throw r.senal.aborted?new ke(true):(n.
|
|
1057
1062
|
falloDelProveedor=true,s)}if(!i)throw r.senal.aborted?new ke(true):(n.falloDelProveedor=true,new Error(`provider "${this.config.provider.id}" stream ended without a final response`));return r.proveedorTermino(),
|
|
1058
1063
|
i.usage.complete===false&&(n.sinContador+=1),i.text!==o&&(this.avisar(`stream-texto-distinto:${this.config.provider.id}`,`[bvsala] provider "${this.config.provider.id}" streamed text that differs from it\
|
|
1059
|
-
s final response; the streamed text is what the caller received, so it is what is reported and cached. Its generateStream must end with a done whose response.text equals the concatenated deltas.`),i=
|
|
1060
|
-
i,{...i,text:o})),r.sirvioEnVivo=true,i}decidirMarcadoDeCache(e,n,r,o,i,s,a,c=null){let u=e.savings?.standalone===true&<(n,dt(this.config.provider))?
|
|
1061
|
-
mensajesDePrefijo:0,cacheWriteMultiplier:1,explicita:l,explicitaPorColocador:false,colocacion:null},p=
|
|
1064
|
+
s final response; the streamed text is what the caller received, so it is what is reported and cached. Its generateStream must end with a done whose response.text equals the concatenated deltas.`),i=Xa(
|
|
1065
|
+
i,{...i,text:o})),r.sirvioEnVivo=true,i}decidirMarcadoDeCache(e,n,r,o,i,s,a,c=null){let u=e.savings?.standalone===true&<(n,dt(this.config.provider))?ni(n):null,l=u!==null,d={marcar:false,huella:"",claveDeVerja:"",
|
|
1066
|
+
mensajesDePrefijo:0,cacheWriteMultiplier:1,explicita:l,explicitaPorColocador:false,colocacion:null},p=gs(n,this.config.compressionEconomics);if(!p)return a.record("prefix-cache","skipped",{reason:`no cac\
|
|
1062
1067
|
he read discount for model "${n}" (unrecognised provider, or a declared tier that does not discount reads): not claiming a cacheable prefix`}),d;if(!o.setIsStable)return a.record("prefix-cache","skipp\
|
|
1063
1068
|
ed",{reason:"the tool SET is selected per request; tools render first, so the prefix cannot hit. Pruning wins here (it is a measured saving); pass the tools you want fixed."}),d;if(i)return a.record("\
|
|
1064
1069
|
prefix-cache","skipped",{reason:"savings.toolDiscovery is on: which schemas travel is decided by a non-deterministic probe, so the tool block \u2014 which renders first \u2014 varies across requests that would \
|
|
1065
1070
|
share a prefix fingerprint. Marking would pay the 1.25x write premium for a prefix that cannot hit. Turn tool discovery off to reclaim the prefix cache."}),d;let h=null;if(this.config.cacheBreakpoints===
|
|
1066
1071
|
"auto"&&!l){let k=this.colocarConEspejo(e,n,r,o,s,p,a,c);if("marcado"in k)return k.marcado;h=k.observacion;}if(s<=0)return {...d,colocacion:h};let m=r.slice(0,s),g=this.tokensFor(this.assemblePromptText(
|
|
1067
|
-
m,o.tools),e),f=this.tokensFor(this.assemblePromptText(r,o.tools),e),v=
|
|
1072
|
+
m,o.tools),e),f=this.tokensFor(this.assemblePromptText(r,o.tools),e),v=Y(he({model:n,tools:(o.tools??[]).map(k=>k.id),prefijo:m.map(k=>`${k.role}:${k.content}`)})),b=l?`${v}|explicit`:v,y=this.verjaDeCache.
|
|
1068
1073
|
decidir(b,{totalTokens:f,stablePrefixTokens:g,tier:u??p});return a.record("prefix-cache",y.marcar?"marked":"skipped",{reason:y.razon,stablePrefixTokens:g,breakEvenHitRate:y.umbral,observedHitRate:y.observada,
|
|
1069
1074
|
...l?{mode:"explicit"}:{}}),y.marcar?{marcar:true,huella:v,claveDeVerja:b,mensajesDePrefijo:s,cacheWriteMultiplier:p.cacheWriteMultiplier,explicita:l,explicitaPorColocador:false,colocacion:h}:{...d,colocacion:h}}colocarConEspejo(e,n,r,o,i,s,a,c=null){
|
|
1070
|
-
let{tramoOpenAI:u,conPrima:l}=this.primasDelColocador(e,n,s);if(!l&&!u)return {observacion:null};let d=
|
|
1071
|
-
tools),g=m[d],f=c?.clase===g?c:null,v=f?.espejo??this.espejoDeCache,b=this.now(),y=v.observar(g,m,b),k=v.estadistica(g,b),T=f?{mirrorStore:f.estado}:{},w={S:d,...p>d?{H:p}:{},T:h},
|
|
1072
|
-
this.assemblePromptText(r.slice(0,z),o.tools),e),x={clase:g,huellas:m,tramos:w,coincidencia:y,enviada:b,...f?{conAlmacen:true}:{}};if(u){let z=
|
|
1075
|
+
let{tramoOpenAI:u,conPrima:l}=this.primasDelColocador(e,n,s);if(!l&&!u)return {observacion:null};let d=ts(r),p=Math.max(d,Math.min(i,r.length)),h=r.length,m=c?.huellas??this.huellasDelColocador(e,n,r,o.
|
|
1076
|
+
tools),g=m[d],f=c?.clase===g?c:null,v=f?.espejo??this.espejoDeCache,b=this.now(),y=v.observar(g,m,b),k=v.estadistica(g,b),T=f?{mirrorStore:f.estado}:{},w={S:d,...p>d?{H:p}:{},T:h},P=z=>this.tokensFor(
|
|
1077
|
+
this.assemblePromptText(r.slice(0,z),o.tools),e),x={clase:g,huellas:m,tramos:w,coincidencia:y,enviada:b,...f?{conAlmacen:true}:{}};if(u){let z=Lu({estadistica:k,tramo:u,hayHistorial:p>d});a.record("pref\
|
|
1073
1078
|
ix-cache-placement",z.explicita?"explicit":"provider-default",{reason:z.razon,breakEvenReuseRate:z.equilibrio,continuedWithin30m:k.T.en30m,samples:k.T.muestras30m,...T});let ee={...x,cola:!z.explicita,
|
|
1074
1079
|
ttl:"5m",ultimo:z.explicita?null:"T",indiceDelUltimo:z.explicita?null:h};if(!z.explicita)return {observacion:ee};let L=z.historial?p:d;if(L<=0)return {marcado:{marcar:false,huella:"",claveDeVerja:"",mensajesDePrefijo:0,
|
|
1075
|
-
cacheWriteMultiplier:1,explicita:true,explicitaPorColocador:true,colocacion:{...ee,ultimo:null,indiceDelUltimo:null}}};let
|
|
1076
|
-
h),stablePrefixTokens:
|
|
1077
|
-
marcar,huella:
|
|
1078
|
-
ultimo:
|
|
1079
|
-
d,lecturaPrevista:()=>y?
|
|
1080
|
-
ent",boundary:
|
|
1081
|
-
confirmadas}/${k.predichas}`,...T});let
|
|
1082
|
-
explicita:false,explicitaPorColocador:false,colocacion:
|
|
1083
|
-
T,stablePrefixTokens:R.cola?
|
|
1084
|
-
observedHitRate:V.observada}),V.marcar?{marcado:{marcar:true,huella:this.huellaDelPrefijo(n,o.tools,r,
|
|
1085
|
-
colocacion:{...
|
|
1080
|
+
cacheWriteMultiplier:1,explicita:true,explicitaPorColocador:true,colocacion:{...ee,ultimo:null,indiceDelUltimo:null}}};let se=L===d?"S":"H",ae=`${g}|explicit|${se}`,G=this.verjaDeCache.decidir(ae,{totalTokens:P(
|
|
1081
|
+
h),stablePrefixTokens:P(L),tier:u});return a.record("prefix-cache",G.marcar?"marked":"skipped",{reason:G.razon,breakEvenHitRate:G.umbral,observedHitRate:G.observada,mode:"explicit"}),{marcado:{marcar:G.
|
|
1082
|
+
marcar,huella:G.marcar?this.huellaDelPrefijo(n,o.tools,r,L):"",claveDeVerja:G.marcar?ae:"",mensajesDePrefijo:G.marcar?L:0,cacheWriteMultiplier:1,explicita:true,explicitaPorColocador:true,colocacion:{...ee,
|
|
1083
|
+
ultimo:G.marcar?se:null,indiceDelUltimo:G.marcar?L:null}}}}let S={S:d>0?P(d):0,H:p>d?P(p):0,T:P(h)},O=Qo(n),R=Mu({estadistica:k,tramo:s,primaDeUnaHora:O>s.cacheWriteMultiplier?O:null,tokens:S,hayHistorial:p>
|
|
1084
|
+
d,lecturaPrevista:()=>y?P(y.indice):0}),C=R.historial&&p>d?p:d,I=R.cola?"T":C>0?C===p&&p>d?"H":"S":null,D=R.cola?h:C>0?C:null;a.record("prefix-cache-placement",I??"none",{reason:R.razon||"fixed placem\
|
|
1085
|
+
ent",boundary:C===0?"none":C===d?"system":"history",tail:R.cola,ttl:R.ttl,breakEvenReuseRate:R.equilibrio,historyReusedWithin5m:k.H.en5m,continuedWithin5m:k.T.en5m,samples:k.T.muestras5m,providerConfirmedReads:`${k.
|
|
1086
|
+
confirmadas}/${k.predichas}`,...T});let A={...x,cola:R.cola,ttl:R.ttl,ultimo:null,indiceDelUltimo:null};if(I==null||D==null)return {marcado:{marcar:false,huella:"",claveDeVerja:"",mensajesDePrefijo:0,cacheWriteMultiplier:1,
|
|
1087
|
+
explicita:false,explicitaPorColocador:false,colocacion:A}};let j=R.ttl==="1h"?{...s,cacheWriteMultiplier:O}:s,B=`${g}|${C===0?"-":C===d?"S":"H"}${R.cola?"+T":""}@${R.ttl}`,V=this.verjaDeCache.decidir(B,{totalTokens:S.
|
|
1088
|
+
T,stablePrefixTokens:R.cola?S.T:C===d?S.S:S.H,tier:j});return a.record("prefix-cache",V.marcar?"marked":"skipped",{reason:V.razon,stablePrefixTokens:R.cola?S.T:C===d?S.S:S.H,breakEvenHitRate:V.umbral,
|
|
1089
|
+
observedHitRate:V.observada}),V.marcar?{marcado:{marcar:true,huella:this.huellaDelPrefijo(n,o.tools,r,C),claveDeVerja:B,mensajesDePrefijo:C,cacheWriteMultiplier:s.cacheWriteMultiplier,explicita:false,explicitaPorColocador:false,
|
|
1090
|
+
colocacion:{...A,ultimo:I,indiceDelUltimo:D}}}:{marcado:{marcar:false,huella:"",claveDeVerja:"",mensajesDePrefijo:0,cacheWriteMultiplier:1,explicita:false,explicitaPorColocador:false,colocacion:A}}}apuntarEnElEspejo(e,n,r,o=this.
|
|
1086
1091
|
espejoDeCache,i={}){let s=e.colocacion,a=n.complete!==false,c=Math.max(0,n.cachedInputTokens??0),u=Math.max(0,n.cacheWriteInputTokens??0),l=s.ultimo!=null&&s.indiceDelUltimo!=null,d=s.coincidencia?.indice;
|
|
1087
|
-
if(a&&l&&s.coincidencia&&d!==void 0&&s.indiceDelUltimo>=d&&s.indiceDelUltimo-d<
|
|
1092
|
+
if(a&&l&&s.coincidencia&&d!==void 0&&s.indiceDelUltimo>=d&&s.indiceDelUltimo-d<_u){let p=o.estadistica(s.clase,s.enviada);o.verificar(s.clase,s.coincidencia,c);let h=o.estadistica(s.clase,s.enviada);if(h.
|
|
1088
1093
|
predichas>p.predichas){let m=h.confirmadas>p.confirmadas,g=i.diagnostico;r.record("prefix-cache-placement","verified",{predictedRead:s.coincidencia.posicionDelProveedor,providerCacheRead:c,confirmed:m,
|
|
1089
1094
|
...!m&&g?{cacheMissReason:g.missReason,...g.missedInputTokens!==void 0?{cacheMissedInputTokensEstimate:g.missedInputTokens}:{}}:{},...h.apagada&&!p.apagada?{reason:`the provider's counter confirmed on\
|
|
1090
1095
|
ly ${h.confirmadas} of ${h.predichas} predicted cache reads: this traffic goes back to the fixed placement`}:{}});}}o.registrar({clase:s.clase,huellas:s.huellas,tramos:s.tramos,enviada:s.enviada,ultimoMarcado:l?
|
|
1091
1096
|
s.ultimo:null,posicionDelProveedor:a&&l?c+u:null,ttl:s.ttl,idDelProveedor:this.config.cacheMissDiagnostics===true&&l?i.id??null:null});}async apuntarEnElAlmacen(e,n,r,o){let i=this.config.cacheBreakpointStore,
|
|
1092
|
-
s=e.colocacion,a=
|
|
1093
|
-
return}let u=new
|
|
1094
|
-
touched"});return}u.observar(s.clase,s.huellas,s.enviada),this.apuntarEnElEspejo(e,n,r,u,o);try{await i.set(a,u.exportarClase(s.clase),
|
|
1095
|
-
could not write the placement store (${
|
|
1096
|
-
true&<(n,s))return null;let a=
|
|
1097
|
-
e,n,r,o.tools),d=l[
|
|
1098
|
-
huellas:l,espejo:p,estado:h}}primasDelColocador(e,n,r){let o=dt(this.config.provider),i=e.savings?.standalone===void 0&<(n,o);return {tramoOpenAI:i?
|
|
1099
|
-
let i=
|
|
1097
|
+
s=e.colocacion,a=ns(s.clase),c;try{c=await i.get(a);}catch(l){r.record("prefix-cache-placement","store-error",{reason:`could not read the placement store (${Sl(l)}), so this request was not recorded`});
|
|
1098
|
+
return}let u=new qt;if(c!=null&&u.importarClase(s.clase,c)==="newer"){r.record("prefix-cache-placement","store-error",{reason:"the placement store holds a state written by a newer SDK version; left un\
|
|
1099
|
+
touched"});return}u.observar(s.clase,s.huellas,s.enviada),this.apuntarEnElEspejo(e,n,r,u,o);try{await i.set(a,u.exportarClase(s.clase),Ou);}catch(l){r.record("prefix-cache-placement","store-error",{reason:`\
|
|
1100
|
+
could not write the placement store (${Sl(l)})`});}}async cargarEspejo(e,n,r,o,i){if(this.config.cacheBreakpoints!=="auto"||!o.setIsStable||i)return null;let s=dt(this.config.provider);if(e.savings?.standalone===
|
|
1101
|
+
true&<(n,s))return null;let a=gs(n,this.config.compressionEconomics);if(!a)return null;let{tramoOpenAI:c,conPrima:u}=this.primasDelColocador(e,n,a);if(!u&&!c)return null;let l=this.huellasDelColocador(
|
|
1102
|
+
e,n,r,o.tools),d=l[ts(r)],p=new qt,h;try{let m=await this.config.cacheBreakpointStore.get(ns(d));h=m==null?"empty":p.importarClase(d,m)==="loaded"?"loaded":"unreadable";}catch{h="unavailable";}return {clase:d,
|
|
1103
|
+
huellas:l,espejo:p,estado:h}}primasDelColocador(e,n,r){let o=dt(this.config.provider),i=e.savings?.standalone===void 0&<(n,o);return {tramoOpenAI:i?ni(n):null,conPrima:r.cacheWriteMultiplier>1&&!i}}huellasDelColocador(e,n,r,o){
|
|
1104
|
+
let i=he({model:n,tools:(o??[]).map(s=>s.id),schema:e.response?.schema??null});return Au(i,r)}huellaDelPrefijo(e,n,r,o){return Y(he({model:e,tools:(n??[]).map(i=>i.id),prefijo:r.slice(0,o).map(i=>`${i.
|
|
1100
1105
|
role}:${i.content}`)}))}decidirCascada(e,n,r,o,i=this.now()){let s=r.modelCascade??"off",a={modo:"off",modeloPedido:e.model,modeloServido:e.model,candidato:null,enruta:false,elegible:false,razon:"the model \
|
|
1101
|
-
cascade is off",fuerza:"none",bucket:"",economia:null,observada:null,muestras:0,precioBarato:null,tasaDeMuestreo:0};if(s==="off")return a;let c
|
|
1102
|
-
this.config.modelCascade?.pairs??
|
|
1106
|
+
cascade is off",fuerza:"none",bucket:"",economia:null,observada:null,muestras:0,precioBarato:null,tasaDeMuestreo:0};if(s==="off")return a;let c=Bu({schema:e.response?.schema,tools:e.tools}),u=$u(e.model,
|
|
1107
|
+
this.config.modelCascade?.pairs??rs),l=this.precioConocido(e.model,i),d=u?this.precioConocido(u,i):void 0,p=Nu(d,l),h=Y(he({tenant:n.tenantId,scope:n.authorizationScope,contract:n.contractId,schema:n.
|
|
1103
1108
|
schemaVersion,fuerte:e.model,barato:u,tools:n.toolsetHash})),m=this.verjaDeCascada.estado(h),g={modo:s,modeloPedido:e.model,modeloServido:e.model,candidato:u,enruta:false,elegible:false,razon:c.razon,fuerza:c.
|
|
1104
1109
|
fuerza,bucket:h,economia:p,observada:m&&m.enrutadas>0?m.escaladas/m.enrutadas:null,muestras:m?.enrutadas??0,precioBarato:d??null,tasaDeMuestreo:0},f=y=>(o.record("model-cascade",s==="on"?"not routed":
|
|
1105
1110
|
"not eligible",{reason:y}),{...g,razon:y});if(!c.elegible)return f(c.razon);if(!u)return f(`no cheaper model is paired with "${e.model}"; declare one in createSavingsLayer({ modelCascade: { pairs } })\
|
|
@@ -1113,8 +1118,8 @@ er its meaning, so a well-formed answer with wrong content is served and counted
|
|
|
1113
1118
|
o.record("model-cascade","routed",{candidateModel:u,costRatio:p.r,breakEvenEscalationRate:p.equilibrio,observedEscalationRate:b.observada,verifier:c.fuerza,workload:h,reason:b.razon}),{...g,modeloServido:u,
|
|
1114
1119
|
enruta:true,elegible:true,razon:b.razon,observada:b.observada,muestras:b.muestras,tasaDeMuestreo:0}):(o.record("model-cascade","off (gate)",{reason:b.razon,observedEscalationRate:b.observada,breakEvenEscalationRate:p.
|
|
1115
1120
|
equilibrio}),{...g,elegible:true,razon:b.razon,observada:b.observada,muestras:b.muestras})}devOpen(){return false}exigirLicencia(){this.assertLicensed();}assertLicensed(){if(this.devOpen())return;let e=this.
|
|
1116
|
-
config.licenseGate;if(e&&typeof e.isActive=="function"){if(e.isActive())return;let n=typeof e.status=="function"?e.status():void 0,r=typeof e.reason=="function"?e.reason():void 0;throw new Qe(
|
|
1117
|
-
n)}throw e?new Qe(
|
|
1121
|
+
config.licenseGate;if(e&&typeof e.isActive=="function"){if(e.isActive())return;let n=typeof e.status=="function"?e.status():void 0,r=typeof e.reason=="function"?e.reason():void 0;throw new Qe(kl(n,r),
|
|
1122
|
+
n)}throw e?new Qe(Um(),"invalid"):new Qe(kl("none"),"none")}avisar(e,n){this.config.silenceWarnings||ye(e,n);}avisarDeTruncado(e,n,r,o,i){let s=e.response?.maxOutputTokens,a=Pn(e)||"(no contractId)",c=i?
|
|
1118
1123
|
" The layer has NOTED it: the next requests for this contract will carry their value limits written into the prompt, which is the only thing that can fix it without touching your cap. If it still gets\
|
|
1119
1124
|
cut off, the task does not fit the contract: widen the schema and raise the cap with it.":"",u=o===null?" The schema does not bound the response (no `maxLength`/`maxItems`), so there is no way to kno\
|
|
1120
1125
|
w in advance how much it needs: bound it and the cap stops being a guess.":s==null?` The contract allows ~${o} tokens and this request declares no cap, so the cut came from a PROVIDER cap (the Anthrop\
|
|
@@ -1130,177 +1135,178 @@ uld decide to pay for: plug it in with `createSavingsLayer({ compressor })`, any
|
|
|
1130
1135
|
The rest of the layer keeps saving as usual."),e.semanticCache&&!this.deps.semanticCache&&this.avisar("palanca-sin-cache-semantica",'[bv-sala] `savings.semanticCache` was requested but this layer has\
|
|
1131
1136
|
no semantic cache, so every rephrased question will come out `cache: "miss"` and be paid to the provider again. It is not on by default because it needs an embedder, which is your own cost and provid\
|
|
1132
1137
|
er: plug it in with `createSavingsLayer({ semanticCache: new InMemorySemanticCache({ embed }) })`. The exact cache and the rest of the layer keep working.'));}async generateOptimized(e,n={llamadas:0,falloDelProveedor:false,
|
|
1133
|
-
sinContador:0},r=null){this.assertLicensed();let o=new
|
|
1134
|
-
this.deps.semanticCache&&
|
|
1138
|
+
sinContador:0},r=null){this.assertLicensed();let o=new mn(this.now),i=new Et,s=Ro(e),a=Fn(s),c=e.savings??{};this.avisarDePalancasSinConfigurar(c),c.semanticCache&&c.semanticCache!=="include-agentic"&&
|
|
1139
|
+
this.deps.semanticCache&&xl(s,a)&&this.avisar("semantica-agentica-apagada",'[bv-sala] `savings.semanticCache` is on, but this request is agentic (it declares tools, carries tool calls or results, or h\
|
|
1135
1140
|
olds more than one user turn), so the semantic cache was neither consulted nor written for it. That is the default: two runs of an agent loop can differ only in what a tool returned, and the guard und\
|
|
1136
1141
|
er the similarity score cannot see that. The exact cache is unaffected. To include agentic requests, set `savings.semanticCache: "include-agentic"` after measuring it on your own traffic.');let u=this.
|
|
1137
1142
|
now(),l=this.decidirCascada(e,s,c,o,u),d=this.costModelFor(l.modeloServido,u);o.record("canonicalize","done",{tenant:s.tenantId,contract:s.contractId}),o.record("policy",a.reasons.join("; ")||"no rest\
|
|
1138
|
-
rictions",{allowExactCache:a.allowExactCache,allowSemanticCache:a.allowSemanticCache});let p=this.tokensFor(this.assembleBaselinePrompt(e),e),h=e.response?.maxOutputTokens??256,m,g=()=>m??=
|
|
1143
|
+
rictions",{allowExactCache:a.allowExactCache,allowSemanticCache:a.allowSemanticCache});let p=this.tokensFor(this.assembleBaselinePrompt(e),e),h=e.response?.maxOutputTokens??256,m,g=()=>m??=ms(e);if(i.
|
|
1139
1144
|
baselineInput=p,i.baselineOutput=h,i.baselineTools=e.tools?.length??0,c.deterministicResolvers!==false){let y=this.deps.resolvers.try(s);if(y)return i.avoidCall(p,this.tokensFor(y.text,e)),o.record("reso\
|
|
1140
|
-
lver",y.resolver,{avoided:true}),this.finish(e,s,{text:y.text,data:y.data,storedAtMs:this.now()},"deterministic",i,d,o,
|
|
1141
|
-
model}))}let f=
|
|
1142
|
-
toggles:c,huella:g,texto:y.text,claveLeida:f,calidad:()=>{let T=e.response?.schema;return !T||
|
|
1145
|
+
lver",y.resolver,{avoided:true}),this.finish(e,s,{text:y.text,data:y.data,storedAtMs:this.now()},"deterministic",i,d,o,Cn(),En(),void 0,void 0,void 0,void 0,void 0,this.informeDeCascada(l,{servedModel:e.
|
|
1146
|
+
model}))}let f=Do(s,{servedModel:l.modeloServido});if(a.allowExactCache&&c.exactCache!==false){let y=await this.deps.exactCache.get(f);if(y){let k=this.creditoPorReferencia(il(y.meta),{request:e,cascada:l,
|
|
1147
|
+
toggles:c,huella:g,texto:y.text,claveLeida:f,calidad:()=>{let T=e.response?.schema;return !T||de(y.data,T).valid}});return k.ok?i.avoidCallByReference(k.credit):(i.avoidCall(p,this.tokensFor(y.text,e)),
|
|
1143
1148
|
i.referenceRejected=k.reason),o.record("exact-cache","hit",{ageMs:this.now()-y.storedAtMs,basis:k.ok?"reference":"estimated",...k.ok?{}:{referenceRejected:k.reason},...k.ok&&k.outputNotCredited?{outputNotCredited:k.
|
|
1144
|
-
outputNotCredited}:{}}),this.finish(e,s,y,"exact",i,d,o,
|
|
1149
|
+
outputNotCredited}:{}}),this.finish(e,s,y,"exact",i,d,o,Cn(),En(),this.now()-y.storedAtMs,void 0,void 0,void 0,void 0,this.informeDeCascada(l))}o.record("exact-cache","miss");}let v=Qs(s,{servedModel:l.
|
|
1145
1150
|
modeloServido,deferrable:c.deferrable===true,toolDiscovery:c.toolDiscovery===true,...e.response?.maxOutputTokens!=null?{maxOutputTokens:e.response.maxOutputTokens}:{}}),b=async()=>{try{return await this.expensivePath(
|
|
1146
|
-
n,e,s,a,c,i,d,o,f,p,l,r,u)}catch(y){throw (n.falloDelProveedor||n.llamadas>0)
|
|
1147
|
-
v):void 0;if(w){let
|
|
1148
|
-
asCoalescedFollower(
|
|
1151
|
+
n,e,s,a,c,i,d,o,f,p,l,r,u)}catch(y){throw (n.falloDelProveedor||n.llamadas>0)&&qm(y),y}};if(a.allowSingleflight&&c.singleflight!==false){if(r){let T=this.deps.singleflight,w=typeof T.join=="function"?T.join(
|
|
1152
|
+
v):void 0;if(w){let P=await w;return this.noReproducibles.has(P)?(o.record("singleflight","not coalesced: the answer in flight cannot be replayed"),b()):(o.record("singleflight","coalesced",{key:v}),this.
|
|
1153
|
+
asCoalescedFollower(P,p,this.tokensFor(P.text??"",e),d,e))}return o.record("singleflight","skipped (streaming: a streamed request never leads)"),b()}let{value:y,coalesced:k}=await this.deps.singleflight.
|
|
1149
1154
|
run(v,b);if(k&&this.noReproducibles.has(y))return o.record("singleflight","not coalesced: the answer in flight cannot be replayed"),b();if(k){o.record("singleflight","coalesced",{key:v});let T=this.creditoPorReferencia(
|
|
1150
1155
|
this.referenciasDeLider.get(y)??"absent",{request:e,cascada:l,toggles:c,huella:g,texto:y.text??"",claveLeida:void 0,calidad:()=>y.report.constraints.structurallyValid!==false&&y.report.qualityStatus!=="r\
|
|
1151
1156
|
ejected"});return this.asCoalescedFollower(y,p,this.tokensFor(y.text??"",e),d,e,T)}return y}return b()}async expensivePath(e,n,r,o,i,s,a,c,u,l,d,p,h){let m=this.entitled("semantic_cache"),g=null;if(i.
|
|
1152
|
-
semanticCache&&i.semanticCache!=="include-agentic"&&this.deps.semanticCache&&
|
|
1157
|
+
semanticCache&&i.semanticCache!=="include-agentic"&&this.deps.semanticCache&&xl(r,o)&&c.record("semantic-cache",'skipped: agentic traffic (default); set savings.semanticCache: "include-agentic" to inc\
|
|
1153
1158
|
lude it'),o.allowSemanticCache&&i.semanticCache&&this.deps.semanticCache&&!m&&c.record("semantic-cache","degraded: feature not included in this license"),o.allowSemanticCache&&i.semanticCache&&this.deps.
|
|
1154
|
-
semanticCache&&m){let
|
|
1155
|
-
answer.text,n)),c.record("semantic-cache","hit",{confidence:N.confidence,similarity:N.similarity}),this.finish(n,r,N.record.answer,"semantic",s,a,c,
|
|
1156
|
-
this.informeDeCascada(d,{servedModel:n.model}),void 0,void 0,void 0,{semantico:N});c.record("semantic-cache","miss",g?{calibration:g.reason,score:g.score}:void 0);}let f=i.router===false,v=f?
|
|
1159
|
+
semanticCache&&m){let E=this.deps.semanticCache,M=E.calibrated?await E.lookup(r,{agentic:o.isAgentic}):{hit:await E.find(r),probe:null},N=M.hit;if(g=M.probe,N)return s.avoidCall(l,this.tokensFor(N.record.
|
|
1160
|
+
answer.text,n)),c.record("semantic-cache","hit",{confidence:N.confidence,similarity:N.similarity}),this.finish(n,r,N.record.answer,"semantic",s,a,c,Cn(),En(),N.ageMs,N.confidence,void 0,void 0,void 0,
|
|
1161
|
+
this.informeDeCascada(d,{servedModel:n.model}),void 0,void 0,void 0,{semantico:N});c.record("semantic-cache","miss",g?{calibration:g.reason,score:g.score}:void 0);}let f=i.router===false,v=f?Cn():this.deps.
|
|
1157
1162
|
router.classify(r);c.record("router",v.executionClass,{confidence:v.confidence,reason:v.reason});let b=this.planearBusquedaNativa(n,i,v.executionClass,f,d,a,c),y=b?b.seleccion:f?this.deps.toolSelector.
|
|
1158
|
-
passthrough(n.tools):this.deps.toolSelector.select(r.normalizedText,n.tools,v.executionClass,r.toolsetHash);if(!b
|
|
1159
|
-
actualTools=y.tools.length,y.droppedIds.length){let
|
|
1160
|
-
reason,{dropped:y.droppedIds,eliminatedTokens:
|
|
1163
|
+
passthrough(n.tools):this.deps.toolSelector.select(r.normalizedText,n.tools,v.executionClass,r.toolsetHash);if(!b&&Bo(i.toolSearch).modo==="off"&&this.avisarDeCatalogoRecortado(n,y,d.modeloServido),s.
|
|
1164
|
+
actualTools=y.tools.length,y.droppedIds.length){let E=new Set(y.droppedIds),M=(n.tools??[]).filter(N=>E.has(N.id)).reduce((N,U)=>N+this.tokensFor(Qr(U),n),0);s.eliminate(M),c.record("tool-selector",y.
|
|
1165
|
+
reason,{dropped:y.droppedIds,eliminatedTokens:M});}s.baselineRetrieval=this.config.retriever?v.rounds:0;let k=await ka({execution:v.executionClass,query:r.normalizedText,maxRounds:n.retrieval?.maxRounds??
|
|
1161
1166
|
v.rounds,maxDocuments:n.retrieval?.maxDocuments??5},{...this.config.retriever?{retriever:this.config.retriever}:{},...this.config.reranker?{reranker:this.config.reranker}:{}});s.actualRetrieval=k.rounds,
|
|
1162
|
-
k.retrievedCount>0&&c.record("retrieval",`kept ${k.keptCount}/${k.retrievedCount}`,{rounds:k.rounds});let T=
|
|
1167
|
+
k.retrievedCount>0&&c.record("retrieval",`kept ${k.keptCount}/${k.retrievedCount}`,{rounds:k.rounds});let T=En(),w=[...n.messages],P=vs(n.messages),x=false,S=k.docs.length>0?{role:"system",content:`Retri\
|
|
1163
1168
|
eved context \u2014 answer using only this evidence and cite sources by [id]:
|
|
1164
1169
|
|
|
1165
|
-
`+k.docs.map((
|
|
1166
|
-
${
|
|
1170
|
+
`+k.docs.map((E,M)=>`[${E.source??E.id??`doc${M+1}`}]
|
|
1171
|
+
${E.text}`).join(`
|
|
1167
1172
|
|
|
1168
|
-
`)}:null,
|
|
1169
|
-
JSON limits (not API-enforced): ${
|
|
1170
|
-
{model:n.model,...n.tokenizer?{tokenizer:n.tokenizer}:{}});let N=this.tokensFor(T.encoded+T.instruction,n);s.compress(
|
|
1171
|
-
`:"")+T.encoded}),c.record("serialization",T.chosen,{reason:T.reason,jsonTokens:
|
|
1172
|
-
disabled; sent compact JSON"});}if(
|
|
1173
|
-
{},
|
|
1174
|
-
{}},
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
this.assemblePromptText(
|
|
1178
|
-
compressorCostTokens});
|
|
1179
|
-
xe=ve.reason;}Pe||(
|
|
1180
|
-
s.compressionReport={originalTokens:
|
|
1181
|
-
let
|
|
1182
|
-
record("elision","applied",{elided:
|
|
1183
|
-
ge\xD7size threshold"});}let
|
|
1184
|
-
luded in this license"),
|
|
1185
|
-
indice],xe=this.tokensFor(Pe.content,n),
|
|
1186
|
-
(Ue[He]??0)+1;}w=
|
|
1187
|
-
compactados.length,before:
|
|
1188
|
-
cacheReadMultiplier:
|
|
1189
|
-
ery later turn"});}let
|
|
1190
|
-
null;
|
|
1191
|
-
schemaTokensCompact:
|
|
1192
|
-
breakEvenOutputDeltaTokens:
|
|
1173
|
+
`)}:null,O=Pn(n),R=n.response?.maxOutputTokens!=null?Math.floor(n.response.maxOutputTokens*3.2):null,C=this.contratosQueIncumplen.has(O)?bs(n.response?.schema,"",R):"";if(C&&Rn(w,{role:"system",content:`\
|
|
1174
|
+
JSON limits (not API-enforced): ${C}`}),n.structuredData!==void 0){let E=JSON.stringify(n.structuredData),M=this.tokensFor(E,n);if(i.serialization!==false){T=this.deps.formatSelector.choose(n.structuredData,
|
|
1175
|
+
{model:n.model,...n.tokenizer?{tokenizer:n.tokenizer}:{}});let N=this.tokensFor(T.encoded+T.instruction,n);s.compress(M,N),Rn(w,{role:"system",content:(T.instruction?T.instruction+`
|
|
1176
|
+
`:"")+T.encoded}),c.record("serialization",T.chosen,{reason:T.reason,jsonTokens:M,chosenTokens:N});}else Rn(w,{role:"system",content:E}),c.record("serialization","json-compact",{reason:"format selector\
|
|
1177
|
+
disabled; sent compact JSON"});}if(S&&Rn(w,S),(i.compression===true||i.compression==="auto")&&o.allowCompression&&this.config.compressor&&this.entitled("long_context_compression")){let E=this.config.compressionEconomics??
|
|
1178
|
+
{},M=Kr(n.model,E),N={compressorCostTokens:E.compressorCostTokens??0,...E.minimumContextTokens!=null?{minimumContextTokens:E.minimumContextTokens}:{},...E.minimumNetTokens!=null?{minimumNetTokens:E.minimumNetTokens}:
|
|
1179
|
+
{}},U=0,Z=0;for(let ue of w)ue.role==="system"?U+=1:Z+=this.tokensFor(ue.content,n);let Ue=this.tokensFor(this.assemblePromptText(w,y.tools),n),ce=Jo({...N,contextTokens:Z,projectedEliminable:Z}),ie=0,
|
|
1180
|
+
H=0,Pe=false,xe=ce.reason;if(ce.compress){let ue=[];for(let J of w){if(J.role==="system"){ue.push(J);continue}let Gt=this.tokensFor(J.content,n),Zt=await this.config.compressor.compress({text:J.content}),
|
|
1181
|
+
zs=!Zt.skipped&&Zt.fidelityPassed&&_a(J.content,Zt.compressed),qs=zs?this.tokensFor(Zt.compressed,n):Gt;zs&&qs<Gt?(ue.push({...J,content:Zt.compressed}),ie+=Gt,H+=qs):ue.push(J);}let He=this.tokensFor(
|
|
1182
|
+
this.assemblePromptText(ue,y.tools),n),ve=Jo({...N,contextTokens:Z,projectedEliminable:ie-H}),Ln=Yu({originalTokens:Ue,compressedTokens:He,tier:M,...E.prefix?{prefix:E.prefix}:{},compressorCostTokens:N.
|
|
1183
|
+
compressorCostTokens});H>=ie?xe="no fidelity-passed net reduction":ve.compress?Ln.comprimir?(Pe=true,xe=Ln.razon,x=ue.slice(0,P).some((J,Gt)=>J.content!==w[Gt]?.content),w=ue,s.compress(ie,H)):xe=Ln.razon:
|
|
1184
|
+
xe=ve.reason;}Pe||(ie=0,H=0),c.record("compression",Pe?"applied":"skipped",{reason:xe,before:ie,after:H,contextTokens:Z,promptTokens:Ue,cacheTierMinimum:M.minimumCacheTokens,protectedSystemMessages:U,prefixRewritten:x}),
|
|
1185
|
+
s.compressionReport={originalTokens:ie,compressedTokens:H,protectedSpans:U,fidelityPassed:true};}if(i.elision!==false&&o.allowElision&&this.entitled("tool_result_elision")){let E=Gu(w);if(E.indices.length>0){
|
|
1186
|
+
let M=this.tokensFor(fs,n),N=0;for(let U of E.indices){let Z=this.tokensFor(w[U].content,n);N+=Math.max(0,Z-M);}(E.indices.some(U=>U<P)&&(x=true),w=Zu(w,E.indices),s.eliminate(N),s.elididoLocal+=N),c.
|
|
1187
|
+
record("elision","applied",{elided:E.indices.length,eliminatedTokens:N,grossBytes:E.bytesOriginales,live:hs});}else c.record("elision","skipped",{reason:"no old/large tool_result over the a\
|
|
1188
|
+
ge\xD7size threshold"});}let I=eh(this.config.toolOutputCompaction,i.toolOutputCompaction);if(I&&!this.entitled("long_context_compression")&&c.record("tool-output-compaction","degraded: feature not inc\
|
|
1189
|
+
luded in this license"),I&&o.allowCompression&&this.entitled("long_context_compression")){let E=ja(w,I),M=0,N=0,U=0,Z=0,Ue={};if(E.compactados.length>0){let ie=w.slice();for(let H of E.compactados){let Pe=w[H.
|
|
1190
|
+
indice],xe=this.tokensFor(Pe.content,n),ue=this.tokensFor(H.texto,n);ie[H.indice]={...Pe,content:H.texto},M+=xe,N+=ue,H.enLaCola?U+=Math.max(0,xe-ue):Z+=Math.max(0,xe-ue);for(let He of H.aplicadas)Ue[He]=
|
|
1191
|
+
(Ue[He]??0)+1;}w=ie,s.compress(M,N),s.compactedLocal+=Math.max(0,M-N);}let ce=Kr(n.model,this.config.compressionEconomics);c.record("tool-output-compaction",E.compactados.length>0?"applied":"skipped",{compacted:E.
|
|
1192
|
+
compactados.length,before:M,after:N,tailSavedTokens:U,replayedSavedTokens:Z,transforms:Ue,fileViewsKeptVerbatim:E.vistasDeFichero,exceptedTools:E.exceptuados,cacheWriteMultiplier:ce.cacheWriteMultiplier,
|
|
1193
|
+
cacheReadMultiplier:ce.cacheReadMultiplier,note:"counted in tokens.compressedInput only; never priced into savings or commission. each tail token saved is one token fewer written now and re-read on ev\
|
|
1194
|
+
ery later turn"});}let D=n.response?.schema,A=D&&i.outputCodebook===true?Uu(D,E=>this.tokensFor(E,n),a,{evidencia:this.memoriaDelCodebook.resolver(d.modeloServido,Pn(n),i.outputCodebookMeasuredOutputDeltaTokens)}):
|
|
1195
|
+
null;A&&c.record("output-codebook",A.applied?"applied":"skipped",{reason:A.reason,...A.applied?{renamedKeys:A.plan.renamedKeys,codedEnumValues:A.plan.codedEnumValues,schemaTokensOriginal:A.plan.schemaTokensOriginal,
|
|
1196
|
+
schemaTokensCompact:A.plan.schemaTokensCompact,modelledShapeSavingTokens:A.plan.modelledShapeSavingTokens,measuredOutputDeltaTokens:A.plan.measuredOutputDeltaTokens,outputDeltaProvenance:A.plan.outputDeltaProvenance,
|
|
1197
|
+
breakEvenOutputDeltaTokens:A.plan.breakEvenOutputDeltaTokens,netSavingUsd:A.plan.netSavingUsd,pricedForModel:d.modeloServido}:{}});let j=A?.applied?A.plan.compactSchema:D,B=j?Ia(d.modeloServido,j,this.
|
|
1193
1198
|
deps.constraintBackends):{backend:"none",reason:"no output contract"};c.record("constraints",B.backend,{reason:B.reason});let V=b?{tools:b.prefijo,setIsStable:y.setIsStable}:y,z=i.toolDiscovery===true&&
|
|
1194
|
-
!b,ee=this.config.cacheBreakpointStore?await this.cargarEspejo(n,d.modeloServido,w,V,z):null,L=this.decidirMarcadoDeCache(n,d.modeloServido,w,V,z,x?
|
|
1195
|
-
e.llamadas>0);let
|
|
1199
|
+
!b,ee=this.config.cacheBreakpointStore?await this.cargarEspejo(n,d.modeloServido,w,V,z):null,L=this.decidirMarcadoDeCache(n,d.modeloServido,w,V,z,x?vs(w,true):P,c,ee),se=this.now();if(p?.senal.aborted)throw new ke(
|
|
1200
|
+
e.llamadas>0);let ae=b?this.sinDescubrimientoPorBusquedaNativa(i,y.tools,c):await this.descubrirHerramientas(e,n,i,y.tools,w,s,a,c),G=ae.tools;s.actualTools=G.length;let Wt={messages:w,...G.length?{tools:G}:
|
|
1196
1201
|
{},...j?{schema:j}:{},...n.response?.maxOutputTokens!=null?{maxOutputTokens:n.response.maxOutputTokens}:{},...n.temperature!=null?{temperature:n.temperature}:{},...n.seed!=null?{seed:n.seed}:{},...i.deferrable?
|
|
1197
|
-
{deferrable:true}:{},...L.explicita?{explicitCacheWrites:true}:{},...b?{toolSearch:b.plan}:{},constraintBackend:B.backend},
|
|
1202
|
+
{deferrable:true}:{},...L.explicita?{explicitCacheWrites:true}:{},...b?{toolSearch:b.plan}:{},constraintBackend:B.backend},An={model:d.modeloServido,...Wt,...L.marcar?{stablePrefixMessages:L.mensajesDePrefijo,
|
|
1198
1203
|
promptCacheKey:L.huella,...L.colocacion&&!L.explicita&&(L.colocacion.cola||L.colocacion.ttl!=="5m")?{cachePlacement:{tail:L.colocacion.cola,ttl:L.colocacion.ttl}}:{},...this.config.cacheMissDiagnostics===
|
|
1199
|
-
true&&L.colocacion?{cacheDiagnostics:{previousMessageId:L.colocacion.coincidencia?.idDelProveedor??null}}:{}}:{}},
|
|
1200
|
-
|
|
1201
|
-
the cheaper tier had no capacity; repeated once at the standard tier and price, as configured with priceLevers.onCapacityError: "standard"'});let{deferrable:
|
|
1202
|
-
let
|
|
1203
|
-
resent?.results??0,resentTools:
|
|
1204
|
-
the adapter did not report what the search did"}),s.actualLlm+=1;let
|
|
1205
|
-
providerMessageId?{id:
|
|
1206
|
-
toolCalls?.length??0)>0});this.verjaDeCascada.registrar(d.bucket,!
|
|
1207
|
-
|
|
1208
|
-
let Ee=ct?n.model:d.modeloServido,
|
|
1209
|
-
true,
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
one",{downgradedFrom:"provider-native",reason:B.reason})),s.sentInputLocal=this.tokensFor(this.assemblePromptText(w,
|
|
1213
|
-
let
|
|
1214
|
-
L.marcar&&L.cacheWriteMultiplier>1;if(
|
|
1215
|
-
ache","not measured: the provider reported no usage for this call");else if(L.marcar){let
|
|
1216
|
-
"1h"?
|
|
1217
|
-
"prefix-cache","measured",{cacheRead:Ae.cachedInputTokens??0,cacheWritePremiumTokens:Ae.cacheWriteInputTokens??0,...
|
|
1218
|
-
L,Ae,c,
|
|
1219
|
-
{model:d.candidato,...
|
|
1220
|
-
toolCalls?.length??0)>0});this.verjaDeCascada.registrar(d.bucket,!
|
|
1221
|
-
e accepted":"sample escalated",{candidateModel:d.candidato,reason:
|
|
1222
|
-
he escalation rate it feeds is a money figure, not a quality one"});}catch(
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
wrapped valid JSON in prose or a markdown fence; it was extracted locally instead of paying a repair call"})),!
|
|
1226
|
-
th",
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
{outcome:"skipped",skipReason:"provider_refusal"};else if(!
|
|
1231
|
-
add(
|
|
1232
|
-
usage.outputTokens,model:Ee,...
|
|
1233
|
-
|
|
1234
|
-
`
|
|
1204
|
+
true&&L.colocacion?{cacheDiagnostics:{previousMessageId:L.colocacion.coincidencia?.idDelProveedor??null}}:{}}:{}},_,Os=false,Jl={...e};try{_=p?await this.llamarProveedorEnStream(An,e,p):await this.llamarProveedor(
|
|
1205
|
+
An,e);}catch(E){if(!this.respaldaFaltaDeCapacidad(i,E,p))throw E;Object.assign(e,Jl),Os=true,c.record("deferred-tier","capacity-fallback",{error:E instanceof Error?E.message.slice(0,200):String(E),reason:'\
|
|
1206
|
+
the cheaper tier had no capacity; repeated once at the standard tier and price, as configured with priceLevers.onCapacityError: "standard"'});let{deferrable:M,...N}=An;_=await this.llamarProveedor(N,e);}
|
|
1207
|
+
let Kl=ur(_),Gl=_.servedServiceTier;b&&c.record("tool-search","provider",{searches:_.toolSearch?.searches??null,loaded:_.toolSearch?.loaded??[],errors:_.toolSearch?.errors??0,resentResults:_.toolSearch?.
|
|
1208
|
+
resent?.results??0,resentTools:_.toolSearch?.resent?.tools??[],reason:_.toolSearch?"what the provider's tool search did in this call; its cost is in the provider's counter and credited to no ledger":"\
|
|
1209
|
+
the adapter did not report what the search did"}),s.actualLlm+=1;let mo=E=>{if(!A?.applied)return E;let M=ze(E);return M.ok?JSON.stringify(A.plan.expand(M.value)):E},pe=mo(_.text),Ae=_.usage,Ms={..._.
|
|
1210
|
+
providerMessageId?{id:_.providerMessageId}:{},..._.cacheDiagnostics?{diagnostico:_.cacheDiagnostics}:{}},ct=false;if(d.enruta){let E=is({texto:pe,schema:D,finishReason:_.finishReason,pidioHerramientas:(_.
|
|
1211
|
+
toolCalls?.length??0)>0});this.verjaDeCascada.registrar(d.bucket,!E.acepta),c.record("model-cascade",E.acepta?"accepted":"escalating",{servedModel:d.modeloServido,reason:E.motivo,checks:E.comprobaciones}),
|
|
1212
|
+
E.acepta||(ct=true,s.cascadeAttempt(_.usage,d.precioBarato??a,L.marcar&&L.cacheWriteMultiplier>1?1:un(d.modeloServido)),s.actualLlm+=1,_=await this.llamarProveedor({model:n.model,...Wt},e),pe=mo(_.text));}
|
|
1213
|
+
let Ee=ct?n.model:d.modeloServido,Jt=ct?this.costModelFor(n.model,h):a;s.actualInput+=_.usage.inputTokens,s.actualOutput+=_.usage.outputTokens;let Zl=_.usage,Yl=_.servedServiceTier,Ql=_.structuredNatively===
|
|
1214
|
+
true,On=ur(_),Xl=Qa(this.config.provider),Ls;A?.applied&&c.record("output-codebook",ze(_.text).ok?"expanded":"not-expanded (response was not JSON)",ze(_.text).ok?{localOutputTokensCompact:this.tokensFor(
|
|
1215
|
+
_.text,n),localOutputTokensExpanded:this.tokensFor(pe,n),creditedLedger:"none",note:"local count of the served answer in both shapes; not credited to any ledger"}:{}),D&&B.backend==="provider-native"&&
|
|
1216
|
+
_.structuredNatively===false&&(B={backend:"none",reason:"provider did not enforce the contract natively; the schema travelled in the prompt and the layer is the only validator"},c.record("constraints","n\
|
|
1217
|
+
one",{downgradedFrom:"provider-native",reason:B.reason})),s.sentInputLocal=this.tokensFor(this.assemblePromptText(w,G),n),s.removedInputLocal=Math.max(0,l-s.sentInputLocal-s.elididoLocal-s.compactedLocal);
|
|
1218
|
+
let ed=s.sentInputLocal;s.sentInputLocal+=ae.tokensLocalesDelSondeo,s.estimatorExact=this.estimatorEsExacto(n),_.usage.cachedInputTokens&&s.providerCached(_.usage.cachedInputTokens);let js=un(Ee),td=!ct&&
|
|
1219
|
+
L.marcar&&L.cacheWriteMultiplier>1;if(js>1&&!td&&(_.usage.cacheWriteInputTokens??0)>0&&s.providerCacheWritePremium(_.usage.cacheWriteInputTokens??0,js,Jt),L.marcar&&Ae.complete===false)c.record("prefix-c\
|
|
1220
|
+
ache","not measured: the provider reported no usage for this call");else if(L.marcar){let E=Math.max(0,Ae.cacheWriteInputTokens??0),M=Math.min(E,Math.max(0,Ae.cacheWrite1hInputTokens??(L.colocacion?.ttl===
|
|
1221
|
+
"1h"?E:0)));s.cacheWritePremium(E-M,L.cacheWriteMultiplier,d.precioBarato??a),M>0&&s.cacheWritePremium(M,Qo(d.modeloServido),d.precioBarato??a),this.verjaDeCache.registrar(L.claveDeVerja,Ae),c.record(
|
|
1222
|
+
"prefix-cache","measured",{cacheRead:Ae.cachedInputTokens??0,cacheWritePremiumTokens:Ae.cacheWriteInputTokens??0,...M>0?{cacheWrite1hTokens:M}:{}});}L.colocacion?.conAlmacen?await this.apuntarEnElAlmacen(
|
|
1223
|
+
L,Ae,c,Ms):L.colocacion&&this.apuntarEnElEspejo(L,Ae,c,this.espejoDeCache,Ms);let yt=null;if(d.modo==="shadow"&&d.elegible&&d.candidato&&d.precioBarato&&Qm(u,d.tasaDeMuestreo))try{let E=await this.llamarProveedor(
|
|
1224
|
+
{model:d.candidato,...Wt},e);s.actualLlm+=1;let M=s.extraCostUsd;s.cascadeAttempt(E.usage,d.precioBarato,un(d.candidato));let N=mo(E.text),U=is({texto:N,schema:D,finishReason:E.finishReason,pidioHerramientas:(E.
|
|
1225
|
+
toolCalls?.length??0)>0});this.verjaDeCascada.registrar(d.bucket,!U.acepta);let Z=U.acepta?Fu(N,pe):null;yt={coste:s.extraCostUsd-M,divergio:Z?Z.divergen:null},c.record("model-cascade",U.acepta?"sampl\
|
|
1226
|
+
e accepted":"sample escalated",{candidateModel:d.candidato,reason:U.motivo,sampleCost:yt.coste,...Z?{diverged:Z.divergen,divergence:Z.motivo}:{},note:"measurement only: this answer was NEVER served. T\
|
|
1227
|
+
he escalation rate it feeds is a money figure, not a quality one"});}catch(E){c.record("model-cascade","sample failed (measurement only; the answer is unaffected)",{error:E instanceof Error?E.message:String(
|
|
1228
|
+
E)});}let Mn=pe,kt=true,Oe={},Kt=(_.toolCalls?.length??0)>0;if(Kt&&(kt=null,D&&c.record("validation","n/a: model requested tool calls (the output contract applies to the final answer)")),D&&!Kt){let E=ze(
|
|
1229
|
+
pe),M=E.ok?de(E.value,D):{valid:false,errors:[{path:"$",message:"not valid JSON"}]},N=false;E.ok&&E.rescatado!=null&&M.valid&&(pe=E.rescatado,N=true,c.record("validation","rescued-locally",{reason:"the model \
|
|
1230
|
+
wrapped valid JSON in prose or a markdown fence; it was extracted locally instead of paying a repair call"})),!M.valid&&Xm(M.errors)&&this.contratosQueIncumplen.add(Pn(n));let U=_.finishReason==="leng\
|
|
1231
|
+
th",Z=wl(_),Ue=!M.valid&&M.errors.some(ce=>/not a valid regular expression/.test(ce.message));if(!M.valid&&Ue)c.record("validation","repair-skipped",{reason:"schema defect (uncompilable pattern); no o\
|
|
1232
|
+
utput can satisfy it, a retry is a wasted call",errors:M.errors}),this.avisar("esquema-roto","[bvsala] The response contract has a `pattern` that is not a valid regex, so no response can satisfy it. N\
|
|
1233
|
+
OT retried (it would be a paid call for the same failure). Fix the schema's `pattern`."),Oe.reparacion={outcome:"skipped",skipReason:"schema_defect"};else if(!M.valid&&Z)c.record("validation","repair-\
|
|
1234
|
+
skipped",{reason:(_.refusal!==void 0?"the provider refused the request (a refusal message instead of an answer)":"the provider refused the request (finish reason content_filter)")+"; a repair on the s\
|
|
1235
|
+
ame model would be refused, and may be billed, again",model:Ee}),Oe.reparacion={outcome:"skipped",skipReason:"provider_refusal"};else if(!M.valid&&U){let ce=qu(D,Pe=>this.tokensFor(Pe,n)),ie=n.response?.
|
|
1236
|
+
maxOutputTokens??null,H=ce!==null&&ie!=null&&ce<=ie;H&&this.contratosQueIncumplen.add(Pn(n)),c.record("validation","repair-skipped",{reason:"output truncated by maxOutputTokens; a retry with the same \
|
|
1237
|
+
cap would truncate again",maxOutputTokens:n.response?.maxOutputTokens??null,outputTokens:_.usage.outputTokens,model:Ee,...ce!==null?{schemaAllowsTokens:ce}:{},learnedValueLimits:H}),this.avisarDeTruncado(
|
|
1238
|
+
n,Ee,_.usage.outputTokens,ce,H),Oe.reparacion={outcome:"skipped",skipReason:"output_truncated"};}else if(!M.valid&&B.backend==="none"){let ce=M.errors.slice(0,5).map(J=>`- ${J.path}: ${J.message}`).join(
|
|
1239
|
+
`
|
|
1240
|
+
`),ie=[{role:"user",content:`Your previous reply did not satisfy the required JSON contract.
|
|
1235
1241
|
|
|
1236
1242
|
Previous reply:
|
|
1237
|
-
${
|
|
1243
|
+
${pe}
|
|
1238
1244
|
|
|
1239
1245
|
Problems found:
|
|
1240
|
-
${
|
|
1246
|
+
${ce}
|
|
1241
1247
|
|
|
1242
|
-
Return ONLY the corrected JSON object. Keep the same content; fix only what is listed.`}],
|
|
1243
|
-
round(Pe*
|
|
1244
|
-
|
|
1245
|
-
invalid answer is served as-is and reported as invalid",errors:
|
|
1248
|
+
Return ONLY the corrected JSON object. Keep the same content; fix only what is listed.`}],H=this.tokensFor(this.assemblePromptText(ie),n),Pe=s.sentInputLocal>0?s.actualInput/s.sentInputLocal:1,xe=Math.
|
|
1249
|
+
round(Pe*H),ue=Math.min(_.usage.outputTokens,n.response?.maxOutputTokens??Number.POSITIVE_INFINITY),He=xe/1e3*Jt.inputPer1k+ue/1e3*Jt.outputPer1k,ve=this.config.skipRepairAboveBaseline?s.estimateCost(
|
|
1250
|
+
Jt):void 0;if(ve!=null&&ve.baselineEstimate>0&&ve.actual+He>ve.baselineEstimate&&ve!=null)c.record("validation","repair-skipped",{reason:"repairing would cost more than not using the layer at all; the\
|
|
1251
|
+
invalid answer is served as-is and reported as invalid",errors:M.errors,baselineUsd:ve.baselineEstimate,actualUsd:ve.actual,repairEstimateUsd:He}),this.avisar("reparacion-mas-cara-que-el-baseline",`[\
|
|
1246
1252
|
bvsala] The answer did not satisfy the output contract, and repairing it would have cost MORE than sending this request without the layer at all (baseline ~$${ve.baselineEstimate}, already spent ~$${ve.
|
|
1247
1253
|
actual}, repair ~$${He.toFixed(6)}). The repair was skipped and the invalid answer is returned with \`constraints.structurallyValid: false\` \u2014 check it before using it. This combination is usually a req\
|
|
1248
1254
|
uest carrying both tools and an output contract; see the adapter warning for the cheaper shapes.`),Oe.reparacion={outcome:"skipped",skipReason:"would_cost_more_than_no_layer"};else {s.retries=1,c.record(
|
|
1249
|
-
"validation","repair-attempt",{errors:
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
d"};}}else
|
|
1253
|
-
errors.length,desenvuelto:N},c.record("validation",kt?"valid":"invalid");}let
|
|
1254
|
-
informeDeEscrituras(i,
|
|
1255
|
+
"validation","repair-attempt",{errors:M.errors}),_=await this.llamarProveedor({model:Ee,messages:ie,schema:D,...n.response?.maxOutputTokens!=null?{maxOutputTokens:n.response.maxOutputTokens}:{}},e),Ls=
|
|
1256
|
+
_.usage,s.actualLlm+=1,s.actualInput+=_.usage.inputTokens,s.actualOutput+=_.usage.outputTokens,s.repairOutput+=_.usage.outputTokens,s.repairInput+=_.usage.inputTokens,s.sentInputLocal+=H,pe=_.text;let J=ze(
|
|
1257
|
+
pe);M=J.ok?de(J.value,D):{valid:false,errors:[{path:"$",message:"not valid JSON"}]},J.ok&&(Mn=J.value,J.rescatado!=null&&M.valid&&(pe=J.rescatado)),Oe.reparacion={outcome:M.valid?"repaired":"still_invali\
|
|
1258
|
+
d"};}}else E.ok&&(Mn=E.value);kt=M.valid,!M.valid&&Oe.reparacion===void 0&&(Oe.reparacion={outcome:"skipped",skipReason:"decode_time_constraint"}),Oe.validacion={resultado:M.valid?"passed":"failed",errores:M.
|
|
1259
|
+
errors.length,desenvuelto:N},c.record("validation",kt?"valid":"invalid");}let nd=this.now()-se,rd=Km(Mn),xt={text:pe,data:Mn,rendered:rd,storedAtMs:this.now()},Ve=this.informeDeDiferido(i,_,Ee,Os),ut=this.
|
|
1260
|
+
informeDeEscrituras(i,Kl,Ae,Gl,d.modeloServido,L.marcar,L.explicitaPorColocador);ut&&c.record("cache-writes",ut.mode,{breakpoints:ut.breakpoints,...ut.avoidedWritePremium?{avoidedWritePremium:ut.avoidedWritePremium.
|
|
1255
1261
|
amount,basis:"estimated"}:{},creditedLedger:"none",reason:ut.reason}),Ve&&c.record("deferred-tier",Ve.credited?"credited":"not-credited",{...Ve.requestedTier?{requestedTier:Ve.requestedTier}:{},...Ve.
|
|
1256
|
-
servedTier?{servedTier:Ve.servedTier}:{},creditedLedger:"none",reason:Ve.reason});let
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
let c
|
|
1276
|
-
map(g=>({id:g.id,tokens:this.tokensFor(
|
|
1262
|
+
servedTier?{servedTier:Ve.servedTier}:{},creditedLedger:"none",reason:Ve.reason});let od=ae.aplicado,Ns=_.finishReason==="length",ho=_.replayable===false,$s=wl(_),wt=kt!==false&&!Kt&&!od&&!Ns&&!ho&&!$s,Bs=this.
|
|
1263
|
+
generateId(),fe;try{fe=ol({contadorSimulado:Go(this.config.provider),origen:Xl,usoPrimario:Zl,usoReparacion:Ls,tierServido:Yl,eliminatedInput:s.eliminatedInput,compressedInput:s.compressedInput,elididoLocal:s.
|
|
1264
|
+
elididoLocal,sentLocalSinSondeo:ed,baselineInput:l,codebookAplicado:A?.applied===!0,tokensDelSondeo:ae.tokensLocalesDelSondeo,sondeoAplicado:ae.aplicado,busquedaNativa:b!==null,hayEsquema:D!=null,esquemaNativo:Ql,
|
|
1265
|
+
esquemaEnFormatoNativo:On?.esquemaEnFormatoNativo===!0&&j===D,esquemaEstricto:On?.esquemaEstricto===!0,esquemaPorPrompt:On?.esquemaPorPrompt===!0,piezasDelAdaptador:On?.piezasDelAdaptador??0,modeloPedido:n.
|
|
1266
|
+
model,modeloServido:Ee,cacheable:wt,mensajesDeLaCapa:w.length-n.messages.length,requestId:Bs,at:this.now(),textoServido:pe,huella:()=>ms(n)});}catch{fe="fingerprint-failed";}let Fs=wt&&o.allowExactCache&&
|
|
1267
|
+
i.exactCache!==false;typeof fe=="object"?c.record("reference","written",{inputTokens:fe.inputTokens,outputTokens:fe.outputTokens,layerInsertions:fe.layerInsertions,...fe.reasoningTokens!==void 0?{reasoningTokens:fe.
|
|
1268
|
+
reasoningTokens}:{},exactCache:Fs}):c.record("reference","not-written",{reason:fe});try{wt||c.record("cache-write",Kt?"skipped: tool-call turn (an action request must not be replayed from cache)":kt===
|
|
1269
|
+
!1?"skipped: response fails its output contract":Ns?'skipped: answer cut off by the output cap (finish_reason "length"); replaying half an answer would bill it as a 100% avoided call':ho?"skipped: the\
|
|
1270
|
+
provider answer carries content this layer cannot replay":$s?'skipped: the provider refused (stop_reason "refusal" / finish_reason "content_filter" / a refusal message); a refusal is not an answer, a\
|
|
1271
|
+
nd replaying it would credit an avoided call the provider may not have billed':"skipped: answered with a reduced tool view (tool discovery), so it must not be replayed");let E=ct?Do(r,{servedModel:Ee}):
|
|
1272
|
+
u;if(Fs){let N=this.config.exactCacheTtlMs??864e5,U=o.maxCacheAgeMs==null?N:Math.min(N,o.maxCacheAgeMs);await this.deps.exactCache.set(E,typeof fe=="object"?{...xt,meta:{...xt.meta??{},reference:{...fe,
|
|
1273
|
+
cacheKey:E}}}:xt,U);}let M=Ee!==n.model;wt&&!M&&o.allowSemanticCache&&i.semanticCache&&this.deps.semanticCache?await this.deps.semanticCache.store(r,xt):wt&&M&&i.semanticCache&&c.record("cache-write","\
|
|
1274
|
+
semantic write skipped: a cheaper model answered, and this cache keys on the model the caller asked for"),g&&this.deps.semanticCache&&(wt&&!M&&o.allowSemanticCache&&i.semanticCache?(c.record("semantic\
|
|
1275
|
+
-calibration","label requested",{reason:g.reason,score:g.score}),this.deps.semanticCache.observe(g,xt)):c.record("semantic-calibration","no label: the cache would not store this answer"));}catch(E){c.record(
|
|
1276
|
+
"cache-write","failed (non-fatal; answer already served)",{error:E instanceof Error?E.message:String(E)});}s.callsWithoutUsage=e.sinContador;let St=this.finish(n,r,xt,"miss",s,Jt,c,v,T,void 0,void 0,kt,
|
|
1277
|
+
B.backend,nd,this.informeDeCascada(d,{servedModel:Ee,...d.enruta?{escalated:ct}:{},...d.elegible&&d.precioBarato?{estimatedSwapSaving:Ym(s,ct,d.precioBarato,this.costModelFor(n.model,h))}:{},...yt?{sampled:true,
|
|
1278
|
+
sampleCost:gt(yt.coste),...yt.divergio!==null?{divergedOnSample:yt.divergio}:{}}:{},...s.cascadeInput>0||s.cascadeOutput>0?{cascadeInputTokens:s.cascadeInput,cascadeOutputTokens:s.cascadeOutput}:{}}),
|
|
1279
|
+
Ve,Bs,ut,{...Oe,final:{..._.finishReason!==void 0?{finishReason:_.finishReason}:{},...n.response?.maxOutputTokens!=null?{topeDelLlamante:n.response.maxOutputTokens}:{}}});return typeof fe=="object"&&this.
|
|
1280
|
+
referenciasDeLider.set(St,fe),ho&&this.noReproducibles.add(St),Kt&&(St.toolCalls=_.toolCalls),_.finishReason!==void 0&&(St.finishReason=_.finishReason),_.refusal!==void 0&&(St.refusal=_.refusal),St}planearBusquedaNativa(e,n,r,o,i,s,a){
|
|
1281
|
+
let c=Bo(n.toolSearch),u=e.tools??[];if(c.modo==="off"||u.length===0)return null;let l=ya(u,r==="TOOL_ACTION",o),d=va({opciones:c,capacidad:ri(this.config.provider),modelo:i.modeloServido,herramientas:l.
|
|
1282
|
+
map(g=>({id:g.id,tokens:this.tokensFor(Qr(g),e)})),hayContrato:e.response?.schema!=null,cascadaActiva:i.modo!=="off",precio:s,lecturaDeCache:this.lecturaDeCacheDe(i.modeloServido,s)});if(a.record("too\
|
|
1277
1283
|
l-search",d.aplicar?"native":"selector",{mode:c.modo,variant:d.variante,reason:d.razon,deferred:d.diferidas,deferredTokens:d.tokensDiferidos,alwaysLoaded:d.siempreCargadas,...d.ahorroDelPrefijo!=null?
|
|
1278
1284
|
{prefixSavingPerRequest:d.ahorroDelPrefijo}:{},...d.costeDeUnaBusqueda!=null?{worstCaseSearchCost:d.costeDeUnaBusqueda}:{}}),!d.aplicar)return null;let p=new Set(l.map(g=>g.id)),h=new Set(d.siempreCargadas),
|
|
1279
1285
|
m=c.siempreCargadas.filter(g=>u.some(f=>f.id===g));return {seleccion:{tools:l,droppedIds:u.filter(g=>!p.has(g.id)).map(g=>g.id),reason:d.razon,setIsStable:m.every(g=>p.has(g))},prefijo:l.filter(g=>h.has(
|
|
1280
|
-
g.id)),plan:{variant:d.variante,alwaysLoaded:d.siempreCargadas}}}lecturaDeCacheDe(e,n){let r=
|
|
1286
|
+
g.id)),plan:{variant:d.variante,alwaysLoaded:d.siempreCargadas}}}lecturaDeCacheDe(e,n){let r=gs(e,this.config.compressionEconomics)?.cacheReadMultiplier??1,o=n.cachedInputPer1k!=null&&n.inputPer1k>0?n.
|
|
1281
1287
|
cachedInputPer1k/n.inputPer1k:void 0;return o!=null?Math.min(o,r):r}sinDescubrimientoPorBusquedaNativa(e,n,r){return e.toolDiscovery===true&&r.record("tool-discovery","skipped (native tool search applie\
|
|
1282
1288
|
s)",{reason:"the provider's tool search already keeps unused schemas out of the prompt, with no second call and without moving the cached prefix"}),{tools:n,tokensLocalesDelSondeo:0,aplicado:false}}avisarDeCatalogoRecortado(e,n,r){
|
|
1283
|
-
let o=e.tools??[];n.droppedIds.length===0||!
|
|
1289
|
+
let o=e.tools??[];n.droppedIds.length===0||!an(o)||ri(this.config.provider)===void 0||!$o(r)||this.avisar("catalogo-recortado-con-busqueda-nativa",`[bv-sala] Your tool catalogue declares no \`intents\` \
|
|
1284
1290
|
or \`risk\`, so the tool selector has nothing to select on and sent only the first ${n.tools.length} of ${o.length} tools: the model cannot call the others. This provider and model support native tool\
|
|
1285
1291
|
search: \`savings: { toolSearch: "auto" }\` sends all of them deferred and lets the model search, without breaking the prompt cache. Its effect is the provider's and the layer credits nothing for it.`);}async descubrirHerramientas(e,n,r,o,i,s,a,c){
|
|
1286
1292
|
let u={tools:o,tokensLocalesDelSondeo:0,aplicado:false};if(r.toolDiscovery!==true)return u;if(o.length<2)return c.record("tool-discovery","skipped (nothing to discover)",{candidates:o.length}),u;let l=f=>this.
|
|
1287
|
-
tokensFor(
|
|
1293
|
+
tokensFor(Qr(f),n),d=o.map(el),p=Xu({promptTokens:this.tokensFor(this.assemblePromptText(i),n),esquemasCompletos:o.reduce((f,v)=>f+l(v),0),descriptoresLigeros:d.reduce((f,v)=>f+l(v),0),esquemasDeLaSegunda:nl(
|
|
1288
1294
|
o.map(f=>({risk:f.risk,tokens:l(f)})),3),salidaFinal:n.response?.maxOutputTokens??256,salidaDelSondeo:96,precio:a});if(!p.aplicar)return c.record("tool-discovery","skipped (not worth a second call)",{
|
|
1289
1295
|
reason:p.razon,oneCall:p.costeDeUnaLlamada,twoCalls:p.costeDeDosLlamadas}),u;let h,m=this.tokensFor(this.assemblePromptText(i,d),n);try{h=await this.llamarProveedor({model:n.model,messages:i,tools:d,maxOutputTokens:96,
|
|
1290
1296
|
...n.temperature!=null?{temperature:n.temperature}:{},...n.seed!=null?{seed:n.seed}:{}},e);}catch(f){return c.record("tool-discovery","failed (falling back to a single call with every schema)",{error:f instanceof
|
|
1291
|
-
Error?f.message:String(f)}),u}s.actualLlm+=1,s.actualInput+=h.usage.inputTokens,s.actualOutput+=h.usage.outputTokens,s.discoveryInput+=h.usage.inputTokens,s.discoveryOutput+=h.usage.outputTokens;let g=
|
|
1297
|
+
Error?f.message:String(f)}),u}s.actualLlm+=1,s.actualInput+=h.usage.inputTokens,s.actualOutput+=h.usage.outputTokens,s.discoveryInput+=h.usage.inputTokens,s.discoveryOutput+=h.usage.outputTokens;let g=tl(
|
|
1292
1298
|
(h.toolCalls??[]).map(f=>f.name),o,3);return g.reconocidos.length===0?(c.record("tool-discovery","degraded: probe named no known tool",{finishReason:h.finishReason??null,...g.ignorados.length?{unknownNames:g.
|
|
1293
1299
|
ignorados}:{}}),{tools:o,tokensLocalesDelSondeo:m,aplicado:false}):(c.record("tool-discovery","applied (two provider calls)",{chosen:g.reconocidos,sent:g.tools.map(f=>f.id),candidates:o.length,...g.ignorados.
|
|
1294
1300
|
length?{unknownNames:g.ignorados}:{}}),{tools:g.tools,tokensLocalesDelSondeo:m,aplicado:true})}informeDeCascada(e,n={}){if(e.modo!=="off")return {mode:e.modo,servedModel:n.servedModel??e.modeloServido,eligible:e.
|
|
1295
|
-
elegible,reason:e.razon,verifier:e.fuerza,creditedLedger:"none",...e.candidato?{candidateModel:e.candidato}:{},...e.economia?{costRatio:
|
|
1296
|
-
targetEscalationRate:
|
|
1297
|
-
if(e.deferrable!==true)return;let i=
|
|
1301
|
+
elegible,reason:e.razon,verifier:e.fuerza,creditedLedger:"none",...e.candidato?{candidateModel:e.candidato}:{},...e.economia?{costRatio:Tn(e.economia.r),breakEvenEscalationRate:Tn(e.economia.equilibrio),
|
|
1302
|
+
targetEscalationRate:Tn(e.economia.escaladoMaximo)}:{},...e.bucket?{workload:e.bucket}:{},...e.observada!=null?{escalationRate:Tn(e.observada),escalationSamples:e.muestras}:{},...n,requestedModel:e.modeloPedido}}informeDeDiferido(e,n,r,o=false){
|
|
1303
|
+
if(e.deferrable!==true)return;let i=ur(n),s=i?.origen??null,a=n.servedServiceTier;if(o)return {...dt(this.config.provider)!==void 0?{requestedTier:Rt}:{},...a?{servedTier:a}:{},credited:false,capacityFallback:true,
|
|
1298
1304
|
creditedLedger:"none",latency:"the cheaper tier refused the request for lack of capacity, and it was repeated once at the standard tier: the wait is the refused attempt plus a standard-tier call.",reason:'\
|
|
1299
1305
|
the cheaper tier had no capacity (HTTP 429 or 503), so, as configured with priceLevers.onCapacityError: "standard", the request was repeated once at the standard tier and price; the refused attempt is\
|
|
1300
|
-
not counted as a call and nothing is credited'};let c=n.requestedServiceTier,u={...c?{requestedTier:c}:{},...a?{servedTier:a}:{},credited:false,creditedLedger:"none",latency:
|
|
1301
|
-
...u,reason:
|
|
1302
|
-
ok){let p=d.motivo==="no-tier-price"&&s==="openai"&&
|
|
1303
|
-
()":"";return {...u,reason:
|
|
1306
|
+
not counted as a call and nothing is credited'};let c=n.requestedServiceTier,u={...c?{requestedTier:c}:{},...a?{servedTier:a}:{},credited:false,creditedLedger:"none",latency:Ua(c,s),reason:""};if(!c)return {
|
|
1307
|
+
...u,reason:Va};let l=this.precioDelCliente(r),d=sr({modelo:r,uso:n.usage,tierServido:a,origen:s,...i?.tierLeidoDe?{tierLeidoDe:i.tierLeidoDe}:{},...l?{precioDelCliente:l}:{},ahoraMs:this.now()});if(!d.
|
|
1308
|
+
ok){let p=d.motivo==="no-tier-price"&&s==="openai"&&qa(r,s,this.now())?"; this model's deferred discount is published for the provider's batch API instead: send such requests with layer.batches.submit\
|
|
1309
|
+
()":"";return {...u,reason:Zm(d.motivo,c,a)+p}}return {...u,credited:true,discountRate:Tn(d.factorEfectivo),estimatedTierSaving:d.importe,tierSaving:{amount:d.importe,basis:d.basis,standardCost:gt(d.costeEstandar),
|
|
1304
1310
|
appliedCost:gt(d.costeAplicado),pricesCheckedOn:d.consultado,basisReason:d.motivoBasis},reason:`the provider reports serving the "${a}" tier; this call's usage was priced at the standard and at the "${a}\
|
|
1305
1311
|
" published rate cards, component by component (${(d.factorEfectivo*100).toFixed(1)}% of standard). The discount stacks with provider prefix caching rather than replacing it`}}informeDeEscrituras(e,n,r,o,i,s,a=false){
|
|
1306
1312
|
if(e.standalone!==true&&!a)return;let c=n?.cacheExplicita;if(!c){let f=dt(this.config.provider),v="the provider chose where to write its prompt cache, as it does by default";return {mode:"provider-defaul\
|
|
@@ -1310,9 +1316,9 @@ e control only exists on OpenAI's own API, and this endpoint is not it: ${v}`:`m
|
|
|
1310
1316
|
ns of this traffic within 30 minutes were measured below the write premium's break-even (see the prefix-cache-placement trace). `:"")+"Trade-off: repeats and continuations of this exact prompt lose th\
|
|
1311
1317
|
e cache reads the provider default would have given them.",d=u===1?"explicit mode: the provider wrote its prompt cache only at the end of the stable prefix, so the rest of this request was billed at t\
|
|
1312
1318
|
he input rate with no cache-write charge. "+l:(s?"explicit mode with no breakpoint: the message at the prefix boundary cannot carry one":"explicit mode with no breakpoint: there was no stable prefix w\
|
|
1313
|
-
orth writing, or the measured hit rate on it did not pay for the write premium")+", so the provider neither wrote nor read its prompt cache for this request. "+l,p=o?
|
|
1314
|
-
h=
|
|
1315
|
-
void 0;if(!m||r.complete===false)return {mode:"explicit",breakpoints:u,reason:d};let g=
|
|
1319
|
+
orth writing, or the measured hit rate on it did not pay for the write premium")+", so the provider neither wrote nor read its prompt cache for this request. "+l,p=o?dn("openai",o,i,this.now()):void 0,
|
|
1320
|
+
h=rr(i),m=p&&p.cacheWritePer1k!==void 0?{inputPer1k:p.inputPer1k,cacheWritePer1k:p.cacheWritePer1k,consultado:p.consultado}:h?{inputPer1k:h.inputPer1k,cacheWritePer1k:h.cacheWritePer1k,consultado:void 0}:
|
|
1321
|
+
void 0;if(!m||r.complete===false)return {mode:"explicit",breakpoints:u,reason:d};let g=Wa({uso:r,fila:{inputPer1k:m.inputPer1k,cacheWritePer1k:m.cacheWritePer1k},...m.consultado?{consultado:m.consultado}:
|
|
1316
1322
|
{}});return {mode:"explicit",breakpoints:u,avoidedWritePremium:{amount:g.importe,basis:"estimated",standardCost:gt(g.costeEstandar),appliedCost:gt(g.costeAplicado),pricesCheckedOn:g.consultado,basisReason:g.
|
|
1317
1323
|
tokensOrdinarios>0&&r.inputTokens>=1024?"estimated: the provider default was not run for this request. This is the write premium the default would have charged on the tokens after the last breakpoint;\
|
|
1318
1324
|
it does not subtract the cache reads the default could have given a later repeat":"estimated: below the provider's minimum cacheable length (or with nothing written past the breakpoint) the default w\
|
|
@@ -1320,285 +1326,286 @@ ould not have charged a write premium either"},reason:d}}escriturasSinLlamada(e)
|
|
|
1320
1326
|
g was written to or read from the provider's prompt cache for this request"}}respaldaFaltaDeCapacidad(e,n,r){return e.deferrable!==true||r!==null||this.config.priceLevers?.onCapacityError!=="standard"||
|
|
1321
1327
|
dt(this.config.provider)===void 0?false:n instanceof Error&&/^provider (429|503)\b/.test(n.message)}diferidoSinLlamada(e){if(e.savings?.deferrable===true)return {credited:false,creditedLedger:"none",latency:"n\
|
|
1322
1328
|
ot applicable: no provider call was made for this request.",reason:"no provider call was made, so no processing tier was served and none is credited; the call was avoided outright, which is worth more\
|
|
1323
|
-
than any tier discount on it"}}finish(e,n,r,o,i,s,a,c,u,l,d,p,h="none",m=0,g,f,v,b,y){let k=e.response?.schema,T,w=p===null?null:p??(k?(()=>{let
|
|
1324
|
-
ailed",errores:
|
|
1325
|
-
e),
|
|
1329
|
+
than any tier discount on it"}}finish(e,n,r,o,i,s,a,c,u,l,d,p,h="none",m=0,g,f,v,b,y){let k=e.response?.schema,T,w=p===null?null:p??(k?(()=>{let S=de(r.data,k);return T={resultado:S.valid?"passed":"f\
|
|
1330
|
+
ailed",errores:S.errors.length,desenvuelto:false},S.valid})():true),P=T&&!y?.validacion?{...y,validacion:T}:y,x=this.buildReport(e,n,o,i,s,a,c,u,l,d,w,h,m,g,f??this.diferidoSinLlamada(e),v,b??this.escriturasSinLlamada(
|
|
1331
|
+
e),P);return {requestId:x.requestId,data:r.data,text:r.text,...r.rendered!==void 0?{rendered:r.rendered}:{},report:x}}buildReport(e,n,r,o,i,s,a,c,u,l,d,p,h,m,g,f,v,b){let y=o.estimateCost(i),k=s.elapsed(),
|
|
1326
1332
|
T=m!=null&&m.servedModel!==m.requestedModel;return {requestId:f??this.generateId(),model:m?.servedModel??e.model,calls:{baselineLlm:o.baselineLlm,actualLlm:o.actualLlm,avoidedLlm:o.avoidedLlm,baselineRetrieval:o.
|
|
1327
1333
|
baselineRetrieval,actualRetrieval:o.actualRetrieval,baselineTools:o.baselineTools,actualTools:o.actualTools,retries:o.retries},tokens:{baselineInput:o.baselineInput,actualInput:o.actualInput,eliminatedInput:o.
|
|
1328
1334
|
eliminatedInput,compressedInput:o.compressedInput,baselineOutput:o.publishedBaselineOutput,actualOutput:o.actualOutput,eliminatedOutput:o.eliminatedOutput,...o.providerCachedInput?{providerCachedInput:o.
|
|
1329
1335
|
providerCachedInput}:{}},cache:{result:r,...l!==void 0?{confidence:l}:{},...u!==void 0?{ageMs:u}:{},...o.reference?{reference:{...o.reference}}:{},...o.referenceRejected?{referenceRejected:o.referenceRejected}:
|
|
1330
1336
|
{}},routing:{executionClass:a.executionClass,confidence:a.confidence,rounds:o.actualRetrieval,reason:a.reason},serialization:{chosen:c.chosen,candidateTokens:c.candidateTokens,instructionOverheadTokens:c.
|
|
1331
|
-
instructionOverheadTokens},...o.compressionReport?{compression:o.compressionReport}:{},constraints:{backend:p,schemaVersion:n.schemaVersion,...d===null?{}:{structurallyValid:d}},qualityStatus:
|
|
1332
|
-
qualityLedger:
|
|
1333
|
-
...r!=="miss"?{freshnessPassed:!
|
|
1334
|
-
traces:s.all()}}async failOpenDirect(e,n){let r=new
|
|
1335
|
-
let o=new
|
|
1336
|
-
|
|
1337
|
+
instructionOverheadTokens},...o.compressionReport?{compression:o.compressionReport}:{},constraints:{backend:p,schemaVersion:n.schemaVersion,...d===null?{}:{structurallyValid:d}},qualityStatus:Gm(r,d,T),
|
|
1338
|
+
qualityLedger:al({cacheResult:r,structurallyValid:d,backend:p,hayEsquema:e.response?.schema!=null,ageMs:u,cascada:m,hechos:b}),...m?{modelCascade:m}:{},...g?{deferred:g}:{},...v?{cacheWrites:v}:{},quality:{
|
|
1339
|
+
...r!=="miss"?{freshnessPassed:!Fn(n).requiresFreshData}:{},...r==="semantic"&&b?.semantico?{semanticScore:b.semantico.similarity}:{}},cost:y,latencyMs:{total:k,preprocessing:Math.max(0,k-h),provider:h},
|
|
1340
|
+
traces:s.all()}}async failOpenDirect(e,n){let r=new mn(this.now);r.record("fail-open","internal optimizer error \u2014 bypassed to a direct provider call",{error:n instanceof Error?n.message:String(n)});
|
|
1341
|
+
let o=new Et,i=this.costModelFor(e.model),s;try{s=Ro(e);}catch{s={schemaVersion:e.response?.version??e.response?.contractId??"none"};}let a=e.response?.schema,c=[...e.messages];e.structuredData!==void 0&&
|
|
1342
|
+
Rn(c,{role:"system",content:JSON.stringify(e.structuredData)});let u=this.now(),l=await this.config.provider.generate({model:e.model,messages:c,...e.tools?.length?{tools:e.tools}:{},...a?{schema:a}:{},
|
|
1337
1343
|
...e.response?.maxOutputTokens!=null?{maxOutputTokens:e.response.maxOutputTokens}:{},...e.temperature!=null?{temperature:e.temperature}:{},...e.seed!=null?{seed:e.seed}:{}}),d=this.now()-u;o.baselineLlm=
|
|
1338
1344
|
1,o.actualLlm=1,o.actualInput=l.usage.inputTokens,o.actualOutput=l.usage.outputTokens,o.baselineInput=l.usage.inputTokens,o.baselineOutput=l.usage.outputTokens,l.usage.cachedInputTokens&&o.providerCached(
|
|
1339
|
-
l.usage.cachedInputTokens);let p=
|
|
1345
|
+
l.usage.cachedInputTokens);let p=un(e.model);p>1&&(l.usage.cacheWriteInputTokens??0)>0&&o.providerCacheWritePremium(l.usage.cacheWriteInputTokens??0,p,i),l.usage.complete===false&&(o.callsWithoutUsage=1);
|
|
1340
1346
|
let h=l.text,m=true,g={origen:"fail_open",final:{...l.finishReason!==void 0?{finishReason:l.finishReason}:{},...e.response?.maxOutputTokens!=null?{topeDelLlamante:e.response.maxOutputTokens}:{}}},f=(l.toolCalls?.
|
|
1341
|
-
length??0)>0;if(f&&(m=null),a&&!f){let b=ze(l.text),y=b.ok?
|
|
1342
|
-
e,s,"miss",o,i,r,
|
|
1347
|
+
length??0)>0;if(f&&(m=null),a&&!f){let b=ze(l.text),y=b.ok?de(b.value,a).errors.length:1;m=y===0,g.validacion={resultado:m?"passed":"failed",errores:y,desenvuelto:false},b.ok&&(h=b.value);}let v=this.buildReport(
|
|
1348
|
+
e,s,"miss",o,i,r,Cn(),En(),void 0,void 0,m,"none",d,void 0,e.savings?.deferrable===true?{credited:false,creditedLedger:"none",latency:"unchanged: the fail-open path asks for no processing tier, so this req\
|
|
1343
1349
|
uest was scheduled exactly as an ordinary one.",reason:"the optimizer failed and this request went out on the direct fail-open path, which asks for no cheaper tier: that tier can be refused for lack o\
|
|
1344
1350
|
f capacity, and trading availability for a discount on a last-resort call is the wrong trade"}:void 0,void 0,e.savings?.standalone===true?{mode:"provider-default",breakpoints:0,reason:"the optimizer fai\
|
|
1345
1351
|
led and this request went out unchanged on the direct fail-open path, so the provider chose where to write its prompt cache, as it does by default"}:void 0,g);return {requestId:v.requestId,data:h,text:l.
|
|
1346
|
-
text,...f?{toolCalls:l.toolCalls}:{},...l.finishReason!==void 0?{finishReason:l.finishReason}:{},report:v}}asCoalescedFollower(e,n,r,o,i,s={ok:false,reason:"
|
|
1347
|
-
s.credit):(a.avoidCall(n,r),a.referenceRejected=s.reason);let c=a.estimateCost(o),u=this.generateId(),l=this.diferidoSinLlamada(i),d=l?{deferred:l}:{},
|
|
1348
|
-
cacheWrites:g,...f}=e.report;return {...e,requestId:u,report:{...f,requestId:u,calls:{...e.report.calls,actualLlm:0,avoidedLlm:1},tokens:{baselineInput:a.
|
|
1349
|
-
eliminatedInput,compressedInput:a.compressedInput,baselineOutput:a.publishedBaselineOutput,actualOutput:a.actualOutput,eliminatedOutput:a.eliminatedOutput
|
|
1350
|
-
providerCachedInput}:{}},cache:{result:"singleflight",...a.reference?{reference:{...a.reference}}:a.referenceRejected?{referenceRejected:a.referenceRejected}:
|
|
1351
|
-
e.report.qualityLedger),cost:c}}}creditoPorReferencia(e,n){if(typeof e=="string")return {ok:false,reason:e};let r;try{r=n.calidad();}catch{r=false;}try{return
|
|
1352
|
-
modeloServido:n.cascada.modeloServido,huella:n.huella(),textoServidoSha256:
|
|
1353
|
-
n.request.model),topeDeSalida:n.request.response?.maxOutputTokens,diferible:n.toggles.deferrable===!0})}catch{return {ok:false,reason:"
|
|
1354
|
-
e.messages,e.tools,e.structuredData)}assemblePromptText(e,n,r){let o=e.map(i=>i.content);r!==void 0&&o.push(JSON.stringify(r));for(let i of n??
|
|
1352
|
+
text,...f?{toolCalls:l.toolCalls}:{},...l.finishReason!==void 0?{finishReason:l.finishReason}:{},...l.refusal!==void 0?{refusal:l.refusal}:{},report:v}}asCoalescedFollower(e,n,r,o,i,s={ok:false,reason:"a\
|
|
1353
|
+
bsent"}){let a=new Et;s.ok?a.avoidCallByReference(s.credit):(a.avoidCall(n,r),a.referenceRejected=s.reason);let c=a.estimateCost(o),u=this.generateId(),l=this.diferidoSinLlamada(i),d=l?{deferred:l}:{},
|
|
1354
|
+
p=this.escriturasSinLlamada(i),{deferred:h,streaming:m,cacheWrites:g,...f}=e.report;return {...e,requestId:u,report:{...f,requestId:u,calls:{...e.report.calls,actualLlm:0,avoidedLlm:1},tokens:{baselineInput:a.
|
|
1355
|
+
baselineInput,actualInput:a.actualInput,eliminatedInput:a.eliminatedInput,compressedInput:a.compressedInput,baselineOutput:a.publishedBaselineOutput,actualOutput:a.actualOutput,eliminatedOutput:a.eliminatedOutput,
|
|
1356
|
+
...a.providerCachedInput?{providerCachedInput:a.providerCachedInput}:{}},cache:{result:"singleflight",...a.reference?{reference:{...a.reference}}:a.referenceRejected?{referenceRejected:a.referenceRejected}:
|
|
1357
|
+
{}},...d,...p?{cacheWrites:p}:{},qualityLedger:cl(e.report.qualityLedger),cost:c}}}creditoPorReferencia(e,n){if(typeof e=="string")return {ok:false,reason:e};let r;try{r=n.calidad();}catch{r=false;}try{return sl(
|
|
1358
|
+
e,{ahoraMs:this.now(),modeloPedido:n.request.model,modeloServido:n.cascada.modeloServido,huella:n.huella(),textoServidoSha256:Y(n.texto),claveLeida:n.claveLeida,calidadOk:r,precio:this.precioDocumentado(
|
|
1359
|
+
n.request.model),determinista:rl(n.request),salidaDelModelo:Cu(n.request.model),topeDeSalida:n.request.response?.maxOutputTokens,diferible:n.toggles.deferrable===!0})}catch{return {ok:false,reason:"differ\
|
|
1360
|
+
ent-request"}}}assembleBaselinePrompt(e){return this.assemblePromptText(e.messages,e.tools,e.structuredData)}assemblePromptText(e,n,r){let o=e.map(i=>i.content);r!==void 0&&o.push(JSON.stringify(r));for(let i of n??
|
|
1361
|
+
[])o.push(Qr(i));return o.join(`
|
|
1355
1362
|
`)}tokensFor(e,n){return this.config.tokenizer.count(e,{...n.tokenizer?{tokenizer:n.tokenizer}:{},model:n.model})}estimatorEsExacto(e){let n=this.config.tokenizer;if(typeof n.resolve!="function")return false;
|
|
1356
1363
|
try{return n.resolve({...e.tokenizer?{tokenizer:e.tokenizer}:{},model:e.model}).exact===!0}catch{return false}}entitled(e){return this.devOpen()?true:!!this.config.licenseGate&&this.config.licenseGate.isEntitled(
|
|
1357
|
-
e)}precioConocido(e,n=this.now()){return this.precioDelCliente(e)??
|
|
1364
|
+
e)}precioConocido(e,n=this.now()){return this.precioDelCliente(e)??jn(e,n)}precioDelCliente(e){let n=this.config.costModels;if(!n)return;let r=n[e];if(r)return r;let o=e.indexOf("/");if(o>=0){let i=n[e.
|
|
1358
1365
|
slice(o+1)];if(i)return i}}precioDocumentado(e){return this.precioDelCliente(e)??We(e,this.now())}costModelFor(e,n=this.now()){let r=this.precioConocido(e,n);return r||(this.config.defaultCostModel?this.
|
|
1359
1366
|
config.defaultCostModel:(this.avisar(`precio-ilustrativo:${e}`,`[bv-sala] no cost model configured for "${e}"; falling back to the ILLUSTRATIVE default price. Dollar figures will not match your bill. \
|
|
1360
|
-
Pass { costModels: { "${e}": { inputPer1k, outputPer1k } } }.`),
|
|
1361
|
-
n.value,t.schema).valid?"met":"missed"}function ze(t){try{return {ok:!0,value:JSON.parse(t)}}catch{}for(let e of
|
|
1362
|
-
let e=[],n=/```[ \t]*[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g;for(let r of t.matchAll(n)){let o=r[1]?.trim();o&&e.push(o);}for(let r of ["{","["]){let o=t.indexOf(r);if(o===-1)continue;let i=
|
|
1363
|
-
e.push(i);}return e}function
|
|
1364
|
-
n)o+=1;else if(c===r&&(o-=1,o===0))return t.slice(e,a+1)}}function
|
|
1365
|
-
dation";switch(t){case "deterministic":case "exact":return "exact";case "semantic":return "task_equivalent";default:return "not_verified"}}function
|
|
1367
|
+
Pass { costModels: { "${e}": { inputPer1k, outputPer1k } } }.`),Su))}};function Hm(t,e){if((e.toolCalls?.length??0)>0||!t.schema)return "none";let n=ze(typeof e.text=="string"?e.text:"");return n.ok&&de(
|
|
1368
|
+
n.value,t.schema).valid?"met":"missed"}function ze(t){try{return {ok:!0,value:JSON.parse(t)}}catch{}for(let e of Wm(t))try{return {ok:!0,value:JSON.parse(e),rescatado:e}}catch{continue}return {ok:false}}function Wm(t){
|
|
1369
|
+
let e=[],n=/```[ \t]*[a-zA-Z0-9_-]*[ \t]*\r?\n([\s\S]*?)```/g;for(let r of t.matchAll(n)){let o=r[1]?.trim();o&&e.push(o);}for(let r of ["{","["]){let o=t.indexOf(r);if(o===-1)continue;let i=Jm(t,o);i&&
|
|
1370
|
+
e.push(i);}return e}function Jm(t,e){let n=t[e],r=n==="{"?"}":"]",o=0,i=false,s=false;for(let a=e;a<t.length;a+=1){let c=t[a];if(i){s?s=false:c==="\\"?s=true:c==='"'&&(i=false);continue}if(c==='"'){i=true;continue}if(c===
|
|
1371
|
+
n)o+=1;else if(c===r&&(o-=1,o===0))return t.slice(e,a+1)}}function Km(t){return typeof t=="string"?t:JSON.stringify(t,null,2)}function Gm(t,e,n=false){if(e===false)return "rejected";if(n)return "bounded_degra\
|
|
1372
|
+
dation";switch(t){case "deterministic":case "exact":return "exact";case "semantic":return "task_equivalent";default:return "not_verified"}}function Zm(t,e,n){switch(t){case "no-served-tier":return `asked the \
|
|
1366
1373
|
provider for the "${e}" tier, and it reported none back: the rate this request was billed at cannot be known, so nothing is credited`;case "unknown-tier":return `asked for "${e}" and the provider report\
|
|
1367
1374
|
s serving "${n}", a tier this layer has no published rate for: nothing is credited`;case "standard-rate-tier":return `asked for "${e}" and the provider reports serving "${n}", which bills at the standar\
|
|
1368
1375
|
d rate: this request was billed as if it had never been deferred`;case "no-tier-price":return `the provider reports serving "${n}", but there is no published price for the "${n}" tier of this model from\
|
|
1369
1376
|
this provider (or it has expired): nothing is credited`;case "no-standard-price":return `the provider reports serving "${n}", but this model has no list price of its own here, so there is no standard r\
|
|
1370
1377
|
ate card to price the difference against: nothing is credited`;case "incomplete-usage":return `the provider reports serving "${n}", but its usage for this call is incomplete, so the difference cannot be\
|
|
1371
|
-
priced: nothing is credited`;case "no-difference":return `the provider reports serving "${n}", and this call's usage costs the same at both published rate cards: nothing is credited`}}function
|
|
1372
|
-
round(t*1e6)/1e6}function gt(t){let e=Math.round(t*1e10)/1e10;return e===0?0:e}function
|
|
1373
|
-
return gt(o(r)-o(n))}function
|
|
1374
|
-
return false;let n=t.original;return
|
|
1375
|
-
reason:"n/a (short-circuited)",rounds:0}}function
|
|
1378
|
+
priced: nothing is credited`;case "no-difference":return `the provider reports serving "${n}", and this call's usage costs the same at both published rate cards: nothing is credited`}}function Tn(t){return Math.
|
|
1379
|
+
round(t*1e6)/1e6}function gt(t){let e=Math.round(t*1e10)/1e10;return e===0?0:e}function Ym(t,e,n,r){if(e)return gt(-t.extraCostUsd);let o=i=>t.actualInput/1e3*i.inputPer1k+t.actualOutput/1e3*i.outputPer1k;
|
|
1380
|
+
return gt(o(r)-o(n))}function Qm(t,e){if(!(e>0))return false;if(e>=1)return true;let n=Y(`${t}:cascade-sample`);return Number.parseInt(n.slice(0,13),16)/2**52<e}function xl(t,e){if(!e.isAgentic||e.allowSemanticCache)
|
|
1381
|
+
return false;let n=t.original;return Fn({...t,original:{...n,savings:{...n.savings??{},semanticCache:"include-agentic"}}}).allowSemanticCache}function Cn(){return {executionClass:"NO_RETRIEVAL",confidence:1,
|
|
1382
|
+
reason:"n/a (short-circuited)",rounds:0}}function En(){return {chosen:"json-compact",encoded:"",instruction:"",candidateTokens:{},instructionOverheadTokens:0,reason:"no structured payload"}}function bs(t,e="",n=null){
|
|
1376
1383
|
if(t==null||typeof t!="object")return "";let r=t,o=[],i=e||"the value",s=m=>typeof r[m]=="number"?r[m]:null,a=s("maxLength"),c=s("minLength"),u=s("maxItems"),l=s("minItems"),d=s("maximum"),p=s("minimum");
|
|
1377
1384
|
if(a!=null){let m=n!=null?Math.min(a,n):a;o.push(`${i}<=${m}ch`);}c!=null&&o.push(`${i}>=${c}ch`),u!=null&&o.push(`${i}<=${u} items`),l!=null&&o.push(`${i}>=${l} items`),d!=null&&o.push(`${i}<=${d}`),p!=
|
|
1378
|
-
null&&o.push(`${i}>=${p}`),typeof r.pattern=="string"&&o.push(`${i} matches /${r.pattern}/`);let h=r.properties;if(h&&typeof h=="object")for(let[m,g]of Object.entries(h)){let f=
|
|
1379
|
-
f&&o.push(f);}if(r.items!==void 0){let m=
|
|
1380
|
-
0,200):""}function
|
|
1381
|
-
{type:"function",function:{name:t.id,...t.description?{description:t.description}:{},parameters:t.parameters??{type:"object",properties:{}}}})}function
|
|
1382
|
-
"user"){t.splice(n,0,e);return}t.push(e);}function
|
|
1383
|
-
role==="system";)n+=1;return n}for(let n=t.length-1;n>=0;n--)if(t[n].role==="user")return n;return
|
|
1384
|
-
cacheReadMultiplier<1?n:null}var
|
|
1385
|
-
return {submit:(e,n)=>
|
|
1385
|
+
null&&o.push(`${i}>=${p}`),typeof r.pattern=="string"&&o.push(`${i} matches /${r.pattern}/`);let h=r.properties;if(h&&typeof h=="object")for(let[m,g]of Object.entries(h)){let f=bs(g,e?`${e}.${m}`:m,n);
|
|
1386
|
+
f&&o.push(f);}if(r.items!==void 0){let m=bs(r.items,`${i} entries`,n);m&&o.push(m);}return o.join("; ")}function Pn(t){let e=t.response;return e?e.contractId??e.version??JSON.stringify(e.schema??{}).slice(
|
|
1387
|
+
0,200):""}function wl(t){return t.finishReason==="content_filter"||typeof t.refusal=="string"&&t.refusal!==""}function Xm(t){return t.some(e=>/exceeds maxItems|exceeds maxLength|match pattern|exceeds maximum|below minimum|below minLength|below minItems/.
|
|
1388
|
+
test(e.message))}function Qr(t){return JSON.stringify({type:"function",function:{name:t.id,...t.description?{description:t.description}:{},parameters:t.parameters??{type:"object",properties:{}}}})}function Rn(t,e){
|
|
1389
|
+
for(let n=t.length-1;n>=0;n--)if(t[n].role==="user"){t.splice(n,0,e);return}t.push(e);}function eh(t,e){if(e===false)return null;let n=typeof t=="object"&&t!==null?t:{};return e===true||t?n:null}function vs(t,e=false){
|
|
1390
|
+
if(e){let n=0;for(;n<t.length&&t[n].role==="system";)n+=1;return n}for(let n=t.length-1;n>=0;n--)if(t[n].role==="user")return n;return vs(t,true)}function Sl(t){return t instanceof Error?t.name:typeof t}
|
|
1391
|
+
function gs(t,e){let n=Kr(t,e);return n.cacheReadMultiplier<1?n:null}var Pl={anthropic:{peticiones:1e5,bytes:256e6},openai:{peticiones:5e4,bytes:2e8}},th=/^[A-Za-z0-9_-]{1,64}$/,Rl="/v1/chat/completions",nh=new Set(["completed","failed","expired","cancelled"]);function Dl(t){
|
|
1392
|
+
return {submit:(e,n)=>rh(t,e,n??{}),status:(e,n)=>lh(t,e,n?.signal),results:(e,n)=>mh(t,e,n?.signal),cancel:(e,n)=>fh(t,e,n?.signal)}}function ro(t){let e=ic(t.provider);if(!e)throw new Error("[bvsala]\
|
|
1386
1393
|
layer.batches needs one of the built-in providers: AnthropicProvider (Message Batches API) or OpenAICompatibleProvider (OpenAI's Batch API). This provider has no batch support in the layer.");if(e.origen===
|
|
1387
1394
|
"google")throw new Error("[bvsala] Gemini's batch mode is not supported by layer.batches yet: its OpenAI-compatible endpoint creates batches but does not upload or download their files (that needs Gem\
|
|
1388
|
-
ini's own Files API). Nothing was sent.");return e}async function
|
|
1389
|
-
anthropic",s=new TextEncoder,a=e.map(({customId:m,request:g})=>{let f;try{f=r.cuerpo(
|
|
1390
|
-
params:f}:{custom_id:m,method:"POST",url:
|
|
1395
|
+
ini's own Files API). Nothing was sent.");return e}async function rh(t,e,n){t.exigirLicencia();let r=ro(t);oh(e);let o=ih(n.maxRequestsPerBatch,r.protocolo),i=n.cacheSharedPrefix===true&&r.protocolo==="\
|
|
1396
|
+
anthropic",s=new TextEncoder,a=e.map(({customId:m,request:g})=>{let f;try{f=r.cuerpo(sh(g,i));}catch(y){throw new TypeError(`[bvsala] batch request "${m}": ${eo(y)}`)}let v=r.protocolo==="anthropic"?{custom_id:m,
|
|
1397
|
+
params:f}:{custom_id:m,method:"POST",url:Rl,body:f},b=JSON.stringify(v);return {customId:m,linea:v,bytes:s.encode(b).length,modelo:typeof f.model=="string"?f.model:g.model}}),c=ah(a,r.protocolo,o),u=[],
|
|
1391
1398
|
l=new Map,d=new Map;c.forEach((m,g)=>m.forEach(f=>d.set(f.customId,g)));let p=e.map(({customId:m,request:g})=>{let f=g.response?.schema,v;if(f){let b=JSON.stringify(f);v=l.get(b),v===void 0&&(v=u.length,
|
|
1392
1399
|
u.push(f),l.set(b,v));}return {customId:m,model:g.model,batch:d.get(m),...v!==void 0?{schema:v}:{}}}),h={kind:"bvsala.batch",version:1,provider:r.protocolo,endpoint:r.endpoint,batchIds:[],submittedAt:new Date(
|
|
1393
|
-
t.now()).toISOString(),requests:p,schemas:u};for(let m=0;m<c.length;m++)try{let g=r.protocolo==="anthropic"?await
|
|
1394
|
-
length,v={...h,batchIds:[...h.batchIds],requests:h.requests.filter(y=>y.batch<f)},b=h.requests.filter(y=>y.batch>=f).map(y=>y.customId);throw new
|
|
1395
|
-
provider batch was created: ${
|
|
1396
|
-
.`,v,b,{cause:g})}return h}function
|
|
1397
|
-
n,r]of t.entries()){let o=r?.customId;if(typeof o!="string"||!
|
|
1400
|
+
t.now()).toISOString(),requests:p,schemas:u};for(let m=0;m<c.length;m++)try{let g=r.protocolo==="anthropic"?await ch(r,c[m],n.signal):await uh(r,c[m],n.signal);h.batchIds.push(g);}catch(g){let f=h.batchIds.
|
|
1401
|
+
length,v={...h,batchIds:[...h.batchIds],requests:h.requests.filter(y=>y.batch<f)},b=h.requests.filter(y=>y.batch>=f).map(y=>y.customId);throw new Fr(f===0?`[bvsala] batch submission failed before any \
|
|
1402
|
+
provider batch was created: ${eo(g)}.`:`[bvsala] batch submission failed after ${f} of ${c.length} provider batches were created: ${eo(g)}. The created batches run and are billed; error.job holds them\
|
|
1403
|
+
.`,v,b,{cause:g})}return h}function oh(t){if(!Array.isArray(t)||t.length===0)throw new TypeError("[bvsala] layer.batches.submit() needs a non-empty array of { customId, request }.");let e=new Set;for(let[
|
|
1404
|
+
n,r]of t.entries()){let o=r?.customId;if(typeof o!="string"||!th.test(o))throw new TypeError(`[bvsala] batch request #${n}: customId must be 1 to 64 letters, digits, "_" or "-" (got ${JSON.stringify(o)}\
|
|
1398
1405
|
).`);if(e.has(o))throw new TypeError(`[bvsala] batch request "${o}": customId is repeated; it must be unique.`);e.add(o);let i=r.request;if(!i||typeof i.model!="string"||i.model===""||!Array.isArray(i.
|
|
1399
1406
|
messages)||i.messages.length===0)throw new TypeError(`[bvsala] batch request "${o}": request needs a model and at least one message.`);if(i.retrieval&&i.retrieval.mode!=="off")throw new TypeError(`[bv\
|
|
1400
1407
|
sala] batch request "${o}": retrieval runs in the layer's pipeline, which batches skip. Send the retrieved context in the messages instead.`);if(i.structuredData!==void 0)throw new TypeError(`[bvsala]\
|
|
1401
|
-
batch request "${o}": structuredData is serialized by the layer's pipeline, which batches skip. Put the payload in the messages instead.`)}}function
|
|
1402
|
-
if(!Number.isInteger(t)||t<1)throw new TypeError(`[bvsala] maxRequestsPerBatch must be a positive integer (got ${String(t)}).`);return Math.min(t,n)}function
|
|
1408
|
+
batch request "${o}": structuredData is serialized by the layer's pipeline, which batches skip. Put the payload in the messages instead.`)}}function ih(t,e){let n=Pl[e].peticiones;if(t===void 0)return n;
|
|
1409
|
+
if(!Number.isInteger(t)||t<1)throw new TypeError(`[bvsala] maxRequestsPerBatch must be a positive integer (got ${String(t)}).`);return Math.min(t,n)}function sh(t,e){let n=0;for(;n<t.messages.length&&
|
|
1403
1410
|
t.messages[n].role==="system";)n+=1;return {model:t.model,messages:t.messages,...t.tools&&t.tools.length>0?{tools:t.tools}:{},...t.response?.schema?{schema:t.response.schema}:{},...t.response?.maxOutputTokens!=
|
|
1404
|
-
null?{maxOutputTokens:t.response.maxOutputTokens}:{},...t.temperature!=null?{temperature:t.temperature}:{},...t.seed!=null?{seed:t.seed}:{},...e&&n>0?{stablePrefixMessages:n}:{}}}function
|
|
1411
|
+
null?{maxOutputTokens:t.response.maxOutputTokens}:{},...t.temperature!=null?{temperature:t.temperature}:{},...t.seed!=null?{seed:t.seed}:{},...e&&n>0?{stablePrefixMessages:n}:{}}}function ah(t,e,n){let r=Pl[e],
|
|
1405
1412
|
o=new Map;for(let a of t){let c=e==="openai"?a.modelo:"",u=o.get(c);u?u.push(a):o.set(c,[a]);}let i=e==="anthropic"?15:0,s=[];for(let a of o.values()){let c=[],u=i;for(let l of a){let d=l.bytes+1;if(i+
|
|
1406
1413
|
d>r.bytes)throw new TypeError(`[bvsala] batch request "${l.customId}" is ${l.bytes} bytes, larger than a whole ${e} batch may be. Send it with generate() instead.`);c.length>0&&(c.length>=n||u+d>r.bytes)&&
|
|
1407
|
-
(s.push(c),c=[],u=i),c.push(l),u+=d;}c.length>0&&s.push(c);}return s}async function
|
|
1408
|
-
r,"Message Batch")}async function
|
|
1414
|
+
(s.push(c),c=[],u=i),c.push(l),u+=d;}c.length>0&&s.push(c);}return s}async function ch(t,e,n){let r=await Dn(t,"/messages/batches",{method:"POST",json:{requests:e.map(o=>o.linea)},...n?{signal:n}:{}});return xs(
|
|
1415
|
+
r,"Message Batch")}async function uh(t,e,n){let r=e.map(a=>JSON.stringify(a.linea)).join(`
|
|
1409
1416
|
`)+`
|
|
1410
|
-
`,o=new FormData;o.append("purpose","batch"),o.append("file",new Blob([r],{type:"application/jsonl"}),"bvsala-batch.jsonl");let i=await
|
|
1411
|
-
t,"/batches",{method:"POST",json:{input_file_id:
|
|
1412
|
-
r);let o=await
|
|
1413
|
-
o).length;r.push(t.protocolo==="anthropic"?
|
|
1414
|
-
estado:r,terminado:r==="ended",cancelando:r==="canceling",cuentas:{processing:st(o.processing),succeeded:st(o.succeeded),errored:st(o.errored),canceled:st(o.canceled),expired:st(o.expired)}}}function
|
|
1415
|
-
let r=
|
|
1416
|
-
errored:s,canceled:0,expired:0}:{processing:l?0:u,succeeded:a,errored:c+(o==="completed"?u:0),canceled:o==="cancelled"?u:0,expired:o==="expired"?u:0},p=Array.isArray(
|
|
1417
|
-
map(h=>
|
|
1418
|
-
{},...typeof r.error_file_id=="string"&&r.error_file_id!==""?{errores:r.error_file_id}:{},...o==="failed"?{fallo:p.length>0?p.join("; "):"the provider rejected the batch"}:{}}}function
|
|
1417
|
+
`,o=new FormData;o.append("purpose","batch"),o.append("file",new Blob([r],{type:"application/jsonl"}),"bvsala-batch.jsonl");let i=await Dn(t,"/files",{method:"POST",form:o,...n?{signal:n}:{}}),s=await Dn(
|
|
1418
|
+
t,"/batches",{method:"POST",json:{input_file_id:xs(i,"file"),endpoint:Rl,completion_window:"24h"},...n?{signal:n}:{}});return xs(s,"batch")}async function lh(t,e,n){t.exigirLicencia();let r=ro(t);ws(e,
|
|
1419
|
+
r);let o=await to(r,e,n);return Il(e,o)}async function to(t,e,n){let r=[];for(let[o,i]of e.batchIds.entries()){let s=await Dn(t,Ss(t,i),{method:"GET",...n?{signal:n}:{}}),a=e.requests.filter(c=>c.batch===
|
|
1420
|
+
o).length;r.push(t.protocolo==="anthropic"?dh(i,s):ph(i,s,a));}return r}function dh(t,e){let n=oe(e),r=typeof n.processing_status=="string"?n.processing_status:"unknown",o=oe(n.request_counts);return {id:t,
|
|
1421
|
+
estado:r,terminado:r==="ended",cancelando:r==="canceling",cuentas:{processing:st(o.processing),succeeded:st(o.succeeded),errored:st(o.errored),canceled:st(o.canceled),expired:st(o.expired)}}}function ph(t,e,n){
|
|
1422
|
+
let r=oe(e),o=typeof r.status=="string"?r.status:"unknown",i=oe(r.request_counts),s=st(i.total)||n,a=st(i.completed),c=st(i.failed),u=Math.max(0,s-a-c),l=nh.has(o),d=o==="failed"?{processing:0,succeeded:0,
|
|
1423
|
+
errored:s,canceled:0,expired:0}:{processing:l?0:u,succeeded:a,errored:c+(o==="completed"?u:0),canceled:o==="cancelled"?u:0,expired:o==="expired"?u:0},p=Array.isArray(oe(r.errors).data)?oe(r.errors).data.
|
|
1424
|
+
map(h=>oe(h).message).filter(h=>typeof h=="string"):[];return {id:t,estado:o,terminado:l,cancelando:o==="cancelling",cuentas:d,...typeof r.output_file_id=="string"&&r.output_file_id!==""?{salida:r.output_file_id}:
|
|
1425
|
+
{},...typeof r.error_file_id=="string"&&r.error_file_id!==""?{errores:r.error_file_id}:{},...o==="failed"?{fallo:p.length>0?p.join("; "):"the provider rejected the batch"}:{}}}function Il(t,e){let n={
|
|
1419
1426
|
processing:0,succeeded:0,errored:0,canceled:0,expired:0};for(let o of e)n.processing+=o.cuentas.processing,n.succeeded+=o.cuentas.succeeded,n.errored+=o.cuentas.errored,n.canceled+=o.cuentas.canceled,
|
|
1420
1427
|
n.expired+=o.cuentas.expired;return {state:e.every(o=>o.terminado)?"ended":e.some(o=>o.cancelando)?"canceling":"in_progress",requestCount:t.requests.length,counts:n,batches:e.map(o=>({id:o.id,status:o.
|
|
1421
|
-
estado}))}}async function
|
|
1422
|
-
{}});return
|
|
1423
|
-
r,`${
|
|
1424
|
-
ntent`,{method:"GET",...n?{signal:n}:{}});for await(let p of
|
|
1425
|
-
continue}let d=u.schema!==void 0?e.schemas[u.schema]:void 0;a.push(
|
|
1426
|
-
if(typeof r!="string"||t.has(r))return;let o=
|
|
1428
|
+
estado}))}}async function fh(t,e,n){t.exigirLicencia();let r=ro(t);ws(e,r);let o=await to(r,e,n);for(let i of o)i.terminado||i.cancelando||await Dn(r,`${Ss(r,i.id)}/cancel`,{method:"POST",...n?{signal:n}:
|
|
1429
|
+
{}});return Il(e,await to(r,e,n))}async function mh(t,e,n){t.exigirLicencia();let r=ro(t);ws(e,r);let o=await to(r,e,n),i=new Map;for(let u of o)if(u.terminado)if(r.protocolo==="anthropic"){let l=await ks(
|
|
1430
|
+
r,`${Ss(r,u.id)}/results`,{method:"GET",...n?{signal:n}:{}});for await(let d of El(l))hh(i,d);}else for(let l of [u.salida,u.errores]){if(!l)continue;let d=await ks(r,`/files/${encodeURIComponent(l)}/co\
|
|
1431
|
+
ntent`,{method:"GET",...n?{signal:n}:{}});for await(let p of El(d))gh(i,p);}let s=Math.max(t.now(),Date.parse(e.submittedAt)||0),a=[],c=0;for(let u of e.requests){let l=o[u.batch];if(!l.terminado){c+=1;
|
|
1432
|
+
continue}let d=u.schema!==void 0?e.schemas[u.schema]:void 0;a.push(bh(t,r,u,d,i.get(u.customId),l,s));}return {ended:o.every(u=>u.terminado),items:a,summary:kh(e,a,c)}}function hh(t,e){let n=oe(e),r=n.custom_id;
|
|
1433
|
+
if(typeof r!="string"||t.has(r))return;let o=oe(n.result);switch(o.type){case "succeeded":t.set(r,{tipo:"ok",cuerpo:o.message});return;case "errored":{let i=oe(oe(o.error).error);t.set(r,{tipo:"errored",
|
|
1427
1434
|
error:{type:typeof i.type=="string"?i.type:"error",message:typeof i.message=="string"?i.message:"the provider reported an error"}});return}case "canceled":t.set(r,{tipo:"canceled"});return;case "expired":
|
|
1428
|
-
t.set(r,{tipo:"expired"});return;default:return}}function
|
|
1435
|
+
t.set(r,{tipo:"expired"});return;default:return}}function gh(t,e){let n=oe(e),r=n.custom_id;if(typeof r!="string"||t.has(r))return;let o=n.error;if(o!=null){let u=oe(o),l=typeof u.code=="string"?u.code:
|
|
1429
1436
|
"error";if(l==="batch_expired"){t.set(r,{tipo:"expired"});return}if(l==="batch_cancelled"||l==="batch_canceled"){t.set(r,{tipo:"canceled"});return}t.set(r,{tipo:"errored",error:{type:l,message:typeof u.
|
|
1430
|
-
message=="string"?u.message:"the provider reported an error"}});return}let i=
|
|
1431
|
-
let c=
|
|
1432
|
-
rror"}});}function
|
|
1437
|
+
message=="string"?u.message:"the provider reported an error"}});return}let i=oe(n.response),s=i.status_code,a=i.body;if(typeof s=="number"&&s>=200&&s<300&&a!==void 0){t.set(r,{tipo:"ok",cuerpo:a});return}
|
|
1438
|
+
let c=oe(oe(a).error);t.set(r,{tipo:"errored",error:{type:typeof c.type=="string"?c.type:`http_${typeof s=="number"?s:"error"}`,message:typeof c.message=="string"?c.message:"the provider reported an e\
|
|
1439
|
+
rror"}});}function bh(t,e,n,r,o,i,s){let a={customId:n.customId,model:n.model},c=e.protocolo==="anthropic";if(!o)return i.estado==="failed"?{...a,outcome:"errored",reason:`the provider rejected the who\
|
|
1433
1440
|
le batch before running it: ${i.fallo??"no reason given"}`,error:{type:"batch_failed",message:i.fallo??"the provider rejected the batch"}}:i.estado==="expired"?{...a,outcome:"expired",reason:"the batc\
|
|
1434
1441
|
h expired before this request ran: no answer and no usage"}:i.estado==="cancelled"?{...a,outcome:"canceled",reason:"the batch was canceled before this request ran: no answer and no usage"}:{...a,outcome:"\
|
|
1435
1442
|
missing",reason:"the provider returned no result line for this request; nothing is assumed about it"};switch(o.tipo){case "errored":return {...a,outcome:"errored",reason:`the provider could not run this\
|
|
1436
1443
|
request (${o.error.type}: ${o.error.message})`+(c?"; Anthropic documents that errored requests are not billed":""),error:o.error};case "canceled":return {...a,outcome:"canceled",reason:c?"canceled befo\
|
|
1437
1444
|
re it was sent to the model; Anthropic documents that it is not billed":"canceled before it ran: no answer and no usage"};case "expired":return {...a,outcome:"expired",reason:c?"the batch reached its 24\
|
|
1438
1445
|
-hour expiration before this request was sent to the model; Anthropic documents that it is not billed":"not executed before the batch's completion window expired: no answer and no usage"};}
|
|
1439
|
-
let u={model:n.model,messages:[],...r?{schema:r}:{}},l;try{l=e.leer(o.cuerpo,u);}catch(b){return {...a,outcome:"succeeded",reason:`the provider ran this request but its answer could not be read (${
|
|
1440
|
-
): nothing is credited`}}let d=
|
|
1446
|
+
let u={model:n.model,messages:[],...r?{schema:r}:{}},l;try{l=e.leer(o.cuerpo,u);}catch(b){return {...a,outcome:"succeeded",reason:`the provider ran this request but its answer could not be read (${eo(b)}\
|
|
1447
|
+
): nothing is credited`}}let d=vh(l,r),p=c?l.servedServiceTier:"batch",h=e.origen==="anthropic"||e.origen==="openai"?e.origen:null,m=xh(t.costModels,n.model),g=sr({modelo:n.model,uso:l.usage,tierServido:p,
|
|
1441
1448
|
origen:h,tierLeidoDe:c?"cuerpo":"lote",...m?{precioDelCliente:m}:{},ahoraMs:s}),f={...a,outcome:"succeeded",text:l.text,...d,...l.toolCalls&&l.toolCalls.length>0?{toolCalls:l.toolCalls}:{},...l.finishReason?
|
|
1442
|
-
{finishReason:l.finishReason}:{},usage:l.usage,...p?{servedTier:p}:{}};if(!g.ok)return {...f,reason:
|
|
1449
|
+
{finishReason:l.finishReason}:{},usage:l.usage,...p?{servedTier:p}:{}};if(!g.ok)return {...f,reason:yh(g.motivo,p)};let v={amount:g.importe,basis:g.basis,standardCost:no(g.costeEstandar),appliedCost:no(
|
|
1443
1450
|
g.costeAplicado),pricesCheckedOn:g.consultado,basisReason:g.motivoBasis};return {...f,tierSaving:v,reason:`billed at the "${p}" tier; this request's usage was priced at the standard and at the batch pu\
|
|
1444
|
-
blished rate cards, component by component (${(g.factorEfectivo*100).toFixed(1)}% of standard)`}}function
|
|
1445
|
-
return n.ok?
|
|
1451
|
+
blished rate cards, component by component (${(g.factorEfectivo*100).toFixed(1)}% of standard)`}}function vh(t,e){if(!e||(t.toolCalls?.length??0)>0)return {};let n=ze(typeof t.text=="string"?t.text:"");
|
|
1452
|
+
return n.ok?de(n.value,e).valid?{data:n.value,contract:"met"}:{contract:"missed"}:{contract:"missed"}}function yh(t,e){switch(t){case "no-served-tier":return "the provider reported no service tier for t\
|
|
1446
1453
|
his result, so the rate it was billed at cannot be known: nothing is credited";case "unknown-tier":return `the provider reports the "${e}" tier for this result, a tier this layer has no published rate f\
|
|
1447
1454
|
or: nothing is credited`;case "standard-rate-tier":return `the provider reports the "${e}" tier for this result, which is not billed below the standard rate: nothing is credited`;case "no-tier-price":return "\
|
|
1448
1455
|
there is no published batch price for this model from this provider (or it has expired): nothing is credited";case "no-standard-price":return "this model has no list price of its own here, so there is n\
|
|
1449
1456
|
o standard rate card to price the difference against: nothing is credited";case "incomplete-usage":return "the provider's usage for this result is incomplete, so the difference cannot be priced: nothing\
|
|
1450
|
-
is credited";case "no-difference":return "this result's usage costs the same at both published rate cards: nothing is credited"}}var
|
|
1457
|
+
is credited";case "no-difference":return "this result's usage costs the same at both published rate cards: nothing is credited"}}var Cl=1e10;function kh(t,e,n){let r=0,o=0,i=0,s=0,a=0,c=0,u=0,l=0n,d=0,
|
|
1451
1458
|
p=0,h;for(let f of e){f.outcome==="succeeded"?r+=1:f.outcome==="errored"?o+=1:f.outcome==="canceled"?i+=1:f.outcome==="expired"?s+=1:a+=1;let v=f.tierSaving;v&&(c+=1,v.basis==="measured"&&(u+=1),l+=BigInt(
|
|
1452
|
-
Math.round(v.amount*
|
|
1459
|
+
Math.round(v.amount*Cl)),d+=v.standardCost,p+=v.appliedCost,(!h||v.pricesCheckedOn<h)&&(h=v.pricesCheckedOn));}let m=c===0?"none":u===c?"measured":"estimated",g=`${r} of ${t.requests.length} requests s\
|
|
1453
1460
|
ucceeded`+(n>0?` (${n} still running)`:"")+`; ${c} were valued at the provider's standard and batch published rate cards`+(m==="none"?"":` (${m})`)+". Reported only: batch requests are not metered and\
|
|
1454
1461
|
this saving is never billed. The layer's own per-request savings do not run on batches.";return {requestCount:t.requests.length,succeeded:r,errored:o,canceled:i,expired:s,missing:a,pending:n,credited:c,
|
|
1455
|
-
tierSaving:Number(l)/
|
|
1462
|
+
tierSaving:Number(l)/Cl,standardCost:no(d),appliedCost:no(p),basis:m,...h?{pricesCheckedOn:h}:{},creditedLedger:"none",reason:g}}function ws(t,e){let n=t;if(!n||n.kind!=="bvsala.batch"||n.version!==1||
|
|
1456
1463
|
!Array.isArray(n.batchIds)||!Array.isArray(n.requests)||!Array.isArray(n.schemas)||n.requests.some(r=>!Number.isInteger(r?.batch)||r.batch<0||r.batch>=n.batchIds.length))throw new TypeError("[bvsala] \
|
|
1457
1464
|
not a batch job returned by layer.batches.submit().");if(n.provider!==e.protocolo||n.endpoint!==e.endpoint)throw new TypeError(`[bvsala] this job was submitted to ${n.provider} at ${n.endpoint}; this \
|
|
1458
|
-
layer's provider is ${e.protocolo} at ${e.endpoint}. Read it with a layer configured like the one that submitted it.`)}function
|
|
1459
|
-
e)}`:`/batches/${encodeURIComponent(e)}`}async function
|
|
1460
|
-
async function
|
|
1465
|
+
layer's provider is ${e.protocolo} at ${e.endpoint}. Read it with a layer configured like the one that submitted it.`)}function Ss(t,e){return t.protocolo==="anthropic"?`/messages/batches/${encodeURIComponent(
|
|
1466
|
+
e)}`:`/batches/${encodeURIComponent(e)}`}async function ks(t,e,n){let r=await t.solicitar(e,n);if(!r.ok){let o="";try{o=await r.text();}catch{o="";}throw new Error(`provider ${r.status}: ${o}`)}return r}
|
|
1467
|
+
async function Dn(t,e,n){return await(await ks(t,e,n)).json()}function xs(t,e){let n=oe(t).id;if(typeof n!="string"||n==="")throw new Error(`the provider returned no ${e} id`);return n}async function*El(t){
|
|
1461
1468
|
let e=t.body;if(!e||typeof e.getReader!="function"){for(let s of (await t.text()).split(`
|
|
1462
|
-
`)){let a=
|
|
1463
|
-
`);for(;c>=0;){let u=
|
|
1464
|
-
`);}}o+=r.decode();let i=
|
|
1465
|
-
"/");return r>=0?t[e.slice(r+1)]:void 0}function
|
|
1466
|
-
Error?t.message:String(t)}function
|
|
1467
|
-
e,this.pollIntervalMs=e.pollIntervalMs??
|
|
1469
|
+
`)){let a=ys(s);a!==void 0&&(yield a);}return}let n=e.getReader(),r=new TextDecoder,o="";for(;;){let{done:s,value:a}=await n.read();if(s)break;o+=r.decode(a,{stream:true});let c=o.indexOf(`
|
|
1470
|
+
`);for(;c>=0;){let u=ys(o.slice(0,c));u!==void 0&&(yield u),o=o.slice(c+1),c=o.indexOf(`
|
|
1471
|
+
`);}}o+=r.decode();let i=ys(o);i!==void 0&&(yield i);}function ys(t){let e=t.trim();if(e!=="")try{return JSON.parse(e)}catch{return}}function xh(t,e){if(!t)return;let n=t[e];if(n)return n;let r=e.indexOf(
|
|
1472
|
+
"/");return r>=0?t[e.slice(r+1)]:void 0}function oe(t){return typeof t=="object"&&t!==null?t:{}}function st(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?Math.floor(t):0}function eo(t){return t instanceof
|
|
1473
|
+
Error?t.message:String(t)}function no(t){let e=Math.round(t*1e10)/1e10;return e===0?0:e}var wh=36e5,Sh=7*86400,Th=3e4,oo=class{opts;pollIntervalMs;refreshLeadSeconds;timer=null;enVuelo=false;parado=false;controller=null;avisadoDeCredencial=false;currentExpiresAt;currentOrg;constructor(e){this.opts=
|
|
1474
|
+
e,this.pollIntervalMs=e.pollIntervalMs??wh,this.refreshLeadSeconds=e.refreshLeadSeconds??Sh;let n=jt(Lt(e.initialToken),e.publicKey);this.currentExpiresAt=n.signatureValid&&n.payload?n.payload.expires_at:
|
|
1468
1475
|
0,this.currentOrg=n.signatureValid?n.payload?.org_id:void 0;}start(){this.timer||(this.checkNow(),this.timer=setInterval(()=>{this.checkNow();},this.pollIntervalMs),this.timer.unref?.());}stop(){this.parado=
|
|
1469
1476
|
true,this.timer&&clearInterval(this.timer),this.timer=null,this.controller?.abort(),this.controller=null;}nowSeconds(){return Math.floor((this.opts.now?this.opts.now():Date.now())/1e3)}async checkNow(){if(this.
|
|
1470
1477
|
enVuelo||this.parado||this.currentExpiresAt-this.nowSeconds()>this.refreshLeadSeconds)return false;this.enVuelo=true;let e=new AbortController;this.controller=e;let n=setTimeout(()=>e.abort(),this.opts.requestTimeoutMs??
|
|
1471
|
-
|
|
1478
|
+
Th);n.unref?.();try{let o=await(this.opts.fetchImpl??globalThis.fetch.bind(globalThis))(this.opts.url,{signal:e.signal,headers:{authorization:`Bearer ${this.opts.serviceAccountKey}`,accept:"applicatio\
|
|
1472
1479
|
n/json"}});if(!o.ok)return (o.status===401||o.status===403||o.status===404)&&!this.avisadoDeCredencial&&(this.avisadoDeCredencial=!0,console.warn(`[bv-sala] automatic pickup of the renewed license is f\
|
|
1473
1480
|
ailing with HTTP ${o.status} at ${this.opts.url}. Check 'serviceAccountKey' (rotated? from another organization?) and 'licenseServerUrl': until this works, the token will NOT renew itself and the SDK \
|
|
1474
|
-
will stop operating when the grace period ends.`)),!1;let i=await o.json();if(typeof i.token!="string")return !1;let s=
|
|
1481
|
+
will stop operating when the grace period ends.`)),!1;let i=await o.json();if(typeof i.token!="string")return !1;let s=Lt(i.token),a=jt(s,this.opts.publicKey);return !a.signatureValid||!a.payload||a.payload.
|
|
1475
1482
|
expires_at<=this.currentExpiresAt||this.currentOrg&&a.payload.org_id!==this.currentOrg||this.opts.revocados?.snapshot().has(a.payload.jti)||this.parado?!1:(this.currentExpiresAt=a.payload.expires_at,this.
|
|
1476
|
-
currentOrg=a.payload.org_id,this.opts.onNewToken(s),!0)}catch{return false}finally{clearTimeout(n),this.controller===e&&(this.controller=null),this.enVuelo=false;}}};var
|
|
1477
|
-
1e3;function
|
|
1478
|
-
er"?e.ahora:Date.now();if(t.at>n+
|
|
1479
|
-
o.outputPer1k)||o.cachedInputPer1k!==void 0&&!
|
|
1483
|
+
currentOrg=a.payload.org_id,this.opts.onNewToken(s),!0)}catch{return false}finally{clearTimeout(n),this.controller===e&&(this.controller=null),this.enVuelo=false;}}};var _l=2e3,Al=200,Ch=200,Eh=10,Ph=1e7,Rh=5,Dh=48*3600*1e3,Ts=/^[A-Za-z0-9._:/-]{1,128}$/,Ut=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0,In=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0&&t<=
|
|
1484
|
+
1e3;function Ih(t,e={}){if(!Ts.test(t.requestId)||!Ts.test(t.requestedModel)||!Ts.test(t.servedModel)||typeof t.at!="number"||!Number.isFinite(t.at)||t.at<1e12)return null;let n=typeof e?.ahora=="numb\
|
|
1485
|
+
er"?e.ahora:Date.now();if(t.at>n+Dh)return null;let r=t.optimized;if(!In(r.cost)||!Ut(r.inputTokens)||!Ut(r.cachedInputTokens)||!Ut(r.outputTokens))return null;let o=t.prices;if(!In(o.inputPer1k)||!In(
|
|
1486
|
+
o.outputPer1k)||o.cachedInputPer1k!==void 0&&!In(o.cachedInputPer1k))return null;let i={basis:"verification",requestId:t.requestId,at:Math.floor(t.at),stratum:t.stratum,outcome:t.outcome,requestedModel:t.
|
|
1480
1487
|
requestedModel,servedModel:t.servedModel,cacheResult:t.cacheResult,optimizedCost:r.cost,optimizedInputTokens:r.inputTokens,optimizedCachedInputTokens:Math.min(r.cachedInputTokens,r.inputTokens),optimizedOutputTokens:r.
|
|
1481
|
-
outputTokens,inputPer1k:o.inputPer1k,...o.cachedInputPer1k!==void 0?{cachedInputPer1k:o.cachedInputPer1k}:{},outputPer1k:o.outputPer1k};if(t.outcome==="paired"){let s=t.naive;if(!s||!
|
|
1482
|
-
inputTokens)||!
|
|
1483
|
-
i.naiveOutputTokens=s.outputTokens,s.finishReason!==void 0){if(!/^[a-z_]{1,32}$/.test(s.finishReason))return null;i.naiveFinishReason=s.finishReason;}i.naiveContract=s.contract;}return i}var
|
|
1484
|
-
NEGATIVE_INFINITY;constructor(e){this.o=e,this.flushIntervalMs=e.flushIntervalMs??15e3;}ahora(){return (this.o.now??Date.now)()}encolar(e){let n;try{n=
|
|
1485
|
-
push(n),this.pendientes.length>
|
|
1488
|
+
outputTokens,inputPer1k:o.inputPer1k,...o.cachedInputPer1k!==void 0?{cachedInputPer1k:o.cachedInputPer1k}:{},outputPer1k:o.outputPer1k};if(t.outcome==="paired"){let s=t.naive;if(!s||!In(s.cost)||!Ut(s.
|
|
1489
|
+
inputTokens)||!Ut(s.cachedInputTokens)||!Ut(s.outputTokens)||s.cachedInputTokens>s.inputTokens)return null;if(i.naiveCost=s.cost,i.naiveInputTokens=s.inputTokens,i.naiveCachedInputTokens=s.cachedInputTokens,
|
|
1490
|
+
i.naiveOutputTokens=s.outputTokens,s.finishReason!==void 0){if(!/^[a-z_]{1,32}$/.test(s.finishReason))return null;i.naiveFinishReason=s.finishReason;}i.naiveContract=s.contract;}return i}var io=class{o;flushIntervalMs;pendientes=[];conteos=new Map;reintentos=[];inflight=null;timer;fallosSeguidos=0;ultimoFallo=Number.
|
|
1491
|
+
NEGATIVE_INFINITY;constructor(e){this.o=e,this.flushIntervalMs=e.flushIntervalMs??15e3;}ahora(){return (this.o.now??Date.now)()}encolar(e){let n;try{n=Ih(e,{ahora:this.ahora()});}catch{n=null;}n&&(this.pendientes.
|
|
1492
|
+
push(n),this.pendientes.length>_l&&this.pendientes.splice(0,this.pendientes.length-_l),this.pendientes.length>=Al&&this.flushSiToca());}flushSiToca(){return this.reintentos.length>0&&this.ahora()-this.
|
|
1486
1493
|
ultimoFallo<this.flushIntervalMs?Promise.resolve():this.flush()}contar(e,n){let r=`${e}|${n}`;this.conteos.set(r,(this.conteos.get(r)??0)+1);}start(){this.timer||(this.timer=setInterval(()=>{this.flush();},
|
|
1487
1494
|
this.flushIntervalMs),this.timer.unref?.());}stop(){this.timer&&(clearInterval(this.timer),this.timer=void 0),this.flush();}async flush(){if(this.inflight)return this.inflight;this.inflight=this.hacerFlush();
|
|
1488
1495
|
try{await this.inflight;}finally{this.inflight=null;}}hayAlgo(){return this.reintentos.length>0||this.pendientes.length>0||this.conteos.size>0}siguienteSobre(){let e=this.reintentos.shift();if(e)return e;
|
|
1489
|
-
if(this.pendientes.length===0&&this.conteos.size===0)return null;let n=this.pendientes.splice(0,
|
|
1490
|
-
r.push({day:s,category:a,requests:c}),i>c?this.conteos.set(o,i-c):this.conteos.delete(o);}return {batchId:(this.o.randomId??
|
|
1491
|
-
fetch;if(e)for(let n=0;n<
|
|
1492
|
-
Bearer ${this.o.serviceAccountKey}`,"content-type":"application/json",[
|
|
1493
|
-
this.ahora(),this.reencolar(n),this.avisarDeFallo(`the server responded ${r.status}`),!1):r.status===401||r.status===403?(this.o.silenceWarnings||
|
|
1494
|
-
|
|
1496
|
+
if(this.pendientes.length===0&&this.conteos.size===0)return null;let n=this.pendientes.splice(0,Al),r=[];for(let[o,i]of this.conteos){if(r.length>=Ch)break;let[s="",a=""]=o.split("|"),c=Math.min(i,Ph);
|
|
1497
|
+
r.push({day:s,category:a,requests:c}),i>c?this.conteos.set(o,i-c):this.conteos.delete(o);}return {batchId:(this.o.randomId??Qt)(),samples:n,counts:r}}async hacerFlush(){let e=this.o.fetchImpl??globalThis.
|
|
1498
|
+
fetch;if(e)for(let n=0;n<Rh&&this.hayAlgo();n++){let r=this.siguienteSobre();if(!r||!await this.enviar(e,r))return}}async enviar(e,n){try{let r=await e(this.o.url,{method:"POST",headers:{authorization:`\
|
|
1499
|
+
Bearer ${this.o.serviceAccountKey}`,"content-type":"application/json",[Nn]:`sdk/${Me}`},body:JSON.stringify(n)});return r.ok?(this.fallosSeguidos=0,!0):r.status>=500?(this.fallosSeguidos++,this.ultimoFallo=
|
|
1500
|
+
this.ahora(),this.reencolar(n),this.avisarDeFallo(`the server responded ${r.status}`),!1):r.status===401||r.status===403?(this.o.silenceWarnings||ye(`verification-auth-${r.status}`,`[bvsala] verificat\
|
|
1501
|
+
ion reporting is being rejected with HTTP ${r.status} at ${this.o.url}. Check \`serviceAccountKey\`. Pairs are not reaching your dashboard; your requests and your usage reporting are not affected.`),!1):
|
|
1495
1502
|
(this.fallosSeguidos++,this.avisarDeFallo(r.status===404||r.status===405?`HTTP ${r.status}: the reporting URL looks wrong, or the server does not have this feature yet`:`the server rejected the batch \
|
|
1496
1503
|
with HTTP ${r.status}`),!1)}catch(r){return this.fallosSeguidos++,this.ultimoFallo=this.ahora(),this.reencolar(n),this.avisarDeFallo(r instanceof Error?r.message:"network error"),false}}reencolar(e){for(this.
|
|
1497
|
-
reintentos.unshift(e);this.reintentos.length>
|
|
1504
|
+
reintentos.unshift(e);this.reintentos.length>Eh;)this.reintentos.pop();}avisarDeFallo(e){if(this.o.silenceWarnings)return;let n=this.fallosSeguidos;n<3||(n-3)%12!==0||console.warn(`[bvsala] verificatio\
|
|
1498
1505
|
n reporting has failed ${n} times in a row against ${this.o.url} (${e}). Your requests and usage reporting keep working; the pairs are not arriving.`);}get estado(){return {pendientes:this.pendientes.length,
|
|
1499
|
-
conteos:this.conteos.size,reintentos:this.reintentos.length}}};var
|
|
1506
|
+
conteos:this.conteos.size,reintentos:this.reintentos.length}}};var _h=72*3600,Ah,Ol=new Set(Object.values($n).flatMap(t=>t.flatMap(e=>[e,`openai/${e}`]))),Ml="[bvsala] `gpt-tokenizer` is not installed, so token counts for OpenAI models are ESTIMATED with a built-\
|
|
1500
1507
|
in heuristic and the reconstructed savings are less accurate. Savings where the layer removed something are reported as `estimated` either way, and estimated savings are never billed. Install it once \
|
|
1501
|
-
(`npm i gpt-tokenizer`) and the SDK loads it automatically.";function
|
|
1502
|
-
|
|
1503
|
-
tokenizer==null&&t.exactTokenizer!==false?
|
|
1504
|
-
h,{revocation:m,...t.now?{now:t.now}:{},maxStalenessSeconds:t.licenseRevocation?.maxStalenessSeconds??
|
|
1505
|
-
status(),reason:()=>f.reason()};let v=`${t.licenseServerUrl.replace(/\/+$/,"")}/licenses/revocations`;
|
|
1506
|
-
floor(t.now()/1e3)}:{},...t.licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.licensePollIntervalSeconds!=null?{pollIntervalSeconds:t.licensePollIntervalSeconds}:
|
|
1507
|
-
silenceWarnings}:{},...t.licenseRevocation??{}}),
|
|
1508
|
-
serviceAccountKey,publicKey:h,initialToken:t.licenseKey,revocados:m,onNewToken:b=>{f=g(b);},...t.licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.now?
|
|
1509
|
-
{pollIntervalMs:t.licenseRefresh.intervalMs}:{},...t.licenseRefresh?.leadSeconds!=null?{refreshLeadSeconds:t.licenseRefresh.leadSeconds}:{}}),
|
|
1510
|
-
t.
|
|
1508
|
+
(`npm i gpt-tokenizer`) and the SDK loads it automatically.";function bx(t){let e=(h,m)=>{t.silenceWarnings!==true&&ye(h,m);};t.licenseGate&&(e("licenseGate-ignorado","[bvsala] Ignoring the injected `lic\
|
|
1509
|
+
enseGate`: in the published package a license is only accepted as a `licenseKey` verified against BiVelio's embedded public key. Get yours at https://savings.bivelio.com/dashboard/install"),t={...t,licenseGate:void 0});
|
|
1510
|
+
let r={...t,tokenizer:t.tokenizer??wo},o=t.tokenizer==null&&t.exactTokenizer!==false?Ah??=To(wo).catch(()=>false):Promise.resolve(true),i,s;if(t.licenseKey&&!t.licenseGate){let h=hu;if(t.
|
|
1511
|
+
licenseServerUrl){let m=new Nt,g=b=>Nr(b,h,{revocation:m,...t.now?{now:t.now}:{},maxStalenessSeconds:t.licenseRevocation?.maxStalenessSeconds??_h}),f=g(t.licenseKey);r.licenseGate={isEntitled:b=>f.isEntitled(
|
|
1512
|
+
b),isActive:()=>f.isActive(),status:()=>f.status(),reason:()=>f.reason()};let v=`${t.licenseServerUrl.replace(/\/+$/,"")}/licenses/revocations`;i=new $r({url:v,publicKeyPem:h,snapshot:m,getRefreshAfter:()=>f.
|
|
1513
|
+
refreshAfter?.(),...t.now?{nowSeconds:()=>Math.floor(t.now()/1e3)}:{},...t.licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.licensePollIntervalSeconds!=null?{pollIntervalSeconds:t.licensePollIntervalSeconds}:
|
|
1514
|
+
{},...t.silenceWarnings!=null?{silenceWarnings:t.silenceWarnings}:{},...t.licenseRevocation??{}}),i.start(),t.serviceAccountKey&&t.licenseRefresh?.enabled!==false&&(s=new oo({url:`${t.licenseServerUrl.replace(
|
|
1515
|
+
/\/+$/,"")}/api/license/current`,serviceAccountKey:t.serviceAccountKey,publicKey:h,initialToken:t.licenseKey,revocados:m,onNewToken:b=>{f=g(b);},...t.licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.now?
|
|
1516
|
+
{now:t.now}:{},...t.licenseRefresh?.intervalMs!=null?{pollIntervalMs:t.licenseRefresh.intervalMs}:{},...t.licenseRefresh?.leadSeconds!=null?{refreshLeadSeconds:t.licenseRefresh.leadSeconds}:{}}),s.start());}else
|
|
1517
|
+
r.licenseGate=xu(t.licenseKey,h,t.now);}let a=Zr(t.verification);!a.activo&&a.motivo==="invalido"&&e("verificacion-invalida",ll(t.verification));let c,u;if(a.activo){let h;if(t.serviceAccountKey&&t.metering?.
|
|
1511
1518
|
enabled!==false)if(t.meteringUrl){let m=/^(.*)\/api\/metering\/usage\/?$/.exec(t.meteringUrl);m&&(h=`${m[1]}/api/metering/verification`);}else t.licenseServerUrl&&(h=`${t.licenseServerUrl.replace(/\/+$/,"")}\
|
|
1512
|
-
/api/metering/verification`);if(!h&&!
|
|
1519
|
+
/api/metering/verification`);if(!h&&!a.onCheck)e("verificacion-sin-destino",dl);else {h&&t.serviceAccountKey&&(c=new io({url:h,serviceAccountKey:t.serviceAccountKey,...t.meteringFetch?{fetchImpl:t.meteringFetch}:
|
|
1513
1520
|
t.licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.now?{now:t.now}:{},...t.metering?.flushIntervalMs!=null?{flushIntervalMs:t.metering.flushIntervalMs}:{},...t.silenceWarnings!=null?{silenceWarnings:t.
|
|
1514
|
-
silenceWarnings}:{}}),c.start());let m=c;u={encolar:g=>m?.encolar(g),...m?{contar:(g,f)=>m.contar(g,f)}:{},enReposo:()=>m?.flushSiToca()},
|
|
1515
|
-
u?{verificacion:u}:{}),d;if(t.serviceAccountKey&&t.metering?.enabled!==false){let h=t.meteringUrl??(t.licenseServerUrl?`${t.licenseServerUrl.replace(/\/+$/,"")}/api/metering/usage`:void 0);if(
|
|
1516
|
-
|
|
1517
|
-
|
|
1521
|
+
silenceWarnings}:{}}),c.start());let m=c;u={encolar:g=>m?.encolar(g),...m?{contar:(g,f)=>m.contar(g,f)}:{},enReposo:()=>m?.flushSiToca()},e(`verificacion-activa:${a.tasa}`,ul(a.tasa));}}let l=new Xr(r,
|
|
1522
|
+
u?{verificacion:u}:{}),d;if(t.serviceAccountKey&&t.metering?.enabled!==false){let h=t.meteringUrl??(t.licenseServerUrl?`${t.licenseServerUrl.replace(/\/+$/,"")}/api/metering/usage`:void 0);if(h||e("clave\
|
|
1523
|
+
-de-servicio-sin-servidor",'[bvsala] `serviceAccountKey` is set but there is no `licenseServerUrl` (or `meteringUrl`): seat metering and automatic license renewal are OFF, so nothing will reach your d\
|
|
1524
|
+
ashboard and a renewed license will not be picked up. Add `licenseServerUrl: "https://savings.bivelio.com"` \u2014 or drop `serviceAccountKey` for a zero-network deployment.'),h){d=new xn({url:h,serviceAccountKey:t.
|
|
1518
1525
|
serviceAccountKey,surface:"sdk",...t.metering?.orgId?{orgId:t.metering.orgId}:{},...t.metering?.flushIntervalMs!=null?{flushIntervalMs:t.metering.flushIntervalMs}:{},...t.metering?.maxBatch!=null?{maxBatch:t.
|
|
1519
1526
|
metering.maxBatch}:{},...t.metering?.maxBuffer!=null?{maxBuffer:t.metering.maxBuffer}:{},...t.meteringFetch?{fetchImpl:t.meteringFetch}:t.licenseFetch?{fetchImpl:t.licenseFetch}:{},...t.now?{now:t.now}:
|
|
1520
|
-
{},...t.metering?.ci!=null?{ci:t.metering.ci}:{},...t.silenceWarnings!=null?{silenceWarnings:t.silenceWarnings}:{}});let m=t.metering?.ci??
|
|
1521
|
-
let g=d;
|
|
1522
|
-
now:
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
toFixed(10).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"");return e==="-0"?"0":e}function
|
|
1526
|
-
column "${e}" holds a non-finite number`);return
|
|
1527
|
-
e strings, numbers, booleans or null (flatten objects such as a series row's \`dimensions\` into their own columns first)`);let n=t;return n===""||/[",\r\n]/.test(n)?`"${n.replace(/"/g,'""')}"`:n}function
|
|
1528
|
-
let n;if(e?.columns)n=e.columns;else {if(t.length===0)return "";let o=new Set;for(let i of t)for(let s of Object.keys(i))o.add(s);n=[...o];}let r=[n.map(o=>
|
|
1529
|
-
i=>
|
|
1530
|
-
`).join("")}var
|
|
1531
|
-
deepseek",nombre:"DeepSeek"},groq:{otel:"groq",nombre:"Groq"},xai:{otel:"x_ai",nombre:"xAI"},cohere:{otel:"cohere",nombre:"Cohere"},perplexity:{otel:"perplexity",nombre:"Perplexity"}};function
|
|
1532
|
-
indexOf("/");return e>0?t.slice(0,e):void 0}function
|
|
1533
|
-
t)?.nombre}function bt(t){return
|
|
1527
|
+
{},...t.metering?.ci!=null?{ci:t.metering.ci}:{},...t.silenceWarnings!=null?{silenceWarnings:t.silenceWarnings}:{}});let m=t.metering?.ci??Vi();if(t.metering?.seatId)d.setSeat(t.metering.seatId,m);else {
|
|
1528
|
+
let g=d;Ui(t.serviceAccountKey).then(f=>g.setSeat(f,m)).catch(()=>{});}d.start();}}return {batches:Dl({provider:r.provider,...r.costModels?{costModels:r.costModels}:{},exigirLicencia:()=>l.exigirLicencia(),
|
|
1529
|
+
now:r.now??Date.now}),generate:async h=>{let m=await o,g=await l.generate(h);if(!m&&Ol.has(h.model)&&e("tokenizador-exacto-ausente",Ml),d)try{d.record(g.report);}catch{}return g},generateStream:(h,m)=>{
|
|
1530
|
+
let g=l.generateStream(h,m??{},o);return g.result.then(async f=>{if(d)try{d.record(f.report);}catch{}!await o&&Ol.has(h.model)&&e("tokenizador-exacto-ausente",Ml);},()=>{}),g},close:()=>{l.cerrarVerificacion(),
|
|
1531
|
+
c?.stop(),i?.stop(),s?.stop(),d?.stop();}}}function Cs(t){if(!Number.isFinite(t))throw new TypeError(`[bvsala] cannot write a non-finite number (${String(t)}) as a decimal`);if(Math.abs(t)>=1e21)return BigInt(Math.round(t)).toString();let e=t.
|
|
1532
|
+
toFixed(10).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"");return e==="-0"?"0":e}function Ll(t,e){if(t==null)return "";if(typeof t=="number"){if(!Number.isFinite(t))throw new TypeError(`[bvsala] toCsv: \
|
|
1533
|
+
column "${e}" holds a non-finite number`);return Cs(t)}if(typeof t=="boolean")return t?"true":"false";if(typeof t!="string")throw new TypeError(`[bvsala] toCsv: column "${e}" holds a ${typeof t}; writ\
|
|
1534
|
+
e strings, numbers, booleans or null (flatten objects such as a series row's \`dimensions\` into their own columns first)`);let n=t;return n===""||/[",\r\n]/.test(n)?`"${n.replace(/"/g,'""')}"`:n}function Oh(t,e){
|
|
1535
|
+
let n;if(e?.columns)n=e.columns;else {if(t.length===0)return "";let o=new Set;for(let i of t)for(let s of Object.keys(i))o.add(s);n=[...o];}let r=[n.map(o=>Ll(o,o)).join(",")];for(let o of t)r.push(n.map(
|
|
1536
|
+
i=>Ll(o[i],i)).join(","));return r.map(o=>`${o}\r
|
|
1537
|
+
`).join("")}var jl={openai:{otel:"openai",nombre:"OpenAI"},anthropic:{otel:"anthropic",nombre:"Anthropic"},google:{otel:"gcp.gen_ai",nombre:"Google"},mistral:{otel:"mistral_ai",nombre:"Mistral AI"},deepseek:{otel:"\
|
|
1538
|
+
deepseek",nombre:"DeepSeek"},groq:{otel:"groq",nombre:"Groq"},xai:{otel:"x_ai",nombre:"xAI"},cohere:{otel:"cohere",nombre:"Cohere"},perplexity:{otel:"perplexity",nombre:"Perplexity"}};function Nl(t){let e=t.
|
|
1539
|
+
indexOf("/");return e>0?t.slice(0,e):void 0}function Es(t){let e=Nl(t)?.toLowerCase();return e!==void 0&&Object.hasOwn(jl,e)?jl[e]:void 0}function $l(t){return Es(t)?.otel??Nl(t)}function Bl(t){return Es(
|
|
1540
|
+
t)?.nombre}function bt(t){return Es(t)?t.slice(t.indexOf("/")+1):t}var le={operacion:"gen_ai.operation.name",proveedor:"gen_ai.provider.name",modeloPedido:"gen_ai.request.model",temperatura:"gen_ai.request.temperature",semilla:"gen_ai.request.seed",maxTokens:"gen_ai.\
|
|
1534
1541
|
request.max_tokens",stream:"gen_ai.request.stream",conversacion:"gen_ai.conversation.id",modeloRespuesta:"gen_ai.response.model",motivosDeFin:"gen_ai.response.finish_reasons",primerTrozo:"gen_ai.respo\
|
|
1535
|
-
nse.time_to_first_chunk",entrada:"gen_ai.usage.input_tokens",salida:"gen_ai.usage.output_tokens",lecturaDeCache:"gen_ai.usage.cache_read.input_tokens"}
|
|
1536
|
-
request_sent`;function qe(t){return t==="measured"||t==="reference"||t==="estimated"}function
|
|
1537
|
-
actual)}function F(t,e,n){(typeof n=="string"||typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n))&&(t[e]=n);}function
|
|
1538
|
-
bivelio_basis:n.basis,bivelio_currency:e};qe(n.basis)&&(s.bivelio_baseline_cost=n.baselineEstimate,s.bivelio_actual_cost=n.actual,s[`bivelio_saved_${n.basis}`]=
|
|
1542
|
+
nse.time_to_first_chunk",entrada:"gen_ai.usage.input_tokens",salida:"gen_ai.usage.output_tokens",lecturaDeCache:"gen_ai.usage.cache_read.input_tokens"},Fl="error.type",q="com.bivelio.",zl=`${q}stream.\
|
|
1543
|
+
request_sent`;function qe(t){return t==="measured"||t==="reference"||t==="estimated"}function Ht(t){let e=Math.round(t*1e10)/1e10;return e===0?0:e}function ql(t){return Ht(t.cost.baselineEstimate-t.cost.
|
|
1544
|
+
actual)}function F(t,e,n){(typeof n=="string"||typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n))&&(t[e]=n);}function Ps(t,e){let{cost:n,tokens:r,calls:o,cache:i}=t,s={bivelio_request_id:t.requestId,
|
|
1545
|
+
bivelio_basis:n.basis,bivelio_currency:e};qe(n.basis)&&(s.bivelio_baseline_cost=n.baselineEstimate,s.bivelio_actual_cost=n.actual,s[`bivelio_saved_${n.basis}`]=ql(t),s.bivelio_net_savings_ratio=n.netSavings),
|
|
1539
1546
|
s.bivelio_avoided_calls=o.avoidedLlm,s.bivelio_eliminated_input_tokens=r.eliminatedInput,s.bivelio_compressed_input_tokens=r.compressedInput,r.providerCachedInput!==void 0&&(s.bivelio_provider_cached_input_tokens=
|
|
1540
1547
|
r.providerCachedInput),s.bivelio_cache_result=i.result,t.qualityStatus!==void 0&&(s.bivelio_quality_status=t.qualityStatus);for(let[a,c]of Object.entries(s))typeof c=="number"&&!Number.isFinite(c)&&delete s[a];
|
|
1541
|
-
return s}function
|
|
1542
|
-
void 0&&F(e,
|
|
1548
|
+
return s}function Rs(t){let e={};return F(e,le.modeloRespuesta,bt(t.model)),qe(t.cost.basis)&&(F(e,le.entrada,t.tokens.actualInput),F(e,le.salida,t.tokens.actualOutput),t.tokens.providerCachedInput!==
|
|
1549
|
+
void 0&&F(e,le.lecturaDeCache,t.tokens.providerCachedInput)),e}function so(t,e){let n=e?.currency??"USD",{cost:r,tokens:o,calls:i,cache:s}=t,a={};F(a,`${q}request_id`,t.requestId),F(a,`${q}sdk.version`,
|
|
1543
1550
|
Me),F(a,`${q}model.id`,t.model),F(a,`${q}model.requested_id`,t.modelCascade?.requestedModel),F(a,`${q}cost.basis`,r.basis),F(a,`${q}cost.currency`,n),qe(r.basis)&&(F(a,`${q}cost.baseline`,r.baselineEstimate),
|
|
1544
|
-
F(a,`${q}cost.actual`,r.actual),F(a,`${q}cost.saved.${r.basis}`,
|
|
1551
|
+
F(a,`${q}cost.actual`,r.actual),F(a,`${q}cost.saved.${r.basis}`,ql(t)),F(a,`${q}cost.net_savings_ratio`,r.netSavings),F(a,`${q}cost.eliminated_input_floor`,r.eliminatedInputFloorCost)),F(a,`${q}calls.\
|
|
1545
1552
|
baseline`,i.baselineLlm),F(a,`${q}calls.actual`,i.actualLlm),F(a,`${q}calls.avoided`,i.avoidedLlm),F(a,`${q}calls.retries`,i.retries),F(a,`${q}tokens.baseline_input`,o.baselineInput),F(a,`${q}tokens.a\
|
|
1546
1553
|
ctual_input`,o.actualInput),F(a,`${q}tokens.eliminated_input`,o.eliminatedInput),F(a,`${q}tokens.compressed_input`,o.compressedInput),F(a,`${q}tokens.provider_cached_input`,o.providerCachedInput),F(a,
|
|
1547
1554
|
`${q}tokens.baseline_output`,o.baselineOutput),F(a,`${q}tokens.actual_output`,o.actualOutput),F(a,`${q}tokens.eliminated_output`,o.eliminatedOutput),F(a,`${q}cache.result`,s.result),F(a,`${q}cache.ref\
|
|
1548
1555
|
erence_request_id`,s.reference?.requestId),F(a,`${q}cache.reference_rejected`,s.referenceRejected),F(a,`${q}quality.status`,t.qualityStatus),F(a,`${q}latency.preprocessing_ms`,t.latencyMs?.preprocessing),
|
|
1549
|
-
F(a,`${q}latency.provider_ms`,t.latencyMs?.provider);let u=e?.langfuse?.metadata||e?.datadog?.metadata?
|
|
1550
|
-
on.metadata.${l}`]=typeof d=="number"?
|
|
1551
|
-
metadata){let l={};for(let[d,p]of Object.entries(u))l[d.replace(/^bivelio_/,"")]=p;a["_dd.ml_obs.metadata"]=JSON.stringify({bivelio:l});}return a}var
|
|
1552
|
-
"function"}function
|
|
1553
|
-
ngsLayer: `tracer` must be an OpenTelemetry Tracer, a TracerProvider or the `trace` object of the OpenTelemetry API")}function
|
|
1554
|
-
test(e)?e:"_OTHER"}function
|
|
1555
|
-
isFinite(c)&&(r[a]=c);};i(
|
|
1556
|
-
(r[
|
|
1557
|
-
let i=r.streaming;i?.delivery==="live"&&typeof i.firstEventMs=="number"&&Number.isFinite(i.firstEventMs)&&(o[
|
|
1558
|
-
function
|
|
1559
|
-
let n
|
|
1560
|
-
let r={...e.currency!==void 0?{currency:e.currency}:{},...e.langfuse?{langfuse:e.langfuse}:{},...e.datadog?{datadog:e.datadog}:{}},o=e.providerName;function i(s,a,c,u){let l,d,p=false,h;try{h=
|
|
1561
|
-
h=void 0;}let m=`chat ${
|
|
1562
|
-
|
|
1563
|
-
s),(a,c)=>c.then(u=>(
|
|
1564
|
-
try{return typeof t.model=="string"?bt(t.model):""}catch{return ""}}function
|
|
1565
|
-
s!==void 0&&(a.cache_read_input_tokens=s),r.usageDetails=a,e?.includeCost&&n==="USD"&&Number.isFinite(t.cost.actual)&&(r.costDetails={total:t.cost.actual});}return r}var
|
|
1566
|
-
ust be "hour" or "day"`)}function
|
|
1567
|
-
USD"`)}function
|
|
1568
|
-
[bvsala] ${e}: invalid "at" for request ${String(t.report?.requestId)}: expected an ISO 8601 string, epoch milliseconds or a valid Date`);return r}function
|
|
1569
|
-
t/n)*n}function
|
|
1570
|
-
`[bvsala] ${r}: report ${n} has no finite number in ${e}`)}function
|
|
1571
|
-
la] ${n}: every record must be { at, report }`);let a=s.report,c=a.cost?.basis;if(c==="shadow")continue;if(!
|
|
1572
|
-
own cost basis`);let u=c,l=
|
|
1556
|
+
F(a,`${q}latency.provider_ms`,t.latencyMs?.provider);let u=e?.langfuse?.metadata||e?.datadog?.metadata?Ps(t,n):void 0;if(u&&e?.langfuse?.metadata)for(let[l,d]of Object.entries(u))a[`langfuse.observati\
|
|
1557
|
+
on.metadata.${l}`]=typeof d=="number"?Cs(d):d;if(e?.langfuse?.cost&&n==="USD"&&qe(r.basis)&&Number.isFinite(r.actual)&&(a["langfuse.observation.cost_details"]=JSON.stringify({total:r.actual})),u&&e?.datadog?.
|
|
1558
|
+
metadata){let l={};for(let[d,p]of Object.entries(u))l[d.replace(/^bivelio_/,"")]=p;a["_dd.ml_obs.metadata"]=JSON.stringify({bivelio:l});}return a}var Mh=2,Lh=2,jh="@bivelio/savings-layer";function Nh(t,e,n){try{if(t.isRecording?.()===!1)return;let r=so(e,n);n?.genAi&&Object.assign(r,Rs(e)),t.setAttributes(r);}catch{}}function Ds(t){return typeof t==
|
|
1559
|
+
"function"}function $h(t){let e=t;if(e&&Ds(e.startActiveSpan))return e;if(e&&Ds(e.getTracer)){let n=e.getTracer(jh,Me);if(n&&Ds(n.startActiveSpan))return n}throw new TypeError("[bvsala] instrumentSavi\
|
|
1560
|
+
ngsLayer: `tracer` must be an OpenTelemetry Tracer, a TracerProvider or the `trace` object of the OpenTelemetry API")}function Bh(t){let e=t?.name;return typeof e=="string"&&/^[A-Za-z_$][\w$.-]{0,127}$/.
|
|
1561
|
+
test(e)?e:"_OTHER"}function Fh(t,e,n){let r={[le.operacion]:"chat"},o=n??$l(t.model);typeof o=="string"&&o!==""&&(r[le.proveedor]=o),r[le.modeloPedido]=bt(t.model);let i=(a,c)=>{typeof c=="number"&&Number.
|
|
1562
|
+
isFinite(c)&&(r[a]=c);};i(le.temperatura,t.temperature),i(le.semilla,t.seed),i(le.maxTokens,t.response?.maxOutputTokens),e&&(r[le.stream]=true);let s=t.context?.sessionId;return typeof s=="string"&&s!==""&&
|
|
1563
|
+
(r[le.conversacion]=s),r}function Vl(t,e,n){try{if(t.isRecording?.()!==!1){let r=e.report,o={...Rs(r),...so(r,n)};typeof e.finishReason=="string"&&e.finishReason!==""&&(o[le.motivosDeFin]=[e.finishReason]);
|
|
1564
|
+
let i=r.streaming;i?.delivery==="live"&&typeof i.firstEventMs=="number"&&Number.isFinite(i.firstEventMs)&&(o[le.primerTrozo]=i.firstEventMs/1e3),t.setAttributes(o);}}catch{}finally{try{t.end();}catch{}}}
|
|
1565
|
+
function Is(t,e){try{if(t.isRecording?.()!==!1){let n={[Fl]:Bh(e)};e instanceof ke&&(n[zl]=e.requestSent),t.setAttributes(n),t.setStatus?.({code:Lh});}}catch{}finally{try{t.end();}catch{}}}function zh(t,e){
|
|
1566
|
+
let n=$h(e?.tracer);if(e.currency!==void 0&&!/^[A-Z]{3}$/.test(e.currency))throw new TypeError(`[bvsala] instrumentSavingsLayer: currency must be an ISO 4217 code such as "USD" (got "${e.currency}")`);
|
|
1567
|
+
let r={...e.currency!==void 0?{currency:e.currency}:{},...e.langfuse?{langfuse:e.langfuse}:{},...e.datadog?{datadog:e.datadog}:{}},o=e.providerName;function i(s,a,c,u){let l,d,p=false,h;try{h=Fh(s,a,o);}catch{
|
|
1568
|
+
h=void 0;}let m=`chat ${qh(s)}`;try{n.startActiveSpan(m,{kind:Mh,...h?{attributes:h}:{}},g=>{if(l)return l.valor;if(d)throw d.error;if(p){try{g.end();}catch{}return}let f;try{f=c();}catch(v){throw d={error:v},
|
|
1569
|
+
Is(g,v),v}try{l={valor:u(g,f)};}catch{l={valor:f};try{g.end();}catch{}}return l.valor});}catch{}if(d)throw d.error;return l?l.valor:(p=true,c())}return {batches:t.batches,generate(s){return i(s,false,()=>t.generate(
|
|
1570
|
+
s),(a,c)=>c.then(u=>(Vl(a,u,r),u),u=>{throw Is(a,u),u}))},generateStream(s,a){return i(s,true,()=>t.generateStream(s,a),(c,u)=>(u.result.then(l=>Vl(c,l,r),l=>Is(c,l)),u))},close(){t.close();}}}function qh(t){
|
|
1571
|
+
try{return typeof t.model=="string"?bt(t.model):""}catch{return ""}}function Vh(t,e){let n=e?.currency??"USD",r={model:bt(t.model),metadata:Ps(t,n)};if(qe(t.cost.basis)){let{actualInput:o,actualOutput:i,providerCachedInput:s}=t.tokens,a={input:Math.max(0,o-(s??0)),output:i};
|
|
1572
|
+
s!==void 0&&(a.cache_read_input_tokens=s),r.usageDetails=a,e?.includeCost&&n==="USD"&&Number.isFinite(t.cost.actual)&&(r.costDetails={total:t.cost.actual});}return r}var Ul=["measured","reference","estimated","unmeasured"],_s=36e5,Hl=24*_s;function ao(t,e){if(t===void 0)return "day";if(t==="hour"||t==="day")return t;throw new TypeError(`[bvsala] ${e}: granularity m\
|
|
1573
|
+
ust be "hour" or "day"`)}function co(t,e){if(t===void 0)return "USD";if(typeof t=="string"&&/^[A-Z]{3}$/.test(t))return t;throw new TypeError(`[bvsala] ${e}: currency must be an ISO 4217 code such as "\
|
|
1574
|
+
USD"`)}function Uh(t,e){let n=t.at,r=Number.NaN;if(n instanceof Date?r=n.getTime():typeof n=="number"?r=n:typeof n=="string"&&n.trim()!==""&&(r=Date.parse(n)),!Number.isFinite(r))throw new TypeError(`\
|
|
1575
|
+
[bvsala] ${e}: invalid "at" for request ${String(t.report?.requestId)}: expected an ISO 8601 string, epoch milliseconds or a valid Date`);return r}function Hh(t,e){let n=e==="hour"?_s:Hl;return Math.floor(
|
|
1576
|
+
t/n)*n}function Wh(t,e){return t+(e==="hour"?_s:Hl)}function at(t){return new Date(t).toISOString().replace(/\.\d{3}Z$/,"Z")}function ge(t,e,n,r){if(typeof t=="number"&&Number.isFinite(t))return t;throw new TypeError(
|
|
1577
|
+
`[bvsala] ${r}: report ${n} has no finite number in ${e}`)}function uo(t,e,n,r){let o=new Map;for(let s of t){if(!s||typeof s!="object"||!s.report||typeof s.report!="object")throw new TypeError(`[bvsa\
|
|
1578
|
+
la] ${n}: every record must be { at, report }`);let a=s.report,c=a.cost?.basis;if(c==="shadow")continue;if(!Ul.includes(c))throw new TypeError(`[bvsala] ${n}: report ${String(a.requestId)} has an unkn\
|
|
1579
|
+
own cost basis`);let u=c,l=Hh(Uh(s,n),e),{clave:d,extra:p}=r(s,l),h=JSON.stringify([l,a.model,u,d]),m=o.get(h);m||(m={inicio:l,fin:Wh(l,e),modelo:a.model,basis:u,clave:d,extra:p,peticiones:0,llamadas:0,
|
|
1573
1580
|
evitadas:0,baseline:0,actual:0,ahorro:0,suelo:void 0,tokens:{baselineInput:0,actualInput:0,eliminatedInput:0,compressedInput:0,providerCachedInput:void 0,baselineOutput:0,actualOutput:0,eliminatedOutput:0}},
|
|
1574
1581
|
o.set(h,m));let g=String(a.requestId);m.peticiones+=1,m.llamadas+=ge(a.calls?.actualLlm,"calls.actualLlm",g,n),m.evitadas+=ge(a.calls?.avoidedLlm,"calls.avoidedLlm",g,n);let f=a.tokens;if(m.tokens.baselineInput+=
|
|
1575
1582
|
ge(f?.baselineInput,"tokens.baselineInput",g,n),m.tokens.actualInput+=ge(f?.actualInput,"tokens.actualInput",g,n),m.tokens.eliminatedInput+=ge(f?.eliminatedInput,"tokens.eliminatedInput",g,n),m.tokens.
|
|
1576
1583
|
compressedInput+=ge(f?.compressedInput,"tokens.compressedInput",g,n),m.tokens.baselineOutput+=ge(f?.baselineOutput,"tokens.baselineOutput",g,n),m.tokens.actualOutput+=ge(f?.actualOutput,"tokens.actual\
|
|
1577
1584
|
Output",g,n),m.tokens.eliminatedOutput+=ge(f?.eliminatedOutput,"tokens.eliminatedOutput",g,n),f.providerCachedInput!==void 0&&(m.tokens.providerCachedInput=(m.tokens.providerCachedInput??0)+ge(f.providerCachedInput,
|
|
1578
1585
|
"tokens.providerCachedInput",g,n)),qe(u)){let v=ge(a.cost.baselineEstimate,"cost.baselineEstimate",g,n),b=ge(a.cost.actual,"cost.actual",g,n);m.baseline+=v,m.actual+=b,m.ahorro+=v-b,a.cost.eliminatedInputFloorCost!==
|
|
1579
|
-
void 0&&(m.suelo=(m.suelo??0)+ge(a.cost.eliminatedInputFloorCost,"cost.eliminatedInputFloorCost",g,n));}}let i=s=>
|
|
1580
|
-
s.modelo>a.modelo?1:0)||i(s.basis)-i(a.basis)||(s.clave<a.clave?-1:s.clave>a.clave?1:0))}function
|
|
1581
|
-
measured:t.basis==="measured"?n:null,reference:t.basis==="reference"?n:null,estimated:t.basis==="estimated"?n:null,suelo:e&&t.suelo!==void 0?
|
|
1582
|
-
keys(t).sort().map(e=>[e,t[e]]))}function
|
|
1583
|
-
o,i]of Object.entries(t)){if(typeof i!="string")throw new TypeError(`[bvsala] ${n}: ${e} value for "${o}" must be a string`);r[o]=i;}return r}var
|
|
1586
|
+
void 0&&(m.suelo=(m.suelo??0)+ge(a.cost.eliminatedInputFloorCost,"cost.eliminatedInputFloorCost",g,n));}}let i=s=>Ul.indexOf(s);return [...o.values()].sort((s,a)=>s.inicio-a.inicio||(s.modelo<a.modelo?-1:
|
|
1587
|
+
s.modelo>a.modelo?1:0)||i(s.basis)-i(a.basis)||(s.clave<a.clave?-1:s.clave>a.clave?1:0))}function lo(t){let e=qe(t.basis),n=Ht(t.ahorro);return {baseline:e?Ht(t.baseline):null,actual:e?Ht(t.actual):null,
|
|
1588
|
+
measured:t.basis==="measured"?n:null,reference:t.basis==="reference"?n:null,estimated:t.basis==="estimated"?n:null,suelo:e&&t.suelo!==void 0?Ht(t.suelo):null}}function po(t){return JSON.stringify(Object.
|
|
1589
|
+
keys(t).sort().map(e=>[e,t[e]]))}function fo(t,e,n){if(t==null)return {};if(typeof t!="object"||Array.isArray(t))throw new TypeError(`[bvsala] ${n}: ${e} must return an object of strings`);let r={};for(let[
|
|
1590
|
+
o,i]of Object.entries(t)){if(typeof i!="string")throw new TypeError(`[bvsala] ${n}: ${e} value for "${o}" must be a string`);r[o]=i;}return r}var Jh=new Set(["periodStart","periodEnd","date","model","basis","currency","requests","providerCalls","avoidedCalls","baselineCost","actualCost","measuredSavings","referenceSavings","estimatedSavings",
|
|
1584
1591
|
"eliminatedInputFloorCost","baselineInputTokens","actualInputTokens","eliminatedInputTokens","compressedInputTokens","providerCachedInputTokens","baselineOutputTokens","actualOutputTokens","eliminated\
|
|
1585
|
-
OutputTokens","dimensions"]),
|
|
1586
|
-
keys(a))if(
|
|
1592
|
+
OutputTokens","dimensions"]),_n="toSavingsSeries";function Kh(t,e){let n=ao(e?.granularity,_n),r=co(e?.currency,_n),o=e?.dimensions;return uo(t,n,_n,s=>{let a=o?fo(o(s),"dimensions",_n):{};for(let c of Object.
|
|
1593
|
+
keys(a))if(Jh.has(c))throw new TypeError(`[bvsala] ${_n}: dimension "${c}" repeats a column of the series`);return {clave:po(a),extra:a}}).map(s=>{let a=lo(s),c=at(s.inicio);return {periodStart:c,periodEnd:at(
|
|
1587
1594
|
s.fin),date:c.slice(0,10),model:s.modelo,basis:s.basis,currency:r,requests:s.peticiones,providerCalls:s.llamadas,avoidedCalls:s.evitadas,baselineCost:a.baseline,actualCost:a.actual,measuredSavings:a.measured,
|
|
1588
1595
|
referenceSavings:a.reference,estimatedSavings:a.estimated,eliminatedInputFloorCost:a.suelo,baselineInputTokens:s.tokens.baselineInput,actualInputTokens:s.tokens.actualInput,eliminatedInputTokens:s.tokens.
|
|
1589
1596
|
eliminatedInput,compressedInputTokens:s.tokens.compressedInput,providerCachedInputTokens:s.tokens.providerCachedInput??null,baselineOutputTokens:s.tokens.baselineOutput,actualOutputTokens:s.tokens.actualOutput,
|
|
1590
|
-
eliminatedOutputTokens:s.tokens.eliminatedOutput,dimensions:Object.freeze({...s.extra})}})}var be="toFocusRows",
|
|
1591
|
-
`[bvsala] ${be}: cannot determine the FOCUS ${r} for model "${n}". FOCUS allows no placeholder there: pass it in the options.`)}function
|
|
1597
|
+
eliminatedOutputTokens:s.tokens.eliminatedOutput,dimensions:Object.freeze({...s.extra})}})}var be="toFocusRows",Gh="BV-SALA savings ledger",Wl="bivelio/";function vt(t){return typeof t=="string"&&t.trim()!==""}function As(t,e,n,r){let o=typeof t=="function"?t(n):t??e;if(vt(o))return o;throw new TypeError(
|
|
1598
|
+
`[bvsala] ${be}: cannot determine the FOCUS ${r} for model "${n}". FOCUS allows no placeholder there: pass it in the options.`)}function Zh(t,e,n){if(!n){let s=new Date(t);return {start:Date.UTC(s.getUTCFullYear(),
|
|
1592
1599
|
s.getUTCMonth(),1),end:Date.UTC(s.getUTCFullYear(),s.getUTCMonth()+1,1)}}let r=n(new Date(t)),o=r?.start instanceof Date?r.start.getTime():Number.NaN,i=r?.end instanceof Date?r.end.getTime():Number.NaN;
|
|
1593
1600
|
if(!Number.isFinite(o)||!Number.isFinite(i)||o>=i)throw new TypeError(`[bvsala] ${be}: billingPeriod must return valid Dates with start before end`);if(t<o||e>i)throw new TypeError(`[bvsala] ${be}: bi\
|
|
1594
|
-
llingPeriod must contain the charge period it is given`);return {start:o,end:i}}function
|
|
1595
|
-
red`);let n=
|
|
1596
|
-
Id must be a non-empty string or a function`);let c=e.serviceName??
|
|
1601
|
+
llingPeriod must contain the charge period it is given`);return {start:o,end:i}}function Yh(t,e){if(!e||typeof e!="object")throw new TypeError(`[bvsala] ${be}: options with a billingAccountId are requi\
|
|
1602
|
+
red`);let n=ao(e.granularity,be),r=co(e.currency,be),{billingAccountId:o,billingAccountName:i,subAccount:s,tags:a}=e;if(typeof o!="function"&&!vt(o))throw new TypeError(`[bvsala] ${be}: billingAccount\
|
|
1603
|
+
Id must be a non-empty string or a function`);let c=e.serviceName??Gh;if(!vt(c))throw new TypeError(`[bvsala] ${be}: serviceName must be a non-empty string`);return uo(t,n,be,l=>{let d=typeof o=="func\
|
|
1597
1604
|
tion"?o(l):o;if(!vt(d))throw new TypeError(`[bvsala] ${be}: billingAccountId returned no id for request ${String(l.report.requestId)}`);let p=typeof i=="function"?i(l):i,h=s?s(l):void 0;if(h!==void 0&&
|
|
1598
|
-
(!vt(h?.id)||!vt(h?.name)))throw new TypeError(`[bvsala] ${be}: subAccount must return { id, name } as non-empty strings, or undefined`);let m=
|
|
1599
|
-
startsWith(
|
|
1600
|
-
[g.id,g.nombre,g.subId,g.subNombre,
|
|
1601
|
-
p,d,"HostProviderName"),g=
|
|
1605
|
+
(!vt(h?.id)||!vt(h?.name)))throw new TypeError(`[bvsala] ${be}: subAccount must return { id, name } as non-empty strings, or undefined`);let m=fo(a?a(l):void 0,"tags",be);for(let f of Object.keys(m))if(f.
|
|
1606
|
+
startsWith(Wl))throw new TypeError(`[bvsala] ${be}: tag "${f}" uses the reserved "${Wl}" prefix`);let g={id:d,nombre:vt(p)?p:null,subId:h?h.id:null,subNombre:h?h.name:null,tags:m};return {clave:JSON.stringify(
|
|
1607
|
+
[g.id,g.nombre,g.subId,g.subNombre,po(m)]),extra:g}}).map(l=>{let d=l.modelo,p=As(e.serviceProviderName,Bl(d),d,"ServiceProviderName"),h=As(e.invoiceIssuerName,p,d,"InvoiceIssuerName"),m=As(e.hostProviderName,
|
|
1608
|
+
p,d,"HostProviderName"),g=Zh(l.inicio,l.fin,e.billingPeriod),f=lo(l),v=l.extra,b={"bivelio/basis":l.basis,"bivelio/model":d};for(let y of Object.keys(v.tags).sort())b[y]=v.tags[y];return {BilledCost:0,
|
|
1602
1609
|
EffectiveCost:0,ListCost:0,ContractedCost:0,BillingCurrency:r,BillingAccountId:v.id,BillingAccountName:v.nombre,BillingPeriodStart:at(g.start),BillingPeriodEnd:at(g.end),ChargePeriodStart:at(l.inicio),
|
|
1603
1610
|
ChargePeriodEnd:at(l.fin),ChargeCategory:"Adjustment",ChargeClass:null,ChargeDescription:`BV-SALA savings ledger for ${d} (basis: ${l.basis}). Not a charge: cost columns are 0 by design.`,ChargeFrequency:"\
|
|
1604
1611
|
Usage-Based",InvoiceIssuerName:h,ServiceProviderName:p,HostProviderName:m,ServiceName:c,ServiceCategory:"AI and Machine Learning",ServiceSubcategory:"Generative AI",PricingQuantity:null,PricingUnit:null,
|
|
@@ -1614,4 +1621,4 @@ tokens.eliminatedOutput}})}/*! Bundled license information:
|
|
|
1614
1621
|
@noble/curves/abstract/edwards.js:
|
|
1615
1622
|
@noble/curves/ed25519.js:
|
|
1616
1623
|
(*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
1617
|
-
*/export{
|
|
1624
|
+
*/export{gc as AnthropicProvider,Me as BV_SALA_VERSION,Fr as BatchSubmitError,Yt as CATALOGO,Ko as COMPACTION_TRANSFORMS,cp as COMPACT_ROWS_INSTRUCTION,we as CalibrationStateError,Su as DEFAULT_COST_MODEL,_h as DEFAULT_MAX_STALENESS_SECONDS,bp as DEFAULT_MIN_SAVED_CHARS,hu as EMBEDDED_PUBLIC_KEY,So as ExactTokenizer,Kn as ExecutionRouter,er as FormatSelector,ko as HeuristicEstimator,da as InMemoryCacheBreakpointStore,zn as InMemoryExactCache,la as InMemorySemanticCache,Fo as InMemoryToolSetFreezer,Qe as LicenseError,gg as MODELOS_POR_CODIFICACION,$n as MODELS_BY_ENCODING,Zo as MockProvider,cc as OpenAICompatibleProvider,bo as PRECIOS_AL_DIA,rg as QUALITY_STATUSES,Ws as REFERENCE_MAX_AGE_MS,Ks as REFERENCE_MESSAGE_ALLOWANCE,Js as REFERENCE_OUTPUT_SHARE,No as ResolverRegistry,$r as RevocationPoller,Nt as RevocationSnapshot,Et as SavingsLedger,tr as SchemaRegistry,qn as Singleflight,ke as StreamAbortedError,xo as TokenizerRegistry,Zn as ToolSelector,mn as TraceCollector,ca as UMBRAL_LOCAL,xn as UsageEmitter,Yd as adaptiveK,Bd as arithmeticResolver,Do as buildExactKey,Qs as buildInflightKey,Fg as calibrateSemanticFloor,Ro as canonicalize,Ea as compactRowsSerializer,La as compactToolOutput,_a as compresionFiel,zf as computeNextDelay,_d as cosine,up as createCompactRowsSerializer,pa as createDefaultResolvers,ig as createHandoff,rb as createMockProvider,bx as createSavingsLayer,Ra as csvSerializer,wa as decodeCompactRows,Zd as dedupe,wo as defaultTokenizerRegistry,Ui as deriveSeatId,qi as deriveStatus,Vi as detectCi,aa as embebedorLocal,h0 as emptyState,ip as encodeCompactRows,qd as evalArithmetic,Fn as evaluatePolicy,ka as executeRetrievalPlan,xu as gateFromKey,Ct as heuristicEstimator,zh as instrumentSavingsLayer,jf as isKeyset,Ze as isStrictCompatible,xa as jsonCompactSerializer,Ld as keyTokensMatch,Fi as licenseKeyShape,Nr as liveGateFromKey,g0 as mergeDelta,Po as modelFamilyOf,jo as multisetEqual,sn as negationCount,K0 as noopCompressor,Lt as normalizeLicenseKey,Bn as normalizeText,rn as numericTokens,jn as precioDeLista,b0 as projectContext,F0 as providerNativeBackend,ii as quitarPrefijoDeProveedor,Qt as randomId,Nh as recordSavingsOnSpan,To as registerExactTokenizer,bg as registrarTokenizadorExacto,Xd as renderState,Ia as resolveConstraintBackend,Tu as resolveDependencies,jv as resolveLicense,Lo as sameAnswer,so as savingsSpanAttributes,Y as sha256,Jo as shouldCompress,he as stableStringify,Oh as toCsv,Yh as toFocusRows,Vh as toLangfuseGeneration,Kh as toSavingsSeries,Xn as uniformColumns,de as validateAgainstSchema,Id as vectorLocal,zi as verifyCompactSignature,jt as verifyLicenseToken,ku as verifyRevocationList,J0 as withProtectedSpans,on as words};
|