@bivelio/savings-layer 0.5.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +115 -0
- package/LICENSE +183 -163
- package/LICENSE-CLOUD.md +174 -0
- package/NOTICE +11 -0
- package/README.md +223 -122
- package/dist/adapters/ai-sdk.js +78 -78
- package/dist/adapters/anthropic-sdk.js +88 -88
- package/dist/adapters/langchain.js +58 -58
- package/dist/adapters/mastra.js +70 -70
- package/dist/gateway/bin.js +1291 -1082
- package/dist/index.d.ts +364 -191
- package/dist/index.js +1717 -1642
- package/docs/terminales/README.md +39 -33
- package/docs/terminales/aider.md +1 -1
- package/docs/terminales/claude-code.md +2 -2
- package/docs/terminales/cline.md +1 -1
- package/docs/terminales/codex.md +3 -3
- package/docs/terminales/copilot.md +1 -1
- package/docs/terminales/crush.md +1 -1
- package/docs/terminales/cursor.md +32 -0
- package/docs/terminales/deepseek.md +28 -0
- package/docs/terminales/droid.md +1 -1
- package/docs/terminales/gemini.md +38 -0
- package/docs/terminales/goose.md +2 -2
- package/docs/terminales/kilo.md +2 -2
- package/docs/terminales/no-soportados.md +16 -27
- package/docs/terminales/ollama.md +19 -0
- package/docs/terminales/opencode.md +2 -2
- package/docs/terminales/qwen-code.md +2 -2
- package/package.json +48 -20
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
import {createMiddleware}from'langchain';import {AIMessage}from'@langchain/core/messages';import {toJsonSchema}from'@langchain/core/utils/json_schema';import {createSavingsLayer,LicenseError}from'@bivelio/savings-layer';import {AsyncLocalStorage}from'async_hooks';var
|
|
2
|
-
"https:"||n.port!==""?null:
|
|
3
|
-
nothing more was sent.",
|
|
4
|
-
completada:false,...r!==void 0?{origen:r}:{}}}async function $(e,n){try{let t=await n();return e.completada=!0,t}catch(t){throw e.errorDelMarco={error:t},t}}function
|
|
5
|
-
e)===
|
|
6
|
-
function z(e,n){let t=o=>{let
|
|
7
|
-
async generate(o,
|
|
8
|
-
text",delta:i.text}),yield {type:"done",response:i};}};return Object.defineProperty(r,T,{value:()=>n.getStore()?.origen}),r}function N(){return new AsyncLocalStorage}function
|
|
9
|
-
if(Array.isArray(e))return e.map(
|
|
10
|
-
ultCostModel","exactCache","exactCacheTtlMs","resolvers","exactTokenizer","silenceWarnings","failOpen"];function
|
|
11
|
-
e.completada}var
|
|
12
|
-
let t=N(),r={};for(let
|
|
13
|
-
try{let
|
|
14
|
-
let
|
|
15
|
-
"sin-informe",
|
|
16
|
-
stringify(
|
|
1
|
+
import {createMiddleware}from'langchain';import {AIMessage}from'@langchain/core/messages';import {toJsonSchema}from'@langchain/core/utils/json_schema';import {createSavingsLayer,LicenseError}from'@bivelio/savings-layer';import {AsyncLocalStorage}from'async_hooks';var Z={"api.anthropic.com":"anthropic","api.openai.com":"openai","generativelanguage.googleapis.com":"google"};function Y(e){if(typeof e!="string")return null;try{let n=new URL(e);return n.protocol!==
|
|
2
|
+
"https:"||n.port!==""?null:Z[n.hostname.toLowerCase()]??null}catch{return null}}function M(e){return Y(e)!==null?"oficial":"no-oficial"}var T=Symbol.for("@bivelio/savings-layer:provider-origin");var U=new Set;function E(e,n,t){e===true||U.has(n)||(U.add(n),console.warn(t));}var ne="[bvsala] internal: the layer changed a request this adapter must forward unchanged; nothing was sent.",te="[bvsala] internal: the layer asked for a second model call within one framework call;\
|
|
3
|
+
nothing more was sent.",re="[bvsala] internal: the layer called the model outside a framework call; nothing was sent.";function q(e,n,t,r){return {renderizado:e,generar:n,...{},invocada:false,
|
|
4
|
+
completada:false,...r!==void 0?{origen:r}:{}}}async function $(e,n){try{let t=await n();return e.completada=!0,t}catch(t){throw e.errorDelMarco={error:t},t}}function oe(e,n){if(e===n)return true;try{return j(
|
|
5
|
+
e)===j(n)}catch{return false}}function I(e,n){let t=e??[],r=n??[];return t.length===r.length&&t.every((o,a)=>oe(o,r[a]))}function ae(e,n){return e.model===n.model&&I(e.messages,n.messages)&&I(e.tools,n.tools)}
|
|
6
|
+
function z(e,n){let t=o=>{let a=n.getStore();if(!a)throw new Error(re);if(a.invocada)throw new Error(te);if(!ae(o,a.renderizado))throw new Error(ne);return a.invocada=true,a},r={id:`bivelio-adapter:${e}`,
|
|
7
|
+
async generate(o,a){return t(o).generar(a?.signal)},async*generateStream(o,a){let s=t(o);if(s.transmitir){yield*s.transmitir(a?.signal);return}let i=await s.generar(a?.signal);i.text!==""&&(yield {type:"\
|
|
8
|
+
text",delta:i.text}),yield {type:"done",response:i};}};return Object.defineProperty(r,T,{value:()=>n.getStore()?.origen}),r}function N(){return new AsyncLocalStorage}function j(e){return JSON.stringify(O(e))}function O(e){
|
|
9
|
+
if(Array.isArray(e))return e.map(O);if(e&&typeof e=="object"){let n={};for(let t of Object.keys(e).sort())n[t]=O(e[t]);return n}return e}var ce=["licenseKey","licenseServerUrl","serviceAccountKey","licenseRefresh","licenseRevocation","licensePollIntervalSeconds","licenseFetch","metering","meteringUrl","meteringFetch","costModels","defa\
|
|
10
|
+
ultCostModel","exactCache","exactCacheTtlMs","resolvers","exactTokenizer","silenceWarnings","failOpen"];function B(e,n){return n instanceof LicenseError||e.errorDelMarco&&e.errorDelMarco.error===n?false:e.invocada&&
|
|
11
|
+
e.completada}var F="[bvsala] the model answered, but the savings layer failed while accounting for it; the answer is returned unchanged, without a savings report and without a usage record.";function J(e,n){
|
|
12
|
+
let t=N(),r={};for(let s of ce)n[s]!==void 0&&(r[s]=n[s]);let o=createSavingsLayer({...r,provider:z(e,t)}),a=(s,i)=>E(n.silenceWarnings,`${e}:${s}`,i);return {ejecutar(s,i){return t.run(i,()=>o.generate(s))},async generar(s,i){
|
|
13
|
+
try{let c=await t.run(i,()=>o.generate(s));return i.invocada?{tipo:"vivo",result:c}:{tipo:"atajo",result:c}}catch(c){if(B(i,c))return a("sin-informe",F),{tipo:"sin-informe"};throw c}},async transmitir(s,i,c){
|
|
14
|
+
let f=t.run(i,()=>o.generateStream(s,c?{signal:c}:{})).result;i.resultado=f,f.catch(()=>{});let g;try{g=await Promise.race([i.abierta.then(()=>"abierta"),f.then(()=>"resuelta")]);}catch(p){if(B(i,p))return a(
|
|
15
|
+
"sin-informe",F),{tipo:"sin-informe"};throw p}if(g==="abierta")return {tipo:"abierto"};let x=await f;return i.invocada?{tipo:"entero",result:x}:{tipo:"atajo",result:x}},informe(s){let i=JSON.parse(JSON.
|
|
16
|
+
stringify(s));if(n.onReport)try{n.onReport(i);}catch{a("onreport","[bvsala] `onReport` threw; the error was caught and the model call was not affected.");}return i},avisar:a,close(){o.close();}}}var le=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,
|
|
17
17
|
4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,
|
|
18
18
|
1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,
|
|
19
|
-
1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),
|
|
20
|
-
8,
|
|
21
|
-
[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),
|
|
22
|
-
64;
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),ue=new TextEncoder;function y(e,n){return e>>>n|e<<32-n}function Q(e){return de(ue.encode(e))}function de(e){
|
|
20
|
+
let n=e.length*8,t=(e.length+8>>6)+1,r=new Uint8Array(t*64);r.set(e),r[e.length]=128;let o=new DataView(r.buffer);o.setUint32(r.length-8,Math.floor(n/4294967296)),o.setUint32(r.length-4,n>>>0);let a=new Uint32Array(
|
|
21
|
+
[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),s=new Uint32Array(64);for(let c=0;c<r.length;c+=64){for(let l=0;l<16;l++)s[l]=o.getUint32(c+l*4);for(let l=16;l<
|
|
22
|
+
64;l++){let m=s[l-15],v=s[l-2],h=y(m,7)^y(m,18)^m>>>3,S=y(v,17)^y(v,19)^v>>>10;s[l]=s[l-16]+h+s[l-7]+S|0;}let d=a[0],f=a[1],g=a[2],x=a[3],p=a[4],w=a[5],b=a[6],R=a[7];for(let l=0;l<64;l++){let m=y(p,6)^
|
|
23
|
+
y(p,11)^y(p,25),v=p&w^~p&b,h=R+m+v+le[l]+s[l]|0,S=y(d,2)^y(d,13)^y(d,22),k=d&f^d&g^f&g,X=S+k|0;R=b,b=w,w=p,p=x+h|0,x=g,g=f,f=d,d=h+X|0;}a[0]=a[0]+d|0,a[1]=a[1]+f|0,a[2]=a[2]+g|0,a[3]=a[3]+x|0,a[4]=a[4]+
|
|
24
|
+
p|0,a[5]=a[5]+w|0,a[6]=a[6]+b|0,a[7]=a[7]+R|0;}let i="";for(let c=0;c<8;c++)i+=(a[c]>>>0).toString(16).padStart(8,"0");return i}var fe={router:false,compression:false,elision:false,serialization:false,toolDiscovery:false,modelCascade:"off",outputCodebook:false,deferrable:false,semanticCache:false,verification:false};function pe(e,n,t={}){let r=o=>e?.[o]!==
|
|
25
25
|
false&&n?.[o]!==false;return {...fe,exactCache:r("exactCache")&&t.sinReutilizar!==true,singleflight:r("singleflight")&&t.sinReutilizar!==true,deterministicResolvers:r("deterministicResolvers")&&t.sinResolvers!==
|
|
26
|
-
true}}function ge(e,n){let t=e.readOnlyTools;if(typeof t=="function")try{return t(n)===!0}catch{return false}return Array.isArray(t)?t.includes(n):false}function
|
|
26
|
+
true}}function ge(e,n){let t=e.readOnlyTools;if(typeof t=="function")try{return t(n)===!0}catch{return false}return Array.isArray(t)?t.includes(n):false}function L(e,n){let t=n.delProveedor!==true&&ge(e,n.nombre);
|
|
27
27
|
return {id:n.nombre,intents:[],risk:t?"read":"write",...n.parametros!==void 0&&n.parametros!==null&&typeof n.parametros=="object"?{parameters:n.parametros}:{},...typeof n.descripcion=="string"?{description:n.
|
|
28
28
|
descripcion}:{}}}function D(e,n,t){if(e===null)return null;switch(typeof e){case "string":case "boolean":return e;case "number":return Number.isFinite(e)?e:String(e);case "bigint":return `${e.toString()}n`;case "\
|
|
29
29
|
undefined":case "function":case "symbol":return}let r=e;if(r instanceof Uint8Array)return n.push(r),{$bytes:n.length-1};if(r instanceof ArrayBuffer)return n.push(new Uint8Array(r)),{$bytes:n.length-1};if(ArrayBuffer.
|
|
30
30
|
isView(r))return n.push(new Uint8Array(r.buffer,r.byteOffset,r.byteLength)),{$bytes:n.length-1};if(r instanceof URL)return {$url:r.href};if(r instanceof Date)return {$date:Number.isNaN(r.getTime())?"inv\
|
|
31
|
-
alid":r.toISOString()};if(t.has(r))return "$cycle";t.add(r);try{if(Array.isArray(r))return r.map(
|
|
32
|
-
|
|
31
|
+
alid":r.toISOString()};if(t.has(r))return "$cycle";t.add(r);try{if(Array.isArray(r))return r.map(a=>{let s=D(a,n,t);return s===void 0?null:s});if(r instanceof Map)return {$map:[...r.entries()].map(a=>D(
|
|
32
|
+
a,n,t))};if(r instanceof Set)return {$set:[...r.values()].map(a=>D(a,n,t))};let o={};for(let a of Object.keys(r).sort()){let s=D(r[a],n,t);s!==void 0&&(o[a]=s);}return o}finally{t.delete(r);}}async function V(e){
|
|
33
33
|
let n=globalThis.crypto?.subtle;if(n){let r=new Uint8Array(await n.digest("SHA-256",e));return Array.from(r,o=>o.toString(16).padStart(2,"0")).join("")}let t="";for(let r=0;r<e.length;r+=32768)t+=String.
|
|
34
|
-
fromCharCode(...e.subarray(r,r+32768));return
|
|
35
|
-
",")}`);return await
|
|
34
|
+
fromCharCode(...e.subarray(r,r+32768));return Q(t)}async function me(e){try{let n=[],t=JSON.stringify(D(e,n,new WeakSet))??"null",r=await Promise.all(n.map(V)),o=new TextEncoder().encode(`${t}|${r.join(
|
|
35
|
+
",")}`);return await V(o)}catch{return null}}async function W(e,n){let t=await me(n.proyeccion),r=`${n.context?.authorizationScope??"default"}|bvsala-adapter:${t??"none"}`;return {model:n.model,messages:n.
|
|
36
36
|
messages,...n.tools.length>0?{tools:n.tools}:{},...typeof n.temperature=="number"?{temperature:n.temperature}:{},...typeof n.seed=="number"?{seed:n.seed}:{},context:{...n.context??{},authorizationScope:r},
|
|
37
|
-
savings:pe(e.savings,n.savings,{...n.restricciones,...t===null?{sinReutilizar:true}:{}})}}function
|
|
38
|
-
return typeof n.type=="string"?n.type:""}function _(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(n=>
|
|
39
|
-
`):""}function
|
|
40
|
-
"string"?{id:t.id}:{},name:String(t.name??""),arguments:
|
|
41
|
-
"system")t.push({role:"system",content:_(o.content)});else if(
|
|
42
|
-
0?{toolCalls:
|
|
43
|
-
"string"?{name:o.name}:{}});}return t}function
|
|
44
|
-
ction_call"||o.startsWith("__")||(r[o]=
|
|
45
|
-
e).map(o=>({name:o.name,arguments:o.arguments})),status:e.status,additional_kwargs:r}}function
|
|
46
|
-
try{
|
|
47
|
-
description,parametros:
|
|
48
|
-
description=="string"?
|
|
49
|
-
function
|
|
37
|
+
savings:pe(e.savings,n.savings,{...n.restricciones,...t===null?{sinReutilizar:true}:{}})}}function u(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function G(e){let n=e;try{if(typeof n.getType=="function")return n.getType();if(typeof n._getType=="function")return n._getType()}catch{}
|
|
38
|
+
return typeof n.type=="string"?n.type:""}function _(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(n=>u(n)&&n.type==="text"&&typeof n.text=="string").map(n=>n.text).join(`
|
|
39
|
+
`):""}function H(e){if(typeof e=="string")return e;try{return JSON.stringify(e??{})}catch{return "{}"}}function C(e){return (Array.isArray(e.tool_calls)?e.tool_calls:[]).filter(u).map(t=>({...typeof t.id==
|
|
40
|
+
"string"?{id:t.id}:{},name:String(t.name??""),arguments:H(t.args)}))}function ve(e,n){let t=[],r=_(e?.content);r!==""&&t.push({role:"system",content:r});for(let o of n){if(!u(o))continue;let a=G(o);if(a===
|
|
41
|
+
"system")t.push({role:"system",content:_(o.content)});else if(a==="human")t.push({role:"user",content:_(o.content)});else if(a==="ai"){let s=C(o);t.push({role:"assistant",content:_(o.content),...s.length>
|
|
42
|
+
0?{toolCalls:s}:{}});}else a==="tool"&&t.push({role:"tool",content:typeof o.content=="string"?o.content:H(o.content),...typeof o.tool_call_id=="string"?{toolCallId:o.tool_call_id}:{},...typeof o.name==
|
|
43
|
+
"string"?{name:o.name}:{}});}return t}function K(e){if(!u(e))return e;let n=e.content,t=G(e),r={};for(let[o,a]of Object.entries(u(e.additional_kwargs)?e.additional_kwargs:{}))o==="tool_calls"||o==="fun\
|
|
44
|
+
ction_call"||o.startsWith("__")||(r[o]=a);return {type:t,name:e.name,content:t==="tool"?n:typeof n=="string"?"$text":Array.isArray(n)?n.map(o=>u(o)&&o.type==="text"?{...o,text:void 0,id:void 0}:o):n,tool_calls:C(
|
|
45
|
+
e).map(o=>({name:o.name,arguments:o.arguments})),status:e.status,additional_kwargs:r}}function we(e,n){let t=[],r=[];for(let o of n){if(!u(o))continue;if(typeof o.name=="string"&&"schema"in o){let s,i=true;
|
|
46
|
+
try{s=toJsonSchema(o.schema);}catch{i=false;}let c=L(e,{nombre:o.name,descripcion:typeof o.description=="string"?o.description:void 0,parametros:s});t.push(i?c:{...c,risk:"write"}),r.push({name:o.name,description:o.
|
|
47
|
+
description,parametros:s,returnDirect:o.returnDirect});continue}let a=u(o.function)?o.function:void 0;if(o.type==="function"&&a&&typeof a.name=="string"){t.push(L(e,{nombre:a.name,descripcion:typeof a.
|
|
48
|
+
description=="string"?a.description:void 0,parametros:a.parameters})),r.push(o);continue}t.push(L(e,{nombre:String(o.name??o.type??"server-tool"),delProveedor:true})),r.push(o);}return {tools:t,definiciones:r}}
|
|
49
|
+
function P(e){try{let n=e._llmType?.();return typeof n=="string"?n:""}catch{return ""}}function be(e){if(typeof e=="string")return e.replace(":","/");let n=e,t=n._defaultConfig;if(t&&typeof t=="object"&&
|
|
50
50
|
typeof t.model=="string"&&t.model!=="")return t.model.includes("/")?t.model:typeof t.modelProvider=="string"&&t.modelProvider!==""?`${t.modelProvider}/${t.model}`:t.model;let r=typeof n.model=="string"?
|
|
51
|
-
n.model:typeof n.modelName=="string"?n.modelName:"";if(r.includes("/"))return r;let o=
|
|
52
|
-
identifyingParams.call(e),r=
|
|
53
|
-
invocationParams?.({})??null}catch{return null}}function
|
|
54
|
-
void 0}function ke(e,n){let t=
|
|
55
|
-
output_token_details:{},i=
|
|
56
|
-
void 0?{cacheWriteInputTokens:
|
|
51
|
+
n.model:typeof n.modelName=="string"?n.modelName:"";if(r.includes("/"))return r;let o=P(e);return o!==""?`${o}/${r}`:r}function Se(e){if(!u(e))return;try{if(typeof e.identifyingParams=="function"){let t=e.
|
|
52
|
+
identifyingParams.call(e),r=u(t)?t.baseURL:void 0;if(typeof r=="string"&&r!=="")return M(r)}}catch{}let n=e.apiUrl;if(P(e)==="anthropic"&&typeof n=="string"&&n!=="")return M(n)}function Ae(e){try{return e.
|
|
53
|
+
invocationParams?.({})??null}catch{return null}}function Re(e){let n=e.toolChoice;return n==="required"||u(n)?true:e.responseFormat!==void 0}function A(e){return typeof e=="number"&&Number.isFinite(e)?e:
|
|
54
|
+
void 0}function ke(e,n){let t=u(e.usage_metadata)?e.usage_metadata:void 0,r=A(t?.input_tokens),o=A(t?.output_tokens),a=u(t?.input_token_details)?t.input_token_details:{},s=u(t?.output_token_details)?t.
|
|
55
|
+
output_token_details:{},i=A(a.cache_read),c=A(a.cache_creation),d=A(s.reasoning),f=r!==void 0&&(i??0)+(c??0)<=r;return {inputTokens:r??0,outputTokens:o??0,...i!==void 0?{cachedInputTokens:i}:{},...c!==
|
|
56
|
+
void 0?{cacheWriteInputTokens:c}:{},...d!==void 0?{reasoningTokens:d}:{},...n&&r!==void 0&&o!==void 0&&f?{}:{complete:false}}}function De(e){let n=u(e.response_metadata)?e.response_metadata:{},t=n.finish_reason??
|
|
57
57
|
n.stop_reason??n.finishReason;switch(t){case "end_turn":case "stop":case "STOP":return "stop";case "max_tokens":case "length":case "MAX_TOKENS":return "length";case "tool_use":case "tool_calls":return "tool_call\
|
|
58
|
-
s";default:return typeof t=="string"?t:void 0}}function _e(e,n){if(n!=="stop")return false;if(Array.isArray(e.content)){for(let r of e.content)if(!
|
|
59
|
-
length>0||Array.isArray(r.annotations)&&r.annotations.length>0)return false}let t=
|
|
60
|
-
let t=De(e),r=
|
|
61
|
-
toolCalls??[]).map((t,r)=>{let o={};try{let
|
|
62
|
-
output_tokens:0,total_tokens:0},response_metadata:n?{bivelio:{savingsReport:n}}:{}})}var
|
|
63
|
-
a provider bill; its calls are reported as unmeasured.";function
|
|
64
|
-
|
|
65
|
-
[],{tools:
|
|
66
|
-
modelo:
|
|
67
|
-
sinReutilizar:
|
|
68
|
-
tipo==="sin-informe")return
|
|
69
|
-
|
|
58
|
+
s";default:return typeof t=="string"?t:void 0}}function _e(e,n){if(n!=="stop")return false;if(Array.isArray(e.content)){for(let r of e.content)if(!u(r)||r.type!=="text"||Array.isArray(r.citations)&&r.citations.
|
|
59
|
+
length>0||Array.isArray(r.annotations)&&r.annotations.length>0)return false}let t=u(e.additional_kwargs)?e.additional_kwargs:{};return !("reasoning"in t||"reasoning_content"in t||"audio"in t)}function Le(e,n){
|
|
60
|
+
let t=De(e),r=C(e);return {text:_(e.content),...r.length>0?{toolCalls:r}:{},...t?{finishReason:t}:{},usage:ke(e,n),..._e(e,t)?{}:{replayable:false}}}function Me(e,n){return new AIMessage({content:e.text,tool_calls:(e.
|
|
61
|
+
toolCalls??[]).map((t,r)=>{let o={};try{let a=JSON.parse(t.arguments||"{}");u(a)&&(o=a);}catch{o={};}return {id:t.id??`bvsala-${e.requestId}-${r}`,name:t.name,args:o,type:"tool_call"}}),usage_metadata:{input_tokens:0,
|
|
62
|
+
output_tokens:0,total_tokens:0},response_metadata:n?{bivelio:{savingsReport:n}}:{}})}var Oe="[bvsala] this LangChain model has its own `cache` set, so a usage counter can be a cached copy rather than \
|
|
63
|
+
a provider bill; its calls are reported as unmeasured.";function He(e){let n=J("langchain",e),t=e.reportInMetadata!==false,r=createMiddleware({name:"BivelioSavings",wrapModelCall:async(o,a)=>{let s=o,i=s.model,c=P(i),
|
|
64
|
+
d=u(i)&&i.cache!==void 0&&i.cache!==null&&i.cache!==false;d&&n.avisar("cache-del-modelo",Oe);let f=!c.toLowerCase().includes("fake")&&!d,g=e.modelId?e.modelId(i):be(i),x=Array.isArray(s.messages)?s.messages:
|
|
65
|
+
[],{tools:p,definiciones:w}=we(e,Array.isArray(s.tools)?s.tools:[]),b=Re(s),R=A(i?.temperature),l=await W(e,{model:g,messages:ve(s.systemMessage,x),tools:p,temperature:R,context:e.context?.(o),proyeccion:{
|
|
66
|
+
modelo:g,parametros:Ae(i),sistema:K(s.systemMessage),mensajes:x.map(K),herramientas:w,toolChoice:s.toolChoice,responseFormat:s.responseFormat,modelSettings:s.modelSettings},restricciones:{sinResolvers:b,
|
|
67
|
+
sinReutilizar:s.responseFormat!==void 0}}),m,v=q({model:l.model,messages:l.messages,...l.tools?{tools:l.tools}:{}},async()=>(m=await $(v,async()=>a(o)),Le(m,f)),void 0,Se(i)),h=await n.generar(l,v);if(h.
|
|
68
|
+
tipo==="sin-informe")return m;let S=n.informe(h.result.report);if(h.tipo==="atajo")return Me(h.result,t?S:void 0);let k=m;return t&&(k.response_metadata={...k.response_metadata??{},bivelio:{savingsReport:S}}),
|
|
69
|
+
k}});return Object.assign(r,{close:()=>n.close()})}function Xe(e){let n=e?.response_metadata,t=u(n)?n.bivelio:void 0,r=u(t)?t.savingsReport:void 0;if(!(!u(r)||typeof r.requestId!="string"))return r}export{Xe as getSavingsReportFromMessage,He as savingsAgentMiddleware};
|
package/dist/adapters/mastra.js
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
import {createSavingsLayer,LicenseError}from'@bivelio/savings-layer';import {AsyncLocalStorage}from'async_hooks';var
|
|
2
|
-
nothing more was sent.",
|
|
3
|
-
completada:false,...{}}}function
|
|
4
|
-
model&&
|
|
5
|
-
return
|
|
6
|
-
generar(
|
|
7
|
-
return JSON.stringify(
|
|
8
|
-
ultCostModel","exactCache","exactCacheTtlMs","resolvers","exactTokenizer","silenceWarnings","failOpen"];function
|
|
9
|
-
e.completada}var
|
|
10
|
-
let n=
|
|
11
|
-
try{let l=await n.run(
|
|
12
|
-
let d=n.run(
|
|
13
|
-
"sin-informe",
|
|
14
|
-
stringify(
|
|
15
|
-
|
|
16
|
-
`)}function
|
|
17
|
-
"string"?e.value:
|
|
18
|
-
return
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
import {createSavingsLayer,LicenseError}from'@bivelio/savings-layer';import {AsyncLocalStorage}from'async_hooks';var B=new Set;function F(e,t,n){e===true||B.has(t)||(B.add(t),console.warn(n));}var J=Symbol.for("@bivelio/savings-layer:provider-origin");var ve="[bvsala] internal: the layer changed a request this adapter must forward unchanged; nothing was sent.",xe="[bvsala] internal: the layer asked for a second model call within one framework call;\
|
|
2
|
+
nothing more was sent.",he="[bvsala] internal: the layer called the model outside a framework call; nothing was sent.";function W(e,t,n,r){return {renderizado:e,generar:t,...{},invocada:false,
|
|
3
|
+
completada:false,...{}}}function be(e,t){if(e===t)return true;try{return Q(e)===Q(t)}catch{return false}}function V(e,t){let n=e??[],r=t??[];return n.length===r.length&&n.every((s,o)=>be(s,r[o]))}function we(e,t){return e.model===t.
|
|
4
|
+
model&&V(e.messages,t.messages)&&V(e.tools,t.tools)}function G(e,t){let n=s=>{let o=t.getStore();if(!o)throw new Error(he);if(o.invocada)throw new Error(xe);if(!we(s,o.renderizado))throw new Error(ve);
|
|
5
|
+
return o.invocada=true,o},r={id:`bivelio-adapter:${e}`,async generate(s,o){return n(s).generar(o?.signal)},async*generateStream(s,o){let i=n(s);if(i.transmitir){yield*i.transmitir(o?.signal);return}let a=await i.
|
|
6
|
+
generar(o?.signal);a.text!==""&&(yield {type:"text",delta:a.text}),yield {type:"done",response:a};}};return Object.defineProperty(r,J,{value:()=>t.getStore()?.origen}),r}function H(){return new AsyncLocalStorage}function Q(e){
|
|
7
|
+
return JSON.stringify(z(e))}function z(e){if(Array.isArray(e))return e.map(z);if(e&&typeof e=="object"){let t={};for(let n of Object.keys(e).sort())t[n]=z(e[n]);return t}return e}var ke=["licenseKey","licenseServerUrl","serviceAccountKey","licenseRefresh","licenseRevocation","licensePollIntervalSeconds","licenseFetch","metering","meteringUrl","meteringFetch","costModels","defa\
|
|
8
|
+
ultCostModel","exactCache","exactCacheTtlMs","resolvers","exactTokenizer","silenceWarnings","failOpen"];function K(e,t){return t instanceof LicenseError||e.errorDelMarco&&e.errorDelMarco.error===t?false:e.invocada&&
|
|
9
|
+
e.completada}var Z="[bvsala] the model answered, but the savings layer failed while accounting for it; the answer is returned unchanged, without a savings report and without a usage record.";function X(e,t){
|
|
10
|
+
let n=H(),r={};for(let i of ke)t[i]!==void 0&&(r[i]=t[i]);let s=createSavingsLayer({...r,provider:G(e,n)}),o=(i,a)=>F(t.silenceWarnings,`${e}:${i}`,a);return {ejecutar(i,a){return n.run(a,()=>s.generate(i))},async generar(i,a){
|
|
11
|
+
try{let l=await n.run(a,()=>s.generate(i));return a.invocada?{tipo:"vivo",result:l}:{tipo:"atajo",result:l}}catch(l){if(K(a,l))return o("sin-informe",Z),{tipo:"sin-informe"};throw l}},async transmitir(i,a,l){
|
|
12
|
+
let d=n.run(a,()=>s.generateStream(i,l?{signal:l}:{})).result;a.resultado=d,d.catch(()=>{});let m;try{m=await Promise.race([a.abierta.then(()=>"abierta"),d.then(()=>"resuelta")]);}catch(p){if(K(a,p))return o(
|
|
13
|
+
"sin-informe",Z),{tipo:"sin-informe"};throw p}if(m==="abierta")return {tipo:"abierto"};let u=await d;return a.invocada?{tipo:"entero",result:u}:{tipo:"atajo",result:u}},informe(i){let a=JSON.parse(JSON.
|
|
14
|
+
stringify(i));if(t.onReport)try{t.onReport(a);}catch{o("onreport","[bvsala] `onReport` threw; the error was caught and the model call was not affected.");}return a},avisar:o,close(){s.close();}}}function h(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Y(e){return typeof e=="string"?[{type:"text",text:e}]:Array.isArray(e)?e.filter(h):[]}function j(e){return e.filter(t=>t.type===
|
|
15
|
+
"text"&&typeof t.text=="string").map(t=>t.text).join(`
|
|
16
|
+
`)}function A(e){if(typeof e=="string")return e;try{return JSON.stringify(e??{})}catch{return "{}"}}function Ae(e){if(!h(e))return A(e);switch(e.type){case "text":case "error-text":return typeof e.value==
|
|
17
|
+
"string"?e.value:A(e.value);case "json":case "error-json":return A(e.value);case "execution-denied":return `execution denied${typeof e.reason=="string"?`: ${e.reason}`:""}`;case "content":return j(t(e.value));default:
|
|
18
|
+
return A(e)}function t(n){return Array.isArray(n)?n.filter(h):[]}}function ee(e){let t=[];for(let n of Array.isArray(e)?e:[]){if(!h(n))continue;let r=Y(n.content);switch(n.role){case "system":t.push({role:"\
|
|
19
|
+
system",content:typeof n.content=="string"?n.content:j(r)});break;case "user":t.push({role:"user",content:j(r)});break;case "assistant":{let s=r.filter(o=>o.type==="tool-call"&&o.providerExecuted!==true).
|
|
20
|
+
map(o=>({...typeof o.toolCallId=="string"?{id:o.toolCallId}:{},name:String(o.toolName??""),arguments:A(o.input??o.args)}));t.push({role:"assistant",content:j(r),...s.length>0?{toolCalls:s}:{}});break}case "\
|
|
21
21
|
tool":for(let s of r)s.type==="tool-result"&&t.push({role:"tool",content:Ae(s.output??s.result),...typeof s.toolCallId=="string"?{toolCallId:s.toolCallId}:{},...typeof s.toolName=="string"?{name:s.toolName}:
|
|
22
|
-
{}});break}}return t}var De=new Set(["bivelio","mastra"]);function
|
|
23
|
-
entries(e))if(!(n==="toolCallId"||n==="id")&&!(n==="text"&&e.type==="text")){if(n==="providerOptions"||n==="providerMetadata"){t[n]=
|
|
24
|
-
e:[]).map(t=>h(t)?{role:t.role,content:typeof t.content=="string"?"$text":
|
|
25
|
-
if(!h(e))return;let t={};for(let[n,r]of Object.entries(e))Ce.has(n.toLowerCase())&&r!==void 0&&(t[n.toLowerCase()]=r);return Object.keys(t).length>0?t:void 0}function
|
|
26
|
-
n.inputTokens),
|
|
27
|
-
0,...
|
|
22
|
+
{}});break}}return t}var De=new Set(["bivelio","mastra"]);function O(e){if(!h(e))return e;let t={};for(let[n,r]of Object.entries(e))De.has(n)||(t[n]=r);return t}function Pe(e){let t={};for(let[n,r]of Object.
|
|
23
|
+
entries(e))if(!(n==="toolCallId"||n==="id")&&!(n==="text"&&e.type==="text")){if(n==="providerOptions"||n==="providerMetadata"){t[n]=O(r);continue}t[n]=r;}return t}function te(e){return (Array.isArray(e)?
|
|
24
|
+
e:[]).map(t=>h(t)?{role:t.role,content:typeof t.content=="string"?"$text":Y(t.content).map(Pe),providerOptions:O(t.providerOptions)}:t)}var Ce=new Set(["anthropic-beta","openai-beta"]);function ne(e){
|
|
25
|
+
if(!h(e))return;let t={};for(let[n,r]of Object.entries(e))Ce.has(n.toLowerCase())&&r!==void 0&&(t[n.toLowerCase()]=r);return Object.keys(t).length>0?t:void 0}function k(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function re(e,t){let n=h(e)?e:{},r=h(n.inputTokens)?n.inputTokens:void 0,s=h(n.outputTokens)?n.outputTokens:void 0;if(!r||!s){let m=k(
|
|
26
|
+
n.inputTokens),u=k(n.outputTokens);return {inputTokens:m??0,outputTokens:u??0,complete:false}}let o=k(r.total),i=k(r.cacheRead),a=k(r.cacheWrite),l=k(s.total),c=k(s.reasoning);return {inputTokens:o??0,outputTokens:l??
|
|
27
|
+
0,...i!==void 0?{cachedInputTokens:i}:{},...a!==void 0?{cacheWriteInputTokens:a}:{},...c!==void 0?{reasoningTokens:c}:{},...o!==void 0&&l!==void 0&&!t?{}:{complete:false}}}function oe(e){switch(e){case void 0:return;case "tool-calls":return "tool_calls";case "content-filter":return "content_filter";default:return e}}function ae(e){let t=String(e.modelId??"");if(t.includes("/"))return t;let n=String(e.provider??"").split(".")[0]??"";return n!==""?`${n}/${t}`:t}function se(e){return typeof e.provider=="string"&&e.provider.
|
|
28
28
|
toLowerCase().startsWith("mock")}var Oe=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,
|
|
29
29
|
4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,
|
|
30
30
|
1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,
|
|
31
|
-
1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),
|
|
32
|
-
8,
|
|
33
|
-
[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),
|
|
34
|
-
64;f++){let
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
false&&t?.[s]!==false;return {...
|
|
38
|
-
true}}function
|
|
31
|
+
1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Le=new TextEncoder;function b(e,t){return e>>>t|e<<32-t}function ie(e){return Te(Le.encode(e))}function Te(e){
|
|
32
|
+
let t=e.length*8,n=(e.length+8>>6)+1,r=new Uint8Array(n*64);r.set(e),r[e.length]=128;let s=new DataView(r.buffer);s.setUint32(r.length-8,Math.floor(t/4294967296)),s.setUint32(r.length-4,t>>>0);let o=new Uint32Array(
|
|
33
|
+
[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),i=new Uint32Array(64);for(let l=0;l<r.length;l+=64){for(let f=0;f<16;f++)i[f]=s.getUint32(l+f*4);for(let f=16;f<
|
|
34
|
+
64;f++){let R=i[f-15],y=i[f-2],S=b(R,7)^b(R,18)^R>>>3,P=b(y,17)^b(y,19)^y>>>10;i[f]=i[f-16]+S+i[f-7]+P|0;}let c=o[0],d=o[1],m=o[2],u=o[3],p=o[4],w=o[5],x=o[6],D=o[7];for(let f=0;f<64;f++){let R=b(p,6)^
|
|
35
|
+
b(p,11)^b(p,25),y=p&w^~p&x,S=D+R+y+Oe[f]+i[f]|0,P=b(c,2)^b(c,13)^b(c,22),U=c&d^c&m^d&m,E=P+U|0;D=x,x=w,w=p,p=u+S|0,u=m,m=d,d=c,c=S+E|0;}o[0]=o[0]+c|0,o[1]=o[1]+d|0,o[2]=o[2]+m|0,o[3]=o[3]+u|0,o[4]=o[4]+
|
|
36
|
+
p|0,o[5]=o[5]+w|0,o[6]=o[6]+x|0,o[7]=o[7]+D|0;}let a="";for(let l=0;l<8;l++)a+=(o[l]>>>0).toString(16).padStart(8,"0");return a}var Ee={router:false,compression:false,elision:false,serialization:false,toolDiscovery:false,modelCascade:"off",outputCodebook:false,deferrable:false,semanticCache:false,verification:false};function Me(e,t,n={}){let r=s=>e?.[s]!==
|
|
37
|
+
false&&t?.[s]!==false;return {...Ee,exactCache:r("exactCache")&&n.sinReutilizar!==true,singleflight:r("singleflight")&&n.sinReutilizar!==true,deterministicResolvers:r("deterministicResolvers")&&n.sinResolvers!==
|
|
38
|
+
true}}function Ie(e,t){let n=e.readOnlyTools;if(typeof n=="function")try{return n(t)===!0}catch{return false}return Array.isArray(n)?n.includes(t):false}function ce(e,t){let n=t.delProveedor!==true&&Ie(e,t.nombre);
|
|
39
39
|
return {id:t.nombre,intents:[],risk:n?"read":"write",...t.parametros!==void 0&&t.parametros!==null&&typeof t.parametros=="object"?{parameters:t.parametros}:{},...typeof t.descripcion=="string"?{description:t.
|
|
40
40
|
descripcion}:{}}}function L(e,t,n){if(e===null)return null;switch(typeof e){case "string":case "boolean":return e;case "number":return Number.isFinite(e)?e:String(e);case "bigint":return `${e.toString()}n`;case "\
|
|
41
41
|
undefined":case "function":case "symbol":return}let r=e;if(r instanceof Uint8Array)return t.push(r),{$bytes:t.length-1};if(r instanceof ArrayBuffer)return t.push(new Uint8Array(r)),{$bytes:t.length-1};if(ArrayBuffer.
|
|
42
42
|
isView(r))return t.push(new Uint8Array(r.buffer,r.byteOffset,r.byteLength)),{$bytes:t.length-1};if(r instanceof URL)return {$url:r.href};if(r instanceof Date)return {$date:Number.isNaN(r.getTime())?"inv\
|
|
43
|
-
alid":r.toISOString()};if(n.has(r))return "$cycle";n.add(r);try{if(Array.isArray(r))return r.map(
|
|
44
|
-
|
|
43
|
+
alid":r.toISOString()};if(n.has(r))return "$cycle";n.add(r);try{if(Array.isArray(r))return r.map(o=>{let i=L(o,t,n);return i===void 0?null:i});if(r instanceof Map)return {$map:[...r.entries()].map(o=>L(
|
|
44
|
+
o,t,n))};if(r instanceof Set)return {$set:[...r.values()].map(o=>L(o,t,n))};let s={};for(let o of Object.keys(r).sort()){let i=L(r[o],t,n);i!==void 0&&(s[o]=i);}return s}finally{n.delete(r);}}async function le(e){
|
|
45
45
|
let t=globalThis.crypto?.subtle;if(t){let r=new Uint8Array(await t.digest("SHA-256",e));return Array.from(r,s=>s.toString(16).padStart(2,"0")).join("")}let n="";for(let r=0;r<e.length;r+=32768)n+=String.
|
|
46
|
-
fromCharCode(...e.subarray(r,r+32768));return
|
|
47
|
-
",")}`);return await
|
|
46
|
+
fromCharCode(...e.subarray(r,r+32768));return ie(n)}async function qe(e){try{let t=[],n=JSON.stringify(L(e,t,new WeakSet))??"null",r=await Promise.all(t.map(le)),s=new TextEncoder().encode(`${n}|${r.join(
|
|
47
|
+
",")}`);return await le(s)}catch{return null}}async function ue(e,t){let n=await qe(t.proyeccion),r=`${t.context?.authorizationScope??"default"}|bvsala-adapter:${n??"none"}`;return {model:t.model,messages:t.
|
|
48
48
|
messages,...t.tools.length>0?{tools:t.tools}:{},...typeof t.temperature=="number"?{temperature:t.temperature}:{},...typeof t.seed=="number"?{seed:t.seed}:{},context:{...t.context??{},authorizationScope:r},
|
|
49
|
-
savings:Me(e.savings,t.savings,{...t.restricciones,...n===null?{sinReutilizar:true}:{}})}}function
|
|
50
|
-
n={};return t.context&&typeof t.context=="object"&&(n.context=t.context),t.savings&&typeof t.savings=="object"&&(n.savings=t.savings),n}function g(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var
|
|
51
|
-
esquema:t.jsonSchema,legible:true};if(g(t)&&(t.type==="object"||g(t.properties)))return {esquema:t,legible:true}}return {legible:false}}function
|
|
52
|
-
map(String)):void 0;for(let[a
|
|
53
|
-
...typeof
|
|
54
|
-
|
|
55
|
-
providerOptions,modelSettings:e.modelSettings,...
|
|
56
|
-
"headers"||(t[n]=r);return t.headers=
|
|
49
|
+
savings:Me(e.savings,t.savings,{...t.restricciones,...n===null?{sinReutilizar:true}:{}})}}function de(e,t){if(!(!e&&!t))return {...e??{},...t??{}}}function pe(e){if(!e||typeof e!="object")return {};let t=e,
|
|
50
|
+
n={};return t.context&&typeof t.context=="object"&&(n.context=t.context),t.savings&&typeof t.savings=="object"&&(n.savings=t.savings),n}function g(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var fe="bivelio.paso",T="bivelio.pendiente";function ge(e){for(let t of [e.parameters,e.inputSchema]){if(g(t)&&g(t.jsonSchema))return {
|
|
51
|
+
esquema:t.jsonSchema,legible:true};if(g(t)&&(t.type==="object"||g(t.properties)))return {esquema:t,legible:true}}return {legible:false}}function je(e){let t=[],n=false,r=Array.isArray(e.activeTools)?new Set(e.activeTools.
|
|
52
|
+
map(String)):void 0;for(let[i,a]of Object.entries(g(e.tools)?e.tools:{})){if(r&&!r.has(i)||!g(a))continue;let{esquema:l,legible:c}=ge(a),d=c;try{JSON.stringify(l);}catch{d=false;}d||(n=true),t.push({nombre:i,
|
|
53
|
+
...typeof a.description=="string"?{descripcion:a.description}:{},...d?{parametros:l}:{},delProveedor:a.type==="provider-defined"||a.type==="provider"});}let s=g(e.structuredOutput)?e.structuredOutput:void 0,
|
|
54
|
+
o;if(s){let{esquema:i}=ge({inputSchema:s.schema});o=i??true;}return {paso:typeof e.stepNumber=="number"?e.stepNumber:-1,herramientas:t,esquemaIlegible:n,toolChoice:e.toolChoice,activeTools:e.activeTools,providerOptions:e.
|
|
55
|
+
providerOptions,modelSettings:e.modelSettings,...o!==void 0?{salidaEstructurada:o}:{}}}function Ue(e){if(!g(e))return;let t={};for(let[n,r]of Object.entries(e))n==="maxRetries"||n==="abortSignal"||n===
|
|
56
|
+
"headers"||(t[n]=r);return t.headers=ne(e.headers),t}function Ne(e,t){let n="",r=[],s=true,o;for(let u of e){if(!g(u))continue;let p=g(u.payload)?u.payload:{};switch(u.type){case "error":return {error:p.error??
|
|
57
57
|
new Error("[bvsala] the model call failed")};case "text-delta":typeof p.text=="string"&&(n+=p.text);break;case "tool-call":p.providerExecuted===true?s=false:r.push({...typeof p.toolCallId=="string"?{id:p.toolCallId}:
|
|
58
|
-
{},name:String(p.toolName??""),arguments:
|
|
59
|
-
(s=false);break;case "finish":
|
|
60
|
-
end":case "raw":break;default:s=false;}}let
|
|
61
|
-
text:n,...r.length>0?{toolCalls:r}:{},...l?{finishReason:l}:{},usage:
|
|
58
|
+
{},name:String(p.toolName??""),arguments:A(p.args??p.input)});break;case "reasoning-start":case "reasoning-delta":case "reasoning-end":g(p.providerMetadata)&&Object.keys(O(p.providerMetadata)).length>0&&
|
|
59
|
+
(s=false);break;case "finish":o=p;break;case "step-start":case "response-metadata":case "text-start":case "text-end":case "tool-call-input-streaming-start":case "tool-call-delta":case "tool-call-input-streaming-\
|
|
60
|
+
end":case "raw":break;default:s=false;}}let i=g(o?.stepResult)?o.stepResult:{},a=typeof i.reason=="string"?i.reason:void 0,l=oe(a),c=g(o?.output)?o.output:{},d=g(c.usage)?c.usage:void 0,m=re(d?.raw,t);return {
|
|
61
|
+
text:n,...r.length>0?{toolCalls:r}:{},...l?{finishReason:l}:{},usage:o?m:{inputTokens:0,outputTokens:0,complete:false},...s&&a==="stop"?{}:{replayable:false}}}function ze(e,t,n){let r=`bvsala-${e.requestId}`,
|
|
62
62
|
s=[{type:"step-start",payload:{request:{},warnings:[],...typeof n=="string"?{messageId:n}:{},startedAt:Date.now()}},{type:"response-metadata",payload:{type:"response-metadata",id:r,modelId:e.report.model,
|
|
63
63
|
timestamp:new Date}}];e.text!==""&&(s.push({type:"text-start",payload:{id:r}}),s.push({type:"text-delta",payload:{id:r,text:e.text}}),s.push({type:"text-end",payload:{type:"text-end",id:r}})),(e.toolCalls??
|
|
64
|
-
[]).forEach((a
|
|
65
|
-
return s.push({type:"finish",payload:{type:"finish",stepResult:{reason:
|
|
66
|
-
{},messages:{all:[],user:[],nonUser:[]}}}),s}var $e=900*1e3;function
|
|
67
|
-
|
|
68
|
-
let l=
|
|
69
|
-
-1,m=l[
|
|
70
|
-
parametros:
|
|
71
|
-
type==="tool"||
|
|
72
|
-
e.context?.({requestContext:
|
|
73
|
-
activeTools,providerOptions:
|
|
74
|
-
void 0||
|
|
75
|
-
y
|
|
76
|
-
now().toString(36)}`,
|
|
77
|
-
|
|
78
|
-
"abort",
|
|
79
|
-
|
|
80
|
-
errorDelMarco={error:
|
|
81
|
-
data-bivelio-savings-report",data:
|
|
82
|
-
and without a usage record.");}},processAPIError(
|
|
83
|
-
|
|
64
|
+
[]).forEach((i,a)=>{let l={};try{l=JSON.parse(i.arguments||"{}");}catch{l={};}s.push({type:"tool-call",payload:{toolCallId:i.id??`${r}-${a}`,toolName:i.name,args:l}});});let o=(e.toolCalls?.length??0)>0;
|
|
65
|
+
return s.push({type:"finish",payload:{type:"finish",stepResult:{reason:o?"tool-calls":"stop"},output:{usage:{inputTokens:0,outputTokens:0,totalTokens:0}},metadata:t?{providerMetadata:{bivelio:{savingsReport:t}}}:
|
|
66
|
+
{},messages:{all:[],user:[],nonUser:[]}}}),s}var $e=900*1e3;function at(e){let t=X("mastra",e),n=Math.max(1,e.providerTimeoutMs??$e),r=new Map,s=0,o=(a,l)=>{let c=r.get(a);c&&(r.delete(a),clearTimeout(
|
|
67
|
+
c.plazo),c.signal&&c.alAbortar&&c.signal.removeEventListener("abort",c.alAbortar),c.llamada.errorDelMarco={error:l},c.rechazar(l));};return {id:"bivelio-savings",name:"BiVelio savings",processInputStep(a){
|
|
68
|
+
let l=a.state;l[fe]=je(a),typeof a.messageId=="string"&&(l["bivelio.messageId"]=a.messageId);},async processLLMRequest(a){let l=a.state,c=g(a.model)?a.model:{},d=typeof a.stepNumber=="number"?a.stepNumber:
|
|
69
|
+
-1,m=l[fe],u=m&&m.paso===d?m:void 0,p=e.modelId?e.modelId({provider:String(c.provider??""),modelId:String(c.modelId??"")}):ae(c),w=(u?.herramientas??[]).map(v=>ce(e,{nombre:v.nombre,descripcion:v.descripcion,
|
|
70
|
+
parametros:v.parametros,delProveedor:v.delProveedor})),x=g(u?.modelSettings)?u.modelSettings:{},D=pe(g(u?.providerOptions)?u.providerOptions.bivelio:void 0),f=u?.toolChoice,R=f==="required"||g(f)&&(f.
|
|
71
|
+
type==="tool"||f.type==="required"),y=await ue(e,{model:p,messages:ee(a.prompt),tools:w,temperature:typeof x.temperature=="number"?x.temperature:void 0,seed:typeof x.seed=="number"?x.seed:void 0,context:de(
|
|
72
|
+
e.context?.({requestContext:a.requestContext}),D.context),savings:{...D.savings,singleflight:false},proyeccion:{modelo:p,prompt:te(a.prompt),herramientas:u?.herramientas??null,toolChoice:u?.toolChoice,activeTools:u?.
|
|
73
|
+
activeTools,providerOptions:O(u?.providerOptions),ajustes:Ue(u?.modelSettings),salidaEstructurada:u?.salidaEstructurada},restricciones:{sinResolvers:u===void 0||R||u.salidaEstructurada!==void 0,sinReutilizar:u===
|
|
74
|
+
void 0||u.esquemaIlegible}}),S,P,U=new Promise((v,N)=>{S=v,P=N;}),E,me=new Promise(v=>{E=()=>v("invocada");}),$=W({model:y.model,messages:y.messages,...y.tools?{tools:y.tools}:{}},()=>(E(),U)),M=t.ejecutar(
|
|
75
|
+
y,$);if(M.catch(()=>{}),await Promise.race([me,M.then(()=>"resuelta")])==="resuelta"){let v=await M,N=t.informe(v.report);return {response:{chunks:ze(v,N,l["bivelio.messageId"])}}}let I=`bvsala-${++s}-${Date.
|
|
76
|
+
now().toString(36)}`,_=setTimeout(()=>o(I,new Error("[bvsala] Mastra never reported this model call back; nothing was recorded.")),n);_.unref?.();let C={resolver:S,rechazar:P,llamada:$,resultado:M,plazo:_},
|
|
77
|
+
q=a.abortSignal instanceof AbortSignal?a.abortSignal:void 0;q&&(C.signal=q,C.alAbortar=()=>o(I,new Error("[bvsala] the model call was aborted; nothing was recorded.")),q.aborted?C.alAbortar():q.addEventListener(
|
|
78
|
+
"abort",C.alAbortar,{once:true})),r.set(I,C),l[T]=I;},async processLLMResponse(a){if(a.fromCache===true)return;let l=a.state,c=l[T];if(delete l[T],typeof c!="string")return;let d=r.get(c);if(!d)return;r.delete(
|
|
79
|
+
c),clearTimeout(d.plazo),d.signal&&d.alAbortar&&d.signal.removeEventListener("abort",d.alAbortar);let m=g(a.model)?a.model:{},u=Ne(Array.isArray(a.chunks)?a.chunks:[],se(m));if("error"in u){d.llamada.
|
|
80
|
+
errorDelMarco={error:u.error},d.rechazar(u.error);return}d.llamada.completada=true,d.resolver(u);try{let p=await d.resultado,w=t.informe(p.report);e.emitReportPart===!0&&await a.writer?.custom?.({type:"\
|
|
81
|
+
data-bivelio-savings-report",data:w});}catch{t.avisar("sin-informe","[bvsala] the model answered, but the savings layer failed while accounting for it; the answer is unchanged, without a savings report\
|
|
82
|
+
and without a usage record.");}},processAPIError(a){let l=a.state,c=l[T];typeof c=="string"&&(delete l[T],o(c,a.error??new Error("[bvsala] the model call failed")));},close(){for(let a of [...r.keys()])
|
|
83
|
+
o(a,new Error("[bvsala] the savings layer was closed; nothing was recorded."));t.close();}}}export{at as savingsProcessor};
|