@zuplo/runtime 6.67.33 → 6.68.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/out/esm/index.js CHANGED
@@ -92,7 +92,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
92
92
 
93
93
  `))!==-1;){let x=c.slice(0,w);if(c=c.slice(w+2),!x.includes('"usage"'))continue;let P="";for(let k of x.split(`
94
94
  `))if(k.startsWith("data: ")){P=k.slice(6);break}if(P&&P.trim()!=="[DONE]")try{let k=JSON.parse(P);if(k.usage&&k.usage.total_tokens>0){if(a){let O=k.usage;n.waitUntil((async()=>{try{let $=O.prompt_tokens||0,D=O.completion_tokens||0,G=O.total_tokens||0,j=J.getLogger(n),{modelsByProvider:W}=await nt(n),ne=pt(e.model,l,$,D,W,j);j.info("Custom OpenAI streaming usage tracked",{userId:a.sub,promptTokens:$,completionTokens:D,totalTokens:G,model:e.model,provider:l,cost:ne});let oe=a.configuration?.id;if(oe){let Se={requests:1,tokens:G,costs:ne};await ot.incrementMeters(oe,Se,n)}else n.log.warn("No configuration ID found for streaming usage metering");await Ct(n,{promptTokens:$,completionTokens:D,model:e.model,provider:l,configId:oe||"unknown",cost:ne})}catch($){n.log.error("Error processing Custom OpenAI streaming token usage",{error:$})}})())}c="";break}}catch{}}if(c.length>8192){let x=c.lastIndexOf(`
95
- `);x>4096&&(c=c.slice(x))}},flush(){}}),[m,p]=i.body.tee();return n.waitUntil(p.pipeThrough(d).pipeTo(new WritableStream({write(){},close(){},abort(){}})).catch(f=>{n.log.warn("Background usage tracking stream error",{error:f})})),new Response(m,{status:i.status,statusText:i.statusText,headers:i.headers})}async embed(e,r){let n=Ze(DI,e),o=await fetch(this.getEmbeddingsUrl(),{method:"POST",headers:{Authorization:`Bearer ${r}`,"Content-Type":"application/json"},body:JSON.stringify(n)});if(!o.ok){let a=await o.json();throw new Error(`Custom OpenAI API error: ${a.error?.message||"Unknown error"}`)}return{...await o.json(),provider:this.name}}};var Jy={model:{param:"model",required:!0,default:"gemini-2.0-flash-exp"},messages:[{param:"contents",required:!0,transform:s(t=>{let e=[],r;return t.messages.forEach(o=>{if(o.role==="system")return;let i=o.role==="assistant"?"model":"user",a=[{text:o.content}];r===i&&e.length>0?e[e.length-1].parts.push(...a):(e.push({role:i,parts:a}),r=i)}),e},"transform")},{param:"systemInstruction",transform:s(t=>{let r=t.messages.find(n=>n.role==="system");if(r&&typeof r.content=="string")return{parts:[{text:r.content}],role:"system"}},"transform")}],temperature:{param:"generationConfig.temperature",transform:s(t=>{if(t.temperature!==void 0)return Math.max(0,Math.min(2,t.temperature))},"transform")},top_p:{param:"generationConfig.topP"},n:{param:"generationConfig.candidateCount"},max_tokens:{param:"generationConfig.maxOutputTokens"},stop:{param:"generationConfig.stopSequences",transform:s(t=>{let e=t.stop;if(Array.isArray(e))return e;if(typeof e=="string")return[e]},"transform")},response_format:{param:"generationConfig.responseMimeType",transform:s(t=>{if(t.response_format?.type==="json_object")return"application/json"},"transform")}},zI={model:{param:"model",required:!0,default:"gemini-embedding-001"},input:{param:"content",required:!0,transform:s(t=>{let e=t.input;return{parts:[{text:Array.isArray(e)?e.join(" "):e}]}},"transform")}},ds=class t{static{s(this,"GoogleProvider")}name="google";async chatComplete(e,r){let n=Ze(Jy,e),o=`https://generativelanguage.googleapis.com/v1beta/models/${e.model}:generateContent?key=${r}`,i=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!i.ok){let c=await i.json();throw new Error(`Google API error: ${c.error?.message||"Unknown error"}`)}let a=await i.json();return{id:`google-${Date.now()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:e.model,choices:a.candidates?.map((c,u)=>({index:u,message:{role:"assistant",content:c.content?.parts?.map(l=>l.text).join("")||""},finish_reason:this.mapGoogleFinishReason(c.finishReason)}))||[],usage:{prompt_tokens:a.usageMetadata?.promptTokenCount||0,completion_tokens:a.usageMetadata?.candidatesTokenCount||0,total_tokens:a.usageMetadata?.totalTokenCount||0},provider:"google"}}async chatCompleteStream(e,r,n){let o=Ze(Jy,{...e,stream:!0}),i=`https://generativelanguage.googleapis.com/v1beta/models/${e.model}:streamGenerateContent?alt=sse&key=${r}`,a=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!a.ok){let P=await a.json();throw new Error(`Google API error: ${P.error?.message||"Unknown error"}`)}if(!a.body)throw new Error("No response body received from Google API");let c=n.custom.userContext,u="",l=new TextDecoder,d=new TextEncoder,m=Math.floor(Date.now()/1e3),p=`google-${Date.now()}`,f=new TransformStream({transform(P,k){k.enqueue(P);let O=l.decode(P);u+=O,!u.includes('"usageMetadata"')&&u.length>4096&&(u=u.slice(-64));let $;for(;($=u.indexOf(`\r
95
+ `);x>4096&&(c=c.slice(x))}},flush(){}}),[m,p]=i.body.tee();return n.waitUntil(p.pipeThrough(d).pipeTo(new WritableStream({write(){},close(){},abort(){}})).catch(f=>{n.log.warn("Background usage tracking stream error",{error:f})})),new Response(m,{status:i.status,statusText:i.statusText,headers:i.headers})}async embed(e,r){let n=Ze(DI,e),o=await fetch(this.getEmbeddingsUrl(),{method:"POST",headers:{Authorization:`Bearer ${r}`,"Content-Type":"application/json"},body:JSON.stringify(n)});if(!o.ok){let a=await o.json();throw new Error(`Custom OpenAI API error: ${a.error?.message||"Unknown error"}`)}return{...await o.json(),provider:this.name}}};var Jy={model:{param:"model",required:!0,default:"gemini-2.5-flash-lite"},messages:[{param:"contents",required:!0,transform:s(t=>{let e=[],r;return t.messages.forEach(o=>{if(o.role==="system")return;let i=o.role==="assistant"?"model":"user",a=[{text:o.content}];r===i&&e.length>0?e[e.length-1].parts.push(...a):(e.push({role:i,parts:a}),r=i)}),e},"transform")},{param:"systemInstruction",transform:s(t=>{let r=t.messages.find(n=>n.role==="system");if(r&&typeof r.content=="string")return{parts:[{text:r.content}],role:"system"}},"transform")}],temperature:{param:"generationConfig.temperature",transform:s(t=>{if(t.temperature!==void 0)return Math.max(0,Math.min(2,t.temperature))},"transform")},top_p:{param:"generationConfig.topP"},n:{param:"generationConfig.candidateCount"},max_tokens:{param:"generationConfig.maxOutputTokens"},stop:{param:"generationConfig.stopSequences",transform:s(t=>{let e=t.stop;if(Array.isArray(e))return e;if(typeof e=="string")return[e]},"transform")},response_format:{param:"generationConfig.responseMimeType",transform:s(t=>{if(t.response_format?.type==="json_object")return"application/json"},"transform")}},zI={model:{param:"model",required:!0,default:"gemini-embedding-001"},input:{param:"content",required:!0,transform:s(t=>{let e=t.input;return{parts:[{text:Array.isArray(e)?e.join(" "):e}]}},"transform")}},ds=class t{static{s(this,"GoogleProvider")}name="google";async chatComplete(e,r){let n=Ze(Jy,e),o=`https://generativelanguage.googleapis.com/v1beta/models/${e.model}:generateContent?key=${r}`,i=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!i.ok){let c=await i.json();throw new Error(`Google API error: ${c.error?.message||"Unknown error"}`)}let a=await i.json();return{id:`google-${Date.now()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:e.model,choices:a.candidates?.map((c,u)=>({index:u,message:{role:"assistant",content:c.content?.parts?.map(l=>l.text).join("")||""},finish_reason:this.mapGoogleFinishReason(c.finishReason)}))||[],usage:{prompt_tokens:a.usageMetadata?.promptTokenCount||0,completion_tokens:a.usageMetadata?.candidatesTokenCount||0,total_tokens:a.usageMetadata?.totalTokenCount||0},provider:"google"}}async chatCompleteStream(e,r,n){let o=Ze(Jy,{...e,stream:!0}),i=`https://generativelanguage.googleapis.com/v1beta/models/${e.model}:streamGenerateContent?alt=sse&key=${r}`,a=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!a.ok){let P=await a.json();throw new Error(`Google API error: ${P.error?.message||"Unknown error"}`)}if(!a.body)throw new Error("No response body received from Google API");let c=n.custom.userContext,u="",l=new TextDecoder,d=new TextEncoder,m=Math.floor(Date.now()/1e3),p=`google-${Date.now()}`,f=new TransformStream({transform(P,k){k.enqueue(P);let O=l.decode(P);u+=O,!u.includes('"usageMetadata"')&&u.length>4096&&(u=u.slice(-64));let $;for(;($=u.indexOf(`\r
96
96
  \r
