@zespan/sdk 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +6 -11
- package/dist/index.d.ts +6 -11
- package/dist/index.js +12 -11
- package/dist/index.mjs +12 -11
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
"use strict";var Tn=Object.create;var Le=Object.defineProperty;var On=Object.getOwnPropertyDescriptor;var An=Object.getOwnPropertyNames;var Rn=Object.getPrototypeOf,Nn=Object.prototype.hasOwnProperty;var Mn=(a,t)=>{for(var n in t)Le(a,n,{get:t[n],enumerable:!0})},
|
|
2
|
-
`)));try{let e=await this._post(n,0);e.ok?(this.queue.splice(0,t.length),this.c.debug&&console.log(`[lumiq] flushed ${t.length} event(s) \u2192 ${this.c.endpoint}`),this.consecutiveFlushFailures>0&&this.c.debug&&console.warn("[lumiq] ingest recovered",{recoveredBatchSize:t.length,queuedEvents:this.queue.length,priorFailures:this.consecutiveFlushFailures}),this.consecutiveFlushFailures=0):(this.consecutiveFlushFailures+=1,(this.c.debug||this.consecutiveFlushFailures===1||this.consecutiveFlushFailures%5===0)&&console.error("[lumiq] ingest flush failed; retaining events for retry",{retriable:e.retriable,status:e.status??null,error:e.error??null,queuedEvents:this.queue.length,failedBatchSize:t.length,consecutiveFailures:this.consecutiveFlushFailures}))}finally{this.flushing=!1}}async _post(t,n){let e=s=>new Promise(r=>setTimeout(r,s));try{let s=await fetch(this.c.endpoint,{method:"POST",body:t,headers:{"x-api-key":this.c.apiKey,"content-type":"application/x-ndjson","content-encoding":"gzip"}});if(s.ok){try{let r=await s.json();typeof r?.cv=="number"&&this.configClient&&this.configClient.checkVersion(r.cv)}catch{}return{ok:!0,retriable:!1}}return s.status===429&&n<3?(await e(Number(s.headers.get("retry-after")??5)*1e3),this._post(t,n+1)):s.status>=500&&n<3?(await e(2**n*1e3),this._post(t,n+1)):s.status===429||s.status>=500?(this.c.debug&&console.error("[lumiq] retryable ingest failure",{status:s.status,attempt:n}),{ok:!1,retriable:!0,status:s.status}):(console.error("[lumiq] non-retriable ingest failure",{status:s.status}),{ok:!1,retriable:!1,status:s.status})}catch(s){return n<3?(await e(2**n*1e3),this._post(t,n+1)):(this.c.debug&&console.error("[lumiq] ingest transport error",s),{ok:!1,retriable:!0,error:s instanceof Error?s.message:String(s)})}}};var Q=require("@opentelemetry/api"),qt=require("@opentelemetry/sdk-trace-base"),Pt=require("@opentelemetry/exporter-trace-otlp-http"),jt=require("@opentelemetry/context-async-hooks"),Ft=require("@opentelemetry/core"),$e=null,Mt=null;function Ce(a){let t=a.serviceName??"zespan-sdk",n=new Pt.OTLPTraceExporter({url:a.endpoint??"https://localhost:3001/v1/traces",headers:a.apiKey?{"x-api-key":a.apiKey}:void 0}),e=new qt.BatchSpanProcessor(n,{maxQueueSize:100,maxExportBatchSize:10,exportTimeoutMillis:3e4,scheduledDelayMillis:2e3}),{NodeTracerProvider:s}=require("@opentelemetry/sdk-trace-node"),r=new s({resource:{attributes:{"service.name":t,"service.version":"1.0.0","deployment.environment":a.environment??"production"}}});return r.addSpanProcessor(e),r.register({propagator:new Ft.W3CTraceContextPropagator}),$e=Q.trace.getTracer(t,"1.0.0"),Mt=new jt.AsyncHooksContextManager,Q.context.setGlobalContextManager(Mt.enable()),{tracer:$e,provider:r}}function he(){if(!$e)throw new Error("OTel not initialized. Call initOTel() first.");return $e}function dt(a){return he().startSpan(a.name,{kind:a.kind??Q.SpanKind.INTERNAL,attributes:a.attributes??{}})}async function ct(a,t,n){let s=he().startSpan(a,{kind:n?.kind??Q.SpanKind.INTERNAL,attributes:n?.attributes??{}});try{let r=await t(s);return s.setStatus({code:Q.SpanStatusCode.OK}),s.end(),r}catch(r){throw s.setStatus({code:Q.SpanStatusCode.ERROR,message:r.message}),s.recordException(r),s.end(),r}}var Et=require("crypto"),Ie=class{constructor(t){this.client=t}cache=new Map;cacheTTL=300*1e3;async get(t,n={}){let{version:e,label:s,cache:r=!0}=n;if(r){let m=this.getCacheKey(t,e,s),g=this.cache.get(m);if(g&&Date.now()-g.timestamp<this.cacheTTL)return g.prompt}let o=new URLSearchParams;e!==void 0&&o.set("version",e.toString()),s&&o.set("label",s);let d=`${this.client.baseURL}/v1/prompts/${encodeURIComponent(t)}?${o}`,i=await fetch(d,{headers:{"x-api-key":this.client.apiKey}});if(!i.ok)throw new Error(`Failed to fetch prompt: ${i.statusText}`);let l=await i.json(),p=(0,Et.createHash)("sha256").update(JSON.stringify(l.prompt)).digest("hex"),c={...l,promptHash:p};if(r){let m=this.getCacheKey(t,e,s);this.cache.set(m,{prompt:c,timestamp:Date.now()})}return c}async list(t){let n=new URLSearchParams;t&&n.set("name",t);let e=`${this.client.baseURL}/v1/prompts?${n}`,s=await fetch(e,{headers:{"x-api-key":this.client.apiKey}});if(!s.ok)throw new Error(`Failed to list prompts: ${s.statusText}`);return(await s.json()).prompts||[]}async create(t){let n=`${this.client.baseURL}/v1/prompts`,e=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.client.apiKey},body:JSON.stringify(t)});if(!e.ok)throw new Error(`Failed to create prompt: ${e.statusText}`);let s=await e.json();return this.invalidateCache(t.name),s}async updateLabels(t,n,e){let s=`${this.client.baseURL}/v1/prompts/${encodeURIComponent(t)}/versions/${n}/labels`,r=await fetch(s,{method:"PATCH",headers:{"Content-Type":"application/json","x-api-key":this.client.apiKey},body:JSON.stringify({labels:e})});if(!r.ok)throw new Error(`Failed to update labels: ${r.statusText}`);let o=await r.json();return this.invalidateCache(t),o}compile(t,n){if(t.type==="text"){let e=typeof t.prompt=="string"?t.prompt:t.prompt.content;return Object.entries(n).forEach(([s,r])=>{e=e.replace(new RegExp(`\\{\\{${s}\\}\\}`,"g"),r)}),e}return JSON.stringify(t.prompt)}clearCache(t){t?this.invalidateCache(t):this.cache.clear()}getCacheKey(t,n,e){return n!==void 0?`${t}:v${n}`:e?`${t}:label:${e}`:`${t}:latest`}invalidateCache(t){let n=[];for(let e of this.cache.keys())e.startsWith(`${t}:`)&&n.push(e);n.forEach(e=>this.cache.delete(e))}};var Pn="[REDACTED]",Gt=a=>a.toLowerCase().replace(/[^a-z0-9]/g,""),jn=a=>{let t=new Set;for(let n of a){let e=Gt(String(n));e&&t.add(e)}return t},Be=(a,t)=>{if(Array.isArray(a))return a.map(s=>Be(s,t));if(!a||typeof a!="object")return a;let n=a,e={};for(let[s,r]of Object.entries(n)){if(t.has(Gt(s))){e[s]=Pn;continue}e[s]=Be(r,t)}return e},Dt=(a,t)=>{if(a==null)return"";let n=jn(t);if(typeof a=="string")try{let e=JSON.parse(a);return e&&typeof e=="object"?JSON.stringify(Be(e,n)):a}catch{return a}return JSON.stringify(Be(a,n))};function Lt(){return{modelOverrides:new Map,cacheConfig:new Map,rateLimits:new Map,guardrailOverrides:new Map,samplingRate:1,promptVersions:new Map,fallbacks:new Map,retryPolicies:new Map,timeouts:new Map,concurrencyLimits:new Map,abTests:new Map}}function ve(a,t){if(a.size!==t.size)return!1;for(let[n,e]of a){let s=t.get(n);if(typeof e=="object"&&e!==null&&typeof s=="object"&&s!==null){if(JSON.stringify(e)!==JSON.stringify(s))return!1}else if(s!==e)return!1}return!0}var We=class{localVersion=0;config=Lt();listeners=new Map;fetching=!1;baseUrl;apiKey;projectId;constructor(t){this.baseUrl=t.baseUrl.replace(/\/+$/,""),this.apiKey=t.apiKey,this.projectId=t.projectId}checkVersion(t){t>this.localVersion&&!this.fetching&&(this.fetching=!0,this.fetchConfig().then(n=>{n&&(this.localVersion=t,this.applyFullConfig(n))}).catch(()=>{}).finally(()=>{this.fetching=!1}))}getModel(t,n){return this.config.modelOverrides.get(t)??n}getCacheConfig(t){return this.config.cacheConfig.get(t)??null}getSamplingRate(){return this.config.samplingRate}getRuntimeConfig(){return this.config}getLocalVersion(){return this.localVersion}getFallback(t){return this.config.fallbacks.get(t)??null}getRetryPolicy(t){return this.config.retryPolicies.get(t)??null}getTimeout(t){return this.config.timeouts.get(t)??null}getConcurrencyLimit(t){return this.config.concurrencyLimits.get(t)??null}getAbTest(t){return this.config.abTests.get(t)??null}on(t,n){let e=this.listeners.get(t)??[];e.push(n),this.listeners.set(t,e)}emit(t,n){let e=this.listeners.get(t);if(e)for(let s of e)try{s(n)}catch{}}async fetchConfig(){try{let t=`${this.baseUrl}/v1/sdk/config?projectId=${encodeURIComponent(this.projectId)}`,n=await fetch(t,{headers:{"x-api-key":this.apiKey}});return n.ok?(await n.json()).config??null:null}catch{return null}}applyFullConfig(t){let n=this.config,e=this.parseSnapshot(t);this.config=e,ve(n.modelOverrides,e.modelOverrides)||this.emit("model_override",Object.fromEntries(e.modelOverrides)),n.samplingRate!==e.samplingRate&&this.emit("sampling_config",{samplingRate:e.samplingRate}),ve(n.cacheConfig,e.cacheConfig)||this.emit("cache_config",Object.fromEntries(e.cacheConfig)),ve(n.fallbacks,e.fallbacks)||this.emit("fallback_config",Object.fromEntries(e.fallbacks)),ve(n.retryPolicies,e.retryPolicies)||this.emit("retry_config",Object.fromEntries(e.retryPolicies)),ve(n.timeouts,e.timeouts)||this.emit("timeout_config",Object.fromEntries(e.timeouts)),ve(n.abTests,e.abTests)||this.emit("ab_test_config",Object.fromEntries(e.abTests))}parseSnapshot(t){let n=Lt();for(let[e,s]of Object.entries(t))try{let r=typeof s=="string"?JSON.parse(s):s;if(e.startsWith("model_override.")){let o=e.slice(15),d=typeof r=="string"?r:r?.model??r?.value;typeof d=="string"&&n.modelOverrides.set(o,d)}else if(e.startsWith("cache.")){let o=e.slice(6);n.cacheConfig.set(o,{enabled:r?.enabled??!0,ttlSeconds:typeof r?.ttlSeconds=="number"?r.ttlSeconds:300,similarityThreshold:typeof r?.similarityThreshold=="number"?r.similarityThreshold:.85})}else if(e.startsWith("ratelimit.")){let o=e.slice(10);n.rateLimits.set(o,{maxRequests:typeof r?.maxRequests=="number"?r.maxRequests:100,windowSeconds:typeof r?.windowSeconds=="number"?r.windowSeconds:60})}else if(e.startsWith("guardrail.")&&!e.startsWith("guardrail_mode.")){let o=e.slice(10);n.guardrailOverrides.set(o,!!(r?.enabled??r))}else if(e.startsWith("sampling.")){let o=typeof r=="number"?r:r?.rate??r?.sampleRate;typeof o=="number"&&o>=0&&o<=1&&(n.samplingRate=o)}else if(e.startsWith("prompt_version.")){let o=e.slice(15),d=typeof r=="number"?r:r?.version;typeof d=="number"&&n.promptVersions.set(o,d)}else if(e.startsWith("fallback.")){let o=e.slice(9),d=typeof r?.model=="string"?r.model:null,i=Array.isArray(r?.conditions)?r.conditions.filter(l=>typeof l=="string"):[];d&&n.fallbacks.set(o,{model:d,conditions:i})}else if(e.startsWith("retry.")){let o=e.slice(6),d=typeof r?.enabled=="boolean"?r.enabled:!1,i=typeof r?.maxRetries=="number"?r.maxRetries:3,l=typeof r?.backoffMultiplier=="number"?r.backoffMultiplier:2,p=Array.isArray(r?.retryOnStatusCodes)?r.retryOnStatusCodes.filter(c=>typeof c=="number"):[];n.retryPolicies.set(o,{enabled:d,maxRetries:i,backoffMultiplier:l,retryOnStatusCodes:p})}else if(e.startsWith("timeout.")){let o=e.slice(8),d=typeof r?.timeoutMs=="number"?r.timeoutMs:typeof r=="number"?r:null;typeof d=="number"&&d>0&&n.timeouts.set(o,{timeoutMs:d})}else if(e.startsWith("concurrency.")){let o=e.slice(12),d=typeof r=="number"?r:typeof r?.limit=="number"?r.limit:null;typeof d=="number"&&d>0&&n.concurrencyLimits.set(o,d)}else if(e.startsWith("ab_test.")){let o=e.slice(8),d=typeof r?.candidateModel=="string"?r.candidateModel:null,i=typeof r?.splitPercentage=="number"?r.splitPercentage:null;d&&i!==null&&i>=0&&i<=100&&n.abTests.set(o,{candidateModel:d,splitPercentage:i})}}catch{}return n}};var Kt=require("async_hooks"),$t=require("crypto"),lt=new Kt.AsyncLocalStorage,u=()=>(0,$t.randomUUID)(),E=()=>lt.getStore();function W(a,t){return lt.run(a,t)}function Te(a,t){let n=E(),e={traceId:a.traceId??n?.traceId??u(),spanId:u(),userId:a.userId??n?.userId,sessionId:a.sessionId??n?.sessionId,tags:{...n?.tags,...a.tags},agentId:a.agentId??n?.agentId,agentName:a.agentName??n?.agentName,agentRole:a.agentRole??n?.agentRole,agentFramework:a.agentFramework??n?.agentFramework,parentAgentId:a.agentId?n?.agentId:n?.parentAgentId,conversationTurn:n?.conversationTurn,availableTools:n?.availableTools};return lt.run(e,t)}function Je(a,t){return Te(t??{},a)}var Bt=Je,Wt=Te;function Ue(){try{return P()}catch{return null}}var pt=new Set;function ae(a){pt.add(a)}function ne(a){pt.delete(a)}function Ve(){return pt.size>0}var Ze=!1,ze=!1,Jt=!1,Oe=null,Ae=null,ut=null,ms=(async()=>{try{Oe=await import("openai/resources/chat/completions")}catch{}try{Ae=await import("@anthropic-ai/sdk/resources/messages")}catch{}try{ut=await import("@google/generative-ai")}catch{}Ut()})();function Zt(a){async function t(n,e){let s=Ue();if(!s||Ve())return a.call(this,n,e);let r=performance.now(),o=E(),d=u(),i=o?.traceId??u(),l=n?.model??"unknown",p=n?.stream===!0;try{let c=await a.call(this,n,e);if(p){let m=c[Symbol.asyncIterator]?.bind(c);return m&&(c[Symbol.asyncIterator]=function(){let g=m(),f=0,b=0,w="",y;return{async next(){let{value:k,done:h}=await g.next();return h?(s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:l,operation:"chat",latency_ms:performance.now()-r,ttft_ms:y,stream:!0,input_tokens:f,output_tokens:b,finish_reason:w,status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,environment:s.environment,sdk_version:"1.0.0"}),{value:k,done:!0}):(y||(y=performance.now()-r),k?.usage&&(f=k.usage.prompt_tokens??f,b=k.usage.completion_tokens??b),k?.choices?.[0]?.finish_reason&&(w=k.choices[0].finish_reason),{value:k,done:!1})},[Symbol.asyncIterator](){return this}}}),c}return s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:c.model??l,operation:"chat",latency_ms:performance.now()-r,stream:!1,input_tokens:c.usage?.prompt_tokens??0,output_tokens:c.usage?.completion_tokens??0,cached_tokens:c.usage?.prompt_tokens_details?.cached_tokens??0,finish_reason:c.choices?.[0]?.finish_reason??"",status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,...s.storePrompts?{prompt_text:s.redactForStorage(n.messages),completion_text:s.redactForStorage(c.choices?.[0]?.message?.content??"")}:{},environment:s.environment,sdk_version:"1.0.0"}),c}catch(c){throw s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:l,operation:"chat",latency_ms:performance.now()-r,stream:p,input_tokens:0,output_tokens:0,status:"error",error_code:String(c.status??"unknown"),error_message:String(c.message).slice(0,500),span_kind:"llm",environment:s.environment,sdk_version:"1.0.0"}),c}}return t.__lumiqAutoPatched=!0,t}function Fn(){if(!Ze&&Oe)try{let a=Oe.Completions;if(!a?.prototype)return;let t=a.prototype.create;if(typeof t=="function"&&!t.__lumiqAutoPatched){a.prototype.create=Zt(t),Ze=!0;return}if(typeof t!="function"){if(a.__lumiqAutoPatched){Ze=!0;return}let n=a;class e extends n{constructor(...o){if(super(...o),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__lumiqAutoPatched){let d=this.create;this.create=Zt(d)}}}e.__lumiqAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Oe,"Completions");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Oe,"Completions",{value:e,writable:!0,enumerable:!0,configurable:!0}),Ze=!0}catch{}}}catch{}}function zt(a){async function t(n,e){let s=Ue();if(!s||Ve())return a.call(this,n,e);let r=performance.now(),o=E(),d=u(),i=o?.traceId??u(),l=n?.model??"unknown",p=n?.stream===!0;try{let c=await a.call(this,n,e);if(p){let m=c[Symbol.asyncIterator]?.bind(c);return m&&(c[Symbol.asyncIterator]=function(){let g=m(),f=0,b=0,w="",y;return{async next(){let{value:k,done:h}=await g.next();return h?(s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:l,operation:"messages",latency_ms:performance.now()-r,ttft_ms:y,stream:!0,input_tokens:f,output_tokens:b,finish_reason:w,status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,environment:s.environment,sdk_version:"1.0.0"}),{value:k,done:!0}):(y||(y=performance.now()-r),k?.type==="message_delta"&&k?.usage&&(b=k.usage.output_tokens??b),k?.type==="message_start"&&k?.message?.usage&&(f=k.message.usage.input_tokens??f),k?.type==="message_delta"&&k?.delta?.stop_reason&&(w=k.delta.stop_reason),{value:k,done:!1})},[Symbol.asyncIterator](){return this}}}),c}return s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:c.model??l,operation:"messages",latency_ms:performance.now()-r,stream:!1,input_tokens:c.usage?.input_tokens??0,output_tokens:c.usage?.output_tokens??0,finish_reason:c.stop_reason??"",status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,...s.storePrompts?{prompt_text:s.redactForStorage(n.messages),completion_text:s.redactForStorage(c.content?.filter(m=>m.type==="text").map(m=>m.text).join("")??"")}:{},environment:s.environment,sdk_version:"1.0.0"}),c}catch(c){throw s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:l,operation:"messages",latency_ms:performance.now()-r,stream:p,input_tokens:0,output_tokens:0,status:"error",error_code:String(c.status??"unknown"),error_message:String(c.message).slice(0,500),span_kind:"llm",environment:s.environment,sdk_version:"1.0.0"}),c}}return t.__lumiqAutoPatched=!0,t}function En(){if(!ze&&Ae)try{let a=Ae.Messages;if(!a?.prototype)return;let t=a.prototype.create;if(typeof t=="function"&&!t.__lumiqAutoPatched){a.prototype.create=zt(t),ze=!0;return}if(typeof t!="function"){if(a.__lumiqAutoPatched){ze=!0;return}let n=a;class e extends n{constructor(...o){if(super(...o),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__lumiqAutoPatched){let d=this.create;this.create=zt(d)}}}e.__lumiqAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Ae,"Messages");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Ae,"Messages",{value:e,writable:!0,enumerable:!0,configurable:!0}),ze=!0}catch{}}}catch{}}function Gn(){if(!Jt&&ut)try{let e=function(s,r){let o=n.call(this,s,r),d=o.generateContent?.bind(o),i=o.generateContentStream?.bind(o);return!d||d.__lumiqAutoPatched||(o.generateContent=async l=>{let p=Ue();if(!p||Ve())return d(l);let c=performance.now(),m=E(),g=u(),f=m?.traceId??u(),b=s.model??"gemini-1.5-flash";try{let w=await d(l),y=w.response?.usageMetadata;return p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:b,operation:"generateContent",latency_ms:performance.now()-c,stream:!1,input_tokens:y?.promptTokenCount??0,output_tokens:y?.candidatesTokenCount??0,finish_reason:w.response?.candidates?.[0]?.finishReason??"",status:"success",span_kind:"llm",environment:p.environment,sdk_version:"1.0.0"}),w}catch(w){throw p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:b,operation:"generateContent",latency_ms:performance.now()-c,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:String(w.message).slice(0,500),span_kind:"llm",environment:p.environment,sdk_version:"1.0.0"}),w}},o.generateContent.__lumiqAutoPatched=!0,i&&(o.generateContentStream=async l=>{let p=Ue();if(!p||Ve())return i(l);let c=performance.now(),m=E(),g=u(),f=m?.traceId??u(),b=s.model??"gemini-1.5-flash",w=await i(l),y=w.stream,k=0,h=0,C;return w.stream=(async function*(){try{for await(let _ of y){C||(C=performance.now()-c);let N=_.usageMetadata;N&&(k=N.promptTokenCount??k,h=N.candidatesTokenCount??h),yield _}p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:b,operation:"generateContent",latency_ms:performance.now()-c,ttft_ms:C,stream:!0,input_tokens:k,output_tokens:h,status:"success",span_kind:"llm",environment:p.environment,sdk_version:"1.0.0"})}catch(_){throw p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:b,operation:"generateContent",latency_ms:performance.now()-c,ttft_ms:C,stream:!0,input_tokens:k,output_tokens:h,status:"error",error_message:String(_.message).slice(0,500),span_kind:"llm",environment:p.environment,sdk_version:"1.0.0"}),_}})(),w})),o};var a=e;let t=ut?.GoogleGenerativeAI;if(!t?.prototype?.getGenerativeModel||t.prototype.getGenerativeModel.__lumiqAutoPatched)return;let n=t.prototype.getGenerativeModel;e.__lumiqAutoPatched=!0,t.prototype.getGenerativeModel=e,Jt=!0}catch{}}function Ut(){Fn(),En(),Gn()}function Re(){Ut()}var Se=class{apiKey;endpoint;baseURL;environment;storePrompts;redactKeys;sampleRate;debug;enableOTel;prompts;configClient;projectId;batch;_storePromptsDefault;_promptWarningShown=!1;constructor(t){if(!t.apiKey)throw new Error("Zespan: apiKey is required");t.apiKey.startsWith("zsp_")||console.warn("[zespan] API key should start with zsp_ \u2014 check your key"),this.apiKey=t.apiKey,this.baseURL=t.baseURL??"https://api.zespan.com",this.endpoint=t.endpoint??`${this.baseURL.replace(/\/+$/,"")}/v1/ingest`,this.environment=t.environment??"production",this._storePromptsDefault=t.storePrompts===void 0,this.storePrompts=t.storePrompts??!0,this.redactKeys=t.redactKeys??["password","secret","token","api_key"],this.sampleRate=t.sampleRate??1,this.debug=t.debug??!1,this.enableOTel=t.enableOTel??!1,this.projectId=t.projectId,this.prompts=new Ie(this),t.enableZespanPilot!==!1&&t.projectId?this.configClient=new We({baseUrl:this.baseURL,apiKey:this.apiKey,projectId:t.projectId}):this.configClient=null,this.batch=new Ke(this,{maxSize:t.batchSize??50,flushInterval:t.flushInterval??2e3},this.configClient??void 0),process.once("beforeExit",()=>this.batch.flush()),this.enableOTel&&Ce({endpoint:t.otelEndpoint,serviceName:t.otelServiceName,sampleRate:t.sampleRate,apiKey:this.apiKey,environment:this.environment}),t.autopatch!==!1&&Re()}enqueue(t){Math.random()>this.sampleRate||(this.storePrompts&&this._storePromptsDefault&&!this._promptWarningShown&&(this._promptWarningShown=!0,console.warn("[zespan] Prompt and completion text is being captured by default. PII (emails, phone numbers, SSNs, credit cards) is automatically redacted server-side. To opt out: { storePrompts: false }")),this.batch.push(t))}redactForStorage(t){return Dt(t,this.redactKeys)}resolveGuardrailsUrl(){let t=this.baseURL.replace(/\/+$/,"");return t.endsWith("/v1")?`${t}/guardrails/check`:`${t}/v1/guardrails/check`}async checkGuardrails(t){let n=await fetch(this.resolveGuardrailsUrl(),{method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey},body:JSON.stringify(t)});if(!n.ok){let s="";try{s=await n.text()}catch{s=""}throw new Error(`Guardrails check failed (${n.status})${s?`: ${s.slice(0,400)}`:""}`)}let e=await n.json();return{allowed:!!e.allowed,results:Array.isArray(e.results)?e.results:[],modifiedText:typeof e.modifiedText=="string"?e.modifiedText:null}}flush(){return this.batch.flush()}createSpan(t){return he().startSpan(t.name,{kind:t.kind??Q.SpanKind.INTERNAL,attributes:t.attributes??{}})}async withSpan(t,n,e){let r=he().startSpan(t,{kind:e?.kind??Q.SpanKind.INTERNAL,attributes:e?.attributes??{}});try{let o=await n(r);return r.setStatus({code:Q.SpanStatusCode.OK}),o}catch(o){throw r.setStatus({code:Q.SpanStatusCode.ERROR,message:o.message}),r.recordException(o),o}finally{r.end()}}},mt=null,He=a=>{mt=new Se(a)},P=()=>{if(!mt)throw new Error("Call zespan.init() first");return mt};var Vt=He,Ht=P;var U=class extends Error{phase;results;constructor(t,n){super(`Guardrail blocked ${t} content`),this.name="GuardrailBlockedError",this.phase=t,this.results=n}};function Y(a,t){if(!a)return null;if(a===!0)return{pre:!0,post:!0,failClosed:!1,operation:t};let n=typeof a.pre=="boolean"||typeof a.post=="boolean";return{pre:n?!!a.pre:!0,post:n?!!a.post:!0,failClosed:!!a.failClosed,operation:a.operation??t}}function se(a,t){return t?.modifiedText?t.modifiedText:a}async function Z(a,t,n){if(!t||n.phase==="pre"&&!t.pre||n.phase==="post"&&!t.post)return null;let e=n.text?.trim();if(!e)return null;try{let s=await a.checkGuardrails({...n,text:e.slice(0,5e4),operation:n.operation??t.operation});if(!s.allowed)throw new U(n.phase,s.results);return s}catch(s){if(s instanceof U||t.failClosed)throw s;return null}}function te(a){if(!Array.isArray(a))return{systemPrompt:void 0,conversationMessages:[]};let t=[],n=[];for(let e of a)if((typeof e?.role=="string"?e.role:e?._getType?.()??"")==="system"){let r=typeof e.content=="string"?e.content:Array.isArray(e.content)?e.content.map(o=>typeof o=="string"?o:o?.text??"").filter(Boolean).join(""):JSON.stringify(e.content??"");r&&t.push(r)}else n.push(e);return{systemPrompt:t.length?t.join(`
|
|
3
|
-
`):void 0,conversationMessages:n}}function Dn(a){let t={};try{let n=[],e=[];for(let s of a){let r=typeof s?.content=="string"?s.content:Array.isArray(s?.content)?s.content.map(o=>typeof o=="string"?o:o?.text??"").join(" "):"";s?.role==="system"&&n.push(r),e.push(r)}for(let s of n){try{let r=s.match(/You are the (\w+)Agent/i);if(r){t.agent_name=r[1];break}}catch{}try{let r=s.match(/Agent Name:\s*(\w+)/i);if(r){t.agent_name=r[1];break}}catch{}}for(let s of n)try{let r=s.match(/Role:\s*(orchestrator|specialist|planner|executor|critic)/i);if(r?.[1]){t.agent_role=r[1].toLowerCase();break}}catch{}try{a.length>10&&(t.has_memory=!0)}catch{}try{let s=e.join(" ").toLowerCase();(s.includes("think step by step")||s.includes("let's reason")||s.includes("step 1"))&&(t.has_planning=!0)}catch{}}catch{}return t}function ie(a,t){let n=Dn(a);try{!n.has_planning&&t&&/^o[13]/.test(t)&&(n.has_planning=!0)}catch{}return n}function de(a){try{let t=a.filter(s=>s?.role==="user").length,n=a[a.length-1],e=typeof n?.role=="string"?n.role:"user";return{conversation_turn:t,message_role:e}}catch{return{conversation_turn:0,message_role:"user"}}}function ce(a){try{return a.map(t=>{try{return t?.type==="function"&&t?.function?{name:String(t.function.name??""),description:t.function.description?String(t.function.description):void 0,parameters_schema:t.function.parameters??void 0,source:"function"}:t?.name?{name:String(t.name),description:t.description?String(t.description):void 0,parameters_schema:t.input_schema??t.parameters??void 0,source:"function"}:null}catch{return null}}).filter(t=>t!==null)}catch{return[]}}function Qe(a){try{let t=a?.[0]?.message?.tool_calls??[],n=[],e={};for(let s of t)try{let r=s?.function?.name;if(typeof r=="string"&&r){n.includes(r)||n.push(r);try{e[r]=typeof s.function.arguments=="string"?JSON.parse(s.function.arguments):s.function.arguments??{}}catch{e[r]=s.function?.arguments??{}}}}catch{}return{tools_used:n,tool_call_args:e}}catch{return{tools_used:[],tool_call_args:{}}}}function Xe(a){try{let t={};for(let s of a)try{let r=typeof s?.index=="number"?s.index:0;t[r]||(t[r]={name:"",argumentsStr:""}),s?.function?.name&&(t[r].name+=s.function.name),s?.function?.arguments&&(t[r].argumentsStr+=s.function.arguments)}catch{}let n=[],e={};for(let s of Object.values(t))try{let r=s.name;if(r&&!n.includes(r)){n.push(r);try{e[r]=s.argumentsStr?JSON.parse(s.argumentsStr):{}}catch{e[r]=s.argumentsStr}}}catch{}return{tools_used:n,tool_call_args:e}}catch{return{tools_used:[],tool_call_args:{}}}}var Xt=require("crypto"),le=require("@opentelemetry/api");async function we(a,t){if(!t||!t.enabled)return a();let n;for(let e=0;e<=t.maxRetries;e++)try{return await a()}catch(s){if(n=s,t.retryOnStatusCodes.length>0&&!t.retryOnStatusCodes.includes(s?.status))throw s;if(e>=t.maxRetries)break;let r=Math.min(1e3*Math.pow(t.backoffMultiplier,e),3e4);await Ln(r)}throw n}function Ln(a){return new Promise(t=>setTimeout(t,a))}var gt=class{constructor(t){this.max=t;this.counter=t}counter;queue=[];acquire(){return this.counter>0?(this.counter--,Promise.resolve()):new Promise(t=>{this.queue.push(t)})}release(){this.queue.length>0?this.queue.shift()():this.counter++}async run(t){await this.acquire();try{return await t()}finally{this.release()}}},Qt=new Map;function be(a,t){let n=Qt.get(a);return n||(n=new gt(t),Qt.set(a,n)),n}var Ye=a=>(0,Xt.createHash)("sha256").update(a).digest("hex");function Kn(a,t,n="openai"){return{"gen_ai.system":n,"gen_ai.model":t,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(a.messages),"gen_ai.request.max_tokens":a.max_tokens,"gen_ai.request.temperature":a.temperature,"gen_ai.request.top_p":a.top_p}}async function*$n(a,t){let{lumiq:n,t0:e,traceId:s,spanId:r,parent:o,params:d,otelSpan:i,model:l,agentCtx:p,autoDetected:c,conversation_turn:m,message_role:g,tool_definitions:f,provider:b,operation:w}=t,y=b??"openai",k,h=0,C=0,_=0,N="",v=l,x=[],I="",F=[],{systemPrompt:T,conversationMessages:S}=te(d.messages??[]);try{for await(let q of a){k||(k=performance.now()-e,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:y,model:v,operation:w,latency_ms:k,ttft_ms:k,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Ye(JSON.stringify(d.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(S),...T?{system_prompt:n.redactForStorage(T)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0",finish_reason:"stream_start",...p,span_kind:"llm",tool_definitions:f,conversation_turn:m,message_role:g,metadata:{auto_detected:Object.keys(c).length?c:void 0}}),i&&i.setAttribute("gen_ai.response.time_to_first_token",k));let R=q.choices?.[0]?.delta?.content;if(R&&(C++,I+=R),q.choices?.[0]?.finish_reason&&(N=q.choices[0].finish_reason),q.model&&(v=q.model),q.usage&&(h=Number(q.usage.prompt_tokens||h||0),C=Number(q.usage.completion_tokens||C||0),_=Number(q.usage.prompt_tokens_details?.cached_tokens||_||0)),q.choices?.[0]?.delta?.tool_calls)for(let $ of q.choices[0].delta.tool_calls)F.push($),$.function?.name&&!x.includes($.function.name)&&x.push($.function.name);yield q}let{tools_used:M,tool_call_args:A}=Xe(F),G=M.length>0?M:x,O=performance.now()-e;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:y,model:v,operation:w,latency_ms:O,ttft_ms:k,stream:!0,input_tokens:h,output_tokens:C,cached_tokens:_,status:"success",finish_reason:N||"stream_end",tools_used:G,tool_call_args:Object.keys(A).length?A:void 0,prompt_hash:Ye(JSON.stringify(d.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(S),completion_text:n.redactForStorage(I),...T?{system_prompt:n.redactForStorage(T)}:{}}:{},...G.length>0&&I?{decision_rationale:I}:{},...p,span_kind:"llm",tool_definitions:f,conversation_turn:m,message_role:g,metadata:{usage:{prompt_tokens:h,completion_tokens:C,cached_tokens:_},auto_detected:Object.keys(c).length?c:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setAttribute("gen_ai.usage.output_tokens",C),i.setAttribute("gen_ai.usage.total_tokens",C),i.setAttribute("gen_ai.response.finish_reason",N||"stream_end"),i.setAttribute("gen_ai.response.latency",O))}catch(M){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:y,model:v,operation:w,latency_ms:performance.now()-e,ttft_ms:k,stream:!0,input_tokens:0,output_tokens:C,cost_usd:0,status:"error",error_code:String(M.status??"unknown"),error_message:String(M.message).slice(0,500),...p,span_kind:"llm",conversation_turn:m,message_role:g,metadata:{auto_detected:Object.keys(c).length?c:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setStatus({code:le.SpanStatusCode.ERROR,message:M.message}),i.recordException(M)),M}}function Ne(a,t={}){let n=a,e=n.chat.completions.create.bind(n.chat.completions),s=Y(t.guardrails,"chat"),r=t.providerOverride??"openai",o=t.operation??"chat";return n.chat.completions.create=async(d,i)=>{let l=P(),p=performance.now(),c=E(),m=u(),g=c?.traceId??u(),f=d.model??"gpt-4",b;if(l.configClient){let S=l.configClient.getAbTest(o);if(S)Math.random()<S.splitPercentage/100?(f=S.candidateModel,b={ab_test:!0,ab_variant:"candidate"}):b={ab_test:!0,ab_variant:"control"},d={...d,model:f};else{let M=l.configClient.getModel(o,f);if(M!==f){let A=f;f=M,d={...d,model:M},l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:M,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:A,override_model:M},environment:l.environment,sdk_version:"1.0.0"})}}}let w=null,y=null,k=c?.agentId?{agent_id:c.agentId,agent_name:c.agentName,agent_role:c.agentRole,agent_framework:c.agentFramework,parent_agent_id:c.parentAgentId}:{},h=ie(d.messages??[],d.model),{conversation_turn:C,message_role:_}=de(d.messages??[]),N=d.tools?.length?ce(d.tools):void 0,v=null,x=l.enableOTel?le.trace.getTracer("zespan-sdk"):null;x&&(v=x.startSpan(`chat.completions ${f}`,{kind:le.SpanKind.CLIENT,attributes:Kn(d,f,r)}));let I;if(l.configClient){let S=l.configClient.getTimeout(o);S&&(I=AbortSignal.timeout(S.timeoutMs))}let F=l.configClient?.getRetryPolicy(o)??null,T=l.configClient?.getConcurrencyLimit(o)??null;try{w=await Z(l,s,{text:JSON.stringify(d.messages??[]),phase:"pre",traceId:g,spanId:m,model:f,operation:o,agentName:c?.agentName});let S=()=>we(()=>W({traceId:g,spanId:m,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>e(d,I?{...i,signal:I}:i)),F),M=await(T!==null?be(`${l.projectId??"default"}:${o}`,T).run(S):S());if(d.stream===!0)return $n(M,{lumiq:l,t0:p,traceId:g,spanId:m,parent:c,params:d,otelSpan:v,model:f,agentCtx:k,autoDetected:h,conversation_turn:C,message_role:_,tool_definitions:N,provider:r,operation:o});let{prompt_tokens:G,completion_tokens:O,prompt_tokens_details:q}=M.usage??{},R=q?.cached_tokens??0,$=M.model??d.model,L=M.usage?.completion_tokens_details?.reasoning_tokens,K=M.choices?.[0]?.message?.content||"";y=await Z(l,s,{text:K,phase:"post",traceId:g,spanId:m,model:$,operation:o,agentName:c?.agentName});let X=se(K,y);X!==K&&typeof M?.choices?.[0]?.message?.content=="string"&&(M.choices[0].message.content=X);let{tools_used:j,tool_call_args:V}=Qe(M.choices??[]),{systemPrompt:D,conversationMessages:J}=te(d.messages??[]);return l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:$,operation:o,latency_ms:performance.now()-p,stream:!1,input_tokens:G??0,output_tokens:O??0,cached_tokens:R,...L?{reasoning_tokens:L}:{},status:"success",finish_reason:M.choices?.[0]?.finish_reason??"",tools_used:j.length>0?j:M.choices?.[0]?.message?.tool_calls?.map(ee=>ee.function.name)??[],tool_call_args:Object.keys(V).length?V:void 0,prompt_hash:Ye(JSON.stringify(d.messages)),...l.storePrompts?{prompt_text:l.redactForStorage(J),completion_text:l.redactForStorage(X),...D?{system_prompt:l.redactForStorage(D)}:{}}:{},...j.length>0&&K?{decision_rationale:K}:{},...k,span_kind:"llm",tool_definitions:N,conversation_turn:C,message_role:_,metadata:{usage:M.usage??null,guardrails:{pre:w?{matched:w.results.length,modified:!!w.modifiedText}:null,post:y?{matched:y.results.length,modified:!!y.modifiedText}:null},auto_detected:Object.keys(h).length?h:void 0,...b??{}},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),v&&(v.setAttribute("gen_ai.usage.input_tokens",G??0),v.setAttribute("gen_ai.usage.output_tokens",O??0),v.setAttribute("gen_ai.usage.total_tokens",(G??0)+(O??0)),v.setAttribute("gen_ai.usage.cached_tokens",R),v.setAttribute("gen_ai.response.finish_reason",M.choices?.[0]?.finish_reason??""),v.setAttribute("gen_ai.response.latency",performance.now()-p),v.setStatus({code:le.SpanStatusCode.OK}),v.end()),M}catch(S){if(S?.name==="TimeoutError"||S?.code==="ABORT_ERR"||I&&I.aborted)throw l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:d.model,operation:o,latency_ms:performance.now()-p,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(S.message).slice(0,500),...k,span_kind:"llm",conversation_turn:C,message_role:_,metadata:{auto_detected:Object.keys(h).length?h:void 0},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),v&&(v.setStatus({code:le.SpanStatusCode.ERROR,message:S.message}),v.recordException(S),v.end()),S;let A=l.configClient?.getFallback(o)??null;if(A&&A.model){let q=String(S.message??"")+String(S.status??"")+String(S.code??"");if(A.conditions.length===0||A.conditions.some($=>q.toLowerCase().includes($.toLowerCase()))){let $=f,L={...d,model:A.model};l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:A.model,operation:o,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:$,fallback_model:A.model,reason:String(S.message).slice(0,200)},environment:l.environment,sdk_version:"1.0.0"});try{let K=await W({traceId:g,spanId:m,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>e(L,i)),{prompt_tokens:X,completion_tokens:j,prompt_tokens_details:V}=K.usage??{},D=V?.cached_tokens??0,J=K.model??A.model;return l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:J,operation:o,latency_ms:performance.now()-p,stream:!1,input_tokens:X??0,output_tokens:j??0,cached_tokens:D,status:"success",finish_reason:K.choices?.[0]?.finish_reason??"",prompt_hash:Ye(JSON.stringify(d.messages)),...k,span_kind:"llm",conversation_turn:C,message_role:_,metadata:{usage:K.usage??null,fallback_used:!0,original_model:$,auto_detected:Object.keys(h).length?h:void 0},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),v&&(v.setStatus({code:le.SpanStatusCode.OK}),v.end()),K}catch(K){throw v&&(v.setStatus({code:le.SpanStatusCode.ERROR,message:K.message}),v.recordException(K),v.end()),K}}}let G=S instanceof U,O=G?"error":S.status===429?"rate_limited":S.status===408?"timeout":"error";throw l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:d.model,operation:o,latency_ms:performance.now()-p,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:O,error_code:G?"guardrail_blocked":String(S.status??"unknown"),error_message:String(S.message).slice(0,500),...k,span_kind:"llm",conversation_turn:C,message_role:_,metadata:{auto_detected:Object.keys(h).length?h:void 0},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),v&&(v.setStatus({code:le.SpanStatusCode.ERROR,message:S.message}),v.recordException(S),v.end()),S}},a}var Yt=require("crypto"),ue=require("@opentelemetry/api");var et=a=>(0,Yt.createHash)("sha256").update(a).digest("hex");function Bn(a){let t=Array.isArray(a?.messages)?[...a.messages]:[],n=a?.system;if(typeof n=="string"&&n.trim().length>0)return[{role:"system",content:n},...t];if(Array.isArray(n)&&n.length>0){let e=n.map(s=>typeof s=="string"?s:typeof s?.text=="string"?s.text:"").filter(s=>s.length>0).join(`
|
|
4
|
-
`);if(e.length>0)return[{role:"system",content:e},...t]}return t}function Wn(a,t){return{"gen_ai.system":"anthropic","gen_ai.model":t,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(a.messages),"gen_ai.request.max_tokens":a.max_tokens,"gen_ai.request.temperature":a.temperature}}async function*Jn(a,t){let{lumiq:n,t0:e,traceId:s,spanId:r,parent:o,params:d,otelSpan:i,agentCtx:l,tool_definitions:p,autoDetected:c,conversation_turn:m,message_role:g,operation:f,detectionMessages:b}=t,w,y=0,k=0,h=0,C=0,_="",N=d.model,v=[],x="",{systemPrompt:I,conversationMessages:F}=te(b);try{for await(let S of a){if(!w&&S.type==="content_block_start"&&(w=performance.now()-e,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:N,operation:f,latency_ms:w,ttft_ms:w,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:et(JSON.stringify(b)),...n.storePrompts?{prompt_text:n.redactForStorage(F),...I?{system_prompt:n.redactForStorage(I)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0",finish_reason:"stream_start",...l,span_kind:"llm",tool_definitions:p,conversation_turn:m,message_role:g,metadata:{auto_detected:Object.keys(c).length?c:void 0}}),i&&i.setAttribute("gen_ai.response.time_to_first_token",w)),S.type==="content_block_delta"&&S.delta?.type==="text_delta"&&(C++,x+=S.delta.text||""),S.type==="message_delta"&&S.delta?.stop_reason&&(_=S.delta.stop_reason),S.type==="message_delta"&&S.usage&&(y=Number(S.usage.input_tokens||y||0),C=Number(S.usage.output_tokens||C||0),k=Number(S.usage.cache_read_input_tokens||k||0)),S.type==="message_start"&&S.message?.usage&&(y=Number(S.message.usage.input_tokens||y||0),C=Number(S.message.usage.output_tokens||C||0),k=Number(S.message.usage.cache_read_input_tokens||k||0)),S.type==="content_block_start"&&S.content_block?.type==="tool_use"){let M=S.content_block.name;M&&!v.includes(M)&&v.push(M)}yield S}let T=performance.now()-e;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:N,operation:f,latency_ms:T,ttft_ms:w,stream:!0,input_tokens:y,output_tokens:C,cached_tokens:k,reasoning_tokens:h,status:"success",finish_reason:_||"stream_end",tools_used:v,prompt_hash:et(JSON.stringify(b)),...n.storePrompts?{prompt_text:n.redactForStorage(F),completion_text:n.redactForStorage(x),...I?{system_prompt:n.redactForStorage(I)}:{}}:{},...l,span_kind:"llm",tool_definitions:p,conversation_turn:m,message_role:g,metadata:{usage:{input_tokens:y,output_tokens:C,cache_read_input_tokens:k,reasoning_tokens:h},auto_detected:Object.keys(c).length?c:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setAttribute("gen_ai.usage.output_tokens",C),i.setAttribute("gen_ai.response.finish_reason",_||"stream_end"))}catch(T){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:N,operation:f,latency_ms:performance.now()-e,ttft_ms:w,stream:!0,input_tokens:0,output_tokens:C,cost_usd:0,status:"error",error_code:String(T.status??T.type??"unknown"),error_message:String(T.message).slice(0,500),...l,span_kind:"llm",conversation_turn:m,message_role:g,metadata:{auto_detected:Object.keys(c).length?c:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setStatus({code:ue.SpanStatusCode.ERROR,message:T.message}),i.recordException(T)),T}}function _t(a,t={}){let n=a,e=n.messages.create.bind(n.messages),s=Y(t.guardrails,"chat"),r=t.operation??"chat";return n.messages.create=async(o,d)=>{let i=P(),l=performance.now(),p=E(),c=u(),m=p?.traceId??u(),g=o.model??"claude-3-5-sonnet-20241022",f;if(i.configClient){let O=i.configClient.getAbTest(r);if(O)Math.random()<O.splitPercentage/100?(g=O.candidateModel,f={ab_test:!0,ab_variant:"candidate"}):f={ab_test:!0,ab_variant:"control"},o={...o,model:g};else{let q=i.configClient.getModel(r,g);if(q!==g){let R=g;g=q,o={...o,model:q},i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:q,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:R,override_model:q},environment:i.environment,sdk_version:"1.0.0"})}}}let b=null,w=null,y=Bn(o),{systemPrompt:k,conversationMessages:h}=te(y),C=ie(y,g),{conversation_turn:_,message_role:N}=de(y),v=p?.agentName??C.agent_name,x=p?.agentRole??C.agent_role,I=p?.agentId||v||x?{agent_id:p?.agentId,agent_name:v,agent_role:x,agent_framework:p?.agentFramework,parent_agent_id:p?.parentAgentId}:{},F=o.tools?.length?ce(o.tools):void 0,T=null,S=i.enableOTel?ue.trace.getTracer("zespan-sdk"):null;S&&(T=S.startSpan(`messages.create ${g}`,{kind:ue.SpanKind.CLIENT,attributes:Wn(o,g)}));let M;if(i.configClient){let O=i.configClient.getTimeout(r);O&&(M=AbortSignal.timeout(O.timeoutMs))}let A=i.configClient?.getRetryPolicy(r)??null,G=i.configClient?.getConcurrencyLimit(r)??null;try{b=await Z(i,s,{text:JSON.stringify(o.messages??[]),phase:"pre",traceId:m,spanId:c,model:g,operation:r,agentName:p?.agentName});let O=()=>we(()=>W({traceId:m,spanId:c,userId:p?.userId,sessionId:p?.sessionId,tags:p?.tags,agentId:p?.agentId,agentName:v,agentRole:x,agentFramework:p?.agentFramework,parentAgentId:p?.parentAgentId,conversationTurn:_,availableTools:F},()=>e(o,M?{...d,signal:M}:d)),A),q=await(G!==null?be(`${i.projectId??"default"}:${r}`,G).run(O):O());if(o.stream===!0)return Jn(q,{lumiq:i,t0:l,traceId:m,spanId:c,parent:p,params:o,otelSpan:T,agentCtx:I,tool_definitions:F,autoDetected:C,conversation_turn:_,message_role:N,operation:r,detectionMessages:y});let $=q.usage?.input_tokens??0,L=q.usage?.output_tokens??0,K=q.usage?.cache_read_input_tokens??0,X=q.model??o.model,j=q.content?.find(B=>B.type==="text")?.text||"",V=(q.content??[]).filter(B=>B.type==="tool_use"),D=V.map(B=>B.name).filter(Boolean),J={};for(let B of V)B.name&&(J[B.name]=B.input??{});w=await Z(i,s,{text:j,phase:"post",traceId:m,spanId:c,model:X,operation:r,agentName:p?.agentName});let ee=se(j,w);if(ee!==j){let B=q.content?.find(re=>re.type==="text");B&&typeof B.text=="string"&&(B.text=ee)}return i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:X,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:$,output_tokens:L,cached_tokens:K,status:"success",finish_reason:q.stop_reason??"",tools_used:D.length>0?D:q.content?.filter(B=>B.type==="tool_use").map(B=>B.name)??[],tool_call_args:Object.keys(J).length?J:void 0,prompt_hash:et(JSON.stringify(y)),...i.storePrompts?{prompt_text:i.redactForStorage(h),completion_text:i.redactForStorage(ee),...k?{system_prompt:i.redactForStorage(k)}:{}}:{},...V.length>0&&j?{decision_rationale:j}:{},...I,span_kind:"llm",tool_definitions:F,conversation_turn:_,message_role:N,metadata:{usage:q.usage??null,guardrails:{pre:b?{matched:b.results.length,modified:!!b.modifiedText}:null,post:w?{matched:w.results.length,modified:!!w.modifiedText}:null},auto_detected:Object.keys(C).length?C:void 0,...f??{}},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:i.environment,sdk_version:"1.0.0"}),T&&(T.setAttribute("gen_ai.usage.input_tokens",$),T.setAttribute("gen_ai.usage.output_tokens",L),T.setAttribute("gen_ai.usage.cached_tokens",K),T.setAttribute("gen_ai.response.finish_reason",q.stop_reason??""),T.setAttribute("gen_ai.response.latency",performance.now()-l),T.setStatus({code:ue.SpanStatusCode.OK}),T.end()),q}catch(O){if(O?.name==="TimeoutError"||O?.code==="ABORT_ERR"||M&&M.aborted)throw i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:o.model,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(O.message).slice(0,500),...I,span_kind:"llm",conversation_turn:_,message_role:N,metadata:{auto_detected:Object.keys(C).length?C:void 0},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:i.environment,sdk_version:"1.0.0"}),T&&(T.setStatus({code:ue.SpanStatusCode.ERROR,message:O.message}),T.recordException(O),T.end()),O;let R=i.configClient?.getFallback(r)??null;if(R&&R.model){let K=String(O.message??"")+String(O.status??"")+String(O.code??"");if(R.conditions.length===0||R.conditions.some(j=>K.toLowerCase().includes(j.toLowerCase()))){let j=g,V={...o,model:R.model};i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:R.model,operation:r,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:j,fallback_model:R.model,reason:String(O.message).slice(0,200)},environment:i.environment,sdk_version:"1.0.0"});try{let D=await W({traceId:m,spanId:c,userId:p?.userId,sessionId:p?.sessionId,tags:p?.tags},()=>e(V,d)),J=D.usage?.input_tokens??0,ee=D.usage?.output_tokens??0,B=D.usage?.cache_read_input_tokens??0,re=D.model??R.model;return i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:re,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:J,output_tokens:ee,cached_tokens:B,status:"success",finish_reason:D.stop_reason??"",prompt_hash:et(JSON.stringify(y)),...I,span_kind:"llm",conversation_turn:_,message_role:N,metadata:{usage:D.usage??null,fallback_used:!0,original_model:j,auto_detected:Object.keys(C).length?C:void 0},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:i.environment,sdk_version:"1.0.0"}),T&&(T.setStatus({code:ue.SpanStatusCode.OK}),T.end()),D}catch(D){throw T&&(T.setStatus({code:ue.SpanStatusCode.ERROR,message:D.message}),T.recordException(D),T.end()),D}}}let $=O instanceof U,L=$?"error":O.status===429||O.type==="overloaded_error"?"rate_limited":O.status===408?"timeout":"error";throw i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:o.model,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:L,error_code:$?"guardrail_blocked":String(O.status??O.type??"unknown"),error_message:String(O.message).slice(0,500),...I,span_kind:"llm",conversation_turn:_,message_role:N,metadata:{auto_detected:Object.keys(C).length?C:void 0},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:i.environment,sdk_version:"1.0.0"}),T&&(T.setStatus({code:ue.SpanStatusCode.ERROR,message:O.message}),T.recordException(O),T.end()),O}},a}var tn=require("crypto"),H=require("@opentelemetry/api");var Me=a=>(0,tn.createHash)("sha256").update(a).digest("hex");function tt(a){let t=o=>{if(typeof o=="string")return o;if(Array.isArray(o))return o.map(d=>typeof d=="string"?d:typeof d?.text=="string"?d.text:"").filter(Boolean).join(`
|
|
5
|
-
`);if(o&&typeof o=="object"){if(typeof o.text=="string")return o.text;if(Array.isArray(o.parts))return o.parts.map(
|
|
6
|
-
`)}return""},n=a?.contents??a,e=[],s=a?.systemInstruction??a?.system_instruction,r=t(s);if(r.length>0&&e.push({role:"system",content:r}),typeof n=="string")return e.push({role:"user",content:n}),e;if(Array.isArray(n)){for(let o of n){if(typeof o=="string"){e.push({role:"user",content:o});continue}if(o&&typeof o=="object"){let d=typeof o.role=="string"?o.role:"user",i=t(o);i.length>0&&e.push({role:d,content:i})}}return e}if(n&&typeof n=="object"){let o=typeof n.role=="string"?n.role:"user",d=t(n);d.length>0&&e.push({role:o,content:d})}return e}function nt(a,t){return{"gen_ai.system":"google","gen_ai.model":t,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(a),"gen_ai.request.max_tokens":a.generationConfig?.maxOutputTokens,"gen_ai.request.temperature":a.generationConfig?.temperature,"gen_ai.request.top_p":a.generationConfig?.topP}}function ft(a){try{if(typeof a?.text=="function"){let n=a.text();if(typeof n=="string"&&n.length>0)return n}}catch{}return(a?.candidates?.[0]?.content?.parts??[]).map(n=>typeof n?.text=="string"?n.text:"").filter(Boolean).join("")}async function*en(a,t){let{lumiq:n,t0:e,traceId:s,spanId:r,parent:o,params:d,modelName:i,otelSpan:l,streamResult:p,agentCtx:c,tool_definitions:m,autoDetected:g,conversation_turn:f,message_role:b,operation:w}=t,y,k=0,h=0,C=0,_=0,N="",v=[],x="";try{for await(let S of a){y||(y=performance.now()-e,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:w,latency_ms:y,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Me(JSON.stringify(d)),...n.storePrompts?{prompt_text:n.redactForStorage(d)}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0",finish_reason:"stream_start",...c,span_kind:"llm",tool_definitions:m,conversation_turn:f,message_role:b,metadata:{auto_detected:Object.keys(g).length?g:void 0}}),l&&l.setAttribute("gen_ai.response.time_to_first_token",y));let M=(typeof S?.text=="function"?S.text():S?.text)||S?.candidates?.[0]?.content?.parts?.map(O=>O?.text||"").join("")||"";M&&(k++,x+=M),S.candidates?.[0]?.finishReason&&(N=S.candidates[0].finishReason);let A=Array.isArray(S?.functionCalls)?S.functionCalls:S?.functionCalls?[S.functionCalls]:[],G=(S?.candidates?.[0]?.content?.parts??[]).map(O=>O?.functionCall).filter(Boolean);for(let O of[...A,...G])O?.name&&!v.includes(O.name)&&v.push(O.name);yield S}let I=await p?.response;I?.usageMetadata&&(h=Number(I.usageMetadata.promptTokenCount||h||0),k=Number(I.usageMetadata.candidatesTokenCount||k||0),C=Number(I.usageMetadata.cachedContentTokenCount||C||0),_=Number(I.usageMetadata.thoughtsTokenCount||_||0));let F=ft(I);F&&(x=F);let T=performance.now()-e;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:w,latency_ms:T,ttft_ms:y,stream:!0,input_tokens:h,output_tokens:k,cached_tokens:C,reasoning_tokens:_,status:"success",finish_reason:N||"stream_end",tools_used:v,prompt_hash:Me(JSON.stringify(d)),...n.storePrompts?{prompt_text:n.redactForStorage(d),completion_text:n.redactForStorage(x)}:{},...c,span_kind:"llm",tool_definitions:m,conversation_turn:f,message_role:b,metadata:{usage:I?.usageMetadata??{promptTokenCount:h,candidatesTokenCount:k,cachedContentTokenCount:C,thoughtsTokenCount:_},auto_detected:Object.keys(g).length?g:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"}),l&&(l.setAttribute("gen_ai.completion",x),l.setAttribute("gen_ai.usage.input_tokens",h),l.setAttribute("gen_ai.usage.output_tokens",k),l.setAttribute("gen_ai.usage.total_tokens",h+k),l.setAttribute("gen_ai.usage.cached_tokens",C),l.setAttribute("gen_ai.usage.reasoning_tokens",_),l.setAttribute("gen_ai.response.finish_reason",N||"stream_end"),l.setStatus({code:H.SpanStatusCode.OK}),l.end())}catch(I){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:w,latency_ms:performance.now()-e,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:k,cost_usd:0,status:"error",error_code:String(I.status??"unknown"),error_message:String(I.message).slice(0,500),...c,span_kind:"llm",conversation_turn:f,message_role:b,metadata:{auto_detected:Object.keys(g).length?g:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"}),l&&(l.setStatus({code:H.SpanStatusCode.ERROR,message:I.message}),l.recordException(I),l.end()),I}}function ht(a,t={}){let n=a,e=n.getGenerativeModel.bind(n),s=Y(t.guardrails,"chat"),r=t.operation??"chat";return n.getGenerativeModel=(o,d)=>{let i=o.model,l=P(),p=!1,c=i,m;if(l.configClient){let y=l.configClient.getAbTest(r);if(y)Math.random()<y.splitPercentage/100?(c=i,i=y.candidateModel,o={...o,model:i},p=!0,m={ab_test:!0,ab_variant:"candidate"}):m={ab_test:!0,ab_variant:"control"};else{let k=l.configClient.getModel(r,i);k!==i&&(c=i,i=k,o={...o,model:k},p=!0)}}let g=e(o,d),f=g.generateContent.bind(g);g.generateContent=async(y,k)=>{let h=P(),C=performance.now(),_=E(),N=u(),v=_?.traceId??u(),x=null,I=null,F=tt(y),T=ie(F,i),{conversation_turn:S,message_role:M}=de(F),A=_?.agentName??T.agent_name,G=_?.agentRole??T.agent_role,O=_?.agentId||A||G?{agent_id:_?.agentId,agent_name:A,agent_role:G,agent_framework:_?.agentFramework,parent_agent_id:_?.parentAgentId}:{},q=y?.tools?.length?ce(y.tools):void 0,R=null,$=h.enableOTel?H.trace.getTracer("zespan-sdk"):null;$&&(R=$.startSpan(`generateContent ${i}`,{kind:H.SpanKind.CLIENT,attributes:nt(y,i)})),p&&h.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:N,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:c,override_model:i},environment:h.environment,sdk_version:"1.0.0"});try{x=await Z(h,s,{text:JSON.stringify(y??""),phase:"pre",traceId:v,spanId:N,model:i,operation:r,agentName:_?.agentName});let L;if(h.configClient){let z=h.configClient.getTimeout(r);z&&(L=AbortSignal.timeout(z.timeoutMs))}let K=h.configClient?.getRetryPolicy(r)??null,X=h.configClient?.getConcurrencyLimit(r)??null,j=()=>we(()=>W({traceId:v,spanId:N,userId:_?.userId,sessionId:_?.sessionId,tags:_?.tags,agentId:_?.agentId,agentName:A,agentRole:G,agentFramework:_?.agentFramework,parentAgentId:_?.parentAgentId,conversationTurn:S,availableTools:q},()=>f(y,L?{...k,signal:L}:k)),K),V=await(X!==null?be(`${h.projectId??"default"}:${r}`,X).run(j):j()),D=V.response,J=D.usageMetadata?.promptTokenCount??0,ee=D.usageMetadata?.candidatesTokenCount??0,B=D.usageMetadata?.cachedContentTokenCount??0,re=D.usageMetadata?.thoughtsTokenCount??0,fe=ft(D),ye=(D.candidates?.[0]?.content?.parts??[]).filter(z=>z?.functionCall),oe=ye.map(z=>z.functionCall.name).filter(Boolean),pe=(D.candidates?.[0]?.content?.parts??[]).filter(z=>z?.text&&!z?.functionCall).map(z=>z.text).join(""),me={};for(let z of ye)z.functionCall?.name&&(me[z.functionCall.name]=z.functionCall.args??{});I=await Z(h,s,{text:fe,phase:"post",traceId:v,spanId:N,model:i,operation:r,agentName:_?.agentName});let ke=se(fe,I);return h.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:N,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-C,stream:!1,input_tokens:J,output_tokens:ee,cached_tokens:B,reasoning_tokens:re,status:"success",finish_reason:D.candidates?.[0]?.finishReason??"",tools_used:oe,tool_call_args:Object.keys(me).length?me:void 0,prompt_hash:Me(JSON.stringify(y)),...h.storePrompts?{prompt_text:h.redactForStorage(y),completion_text:h.redactForStorage(ke)}:{},...oe.length>0&&pe?{decision_rationale:pe}:{},...O,span_kind:"llm",tool_definitions:q,conversation_turn:S,message_role:M,metadata:{usage:D.usageMetadata??null,guardrails:{pre:x?{matched:x.results.length,modified:!!x.modifiedText}:null,post:I?{matched:I.results.length,modified:!!I.modifiedText}:null},auto_detected:Object.keys(T).length?T:void 0,...m??{}},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:h.environment,sdk_version:"1.0.0"}),R&&(R.setAttribute("gen_ai.completion",ke),R.setAttribute("gen_ai.usage.input_tokens",J),R.setAttribute("gen_ai.usage.output_tokens",ee),R.setAttribute("gen_ai.usage.total_tokens",J+ee),R.setAttribute("gen_ai.usage.cached_tokens",B),R.setAttribute("gen_ai.usage.reasoning_tokens",re),R.setAttribute("gen_ai.response.finish_reason",D.candidates?.[0]?.finishReason??""),R.setAttribute("gen_ai.response.latency",performance.now()-C),R.setStatus({code:H.SpanStatusCode.OK}),R.end()),V}catch(L){let K=L.__signal;if(L?.name==="TimeoutError"||L?.code==="ABORT_ERR")throw h.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:N,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-C,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(L.message).slice(0,500),...O,span_kind:"llm",conversation_turn:S,message_role:M,metadata:{auto_detected:Object.keys(T).length?T:void 0},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:h.environment,sdk_version:"1.0.0"}),R&&(R.setStatus({code:H.SpanStatusCode.ERROR,message:L.message}),R.recordException(L),R.end()),L;let j=h.configClient?.getFallback(r)??null;if(j&&j.model){let J=String(L.message??"")+String(L.status??"")+String(L.code??"");if(j.conditions.length===0||j.conditions.some(B=>J.toLowerCase().includes(B.toLowerCase()))){let B=i,re={...o,model:j.model},fe=e(re,d),ye=fe.generateContent.bind(fe);h.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:N,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:j.model,operation:r,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:B,fallback_model:j.model,reason:String(L.message).slice(0,200)},environment:h.environment,sdk_version:"1.0.0"});try{let oe=await W({traceId:v,spanId:N,userId:_?.userId,sessionId:_?.sessionId,tags:_?.tags},()=>ye(y,k)),pe=oe.response,me=pe.usageMetadata?.promptTokenCount??0,ke=pe.usageMetadata?.candidatesTokenCount??0,z=pe.usageMetadata?.cachedContentTokenCount??0;return h.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:N,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:j.model,operation:r,latency_ms:performance.now()-C,stream:!1,input_tokens:me,output_tokens:ke,cached_tokens:z,status:"success",finish_reason:pe.candidates?.[0]?.finishReason??"",prompt_hash:Me(JSON.stringify(y)),...O,span_kind:"llm",conversation_turn:S,message_role:M,metadata:{usage:pe.usageMetadata??null,fallback_used:!0,original_model:B,auto_detected:Object.keys(T).length?T:void 0},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:h.environment,sdk_version:"1.0.0"}),R&&(R.setStatus({code:H.SpanStatusCode.OK}),R.end()),oe}catch(oe){throw R&&(R.setStatus({code:H.SpanStatusCode.ERROR,message:oe.message}),R.recordException(oe),R.end()),oe}}}let V=L instanceof U,D=V?"error":L.status===429?"rate_limited":L.status===408?"timeout":"error";throw h.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:N,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-C,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:D,error_code:V?"guardrail_blocked":String(L.status??"unknown"),error_message:String(L.message).slice(0,500),...O,span_kind:"llm",conversation_turn:S,message_role:M,metadata:{auto_detected:Object.keys(T).length?T:void 0},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:h.environment,sdk_version:"1.0.0"}),R&&(R.setStatus({code:H.SpanStatusCode.ERROR,message:L.message}),R.recordException(L),R.end()),L}};let b=g.generateContentStream.bind(g);g.generateContentStream=async(y,k)=>{let h=P(),C=performance.now(),_=E(),N=u(),v=_?.traceId??u(),x=tt(y),I=ie(x,i),{conversation_turn:F,message_role:T}=de(x),S=_?.agentName??I.agent_name,M=_?.agentRole??I.agent_role,A=_?.agentId||S||M?{agent_id:_?.agentId,agent_name:S,agent_role:M,agent_framework:_?.agentFramework,parent_agent_id:_?.parentAgentId}:{},G=y?.tools?.length?ce(y.tools):void 0,O=null,q=h.enableOTel?H.trace.getTracer("zespan-sdk"):null;q&&(O=q.startSpan(`generateContentStream ${i}`,{kind:H.SpanKind.CLIENT,attributes:nt(y,i)}));try{let R=await W({traceId:v,spanId:N,userId:_?.userId,sessionId:_?.sessionId,tags:_?.tags,agentId:_?.agentId,agentName:S,agentRole:M,agentFramework:_?.agentFramework,parentAgentId:_?.parentAgentId,conversationTurn:F,availableTools:G},()=>b(y,k));return O&&O.setAttribute("gen_ai.request.stream",!0),R.stream=en(R.stream,{lumiq:h,t0:C,traceId:v,spanId:N,parent:_,params:y,modelName:i,otelSpan:O,streamResult:R,agentCtx:A,tool_definitions:G,autoDetected:I,conversation_turn:F,message_role:T,operation:r}),R}catch(R){let $=R instanceof U,L=$?"error":R.status===429?"rate_limited":R.status===408?"timeout":"error";throw h.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:N,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-C,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:L,error_code:$?"guardrail_blocked":String(R.status??"unknown"),error_message:String(R.message).slice(0,500),...A,span_kind:"llm",conversation_turn:F,message_role:T,metadata:{auto_detected:Object.keys(I).length?I:void 0},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:h.environment,sdk_version:"1.0.0"}),O&&(O.setStatus({code:H.SpanStatusCode.ERROR,message:R.message}),O.recordException(R),O.end()),R}};let w=g.startChat?.bind(g);return w&&(g.startChat=y=>{let k=w(y),h=k.sendMessage?.bind(k),C=k.sendMessageStream?.bind(k);return h&&(k.sendMessage=async(_,N)=>{let v=P(),x=performance.now(),I=E(),F=u(),T=I?.traceId??u(),S={...y||{},message:_},M=null,A=null,G=tt(S),O=ie(G,i),{conversation_turn:q,message_role:R}=de(G),$=I?.agentName??O.agent_name,L=I?.agentRole??O.agent_role,K=I?.agentId||$||L?{agent_id:I?.agentId,agent_name:$,agent_role:L,agent_framework:I?.agentFramework,parent_agent_id:I?.parentAgentId}:{},X=y?.tools?.length?ce(y.tools):void 0,j=null,V=v.enableOTel?H.trace.getTracer("zespan-sdk"):null;V&&(j=V.startSpan(`sendMessage ${i}`,{kind:H.SpanKind.CLIENT,attributes:nt(S,i)}));try{M=await Z(v,s,{text:JSON.stringify(S),phase:"pre",traceId:T,spanId:F,model:i,operation:r,agentName:I?.agentName});let D=await W({traceId:T,spanId:F,userId:I?.userId,sessionId:I?.sessionId,tags:I?.tags,agentId:I?.agentId,agentName:$,agentRole:L,agentFramework:I?.agentFramework,parentAgentId:I?.parentAgentId,conversationTurn:q,availableTools:X},()=>h(_,N)),J=D.response,ee=J.usageMetadata?.promptTokenCount??0,B=J.usageMetadata?.candidatesTokenCount??0,re=J.usageMetadata?.cachedContentTokenCount??0,fe=J.usageMetadata?.thoughtsTokenCount??0,ye=ft(J),oe=(J.candidates?.[0]?.content?.parts??[]).filter(z=>z?.functionCall),pe=oe.map(z=>z.functionCall.name).filter(Boolean),me={};for(let z of oe)z.functionCall?.name&&(me[z.functionCall.name]=z.functionCall.args??{});A=await Z(v,s,{text:ye,phase:"post",traceId:T,spanId:F,model:i,operation:r,agentName:I?.agentName});let ke=se(ye,A);return v.enqueue({event_id:u(),project_id:"",trace_id:T,span_id:F,parent_span_id:I?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-x,stream:!1,input_tokens:ee,output_tokens:B,cached_tokens:re,reasoning_tokens:fe,status:"success",finish_reason:J.candidates?.[0]?.finishReason??"",tools_used:pe,tool_call_args:Object.keys(me).length?me:void 0,prompt_hash:Me(JSON.stringify(S)),...v.storePrompts?{prompt_text:v.redactForStorage(S),completion_text:v.redactForStorage(ke)}:{},...K,span_kind:"llm",tool_definitions:X,conversation_turn:q,message_role:R,metadata:{usage:J.usageMetadata??null,guardrails:{pre:M?{matched:M.results.length,modified:!!M.modifiedText}:null,post:A?{matched:A.results.length,modified:!!A.modifiedText}:null},auto_detected:Object.keys(O).length?O:void 0},user_id:I?.userId,session_id:I?.sessionId,tags:I?.tags,environment:v.environment,sdk_version:"1.0.0"}),j&&(j.setAttribute("gen_ai.completion",ke),j.setAttribute("gen_ai.usage.input_tokens",ee),j.setAttribute("gen_ai.usage.output_tokens",B),j.setAttribute("gen_ai.usage.total_tokens",ee+B),j.setAttribute("gen_ai.usage.cached_tokens",re),j.setAttribute("gen_ai.usage.reasoning_tokens",fe),j.setAttribute("gen_ai.response.finish_reason",J.candidates?.[0]?.finishReason??""),j.setAttribute("gen_ai.response.latency",performance.now()-x),j.setStatus({code:H.SpanStatusCode.OK}),j.end()),D}catch(D){let J=D instanceof U,ee=J?"error":D.status===429?"rate_limited":D.status===408?"timeout":"error";throw v.enqueue({event_id:u(),project_id:"",trace_id:T,span_id:F,parent_span_id:I?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-x,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:ee,error_code:J?"guardrail_blocked":String(D.status??"unknown"),error_message:String(D.message).slice(0,500),...K,span_kind:"llm",conversation_turn:q,message_role:R,metadata:{auto_detected:Object.keys(O).length?O:void 0},user_id:I?.userId,session_id:I?.sessionId,tags:I?.tags,environment:v.environment,sdk_version:"1.0.0"}),j&&(j.setStatus({code:H.SpanStatusCode.ERROR,message:D.message}),j.recordException(D),j.end()),D}}),C&&(k.sendMessageStream=async(_,N)=>{let v=P(),x=performance.now(),I=E(),F=u(),T=I?.traceId??u(),S={...y||{},message:_},M=tt(S),A=ie(M,i),{conversation_turn:G,message_role:O}=de(M),q=I?.agentName??A.agent_name,R=I?.agentRole??A.agent_role,$=I?.agentId||q||R?{agent_id:I?.agentId,agent_name:q,agent_role:R,agent_framework:I?.agentFramework,parent_agent_id:I?.parentAgentId}:{},L=y?.tools?.length?ce(y.tools):void 0,K=null,X=v.enableOTel?H.trace.getTracer("zespan-sdk"):null;X&&(K=X.startSpan(`sendMessageStream ${i}`,{kind:H.SpanKind.CLIENT,attributes:nt(S,i)}));try{let j=await W({traceId:T,spanId:F,userId:I?.userId,sessionId:I?.sessionId,tags:I?.tags,agentId:I?.agentId,agentName:q,agentRole:R,agentFramework:I?.agentFramework,parentAgentId:I?.parentAgentId,conversationTurn:G,availableTools:L},()=>C(_,N));return K&&K.setAttribute("gen_ai.request.stream",!0),j.stream=en(j.stream,{lumiq:v,t0:x,traceId:T,spanId:F,parent:I,params:S,modelName:i,otelSpan:K,streamResult:j,agentCtx:$,tool_definitions:L,autoDetected:A,conversation_turn:G,message_role:O,operation:r}),j}catch(j){let V=j instanceof U,D=V?"error":j.status===429?"rate_limited":j.status===408?"timeout":"error";throw v.enqueue({event_id:u(),project_id:"",trace_id:T,span_id:F,parent_span_id:I?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-x,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:D,error_code:V?"guardrail_blocked":String(j.status??"unknown"),error_message:String(j.message).slice(0,500),...$,span_kind:"llm",conversation_turn:G,message_role:O,metadata:{auto_detected:Object.keys(A).length?A:void 0},user_id:I?.userId,session_id:I?.sessionId,tags:I?.tags,environment:v.environment,sdk_version:"1.0.0"}),K&&(K.setStatus({code:H.SpanStatusCode.ERROR,message:j.message}),K.recordException(j),K.end()),j}}),k}),g},a}var nn=require("crypto"),ge=require("@opentelemetry/api"),yt=a=>(0,nn.createHash)("sha256").update(a).digest("hex");function Zn(a,t,n,e){let s=Number(a?.usage?.cost);if(Number.isFinite(s))return{cost:s,source:"usage.cost"};let r=a?.headers?.get?.("x-ratelimit-cost"),o=Number.parseFloat(String(r??""));return Number.isFinite(o)?{cost:o,source:"x-ratelimit-cost"}:{cost:0,source:"computed"}}function zn(a,t){return{"gen_ai.system":"openrouter","gen_ai.model":t,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(a.messages),"gen_ai.request.max_tokens":a.max_tokens,"gen_ai.request.temperature":a.temperature,"gen_ai.request.top_p":a.top_p}}async function*Un(a,t){let{lumiq:n,t0:e,traceId:s,spanId:r,parent:o,params:d,otelSpan:i,agentCtx:l,autoDetected:p,conversation_turn:c,message_role:m,tool_definitions:g}=t,f,b=0,w=0,y=0,k=0,h="",C=d.model,_=[],N="",v=[],{systemPrompt:x,conversationMessages:I}=te(d.messages??[]);try{for await(let A of a){if(f||(f=performance.now()-e,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:C,operation:"chat",latency_ms:f,ttft_ms:f,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:yt(JSON.stringify(d.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(I),...x?{system_prompt:n.redactForStorage(x)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0",finish_reason:"stream_start",...l,span_kind:"llm",tool_definitions:g,conversation_turn:c,message_role:m,metadata:{auto_detected:Object.keys(p).length?p:void 0}}),i&&i.setAttribute("gen_ai.response.time_to_first_token",f)),A.choices?.[0]?.delta?.content&&(b++,N+=A.choices[0].delta.content),A.choices?.[0]?.finish_reason&&(h=A.choices[0].finish_reason),A.model&&(C=A.model),A.usage){w=Number(A.usage.prompt_tokens||w||0),b=Number(A.usage.completion_tokens||b||0),y=Number(A.usage.prompt_tokens_details?.cached_tokens||y||0);let G=A.usage.completion_tokens_details||{};k=Number(G.reasoning_tokens||k||0)}if(A.choices?.[0]?.delta?.tool_calls)for(let G of A.choices[0].delta.tool_calls)v.push(G),G.function?.name&&!_.includes(G.function.name)&&_.push(G.function.name);yield A}let{tools_used:F,tool_call_args:T}=Xe(v),S=F.length>0?F:_,M=performance.now()-e;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:C,operation:"chat",latency_ms:M,ttft_ms:f,stream:!0,input_tokens:w,output_tokens:b,cached_tokens:y,reasoning_tokens:k,status:"success",finish_reason:h||"stream_end",tools_used:S,tool_call_args:Object.keys(T).length?T:void 0,prompt_hash:yt(JSON.stringify(d.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(I),completion_text:n.redactForStorage(N),...x?{system_prompt:n.redactForStorage(x)}:{}}:{},...l,span_kind:"llm",tool_definitions:g,conversation_turn:c,message_role:m,metadata:{usage:{prompt_tokens:w,completion_tokens:b,cached_tokens:y,reasoning_tokens:k},auto_detected:Object.keys(p).length?p:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setAttribute("gen_ai.completion",N),i.setAttribute("gen_ai.usage.input_tokens",w),i.setAttribute("gen_ai.usage.output_tokens",b),i.setAttribute("gen_ai.usage.total_tokens",w+b),i.setAttribute("gen_ai.usage.reasoning_tokens",k),i.setAttribute("gen_ai.response.finish_reason",h||"stream_end"),i.setStatus({code:ge.SpanStatusCode.OK}),i.end())}catch(F){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:C,operation:"chat",latency_ms:performance.now()-e,ttft_ms:f,stream:!0,input_tokens:0,output_tokens:b,cost_usd:0,status:"error",error_code:String(F.status??"unknown"),error_message:String(F.message).slice(0,500),...l,span_kind:"llm",conversation_turn:c,message_role:m,metadata:{auto_detected:Object.keys(p).length?p:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setStatus({code:ge.SpanStatusCode.ERROR,message:F.message}),i.recordException(F),i.end()),F}}function kt(a,t={}){let n=a.chat.completions.create,e=Y(t.guardrails,"chat");return a.chat.completions.create=async(s,r)=>{let o=P(),d=performance.now(),i=E(),l=u(),p=i?.traceId??u(),c=s.model??"openrouter\u6A21\u578B",m=null,g=null;if(o.configClient){let _=o.configClient.getModel("chat",c);if(_!==c){let N=c;c=_,s={...s,model:_},o.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:_,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:N,override_model:_},environment:o.environment,sdk_version:"1.0.0"})}}let f=i?.agentId?{agent_id:i.agentId,agent_name:i.agentName,agent_role:i.agentRole,agent_framework:i.agentFramework,parent_agent_id:i.parentAgentId}:{},b=ie(s.messages??[],s.model),{conversation_turn:w,message_role:y}=de(s.messages??[]),k=s.tools?.length?ce(s.tools):void 0,h=null,C=o.enableOTel?ge.trace.getTracer("zespan-sdk"):null;C&&(h=C.startSpan(`chat.completions ${c}`,{kind:ge.SpanKind.CLIENT,attributes:zn(s,c)}));try{m=await Z(o,e,{text:JSON.stringify(s.messages??[]),phase:"pre",traceId:p,spanId:l,model:c,operation:"chat"});let _=await W({traceId:p,spanId:l,userId:i?.userId,sessionId:i?.sessionId,tags:i?.tags},()=>n.call(a.chat.completions,s,r));if(s.stream===!0)return h&&h.setAttribute("gen_ai.request.stream",!0),Un(_,{lumiq:o,t0:d,traceId:p,spanId:l,parent:i,params:s,otelSpan:h,agentCtx:f,autoDetected:b,conversation_turn:w,message_role:y,tool_definitions:k});let{prompt_tokens:v,completion_tokens:x,completion_tokens_details:I}=_.usage??{},F=I?.reasoning_tokens??0,T=_.model??s.model,{cost:S,source:M}=Zn(_,T,v??0,x??0);_.pricing||(_.pricing={cost_usd:S,source:M});let A=_.choices?.[0]?.message?.content||"";g=await Z(o,e,{text:A,phase:"post",traceId:p,spanId:l,model:T,operation:"chat"});let G=se(A,g);G!==A&&typeof _?.choices?.[0]?.message?.content=="string"&&(_.choices[0].message.content=G);let{tools_used:O,tool_call_args:q}=Qe(_.choices??[]);return o.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:T,operation:"chat",latency_ms:performance.now()-d,stream:!1,input_tokens:v??0,output_tokens:x??0,cached_tokens:0,cost_usd:S,status:"success",finish_reason:_.choices?.[0]?.finish_reason??"",tools_used:O.length>0?O:_.choices?.[0]?.message?.tool_calls?.map(R=>R.function.name)??[],tool_call_args:Object.keys(q).length?q:void 0,prompt_hash:yt(JSON.stringify(s.messages)),...o.storePrompts?(()=>{let{systemPrompt:R,conversationMessages:$}=te(s.messages??[]);return{prompt_text:o.redactForStorage($),completion_text:o.redactForStorage(G),...R?{system_prompt:o.redactForStorage(R)}:{}}})():{},...O.length>0&&A?{decision_rationale:A}:{},...f,span_kind:"llm",tool_definitions:k,conversation_turn:w,message_role:y,metadata:{usage:_.usage??null,pricing:_.pricing??{cost_usd:S,source:M},guardrails:{pre:m?{matched:m.results.length,modified:!!m.modifiedText}:null,post:g?{matched:g.results.length,modified:!!g.modifiedText}:null},auto_detected:Object.keys(b).length?b:void 0},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:o.environment,sdk_version:"1.0.0"}),h&&(h.setAttribute("gen_ai.usage.input_tokens",v??0),h.setAttribute("gen_ai.usage.output_tokens",x??0),h.setAttribute("gen_ai.usage.total_tokens",(v??0)+(x??0)),h.setAttribute("gen_ai.usage.reasoning_tokens",F),h.setAttribute("gen_ai.completion",_.choices?.[0]?.message?.content||""),h.setAttribute("gen_ai.response.finish_reason",_.choices?.[0]?.finish_reason??""),h.setAttribute("gen_ai.response.latency",performance.now()-d),h.setStatus({code:ge.SpanStatusCode.OK}),h.end()),_}catch(_){let N=_ instanceof U,v=N?"error":_.status===429?"rate_limited":_.status===408?"timeout":"error";throw o.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:s.model,operation:"chat",latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:v,error_code:N?"guardrail_blocked":String(_.status??_.code??"unknown"),error_message:String(_.message).slice(0,500),...f,span_kind:"llm",conversation_turn:w,message_role:y,metadata:{auto_detected:Object.keys(b).length?b:void 0},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:o.environment,sdk_version:"1.0.0"}),h&&(h.setStatus({code:ge.SpanStatusCode.ERROR,message:_.message}),h.recordException(_),h.end()),_}},a}async function*sn(a,t){let{lumiq:n,t0:e,traceId:s,spanId:r,parent:o,model:d,operation:i}=t,l=0,p=0,c=0,m="",g;try{for await(let f of a)g||(g=performance.now()-e),"metadata"in f&&f.metadata?.usage&&(l=f.metadata.usage.inputTokens??l,p=f.metadata.usage.outputTokens??p,c=f.metadata.usage.cacheReadInputTokens??c),"messageStop"in f&&f.messageStop?.stopReason&&(m=f.messageStop.stopReason),yield f;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:d,operation:i,latency_ms:performance.now()-e,ttft_ms:g,stream:!0,input_tokens:l,output_tokens:p,cached_tokens:c,status:"success",finish_reason:m,user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"})}catch(f){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:d,operation:i,latency_ms:performance.now()-e,ttft_ms:g,stream:!0,input_tokens:0,output_tokens:0,status:"error",error_code:String(f.$metadata?.httpStatusCode??f.name??"unknown"),error_message:String(f.message).slice(0,500),user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:"1.0.0"}),f}}function on(a,t={}){let n=a,e=t.operation??"chat",s=Y(t.guardrails,e),r=n.converse?.bind(n);r&&(n.converse=async(i,...l)=>{let p=P(),c=performance.now(),m=E(),g=u(),f=m?.traceId??u(),b=i.modelId??"amazon.nova-lite-v1:0";p.configClient&&(b=p.configClient.getModel(e,b),b!==i.modelId&&(i={...i,modelId:b}));let w=JSON.stringify(i.messages??[]);await Z(p,s,{text:w,phase:"pre",traceId:f,spanId:g,model:b,operation:e,agentName:m?.agentName});try{let y=await W({traceId:f,spanId:g,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags},()=>r(i,...l)),k=y.usage??{},h=y.output?.message?.content??[],C=h.filter(x=>x.text).map(x=>x.text).join(""),_=h.filter(x=>x.toolUse),N=_.map(x=>x.toolUse?.name).filter(Boolean),v={};for(let x of _)x.toolUse?.name&&(v[x.toolUse.name]=x.toolUse.input??{});return p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:b,operation:e,latency_ms:performance.now()-c,stream:!1,input_tokens:Number(k.inputTokens??0),output_tokens:Number(k.outputTokens??0),cached_tokens:Number(k.cacheReadInputTokens??0),status:"success",finish_reason:y.stopReason??"",span_kind:"llm",tools_used:N.length?N:void 0,tool_call_args:Object.keys(v).length?v:void 0,...p.storePrompts?{prompt_text:p.redactForStorage(i.messages??[]),completion_text:p.redactForStorage(C),...(()=>{let x=(i.system??[]).map(I=>I.text??"").filter(Boolean);return x.length?{system_prompt:p.redactForStorage(x.join(`
|
|
7
|
-
`))}:{}})()}:{},...N.length>0&&C?{decision_rationale:C}:{},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:p.environment,sdk_version:"1.0.0"}),y}catch(y){throw p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:b,operation:e,latency_ms:performance.now()-c,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:String(y.$metadata?.httpStatusCode??y.name??"unknown"),error_message:String(y.message).slice(0,500),user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:p.environment,sdk_version:"1.0.0"}),y}});let o=n.converseStream?.bind(n);o&&(n.converseStream=async(i,...l)=>{let p=P(),c=performance.now(),m=E(),g=u(),f=m?.traceId??u(),b=i.modelId??"amazon.nova-lite-v1:0",w=await W({traceId:f,spanId:g,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags},()=>o(i,...l));return{...w,stream:sn(w.stream,{lumiq:p,t0:c,traceId:f,spanId:g,parent:m,model:b,operation:e})}});let d=n.send?.bind(n);return d&&(n.send=async(i,...l)=>{if(!(i?.constructor?.name==="ConverseStreamCommand"||i?.$name==="ConverseStream"))return d(i,...l);let c=P(),m=performance.now(),g=E(),f=u(),b=g?.traceId??u(),w=i?.input?.modelId??"amazon.nova-lite-v1:0",y=await W({traceId:b,spanId:f,userId:g?.userId,sessionId:g?.sessionId,tags:g?.tags},()=>d(i,...l));return{...y,stream:sn(y.stream,{lumiq:c,t0:m,traceId:b,spanId:f,parent:g,model:w,operation:e})}}),a}function rn(a,t={}){let n=a,e=t.operation??"chat",s=Y(t.guardrails,e),r=n.chat.complete.bind(n.chat);n.chat.complete=async(d,...i)=>{let l=P(),p=performance.now(),c=E(),m=u(),g=c?.traceId??u(),f=d.model??"mistral-small-latest";l.configClient&&(f=l.configClient.getModel(e,f),f!==d.model&&(d={...d,model:f}));let b=JSON.stringify(d.messages??[]);await Z(l,s,{text:b,phase:"pre",traceId:g,spanId:m,model:f,operation:e});try{let w=await W({traceId:g,spanId:m,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>r(d,...i)),y=w.model??f,k=w.usage??{},h=Number(k.promptTokens??0),C=Number(k.completionTokens??0),_=w.choices?.[0]?.finishReason??"",N=w.choices?.[0]?.message?.content??"",v=w.choices?.[0]?.message?.tool_calls??[],x=v.map(S=>S.function?.name).filter(Boolean),I={};for(let S of v)if(S.function?.name)try{I[S.function.name]=JSON.parse(S.function.arguments??"{}")}catch{I[S.function.name]={}}await Z(l,s,{text:N,phase:"post",traceId:g,spanId:m,model:y,operation:e});let{systemPrompt:F,conversationMessages:T}=te(d.messages??[]);return l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:y,operation:e,latency_ms:performance.now()-p,stream:!1,input_tokens:h,output_tokens:C,status:"success",finish_reason:_,span_kind:"llm",tools_used:x.length?x:void 0,tool_call_args:Object.keys(I).length?I:void 0,...l.storePrompts?{prompt_text:l.redactForStorage(T),completion_text:l.redactForStorage(N),...F?{system_prompt:l.redactForStorage(F)}:{}}:{},...x.length>0&&N?{decision_rationale:N}:{},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),w}catch(w){throw l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:f,operation:e,latency_ms:performance.now()-p,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(w.message).slice(0,500),user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),w}};let o=n.chat.stream?.bind(n.chat);return o&&(n.chat.stream=async function*(d,...i){let l=P(),p=performance.now(),c=E(),m=u(),g=c?.traceId??u(),f=d.model??"mistral-small-latest";l.configClient&&(f=l.configClient.getModel(e,f),f!==d.model&&(d={...d,model:f}));let b=0,w=0,y="",k;try{let h=await W({traceId:g,spanId:m,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>o(d,...i));for await(let C of h)k||(k=performance.now()-p),C.data?.usage&&(b=C.data.usage.promptTokens??b,w=C.data.usage.completionTokens??w),C.data?.choices?.[0]?.finishReason&&(y=C.data.choices[0].finishReason),C.data?.model&&(f=C.data.model),yield C;l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:f,operation:e,latency_ms:performance.now()-p,ttft_ms:k,stream:!0,input_tokens:b,output_tokens:w,status:"success",finish_reason:y,user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"})}catch(h){throw l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:f,operation:e,latency_ms:performance.now()-p,ttft_ms:k,stream:!0,input_tokens:0,output_tokens:0,status:"error",error_message:String(h.message).slice(0,500),user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),h}}),a}function an(a,t={}){let n=a,e=n.chat.completions.create.bind(n.chat.completions),s=t.operation??"chat";return n.chat.completions.create=async(r,...o)=>{let d=P(),i=performance.now(),l=E(),p=u(),c=l?.traceId??u(),m=r.model??"llama-3.3-70b-versatile";d.configClient&&(m=d.configClient.getModel(s,m),m!==r.model&&(r={...r,model:m}));try{let g=await W({traceId:c,spanId:p,userId:l?.userId,sessionId:l?.sessionId,tags:l?.tags},()=>e(r,...o)),f=g.usage??{},b=Number(f.prompt_tokens??0),w=Number(f.completion_tokens??0),y=g.choices?.[0]?.finish_reason??"",k=g.choices?.[0]?.message?.content??"",h=g.choices?.[0]?.message?.tool_calls??[],C=h.map(x=>x.function?.name).filter(Boolean),_={};for(let x of h)if(x.function?.name)try{_[x.function.name]=JSON.parse(x.function.arguments??"{}")}catch{_[x.function.name]={}}let{systemPrompt:N,conversationMessages:v}=te(r.messages??[]);return d.enqueue({event_id:u(),project_id:"",trace_id:c,span_id:p,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:m,operation:s,latency_ms:performance.now()-i,stream:!1,input_tokens:b,output_tokens:w,status:"success",finish_reason:y,span_kind:"llm",tools_used:C.length?C:void 0,tool_call_args:Object.keys(_).length?_:void 0,...d.storePrompts?{prompt_text:d.redactForStorage(v),completion_text:d.redactForStorage(k),...N?{system_prompt:d.redactForStorage(N)}:{}}:{},...C.length>0&&k?{decision_rationale:k}:{},user_id:l?.userId,session_id:l?.sessionId,tags:l?.tags,environment:d.environment,sdk_version:"1.0.0"}),g}catch(g){throw d.enqueue({event_id:u(),project_id:"",trace_id:c,span_id:p,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:m,operation:s,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(g.message).slice(0,500),user_id:l?.userId,session_id:l?.sessionId,tags:l?.tags,environment:d.environment,sdk_version:"1.0.0"}),g}},a}function dn(a,t={}){let n=require("openai").default??require("openai"),e=new n({baseURL:a.baseURL,apiKey:a.apiKey??"litellm"});return Ne(e,{...t,providerOverride:"litellm"})}var pn=require("@langchain/core/callbacks/base");var mn=require("crypto");var cn=a=>(0,mn.createHash)("sha256").update(a).digest("hex"),ln=["AgentExecutor","ReactAgent","ToolCallingAgent"],un=["DynamicStructuredTool","StructuredTool","DynamicTool","Tool"],xe=class extends pn.BaseCallbackHandler{name="ZespanCallbackHandler";guardrailSettings=Y(void 0,"chat");runs=new Map;constructor(t={}){super(),this.guardrailSettings=Y(t.guardrails,"chat")}detectProvider(t){let n=t.toLowerCase();return/gpt|o1-|o3-|davinci|turbo|whisper|dall-e/i.test(n)?"openai":/claude/i.test(n)?"anthropic":/gemini|palm|bard/i.test(n)?"google":/llama|codellama/i.test(n)?"meta":/mistral|mixtral/i.test(n)?"mistralai":/deepseek/i.test(n)?"deepseek":/command/i.test(n)?"cohere":/qwen/i.test(n)?"alibaba":"langchain"}extractToolCalls(t){try{let n=t?.generations?.[0];if(!Array.isArray(n))return[];let e=n[0]?.message;if(!e)return[];let s=e.tool_calls;if(Array.isArray(s)&&s.length>0)return s.map(d=>({name:d.name??"unknown",args:d.args??{},id:d.id}));let r=e.additional_kwargs?.tool_calls;if(Array.isArray(r)&&r.length>0)return r.map(d=>({name:d.function?.name??"unknown",args:d.function?.arguments?JSON.parse(d.function.arguments):{},id:d.id}));let o=e.additional_kwargs?.function_call;return o?[{name:o.name??"unknown",args:o.arguments?JSON.parse(o.arguments):{}}]:[]}catch{return[]}}detectConversationInfo(t,n){let e=n?._lumiq_message_count;if(typeof e=="number"&&e>0)return{turns:e,hasMemory:e>2};let s=n?.invocation_params?.messages;if(Array.isArray(s))return{turns:s.length,hasMemory:s.length>2};let o=(JSON.stringify(t).match(/"role"\s*:/g)||[]).length;return o>0?{turns:o,hasMemory:o>2}:{turns:t.length,hasMemory:!1}}detectAgentFromPrompts(t,n){try{let e=JSON.stringify(t)+JSON.stringify(n?.invocation_params?.messages??[])+JSON.stringify(n?._lumiq_structured_messages??[]),s=[/you are (?:a |an |the )?([A-Z][A-Za-z]*(?:[_\s][A-Z][A-Za-z]*){0,3}(?:Agent|Bot|Assistant|AI|Specialist|Expert|Analyzer|Manager|Coordinator))/i,/act as (?:a |an |the )?([A-Z][A-Za-z]*(?:[_\s][A-Z][A-Za-z]*){0,3}(?:Agent|Bot|Assistant|AI))/i,/agent[_\s]?name["'\s:=]+["']?([A-Za-z][A-Za-z_\-]+)/i,/role["'\s:=]+["']?([A-Za-z]+(?:Agent|Bot|Assistant))/i,/name["'\s:=]+["']?([A-Za-z]+Agent)/i];for(let r of s){let o=e.match(r);if(o?.[1])return o[1].trim().replace(/[\s]+/g,"_")}return}catch{return}}detectPlanning(t,n){try{let e=t+" "+JSON.stringify(n);if(![/\bstep\s+\d+[:\s]/i,/\bfirst,?\s+(?:I|we|let)/i,/\bthen,?\s+(?:I|we)/i,/\bfinally,?\s+(?:I|we)/i,/\blet me think/i,/\blet'?s break (?:this |it )?down/i,/\bthink(?:ing)? step by step/i,/\bmy (?:plan|approach|strategy)/i,/\bI'?ll start by/i,/<thinking>/i,/<scratchpad>/i,/\bchain.of.thought/i].some(l=>l.test(e)))return{detected:!1};let o=/(?:step\s+\d+[:\s]|^\d+[\.\)]\s+)(.+)/gim,d=[],i;for(;(i=o.exec(t))!==null&&(i[1]&&d.push(i[1].trim().slice(0,200)),!(d.length>=10)););return{detected:!0,steps:d.length>0?d:void 0}}catch{return{detected:!1}}}extractCompletion(t){let n=t?.generations;if(!Array.isArray(n)||n.length===0)return"";let e=n[0];if(!Array.isArray(e)||e.length===0)return"";let s=e[0];if(typeof s?.text=="string")return s.text;let r=s?.message?.content;return typeof r=="string"?r:Array.isArray(r)?r.map(o=>typeof o?.text=="string"?o.text:"").filter(Boolean).join(`
|
|
8
|
-
`):""}async handleChatModelStart(t,n,e,s,r,o,d,i){try{let l=n.map(c=>c.map(m=>{let g=m._getType?.()??m.role??"unknown",f=typeof m.content=="string"?m.content:JSON.stringify(m.content);return`${g}: ${f}`}).join(`
|
|
9
|
-
`)),p=n[0]?.map(c=>({role:c._getType?.()??c.role??"unknown",content:typeof c.content=="string"?c.content:JSON.stringify(c.content),tool_calls:c.tool_calls??c.additional_kwargs?.tool_calls}));await this.handleLLMStart(t,l,e,s,{...r,_lumiq_structured_messages:p,_lumiq_message_count:n[0]?.length??0})}catch{}}async handleLLMStart(t,n,e,s,r){try{let o=E(),d=P(),i=s?this.runs.get(s):void 0,l=u();ae(l);let p=i?.traceId??o?.traceId??u(),c=r?.invocation_params?.model??r?.invocation_params?.model_name??t.kwargs?.model??t.kwargs?.modelName??t.id?.[t.id.length-1]??"unknown",m=r?.invocation_params?.stream===!0,g=i?.spanKind==="agent"?i.agentId:void 0,f=i?.spanKind==="agent"?i.agentName:void 0;if(!f){let h=this.detectAgentFromPrompts(n,r);h&&(f=h,g=g??u())}let b=r?.invocation_params?.tools??r?.invocation_params?.functions??[],w=b.map(h=>h.function?.name??h.name??"unknown").filter(Boolean),y=this.detectConversationInfo(n,r),k=await Z(d,this.guardrailSettings,{text:JSON.stringify(n??[]),phase:"pre",traceId:p,spanId:l,model:c,operation:"chat"});this.runs.set(e,{t0:performance.now(),traceId:p,spanId:l,parentSpanId:i?.spanId??o?.spanId,model:c,agentId:g,agentName:f,spanKind:"llm",isStreaming:m,parent:o,prompts:n,structuredMessages:r?._lumiq_structured_messages,invocationParams:r?.invocation_params,preGuardrailResult:k,toolsAvailable:w,toolSchemas:d.storePrompts?b:void 0,conversationTurns:y.turns,hasMemory:y.hasMemory})}catch(o){if(o instanceof U)throw o}}async handleLLMNewToken(t,n,e){try{let s=this.runs.get(e);if(!s||s.ttft!==void 0)return;s.ttft=performance.now()-s.t0;let r=P();r.enqueue({event_id:u(),project_id:"",trace_id:s.traceId,span_id:s.spanId,parent_span_id:s.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(s.model),model:s.model,operation:"chat",latency_ms:s.ttft,ttft_ms:s.ttft,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",span_kind:"llm",agent_id:s.agentId,agent_name:s.agentName,prompt_hash:cn(JSON.stringify(s.prompts)),...r.storePrompts?(()=>{let{systemPrompt:o,conversationMessages:d}=te(s.structuredMessages??[]);return{prompt_text:r.redactForStorage(d.length?d:s.prompts),...o?{system_prompt:r.redactForStorage(o)}:{}}})():{},metadata:{invocation_params:s.invocationParams??null},user_id:s.parent?.userId,session_id:s.parent?.sessionId,tags:s.parent?.tags,environment:r.environment,sdk_version:"1.0.0",finish_reason:"stream_start"})}catch{}}async handleLLMEnd(t,n){try{let e=this.runs.get(n);if(!e)return;ne(e.spanId),this.runs.delete(n);let s=P(),r=t.llmOutput?.tokenUsage?.promptTokens??t.llmOutput?.usageMetadata?.promptTokenCount??0,o=t.llmOutput?.tokenUsage?.completionTokens??t.llmOutput?.usageMetadata?.candidatesTokenCount??0,d=performance.now()-e.t0,i=this.extractCompletion(t),l=this.extractToolCalls(t),p=t.llmOutput?.tokenUsage?.reasoningTokens??t.llmOutput?.usage?.completion_tokens_details?.reasoning_tokens??t.llmOutput?.reasoningTokens??t.llmOutput?.usageMetadata?.thoughtsTokenCount??0,c=t.llmOutput?.tokenUsage?.cachedTokens??t.llmOutput?.usage?.prompt_tokens_details?.cached_tokens??t.llmOutput?.usageMetadata?.cachedContentTokenCount??0,m=this.detectPlanning(i,e.prompts),g=t.generations?.[0]?.[0]?.generationInfo?.finish_reason??t.generations?.[0]?.[0]?.generationInfo?.finishReason??t.llmOutput?.finish_reason??(e.isStreaming?"stream_end":"stop"),f=await Z(s,this.guardrailSettings,{text:i,phase:"post",traceId:e.traceId,spanId:e.spanId,model:e.model,operation:"chat"}),b=se(i,f);s.enqueue({event_id:u(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(e.model),model:e.model,operation:"chat",latency_ms:d,ttft_ms:e.ttft,stream:e.isStreaming??!1,input_tokens:r,output_tokens:o,status:"success",span_kind:"llm",agent_id:e.agentId,agent_name:e.agentName,finish_reason:g,prompt_hash:cn(JSON.stringify(e.prompts)),tools_defined:e.toolsAvailable?.length?e.toolsAvailable:void 0,tools_used:l.length>0?l.map(w=>w.name):void 0,tool_calls:l.length>0?l:void 0,conversation_turns:e.conversationTurns,has_memory:e.hasMemory,reasoning_tokens:p>0?p:void 0,has_reasoning:p>0?!0:void 0,cached_tokens:c>0?c:void 0,has_planning:m.detected||void 0,planning_steps:m.steps,...s.storePrompts?(()=>{let{systemPrompt:w,conversationMessages:y}=te(e.structuredMessages??[]);return{prompt_text:s.redactForStorage(y.length?y:e.prompts),completion_text:s.redactForStorage(b),...w?{system_prompt:s.redactForStorage(w)}:{}}})():{},metadata:{usage:t?.llmOutput?.tokenUsage??null,llm_output:t?.llmOutput??null,invocation_params:e.invocationParams??null,guardrails:{pre:e.preGuardrailResult?{matched:e.preGuardrailResult.results.length,modified:!!e.preGuardrailResult.modifiedText}:null,post:f?{matched:f.results.length,modified:!!f.modifiedText}:null}},user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}async handleLLMError(t,n){try{let e=this.runs.get(n);if(!e)return;ne(e.spanId),this.runs.delete(n);let s=P();s.enqueue({event_id:u(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(e.model),model:e.model,operation:"chat",latency_ms:performance.now()-e.t0,ttft_ms:e.ttft,stream:e.isStreaming??!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",span_kind:"llm",agent_id:e.agentId,agent_name:e.agentName,error_code:t instanceof U?"guardrail_blocked":void 0,error_message:String(t.message).slice(0,1e3),user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}async handleChainStart(t,n,e,s){try{let r=E(),o=s?this.runs.get(s):void 0,d=u(),i=o?.traceId??r?.traceId??u(),l=Array.isArray(t?.id)?t.id:[],p=l.some(h=>ln.includes(h)),c=!p&&l.some(h=>un.includes(h)),m=p?"agent":c?"tool":"general",g=p?u():void 0,f=p?l.find(h=>ln.includes(h))??void 0:void 0,b=c?t.name??t.kwargs?.name??l.find(h=>un.includes(h)):void 0,w=c?JSON.stringify(n):void 0,y=o?.spanKind==="agent"?o.agentId:void 0,k=o?.spanKind==="agent"?o.agentName:void 0;this.runs.set(e,{t0:performance.now(),traceId:i,spanId:d,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:g??o?.agentId,agentName:f??o?.agentName,spanKind:m,toolName:b,toolInput:w,prompts:[],parent:r,delegatedFromAgentId:y,delegatedFromAgentName:k})}catch{}}async handleChainEnd(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=P();if(e.spanKind==="tool"){let r=t?.output??t,o=typeof r=="string"?r:JSON.stringify(r);s.enqueue({event_id:u(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${e.toolName??"unknown"}`,latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",agent_id:e.agentId,agent_name:e.agentName,tools_used:e.toolName?[e.toolName]:[],tool_call_id:e.spanId,tool_call_args:e.toolInput?JSON.parse(e.toolInput):void 0,tool_call_result:o.slice(0,10240),stream:!1,finish_reason:"stop",user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}else s.enqueue({event_id:u(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"chain",latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:e.spanKind,agent_id:e.agentId,agent_name:e.agentName,stream:!1,finish_reason:"stop",delegation_from_agent_id:e.delegatedFromAgentId,delegation_from_agent_name:e.delegatedFromAgentName,user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}async handleChainError(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=P();s.enqueue({event_id:u(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:e.spanKind==="tool"?`tool.${e.toolName??"unknown"}`:"chain",latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:e.spanKind,agent_id:e.agentId,agent_name:e.agentName,tools_used:e.spanKind==="tool"&&e.toolName?[e.toolName]:void 0,tool_call_id:e.spanKind==="tool"?e.spanId:void 0,tool_call_args:e.spanKind==="tool"&&e.toolInput?JSON.parse(e.toolInput):void 0,error_message:String(t?.message??t).slice(0,1e3),stream:!1,delegation_from_agent_id:e.delegatedFromAgentId,delegation_from_agent_name:e.delegatedFromAgentName,user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}async handleToolStart(t,n,e,s){try{let r=E(),o=s?this.runs.get(s):void 0,d=u(),i=o?.traceId??r?.traceId??u(),l=t.id?.[t.id.length-1]??"unknown_tool",p=t.name||t.kwargs?.name||l;this.runs.set(e,{t0:performance.now(),traceId:i,spanId:d,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:o?.agentId,agentName:o?.agentName,spanKind:"tool",toolName:p,toolInput:n,prompts:[],parent:r})}catch{}}async handleToolEnd(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=P(),o=(typeof t=="string"?t:JSON.stringify(t)).slice(0,10240);s.enqueue({event_id:u(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${e.toolName??"unknown"}`,latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",agent_id:e.agentId,agent_name:e.agentName,tools_used:e.toolName?[e.toolName]:[],tool_call_id:e.spanId,tool_call_args:e.toolInput?{input:e.toolInput}:void 0,tool_call_result:o,stream:!1,finish_reason:"stop",user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}async handleToolError(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=P();s.enqueue({event_id:u(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${e.toolName??"unknown"}`,latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:"tool",agent_id:e.agentId,agent_name:e.agentName,tools_used:e.toolName?[e.toolName]:[],error_message:String(t?.message??t).slice(0,1e3),stream:!1,user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}async handleAgentAction(t,n){try{let e=this.runs.get(n),s=E(),r=P(),o=e?.traceId??s?.traceId??u(),d=u(),i=[t?.tool??"",typeof t?.toolInput=="string"?t.toolInput:JSON.stringify(t?.toolInput??""),t?.log??""].join(" | ");r.enqueue({event_id:u(),project_id:"",trace_id:o,span_id:d,parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"planning",latency_ms:0,input_tokens:0,output_tokens:0,status:"success",span_kind:"planning",agent_id:e?.agentId,agent_name:e?.agentName,planning_steps:[i],...t?.log?{decision_rationale:t.log}:{},stream:!1,user_id:e?.parent?.userId??s?.userId,session_id:e?.parent?.sessionId??s?.sessionId,tags:e?.parent?.tags??s?.tags,environment:r.environment,sdk_version:"1.0.0"})}catch{}}async handleRetrieverStart(t,n,e,s){try{let r=E(),o=s?this.runs.get(s):void 0,d=u(),i=o?.traceId??r?.traceId??u();this.runs.set(e,{t0:performance.now(),traceId:i,spanId:d,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:o?.agentId,agentName:o?.agentName,spanKind:"retriever",query:n,prompts:[],parent:r})}catch{}}async handleRetrieverEnd(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=P();s.enqueue({event_id:u(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"retriever",latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"retriever",agent_id:e.agentId,agent_name:e.agentName,stream:!1,finish_reason:"stop",metadata:{"lumiq.rag.contexts":Array.isArray(t)?t:[]},user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}async handleRetrieverError(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=P();s.enqueue({event_id:u(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"retriever",latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:"retriever",agent_id:e.agentId,agent_name:e.agentName,error_message:String(t?.message??t).slice(0,1e3),stream:!1,user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}},gn=xe;function _n(a){let t=a?.model;return typeof t=="string"?t:t&&typeof t=="object"?t.model??t.name??"gemini-2.5-flash":"gemini-2.5-flash"}function Vn(a){let t=a??{};return{input:Number(t.promptTokenCount??t.inputTokenCount??0),output:Number(t.candidatesTokenCount??t.outputTokenCount??0),cached:Number(t.cachedContentTokenCount??0),reasoning:Number(t.thoughtsTokenCount??t.reasoningTokenCount??0)}}var qe=class{agentStates=new Map;pendingModelCalls=new Map;toolCallStates=new Map;agentKey(t,n){return`${t}:${n}`}getParentAgentState(t,n){if(n)return this.agentStates.get(this.agentKey(t,n))}beforeAgentCallback=t=>{try{let n=t.invocationId,e=t.agentName,s=t.invocationContext?.agent?.parentAgent?.name,r=E(),o=this.getParentAgentState(n,s),d=o?.traceId??r?.traceId??u(),i=u(),l=o?.spanId??r?.spanId,p=u(),c=_n(t.invocationContext?.agent),m=t.userId||r?.userId,g=t.sessionId||r?.sessionId;this.agentStates.set(this.agentKey(n,e),{t0:performance.now(),traceId:d,spanId:i,parentSpanId:l,agentId:p,agentName:e,model:c,userId:m,sessionId:g,parentAgentId:o?.agentId,parentAgentName:s})}catch{}};afterAgentCallback=t=>{try{let n=t.invocationId,e=t.agentName,s=this.agentKey(n,e),r=this.agentStates.get(s);if(!r)return;this.agentStates.delete(s);let o=!r.parentAgentName,d=P();d.enqueue({event_id:u(),project_id:"",trace_id:r.traceId,span_id:r.spanId,parent_span_id:r.parentSpanId,timestamp:new Date().toISOString(),provider:"google-adk",model:r.model,operation:`agent.${e}`,span_kind:"agent",agent_id:r.agentId,agent_name:e,agent_role:o?"coordinator":"specialist",agent_framework:"google-adk",parent_agent_id:r.parentAgentId,delegation_from_agent_id:r.parentAgentId,delegation_from_agent_name:r.parentAgentName,latency_ms:performance.now()-r.t0,stream:!1,input_tokens:0,output_tokens:0,status:"success",user_id:r.userId,session_id:r.sessionId,environment:d.environment,sdk_version:"1.0.0"})}catch{}};beforeModelCallback=({context:t,request:n})=>{try{let e=t.invocationId,s=t.agentName,r=this.agentStates.get(this.agentKey(e,s)),o=r?.traceId??u(),d=_n(t.invocationContext?.agent),i=n?.config?.systemInstruction,l;if(i){let m=typeof i=="string"?i:(i?.parts??[]).filter(g=>g?.text).map(g=>g.text).join("");m&&(l=m)}let p,c=n?.contents??[];if(c.length){let m=c.map(g=>{let f=g?.role??"user",b=(g?.parts??[]).filter(w=>typeof w?.text=="string"&&!w.thought).map(w=>w.text).join("");return b?`${f}: ${b}`:""}).filter(Boolean).join(`
|
|
10
|
-
`);m&&(p=m)}this.pendingModelCalls.set(this.agentKey(e,s),{t0:performance.now(),spanId:u(),traceId:o,parentSpanId:r?.spanId??"",model:d,agentId:r?.agentId,agentName:s,userId:r?.userId??t.userId,sessionId:r?.sessionId??t.sessionId,promptText:p,systemPrompt:l})}catch{}};afterModelCallback=({context:t,response:n})=>{try{let e=t.invocationId,s=t.agentName,r=this.agentKey(e,s),o=this.pendingModelCalls.get(r);if(!o)return;this.pendingModelCalls.delete(r);let{input:d,output:i,cached:l,reasoning:p}=Vn(n?.usageMetadata),c=n?.content?.parts??[],m=c.filter(b=>typeof b?.text=="string"&&!b.thought).map(b=>b.text).join(""),g=c.filter(b=>b?.functionCall?.name).map(b=>b.functionCall.name),f=P();f.enqueue({event_id:u(),project_id:"",trace_id:o.traceId,span_id:o.spanId,parent_span_id:o.parentSpanId,timestamp:new Date().toISOString(),provider:"google",model:o.model,operation:"chat",span_kind:"llm",agent_id:o.agentId,agent_name:o.agentName,agent_framework:"google-adk",latency_ms:performance.now()-o.t0,stream:!1,input_tokens:d,output_tokens:i,cached_tokens:l||void 0,reasoning_tokens:p||void 0,finish_reason:n?.finishReason??"stop",tools_used:g.length?g:void 0,status:n?.errorCode?"error":"success",error_message:n?.errorMessage,...f.storePrompts&&o.systemPrompt?{system_prompt:f.redactForStorage(o.systemPrompt)}:{},...f.storePrompts&&o.promptText?{prompt_text:f.redactForStorage(o.promptText)}:{},...f.storePrompts&&m?{completion_text:f.redactForStorage(m)}:{},user_id:o.userId,session_id:o.sessionId,environment:f.environment,sdk_version:"1.0.0"})}catch{}};beforeToolCallback=({tool:t,args:n,context:e})=>{try{let s=e.invocationId,r=e.agentName,o=e.functionCallId??u(),d=this.agentStates.get(this.agentKey(s,r));this.toolCallStates.set(o,{t0:performance.now(),spanId:u(),traceId:d?.traceId??u(),parentSpanId:d?.spanId??"",toolName:t?.name??"unknown_tool",args:n??{},agentId:d?.agentId,agentName:r,userId:d?.userId??e.userId,sessionId:d?.sessionId??e.sessionId})}catch{}};afterToolCallback=({tool:t,args:n,context:e,response:s})=>{try{let r=e.functionCallId??"",o=this.toolCallStates.get(r);if(!o)return;this.toolCallStates.delete(r);let d=P();d.enqueue({event_id:u(),project_id:"",trace_id:o.traceId,span_id:o.spanId,parent_span_id:o.parentSpanId,timestamp:new Date().toISOString(),provider:"google-adk",model:"",operation:`tool.${o.toolName}`,span_kind:"tool",agent_id:o.agentId,agent_name:o.agentName,agent_framework:"google-adk",latency_ms:performance.now()-o.t0,stream:!1,input_tokens:0,output_tokens:0,status:"success",tools_used:[o.toolName],tool_call_id:r,tool_call_args:o.args,tool_call_result:JSON.stringify(s??{}).slice(0,10240),user_id:o.userId,session_id:o.sessionId,environment:d.environment,sdk_version:"1.0.0"})}catch{}};get callbacks(){return{beforeAgentCallback:this.beforeAgentCallback,afterAgentCallback:this.afterAgentCallback,beforeModelCallback:this.beforeModelCallback,afterModelCallback:this.afterModelCallback,beforeToolCallback:this.beforeToolCallback,afterToolCallback:this.afterToolCallback}}};var hn=require("crypto"),It=a=>(0,hn.createHash)("sha256").update(typeof a=="string"?a:JSON.stringify(a)).digest("hex");function Hn(a){return a?.model??a?.config?.model??a?.llmConfig?.model??a?.generativeModel?.model??"gemini-2.5-flash"}function yn(a){let t=a?.usageMetadata??a?.usage_metadata??{},n=a?.usage??{};return{input:Number(t.inputTokenCount??t.promptTokenCount??n.input_tokens??n.prompt_tokens??0),output:Number(t.outputTokenCount??t.candidatesTokenCount??n.output_tokens??n.completion_tokens??0),cached:Number(t.cachedContentTokenCount??n.cached_tokens??0),reasoning:Number(t.reasoningTokenCount??t.thinking_token_count??n.reasoning_tokens??0)}}function Qn(a){if(typeof a?.text=="string")return a.text;if(typeof a?.output=="string")return a.output;let n=(a?.candidates?.[0]?.content?.parts??a?.content?.parts??[]).map(e=>typeof e?.text=="string"?e.text:"").filter(Boolean).join("");return n||(a&&typeof a=="object"?JSON.stringify(a):"")}function Xn(a){let t=[];try{let n=a?.candidates?.[0]?.content?.parts??a?.content?.parts??[];for(let e of n)e?.functionCall?.name&&t.push({name:e.functionCall.name,args:e.functionCall.args??{}});for(let e of a?.toolCalls??[])e?.name&&t.push({name:e.name,args:e.args??e.arguments??{}})}catch{}return t}function kn(a){if(a instanceof U)return"guardrail_blocked";let t=String(a?.message??"").toLowerCase();if(/rate.?limit|quota|429/.test(t))return"rate_limited";if(/context.?length|too.?long|max.?token/.test(t))return"context_length";if(/timeout|timed?.?out/.test(t))return"timeout";if(/safety|blocked|harm/.test(t))return"content_filter"}function Pe(a,t={}){let n=a;if(typeof n?.run!="function")return a;let e=n.run.bind(n),s=Y(t.guardrails,"agent"),r=t.agentName??n.name??"ADKAgent",o=t.agentRole??(n.subAgents?.length?"coordinator":"specialist"),d=Hn(n);return t.traceSubAgents!==!1&&Array.isArray(n.subAgents)&&(n.subAgents=n.subAgents.map(i=>Pe(i,{...t,agentRole:"specialist",traceSubAgents:!0}))),n.run=async(i,l)=>{let p=P(),c=performance.now(),m=E(),g=u(),f=u(),b=m?.traceId??u(),w=t.sessionId??m?.sessionId,y=typeof i=="string"?i:JSON.stringify(i??"");return W({traceId:b,spanId:f,userId:m?.userId,sessionId:w,tags:m?.tags,agentId:g,agentName:r,agentRole:o,agentFramework:"google-adk",parentAgentId:m?.agentId},async()=>{try{let k=await Z(p,s,{text:y,phase:"pre",traceId:b,spanId:f,model:d,operation:"agent"}),h=await e(i,l),{input:C,output:_,cached:N,reasoning:v}=yn(h),x=Qn(h),I=Xn(h),F=h?.candidates?.[0]?.finishReason??h?.finish_reason,T=await Z(p,s,{text:x,phase:"post",traceId:b,spanId:f,model:d,operation:"agent"}),S=se(x,T);return p.enqueue({event_id:u(),project_id:"",trace_id:b,span_id:f,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:d,operation:"agent",span_kind:"agent",agent_id:g,agent_name:r,agent_role:o,agent_framework:"google-adk",parent_agent_id:m?.agentId,delegation_from_agent_id:m?.agentId,delegation_from_agent_name:m?.agentName,latency_ms:performance.now()-c,stream:!1,input_tokens:C,output_tokens:_,cached_tokens:N||void 0,reasoning_tokens:v||void 0,status:"success",finish_reason:F,tools_used:I.length?I.map(M=>M.name):void 0,tool_call_args:I.length?Object.fromEntries(I.map(M=>[M.name,M.args])):void 0,prompt_hash:It(y),...p.storePrompts?{prompt_text:p.redactForStorage(y),completion_text:p.redactForStorage(S)}:{},...I.length>0&&x?{decision_rationale:x}:{},user_id:m?.userId,session_id:w,tags:m?.tags,environment:p.environment,sdk_version:"1.0.0",metadata:{guardrails:{pre:k?{matched:k.results.length,modified:!!k.modifiedText}:null,post:T?{matched:T.results.length,modified:!!T.modifiedText}:null}}}),h}catch(k){throw p.enqueue({event_id:u(),project_id:"",trace_id:b,span_id:f,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:d,operation:"agent",span_kind:"agent",agent_id:g,agent_name:r,agent_role:o,agent_framework:"google-adk",parent_agent_id:m?.agentId,latency_ms:performance.now()-c,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:kn(k),error_message:String(k?.message??k).slice(0,500),user_id:m?.userId,session_id:w,tags:m?.tags,environment:p.environment,sdk_version:"1.0.0"}),k}})},a}function st(a,t={}){let n=a;if(typeof n?.runEphemeral=="function"){let e=n.runEphemeral.bind(n);n.runEphemeral=s=>fn(e(s),s,t)}if(typeof n?.run=="function"){let e=n.run.bind(n);n.run=s=>fn(e(s),s,t)}return a}async function*fn(a,t,n){let e=P(),s=E(),r=s?.traceId??u(),o=u(),d=u(),i=performance.now(),l=n.agentName??"ADKAgent",p=n.agentRole??"coordinator",c=n.model??"gemini-2.5-flash",m=t?.userId??s?.userId,g=n.sessionId??t?.sessionId??s?.sessionId,f=(t?.newMessage?.parts??[]).map(v=>typeof v?.text=="string"?v.text:"").filter(Boolean).join(""),b=new Map,w=new Map,y=new Set,k="",h=0,C=0,_=0,N=0;ae(o);try{yield*W({traceId:r,spanId:o,userId:m,sessionId:g,tags:s?.tags,agentId:d,agentName:l,agentRole:p,agentFramework:"google-adk",parentAgentId:s?.agentId},async function*(){for await(let v of a){h++;let x=v.author??l;if(x!=="user"){x!==l&&!y.has(x)&&e.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:u(),parent_span_id:o,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:`handoff.${l}\u2192${x}`,span_kind:"handoff",agent_name:x,agent_role:"specialist",agent_framework:"google-adk",delegation_from_agent_id:d,delegation_from_agent_name:l,delegation_reason:`delegated to ${x}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",user_id:m,session_id:g,tags:s?.tags,environment:e.environment,sdk_version:"1.0.0"}),y.add(x),b.has(x)||(b.set(x,{spanId:u(),agentId:u(),t0:performance.now()}),w.set(x,{input:0,output:0,cached:0,reasoning:0}));let I=b.get(x),F=yn(v);if(F.input>0||F.output>0){let A=w.get(x);A.input+=F.input,A.output+=F.output,A.cached+=F.cached,A.reasoning+=F.reasoning,C+=F.input,_+=F.output,N+=F.cached}let T=v.content?.parts??[];for(let A of T){let G=A?.functionCall;if(!G?.name)continue;let O=u();e.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:O,parent_span_id:I.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:`tool.${G.name}`,span_kind:"tool",agent_id:I.agentId,agent_name:x,agent_framework:"google-adk",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",tools_used:[G.name],tool_call_id:O,tool_call_args:G.args??{},user_id:m,session_id:g,tags:s?.tags,environment:e.environment,sdk_version:"1.0.0"})}let S=T.filter(A=>typeof A?.text=="string"&&!A.thought).map(A=>A.text).join("");if(S&&(k+=S),typeof v.isFinalResponse=="function"?v.isFinalResponse():!!v.isFinalResponse||v.actions?.stateDelta!==void 0||v.turnComplete===!0){let A=T.map(q=>q?.functionCall?.name).filter(Boolean),G=T.filter(q=>typeof q?.text=="string"&&!q.thought).map(q=>q.text).join(""),O=w.get(x)??{input:0,output:0,cached:0,reasoning:0};e.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:I.spanId,parent_span_id:o,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:`agent.${x}`,span_kind:"agent",agent_id:I.agentId,agent_name:x,agent_role:x===l?p:"specialist",agent_framework:"google-adk",parent_agent_id:d,latency_ms:performance.now()-I.t0,stream:!1,input_tokens:O.input,output_tokens:O.output,cached_tokens:O.cached||void 0,reasoning_tokens:O.reasoning||void 0,status:"success",tools_used:A.length?A:void 0,prompt_hash:f?It(f):void 0,...e.storePrompts&&S?{completion_text:e.redactForStorage(S)}:{},...A.length>0&&G?{decision_rationale:G}:{},user_id:m,session_id:g,tags:s?.tags,environment:e.environment,sdk_version:"1.0.0"}),b.delete(x),w.delete(x)}}yield v}}),e.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:o,parent_span_id:s?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:"agent.run",span_kind:"agent",agent_id:d,agent_name:l,agent_role:p,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-i,stream:!1,input_tokens:C,output_tokens:_,cached_tokens:N||void 0,status:"success",prompt_hash:f?It(f):void 0,...e.storePrompts?{prompt_text:e.redactForStorage(f),completion_text:e.redactForStorage(k)}:{},user_id:m,session_id:g,tags:s?.tags,environment:e.environment,sdk_version:"1.0.0",metadata:{eventCount:h,agentsThatRan:[...y]}}),ne(o)}catch(v){throw ne(o),e.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:o,parent_span_id:s?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:"agent.run",span_kind:"agent",agent_id:d,agent_name:l,agent_role:p,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:kn(v),error_message:String(v?.message??v).slice(0,500),user_id:m,session_id:g,tags:s?.tags,environment:e.environment,sdk_version:"1.0.0"}),v}}function vt(a){let{coordinator:t,runner:n,agentName:e,agentRole:s,model:r,...o}=a,d=Pe(t,{...o,agentName:e??t?.name,agentRole:s??"coordinator",traceSubAgents:!0}),i=st(n,{agentName:e??t?.name,agentRole:s??"coordinator",model:r});return{coordinator:d,runner:i}}var St=Pe;var In=require("@opentelemetry/sdk-trace-node"),bt=require("@opentelemetry/core");function Yn(){try{return P()}catch{return null}}var xt=class{export(t,n){let e=Yn();if(!e){n({code:bt.ExportResultCode.SUCCESS});return}try{for(let s of t){let{name:r}=s;if(!r.startsWith("ai."))continue;let o=s.attributes,d=E(),i=s.spanContext().spanId,l=s.spanContext().traceId,p=s.duration[0]*1e3+s.duration[1]/1e6,c=new Date(s.startTime[0]*1e3+s.startTime[1]/1e6).toISOString(),m=s.status.code===2,g={event_id:u(),project_id:"",trace_id:d?.traceId??l,span_id:i,parent_span_id:d?.spanId,timestamp:c,provider:String(o["ai.model.provider"]??"unknown"),model:String(o["ai.model.id"]??"unknown"),latency_ms:p,stream:!1,status:m?"error":"success",environment:e.environment,sdk_version:"1.0.0"};r==="ai.generateText"||r==="ai.generateText.doGenerate"?(ne(i),e.enqueue({...g,operation:"generateText",input_tokens:Number(o["ai.usage.promptTokens"]??0),output_tokens:Number(o["ai.usage.completionTokens"]??0),finish_reason:String(o["ai.response.finishReason"]??""),span_kind:"llm",...e.storePrompts&&o["ai.prompt"]?{prompt_text:e.redactForStorage(String(o["ai.prompt"]))}:{},...e.storePrompts&&o["ai.response.text"]?{completion_text:e.redactForStorage(String(o["ai.response.text"]))}:{}})):r==="ai.streamText"||r==="ai.streamText.doStream"?(ne(i),e.enqueue({...g,operation:"streamText",stream:!0,input_tokens:Number(o["ai.usage.promptTokens"]??0),output_tokens:Number(o["ai.usage.completionTokens"]??0),finish_reason:String(o["ai.response.finishReason"]??""),ttft_ms:o["ai.response.msToFirstChunk"]!==void 0?Number(o["ai.response.msToFirstChunk"]):void 0,span_kind:"llm"})):r==="ai.generateObject"||r==="ai.generateObject.doGenerate"?(ne(i),e.enqueue({...g,operation:"generateObject",input_tokens:Number(o["ai.usage.promptTokens"]??0),output_tokens:Number(o["ai.usage.completionTokens"]??0),span_kind:"general"})):r==="ai.toolCall"?e.enqueue({...g,provider:"vercel-ai",model:"tool",operation:`tool.${String(o["ai.toolCall.name"]??"unknown")}`,input_tokens:0,output_tokens:0,span_kind:"tool",tools_used:o["ai.toolCall.name"]?[String(o["ai.toolCall.name"])]:[]}):(r==="ai.embed"||r==="ai.embedMany")&&e.enqueue({...g,operation:r==="ai.embed"?"embed":"embedMany",input_tokens:Number(o["ai.usage.tokens"]??0),output_tokens:0,span_kind:"embedding"})}}catch{}n({code:bt.ExportResultCode.SUCCESS})}shutdown(){return Promise.resolve()}},Ct=class{exporter;constructor(t){this.exporter=t}onStart(t,n){t.name?.startsWith("ai.")&&ae(t.spanContext().spanId)}onEnd(t){t.name.startsWith("ai.")&&ne(t.spanContext().spanId),this.exporter.export([t],()=>{})}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},ot=null,wt=null;function rt(){return ot||(ot=new In.NodeTracerProvider,ot.addSpanProcessor(new Ct(new xt)),wt=ot.getTracer("zespan-vercel-ai")),{tracer:wt,telemetry:{isEnabled:!0,tracer:wt}}}function Tt(){return rt().telemetry}function je(){try{return P()}catch{return null}}function es(a){let t=a.toLowerCase();return/gpt|o1-|o3-|davinci|turbo|whisper|dall-e/i.test(t)?"openai":/claude/i.test(t)?"anthropic":/gemini|palm|bard/i.test(t)?"google":/llama|codellama/i.test(t)?"meta":/mistral|mixtral/i.test(t)?"mistralai":/deepseek/i.test(t)?"deepseek":/command/i.test(t)?"cohere":/qwen/i.test(t)?"alibaba":"unknown"}var Fe=class{runs=new Map;guardrailSettings;constructor(t={}){this.guardrailSettings=Y(t.guardrails,"chat")}_onLLMStart=async t=>{let n=t.id??u(),e=E(),s=u();ae(s);let r=t.detail?.llm?.metadata?.model_name??t.detail?.model??"unknown",o=e?.traceId??u(),d=JSON.stringify(t.detail?.messages??t.detail?.prompt??t.detail?.input??""),i;try{let l=je();l&&d&&(i=await Z(l,this.guardrailSettings,{text:d,phase:"pre",traceId:o,spanId:s,model:r,operation:"chat"}))}catch(l){if(l instanceof U)throw l}this.runs.set(n,{t0:performance.now(),traceId:o,spanId:s,parentSpanId:e?.spanId,model:r,preGuardrailResult:i,promptText:d})};_onLLMEnd=async t=>{let n=this.runs.get(t.id??"");if(!n)return;this.runs.delete(t.id),ne(n.spanId);let e=je();if(!e)return;let s=t.detail?.response??t.detail?.chunk??{},r=s.usage??s.raw?.usage??{},o=(typeof s.text=="string"?s.text:null)??(typeof s.message?.content=="string"?s.message.content:null)??"",d=o,i;if(o)try{i=await Z(e,this.guardrailSettings,{text:o,phase:"post",traceId:n.traceId,spanId:n.spanId,model:n.model,operation:"chat"}),d=se(o,i)}catch(p){p instanceof U||(i=void 0)}let l=n.preGuardrailResult;try{e.enqueue({event_id:u(),project_id:"",trace_id:n.traceId,span_id:n.spanId,parent_span_id:n.parentSpanId,timestamp:new Date().toISOString(),provider:es(n.model),model:n.model,operation:"chat",latency_ms:performance.now()-n.t0,ttft_ms:n.ttft,stream:!1,input_tokens:r.promptTokens??r.prompt_tokens??0,output_tokens:r.completionTokens??r.completion_tokens??0,finish_reason:s.finishReason??s.finish_reason??"",status:"success",span_kind:"llm",agent_id:E()?.agentId,agent_name:E()?.agentName,...e.storePrompts?{prompt_text:e.redactForStorage(n.promptText??""),completion_text:e.redactForStorage(d)}:{},metadata:{guardrails:{pre:l?{matched:l.results.length,modified:!!l.modifiedText}:null,post:i?{matched:i.results.length,modified:!!i.modifiedText}:null}},environment:e.environment,sdk_version:"1.0.0"})}catch{}};_onLLMStream=t=>{let n=this.runs.get(t.id??"");n&&n.ttft===void 0&&(n.ttft=performance.now()-n.t0)};_onToolCall=t=>{let n=je();if(!n)return;let e=E(),s=t.detail?.toolCall?.name??t.detail?.name??"";try{n.enqueue({event_id:u(),project_id:"",trace_id:e?.traceId??u(),span_id:u(),parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"llamaindex",model:"",operation:`tool.${s||"unknown"}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",tools_used:s?[s]:[],agent_id:e?.agentId,agent_name:e?.agentName,environment:n.environment,sdk_version:"1.0.0"})}catch{}};_onToolResult=t=>{let n=je();if(!n)return;let e=E(),s=t.detail?.toolCall?.name??t.detail?.name??"",r=t.detail?.result??t.detail?.toolResult??"";try{n.enqueue({event_id:u(),project_id:"",trace_id:e?.traceId??u(),span_id:u(),parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"llamaindex",model:"",operation:`tool.${s||"unknown"}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",tools_used:s?[s]:[],tool_call_result:String(r).slice(0,10240),agent_id:e?.agentId,agent_name:e?.agentName,environment:n.environment,sdk_version:"1.0.0"})}catch{}};_onAgentStart=t=>{let n=t.id??u(),e=E();this.runs.set(`agent-${n}`,{t0:performance.now(),traceId:e?.traceId??u(),spanId:u(),parentSpanId:e?.spanId,model:"agent",agentName:t.detail?.agentName??e?.agentName??""})};_onAgentEnd=t=>{let n=this.runs.get(`agent-${t.id??""}`);if(!n)return;this.runs.delete(`agent-${t.id}`);let e=je();if(e)try{e.enqueue({event_id:u(),project_id:"",trace_id:n.traceId,span_id:n.spanId,parent_span_id:n.parentSpanId,timestamp:new Date().toISOString(),provider:"llamaindex",model:"agent",operation:"agent",latency_ms:performance.now()-n.t0,stream:!1,input_tokens:0,output_tokens:0,status:"success",span_kind:"agent",agent_name:n.agentName??t.detail?.agentName??"",environment:e.environment,sdk_version:"1.0.0"})}catch{}};attach(t){t.on("llm-start",this._onLLMStart),t.on("llm-end",this._onLLMEnd),t.on("llm-stream",this._onLLMStream),t.on("llm-tool-call",this._onToolCall),t.on("llm-tool-result",this._onToolResult),t.on("agent-start",this._onAgentStart),t.on("agent-end",this._onAgentEnd)}detach(t){t.off("llm-start",this._onLLMStart),t.off("llm-end",this._onLLMEnd),t.off("llm-stream",this._onLLMStream),t.off("llm-tool-call",this._onToolCall),t.off("llm-tool-result",this._onToolResult),t.off("agent-start",this._onAgentStart),t.off("agent-end",this._onAgentEnd)}};function Ot(a){let t=P(),n=E(),e=n?.traceId??u(),s=u(),r=performance.now(),o=n?.agentId?{agent_id:n.agentId,agent_name:n.agentName,agent_role:n.agentRole,agent_framework:n.agentFramework,parent_agent_id:n.parentAgentId,span_kind:a.span_kind??"general"}:{},d={};return{span:{setEvalScore(l,p){d[l]=p},async end(l){let p=performance.now()-r;try{t.enqueue({event_id:u(),project_id:"",trace_id:e,span_id:s,parent_span_id:n?.spanId,timestamp:new Date().toISOString(),provider:a.provider??"custom",model:a.model??"custom",operation:"custom",latency_ms:p,stream:!1,input_tokens:l.input_tokens??0,output_tokens:l.output_tokens??0,cost_usd:l.cost_usd,status:l.status,error_message:l.error_message?.slice(0,500),environment:t.environment,eval_scores:Object.keys(d).length?d:void 0,sdk_version:"1.0.0",...o})}catch{}}},run:l=>W({traceId:e,spanId:s,userId:n?.userId,sessionId:n?.sessionId,tags:n?.tags,agentId:n?.agentId,agentName:n?.agentName,agentRole:n?.agentRole,agentFramework:n?.agentFramework,parentAgentId:n?.parentAgentId,conversationTurn:n?.conversationTurn,availableTools:n?.availableTools},l)}}var Ee=class{agentId;name;role;framework;tools;constructor(t,n){this.agentId=t,this.name=n.name,this.role=n.role??"specialist",this.framework=n.framework??"custom",this.tools=n.tools??[]}logPlan(t){let n=P(),e=E(),s={event_id:u(),project_id:"",trace_id:e?.traceId??u(),span_id:u(),parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"agent",model:"",operation:`${this.name}.plan`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:n.environment,sdk_version:"1.0.0",agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"planning",planning_steps:t,user_id:e?.userId,session_id:e?.sessionId,tags:e?.tags};n.enqueue(s)}async traceTool(t,n,e){let s=P(),r=E(),o=u(),d=r?.traceId??u(),i=performance.now(),l=this.tools.find(p=>p.name===t);try{let p=await W({traceId:d,spanId:o,userId:r?.userId,sessionId:r?.sessionId,tags:r?.tags,agentId:this.agentId,agentName:this.name,agentRole:this.role,agentFramework:this.framework},()=>e()),c=typeof p=="string"?p:JSON.stringify(p),m={event_id:u(),project_id:"",trace_id:d,span_id:o,parent_span_id:r?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${t}`,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:s.environment,sdk_version:"1.0.0",agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[t],tool_call_id:o,tool_call_args:n,tool_call_result:c.slice(0,10240),tool_definitions:l?[l]:void 0,user_id:r?.userId,session_id:r?.sessionId,tags:r?.tags};return s.enqueue(m),p}catch(p){let c=p instanceof Error?p.message:String(p),m={event_id:u(),project_id:"",trace_id:d,span_id:o,parent_span_id:r?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${t}`,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:c.slice(0,500),environment:s.environment,sdk_version:"1.0.0",agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[t],tool_call_id:o,tool_call_args:n,user_id:r?.userId,session_id:r?.sessionId,tags:r?.tags};throw s.enqueue(m),p}}delegateTo(t,n){let e=P(),s=E(),r={event_id:u(),project_id:"",trace_id:s?.traceId??u(),span_id:u(),parent_span_id:s?.spanId,timestamp:new Date().toISOString(),provider:"agent",model:"",operation:`${this.name}.delegate\u2192${t}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:e.environment,sdk_version:"1.0.0",agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"handoff",delegation_reason:n,user_id:s?.userId,session_id:s?.sessionId,tags:s?.tags};e.enqueue(r)}};function At(a,t){let n=P(),e=E(),s=u(),r=e?.traceId??u(),o=u(),d={event_id:u(),project_id:"",trace_id:r,span_id:o,parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"agent",model:"",operation:`agent.${a.name}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:n.environment,sdk_version:"1.0.0",agent_id:s,agent_name:a.name,agent_role:a.role??"specialist",agent_framework:a.framework??"custom",parent_agent_id:e?.agentId,span_kind:"agent",tool_definitions:a.tools,delegation_reason:e?.agentId?"delegated":"root",user_id:e?.userId,session_id:e?.sessionId,tags:e?.tags,metadata:a.metadata};return n.enqueue(d),W({traceId:r,spanId:o,userId:e?.userId,sessionId:e?.sessionId,tags:e?.tags,agentId:s,agentName:a.name,agentRole:a.role??"specialist",agentFramework:a.framework??"custom",parentAgentId:e?.agentId,availableTools:a.tools},()=>t(new Ee(s,a)))}var vn=require("@opentelemetry/api"),at=class{onStart(t,n){let e=vn.propagation.getBaggage(n);e&&e.getAllEntries().forEach(([s,r])=>{t.setAttribute(`baggage.${s}`,r.value)})}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}};var _e=require("@opentelemetry/api");function Ge(a,t,n){let e={};t&&(e["agent.delegation.reason"]=t),n&&(e["agent.task"]=n);let s=_e.context.active();if(Object.keys(e).length>0){let r=_e.propagation.getBaggage(s)??_e.propagation.createBaggage();for(let[o,d]of Object.entries(e))r=r.setEntry(o,{value:d});s=_e.propagation.setBaggage(s,r)}_e.propagation.inject(s,a)}function De(a){return _e.propagation.extract(_e.context.active(),a)}var Sn={OTEL_EXPORTER_OTLP_ENDPOINT:"http://localhost:4318",OTEL_SERVICE_NAME:"crewai-agent"};function wn(){return`
|
|
1
|
+
"use strict";var Tn=Object.create;var Le=Object.defineProperty;var On=Object.getOwnPropertyDescriptor;var An=Object.getOwnPropertyNames;var Rn=Object.getPrototypeOf,Nn=Object.prototype.hasOwnProperty;var Mn=(a,t)=>{for(var n in t)Le(a,n,{get:t[n],enumerable:!0})},Nt=(a,t,n,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of An(t))!Nn.call(a,s)&&s!==n&&Le(a,s,{get:()=>t[s],enumerable:!(e=On(t,s))||e.enumerable});return a};var ct=(a,t,n)=>(n=a!=null?Tn(Rn(a)):{},Nt(t||!a||!a.__esModule?Le(n,"default",{value:a,enumerable:!0}):n,a)),Pn=a=>Nt(Le({},"__esModule",{value:!0}),a);var ss={};Mn(ss,{AgentContext:()=>Ge,BaggageSpanProcessor:()=>it,CREWAI_OTEL_ENV:()=>vn,GuardrailBlockedError:()=>V,PromptClient:()=>ve,SpanKind:()=>X.SpanKind,SpanStatusCode:()=>X.SpanStatusCode,ZespanADKCallbackHandler:()=>je,ZespanCallbackHandler:()=>Pe,ZespanClient:()=>Re,ZespanLlamaIndexHandler:()=>De,attachTraceToAutoGenMessage:()=>bn,autopatch:()=>Ae,createSpan:()=>dt,extractAgentContext:()=>Ke,extractAutoGenContext:()=>Ke,extractTraceFromAutoGenMessage:()=>xn,getCrewAIInstrumentationGuide:()=>wn,getPydanticAIConfig:()=>Cn,getTracer:()=>ye,getZespanClient:()=>D,getZespanVercelTelemetry:()=>Ot,init:()=>Vt,initOTel:()=>Ce,initZespan:()=>Xe,injectAgentContext:()=>qe,injectAutoGenContext:()=>qe,instrumentADK:()=>vt,instrumentVercelAI:()=>at,markFrameworkActive:()=>ie,markFrameworkInactive:()=>se,startSpan:()=>At,withAgent:()=>Rt,withSpan:()=>lt,withZespan:()=>$t,withZespanContext:()=>Je,withZespanTrace:()=>Ze,wrapADKAgent:()=>Fe,wrapADKRunner:()=>ot,wrapAnthropic:()=>ft,wrapBedrock:()=>sn,wrapGoogle:()=>yt,wrapGroq:()=>cn,wrapLiteLLM:()=>dn,wrapMistral:()=>on,wrapOpenAI:()=>Ne,wrapOpenRouter:()=>It,wrapZespanADKAgent:()=>wt,zespan:()=>ns});module.exports=Pn(ss);var Mt=require("zlib"),ze=class{constructor(t,n,e){this.c=t;this.cfg=n;this.configClient=e??null,this.maxQueueSize=n.maxQueueSize??1e4,this.timer=setInterval(()=>this.flush(),n.flushInterval),this.timer.unref&&this.timer.unref()}queue=[];timer=null;flushing=!1;consecutiveFlushFailures=0;configClient;maxQueueSize;push(t){this.queue.length>=this.maxQueueSize&&(this.queue.shift(),this.c.debug&&console.warn("[zespan] queue full, dropping oldest event")),this.queue.push(t),this.c.debug&&console.log(`[zespan] event queued: ${t.operation} span_kind=${t.span_kind??"llm"} trace=${t.trace_id?.slice(0,8)} tokens=${t.input_tokens}in/${t.output_tokens}out status=${t.status}`),this.queue.length>=this.cfg.maxSize&&this.flush()}async flush(){if(!this.queue.length||this.flushing)return;this.flushing=!0;let t=this.queue.slice(),n=(0,Mt.gzipSync)(Buffer.from(t.map(e=>JSON.stringify(e)).join(`
|
|
2
|
+
`)));try{let e=await this._post(n,0);e.ok?(this.queue.splice(0,t.length),this.c.debug&&console.log(`[zespan] flushed ${t.length} event(s) \u2192 ${this.c.endpoint}`),this.consecutiveFlushFailures>0&&this.c.debug&&console.warn("[zespan] ingest recovered",{recoveredBatchSize:t.length,queuedEvents:this.queue.length,priorFailures:this.consecutiveFlushFailures}),this.consecutiveFlushFailures=0):(this.consecutiveFlushFailures+=1,(this.c.debug||this.consecutiveFlushFailures===1||this.consecutiveFlushFailures%5===0)&&console.error("[zespan] ingest flush failed; retaining events for retry",{retriable:e.retriable,status:e.status??null,error:e.error??null,queuedEvents:this.queue.length,failedBatchSize:t.length,consecutiveFailures:this.consecutiveFlushFailures}))}finally{this.flushing=!1}}async _post(t,n){let e=s=>new Promise(r=>setTimeout(r,s));try{let s=await fetch(this.c.endpoint,{method:"POST",body:t,headers:{"x-api-key":this.c.apiKey,"content-type":"application/x-ndjson","content-encoding":"gzip"}});if(s.ok){try{let r=await s.json();typeof r?.cv=="number"&&this.configClient&&this.configClient.checkVersion(r.cv)}catch{}return{ok:!0,retriable:!1}}return s.status===429&&n<3?(await e(Number(s.headers.get("retry-after")??5)*1e3),this._post(t,n+1)):s.status>=500&&n<3?(await e(2**n*1e3),this._post(t,n+1)):s.status===429||s.status>=500?(this.c.debug&&console.error("[zespan] retryable ingest failure",{status:s.status,attempt:n}),{ok:!1,retriable:!0,status:s.status}):(console.error("[zespan] non-retriable ingest failure",{status:s.status}),{ok:!1,retriable:!1,status:s.status})}catch(s){return n<3?(await e(2**n*1e3),this._post(t,n+1)):(this.c.debug&&console.error("[zespan] ingest transport error",s),{ok:!1,retriable:!0,error:s instanceof Error?s.message:String(s)})}}};var X=require("@opentelemetry/api"),jt=require("@opentelemetry/sdk-trace-base"),Ft=require("@opentelemetry/exporter-trace-otlp-http"),Et=require("@opentelemetry/context-async-hooks"),Dt=require("@opentelemetry/core"),Be=null,Pt=null;function Ce(a){let t=a.serviceName??"zespan-sdk",n=new Ft.OTLPTraceExporter({url:a.endpoint??"https://localhost:3001/v1/traces",headers:a.apiKey?{"x-api-key":a.apiKey}:void 0}),e=new jt.BatchSpanProcessor(n,{maxQueueSize:100,maxExportBatchSize:10,exportTimeoutMillis:3e4,scheduledDelayMillis:2e3}),{NodeTracerProvider:s}=require("@opentelemetry/sdk-trace-node"),r=new s({resource:{attributes:{"service.name":t,"service.version":"1.0.0","deployment.environment":a.environment??"production"}}});return r.addSpanProcessor(e),r.register({propagator:new Dt.W3CTraceContextPropagator}),Be=X.trace.getTracer(t,"1.0.0"),Pt=new Et.AsyncHooksContextManager,X.context.setGlobalContextManager(Pt.enable()),{tracer:Be,provider:r}}function ye(){if(!Be)throw new Error("OTel not initialized. Call initOTel() first.");return Be}function dt(a){return ye().startSpan(a.name,{kind:a.kind??X.SpanKind.INTERNAL,attributes:a.attributes??{}})}async function lt(a,t,n){let s=ye().startSpan(a,{kind:n?.kind??X.SpanKind.INTERNAL,attributes:n?.attributes??{}});try{let r=await t(s);return s.setStatus({code:X.SpanStatusCode.OK}),s.end(),r}catch(r){throw s.setStatus({code:X.SpanStatusCode.ERROR,message:r.message}),s.recordException(r),s.end(),r}}var Gt=require("crypto"),ve=class{constructor(t){this.client=t}cache=new Map;cacheTTL=300*1e3;async get(t,n={}){let{version:e,label:s,cache:r=!0}=n;if(r){let m=this.getCacheKey(t,e,s),_=this.cache.get(m);if(_&&Date.now()-_.timestamp<this.cacheTTL)return _.prompt}let o=new URLSearchParams;e!==void 0&&o.set("version",e.toString()),s&&o.set("label",s);let c=`${this.client.baseURL}/v1/prompts/${encodeURIComponent(t)}?${o}`,i=await fetch(c,{headers:{"x-api-key":this.client.apiKey}});if(!i.ok)throw new Error(`Failed to fetch prompt: ${i.statusText}`);let l=await i.json(),u=(0,Gt.createHash)("sha256").update(JSON.stringify(l.prompt)).digest("hex"),d={...l,promptHash:u};if(r){let m=this.getCacheKey(t,e,s);this.cache.set(m,{prompt:d,timestamp:Date.now()})}return d}async list(t){let n=new URLSearchParams;t&&n.set("name",t);let e=`${this.client.baseURL}/v1/prompts?${n}`,s=await fetch(e,{headers:{"x-api-key":this.client.apiKey}});if(!s.ok)throw new Error(`Failed to list prompts: ${s.statusText}`);return(await s.json()).prompts||[]}async create(t){let n=`${this.client.baseURL}/v1/prompts`,e=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.client.apiKey},body:JSON.stringify(t)});if(!e.ok)throw new Error(`Failed to create prompt: ${e.statusText}`);let s=await e.json();return this.invalidateCache(t.name),s}async updateLabels(t,n,e){let s=`${this.client.baseURL}/v1/prompts/${encodeURIComponent(t)}/versions/${n}/labels`,r=await fetch(s,{method:"PATCH",headers:{"Content-Type":"application/json","x-api-key":this.client.apiKey},body:JSON.stringify({labels:e})});if(!r.ok)throw new Error(`Failed to update labels: ${r.statusText}`);let o=await r.json();return this.invalidateCache(t),o}compile(t,n){if(t.type==="text"){let e=typeof t.prompt=="string"?t.prompt:t.prompt.content;return Object.entries(n).forEach(([s,r])=>{e=e.replace(new RegExp(`\\{\\{${s}\\}\\}`,"g"),r)}),e}return JSON.stringify(t.prompt)}clearCache(t){t?this.invalidateCache(t):this.cache.clear()}getCacheKey(t,n,e){return n!==void 0?`${t}:v${n}`:e?`${t}:label:${e}`:`${t}:latest`}invalidateCache(t){let n=[];for(let e of this.cache.keys())e.startsWith(`${t}:`)&&n.push(e);n.forEach(e=>this.cache.delete(e))}};var jn="[REDACTED]",qt=a=>a.toLowerCase().replace(/[^a-z0-9]/g,""),Fn=a=>{let t=new Set;for(let n of a){let e=qt(String(n));e&&t.add(e)}return t},$e=(a,t)=>{if(Array.isArray(a))return a.map(s=>$e(s,t));if(!a||typeof a!="object")return a;let n=a,e={};for(let[s,r]of Object.entries(n)){if(t.has(qt(s))){e[s]=jn;continue}e[s]=$e(r,t)}return e},Kt=(a,t)=>{if(a==null)return"";let n=Fn(t);if(typeof a=="string")try{let e=JSON.parse(a);return e&&typeof e=="object"?JSON.stringify($e(e,n)):a}catch{return a}return JSON.stringify($e(a,n))};function Lt(){return{modelOverrides:new Map,cacheConfig:new Map,rateLimits:new Map,guardrailOverrides:new Map,samplingRate:1,promptVersions:new Map,fallbacks:new Map,retryPolicies:new Map,timeouts:new Map,concurrencyLimits:new Map,abTests:new Map}}function we(a,t){if(a.size!==t.size)return!1;for(let[n,e]of a){let s=t.get(n);if(typeof e=="object"&&e!==null&&typeof s=="object"&&s!==null){if(JSON.stringify(e)!==JSON.stringify(s))return!1}else if(s!==e)return!1}return!0}var We=class{localVersion=0;config=Lt();listeners=new Map;fetching=!1;baseUrl;apiKey;projectId;constructor(t){this.baseUrl=t.baseUrl.replace(/\/+$/,""),this.apiKey=t.apiKey,this.projectId=t.projectId}checkVersion(t){t>this.localVersion&&!this.fetching&&(this.fetching=!0,this.fetchConfig().then(n=>{n&&(this.localVersion=t,this.applyFullConfig(n))}).catch(()=>{}).finally(()=>{this.fetching=!1}))}getModel(t,n){return this.config.modelOverrides.get(t)??n}getCacheConfig(t){return this.config.cacheConfig.get(t)??null}getSamplingRate(){return this.config.samplingRate}getRuntimeConfig(){return this.config}getLocalVersion(){return this.localVersion}getFallback(t){return this.config.fallbacks.get(t)??null}getRetryPolicy(t){return this.config.retryPolicies.get(t)??null}getTimeout(t){return this.config.timeouts.get(t)??null}getConcurrencyLimit(t){return this.config.concurrencyLimits.get(t)??null}getAbTest(t){return this.config.abTests.get(t)??null}on(t,n){let e=this.listeners.get(t)??[];e.push(n),this.listeners.set(t,e)}emit(t,n){let e=this.listeners.get(t);if(e)for(let s of e)try{s(n)}catch{}}async fetchConfig(){try{let t=`${this.baseUrl}/v1/sdk/config?projectId=${encodeURIComponent(this.projectId)}`,n=await fetch(t,{headers:{"x-api-key":this.apiKey}});return n.ok?(await n.json()).config??null:null}catch{return null}}applyFullConfig(t){let n=this.config,e=this.parseSnapshot(t);this.config=e,we(n.modelOverrides,e.modelOverrides)||this.emit("model_override",Object.fromEntries(e.modelOverrides)),n.samplingRate!==e.samplingRate&&this.emit("sampling_config",{samplingRate:e.samplingRate}),we(n.cacheConfig,e.cacheConfig)||this.emit("cache_config",Object.fromEntries(e.cacheConfig)),we(n.fallbacks,e.fallbacks)||this.emit("fallback_config",Object.fromEntries(e.fallbacks)),we(n.retryPolicies,e.retryPolicies)||this.emit("retry_config",Object.fromEntries(e.retryPolicies)),we(n.timeouts,e.timeouts)||this.emit("timeout_config",Object.fromEntries(e.timeouts)),we(n.abTests,e.abTests)||this.emit("ab_test_config",Object.fromEntries(e.abTests))}parseSnapshot(t){let n=Lt();for(let[e,s]of Object.entries(t))try{let r=typeof s=="string"?JSON.parse(s):s;if(e.startsWith("model_override.")){let o=e.slice(15),c=typeof r=="string"?r:r?.model??r?.value;typeof c=="string"&&n.modelOverrides.set(o,c)}else if(e.startsWith("cache.")){let o=e.slice(6);n.cacheConfig.set(o,{enabled:r?.enabled??!0,ttlSeconds:typeof r?.ttlSeconds=="number"?r.ttlSeconds:300,similarityThreshold:typeof r?.similarityThreshold=="number"?r.similarityThreshold:.85})}else if(e.startsWith("ratelimit.")){let o=e.slice(10);n.rateLimits.set(o,{maxRequests:typeof r?.maxRequests=="number"?r.maxRequests:100,windowSeconds:typeof r?.windowSeconds=="number"?r.windowSeconds:60})}else if(e.startsWith("guardrail.")&&!e.startsWith("guardrail_mode.")){let o=e.slice(10);n.guardrailOverrides.set(o,!!(r?.enabled??r))}else if(e.startsWith("sampling.")){let o=typeof r=="number"?r:r?.rate??r?.sampleRate;typeof o=="number"&&o>=0&&o<=1&&(n.samplingRate=o)}else if(e.startsWith("prompt_version.")){let o=e.slice(15),c=typeof r=="number"?r:r?.version;typeof c=="number"&&n.promptVersions.set(o,c)}else if(e.startsWith("fallback.")){let o=e.slice(9),c=typeof r?.model=="string"?r.model:null,i=Array.isArray(r?.conditions)?r.conditions.filter(l=>typeof l=="string"):[];c&&n.fallbacks.set(o,{model:c,conditions:i})}else if(e.startsWith("retry.")){let o=e.slice(6),c=typeof r?.enabled=="boolean"?r.enabled:!1,i=typeof r?.maxRetries=="number"?r.maxRetries:3,l=typeof r?.backoffMultiplier=="number"?r.backoffMultiplier:2,u=Array.isArray(r?.retryOnStatusCodes)?r.retryOnStatusCodes.filter(d=>typeof d=="number"):[];n.retryPolicies.set(o,{enabled:c,maxRetries:i,backoffMultiplier:l,retryOnStatusCodes:u})}else if(e.startsWith("timeout.")){let o=e.slice(8),c=typeof r?.timeoutMs=="number"?r.timeoutMs:typeof r=="number"?r:null;typeof c=="number"&&c>0&&n.timeouts.set(o,{timeoutMs:c})}else if(e.startsWith("concurrency.")){let o=e.slice(12),c=typeof r=="number"?r:typeof r?.limit=="number"?r.limit:null;typeof c=="number"&&c>0&&n.concurrencyLimits.set(o,c)}else if(e.startsWith("ab_test.")){let o=e.slice(8),c=typeof r?.candidateModel=="string"?r.candidateModel:null,i=typeof r?.splitPercentage=="number"?r.splitPercentage:null;c&&i!==null&&i>=0&&i<=100&&n.abTests.set(o,{candidateModel:c,splitPercentage:i})}}catch{}return n}};var zt=require("async_hooks"),Bt=require("crypto"),pt=new zt.AsyncLocalStorage,p=()=>(0,Bt.randomUUID)(),G=()=>pt.getStore();function W(a,t){return pt.run(a,t)}function Je(a,t){let n=G(),e={traceId:a.traceId??n?.traceId??p(),spanId:p(),userId:a.userId??n?.userId,sessionId:a.sessionId??n?.sessionId,tags:{...n?.tags,...a.tags},agentId:a.agentId??n?.agentId,agentName:a.agentName??n?.agentName,agentRole:a.agentRole??n?.agentRole,agentFramework:a.agentFramework??n?.agentFramework,parentAgentId:a.agentId?n?.agentId:n?.parentAgentId,conversationTurn:n?.conversationTurn,availableTools:n?.availableTools};return pt.run(e,t)}function Ze(a,t){return Je(t??{},a)}var $t=Ze;var C="1.1.0";function He(){try{return D()}catch{return null}}var mt=new Set;function ie(a){mt.add(a)}function se(a){mt.delete(a)}function Qe(){return mt.size>0}var Ue=!1,Ve=!1,Wt=!1,Te=null,Oe=null,ut=null,fs=(async()=>{try{Te=await import("openai/resources/chat/completions")}catch{}try{Oe=await import("@anthropic-ai/sdk/resources/messages")}catch{}try{ut=await import("@google/generative-ai")}catch{}Ut()})();function Jt(a){async function t(n,e){let s=He();if(!s||Qe())return a.call(this,n,e);let r=performance.now(),o=G(),c=p(),i=o?.traceId??p(),l=n?.model??"unknown",u=n?.stream===!0;try{let d=await a.call(this,n,e);if(u){let m=d[Symbol.asyncIterator]?.bind(d);return m&&(d[Symbol.asyncIterator]=function(){let _=m(),y=0,x=0,b="",k;return{async next(){let{value:I,done:h}=await _.next();return h?(s.enqueue({event_id:p(),project_id:"",trace_id:i,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:l,operation:"chat",latency_ms:performance.now()-r,ttft_ms:k,stream:!0,input_tokens:y,output_tokens:x,finish_reason:b,status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,environment:s.environment,sdk_version:C}),{value:I,done:!0}):(k||(k=performance.now()-r),I?.usage&&(y=I.usage.prompt_tokens??y,x=I.usage.completion_tokens??x),I?.choices?.[0]?.finish_reason&&(b=I.choices[0].finish_reason),{value:I,done:!1})},[Symbol.asyncIterator](){return this}}}),d}return s.enqueue({event_id:p(),project_id:"",trace_id:i,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:d.model??l,operation:"chat",latency_ms:performance.now()-r,stream:!1,input_tokens:d.usage?.prompt_tokens??0,output_tokens:d.usage?.completion_tokens??0,cached_tokens:d.usage?.prompt_tokens_details?.cached_tokens??0,finish_reason:d.choices?.[0]?.finish_reason??"",status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,...s.storePrompts?{prompt_text:s.redactForStorage(n.messages),completion_text:s.redactForStorage(d.choices?.[0]?.message?.content??"")}:{},environment:s.environment,sdk_version:C}),d}catch(d){throw s.enqueue({event_id:p(),project_id:"",trace_id:i,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:l,operation:"chat",latency_ms:performance.now()-r,stream:u,input_tokens:0,output_tokens:0,status:"error",error_code:String(d.status??"unknown"),error_message:String(d.message).slice(0,500),span_kind:"llm",environment:s.environment,sdk_version:C}),d}}return t.__zespanAutoPatched=!0,t}function En(){if(!Ue&&Te)try{let a=Te.Completions;if(!a?.prototype)return;let t=a.prototype.create;if(typeof t=="function"&&!t.__zespanAutoPatched){a.prototype.create=Jt(t),Ue=!0;return}if(typeof t!="function"){if(a.__zespanAutoPatched){Ue=!0;return}let n=a;class e extends n{constructor(...o){if(super(...o),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__zespanAutoPatched){let c=this.create;this.create=Jt(c)}}}e.__zespanAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Te,"Completions");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Te,"Completions",{value:e,writable:!0,enumerable:!0,configurable:!0}),Ue=!0}catch{}}}catch{}}function Zt(a){async function t(n,e){let s=He();if(!s||Qe())return a.call(this,n,e);let r=performance.now(),o=G(),c=p(),i=o?.traceId??p(),l=n?.model??"unknown",u=n?.stream===!0;try{let d=await a.call(this,n,e);if(u){let m=d[Symbol.asyncIterator]?.bind(d);return m&&(d[Symbol.asyncIterator]=function(){let _=m(),y=0,x=0,b="",k;return{async next(){let{value:I,done:h}=await _.next();return h?(s.enqueue({event_id:p(),project_id:"",trace_id:i,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:l,operation:"messages",latency_ms:performance.now()-r,ttft_ms:k,stream:!0,input_tokens:y,output_tokens:x,finish_reason:b,status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,environment:s.environment,sdk_version:C}),{value:I,done:!0}):(k||(k=performance.now()-r),I?.type==="message_delta"&&I?.usage&&(x=I.usage.output_tokens??x),I?.type==="message_start"&&I?.message?.usage&&(y=I.message.usage.input_tokens??y),I?.type==="message_delta"&&I?.delta?.stop_reason&&(b=I.delta.stop_reason),{value:I,done:!1})},[Symbol.asyncIterator](){return this}}}),d}return s.enqueue({event_id:p(),project_id:"",trace_id:i,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:d.model??l,operation:"messages",latency_ms:performance.now()-r,stream:!1,input_tokens:d.usage?.input_tokens??0,output_tokens:d.usage?.output_tokens??0,finish_reason:d.stop_reason??"",status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,...s.storePrompts?{prompt_text:s.redactForStorage(n.messages),completion_text:s.redactForStorage(d.content?.filter(m=>m.type==="text").map(m=>m.text).join("")??"")}:{},environment:s.environment,sdk_version:C}),d}catch(d){throw s.enqueue({event_id:p(),project_id:"",trace_id:i,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:l,operation:"messages",latency_ms:performance.now()-r,stream:u,input_tokens:0,output_tokens:0,status:"error",error_code:String(d.status??"unknown"),error_message:String(d.message).slice(0,500),span_kind:"llm",environment:s.environment,sdk_version:C}),d}}return t.__zespanAutoPatched=!0,t}function Dn(){if(!Ve&&Oe)try{let a=Oe.Messages;if(!a?.prototype)return;let t=a.prototype.create;if(typeof t=="function"&&!t.__zespanAutoPatched){a.prototype.create=Zt(t),Ve=!0;return}if(typeof t!="function"){if(a.__zespanAutoPatched){Ve=!0;return}let n=a;class e extends n{constructor(...o){if(super(...o),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__zespanAutoPatched){let c=this.create;this.create=Zt(c)}}}e.__zespanAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Oe,"Messages");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Oe,"Messages",{value:e,writable:!0,enumerable:!0,configurable:!0}),Ve=!0}catch{}}}catch{}}function Gn(){if(!Wt&&ut)try{let e=function(s,r){let o=n.call(this,s,r),c=o.generateContent?.bind(o),i=o.generateContentStream?.bind(o);return!c||c.__zespanAutoPatched||(o.generateContent=async l=>{let u=He();if(!u||Qe())return c(l);let d=performance.now(),m=G(),_=p(),y=m?.traceId??p(),x=s.model??"gemini-1.5-flash";try{let b=await c(l),k=b.response?.usageMetadata;return u.enqueue({event_id:p(),project_id:"",trace_id:y,span_id:_,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:x,operation:"generateContent",latency_ms:performance.now()-d,stream:!1,input_tokens:k?.promptTokenCount??0,output_tokens:k?.candidatesTokenCount??0,finish_reason:b.response?.candidates?.[0]?.finishReason??"",status:"success",span_kind:"llm",environment:u.environment,sdk_version:C}),b}catch(b){throw u.enqueue({event_id:p(),project_id:"",trace_id:y,span_id:_,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:x,operation:"generateContent",latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:String(b.message).slice(0,500),span_kind:"llm",environment:u.environment,sdk_version:C}),b}},o.generateContent.__zespanAutoPatched=!0,i&&(o.generateContentStream=async l=>{let u=He();if(!u||Qe())return i(l);let d=performance.now(),m=G(),_=p(),y=m?.traceId??p(),x=s.model??"gemini-1.5-flash",b=await i(l),k=b.stream,I=0,h=0,T;return b.stream=(async function*(){try{for await(let g of k){T||(T=performance.now()-d);let A=g.usageMetadata;A&&(I=A.promptTokenCount??I,h=A.candidatesTokenCount??h),yield g}u.enqueue({event_id:p(),project_id:"",trace_id:y,span_id:_,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:x,operation:"generateContent",latency_ms:performance.now()-d,ttft_ms:T,stream:!0,input_tokens:I,output_tokens:h,status:"success",span_kind:"llm",environment:u.environment,sdk_version:C})}catch(g){throw u.enqueue({event_id:p(),project_id:"",trace_id:y,span_id:_,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:x,operation:"generateContent",latency_ms:performance.now()-d,ttft_ms:T,stream:!0,input_tokens:I,output_tokens:h,status:"error",error_message:String(g.message).slice(0,500),span_kind:"llm",environment:u.environment,sdk_version:C}),g}})(),b})),o};var a=e;let t=ut?.GoogleGenerativeAI;if(!t?.prototype?.getGenerativeModel||t.prototype.getGenerativeModel.__zespanAutoPatched)return;let n=t.prototype.getGenerativeModel;e.__zespanAutoPatched=!0,t.prototype.getGenerativeModel=e,Wt=!0}catch{}}function Ut(){En(),Dn(),Gn()}function Ae(){Ut()}var Re=class{apiKey;endpoint;baseURL;environment;storePrompts;redactKeys;sampleRate;debug;enableOTel;prompts;configClient;projectId;batch;_storePromptsDefault;_promptWarningShown=!1;constructor(t){if(!t.apiKey)throw new Error("Zespan: apiKey is required");t.apiKey.startsWith("zsp_")||console.warn("[zespan] API key should start with zsp_ \u2014 check your key"),this.apiKey=t.apiKey,this.baseURL=t.baseURL??"https://api.zespan.com",this.endpoint=t.endpoint??`${this.baseURL.replace(/\/+$/,"")}/v1/ingest`,this.environment=t.environment??"production",this._storePromptsDefault=t.storePrompts===void 0,this.storePrompts=t.storePrompts??!0,this.redactKeys=t.redactKeys??["password","secret","token","api_key"],this.sampleRate=t.sampleRate??1,this.debug=t.debug??!1,this.enableOTel=t.enableOTel??!1,this.projectId=t.projectId,this.prompts=new ve(this),t.enableZespanPilot!==!1&&t.projectId?this.configClient=new We({baseUrl:this.baseURL,apiKey:this.apiKey,projectId:t.projectId}):this.configClient=null,this.batch=new ze(this,{maxSize:t.batchSize??50,flushInterval:t.flushInterval??2e3},this.configClient??void 0),process.once("beforeExit",()=>this.batch.flush()),this.enableOTel&&Ce({endpoint:t.otelEndpoint,serviceName:t.otelServiceName,sampleRate:t.sampleRate,apiKey:this.apiKey,environment:this.environment}),t.autopatch!==!1&&Ae()}enqueue(t){Math.random()>this.sampleRate||(this.storePrompts&&this._storePromptsDefault&&!this._promptWarningShown&&(this._promptWarningShown=!0,console.warn("[zespan] Prompt and completion text is being captured by default. PII (emails, phone numbers, SSNs, credit cards) is automatically redacted server-side. To opt out: { storePrompts: false }")),this.batch.push(t))}redactForStorage(t){return Kt(t,this.redactKeys)}resolveGuardrailsUrl(){let t=this.baseURL.replace(/\/+$/,"");return t.endsWith("/v1")?`${t}/guardrails/check`:`${t}/v1/guardrails/check`}async checkGuardrails(t){let n=await fetch(this.resolveGuardrailsUrl(),{method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey},body:JSON.stringify(t)});if(!n.ok){let s="";try{s=await n.text()}catch{s=""}throw new Error(`Guardrails check failed (${n.status})${s?`: ${s.slice(0,400)}`:""}`)}let e=await n.json();return{allowed:!!e.allowed,results:Array.isArray(e.results)?e.results:[],modifiedText:typeof e.modifiedText=="string"?e.modifiedText:null}}flush(){return this.batch.flush()}createSpan(t){return ye().startSpan(t.name,{kind:t.kind??X.SpanKind.INTERNAL,attributes:t.attributes??{}})}async withSpan(t,n,e){let r=ye().startSpan(t,{kind:e?.kind??X.SpanKind.INTERNAL,attributes:e?.attributes??{}});try{let o=await n(r);return r.setStatus({code:X.SpanStatusCode.OK}),o}catch(o){throw r.setStatus({code:X.SpanStatusCode.ERROR,message:o.message}),r.recordException(o),o}finally{r.end()}}},gt=null,Xe=a=>{gt=new Re(a)},D=()=>{if(!gt)throw new Error("Call zespan.init() first");return gt},Vt=Xe;var V=class extends Error{phase;results;constructor(t,n){super(`Guardrail blocked ${t} content`),this.name="GuardrailBlockedError",this.phase=t,this.results=n}};function ee(a,t){if(!a)return null;if(a===!0)return{pre:!0,post:!0,failClosed:!1,operation:t};let n=typeof a.pre=="boolean"||typeof a.post=="boolean";return{pre:n?!!a.pre:!0,post:n?!!a.post:!0,failClosed:!!a.failClosed,operation:a.operation??t}}function oe(a,t){return t?.modifiedText?t.modifiedText:a}async function Z(a,t,n){if(!t||n.phase==="pre"&&!t.pre||n.phase==="post"&&!t.post)return null;let e=n.text?.trim();if(!e)return null;try{let s=await a.checkGuardrails({...n,text:e.slice(0,5e4),operation:n.operation??t.operation});if(!s.allowed)throw new V(n.phase,s.results);return s}catch(s){if(s instanceof V||t.failClosed)throw s;return null}}function te(a){if(!Array.isArray(a))return{systemPrompt:void 0,conversationMessages:[]};let t=[],n=[];for(let e of a)if((typeof e?.role=="string"?e.role:e?._getType?.()??"")==="system"){let r=typeof e.content=="string"?e.content:Array.isArray(e.content)?e.content.map(o=>typeof o=="string"?o:o?.text??"").filter(Boolean).join(""):JSON.stringify(e.content??"");r&&t.push(r)}else n.push(e);return{systemPrompt:t.length?t.join(`
|
|
3
|
+
`):void 0,conversationMessages:n}}function qn(a){let t={};try{let n=[],e=[];for(let s of a){let r=typeof s?.content=="string"?s.content:Array.isArray(s?.content)?s.content.map(o=>typeof o=="string"?o:o?.text??"").join(" "):"";s?.role==="system"&&n.push(r),e.push(r)}for(let s of n){try{let r=s.match(/You are the (\w+)Agent/i);if(r){t.agent_name=r[1];break}}catch{}try{let r=s.match(/Agent Name:\s*(\w+)/i);if(r){t.agent_name=r[1];break}}catch{}}for(let s of n)try{let r=s.match(/Role:\s*(orchestrator|specialist|planner|executor|critic)/i);if(r?.[1]){t.agent_role=r[1].toLowerCase();break}}catch{}try{a.length>10&&(t.has_memory=!0)}catch{}try{let s=e.join(" ").toLowerCase();(s.includes("think step by step")||s.includes("let's reason")||s.includes("step 1"))&&(t.has_planning=!0)}catch{}}catch{}return t}function ce(a,t){let n=qn(a);try{!n.has_planning&&t&&/^o[13]/.test(t)&&(n.has_planning=!0)}catch{}return n}function de(a){try{let t=a.filter(s=>s?.role==="user").length,n=a[a.length-1],e=typeof n?.role=="string"?n.role:"user";return{conversation_turn:t,message_role:e}}catch{return{conversation_turn:0,message_role:"user"}}}function le(a){try{return a.map(t=>{try{return t?.type==="function"&&t?.function?{name:String(t.function.name??""),description:t.function.description?String(t.function.description):void 0,parameters_schema:t.function.parameters??void 0,source:"function"}:t?.name?{name:String(t.name),description:t.description?String(t.description):void 0,parameters_schema:t.input_schema??t.parameters??void 0,source:"function"}:null}catch{return null}}).filter(t=>t!==null)}catch{return[]}}function Ye(a){try{let t=a?.[0]?.message?.tool_calls??[],n=[],e={};for(let s of t)try{let r=s?.function?.name;if(typeof r=="string"&&r){n.includes(r)||n.push(r);try{e[r]=typeof s.function.arguments=="string"?JSON.parse(s.function.arguments):s.function.arguments??{}}catch{e[r]=s.function?.arguments??{}}}}catch{}return{tools_used:n,tool_call_args:e}}catch{return{tools_used:[],tool_call_args:{}}}}function ke(a){try{let t={};for(let s of a)try{let r=typeof s?.index=="number"?s.index:0;t[r]||(t[r]={name:"",argumentsStr:""}),s?.function?.name&&(t[r].name+=s.function.name),s?.function?.arguments&&(t[r].argumentsStr+=s.function.arguments)}catch{}let n=[],e={};for(let s of Object.values(t))try{let r=s.name;if(r&&!n.includes(r)){n.push(r);try{e[r]=s.argumentsStr?JSON.parse(s.argumentsStr):{}}catch{e[r]=s.argumentsStr}}}catch{}return{tools_used:n,tool_call_args:e}}catch{return{tools_used:[],tool_call_args:{}}}}var Qt=require("crypto"),pe=require("@opentelemetry/api");async function be(a,t){if(!t||!t.enabled)return a();let n;for(let e=0;e<=t.maxRetries;e++)try{return await a()}catch(s){if(n=s,t.retryOnStatusCodes.length>0&&!t.retryOnStatusCodes.includes(s?.status))throw s;if(e>=t.maxRetries)break;let r=Math.min(1e3*Math.pow(t.backoffMultiplier,e),3e4);await Kn(r)}throw n}function Kn(a){return new Promise(t=>setTimeout(t,a))}var _t=class{constructor(t){this.max=t;this.counter=t}counter;queue=[];acquire(){return this.counter>0?(this.counter--,Promise.resolve()):new Promise(t=>{this.queue.push(t)})}release(){this.queue.length>0?this.queue.shift()():this.counter++}async run(t){await this.acquire();try{return await t()}finally{this.release()}}},Ht=new Map;function xe(a,t){let n=Ht.get(a);return n||(n=new _t(t),Ht.set(a,n)),n}var et=a=>(0,Qt.createHash)("sha256").update(a).digest("hex");function Ln(a,t,n="openai"){return{"gen_ai.system":n,"gen_ai.model":t,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(a.messages),"gen_ai.request.max_tokens":a.max_tokens,"gen_ai.request.temperature":a.temperature,"gen_ai.request.top_p":a.top_p}}async function*zn(a,t){let{client:n,t0:e,traceId:s,spanId:r,parent:o,params:c,otelSpan:i,model:l,agentCtx:u,autoDetected:d,conversation_turn:m,message_role:_,tool_definitions:y,provider:x,operation:b}=t,k=x??"openai",I,h=0,T=0,g=0,A="",f=l,v=[],w="",j=[],{systemPrompt:O,conversationMessages:S}=te(c.messages??[]);try{for await(let F of a){I||(I=performance.now()-e,n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:k,model:f,operation:b,latency_ms:I,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:et(JSON.stringify(c.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(S),...O?{system_prompt:n.redactForStorage(O)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C,finish_reason:"stream_start",...u,span_kind:"llm",tool_definitions:y,conversation_turn:m,message_role:_,metadata:{auto_detected:Object.keys(d).length?d:void 0}}),i&&i.setAttribute("gen_ai.response.time_to_first_token",I));let P=F.choices?.[0]?.delta?.content;if(P&&(T++,w+=P),F.choices?.[0]?.finish_reason&&(A=F.choices[0].finish_reason),F.model&&(f=F.model),F.usage&&(h=Number(F.usage.prompt_tokens||h||0),T=Number(F.usage.completion_tokens||T||0),g=Number(F.usage.prompt_tokens_details?.cached_tokens||g||0)),F.choices?.[0]?.delta?.tool_calls)for(let B of F.choices[0].delta.tool_calls)j.push(B),B.function?.name&&!v.includes(B.function.name)&&v.push(B.function.name);yield F}let{tools_used:M,tool_call_args:N}=ke(j),q=M.length>0?M:v,R=performance.now()-e;n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:k,model:f,operation:b,latency_ms:R,ttft_ms:I,stream:!0,input_tokens:h,output_tokens:T,cached_tokens:g,status:"success",finish_reason:A||"stream_end",tools_used:q,tool_call_args:Object.keys(N).length?N:void 0,prompt_hash:et(JSON.stringify(c.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(S),completion_text:n.redactForStorage(w),...O?{system_prompt:n.redactForStorage(O)}:{}}:{},...q.length>0&&w?{decision_rationale:w}:{},...u,span_kind:"llm",tool_definitions:y,conversation_turn:m,message_role:_,metadata:{usage:{prompt_tokens:h,completion_tokens:T,cached_tokens:g},auto_detected:Object.keys(d).length?d:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),i&&(i.setAttribute("gen_ai.usage.output_tokens",T),i.setAttribute("gen_ai.usage.total_tokens",T),i.setAttribute("gen_ai.response.finish_reason",A||"stream_end"),i.setAttribute("gen_ai.response.latency",R))}catch(M){throw n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:k,model:f,operation:b,latency_ms:performance.now()-e,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:T,cost_usd:0,status:"error",error_code:String(M.status??"unknown"),error_message:String(M.message).slice(0,500),...u,span_kind:"llm",conversation_turn:m,message_role:_,metadata:{auto_detected:Object.keys(d).length?d:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),i&&(i.setStatus({code:pe.SpanStatusCode.ERROR,message:M.message}),i.recordException(M)),M}}function Ne(a,t={}){let n=a,e=n.chat.completions.create.bind(n.chat.completions),s=ee(t.guardrails,"chat"),r=t.providerOverride??"openai",o=t.operation??"chat";return n.chat.completions.create=async(c,i)=>{let l=D(),u=performance.now(),d=G(),m=p(),_=d?.traceId??p(),y=c.model??"gpt-4",x;if(l.configClient){let S=l.configClient.getAbTest(o);if(S)Math.random()<S.splitPercentage/100?(y=S.candidateModel,x={ab_test:!0,ab_variant:"candidate"}):x={ab_test:!0,ab_variant:"control"},c={...c,model:y};else{let M=l.configClient.getModel(o,y);if(M!==y){let N=y;y=M,c={...c,model:M},l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:r,model:M,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:N,override_model:M},environment:l.environment,sdk_version:C})}}}let b=null,k=null,I=d?.agentId?{agent_id:d.agentId,agent_name:d.agentName,agent_role:d.agentRole,agent_framework:d.agentFramework,parent_agent_id:d.parentAgentId}:{},h=ce(c.messages??[],c.model),{conversation_turn:T,message_role:g}=de(c.messages??[]),A=c.tools?.length?le(c.tools):void 0,f=null,v=l.enableOTel?pe.trace.getTracer("zespan-sdk"):null;v&&(f=v.startSpan(`chat.completions ${y}`,{kind:pe.SpanKind.CLIENT,attributes:Ln(c,y,r)}));let w;if(l.configClient){let S=l.configClient.getTimeout(o);S&&(w=AbortSignal.timeout(S.timeoutMs))}let j=l.configClient?.getRetryPolicy(o)??null,O=l.configClient?.getConcurrencyLimit(o)??null;try{b=await Z(l,s,{text:JSON.stringify(c.messages??[]),phase:"pre",traceId:_,spanId:m,model:y,operation:o,agentName:d?.agentName});let S=()=>be(()=>W({traceId:_,spanId:m,userId:d?.userId,sessionId:d?.sessionId,tags:d?.tags},()=>e(c,w?{...i,signal:w}:i)),j),M=await(O!==null?xe(`${l.projectId??"default"}:${o}`,O).run(S):S());if(c.stream===!0)return zn(M,{client:l,t0:u,traceId:_,spanId:m,parent:d,params:c,otelSpan:f,model:y,agentCtx:I,autoDetected:h,conversation_turn:T,message_role:g,tool_definitions:A,provider:r,operation:o});let{prompt_tokens:q,completion_tokens:R,prompt_tokens_details:F}=M.usage??{},P=F?.cached_tokens??0,B=M.model??c.model,L=M.usage?.completion_tokens_details?.reasoning_tokens,z=M.choices?.[0]?.message?.content||"";k=await Z(l,s,{text:z,phase:"post",traceId:_,spanId:m,model:B,operation:o,agentName:d?.agentName});let Y=oe(z,k);Y!==z&&typeof M?.choices?.[0]?.message?.content=="string"&&(M.choices[0].message.content=Y);let{tools_used:E,tool_call_args:H}=Ye(M.choices??[]),{systemPrompt:K,conversationMessages:J}=te(c.messages??[]);return l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:r,model:B,operation:o,latency_ms:performance.now()-u,stream:!1,input_tokens:q??0,output_tokens:R??0,cached_tokens:P,...L?{reasoning_tokens:L}:{},status:"success",finish_reason:M.choices?.[0]?.finish_reason??"",tools_used:E.length>0?E:M.choices?.[0]?.message?.tool_calls?.map(ne=>ne.function.name)??[],tool_call_args:Object.keys(H).length?H:void 0,prompt_hash:et(JSON.stringify(c.messages)),...l.storePrompts?{prompt_text:l.redactForStorage(J),completion_text:l.redactForStorage(Y),...K?{system_prompt:l.redactForStorage(K)}:{}}:{},...E.length>0&&z?{decision_rationale:z}:{},...I,span_kind:"llm",tool_definitions:A,conversation_turn:T,message_role:g,metadata:{usage:M.usage??null,guardrails:{pre:b?{matched:b.results.length,modified:!!b.modifiedText}:null,post:k?{matched:k.results.length,modified:!!k.modifiedText}:null},auto_detected:Object.keys(h).length?h:void 0,...x??{}},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:l.environment,sdk_version:C}),f&&(f.setAttribute("gen_ai.usage.input_tokens",q??0),f.setAttribute("gen_ai.usage.output_tokens",R??0),f.setAttribute("gen_ai.usage.total_tokens",(q??0)+(R??0)),f.setAttribute("gen_ai.usage.cached_tokens",P),f.setAttribute("gen_ai.response.finish_reason",M.choices?.[0]?.finish_reason??""),f.setAttribute("gen_ai.response.latency",performance.now()-u),f.setStatus({code:pe.SpanStatusCode.OK}),f.end()),M}catch(S){if(S?.name==="TimeoutError"||S?.code==="ABORT_ERR"||w&&w.aborted)throw l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:r,model:c.model,operation:o,latency_ms:performance.now()-u,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(S.message).slice(0,500),...I,span_kind:"llm",conversation_turn:T,message_role:g,metadata:{auto_detected:Object.keys(h).length?h:void 0},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:l.environment,sdk_version:C}),f&&(f.setStatus({code:pe.SpanStatusCode.ERROR,message:S.message}),f.recordException(S),f.end()),S;let N=l.configClient?.getFallback(o)??null;if(N&&N.model){let F=String(S.message??"")+String(S.status??"")+String(S.code??"");if(N.conditions.length===0||N.conditions.some(B=>F.toLowerCase().includes(B.toLowerCase()))){let B=y,L={...c,model:N.model};l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:r,model:N.model,operation:o,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:B,fallback_model:N.model,reason:String(S.message).slice(0,200)},environment:l.environment,sdk_version:C});try{let z=await W({traceId:_,spanId:m,userId:d?.userId,sessionId:d?.sessionId,tags:d?.tags},()=>e(L,i)),{prompt_tokens:Y,completion_tokens:E,prompt_tokens_details:H}=z.usage??{},K=H?.cached_tokens??0,J=z.model??N.model;return l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:r,model:J,operation:o,latency_ms:performance.now()-u,stream:!1,input_tokens:Y??0,output_tokens:E??0,cached_tokens:K,status:"success",finish_reason:z.choices?.[0]?.finish_reason??"",prompt_hash:et(JSON.stringify(c.messages)),...I,span_kind:"llm",conversation_turn:T,message_role:g,metadata:{usage:z.usage??null,fallback_used:!0,original_model:B,auto_detected:Object.keys(h).length?h:void 0},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:l.environment,sdk_version:C}),f&&(f.setStatus({code:pe.SpanStatusCode.OK}),f.end()),z}catch(z){throw f&&(f.setStatus({code:pe.SpanStatusCode.ERROR,message:z.message}),f.recordException(z),f.end()),z}}}let q=S instanceof V,R=q?"error":S.status===429?"rate_limited":S.status===408?"timeout":"error";throw l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:r,model:c.model,operation:o,latency_ms:performance.now()-u,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:R,error_code:q?"guardrail_blocked":String(S.status??"unknown"),error_message:String(S.message).slice(0,500),...I,span_kind:"llm",conversation_turn:T,message_role:g,metadata:{auto_detected:Object.keys(h).length?h:void 0},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:l.environment,sdk_version:C}),f&&(f.setStatus({code:pe.SpanStatusCode.ERROR,message:S.message}),f.recordException(S),f.end()),S}},a}var Xt=require("crypto"),ue=require("@opentelemetry/api");var tt=a=>(0,Xt.createHash)("sha256").update(a).digest("hex");function Bn(a){let t=Array.isArray(a?.messages)?[...a.messages]:[],n=a?.system;if(typeof n=="string"&&n.trim().length>0)return[{role:"system",content:n},...t];if(Array.isArray(n)&&n.length>0){let e=n.map(s=>typeof s=="string"?s:typeof s?.text=="string"?s.text:"").filter(s=>s.length>0).join(`
|
|
4
|
+
`);if(e.length>0)return[{role:"system",content:e},...t]}return t}function $n(a,t){return{"gen_ai.system":"anthropic","gen_ai.model":t,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(a.messages),"gen_ai.request.max_tokens":a.max_tokens,"gen_ai.request.temperature":a.temperature}}async function*Wn(a,t){let{client:n,t0:e,traceId:s,spanId:r,parent:o,params:c,otelSpan:i,agentCtx:l,tool_definitions:u,autoDetected:d,conversation_turn:m,message_role:_,operation:y,detectionMessages:x}=t,b,k=0,I=0,h=0,T=0,g="",A=c.model,f=[],v="",{systemPrompt:w,conversationMessages:j}=te(x);try{for await(let S of a){if(!b&&S.type==="content_block_start"&&(b=performance.now()-e,n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:A,operation:y,latency_ms:b,ttft_ms:b,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:tt(JSON.stringify(x)),...n.storePrompts?{prompt_text:n.redactForStorage(j),...w?{system_prompt:n.redactForStorage(w)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C,finish_reason:"stream_start",...l,span_kind:"llm",tool_definitions:u,conversation_turn:m,message_role:_,metadata:{auto_detected:Object.keys(d).length?d:void 0}}),i&&i.setAttribute("gen_ai.response.time_to_first_token",b)),S.type==="content_block_delta"&&S.delta?.type==="text_delta"&&(T++,v+=S.delta.text||""),S.type==="message_delta"&&S.delta?.stop_reason&&(g=S.delta.stop_reason),S.type==="message_delta"&&S.usage&&(k=Number(S.usage.input_tokens||k||0),T=Number(S.usage.output_tokens||T||0),I=Number(S.usage.cache_read_input_tokens||I||0)),S.type==="message_start"&&S.message?.usage&&(k=Number(S.message.usage.input_tokens||k||0),T=Number(S.message.usage.output_tokens||T||0),I=Number(S.message.usage.cache_read_input_tokens||I||0)),S.type==="content_block_start"&&S.content_block?.type==="tool_use"){let M=S.content_block.name;M&&!f.includes(M)&&f.push(M)}yield S}let O=performance.now()-e;n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:A,operation:y,latency_ms:O,ttft_ms:b,stream:!0,input_tokens:k,output_tokens:T,cached_tokens:I,reasoning_tokens:h,status:"success",finish_reason:g||"stream_end",tools_used:f,prompt_hash:tt(JSON.stringify(x)),...n.storePrompts?{prompt_text:n.redactForStorage(j),completion_text:n.redactForStorage(v),...w?{system_prompt:n.redactForStorage(w)}:{}}:{},...l,span_kind:"llm",tool_definitions:u,conversation_turn:m,message_role:_,metadata:{usage:{input_tokens:k,output_tokens:T,cache_read_input_tokens:I,reasoning_tokens:h},auto_detected:Object.keys(d).length?d:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),i&&(i.setAttribute("gen_ai.usage.output_tokens",T),i.setAttribute("gen_ai.response.finish_reason",g||"stream_end"))}catch(O){throw n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:A,operation:y,latency_ms:performance.now()-e,ttft_ms:b,stream:!0,input_tokens:0,output_tokens:T,cost_usd:0,status:"error",error_code:String(O.status??O.type??"unknown"),error_message:String(O.message).slice(0,500),...l,span_kind:"llm",conversation_turn:m,message_role:_,metadata:{auto_detected:Object.keys(d).length?d:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),i&&(i.setStatus({code:ue.SpanStatusCode.ERROR,message:O.message}),i.recordException(O)),O}}function ft(a,t={}){let n=a,e=n.messages.create.bind(n.messages),s=ee(t.guardrails,"chat"),r=t.operation??"chat";return n.messages.create=async(o,c)=>{let i=D(),l=performance.now(),u=G(),d=p(),m=u?.traceId??p(),_=o.model??"claude-3-5-sonnet-20241022",y;if(i.configClient){let R=i.configClient.getAbTest(r);if(R)Math.random()<R.splitPercentage/100?(_=R.candidateModel,y={ab_test:!0,ab_variant:"candidate"}):y={ab_test:!0,ab_variant:"control"},o={...o,model:_};else{let F=i.configClient.getModel(r,_);if(F!==_){let P=_;_=F,o={...o,model:F},i.enqueue({event_id:p(),project_id:"",trace_id:m,span_id:d,parent_span_id:u?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:F,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:P,override_model:F},environment:i.environment,sdk_version:C})}}}let x=null,b=null,k=Bn(o),{systemPrompt:I,conversationMessages:h}=te(k),T=ce(k,_),{conversation_turn:g,message_role:A}=de(k),f=u?.agentName??T.agent_name,v=u?.agentRole??T.agent_role,w=u?.agentId||f||v?{agent_id:u?.agentId,agent_name:f,agent_role:v,agent_framework:u?.agentFramework,parent_agent_id:u?.parentAgentId}:{},j=o.tools?.length?le(o.tools):void 0,O=null,S=i.enableOTel?ue.trace.getTracer("zespan-sdk"):null;S&&(O=S.startSpan(`messages.create ${_}`,{kind:ue.SpanKind.CLIENT,attributes:$n(o,_)}));let M;if(i.configClient){let R=i.configClient.getTimeout(r);R&&(M=AbortSignal.timeout(R.timeoutMs))}let N=i.configClient?.getRetryPolicy(r)??null,q=i.configClient?.getConcurrencyLimit(r)??null;try{x=await Z(i,s,{text:JSON.stringify(o.messages??[]),phase:"pre",traceId:m,spanId:d,model:_,operation:r,agentName:u?.agentName});let R=()=>be(()=>W({traceId:m,spanId:d,userId:u?.userId,sessionId:u?.sessionId,tags:u?.tags,agentId:u?.agentId,agentName:f,agentRole:v,agentFramework:u?.agentFramework,parentAgentId:u?.parentAgentId,conversationTurn:g,availableTools:j},()=>e(o,M?{...c,signal:M}:c)),N),F=await(q!==null?xe(`${i.projectId??"default"}:${r}`,q).run(R):R());if(o.stream===!0)return Wn(F,{client:i,t0:l,traceId:m,spanId:d,parent:u,params:o,otelSpan:O,agentCtx:w,tool_definitions:j,autoDetected:T,conversation_turn:g,message_role:A,operation:r,detectionMessages:k});let B=F.usage?.input_tokens??0,L=F.usage?.output_tokens??0,z=F.usage?.cache_read_input_tokens??0,Y=F.model??o.model,E=F.content?.find($=>$.type==="text")?.text||"",H=(F.content??[]).filter($=>$.type==="tool_use"),K=H.map($=>$.name).filter(Boolean),J={};for(let $ of H)$.name&&(J[$.name]=$.input??{});b=await Z(i,s,{text:E,phase:"post",traceId:m,spanId:d,model:Y,operation:r,agentName:u?.agentName});let ne=oe(E,b);if(ne!==E){let $=F.content?.find(ae=>ae.type==="text");$&&typeof $.text=="string"&&($.text=ne)}return i.enqueue({event_id:p(),project_id:"",trace_id:m,span_id:d,parent_span_id:u?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:Y,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:B,output_tokens:L,cached_tokens:z,status:"success",finish_reason:F.stop_reason??"",tools_used:K.length>0?K:F.content?.filter($=>$.type==="tool_use").map($=>$.name)??[],tool_call_args:Object.keys(J).length?J:void 0,prompt_hash:tt(JSON.stringify(k)),...i.storePrompts?{prompt_text:i.redactForStorage(h),completion_text:i.redactForStorage(ne),...I?{system_prompt:i.redactForStorage(I)}:{}}:{},...H.length>0&&E?{decision_rationale:E}:{},...w,span_kind:"llm",tool_definitions:j,conversation_turn:g,message_role:A,metadata:{usage:F.usage??null,guardrails:{pre:x?{matched:x.results.length,modified:!!x.modifiedText}:null,post:b?{matched:b.results.length,modified:!!b.modifiedText}:null},auto_detected:Object.keys(T).length?T:void 0,...y??{}},user_id:u?.userId,session_id:u?.sessionId,tags:u?.tags,environment:i.environment,sdk_version:C}),O&&(O.setAttribute("gen_ai.usage.input_tokens",B),O.setAttribute("gen_ai.usage.output_tokens",L),O.setAttribute("gen_ai.usage.cached_tokens",z),O.setAttribute("gen_ai.response.finish_reason",F.stop_reason??""),O.setAttribute("gen_ai.response.latency",performance.now()-l),O.setStatus({code:ue.SpanStatusCode.OK}),O.end()),F}catch(R){if(R?.name==="TimeoutError"||R?.code==="ABORT_ERR"||M&&M.aborted)throw i.enqueue({event_id:p(),project_id:"",trace_id:m,span_id:d,parent_span_id:u?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:o.model,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(R.message).slice(0,500),...w,span_kind:"llm",conversation_turn:g,message_role:A,metadata:{auto_detected:Object.keys(T).length?T:void 0},user_id:u?.userId,session_id:u?.sessionId,tags:u?.tags,environment:i.environment,sdk_version:C}),O&&(O.setStatus({code:ue.SpanStatusCode.ERROR,message:R.message}),O.recordException(R),O.end()),R;let P=i.configClient?.getFallback(r)??null;if(P&&P.model){let z=String(R.message??"")+String(R.status??"")+String(R.code??"");if(P.conditions.length===0||P.conditions.some(E=>z.toLowerCase().includes(E.toLowerCase()))){let E=_,H={...o,model:P.model};i.enqueue({event_id:p(),project_id:"",trace_id:m,span_id:d,parent_span_id:u?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:P.model,operation:r,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:E,fallback_model:P.model,reason:String(R.message).slice(0,200)},environment:i.environment,sdk_version:C});try{let K=await W({traceId:m,spanId:d,userId:u?.userId,sessionId:u?.sessionId,tags:u?.tags},()=>e(H,c)),J=K.usage?.input_tokens??0,ne=K.usage?.output_tokens??0,$=K.usage?.cache_read_input_tokens??0,ae=K.model??P.model;return i.enqueue({event_id:p(),project_id:"",trace_id:m,span_id:d,parent_span_id:u?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:ae,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:J,output_tokens:ne,cached_tokens:$,status:"success",finish_reason:K.stop_reason??"",prompt_hash:tt(JSON.stringify(k)),...w,span_kind:"llm",conversation_turn:g,message_role:A,metadata:{usage:K.usage??null,fallback_used:!0,original_model:E,auto_detected:Object.keys(T).length?T:void 0},user_id:u?.userId,session_id:u?.sessionId,tags:u?.tags,environment:i.environment,sdk_version:C}),O&&(O.setStatus({code:ue.SpanStatusCode.OK}),O.end()),K}catch(K){throw O&&(O.setStatus({code:ue.SpanStatusCode.ERROR,message:K.message}),O.recordException(K),O.end()),K}}}let B=R instanceof V,L=B?"error":R.status===429||R.type==="overloaded_error"?"rate_limited":R.status===408?"timeout":"error";throw i.enqueue({event_id:p(),project_id:"",trace_id:m,span_id:d,parent_span_id:u?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:o.model,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:L,error_code:B?"guardrail_blocked":String(R.status??R.type??"unknown"),error_message:String(R.message).slice(0,500),...w,span_kind:"llm",conversation_turn:g,message_role:A,metadata:{auto_detected:Object.keys(T).length?T:void 0},user_id:u?.userId,session_id:u?.sessionId,tags:u?.tags,environment:i.environment,sdk_version:C}),O&&(O.setStatus({code:ue.SpanStatusCode.ERROR,message:R.message}),O.recordException(R),O.end()),R}},a}var en=require("crypto"),Q=require("@opentelemetry/api");var Me=a=>(0,en.createHash)("sha256").update(a).digest("hex");function nt(a){let t=o=>{if(typeof o=="string")return o;if(Array.isArray(o))return o.map(c=>typeof c=="string"?c:typeof c?.text=="string"?c.text:"").filter(Boolean).join(`
|
|
5
|
+
`);if(o&&typeof o=="object"){if(typeof o.text=="string")return o.text;if(Array.isArray(o.parts))return o.parts.map(c=>typeof c?.text=="string"?c.text:"").filter(Boolean).join(`
|
|
6
|
+
`)}return""},n=a?.contents??a,e=[],s=a?.systemInstruction??a?.system_instruction,r=t(s);if(r.length>0&&e.push({role:"system",content:r}),typeof n=="string")return e.push({role:"user",content:n}),e;if(Array.isArray(n)){for(let o of n){if(typeof o=="string"){e.push({role:"user",content:o});continue}if(o&&typeof o=="object"){let c=typeof o.role=="string"?o.role:"user",i=t(o);i.length>0&&e.push({role:c,content:i})}}return e}if(n&&typeof n=="object"){let o=typeof n.role=="string"?n.role:"user",c=t(n);c.length>0&&e.push({role:o,content:c})}return e}function st(a,t){return{"gen_ai.system":"google","gen_ai.model":t,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(a),"gen_ai.request.max_tokens":a.generationConfig?.maxOutputTokens,"gen_ai.request.temperature":a.generationConfig?.temperature,"gen_ai.request.top_p":a.generationConfig?.topP}}function ht(a){try{if(typeof a?.text=="function"){let n=a.text();if(typeof n=="string"&&n.length>0)return n}}catch{}return(a?.candidates?.[0]?.content?.parts??[]).map(n=>typeof n?.text=="string"?n.text:"").filter(Boolean).join("")}async function*Yt(a,t){let{client:n,t0:e,traceId:s,spanId:r,parent:o,params:c,modelName:i,otelSpan:l,streamResult:u,agentCtx:d,tool_definitions:m,autoDetected:_,conversation_turn:y,message_role:x,operation:b}=t,k,I=0,h=0,T=0,g=0,A="",f=[],v="";try{for await(let S of a){k||(k=performance.now()-e,n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:b,latency_ms:k,ttft_ms:k,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Me(JSON.stringify(c)),...n.storePrompts?{prompt_text:n.redactForStorage(c)}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C,finish_reason:"stream_start",...d,span_kind:"llm",tool_definitions:m,conversation_turn:y,message_role:x,metadata:{auto_detected:Object.keys(_).length?_:void 0}}),l&&l.setAttribute("gen_ai.response.time_to_first_token",k));let M=(typeof S?.text=="function"?S.text():S?.text)||S?.candidates?.[0]?.content?.parts?.map(R=>R?.text||"").join("")||"";M&&(I++,v+=M),S.candidates?.[0]?.finishReason&&(A=S.candidates[0].finishReason);let N=Array.isArray(S?.functionCalls)?S.functionCalls:S?.functionCalls?[S.functionCalls]:[],q=(S?.candidates?.[0]?.content?.parts??[]).map(R=>R?.functionCall).filter(Boolean);for(let R of[...N,...q])R?.name&&!f.includes(R.name)&&f.push(R.name);yield S}let w=await u?.response;w?.usageMetadata&&(h=Number(w.usageMetadata.promptTokenCount||h||0),I=Number(w.usageMetadata.candidatesTokenCount||I||0),T=Number(w.usageMetadata.cachedContentTokenCount||T||0),g=Number(w.usageMetadata.thoughtsTokenCount||g||0));let j=ht(w);j&&(v=j);let O=performance.now()-e;n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:b,latency_ms:O,ttft_ms:k,stream:!0,input_tokens:h,output_tokens:I,cached_tokens:T,reasoning_tokens:g,status:"success",finish_reason:A||"stream_end",tools_used:f,prompt_hash:Me(JSON.stringify(c)),...n.storePrompts?{prompt_text:n.redactForStorage(c),completion_text:n.redactForStorage(v)}:{},...d,span_kind:"llm",tool_definitions:m,conversation_turn:y,message_role:x,metadata:{usage:w?.usageMetadata??{promptTokenCount:h,candidatesTokenCount:I,cachedContentTokenCount:T,thoughtsTokenCount:g},auto_detected:Object.keys(_).length?_:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),l&&(l.setAttribute("gen_ai.completion",v),l.setAttribute("gen_ai.usage.input_tokens",h),l.setAttribute("gen_ai.usage.output_tokens",I),l.setAttribute("gen_ai.usage.total_tokens",h+I),l.setAttribute("gen_ai.usage.cached_tokens",T),l.setAttribute("gen_ai.usage.reasoning_tokens",g),l.setAttribute("gen_ai.response.finish_reason",A||"stream_end"),l.setStatus({code:Q.SpanStatusCode.OK}),l.end())}catch(w){throw n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:b,latency_ms:performance.now()-e,ttft_ms:k,stream:!0,input_tokens:0,output_tokens:I,cost_usd:0,status:"error",error_code:String(w.status??"unknown"),error_message:String(w.message).slice(0,500),...d,span_kind:"llm",conversation_turn:y,message_role:x,metadata:{auto_detected:Object.keys(_).length?_:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),l&&(l.setStatus({code:Q.SpanStatusCode.ERROR,message:w.message}),l.recordException(w),l.end()),w}}function yt(a,t={}){let n=a,e=n.getGenerativeModel.bind(n),s=ee(t.guardrails,"chat"),r=t.operation??"chat";return n.getGenerativeModel=(o,c)=>{let i=o.model,l=D(),u=!1,d=i,m;if(l.configClient){let k=l.configClient.getAbTest(r);if(k)Math.random()<k.splitPercentage/100?(d=i,i=k.candidateModel,o={...o,model:i},u=!0,m={ab_test:!0,ab_variant:"candidate"}):m={ab_test:!0,ab_variant:"control"};else{let I=l.configClient.getModel(r,i);I!==i&&(d=i,i=I,o={...o,model:I},u=!0)}}let _=e(o,c),y=_.generateContent.bind(_);_.generateContent=async(k,I)=>{let h=D(),T=performance.now(),g=G(),A=p(),f=g?.traceId??p(),v=null,w=null,j=nt(k),O=ce(j,i),{conversation_turn:S,message_role:M}=de(j),N=g?.agentName??O.agent_name,q=g?.agentRole??O.agent_role,R=g?.agentId||N||q?{agent_id:g?.agentId,agent_name:N,agent_role:q,agent_framework:g?.agentFramework,parent_agent_id:g?.parentAgentId}:{},F=k?.tools?.length?le(k.tools):void 0,P=null,B=h.enableOTel?Q.trace.getTracer("zespan-sdk"):null;B&&(P=B.startSpan(`generateContent ${i}`,{kind:Q.SpanKind.CLIENT,attributes:st(k,i)})),u&&h.enqueue({event_id:p(),project_id:"",trace_id:f,span_id:A,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:d,override_model:i},environment:h.environment,sdk_version:C});try{v=await Z(h,s,{text:JSON.stringify(k??""),phase:"pre",traceId:f,spanId:A,model:i,operation:r,agentName:g?.agentName});let L;if(h.configClient){let U=h.configClient.getTimeout(r);U&&(L=AbortSignal.timeout(U.timeoutMs))}let z=h.configClient?.getRetryPolicy(r)??null,Y=h.configClient?.getConcurrencyLimit(r)??null,E=()=>be(()=>W({traceId:f,spanId:A,userId:g?.userId,sessionId:g?.sessionId,tags:g?.tags,agentId:g?.agentId,agentName:N,agentRole:q,agentFramework:g?.agentFramework,parentAgentId:g?.parentAgentId,conversationTurn:S,availableTools:F},()=>y(k,L?{...I,signal:L}:I)),z),H=await(Y!==null?xe(`${h.projectId??"default"}:${r}`,Y).run(E):E()),K=H.response,J=K.usageMetadata?.promptTokenCount??0,ne=K.usageMetadata?.candidatesTokenCount??0,$=K.usageMetadata?.cachedContentTokenCount??0,ae=K.usageMetadata?.thoughtsTokenCount??0,he=ht(K),Ie=(K.candidates?.[0]?.content?.parts??[]).filter(U=>U?.functionCall),re=Ie.map(U=>U.functionCall.name).filter(Boolean),me=(K.candidates?.[0]?.content?.parts??[]).filter(U=>U?.text&&!U?.functionCall).map(U=>U.text).join(""),ge={};for(let U of Ie)U.functionCall?.name&&(ge[U.functionCall.name]=U.functionCall.args??{});w=await Z(h,s,{text:he,phase:"post",traceId:f,spanId:A,model:i,operation:r,agentName:g?.agentName});let Se=oe(he,w);return h.enqueue({event_id:p(),project_id:"",trace_id:f,span_id:A,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-T,stream:!1,input_tokens:J,output_tokens:ne,cached_tokens:$,reasoning_tokens:ae,status:"success",finish_reason:K.candidates?.[0]?.finishReason??"",tools_used:re,tool_call_args:Object.keys(ge).length?ge:void 0,prompt_hash:Me(JSON.stringify(k)),...h.storePrompts?{prompt_text:h.redactForStorage(k),completion_text:h.redactForStorage(Se)}:{},...re.length>0&&me?{decision_rationale:me}:{},...R,span_kind:"llm",tool_definitions:F,conversation_turn:S,message_role:M,metadata:{usage:K.usageMetadata??null,guardrails:{pre:v?{matched:v.results.length,modified:!!v.modifiedText}:null,post:w?{matched:w.results.length,modified:!!w.modifiedText}:null},auto_detected:Object.keys(O).length?O:void 0,...m??{}},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:h.environment,sdk_version:C}),P&&(P.setAttribute("gen_ai.completion",Se),P.setAttribute("gen_ai.usage.input_tokens",J),P.setAttribute("gen_ai.usage.output_tokens",ne),P.setAttribute("gen_ai.usage.total_tokens",J+ne),P.setAttribute("gen_ai.usage.cached_tokens",$),P.setAttribute("gen_ai.usage.reasoning_tokens",ae),P.setAttribute("gen_ai.response.finish_reason",K.candidates?.[0]?.finishReason??""),P.setAttribute("gen_ai.response.latency",performance.now()-T),P.setStatus({code:Q.SpanStatusCode.OK}),P.end()),H}catch(L){let z=L.__signal;if(L?.name==="TimeoutError"||L?.code==="ABORT_ERR")throw h.enqueue({event_id:p(),project_id:"",trace_id:f,span_id:A,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-T,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(L.message).slice(0,500),...R,span_kind:"llm",conversation_turn:S,message_role:M,metadata:{auto_detected:Object.keys(O).length?O:void 0},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:h.environment,sdk_version:C}),P&&(P.setStatus({code:Q.SpanStatusCode.ERROR,message:L.message}),P.recordException(L),P.end()),L;let E=h.configClient?.getFallback(r)??null;if(E&&E.model){let J=String(L.message??"")+String(L.status??"")+String(L.code??"");if(E.conditions.length===0||E.conditions.some($=>J.toLowerCase().includes($.toLowerCase()))){let $=i,ae={...o,model:E.model},he=e(ae,c),Ie=he.generateContent.bind(he);h.enqueue({event_id:p(),project_id:"",trace_id:f,span_id:A,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:E.model,operation:r,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:$,fallback_model:E.model,reason:String(L.message).slice(0,200)},environment:h.environment,sdk_version:C});try{let re=await W({traceId:f,spanId:A,userId:g?.userId,sessionId:g?.sessionId,tags:g?.tags},()=>Ie(k,I)),me=re.response,ge=me.usageMetadata?.promptTokenCount??0,Se=me.usageMetadata?.candidatesTokenCount??0,U=me.usageMetadata?.cachedContentTokenCount??0;return h.enqueue({event_id:p(),project_id:"",trace_id:f,span_id:A,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:E.model,operation:r,latency_ms:performance.now()-T,stream:!1,input_tokens:ge,output_tokens:Se,cached_tokens:U,status:"success",finish_reason:me.candidates?.[0]?.finishReason??"",prompt_hash:Me(JSON.stringify(k)),...R,span_kind:"llm",conversation_turn:S,message_role:M,metadata:{usage:me.usageMetadata??null,fallback_used:!0,original_model:$,auto_detected:Object.keys(O).length?O:void 0},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:h.environment,sdk_version:C}),P&&(P.setStatus({code:Q.SpanStatusCode.OK}),P.end()),re}catch(re){throw P&&(P.setStatus({code:Q.SpanStatusCode.ERROR,message:re.message}),P.recordException(re),P.end()),re}}}let H=L instanceof V,K=H?"error":L.status===429?"rate_limited":L.status===408?"timeout":"error";throw h.enqueue({event_id:p(),project_id:"",trace_id:f,span_id:A,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-T,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:K,error_code:H?"guardrail_blocked":String(L.status??"unknown"),error_message:String(L.message).slice(0,500),...R,span_kind:"llm",conversation_turn:S,message_role:M,metadata:{auto_detected:Object.keys(O).length?O:void 0},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:h.environment,sdk_version:C}),P&&(P.setStatus({code:Q.SpanStatusCode.ERROR,message:L.message}),P.recordException(L),P.end()),L}};let x=_.generateContentStream.bind(_);_.generateContentStream=async(k,I)=>{let h=D(),T=performance.now(),g=G(),A=p(),f=g?.traceId??p(),v=nt(k),w=ce(v,i),{conversation_turn:j,message_role:O}=de(v),S=g?.agentName??w.agent_name,M=g?.agentRole??w.agent_role,N=g?.agentId||S||M?{agent_id:g?.agentId,agent_name:S,agent_role:M,agent_framework:g?.agentFramework,parent_agent_id:g?.parentAgentId}:{},q=k?.tools?.length?le(k.tools):void 0,R=null,F=h.enableOTel?Q.trace.getTracer("zespan-sdk"):null;F&&(R=F.startSpan(`generateContentStream ${i}`,{kind:Q.SpanKind.CLIENT,attributes:st(k,i)}));try{let P=await W({traceId:f,spanId:A,userId:g?.userId,sessionId:g?.sessionId,tags:g?.tags,agentId:g?.agentId,agentName:S,agentRole:M,agentFramework:g?.agentFramework,parentAgentId:g?.parentAgentId,conversationTurn:j,availableTools:q},()=>x(k,I));return R&&R.setAttribute("gen_ai.request.stream",!0),P.stream=Yt(P.stream,{client:h,t0:T,traceId:f,spanId:A,parent:g,params:k,modelName:i,otelSpan:R,streamResult:P,agentCtx:N,tool_definitions:q,autoDetected:w,conversation_turn:j,message_role:O,operation:r}),P}catch(P){let B=P instanceof V,L=B?"error":P.status===429?"rate_limited":P.status===408?"timeout":"error";throw h.enqueue({event_id:p(),project_id:"",trace_id:f,span_id:A,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-T,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:L,error_code:B?"guardrail_blocked":String(P.status??"unknown"),error_message:String(P.message).slice(0,500),...N,span_kind:"llm",conversation_turn:j,message_role:O,metadata:{auto_detected:Object.keys(w).length?w:void 0},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:h.environment,sdk_version:C}),R&&(R.setStatus({code:Q.SpanStatusCode.ERROR,message:P.message}),R.recordException(P),R.end()),P}};let b=_.startChat?.bind(_);return b&&(_.startChat=k=>{let I=b(k),h=I.sendMessage?.bind(I),T=I.sendMessageStream?.bind(I);return h&&(I.sendMessage=async(g,A)=>{let f=D(),v=performance.now(),w=G(),j=p(),O=w?.traceId??p(),S={...k||{},message:g},M=null,N=null,q=nt(S),R=ce(q,i),{conversation_turn:F,message_role:P}=de(q),B=w?.agentName??R.agent_name,L=w?.agentRole??R.agent_role,z=w?.agentId||B||L?{agent_id:w?.agentId,agent_name:B,agent_role:L,agent_framework:w?.agentFramework,parent_agent_id:w?.parentAgentId}:{},Y=k?.tools?.length?le(k.tools):void 0,E=null,H=f.enableOTel?Q.trace.getTracer("zespan-sdk"):null;H&&(E=H.startSpan(`sendMessage ${i}`,{kind:Q.SpanKind.CLIENT,attributes:st(S,i)}));try{M=await Z(f,s,{text:JSON.stringify(S),phase:"pre",traceId:O,spanId:j,model:i,operation:r,agentName:w?.agentName});let K=await W({traceId:O,spanId:j,userId:w?.userId,sessionId:w?.sessionId,tags:w?.tags,agentId:w?.agentId,agentName:B,agentRole:L,agentFramework:w?.agentFramework,parentAgentId:w?.parentAgentId,conversationTurn:F,availableTools:Y},()=>h(g,A)),J=K.response,ne=J.usageMetadata?.promptTokenCount??0,$=J.usageMetadata?.candidatesTokenCount??0,ae=J.usageMetadata?.cachedContentTokenCount??0,he=J.usageMetadata?.thoughtsTokenCount??0,Ie=ht(J),re=(J.candidates?.[0]?.content?.parts??[]).filter(U=>U?.functionCall),me=re.map(U=>U.functionCall.name).filter(Boolean),ge={};for(let U of re)U.functionCall?.name&&(ge[U.functionCall.name]=U.functionCall.args??{});N=await Z(f,s,{text:Ie,phase:"post",traceId:O,spanId:j,model:i,operation:r,agentName:w?.agentName});let Se=oe(Ie,N);return f.enqueue({event_id:p(),project_id:"",trace_id:O,span_id:j,parent_span_id:w?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-v,stream:!1,input_tokens:ne,output_tokens:$,cached_tokens:ae,reasoning_tokens:he,status:"success",finish_reason:J.candidates?.[0]?.finishReason??"",tools_used:me,tool_call_args:Object.keys(ge).length?ge:void 0,prompt_hash:Me(JSON.stringify(S)),...f.storePrompts?{prompt_text:f.redactForStorage(S),completion_text:f.redactForStorage(Se)}:{},...z,span_kind:"llm",tool_definitions:Y,conversation_turn:F,message_role:P,metadata:{usage:J.usageMetadata??null,guardrails:{pre:M?{matched:M.results.length,modified:!!M.modifiedText}:null,post:N?{matched:N.results.length,modified:!!N.modifiedText}:null},auto_detected:Object.keys(R).length?R:void 0},user_id:w?.userId,session_id:w?.sessionId,tags:w?.tags,environment:f.environment,sdk_version:C}),E&&(E.setAttribute("gen_ai.completion",Se),E.setAttribute("gen_ai.usage.input_tokens",ne),E.setAttribute("gen_ai.usage.output_tokens",$),E.setAttribute("gen_ai.usage.total_tokens",ne+$),E.setAttribute("gen_ai.usage.cached_tokens",ae),E.setAttribute("gen_ai.usage.reasoning_tokens",he),E.setAttribute("gen_ai.response.finish_reason",J.candidates?.[0]?.finishReason??""),E.setAttribute("gen_ai.response.latency",performance.now()-v),E.setStatus({code:Q.SpanStatusCode.OK}),E.end()),K}catch(K){let J=K instanceof V,ne=J?"error":K.status===429?"rate_limited":K.status===408?"timeout":"error";throw f.enqueue({event_id:p(),project_id:"",trace_id:O,span_id:j,parent_span_id:w?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-v,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:ne,error_code:J?"guardrail_blocked":String(K.status??"unknown"),error_message:String(K.message).slice(0,500),...z,span_kind:"llm",conversation_turn:F,message_role:P,metadata:{auto_detected:Object.keys(R).length?R:void 0},user_id:w?.userId,session_id:w?.sessionId,tags:w?.tags,environment:f.environment,sdk_version:C}),E&&(E.setStatus({code:Q.SpanStatusCode.ERROR,message:K.message}),E.recordException(K),E.end()),K}}),T&&(I.sendMessageStream=async(g,A)=>{let f=D(),v=performance.now(),w=G(),j=p(),O=w?.traceId??p(),S={...k||{},message:g},M=nt(S),N=ce(M,i),{conversation_turn:q,message_role:R}=de(M),F=w?.agentName??N.agent_name,P=w?.agentRole??N.agent_role,B=w?.agentId||F||P?{agent_id:w?.agentId,agent_name:F,agent_role:P,agent_framework:w?.agentFramework,parent_agent_id:w?.parentAgentId}:{},L=k?.tools?.length?le(k.tools):void 0,z=null,Y=f.enableOTel?Q.trace.getTracer("zespan-sdk"):null;Y&&(z=Y.startSpan(`sendMessageStream ${i}`,{kind:Q.SpanKind.CLIENT,attributes:st(S,i)}));try{let E=await W({traceId:O,spanId:j,userId:w?.userId,sessionId:w?.sessionId,tags:w?.tags,agentId:w?.agentId,agentName:F,agentRole:P,agentFramework:w?.agentFramework,parentAgentId:w?.parentAgentId,conversationTurn:q,availableTools:L},()=>T(g,A));return z&&z.setAttribute("gen_ai.request.stream",!0),E.stream=Yt(E.stream,{client:f,t0:v,traceId:O,spanId:j,parent:w,params:S,modelName:i,otelSpan:z,streamResult:E,agentCtx:B,tool_definitions:L,autoDetected:N,conversation_turn:q,message_role:R,operation:r}),E}catch(E){let H=E instanceof V,K=H?"error":E.status===429?"rate_limited":E.status===408?"timeout":"error";throw f.enqueue({event_id:p(),project_id:"",trace_id:O,span_id:j,parent_span_id:w?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:r,latency_ms:performance.now()-v,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:K,error_code:H?"guardrail_blocked":String(E.status??"unknown"),error_message:String(E.message).slice(0,500),...B,span_kind:"llm",conversation_turn:q,message_role:R,metadata:{auto_detected:Object.keys(N).length?N:void 0},user_id:w?.userId,session_id:w?.sessionId,tags:w?.tags,environment:f.environment,sdk_version:C}),z&&(z.setStatus({code:Q.SpanStatusCode.ERROR,message:E.message}),z.recordException(E),z.end()),E}}),I}),_},a}var tn=require("crypto"),_e=require("@opentelemetry/api");var kt=a=>(0,tn.createHash)("sha256").update(a).digest("hex");function Jn(a,t,n,e){let s=Number(a?.usage?.cost);if(Number.isFinite(s))return{cost:s,source:"usage.cost"};let r=a?.headers?.get?.("x-ratelimit-cost"),o=Number.parseFloat(String(r??""));return Number.isFinite(o)?{cost:o,source:"x-ratelimit-cost"}:{cost:0,source:"computed"}}function Zn(a,t){return{"gen_ai.system":"openrouter","gen_ai.model":t,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(a.messages),"gen_ai.request.max_tokens":a.max_tokens,"gen_ai.request.temperature":a.temperature,"gen_ai.request.top_p":a.top_p}}async function*Un(a,t){let{client:n,t0:e,traceId:s,spanId:r,parent:o,params:c,otelSpan:i,agentCtx:l,autoDetected:u,conversation_turn:d,message_role:m,tool_definitions:_}=t,y,x=0,b=0,k=0,I=0,h="",T=c.model,g=[],A="",f=[],{systemPrompt:v,conversationMessages:w}=te(c.messages??[]);try{for await(let N of a){if(y||(y=performance.now()-e,n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:T,operation:"chat",latency_ms:y,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:kt(JSON.stringify(c.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(w),...v?{system_prompt:n.redactForStorage(v)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C,finish_reason:"stream_start",...l,span_kind:"llm",tool_definitions:_,conversation_turn:d,message_role:m,metadata:{auto_detected:Object.keys(u).length?u:void 0}}),i&&i.setAttribute("gen_ai.response.time_to_first_token",y)),N.choices?.[0]?.delta?.content&&(x++,A+=N.choices[0].delta.content),N.choices?.[0]?.finish_reason&&(h=N.choices[0].finish_reason),N.model&&(T=N.model),N.usage){b=Number(N.usage.prompt_tokens||b||0),x=Number(N.usage.completion_tokens||x||0),k=Number(N.usage.prompt_tokens_details?.cached_tokens||k||0);let q=N.usage.completion_tokens_details||{};I=Number(q.reasoning_tokens||I||0)}if(N.choices?.[0]?.delta?.tool_calls)for(let q of N.choices[0].delta.tool_calls)f.push(q),q.function?.name&&!g.includes(q.function.name)&&g.push(q.function.name);yield N}let{tools_used:j,tool_call_args:O}=ke(f),S=j.length>0?j:g,M=performance.now()-e;n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:T,operation:"chat",latency_ms:M,ttft_ms:y,stream:!0,input_tokens:b,output_tokens:x,cached_tokens:k,reasoning_tokens:I,status:"success",finish_reason:h||"stream_end",tools_used:S,tool_call_args:Object.keys(O).length?O:void 0,prompt_hash:kt(JSON.stringify(c.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(w),completion_text:n.redactForStorage(A),...v?{system_prompt:n.redactForStorage(v)}:{}}:{},...l,span_kind:"llm",tool_definitions:_,conversation_turn:d,message_role:m,metadata:{usage:{prompt_tokens:b,completion_tokens:x,cached_tokens:k,reasoning_tokens:I},auto_detected:Object.keys(u).length?u:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),i&&(i.setAttribute("gen_ai.completion",A),i.setAttribute("gen_ai.usage.input_tokens",b),i.setAttribute("gen_ai.usage.output_tokens",x),i.setAttribute("gen_ai.usage.total_tokens",b+x),i.setAttribute("gen_ai.usage.reasoning_tokens",I),i.setAttribute("gen_ai.response.finish_reason",h||"stream_end"),i.setStatus({code:_e.SpanStatusCode.OK}),i.end())}catch(j){throw n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:T,operation:"chat",latency_ms:performance.now()-e,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:x,cost_usd:0,status:"error",error_code:String(j.status??"unknown"),error_message:String(j.message).slice(0,500),...l,span_kind:"llm",conversation_turn:d,message_role:m,metadata:{auto_detected:Object.keys(u).length?u:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),i&&(i.setStatus({code:_e.SpanStatusCode.ERROR,message:j.message}),i.recordException(j),i.end()),j}}function It(a,t={}){let n=a.chat.completions.create,e=ee(t.guardrails,"chat");return a.chat.completions.create=async(s,r)=>{let o=D(),c=performance.now(),i=G(),l=p(),u=i?.traceId??p(),d=s.model??"openrouter\u6A21\u578B",m=null,_=null;if(o.configClient){let g=o.configClient.getModel("chat",d);if(g!==d){let A=d;d=g,s={...s,model:g},o.enqueue({event_id:p(),project_id:"",trace_id:u,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:g,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:A,override_model:g},environment:o.environment,sdk_version:C})}}let y=i?.agentId?{agent_id:i.agentId,agent_name:i.agentName,agent_role:i.agentRole,agent_framework:i.agentFramework,parent_agent_id:i.parentAgentId}:{},x=ce(s.messages??[],s.model),{conversation_turn:b,message_role:k}=de(s.messages??[]),I=s.tools?.length?le(s.tools):void 0,h=null,T=o.enableOTel?_e.trace.getTracer("zespan-sdk"):null;T&&(h=T.startSpan(`chat.completions ${d}`,{kind:_e.SpanKind.CLIENT,attributes:Zn(s,d)}));try{m=await Z(o,e,{text:JSON.stringify(s.messages??[]),phase:"pre",traceId:u,spanId:l,model:d,operation:"chat"});let g=await W({traceId:u,spanId:l,userId:i?.userId,sessionId:i?.sessionId,tags:i?.tags},()=>n.call(a.chat.completions,s,r));if(s.stream===!0)return h&&h.setAttribute("gen_ai.request.stream",!0),Un(g,{client:o,t0:c,traceId:u,spanId:l,parent:i,params:s,otelSpan:h,agentCtx:y,autoDetected:x,conversation_turn:b,message_role:k,tool_definitions:I});let{prompt_tokens:f,completion_tokens:v,completion_tokens_details:w}=g.usage??{},j=w?.reasoning_tokens??0,O=g.model??s.model,{cost:S,source:M}=Jn(g,O,f??0,v??0);g.pricing||(g.pricing={cost_usd:S,source:M});let N=g.choices?.[0]?.message?.content||"";_=await Z(o,e,{text:N,phase:"post",traceId:u,spanId:l,model:O,operation:"chat"});let q=oe(N,_);q!==N&&typeof g?.choices?.[0]?.message?.content=="string"&&(g.choices[0].message.content=q);let{tools_used:R,tool_call_args:F}=Ye(g.choices??[]);return o.enqueue({event_id:p(),project_id:"",trace_id:u,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:O,operation:"chat",latency_ms:performance.now()-c,stream:!1,input_tokens:f??0,output_tokens:v??0,cached_tokens:0,cost_usd:S,status:"success",finish_reason:g.choices?.[0]?.finish_reason??"",tools_used:R.length>0?R:g.choices?.[0]?.message?.tool_calls?.map(P=>P.function.name)??[],tool_call_args:Object.keys(F).length?F:void 0,prompt_hash:kt(JSON.stringify(s.messages)),...o.storePrompts?(()=>{let{systemPrompt:P,conversationMessages:B}=te(s.messages??[]);return{prompt_text:o.redactForStorage(B),completion_text:o.redactForStorage(q),...P?{system_prompt:o.redactForStorage(P)}:{}}})():{},...R.length>0&&N?{decision_rationale:N}:{},...y,span_kind:"llm",tool_definitions:I,conversation_turn:b,message_role:k,metadata:{usage:g.usage??null,pricing:g.pricing??{cost_usd:S,source:M},guardrails:{pre:m?{matched:m.results.length,modified:!!m.modifiedText}:null,post:_?{matched:_.results.length,modified:!!_.modifiedText}:null},auto_detected:Object.keys(x).length?x:void 0},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:o.environment,sdk_version:C}),h&&(h.setAttribute("gen_ai.usage.input_tokens",f??0),h.setAttribute("gen_ai.usage.output_tokens",v??0),h.setAttribute("gen_ai.usage.total_tokens",(f??0)+(v??0)),h.setAttribute("gen_ai.usage.reasoning_tokens",j),h.setAttribute("gen_ai.completion",g.choices?.[0]?.message?.content||""),h.setAttribute("gen_ai.response.finish_reason",g.choices?.[0]?.finish_reason??""),h.setAttribute("gen_ai.response.latency",performance.now()-c),h.setStatus({code:_e.SpanStatusCode.OK}),h.end()),g}catch(g){let A=g instanceof V,f=A?"error":g.status===429?"rate_limited":g.status===408?"timeout":"error";throw o.enqueue({event_id:p(),project_id:"",trace_id:u,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:s.model,operation:"chat",latency_ms:performance.now()-c,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:f,error_code:A?"guardrail_blocked":String(g.status??g.code??"unknown"),error_message:String(g.message).slice(0,500),...y,span_kind:"llm",conversation_turn:b,message_role:k,metadata:{auto_detected:Object.keys(x).length?x:void 0},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:o.environment,sdk_version:C}),h&&(h.setStatus({code:_e.SpanStatusCode.ERROR,message:g.message}),h.recordException(g),h.end()),g}},a}async function*nn(a,t){let{client:n,t0:e,traceId:s,spanId:r,parent:o,model:c,operation:i,input:l}=t,u=0,d=0,m=0,_="",y,x="",b=[],k={},I="",h="",T=l?.messages??[],g=(l?.system??[]).map(f=>f.text??"").filter(Boolean),A=g.length?g.join(`
|
|
7
|
+
`):void 0;try{for await(let f of a){if(y||(y=performance.now()-e,n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:c,operation:i,latency_ms:y,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",finish_reason:"stream_start",span_kind:"llm",...n.storePrompts?{prompt_text:n.redactForStorage(T),...A?{system_prompt:n.redactForStorage(A)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C})),"contentBlockStart"in f){let v=f.contentBlockStart?.start?.toolUse;v?.name&&(I=v.name,h="",b.includes(I)||b.push(I))}else if("contentBlockDelta"in f){let v=f.contentBlockDelta?.delta;v?.text&&(x+=v.text),v?.toolUse?.input&&(h+=v.toolUse.input)}else if("contentBlockStop"in f){if(I){try{k[I]=JSON.parse(h)}catch{k[I]=h}I="",h=""}}else"metadata"in f&&f.metadata?.usage?(u=f.metadata.usage.inputTokens??u,d=f.metadata.usage.outputTokens??d,m=f.metadata.usage.cacheReadInputTokens??m):"messageStop"in f&&f.messageStop?.stopReason&&(_=f.messageStop.stopReason);yield f}n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:c,operation:i,latency_ms:performance.now()-e,ttft_ms:y,stream:!0,input_tokens:u,output_tokens:d,cached_tokens:m,cost_usd:0,status:"success",finish_reason:_||"stream_end",span_kind:"llm",tools_used:b.length?b:void 0,tool_call_args:Object.keys(k).length?k:void 0,...b.length>0&&x?{decision_rationale:x}:{},...n.storePrompts?{prompt_text:n.redactForStorage(T),completion_text:n.redactForStorage(x),...A?{system_prompt:n.redactForStorage(A)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C})}catch(f){throw n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:c,operation:i,latency_ms:performance.now()-e,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:String(f.$metadata?.httpStatusCode??f.name??"unknown"),error_message:String(f.message).slice(0,500),user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),f}}function sn(a,t={}){let n=a,e=t.operation??"chat",s=ee(t.guardrails,e),r=n.converse?.bind(n);r&&(n.converse=async(i,...l)=>{let u=D(),d=performance.now(),m=G(),_=p(),y=m?.traceId??p(),x=i.modelId??"amazon.nova-lite-v1:0";u.configClient&&(x=u.configClient.getModel(e,x),x!==i.modelId&&(i={...i,modelId:x}));let b=JSON.stringify(i.messages??[]);await Z(u,s,{text:b,phase:"pre",traceId:y,spanId:_,model:x,operation:e,agentName:m?.agentName});try{let k=await W({traceId:y,spanId:_,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags},()=>r(i,...l)),I=k.usage??{},h=k.output?.message?.content??[],T=h.filter(v=>v.text).map(v=>v.text).join(""),g=h.filter(v=>v.toolUse),A=g.map(v=>v.toolUse?.name).filter(Boolean),f={};for(let v of g)v.toolUse?.name&&(f[v.toolUse.name]=v.toolUse.input??{});return u.enqueue({event_id:p(),project_id:"",trace_id:y,span_id:_,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:x,operation:e,latency_ms:performance.now()-d,stream:!1,input_tokens:Number(I.inputTokens??0),output_tokens:Number(I.outputTokens??0),cached_tokens:Number(I.cacheReadInputTokens??0),status:"success",finish_reason:k.stopReason??"",span_kind:"llm",tools_used:A.length?A:void 0,tool_call_args:Object.keys(f).length?f:void 0,...u.storePrompts?{prompt_text:u.redactForStorage(i.messages??[]),completion_text:u.redactForStorage(T),...(()=>{let v=(i.system??[]).map(w=>w.text??"").filter(Boolean);return v.length?{system_prompt:u.redactForStorage(v.join(`
|
|
8
|
+
`))}:{}})()}:{},...A.length>0&&T?{decision_rationale:T}:{},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:u.environment,sdk_version:C}),k}catch(k){throw u.enqueue({event_id:p(),project_id:"",trace_id:y,span_id:_,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:x,operation:e,latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:String(k.$metadata?.httpStatusCode??k.name??"unknown"),error_message:String(k.message).slice(0,500),user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:u.environment,sdk_version:C}),k}});let o=n.converseStream?.bind(n);o&&(n.converseStream=async(i,...l)=>{let u=D(),d=performance.now(),m=G(),_=p(),y=m?.traceId??p(),x=i.modelId??"amazon.nova-lite-v1:0",b=await W({traceId:y,spanId:_,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags},()=>o(i,...l));return{...b,stream:nn(b.stream,{client:u,t0:d,traceId:y,spanId:_,parent:m,model:x,operation:e,input:i})}});let c=n.send?.bind(n);return c&&(n.send=async(i,...l)=>{if(!(i?.constructor?.name==="ConverseStreamCommand"||i?.$name==="ConverseStream"))return c(i,...l);let d=D(),m=performance.now(),_=G(),y=p(),x=_?.traceId??p(),b=i?.input?.modelId??"amazon.nova-lite-v1:0",k=await W({traceId:x,spanId:y,userId:_?.userId,sessionId:_?.sessionId,tags:_?.tags},()=>c(i,...l));return{...k,stream:nn(k.stream,{client:d,t0:m,traceId:x,spanId:y,parent:_,model:b,operation:e,input:i.input})}}),a}function on(a,t={}){let n=a,e=t.operation??"chat",s=ee(t.guardrails,e),r=n.chat.complete.bind(n.chat);n.chat.complete=async(c,...i)=>{let l=D(),u=performance.now(),d=G(),m=p(),_=d?.traceId??p(),y=c.model??"mistral-small-latest";l.configClient&&(y=l.configClient.getModel(e,y),y!==c.model&&(c={...c,model:y}));let x=JSON.stringify(c.messages??[]);await Z(l,s,{text:x,phase:"pre",traceId:_,spanId:m,model:y,operation:e});try{let b=await W({traceId:_,spanId:m,userId:d?.userId,sessionId:d?.sessionId,tags:d?.tags},()=>r(c,...i)),k=b.model??y,I=b.usage??{},h=Number(I.promptTokens??0),T=Number(I.completionTokens??0),g=b.choices?.[0]?.finishReason??"",A=b.choices?.[0]?.message?.content??"",f=b.choices?.[0]?.message?.tool_calls??[],v=f.map(S=>S.function?.name).filter(Boolean),w={};for(let S of f)if(S.function?.name)try{w[S.function.name]=JSON.parse(S.function.arguments??"{}")}catch{w[S.function.name]={}}await Z(l,s,{text:A,phase:"post",traceId:_,spanId:m,model:k,operation:e});let{systemPrompt:j,conversationMessages:O}=te(c.messages??[]);return l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:k,operation:e,latency_ms:performance.now()-u,stream:!1,input_tokens:h,output_tokens:T,status:"success",finish_reason:g,span_kind:"llm",tools_used:v.length?v:void 0,tool_call_args:Object.keys(w).length?w:void 0,...l.storePrompts?{prompt_text:l.redactForStorage(O),completion_text:l.redactForStorage(A),...j?{system_prompt:l.redactForStorage(j)}:{}}:{},...v.length>0&&A?{decision_rationale:A}:{},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:l.environment,sdk_version:C}),b}catch(b){throw l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:y,operation:e,latency_ms:performance.now()-u,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(b.message).slice(0,500),user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:l.environment,sdk_version:C}),b}};let o=n.chat.stream?.bind(n.chat);return o&&(n.chat.stream=async function*(c,...i){let l=D(),u=performance.now(),d=G(),m=p(),_=d?.traceId??p(),y=c.model??"mistral-small-latest";l.configClient&&(y=l.configClient.getModel(e,y),y!==c.model&&(c={...c,model:y}));let x=0,b=0,k="",I,h="",T=[],g=[],{systemPrompt:A,conversationMessages:f}=te(c.messages??[]);try{let v=await W({traceId:_,spanId:m,userId:d?.userId,sessionId:d?.sessionId,tags:d?.tags},()=>o(c,...i));for await(let S of v){I||(I=performance.now()-u,l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:y,operation:e,latency_ms:I,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",finish_reason:"stream_start",span_kind:"llm",...l.storePrompts?{prompt_text:l.redactForStorage(f),...A?{system_prompt:l.redactForStorage(A)}:{}}:{},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:l.environment,sdk_version:C}));let M=S.data?.choices?.[0]?.delta?.content;if(M&&(b++,h+=M),S.data?.usage&&(x=S.data.usage.promptTokens??x,b=S.data.usage.completionTokens??b),S.data?.choices?.[0]?.finishReason&&(k=S.data.choices[0].finishReason),S.data?.model&&(y=S.data.model),S.data?.choices?.[0]?.delta?.tool_calls)for(let N of S.data.choices[0].delta.tool_calls)g.push(N),N.function?.name&&!T.includes(N.function.name)&&T.push(N.function.name);yield S}let{tools_used:w,tool_call_args:j}=ke(g),O=w.length>0?w:T;l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:y,operation:e,latency_ms:performance.now()-u,ttft_ms:I,stream:!0,input_tokens:x,output_tokens:b,cost_usd:0,status:"success",finish_reason:k||"stream_end",span_kind:"llm",tools_used:O.length?O:void 0,tool_call_args:Object.keys(j).length?j:void 0,...O.length>0&&h?{decision_rationale:h}:{},...l.storePrompts?{prompt_text:l.redactForStorage(f),completion_text:l.redactForStorage(h),...A?{system_prompt:l.redactForStorage(A)}:{}}:{},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:l.environment,sdk_version:C})}catch(v){throw l.enqueue({event_id:p(),project_id:"",trace_id:_,span_id:m,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:y,operation:e,latency_ms:performance.now()-u,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(v.message).slice(0,500),user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:l.environment,sdk_version:C}),v}}),a}var an=require("crypto");var rn=a=>(0,an.createHash)("sha256").update(a).digest("hex");async function*Vn(a,t){let{client:n,t0:e,traceId:s,spanId:r,parent:o,params:c,model:i,operation:l}=t,u,d=0,m=0,_=0,y="",x="",b=i,k=[],I=[],{systemPrompt:h,conversationMessages:T}=te(c.messages??[]);try{for await(let v of a){u||(u=performance.now()-e,n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:b,operation:l,latency_ms:u,ttft_ms:u,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:rn(JSON.stringify(c.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(T),...h?{system_prompt:n.redactForStorage(h)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C,finish_reason:"stream_start",span_kind:"llm"}));let w=v.choices?.[0]?.delta?.content;if(w&&(m++,x+=w),v.choices?.[0]?.finish_reason&&(y=v.choices[0].finish_reason),v.model&&(b=v.model),v.usage&&(d=Number(v.usage.prompt_tokens||d||0),m=Number(v.usage.completion_tokens||m||0),_=Number(v.usage.prompt_tokens_details?.cached_tokens||_||0)),v.choices?.[0]?.delta?.tool_calls)for(let j of v.choices[0].delta.tool_calls)I.push(j),j.function?.name&&!k.includes(j.function.name)&&k.push(j.function.name);yield v}let{tools_used:g,tool_call_args:A}=ke(I),f=g.length>0?g:k;n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:b,operation:l,latency_ms:performance.now()-e,ttft_ms:u,stream:!0,input_tokens:d,output_tokens:m,cached_tokens:_,status:"success",finish_reason:y||"stream_end",tools_used:f.length?f:void 0,tool_call_args:Object.keys(A).length?A:void 0,...f.length>0&&x?{decision_rationale:x}:{},prompt_hash:rn(JSON.stringify(c.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(T),completion_text:n.redactForStorage(x),...h?{system_prompt:n.redactForStorage(h)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C,span_kind:"llm"})}catch(g){throw n.enqueue({event_id:p(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:b,operation:l,latency_ms:performance.now()-e,ttft_ms:u,stream:!0,input_tokens:0,output_tokens:m,cost_usd:0,status:"error",error_message:String(g.message).slice(0,500),user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:C}),g}}function cn(a,t={}){let n=a,e=n.chat.completions.create.bind(n.chat.completions),s=t.operation??"chat";return n.chat.completions.create=async(r,...o)=>{let c=D(),i=performance.now(),l=G(),u=p(),d=l?.traceId??p(),m=r.model??"llama-3.3-70b-versatile";c.configClient&&(m=c.configClient.getModel(s,m),m!==r.model&&(r={...r,model:m}));try{let _=await W({traceId:d,spanId:u,userId:l?.userId,sessionId:l?.sessionId,tags:l?.tags},()=>e(r,...o));if(r.stream)return Vn(_,{client:c,t0:i,traceId:d,spanId:u,parent:l,params:r,model:m,operation:s});let y=_.usage??{},x=Number(y.prompt_tokens??0),b=Number(y.completion_tokens??0),k=_.choices?.[0]?.finish_reason??"",I=_.choices?.[0]?.message?.content??"",h=_.choices?.[0]?.message?.tool_calls??[],T=h.map(v=>v.function?.name).filter(Boolean),g={};for(let v of h)if(v.function?.name)try{g[v.function.name]=JSON.parse(v.function.arguments??"{}")}catch{g[v.function.name]={}}let{systemPrompt:A,conversationMessages:f}=te(r.messages??[]);return c.enqueue({event_id:p(),project_id:"",trace_id:d,span_id:u,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:m,operation:s,latency_ms:performance.now()-i,stream:!1,input_tokens:x,output_tokens:b,status:"success",finish_reason:k,span_kind:"llm",tools_used:T.length?T:void 0,tool_call_args:Object.keys(g).length?g:void 0,...c.storePrompts?{prompt_text:c.redactForStorage(f),completion_text:c.redactForStorage(I),...A?{system_prompt:c.redactForStorage(A)}:{}}:{},...T.length>0&&I?{decision_rationale:I}:{},user_id:l?.userId,session_id:l?.sessionId,tags:l?.tags,environment:c.environment,sdk_version:C}),_}catch(_){throw c.enqueue({event_id:p(),project_id:"",trace_id:d,span_id:u,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:m,operation:s,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(_.message).slice(0,500),user_id:l?.userId,session_id:l?.sessionId,tags:l?.tags,environment:c.environment,sdk_version:C}),_}},a}function dn(a,t={}){let n=require("openai").default??require("openai"),e=new n({baseURL:a.baseURL,apiKey:a.apiKey??"litellm"});return Ne(e,{...t,providerOverride:"litellm"})}var mn=require("@langchain/core/callbacks/base");var gn=require("crypto");var ln=a=>(0,gn.createHash)("sha256").update(a).digest("hex"),pn=["AgentExecutor","ReactAgent","ToolCallingAgent"],un=["DynamicStructuredTool","StructuredTool","DynamicTool","Tool"],Pe=class extends mn.BaseCallbackHandler{name="ZespanCallbackHandler";guardrailSettings=ee(void 0,"chat");runs=new Map;constructor(t={}){super(),this.guardrailSettings=ee(t.guardrails,"chat")}detectProvider(t){let n=t.toLowerCase();return/gpt|o1-|o3-|davinci|turbo|whisper|dall-e/i.test(n)?"openai":/claude/i.test(n)?"anthropic":/gemini|palm|bard/i.test(n)?"google":/llama|codellama/i.test(n)?"meta":/mistral|mixtral/i.test(n)?"mistralai":/deepseek/i.test(n)?"deepseek":/command/i.test(n)?"cohere":/qwen/i.test(n)?"alibaba":"langchain"}extractToolCalls(t){try{let n=t?.generations?.[0];if(!Array.isArray(n))return[];let e=n[0]?.message;if(!e)return[];let s=e.tool_calls;if(Array.isArray(s)&&s.length>0)return s.map(c=>({name:c.name??"unknown",args:c.args??{},id:c.id}));let r=e.additional_kwargs?.tool_calls;if(Array.isArray(r)&&r.length>0)return r.map(c=>({name:c.function?.name??"unknown",args:c.function?.arguments?JSON.parse(c.function.arguments):{},id:c.id}));let o=e.additional_kwargs?.function_call;return o?[{name:o.name??"unknown",args:o.arguments?JSON.parse(o.arguments):{}}]:[]}catch{return[]}}detectConversationInfo(t,n){let e=n?._zespan_message_count;if(typeof e=="number"&&e>0)return{turns:e,hasMemory:e>2};let s=n?.invocation_params?.messages;if(Array.isArray(s))return{turns:s.length,hasMemory:s.length>2};let o=(JSON.stringify(t).match(/"role"\s*:/g)||[]).length;return o>0?{turns:o,hasMemory:o>2}:{turns:t.length,hasMemory:!1}}detectAgentFromPrompts(t,n){try{let e=JSON.stringify(t)+JSON.stringify(n?.invocation_params?.messages??[])+JSON.stringify(n?._zespan_structured_messages??[]),s=[/you are (?:a |an |the )?([A-Z][A-Za-z]*(?:[_\s][A-Z][A-Za-z]*){0,3}(?:Agent|Bot|Assistant|AI|Specialist|Expert|Analyzer|Manager|Coordinator))/i,/act as (?:a |an |the )?([A-Z][A-Za-z]*(?:[_\s][A-Z][A-Za-z]*){0,3}(?:Agent|Bot|Assistant|AI))/i,/agent[_\s]?name["'\s:=]+["']?([A-Za-z][A-Za-z_\-]+)/i,/role["'\s:=]+["']?([A-Za-z]+(?:Agent|Bot|Assistant))/i,/name["'\s:=]+["']?([A-Za-z]+Agent)/i];for(let r of s){let o=e.match(r);if(o?.[1])return o[1].trim().replace(/[\s]+/g,"_")}return}catch{return}}detectPlanning(t,n){try{let e=t+" "+JSON.stringify(n);if(![/\bstep\s+\d+[:\s]/i,/\bfirst,?\s+(?:I|we|let)/i,/\bthen,?\s+(?:I|we)/i,/\bfinally,?\s+(?:I|we)/i,/\blet me think/i,/\blet'?s break (?:this |it )?down/i,/\bthink(?:ing)? step by step/i,/\bmy (?:plan|approach|strategy)/i,/\bI'?ll start by/i,/<thinking>/i,/<scratchpad>/i,/\bchain.of.thought/i].some(l=>l.test(e)))return{detected:!1};let o=/(?:step\s+\d+[:\s]|^\d+[\.\)]\s+)(.+)/gim,c=[],i;for(;(i=o.exec(t))!==null&&(i[1]&&c.push(i[1].trim().slice(0,200)),!(c.length>=10)););return{detected:!0,steps:c.length>0?c:void 0}}catch{return{detected:!1}}}extractCompletion(t){let n=t?.generations;if(!Array.isArray(n)||n.length===0)return"";let e=n[0];if(!Array.isArray(e)||e.length===0)return"";let s=e[0];if(typeof s?.text=="string")return s.text;let r=s?.message?.content;return typeof r=="string"?r:Array.isArray(r)?r.map(o=>typeof o?.text=="string"?o.text:"").filter(Boolean).join(`
|
|
9
|
+
`):""}async handleChatModelStart(t,n,e,s,r,o,c,i){try{let l=n.map(d=>d.map(m=>{let _=m._getType?.()??m.role??"unknown",y=typeof m.content=="string"?m.content:JSON.stringify(m.content);return`${_}: ${y}`}).join(`
|
|
10
|
+
`)),u=n[0]?.map(d=>({role:d._getType?.()??d.role??"unknown",content:typeof d.content=="string"?d.content:JSON.stringify(d.content),tool_calls:d.tool_calls??d.additional_kwargs?.tool_calls}));await this.handleLLMStart(t,l,e,s,{...r,_zespan_structured_messages:u,_zespan_message_count:n[0]?.length??0})}catch{}}async handleLLMStart(t,n,e,s,r){try{let o=G(),c=D(),i=s?this.runs.get(s):void 0,l=p();ie(l);let u=i?.traceId??o?.traceId??p(),d=r?.invocation_params?.model??r?.invocation_params?.model_name??t.kwargs?.model??t.kwargs?.modelName??t.id?.[t.id.length-1]??"unknown",m=r?.invocation_params?.stream===!0,_=i?.spanKind==="agent"?i.agentId:void 0,y=i?.spanKind==="agent"?i.agentName:void 0;if(!y){let h=this.detectAgentFromPrompts(n,r);h&&(y=h,_=_??p())}let x=r?.invocation_params?.tools??r?.invocation_params?.functions??[],b=x.map(h=>h.function?.name??h.name??"unknown").filter(Boolean),k=this.detectConversationInfo(n,r),I=await Z(c,this.guardrailSettings,{text:JSON.stringify(n??[]),phase:"pre",traceId:u,spanId:l,model:d,operation:"chat"});this.runs.set(e,{t0:performance.now(),traceId:u,spanId:l,parentSpanId:i?.spanId??o?.spanId,model:d,agentId:_,agentName:y,spanKind:"llm",isStreaming:m,parent:o,prompts:n,structuredMessages:r?._zespan_structured_messages,invocationParams:r?.invocation_params,preGuardrailResult:I,toolsAvailable:b,toolSchemas:c.storePrompts?x:void 0,conversationTurns:k.turns,hasMemory:k.hasMemory})}catch(o){if(o instanceof V)throw o}}async handleLLMNewToken(t,n,e){try{let s=this.runs.get(e);if(!s||s.ttft!==void 0)return;s.ttft=performance.now()-s.t0;let r=D();r.enqueue({event_id:p(),project_id:"",trace_id:s.traceId,span_id:s.spanId,parent_span_id:s.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(s.model),model:s.model,operation:"chat",latency_ms:s.ttft,ttft_ms:s.ttft,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",span_kind:"llm",agent_id:s.agentId,agent_name:s.agentName,prompt_hash:ln(JSON.stringify(s.prompts)),...r.storePrompts?(()=>{let{systemPrompt:o,conversationMessages:c}=te(s.structuredMessages??[]);return{prompt_text:r.redactForStorage(c.length?c:s.prompts),...o?{system_prompt:r.redactForStorage(o)}:{}}})():{},metadata:{invocation_params:s.invocationParams??null},user_id:s.parent?.userId,session_id:s.parent?.sessionId,tags:s.parent?.tags,environment:r.environment,sdk_version:C,finish_reason:"stream_start"})}catch{}}async handleLLMEnd(t,n){try{let e=this.runs.get(n);if(!e)return;se(e.spanId),this.runs.delete(n);let s=D(),r=t.llmOutput?.tokenUsage?.promptTokens??t.llmOutput?.usageMetadata?.promptTokenCount??0,o=t.llmOutput?.tokenUsage?.completionTokens??t.llmOutput?.usageMetadata?.candidatesTokenCount??0,c=performance.now()-e.t0,i=this.extractCompletion(t),l=this.extractToolCalls(t),u=t.llmOutput?.tokenUsage?.reasoningTokens??t.llmOutput?.usage?.completion_tokens_details?.reasoning_tokens??t.llmOutput?.reasoningTokens??t.llmOutput?.usageMetadata?.thoughtsTokenCount??0,d=t.llmOutput?.tokenUsage?.cachedTokens??t.llmOutput?.usage?.prompt_tokens_details?.cached_tokens??t.llmOutput?.usageMetadata?.cachedContentTokenCount??0,m=this.detectPlanning(i,e.prompts),_=t.generations?.[0]?.[0]?.generationInfo?.finish_reason??t.generations?.[0]?.[0]?.generationInfo?.finishReason??t.llmOutput?.finish_reason??(e.isStreaming?"stream_end":"stop"),y=await Z(s,this.guardrailSettings,{text:i,phase:"post",traceId:e.traceId,spanId:e.spanId,model:e.model,operation:"chat"}),x=oe(i,y);s.enqueue({event_id:p(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(e.model),model:e.model,operation:"chat",latency_ms:c,ttft_ms:e.ttft,stream:e.isStreaming??!1,input_tokens:r,output_tokens:o,status:"success",span_kind:"llm",agent_id:e.agentId,agent_name:e.agentName,finish_reason:_,prompt_hash:ln(JSON.stringify(e.prompts)),tools_defined:e.toolsAvailable?.length?e.toolsAvailable:void 0,tools_used:l.length>0?l.map(b=>b.name):void 0,tool_calls:l.length>0?l:void 0,conversation_turns:e.conversationTurns,has_memory:e.hasMemory,reasoning_tokens:u>0?u:void 0,has_reasoning:u>0?!0:void 0,cached_tokens:d>0?d:void 0,has_planning:m.detected||void 0,planning_steps:m.steps,...s.storePrompts?(()=>{let{systemPrompt:b,conversationMessages:k}=te(e.structuredMessages??[]);return{prompt_text:s.redactForStorage(k.length?k:e.prompts),completion_text:s.redactForStorage(x),...b?{system_prompt:s.redactForStorage(b)}:{}}})():{},metadata:{usage:t?.llmOutput?.tokenUsage??null,llm_output:t?.llmOutput??null,invocation_params:e.invocationParams??null,guardrails:{pre:e.preGuardrailResult?{matched:e.preGuardrailResult.results.length,modified:!!e.preGuardrailResult.modifiedText}:null,post:y?{matched:y.results.length,modified:!!y.modifiedText}:null}},user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:C})}catch{}}async handleLLMError(t,n){try{let e=this.runs.get(n);if(!e)return;se(e.spanId),this.runs.delete(n);let s=D();s.enqueue({event_id:p(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(e.model),model:e.model,operation:"chat",latency_ms:performance.now()-e.t0,ttft_ms:e.ttft,stream:e.isStreaming??!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",span_kind:"llm",agent_id:e.agentId,agent_name:e.agentName,error_code:t instanceof V?"guardrail_blocked":void 0,error_message:String(t.message).slice(0,1e3),user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:C})}catch{}}async handleChainStart(t,n,e,s){try{let r=G(),o=s?this.runs.get(s):void 0,c=p(),i=o?.traceId??r?.traceId??p(),l=Array.isArray(t?.id)?t.id:[],u=l.some(h=>pn.includes(h)),d=!u&&l.some(h=>un.includes(h)),m=u?"agent":d?"tool":"general",_=u?p():void 0,y=u?l.find(h=>pn.includes(h))??void 0:void 0,x=d?t.name??t.kwargs?.name??l.find(h=>un.includes(h)):void 0,b=d?JSON.stringify(n):void 0,k=o?.spanKind==="agent"?o.agentId:void 0,I=o?.spanKind==="agent"?o.agentName:void 0;this.runs.set(e,{t0:performance.now(),traceId:i,spanId:c,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:_??o?.agentId,agentName:y??o?.agentName,spanKind:m,toolName:x,toolInput:b,prompts:[],parent:r,delegatedFromAgentId:k,delegatedFromAgentName:I})}catch{}}async handleChainEnd(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=D();if(e.spanKind==="tool"){let r=t?.output??t,o=typeof r=="string"?r:JSON.stringify(r);s.enqueue({event_id:p(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${e.toolName??"unknown"}`,latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",agent_id:e.agentId,agent_name:e.agentName,tools_used:e.toolName?[e.toolName]:[],tool_call_id:e.spanId,tool_call_args:e.toolInput?JSON.parse(e.toolInput):void 0,tool_call_result:o.slice(0,10240),stream:!1,finish_reason:"stop",user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:C})}else s.enqueue({event_id:p(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"chain",latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:e.spanKind,agent_id:e.agentId,agent_name:e.agentName,stream:!1,finish_reason:"stop",delegation_from_agent_id:e.delegatedFromAgentId,delegation_from_agent_name:e.delegatedFromAgentName,user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:C})}catch{}}async handleChainError(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=D();s.enqueue({event_id:p(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:e.spanKind==="tool"?`tool.${e.toolName??"unknown"}`:"chain",latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:e.spanKind,agent_id:e.agentId,agent_name:e.agentName,tools_used:e.spanKind==="tool"&&e.toolName?[e.toolName]:void 0,tool_call_id:e.spanKind==="tool"?e.spanId:void 0,tool_call_args:e.spanKind==="tool"&&e.toolInput?JSON.parse(e.toolInput):void 0,error_message:String(t?.message??t).slice(0,1e3),stream:!1,delegation_from_agent_id:e.delegatedFromAgentId,delegation_from_agent_name:e.delegatedFromAgentName,user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:C})}catch{}}async handleToolStart(t,n,e,s){try{let r=G(),o=s?this.runs.get(s):void 0,c=p(),i=o?.traceId??r?.traceId??p(),l=t.id?.[t.id.length-1]??"unknown_tool",u=t.name||t.kwargs?.name||l;this.runs.set(e,{t0:performance.now(),traceId:i,spanId:c,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:o?.agentId,agentName:o?.agentName,spanKind:"tool",toolName:u,toolInput:n,prompts:[],parent:r})}catch{}}async handleToolEnd(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=D(),o=(typeof t=="string"?t:JSON.stringify(t)).slice(0,10240);s.enqueue({event_id:p(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${e.toolName??"unknown"}`,latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",agent_id:e.agentId,agent_name:e.agentName,tools_used:e.toolName?[e.toolName]:[],tool_call_id:e.spanId,tool_call_args:e.toolInput?{input:e.toolInput}:void 0,tool_call_result:o,stream:!1,finish_reason:"stop",user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:C})}catch{}}async handleToolError(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=D();s.enqueue({event_id:p(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${e.toolName??"unknown"}`,latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:"tool",agent_id:e.agentId,agent_name:e.agentName,tools_used:e.toolName?[e.toolName]:[],error_message:String(t?.message??t).slice(0,1e3),stream:!1,user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:C})}catch{}}async handleAgentAction(t,n){try{let e=this.runs.get(n),s=G(),r=D(),o=e?.traceId??s?.traceId??p(),c=p(),i=[t?.tool??"",typeof t?.toolInput=="string"?t.toolInput:JSON.stringify(t?.toolInput??""),t?.log??""].join(" | ");r.enqueue({event_id:p(),project_id:"",trace_id:o,span_id:c,parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"planning",latency_ms:0,input_tokens:0,output_tokens:0,status:"success",span_kind:"planning",agent_id:e?.agentId,agent_name:e?.agentName,planning_steps:[i],...t?.log?{decision_rationale:t.log}:{},stream:!1,user_id:e?.parent?.userId??s?.userId,session_id:e?.parent?.sessionId??s?.sessionId,tags:e?.parent?.tags??s?.tags,environment:r.environment,sdk_version:C})}catch{}}async handleRetrieverStart(t,n,e,s){try{let r=G(),o=s?this.runs.get(s):void 0,c=p(),i=o?.traceId??r?.traceId??p();this.runs.set(e,{t0:performance.now(),traceId:i,spanId:c,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:o?.agentId,agentName:o?.agentName,spanKind:"retriever",query:n,prompts:[],parent:r})}catch{}}async handleRetrieverEnd(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=D();s.enqueue({event_id:p(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"retriever",latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"retriever",agent_id:e.agentId,agent_name:e.agentName,stream:!1,finish_reason:"stop",metadata:{"zespan.rag.contexts":Array.isArray(t)?t:[]},user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:C})}catch{}}async handleRetrieverError(t,n){try{let e=this.runs.get(n);if(!e)return;this.runs.delete(n);let s=D();s.enqueue({event_id:p(),project_id:"",trace_id:e.traceId,span_id:e.spanId,parent_span_id:e.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"retriever",latency_ms:performance.now()-e.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:"retriever",agent_id:e.agentId,agent_name:e.agentName,error_message:String(t?.message??t).slice(0,1e3),stream:!1,user_id:e.parent?.userId,session_id:e.parent?.sessionId,tags:e.parent?.tags,environment:s.environment,sdk_version:C})}catch{}}};function _n(a){let t=a?.model;return typeof t=="string"?t:t&&typeof t=="object"?t.model??t.name??"gemini-2.5-flash":"gemini-2.5-flash"}function Hn(a){let t=a??{};return{input:Number(t.promptTokenCount??t.inputTokenCount??0),output:Number(t.candidatesTokenCount??t.outputTokenCount??0),cached:Number(t.cachedContentTokenCount??0),reasoning:Number(t.thoughtsTokenCount??t.reasoningTokenCount??0)}}var je=class{agentStates=new Map;pendingModelCalls=new Map;toolCallStates=new Map;agentKey(t,n){return`${t}:${n}`}getParentAgentState(t,n){if(n)return this.agentStates.get(this.agentKey(t,n))}beforeAgentCallback=t=>{try{let n=t.invocationId,e=t.agentName,s=t.invocationContext?.agent?.parentAgent?.name,r=G(),o=this.getParentAgentState(n,s),c=o?.traceId??r?.traceId??p(),i=p(),l=o?.spanId??r?.spanId,u=p(),d=_n(t.invocationContext?.agent),m=t.userId||r?.userId,_=t.sessionId||r?.sessionId;this.agentStates.set(this.agentKey(n,e),{t0:performance.now(),traceId:c,spanId:i,parentSpanId:l,agentId:u,agentName:e,model:d,userId:m,sessionId:_,parentAgentId:o?.agentId,parentAgentName:s})}catch{}};afterAgentCallback=t=>{try{let n=t.invocationId,e=t.agentName,s=this.agentKey(n,e),r=this.agentStates.get(s);if(!r)return;this.agentStates.delete(s);let o=!r.parentAgentName,c=D();c.enqueue({event_id:p(),project_id:"",trace_id:r.traceId,span_id:r.spanId,parent_span_id:r.parentSpanId,timestamp:new Date().toISOString(),provider:"google-adk",model:r.model,operation:`agent.${e}`,span_kind:"agent",agent_id:r.agentId,agent_name:e,agent_role:o?"coordinator":"specialist",agent_framework:"google-adk",parent_agent_id:r.parentAgentId,delegation_from_agent_id:r.parentAgentId,delegation_from_agent_name:r.parentAgentName,latency_ms:performance.now()-r.t0,stream:!1,input_tokens:0,output_tokens:0,status:"success",user_id:r.userId,session_id:r.sessionId,environment:c.environment,sdk_version:C})}catch{}};beforeModelCallback=({context:t,request:n})=>{try{let e=t.invocationId,s=t.agentName,r=this.agentStates.get(this.agentKey(e,s)),o=r?.traceId??p(),c=_n(t.invocationContext?.agent),i=n?.config?.systemInstruction,l;if(i){let m=typeof i=="string"?i:(i?.parts??[]).filter(_=>_?.text).map(_=>_.text).join("");m&&(l=m)}let u,d=n?.contents??[];if(d.length){let m=d.map(_=>{let y=_?.role??"user",x=(_?.parts??[]).filter(b=>typeof b?.text=="string"&&!b.thought).map(b=>b.text).join("");return x?`${y}: ${x}`:""}).filter(Boolean).join(`
|
|
11
|
+
`);m&&(u=m)}this.pendingModelCalls.set(this.agentKey(e,s),{t0:performance.now(),spanId:p(),traceId:o,parentSpanId:r?.spanId??"",model:c,agentId:r?.agentId,agentName:s,userId:r?.userId??t.userId,sessionId:r?.sessionId??t.sessionId,promptText:u,systemPrompt:l})}catch{}};afterModelCallback=({context:t,response:n})=>{try{let e=t.invocationId,s=t.agentName,r=this.agentKey(e,s),o=this.pendingModelCalls.get(r);if(!o)return;this.pendingModelCalls.delete(r);let{input:c,output:i,cached:l,reasoning:u}=Hn(n?.usageMetadata),d=n?.content?.parts??[],m=d.filter(x=>typeof x?.text=="string"&&!x.thought).map(x=>x.text).join(""),_=d.filter(x=>x?.functionCall?.name).map(x=>x.functionCall.name),y=D();y.enqueue({event_id:p(),project_id:"",trace_id:o.traceId,span_id:o.spanId,parent_span_id:o.parentSpanId,timestamp:new Date().toISOString(),provider:"google",model:o.model,operation:"chat",span_kind:"llm",agent_id:o.agentId,agent_name:o.agentName,agent_framework:"google-adk",latency_ms:performance.now()-o.t0,stream:!1,input_tokens:c,output_tokens:i,cached_tokens:l||void 0,reasoning_tokens:u||void 0,finish_reason:n?.finishReason??"stop",tools_used:_.length?_:void 0,status:n?.errorCode?"error":"success",error_message:n?.errorMessage,...y.storePrompts&&o.systemPrompt?{system_prompt:y.redactForStorage(o.systemPrompt)}:{},...y.storePrompts&&o.promptText?{prompt_text:y.redactForStorage(o.promptText)}:{},...y.storePrompts&&m?{completion_text:y.redactForStorage(m)}:{},user_id:o.userId,session_id:o.sessionId,environment:y.environment,sdk_version:C})}catch{}};beforeToolCallback=({tool:t,args:n,context:e})=>{try{let s=e.invocationId,r=e.agentName,o=e.functionCallId??p(),c=this.agentStates.get(this.agentKey(s,r));this.toolCallStates.set(o,{t0:performance.now(),spanId:p(),traceId:c?.traceId??p(),parentSpanId:c?.spanId??"",toolName:t?.name??"unknown_tool",args:n??{},agentId:c?.agentId,agentName:r,userId:c?.userId??e.userId,sessionId:c?.sessionId??e.sessionId})}catch{}};afterToolCallback=({tool:t,args:n,context:e,response:s})=>{try{let r=e.functionCallId??"",o=this.toolCallStates.get(r);if(!o)return;this.toolCallStates.delete(r);let c=D();c.enqueue({event_id:p(),project_id:"",trace_id:o.traceId,span_id:o.spanId,parent_span_id:o.parentSpanId,timestamp:new Date().toISOString(),provider:"google-adk",model:"",operation:`tool.${o.toolName}`,span_kind:"tool",agent_id:o.agentId,agent_name:o.agentName,agent_framework:"google-adk",latency_ms:performance.now()-o.t0,stream:!1,input_tokens:0,output_tokens:0,status:"success",tools_used:[o.toolName],tool_call_id:r,tool_call_args:o.args,tool_call_result:JSON.stringify(s??{}).slice(0,10240),user_id:o.userId,session_id:o.sessionId,environment:c.environment,sdk_version:C})}catch{}};get callbacks(){return{beforeAgentCallback:this.beforeAgentCallback,afterAgentCallback:this.afterAgentCallback,beforeModelCallback:this.beforeModelCallback,afterModelCallback:this.afterModelCallback,beforeToolCallback:this.beforeToolCallback,afterToolCallback:this.afterToolCallback}}};var hn=require("crypto");var St=a=>(0,hn.createHash)("sha256").update(typeof a=="string"?a:JSON.stringify(a)).digest("hex");function Qn(a){return a?.model??a?.config?.model??a?.llmConfig?.model??a?.generativeModel?.model??"gemini-2.5-flash"}function yn(a){let t=a?.usageMetadata??a?.usage_metadata??{},n=a?.usage??{};return{input:Number(t.inputTokenCount??t.promptTokenCount??n.input_tokens??n.prompt_tokens??0),output:Number(t.outputTokenCount??t.candidatesTokenCount??n.output_tokens??n.completion_tokens??0),cached:Number(t.cachedContentTokenCount??n.cached_tokens??0),reasoning:Number(t.reasoningTokenCount??t.thinking_token_count??n.reasoning_tokens??0)}}function Xn(a){if(typeof a?.text=="string")return a.text;if(typeof a?.output=="string")return a.output;let n=(a?.candidates?.[0]?.content?.parts??a?.content?.parts??[]).map(e=>typeof e?.text=="string"?e.text:"").filter(Boolean).join("");return n||(a&&typeof a=="object"?JSON.stringify(a):"")}function Yn(a){let t=[];try{let n=a?.candidates?.[0]?.content?.parts??a?.content?.parts??[];for(let e of n)e?.functionCall?.name&&t.push({name:e.functionCall.name,args:e.functionCall.args??{}});for(let e of a?.toolCalls??[])e?.name&&t.push({name:e.name,args:e.args??e.arguments??{}})}catch{}return t}function kn(a){if(a instanceof V)return"guardrail_blocked";let t=String(a?.message??"").toLowerCase();if(/rate.?limit|quota|429/.test(t))return"rate_limited";if(/context.?length|too.?long|max.?token/.test(t))return"context_length";if(/timeout|timed?.?out/.test(t))return"timeout";if(/safety|blocked|harm/.test(t))return"content_filter"}function Fe(a,t={}){let n=a;if(typeof n?.run!="function")return a;let e=n.run.bind(n),s=ee(t.guardrails,"agent"),r=t.agentName??n.name??"ADKAgent",o=t.agentRole??(n.subAgents?.length?"coordinator":"specialist"),c=Qn(n);return t.traceSubAgents!==!1&&Array.isArray(n.subAgents)&&(n.subAgents=n.subAgents.map(i=>Fe(i,{...t,agentRole:"specialist",traceSubAgents:!0}))),n.run=async(i,l)=>{let u=D(),d=performance.now(),m=G(),_=p(),y=p(),x=m?.traceId??p(),b=t.sessionId??m?.sessionId,k=typeof i=="string"?i:JSON.stringify(i??"");return W({traceId:x,spanId:y,userId:m?.userId,sessionId:b,tags:m?.tags,agentId:_,agentName:r,agentRole:o,agentFramework:"google-adk",parentAgentId:m?.agentId},async()=>{try{let I=await Z(u,s,{text:k,phase:"pre",traceId:x,spanId:y,model:c,operation:"agent"}),h=await e(i,l),{input:T,output:g,cached:A,reasoning:f}=yn(h),v=Xn(h),w=Yn(h),j=h?.candidates?.[0]?.finishReason??h?.finish_reason,O=await Z(u,s,{text:v,phase:"post",traceId:x,spanId:y,model:c,operation:"agent"}),S=oe(v,O);return u.enqueue({event_id:p(),project_id:"",trace_id:x,span_id:y,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:"agent",span_kind:"agent",agent_id:_,agent_name:r,agent_role:o,agent_framework:"google-adk",parent_agent_id:m?.agentId,delegation_from_agent_id:m?.agentId,delegation_from_agent_name:m?.agentName,latency_ms:performance.now()-d,stream:!1,input_tokens:T,output_tokens:g,cached_tokens:A||void 0,reasoning_tokens:f||void 0,status:"success",finish_reason:j,tools_used:w.length?w.map(M=>M.name):void 0,tool_call_args:w.length?Object.fromEntries(w.map(M=>[M.name,M.args])):void 0,prompt_hash:St(k),...u.storePrompts?{prompt_text:u.redactForStorage(k),completion_text:u.redactForStorage(S)}:{},...w.length>0&&v?{decision_rationale:v}:{},user_id:m?.userId,session_id:b,tags:m?.tags,environment:u.environment,sdk_version:C,metadata:{guardrails:{pre:I?{matched:I.results.length,modified:!!I.modifiedText}:null,post:O?{matched:O.results.length,modified:!!O.modifiedText}:null}}}),h}catch(I){throw u.enqueue({event_id:p(),project_id:"",trace_id:x,span_id:y,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:"agent",span_kind:"agent",agent_id:_,agent_name:r,agent_role:o,agent_framework:"google-adk",parent_agent_id:m?.agentId,latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:kn(I),error_message:String(I?.message??I).slice(0,500),user_id:m?.userId,session_id:b,tags:m?.tags,environment:u.environment,sdk_version:C}),I}})},a}function ot(a,t={}){let n=a;if(typeof n?.runEphemeral=="function"){let e=n.runEphemeral.bind(n);n.runEphemeral=s=>fn(e(s),s,t)}if(typeof n?.run=="function"){let e=n.run.bind(n);n.run=s=>fn(e(s),s,t)}return a}async function*fn(a,t,n){let e=D(),s=G(),r=s?.traceId??p(),o=p(),c=p(),i=performance.now(),l=n.agentName??"ADKAgent",u=n.agentRole??"coordinator",d=n.model??"gemini-2.5-flash",m=t?.userId??s?.userId,_=n.sessionId??t?.sessionId??s?.sessionId,y=(t?.newMessage?.parts??[]).map(f=>typeof f?.text=="string"?f.text:"").filter(Boolean).join(""),x=new Map,b=new Map,k=new Set,I="",h=0,T=0,g=0,A=0;ie(o);try{yield*W({traceId:r,spanId:o,userId:m,sessionId:_,tags:s?.tags,agentId:c,agentName:l,agentRole:u,agentFramework:"google-adk",parentAgentId:s?.agentId},async function*(){for await(let f of a){h++;let v=f.author??l;if(v!=="user"){v!==l&&!k.has(v)&&e.enqueue({event_id:p(),project_id:"",trace_id:r,span_id:p(),parent_span_id:o,timestamp:new Date().toISOString(),provider:"google-adk",model:d,operation:`handoff.${l}\u2192${v}`,span_kind:"handoff",agent_name:v,agent_role:"specialist",agent_framework:"google-adk",delegation_from_agent_id:c,delegation_from_agent_name:l,delegation_reason:`delegated to ${v}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",user_id:m,session_id:_,tags:s?.tags,environment:e.environment,sdk_version:C}),k.add(v),x.has(v)||(x.set(v,{spanId:p(),agentId:p(),t0:performance.now()}),b.set(v,{input:0,output:0,cached:0,reasoning:0}));let w=x.get(v),j=yn(f);if(j.input>0||j.output>0){let N=b.get(v);N.input+=j.input,N.output+=j.output,N.cached+=j.cached,N.reasoning+=j.reasoning,T+=j.input,g+=j.output,A+=j.cached}let O=f.content?.parts??[];for(let N of O){let q=N?.functionCall;if(!q?.name)continue;let R=p();e.enqueue({event_id:p(),project_id:"",trace_id:r,span_id:R,parent_span_id:w.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:d,operation:`tool.${q.name}`,span_kind:"tool",agent_id:w.agentId,agent_name:v,agent_framework:"google-adk",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",tools_used:[q.name],tool_call_id:R,tool_call_args:q.args??{},user_id:m,session_id:_,tags:s?.tags,environment:e.environment,sdk_version:C})}let S=O.filter(N=>typeof N?.text=="string"&&!N.thought).map(N=>N.text).join("");if(S&&(I+=S),typeof f.isFinalResponse=="function"?f.isFinalResponse():!!f.isFinalResponse||f.actions?.stateDelta!==void 0||f.turnComplete===!0){let N=O.map(F=>F?.functionCall?.name).filter(Boolean),q=O.filter(F=>typeof F?.text=="string"&&!F.thought).map(F=>F.text).join(""),R=b.get(v)??{input:0,output:0,cached:0,reasoning:0};e.enqueue({event_id:p(),project_id:"",trace_id:r,span_id:w.spanId,parent_span_id:o,timestamp:new Date().toISOString(),provider:"google-adk",model:d,operation:`agent.${v}`,span_kind:"agent",agent_id:w.agentId,agent_name:v,agent_role:v===l?u:"specialist",agent_framework:"google-adk",parent_agent_id:c,latency_ms:performance.now()-w.t0,stream:!1,input_tokens:R.input,output_tokens:R.output,cached_tokens:R.cached||void 0,reasoning_tokens:R.reasoning||void 0,status:"success",tools_used:N.length?N:void 0,prompt_hash:y?St(y):void 0,...e.storePrompts&&S?{completion_text:e.redactForStorage(S)}:{},...N.length>0&&q?{decision_rationale:q}:{},user_id:m,session_id:_,tags:s?.tags,environment:e.environment,sdk_version:C}),x.delete(v),b.delete(v)}}yield f}}),e.enqueue({event_id:p(),project_id:"",trace_id:r,span_id:o,parent_span_id:s?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:d,operation:"agent.run",span_kind:"agent",agent_id:c,agent_name:l,agent_role:u,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-i,stream:!1,input_tokens:T,output_tokens:g,cached_tokens:A||void 0,status:"success",prompt_hash:y?St(y):void 0,...e.storePrompts?{prompt_text:e.redactForStorage(y),completion_text:e.redactForStorage(I)}:{},user_id:m,session_id:_,tags:s?.tags,environment:e.environment,sdk_version:C,metadata:{eventCount:h,agentsThatRan:[...k]}}),se(o)}catch(f){throw se(o),e.enqueue({event_id:p(),project_id:"",trace_id:r,span_id:o,parent_span_id:s?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:d,operation:"agent.run",span_kind:"agent",agent_id:c,agent_name:l,agent_role:u,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:kn(f),error_message:String(f?.message??f).slice(0,500),user_id:m,session_id:_,tags:s?.tags,environment:e.environment,sdk_version:C}),f}}function vt(a){let{coordinator:t,runner:n,agentName:e,agentRole:s,model:r,...o}=a,c=Fe(t,{...o,agentName:e??t?.name,agentRole:s??"coordinator",traceSubAgents:!0}),i=ot(n,{agentName:e??t?.name,agentRole:s??"coordinator",model:r});return{coordinator:c,runner:i}}var wt=Fe;var In=require("@opentelemetry/sdk-trace-node"),xt=require("@opentelemetry/core");function es(){try{return D()}catch{return null}}var Ct=class{export(t,n){let e=es();if(!e){n({code:xt.ExportResultCode.SUCCESS});return}try{for(let s of t){let{name:r}=s;if(!r.startsWith("ai."))continue;let o=s.attributes,c=G(),i=s.spanContext().spanId,l=s.spanContext().traceId,u=s.duration[0]*1e3+s.duration[1]/1e6,d=new Date(s.startTime[0]*1e3+s.startTime[1]/1e6).toISOString(),m=s.status.code===2,_={event_id:p(),project_id:"",trace_id:c?.traceId??l,span_id:i,parent_span_id:c?.spanId,timestamp:d,provider:String(o["ai.model.provider"]??"unknown"),model:String(o["ai.model.id"]??"unknown"),latency_ms:u,stream:!1,status:m?"error":"success",environment:e.environment,sdk_version:C};r==="ai.generateText"||r==="ai.generateText.doGenerate"?(se(i),e.enqueue({..._,operation:"generateText",input_tokens:Number(o["ai.usage.promptTokens"]??0),output_tokens:Number(o["ai.usage.completionTokens"]??0),finish_reason:String(o["ai.response.finishReason"]??""),span_kind:"llm",...e.storePrompts&&o["ai.prompt"]?{prompt_text:e.redactForStorage(String(o["ai.prompt"]))}:{},...e.storePrompts&&o["ai.response.text"]?{completion_text:e.redactForStorage(String(o["ai.response.text"]))}:{}})):r==="ai.streamText"||r==="ai.streamText.doStream"?(se(i),e.enqueue({..._,operation:"streamText",stream:!0,input_tokens:Number(o["ai.usage.promptTokens"]??0),output_tokens:Number(o["ai.usage.completionTokens"]??0),finish_reason:String(o["ai.response.finishReason"]??""),ttft_ms:o["ai.response.msToFirstChunk"]!==void 0?Number(o["ai.response.msToFirstChunk"]):void 0,span_kind:"llm"})):r==="ai.generateObject"||r==="ai.generateObject.doGenerate"?(se(i),e.enqueue({..._,operation:"generateObject",input_tokens:Number(o["ai.usage.promptTokens"]??0),output_tokens:Number(o["ai.usage.completionTokens"]??0),span_kind:"general"})):r==="ai.toolCall"?e.enqueue({..._,provider:"vercel-ai",model:"tool",operation:`tool.${String(o["ai.toolCall.name"]??"unknown")}`,input_tokens:0,output_tokens:0,span_kind:"tool",tools_used:o["ai.toolCall.name"]?[String(o["ai.toolCall.name"])]:[]}):(r==="ai.embed"||r==="ai.embedMany")&&e.enqueue({..._,operation:r==="ai.embed"?"embed":"embedMany",input_tokens:Number(o["ai.usage.tokens"]??0),output_tokens:0,span_kind:"embedding"})}}catch{}n({code:xt.ExportResultCode.SUCCESS})}shutdown(){return Promise.resolve()}},Tt=class{exporter;constructor(t){this.exporter=t}onStart(t,n){t.name?.startsWith("ai.")&&ie(t.spanContext().spanId)}onEnd(t){t.name.startsWith("ai.")&&se(t.spanContext().spanId),this.exporter.export([t],()=>{})}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},rt=null,bt=null;function at(){return rt||(rt=new In.NodeTracerProvider,rt.addSpanProcessor(new Tt(new Ct)),bt=rt.getTracer("zespan-vercel-ai")),{tracer:bt,telemetry:{isEnabled:!0,tracer:bt}}}function Ot(){return at().telemetry}function Ee(){try{return D()}catch{return null}}function ts(a){let t=a.toLowerCase();return/gpt|o1-|o3-|davinci|turbo|whisper|dall-e/i.test(t)?"openai":/claude/i.test(t)?"anthropic":/gemini|palm|bard/i.test(t)?"google":/llama|codellama/i.test(t)?"meta":/mistral|mixtral/i.test(t)?"mistralai":/deepseek/i.test(t)?"deepseek":/command/i.test(t)?"cohere":/qwen/i.test(t)?"alibaba":"unknown"}var De=class{runs=new Map;guardrailSettings;constructor(t={}){this.guardrailSettings=ee(t.guardrails,"chat")}_onLLMStart=async t=>{let n=t.id??p(),e=G(),s=p();ie(s);let r=t.detail?.llm?.metadata?.model_name??t.detail?.model??"unknown",o=e?.traceId??p(),c=JSON.stringify(t.detail?.messages??t.detail?.prompt??t.detail?.input??""),i;try{let l=Ee();l&&c&&(i=await Z(l,this.guardrailSettings,{text:c,phase:"pre",traceId:o,spanId:s,model:r,operation:"chat"}))}catch(l){if(l instanceof V)throw l}this.runs.set(n,{t0:performance.now(),traceId:o,spanId:s,parentSpanId:e?.spanId,model:r,preGuardrailResult:i,promptText:c})};_onLLMEnd=async t=>{let n=this.runs.get(t.id??"");if(!n)return;this.runs.delete(t.id),se(n.spanId);let e=Ee();if(!e)return;let s=t.detail?.response??t.detail?.chunk??{},r=s.usage??s.raw?.usage??{},o=(typeof s.text=="string"?s.text:null)??(typeof s.message?.content=="string"?s.message.content:null)??"",c=o,i;if(o)try{i=await Z(e,this.guardrailSettings,{text:o,phase:"post",traceId:n.traceId,spanId:n.spanId,model:n.model,operation:"chat"}),c=oe(o,i)}catch(u){u instanceof V||(i=void 0)}let l=n.preGuardrailResult;try{e.enqueue({event_id:p(),project_id:"",trace_id:n.traceId,span_id:n.spanId,parent_span_id:n.parentSpanId,timestamp:new Date().toISOString(),provider:ts(n.model),model:n.model,operation:"chat",latency_ms:performance.now()-n.t0,ttft_ms:n.ttft,stream:!1,input_tokens:r.promptTokens??r.prompt_tokens??0,output_tokens:r.completionTokens??r.completion_tokens??0,finish_reason:s.finishReason??s.finish_reason??"",status:"success",span_kind:"llm",agent_id:G()?.agentId,agent_name:G()?.agentName,...e.storePrompts?{prompt_text:e.redactForStorage(n.promptText??""),completion_text:e.redactForStorage(c)}:{},metadata:{guardrails:{pre:l?{matched:l.results.length,modified:!!l.modifiedText}:null,post:i?{matched:i.results.length,modified:!!i.modifiedText}:null}},environment:e.environment,sdk_version:C})}catch{}};_onLLMStream=t=>{let n=this.runs.get(t.id??"");n&&n.ttft===void 0&&(n.ttft=performance.now()-n.t0)};_onToolCall=t=>{let n=Ee();if(!n)return;let e=G(),s=t.detail?.toolCall?.name??t.detail?.name??"";try{n.enqueue({event_id:p(),project_id:"",trace_id:e?.traceId??p(),span_id:p(),parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"llamaindex",model:"",operation:`tool.${s||"unknown"}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",tools_used:s?[s]:[],agent_id:e?.agentId,agent_name:e?.agentName,environment:n.environment,sdk_version:C})}catch{}};_onToolResult=t=>{let n=Ee();if(!n)return;let e=G(),s=t.detail?.toolCall?.name??t.detail?.name??"",r=t.detail?.result??t.detail?.toolResult??"";try{n.enqueue({event_id:p(),project_id:"",trace_id:e?.traceId??p(),span_id:p(),parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"llamaindex",model:"",operation:`tool.${s||"unknown"}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",tools_used:s?[s]:[],tool_call_result:String(r).slice(0,10240),agent_id:e?.agentId,agent_name:e?.agentName,environment:n.environment,sdk_version:C})}catch{}};_onAgentStart=t=>{let n=t.id??p(),e=G();this.runs.set(`agent-${n}`,{t0:performance.now(),traceId:e?.traceId??p(),spanId:p(),parentSpanId:e?.spanId,model:"agent",agentName:t.detail?.agentName??e?.agentName??""})};_onAgentEnd=t=>{let n=this.runs.get(`agent-${t.id??""}`);if(!n)return;this.runs.delete(`agent-${t.id}`);let e=Ee();if(e)try{e.enqueue({event_id:p(),project_id:"",trace_id:n.traceId,span_id:n.spanId,parent_span_id:n.parentSpanId,timestamp:new Date().toISOString(),provider:"llamaindex",model:"agent",operation:"agent",latency_ms:performance.now()-n.t0,stream:!1,input_tokens:0,output_tokens:0,status:"success",span_kind:"agent",agent_name:n.agentName??t.detail?.agentName??"",environment:e.environment,sdk_version:C})}catch{}};attach(t){t.on("llm-start",this._onLLMStart),t.on("llm-end",this._onLLMEnd),t.on("llm-stream",this._onLLMStream),t.on("llm-tool-call",this._onToolCall),t.on("llm-tool-result",this._onToolResult),t.on("agent-start",this._onAgentStart),t.on("agent-end",this._onAgentEnd)}detach(t){t.off("llm-start",this._onLLMStart),t.off("llm-end",this._onLLMEnd),t.off("llm-stream",this._onLLMStream),t.off("llm-tool-call",this._onToolCall),t.off("llm-tool-result",this._onToolResult),t.off("agent-start",this._onAgentStart),t.off("agent-end",this._onAgentEnd)}};function At(a){let t=D(),n=G(),e=n?.traceId??p(),s=p(),r=performance.now(),o=n?.agentId?{agent_id:n.agentId,agent_name:n.agentName,agent_role:n.agentRole,agent_framework:n.agentFramework,parent_agent_id:n.parentAgentId,span_kind:a.span_kind??"general"}:{},c={};return{span:{setEvalScore(l,u){c[l]=u},async end(l){let u=performance.now()-r;try{t.enqueue({event_id:p(),project_id:"",trace_id:e,span_id:s,parent_span_id:n?.spanId,timestamp:new Date().toISOString(),provider:a.provider??"custom",model:a.model??"custom",operation:"custom",latency_ms:u,stream:!1,input_tokens:l.input_tokens??0,output_tokens:l.output_tokens??0,cost_usd:l.cost_usd,status:l.status,error_message:l.error_message?.slice(0,500),environment:t.environment,eval_scores:Object.keys(c).length?c:void 0,sdk_version:C,...o})}catch{}}},run:l=>W({traceId:e,spanId:s,userId:n?.userId,sessionId:n?.sessionId,tags:n?.tags,agentId:n?.agentId,agentName:n?.agentName,agentRole:n?.agentRole,agentFramework:n?.agentFramework,parentAgentId:n?.parentAgentId,conversationTurn:n?.conversationTurn,availableTools:n?.availableTools},l)}}var Ge=class{agentId;name;role;framework;tools;constructor(t,n){this.agentId=t,this.name=n.name,this.role=n.role??"specialist",this.framework=n.framework??"custom",this.tools=n.tools??[]}logPlan(t){let n=D(),e=G(),s={event_id:p(),project_id:"",trace_id:e?.traceId??p(),span_id:p(),parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"agent",model:"",operation:`${this.name}.plan`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:n.environment,sdk_version:C,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"planning",planning_steps:t,user_id:e?.userId,session_id:e?.sessionId,tags:e?.tags};n.enqueue(s)}async traceTool(t,n,e){let s=D(),r=G(),o=p(),c=r?.traceId??p(),i=performance.now(),l=this.tools.find(u=>u.name===t);try{let u=await W({traceId:c,spanId:o,userId:r?.userId,sessionId:r?.sessionId,tags:r?.tags,agentId:this.agentId,agentName:this.name,agentRole:this.role,agentFramework:this.framework},()=>e()),d=typeof u=="string"?u:JSON.stringify(u),m={event_id:p(),project_id:"",trace_id:c,span_id:o,parent_span_id:r?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${t}`,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:s.environment,sdk_version:C,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[t],tool_call_id:o,tool_call_args:n,tool_call_result:d.slice(0,10240),tool_definitions:l?[l]:void 0,user_id:r?.userId,session_id:r?.sessionId,tags:r?.tags};return s.enqueue(m),u}catch(u){let d=u instanceof Error?u.message:String(u),m={event_id:p(),project_id:"",trace_id:c,span_id:o,parent_span_id:r?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${t}`,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:d.slice(0,500),environment:s.environment,sdk_version:C,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[t],tool_call_id:o,tool_call_args:n,user_id:r?.userId,session_id:r?.sessionId,tags:r?.tags};throw s.enqueue(m),u}}delegateTo(t,n){let e=D(),s=G(),r={event_id:p(),project_id:"",trace_id:s?.traceId??p(),span_id:p(),parent_span_id:s?.spanId,timestamp:new Date().toISOString(),provider:"agent",model:"",operation:`${this.name}.delegate\u2192${t}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:e.environment,sdk_version:C,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"handoff",delegation_reason:n,user_id:s?.userId,session_id:s?.sessionId,tags:s?.tags};e.enqueue(r)}};function Rt(a,t){let n=D(),e=G(),s=p(),r=e?.traceId??p(),o=p(),c={event_id:p(),project_id:"",trace_id:r,span_id:o,parent_span_id:e?.spanId,timestamp:new Date().toISOString(),provider:"agent",model:"",operation:`agent.${a.name}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:n.environment,sdk_version:C,agent_id:s,agent_name:a.name,agent_role:a.role??"specialist",agent_framework:a.framework??"custom",parent_agent_id:e?.agentId,span_kind:"agent",tool_definitions:a.tools,delegation_reason:e?.agentId?"delegated":"root",user_id:e?.userId,session_id:e?.sessionId,tags:e?.tags,metadata:a.metadata};return n.enqueue(c),W({traceId:r,spanId:o,userId:e?.userId,sessionId:e?.sessionId,tags:e?.tags,agentId:s,agentName:a.name,agentRole:a.role??"specialist",agentFramework:a.framework??"custom",parentAgentId:e?.agentId,availableTools:a.tools},()=>t(new Ge(s,a)))}var Sn=require("@opentelemetry/api"),it=class{onStart(t,n){let e=Sn.propagation.getBaggage(n);e&&e.getAllEntries().forEach(([s,r])=>{t.setAttribute(`baggage.${s}`,r.value)})}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}};var fe=require("@opentelemetry/api");function qe(a,t,n){let e={};t&&(e["agent.delegation.reason"]=t),n&&(e["agent.task"]=n);let s=fe.context.active();if(Object.keys(e).length>0){let r=fe.propagation.getBaggage(s)??fe.propagation.createBaggage();for(let[o,c]of Object.entries(e))r=r.setEntry(o,{value:c});s=fe.propagation.setBaggage(s,r)}fe.propagation.inject(s,a)}function Ke(a){return fe.propagation.extract(fe.context.active(),a)}var vn={OTEL_EXPORTER_OTLP_ENDPOINT:"http://localhost:4318",OTEL_SERVICE_NAME:"crewai-agent"};function wn(){return`
|
|
11
12
|
pip install openinference-instrumentation-crewai opentelemetry-exporter-otlp-proto-grpc
|
|
12
13
|
|
|
13
14
|
from openinference.instrumentation.crewai import CrewAIInstrumentor
|
|
@@ -20,4 +21,4 @@ provider = TracerProvider()
|
|
|
20
21
|
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="http://localhost:4318")))
|
|
21
22
|
trace.set_tracer_provider(provider)
|
|
22
23
|
CrewAIInstrumentor().instrument()
|
|
23
|
-
`.trim()}function bn(a,t){let n={};return
|
|
24
|
+
`.trim()}function bn(a,t){let n={};return qe(n,t),{...a,_zespan_trace:n}}function xn(a){let t=a._zespan_trace??{};return Ke(t)}function Cn(a){return{OTEL_EXPORTER_OTLP_ENDPOINT:a,OTEL_EXPORTER_OTLP_PROTOCOL:"http/protobuf",OTEL_SERVICE_NAME:"pydantic-ai-agent",LOGFIRE_SEND_TO_LOGFIRE:"false"}}var ns={init:Xe,getClient:D,getZespanClient:D,wrapOpenAI:Ne,wrapAnthropic:ft,wrapGoogle:yt,wrapOpenRouter:It,wrapADKAgent:wt,wrapADKRunner:ot,instrumentADK:vt,startSpan:At,withContext:Je,withTrace:Ze,withAgent:Rt,initOTel:Ce,getTracer:ye,createSpan:dt,withSpan:lt,PromptClient:ve,CallbackHandler:Pe,ADKCallbackHandler:je,autopatch:Ae,markFrameworkActive:ie,markFrameworkInactive:se,instrumentVercelAI:at,getZespanVercelTelemetry:Ot,ZespanLlamaIndexHandler:De};0&&(module.exports={AgentContext,BaggageSpanProcessor,CREWAI_OTEL_ENV,GuardrailBlockedError,PromptClient,SpanKind,SpanStatusCode,ZespanADKCallbackHandler,ZespanCallbackHandler,ZespanClient,ZespanLlamaIndexHandler,attachTraceToAutoGenMessage,autopatch,createSpan,extractAgentContext,extractAutoGenContext,extractTraceFromAutoGenMessage,getCrewAIInstrumentationGuide,getPydanticAIConfig,getTracer,getZespanClient,getZespanVercelTelemetry,init,initOTel,initZespan,injectAgentContext,injectAutoGenContext,instrumentADK,instrumentVercelAI,markFrameworkActive,markFrameworkInactive,startSpan,withAgent,withSpan,withZespan,withZespanContext,withZespanTrace,wrapADKAgent,wrapADKRunner,wrapAnthropic,wrapBedrock,wrapGoogle,wrapGroq,wrapLiteLLM,wrapMistral,wrapOpenAI,wrapOpenRouter,wrapZespanADKAgent,zespan});
|