97
97
  `))!==-1;){let D=u.slice(0,$);if(u=u.slice($+4),!D.includes('"usageMetadata"'))continue;let G="";for(let j of D.split(/\r?\n/))if(j.startsWith("data: ")){G=j.slice(6);break}else if(j.startsWith('"data: ')){G=j.slice(7,-1);break}if(G&&G.trim()!=="[DONE]")try{let j=JSON.parse(G);if(j.usageMetadata&&j.usageMetadata.totalTokenCount>0&&j.usageMetadata.candidatesTokenCount>0){if(c){let W=j.usageMetadata;n.waitUntil((async()=>{try{let ne=W.promptTokenCount||0,oe=W.candidatesTokenCount||0,Se=W.totalTokenCount||0,Ve=J.getLogger(n),{modelsByProvider:V}=await nt(n),ie=pt(e.model,"google",ne,oe,V,Ve);Ve.info("Google streaming usage tracked",{userId:c.sub,promptTokens:ne,completionTokens:oe,totalTokens:Se,model:e.model,provider:"google",cost:ie});let H=c.configuration?.id;if(H){let X={requests:1,tokens:Se,costs:ie};await ot.incrementMeters(H,X,n)}else n.log.warn("No configuration ID found for streaming usage metering");await Ct(n,{promptTokens:ne,completionTokens:oe,model:e.model,provider:"google",configId:H||"unknown",cost:ie})}catch(ne){n.log.error("Error processing Google streaming token usage",{error:ne})}})())}u="";break}}catch{}}if(u.length>8192){let D=u.lastIndexOf(`
98
98
  `);D>4096&&(u=u.slice(D))}},flush(){}}),y="",v=new TransformStream({transform(P,k){let O=l.decode(P);y+=O;let $;for(;($=y.indexOf(`\r