@zespan/sdk 1.3.3 → 1.3.4

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.mjs CHANGED
@@ -1,14 +1,14 @@
1
- var dt=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});import{gzipSync as _n}from"zlib";var De=class{constructor(e,n,t){this.c=e;this.cfg=n;this.configClient=t??null,this.maxQueueSize=n.maxQueueSize??1e4,this.timer=setInterval(()=>this.flush(),n.flushInterval),this.timer.unref&&this.timer.unref()}queue=[];queueHead=0;timer=null;flushing=!1;consecutiveFlushFailures=0;configClient;maxQueueSize;push(e){this.queue.length-this.queueHead>=this.maxQueueSize&&(this.queueHead++,this.c.debug&&console.warn("[zespan] queue full, dropping oldest event")),this.queue.push(e),this.c.debug&&console.log(`[zespan] event queued: ${e.operation} span_kind=${e.span_kind??"llm"} trace=${e.trace_id?.slice(0,8)} tokens=${e.input_tokens}in/${e.output_tokens}out status=${e.status}`),this.queue.length-this.queueHead>=this.cfg.maxSize&&this.flush()}async flush(){if(this.queue.length-this.queueHead===0||this.flushing)return;this.flushing=!0;let e=this.queue.slice(this.queueHead),n=_n(Buffer.concat(e.map(t=>Buffer.from(JSON.stringify(t)+`
2
- `))));try{let t=await this._post(n,0);t.ok?(this.queueHead+=e.length,this.queueHead>1e3&&(this.queue=this.queue.slice(this.queueHead),this.queueHead=0),this.c.debug&&console.log(`[zespan] flushed ${e.length} event(s) \u2192 ${this.c.endpoint}`),this.consecutiveFlushFailures>0&&this.c.debug&&console.warn("[zespan] ingest recovered",{recoveredBatchSize:e.length,queuedEvents:this.queue.length-this.queueHead,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:t.retriable,status:t.status??null,error:t.error??null,queuedEvents:this.queue.length-this.queueHead,failedBatchSize:e.length,consecutiveFailures:this.consecutiveFlushFailures}))}finally{this.flushing=!1}}async _post(e,n){let t=s=>new Promise(r=>setTimeout(r,s));try{let s=await fetch(this.c.endpoint,{method:"POST",body:e,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 t(Number(s.headers.get("retry-after")??5)*1e3),this._post(e,n+1)):s.status>=500&&n<3?(await t(2**n*1e3),this._post(e,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 t(2**n*1e3),this._post(e,n+1)):(this.c.debug&&console.error("[zespan] ingest transport error",s),{ok:!1,retriable:!0,error:s instanceof Error?s.message:String(s)})}}};import{trace as fn,SpanKind as be,SpanStatusCode as we,context as hn}from"@opentelemetry/api";import{BatchSpanProcessor as yn}from"@opentelemetry/sdk-trace-base";import{OTLPTraceExporter as kn}from"@opentelemetry/exporter-trace-otlp-http";import{AsyncHooksContextManager as In}from"@opentelemetry/context-async-hooks";import{W3CTraceContextPropagator as Sn}from"@opentelemetry/core";var Ee=null,Rt=null;function Ge(a){let e=a.serviceName??"zespan-sdk",n=new kn({url:a.endpoint??"https://localhost:3001/v1/traces",headers:a.apiKey?{"x-api-key":a.apiKey}:void 0}),t=new yn(n,{maxQueueSize:100,maxExportBatchSize:10,exportTimeoutMillis:3e4,scheduledDelayMillis:2e3}),{NodeTracerProvider:s}=dt("@opentelemetry/sdk-trace-node"),r=new s({resource:{attributes:{"service.name":e,"service.version":"1.0.0","deployment.environment":a.environment??"production"}}});return r.addSpanProcessor(t),r.register({propagator:new Sn}),Ee=fn.getTracer(e,"1.0.0"),Rt=new In,hn.setGlobalContextManager(Rt.enable()),{tracer:Ee,provider:r}}function ke(){if(!Ee)throw new Error("OTel not initialized. Call initOTel() first.");return Ee}function Nt(a){return ke().startSpan(a.name,{kind:a.kind??be.INTERNAL,attributes:a.attributes??{}})}async function Pt(a,e,n){let s=ke().startSpan(a,{kind:n?.kind??be.INTERNAL,attributes:n?.attributes??{}});try{let r=await e(s);return s.setStatus({code:we.OK}),s.end(),r}catch(r){throw s.setStatus({code:we.ERROR,message:r.message}),s.recordException(r),s.end(),r}}import{createHash as vn}from"crypto";var Mt=new Map;function wn(a){let e=Mt.get(a);return e||(e=new RegExp(`\\{\\{${a}\\}\\}`,"g"),Mt.set(a,e)),e}var Ce=class{constructor(e){this.client=e}cache=new Map;cacheIndex=new Map;cacheTTL=300*1e3;async get(e,n={}){let{version:t,label:s,cache:r=!0}=n;if(r){let l=this.getCacheKey(e,t,s),_=this.cache.get(l);if(_&&Date.now()-_.timestamp<this.cacheTTL)return _.prompt}let o=new URLSearchParams;t!==void 0&&o.set("version",t.toString()),s&&o.set("label",s);let c=`${this.client.baseURL}/v1/prompts/${encodeURIComponent(e)}?${o}`,d=await fetch(c,{headers:{"x-api-key":this.client.apiKey}});if(!d.ok)throw new Error(`Failed to fetch prompt: ${d.statusText}`);let p=await d.json(),m=vn("sha256").update(JSON.stringify(p.prompt)).digest("hex"),i={...p,promptHash:m};if(r){let l=this.getCacheKey(e,t,s);this.cache.set(l,{prompt:i,timestamp:Date.now()});let _=this.cacheIndex.get(e)??new Set;_.add(l),this.cacheIndex.set(e,_)}return i}async list(e){let n=new URLSearchParams;e&&n.set("name",e);let t=`${this.client.baseURL}/v1/prompts?${n}`,s=await fetch(t,{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(e){let n=`${this.client.baseURL}/v1/prompts`,t=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.client.apiKey},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Failed to create prompt: ${t.statusText}`);let s=await t.json();return this.invalidateCache(e.name),s}async updateLabels(e,n,t){let s=`${this.client.baseURL}/v1/prompts/${encodeURIComponent(e)}/versions/${n}/labels`,r=await fetch(s,{method:"PATCH",headers:{"Content-Type":"application/json","x-api-key":this.client.apiKey},body:JSON.stringify({labels:t})});if(!r.ok)throw new Error(`Failed to update labels: ${r.statusText}`);let o=await r.json();return this.invalidateCache(e),o}compile(e,n){if(e.type==="text"){let t=typeof e.prompt=="string"?e.prompt:e.prompt.content;return Object.entries(n).forEach(([s,r])=>{t=t.replace(wn(s),r)}),t}return JSON.stringify(e.prompt)}clearCache(e){e?this.invalidateCache(e):(this.cache.clear(),this.cacheIndex.clear())}getCacheKey(e,n,t){return n!==void 0?`${e}:v${n}`:t?`${e}:label:${t}`:`${e}:latest`}invalidateCache(e){let n=this.cacheIndex.get(e);if(n){for(let t of n)this.cache.delete(t);this.cacheIndex.delete(e)}}};var bn="[REDACTED]";var jt=a=>a.toLowerCase().replace(/[^a-z0-9]/g,""),Cn=a=>{let e=new Set;for(let n of a){let t=jt(String(n));t&&e.add(t)}return e},Fe=(a,e,n=0,t=new WeakSet)=>{if(n>20)return"[REDACTED_DEPTH_LIMIT]";if(Array.isArray(a))return t.has(a)?"[Circular]":(t.add(a),a.map(o=>Fe(o,e,n+1,t)));if(!a||typeof a!="object")return a;if(t.has(a))return"[Circular]";t.add(a);let s=a,r={};for(let[o,c]of Object.entries(s)){if(e.has(jt(o))){r[o]=bn;continue}r[o]=Fe(c,e,n+1,t)}return r},Oe=(a,e)=>{if(a==null)return"";let n=Cn(e),t=new WeakSet;if(typeof a=="string")try{let s=JSON.parse(a);return s&&typeof s=="object"?JSON.stringify(Fe(s,n,0,t)):a}catch{return a}return JSON.stringify(Fe(a,n,0,t))};var qe=null,ne={};function Dt(a){ne=a,qe=null}async function xn(){if(!qe){let{default:a}=await import("openredaction");qe=new a({redactionMode:ne.piiRedactionMode??"placeholder",...ne.piiPreset&&!ne.piiCategories?{preset:ne.piiPreset}:{},...ne.piiCategories?{categories:ne.piiCategories}:{},...ne.piiIncludeNames!==void 0?{includeNames:ne.piiIncludeNames}:{},...ne.piiIncludeEmails!==void 0?{includeEmails:ne.piiIncludeEmails}:{},...ne.piiIncludePhones!==void 0?{includePhones:ne.piiIncludePhones}:{},...ne.piiIncludeAddresses!==void 0?{includeAddresses:ne.piiIncludeAddresses}:{},confidenceThreshold:ne.piiConfidenceThreshold??.7,enableContextAnalysis:!0,enableCache:!0,...ne.piiWhitelist?{whitelist:ne.piiWhitelist}:{},...ne.piiCustomPatterns?{customPatterns:ne.piiCustomPatterns}:{}})}return qe}async function ct(a){if(!a)return a;try{let e=await xn(),{redacted:n}=await e.detect(a);return n}catch{return a}}async function Et(a,e,n){let t=Oe(a,e);return n?ct(t):t}async function Gt(a,e){return e?ct(a):a}async function Ft(a,e,n){if(!a||Object.keys(a).length===0)return;let t=Oe(a,e),s=n?await ct(t):t;try{return JSON.parse(s)}catch{return a}}function qt(){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 Tn(a,e){let n=Object.keys(a),t=Object.keys(e);if(n.length!==t.length)return!1;for(let s of n){let r=a[s],o=e[s];if(Array.isArray(r)&&Array.isArray(o)){if(r.length!==o.length)return!1;for(let c=0;c<r.length;c++)if(r[c]!==o[c])return!1;continue}if(r!==o)return!1}return!0}function xe(a,e){if(a.size!==e.size)return!1;for(let[n,t]of a){let s=e.get(n);if(s===void 0&&!e.has(n))return!1;if(typeof t=="object"&&t!==null&&typeof s=="object"&&s!==null){if(!Tn(t,s))return!1}else if(s!==t)return!1}return!0}var Ke=class{localVersion=0;config=qt();listeners=new Map;fetching=!1;baseUrl;apiKey;projectId;constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.apiKey=e.apiKey,this.projectId=e.projectId}checkVersion(e){e>this.localVersion&&!this.fetching&&(this.fetching=!0,this.fetchConfig().then(n=>{n&&(this.localVersion=e,this.applyFullConfig(n))}).catch(()=>{}).finally(()=>{this.fetching=!1}))}getModel(e,n){return this.config.modelOverrides.get(e)??n}getCacheConfig(e){return this.config.cacheConfig.get(e)??null}getSamplingRate(){return this.config.samplingRate}getRuntimeConfig(){return this.config}getLocalVersion(){return this.localVersion}getFallback(e){return this.config.fallbacks.get(e)??null}getRetryPolicy(e){return this.config.retryPolicies.get(e)??null}getTimeout(e){return this.config.timeouts.get(e)??null}getConcurrencyLimit(e){return this.config.concurrencyLimits.get(e)??null}getAbTest(e){return this.config.abTests.get(e)??null}on(e,n){let t=this.listeners.get(e)??[];t.push(n),this.listeners.set(e,t)}emit(e,n){let t=this.listeners.get(e);if(t)for(let s of t)try{s(n)}catch{}}async fetchConfig(){try{let e=`${this.baseUrl}/v1/sdk/config?projectId=${encodeURIComponent(this.projectId)}`,n=await fetch(e,{headers:{"x-api-key":this.apiKey}});return n.ok?(await n.json()).config??null:null}catch{return null}}applyFullConfig(e){let n=this.config,t=this.parseSnapshot(e);this.config=t,xe(n.modelOverrides,t.modelOverrides)||this.emit("model_override",Object.fromEntries(t.modelOverrides)),n.samplingRate!==t.samplingRate&&this.emit("sampling_config",{samplingRate:t.samplingRate}),xe(n.cacheConfig,t.cacheConfig)||this.emit("cache_config",Object.fromEntries(t.cacheConfig)),xe(n.fallbacks,t.fallbacks)||this.emit("fallback_config",Object.fromEntries(t.fallbacks)),xe(n.retryPolicies,t.retryPolicies)||this.emit("retry_config",Object.fromEntries(t.retryPolicies)),xe(n.timeouts,t.timeouts)||this.emit("timeout_config",Object.fromEntries(t.timeouts)),xe(n.abTests,t.abTests)||this.emit("ab_test_config",Object.fromEntries(t.abTests))}parseSnapshot(e){let n=qt();for(let[t,s]of Object.entries(e))try{let r=typeof s=="string"?JSON.parse(s):s;if(t.startsWith("model_override.")){let o=t.slice(15),c=typeof r=="string"?r:r?.model??r?.value;typeof c=="string"&&n.modelOverrides.set(o,c)}else if(t.startsWith("cache.")){let o=t.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(t.startsWith("ratelimit.")){let o=t.slice(10);n.rateLimits.set(o,{maxRequests:typeof r?.maxRequests=="number"?r.maxRequests:100,windowSeconds:typeof r?.windowSeconds=="number"?r.windowSeconds:60})}else if(t.startsWith("guardrail.")&&!t.startsWith("guardrail_mode.")){let o=t.slice(10);n.guardrailOverrides.set(o,!!(r?.enabled??r))}else if(t.startsWith("sampling.")){let o=typeof r=="number"?r:r?.rate??r?.sampleRate;typeof o=="number"&&o>=0&&o<=1&&(n.samplingRate=o)}else if(t.startsWith("prompt_version.")){let o=t.slice(15),c=typeof r=="number"?r:r?.version;typeof c=="number"&&n.promptVersions.set(o,c)}else if(t.startsWith("fallback.")){let o=t.slice(9),c=typeof r?.model=="string"?r.model:null,d=Array.isArray(r?.conditions)?r.conditions.filter(p=>typeof p=="string"):[];c&&n.fallbacks.set(o,{model:c,conditions:d})}else if(t.startsWith("retry.")){let o=t.slice(6),c=typeof r?.enabled=="boolean"?r.enabled:!1,d=typeof r?.maxRetries=="number"?r.maxRetries:3,p=typeof r?.backoffMultiplier=="number"?r.backoffMultiplier:2,m=Array.isArray(r?.retryOnStatusCodes)?r.retryOnStatusCodes.filter(i=>typeof i=="number"):[];n.retryPolicies.set(o,{enabled:c,maxRetries:d,backoffMultiplier:p,retryOnStatusCodes:m})}else if(t.startsWith("timeout.")){let o=t.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(t.startsWith("concurrency.")){let o=t.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(t.startsWith("ab_test.")){let o=t.slice(8),c=typeof r?.candidateModel=="string"?r.candidateModel:null,d=typeof r?.splitPercentage=="number"?r.splitPercentage:null;c&&d!==null&&d>=0&&d<=100&&n.abTests.set(o,{candidateModel:c,splitPercentage:d})}}catch{}return n}};import{AsyncLocalStorage as An}from"async_hooks";import{randomUUID as On}from"crypto";var lt=new An,u=()=>On(),F=()=>lt.getStore();function $(a,e){return lt.run(a,e)}function ut(a,e){let n=F(),t={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(t,e)}function pt(a,e){return ut(e??{},a)}var Rn=pt;var b="1.1.0";function Ie(){try{return q()}catch{return null}}var _t=new Set;function ge(a){_t.add(a)}function ie(a){_t.delete(a)}function Se(){return _t.size>0}var Le=!1,ze=!1,Kt=!1,Lt=!1,Re=null,Ne=null,mt=null,gt=null,to=(async()=>{try{Re=await import("openai/resources/chat/completions")}catch{}try{Ne=await import("@anthropic-ai/sdk/resources/messages")}catch{}try{mt=await import("@google/generative-ai")}catch{}try{gt=await import("@google/genai")}catch{}Wt()})();function zt(a){async function e(n,t){let s=Ie();if(!s||Se())return a.call(this,n,t);let r=performance.now(),o=F(),c=u(),d=o?.traceId??u(),p=n?.model??"unknown",m=n?.stream===!0;try{let i=await a.call(this,n,t);if(m){let l=i[Symbol.asyncIterator]?.bind(i);return l&&(i[Symbol.asyncIterator]=function(){let _=l(),g=0,v=0,I="",y;return{async next(){let{value:h,done:k}=await _.next();return k?(s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:p,operation:"chat",latency_ms:performance.now()-r,ttft_ms:y,stream:!0,input_tokens:g,output_tokens:v,finish_reason:I,status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,environment:s.environment,sdk_version:b}),{value:h,done:!0}):(y||(y=performance.now()-r),h?.usage&&(g=h.usage.prompt_tokens??g,v=h.usage.completion_tokens??v),h?.choices?.[0]?.finish_reason&&(I=h.choices[0].finish_reason),{value:h,done:!1})},[Symbol.asyncIterator](){return this}}}),i}return s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:i.model??p,operation:"chat",latency_ms:performance.now()-r,stream:!1,input_tokens:i.usage?.prompt_tokens??0,output_tokens:i.usage?.completion_tokens??0,cached_tokens:i.usage?.prompt_tokens_details?.cached_tokens??0,finish_reason:i.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(i.choices?.[0]?.message?.content??"")}:{},environment:s.environment,sdk_version:b}),i}catch(i){throw s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:p,operation:"chat",latency_ms:performance.now()-r,stream:m,input_tokens:0,output_tokens:0,status:"error",error_code:String(i.status??"unknown"),error_message:String(i.message).slice(0,500),span_kind:"llm",environment:s.environment,sdk_version:b}),i}}return e.__zespanAutoPatched=!0,e}function Nn(){if(!Le&&Re)try{let a=Re.Completions;if(!a?.prototype)return;let e=a.prototype.create;if(typeof e=="function"&&!e.__zespanAutoPatched){a.prototype.create=zt(e),Le=!0;return}if(typeof e!="function"){if(a.__zespanAutoPatched){Le=!0;return}let n=a;class t extends n{constructor(...o){if(super(...o),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__zespanAutoPatched){let c=this.create;this.create=zt(c)}}}t.__zespanAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Re,"Completions");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Re,"Completions",{value:t,writable:!0,enumerable:!0,configurable:!0}),Le=!0}catch{}}}catch{}}function Bt(a){async function e(n,t){let s=Ie();if(!s||Se())return a.call(this,n,t);let r=performance.now(),o=F(),c=u(),d=o?.traceId??u(),p=n?.model??"unknown",m=n?.stream===!0;try{let i=await a.call(this,n,t);if(m){let l=i[Symbol.asyncIterator]?.bind(i);return l&&(i[Symbol.asyncIterator]=function(){let _=l(),g=0,v=0,I="",y;return{async next(){let{value:h,done:k}=await _.next();return k?(s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:p,operation:"messages",latency_ms:performance.now()-r,ttft_ms:y,stream:!0,input_tokens:g,output_tokens:v,finish_reason:I,status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,environment:s.environment,sdk_version:b}),{value:h,done:!0}):(y||(y=performance.now()-r),h?.type==="message_delta"&&h?.usage&&(v=h.usage.output_tokens??v),h?.type==="message_start"&&h?.message?.usage&&(g=h.message.usage.input_tokens??g),h?.type==="message_delta"&&h?.delta?.stop_reason&&(I=h.delta.stop_reason),{value:h,done:!1})},[Symbol.asyncIterator](){return this}}}),i}return s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:i.model??p,operation:"messages",latency_ms:performance.now()-r,stream:!1,input_tokens:i.usage?.input_tokens??0,output_tokens:i.usage?.output_tokens??0,finish_reason:i.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(i.content?.filter(l=>l.type==="text").map(l=>l.text).join("")??"")}:{},environment:s.environment,sdk_version:b}),i}catch(i){throw s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:c,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:p,operation:"messages",latency_ms:performance.now()-r,stream:m,input_tokens:0,output_tokens:0,status:"error",error_code:String(i.status??"unknown"),error_message:String(i.message).slice(0,500),span_kind:"llm",environment:s.environment,sdk_version:b}),i}}return e.__zespanAutoPatched=!0,e}function Pn(){if(!ze&&Ne)try{let a=Ne.Messages;if(!a?.prototype)return;let e=a.prototype.create;if(typeof e=="function"&&!e.__zespanAutoPatched){a.prototype.create=Bt(e),ze=!0;return}if(typeof e!="function"){if(a.__zespanAutoPatched){ze=!0;return}let n=a;class t extends n{constructor(...o){if(super(...o),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__zespanAutoPatched){let c=this.create;this.create=Bt(c)}}}t.__zespanAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Ne,"Messages");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Ne,"Messages",{value:t,writable:!0,enumerable:!0,configurable:!0}),ze=!0}catch{}}}catch{}}function Mn(){if(!Kt&&mt)try{let t=function(s,r){let o=n.call(this,s,r),c=o.generateContent?.bind(o),d=o.generateContentStream?.bind(o);return!c||c.__zespanAutoPatched||(o.generateContent=async p=>{let m=Ie();if(!m||Se())return c(p);let i=performance.now(),l=F(),_=u(),g=l?.traceId??u(),v=s.model??"gemini-1.5-flash";try{let I=await c(p),y=I.response?.usageMetadata;return m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"google",model:v,operation:"generateContent",latency_ms:performance.now()-i,stream:!1,input_tokens:y?.promptTokenCount??0,output_tokens:y?.candidatesTokenCount??0,finish_reason:I.response?.candidates?.[0]?.finishReason??"",status:"success",span_kind:"llm",environment:m.environment,sdk_version:b}),I}catch(I){throw m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"google",model:v,operation:"generateContent",latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:String(I.message).slice(0,500),span_kind:"llm",environment:m.environment,sdk_version:b}),I}},o.generateContent.__zespanAutoPatched=!0,d&&(o.generateContentStream=async p=>{let m=Ie();if(!m||Se())return d(p);let i=performance.now(),l=F(),_=u(),g=l?.traceId??u(),v=s.model??"gemini-1.5-flash",I=await d(p),y=I.stream,h=0,k=0,A;return I.stream=(async function*(){try{for await(let f of y){A||(A=performance.now()-i);let j=f.usageMetadata;j&&(h=j.promptTokenCount??h,k=j.candidatesTokenCount??k),yield f}m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"google",model:v,operation:"generateContent",latency_ms:performance.now()-i,ttft_ms:A,stream:!0,input_tokens:h,output_tokens:k,status:"success",span_kind:"llm",environment:m.environment,sdk_version:b})}catch(f){throw m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"google",model:v,operation:"generateContent",latency_ms:performance.now()-i,ttft_ms:A,stream:!0,input_tokens:h,output_tokens:k,status:"error",error_message:String(f.message).slice(0,500),span_kind:"llm",environment:m.environment,sdk_version:b}),f}})(),I})),o};var a=t;let e=mt?.GoogleGenerativeAI;if(!e?.prototype?.getGenerativeModel||e.prototype.getGenerativeModel.__zespanAutoPatched)return;let n=e.prototype.getGenerativeModel;t.__zespanAutoPatched=!0,e.prototype.getGenerativeModel=t,Kt=!0}catch{}}function jn(){if(!Lt&&gt)try{let a=gt?.Models;if(!a?.prototype||a.prototype.generateContent?.__zespanAutoPatched)return;let e=a.prototype.generateContent,n=a.prototype.generateContentStream,t=a.prototype.embedContent;a.prototype.generateContent=async function(s){let r=Ie();if(!r||Se())return e.call(this,s);let o=performance.now(),c=F(),d=u(),p=c?.traceId??u(),m=s?.model??"gemini";try{let i=await e.call(this,s),l=i?.usageMetadata,_=(i?.candidates?.[0]?.content?.parts??[]).filter(g=>g?.inlineData);return r.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:d,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"generateContent",latency_ms:performance.now()-o,stream:!1,input_tokens:Number(l?.promptTokenCount||0),output_tokens:Number(l?.candidatesTokenCount||0),cached_tokens:Number(l?.cachedContentTokenCount||0),reasoning_tokens:Number(l?.thoughtsTokenCount||0),finish_reason:i?.candidates?.[0]?.finishReason??"",status:"success",span_kind:_.length>0?"image_gen":"llm",..._.length>0?{metadata:{num_images:_.length}}:{},agent_id:c?.agentId,agent_name:c?.agentName,agent_role:c?.agentRole,environment:r.environment,sdk_version:b}),i}catch(i){throw r.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:d,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"generateContent",latency_ms:performance.now()-o,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(i.status??i.code??"unknown"),error_message:String(i.message).slice(0,500),span_kind:"llm",environment:r.environment,sdk_version:b}),i}},a.prototype.generateContent.__zespanAutoPatched=!0,n&&(a.prototype.generateContentStream=async function(s){let r=Ie();if(!r||Se())return n.call(this,s);let o=performance.now(),c=F(),d=u(),p=c?.traceId??u(),m=s?.model??"gemini",i=await n.call(this,s);return(async function*(){let l=0,_=0,g=0,v=0,I,y="";try{for await(let h of i){I||(I=performance.now()-o);let k=h?.usageMetadata;k&&(l=Number(k.promptTokenCount||l),_=Number(k.candidatesTokenCount||_),g=Number(k.cachedContentTokenCount||g),v=Number(k.thoughtsTokenCount||v)),h?.candidates?.[0]?.finishReason&&(y=h.candidates[0].finishReason),yield h}r.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:d,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"generateContent",latency_ms:performance.now()-o,ttft_ms:I,stream:!0,input_tokens:l,output_tokens:_,cached_tokens:g,reasoning_tokens:v,finish_reason:y||"stream_end",status:"success",span_kind:"llm",agent_id:c?.agentId,agent_name:c?.agentName,agent_role:c?.agentRole,environment:r.environment,sdk_version:b})}catch(h){throw r.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:d,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"generateContent",latency_ms:performance.now()-o,ttft_ms:I,stream:!0,input_tokens:l,output_tokens:_,status:"error",error_code:String(h.status??h.code??"unknown"),error_message:String(h.message).slice(0,500),span_kind:"llm",environment:r.environment,sdk_version:b}),h}})()},a.prototype.generateContentStream.__zespanAutoPatched=!0),t&&(a.prototype.embedContent=async function(s){let r=Ie();if(!r||Se())return t.call(this,s);let o=performance.now(),c=F(),d=u(),p=c?.traceId??u(),m=s?.model??"gemini-embedding";try{let i=await t.call(this,s),l=i?.usageMetadata;return r.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:d,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"embedding",latency_ms:performance.now()-o,stream:!1,input_tokens:Number(l?.promptTokenCount||0),output_tokens:0,status:"success",span_kind:"embedding",agent_id:c?.agentId,agent_name:c?.agentName,agent_role:c?.agentRole,environment:r.environment,sdk_version:b}),i}catch(i){throw r.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:d,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"embedding",latency_ms:performance.now()-o,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(i.status??i.code??"unknown"),error_message:String(i.message).slice(0,500),span_kind:"embedding",environment:r.environment,sdk_version:b}),i}},a.prototype.embedContent.__zespanAutoPatched=!0),Lt=!0}catch{}}function Wt(){Nn(),Pn(),Mn(),jn()}function Be(){Wt()}var We=class{apiKey;endpoint;baseURL;environment;storePrompts;redactKeys;redactPii;sampleRate;debug;enableOTel;prompts;configClient;projectId;batch;_storePromptsDefault;_promptWarningShown=!1;constructor(e){if(!e.apiKey)throw new Error("Zespan: apiKey is required");e.apiKey.startsWith("zsp_")||console.warn("[zespan] API key should start with zsp_ \u2014 check your key"),this.apiKey=e.apiKey,this.baseURL=e.baseURL??"https://api.zespan.com",this.endpoint=e.endpoint??`${this.baseURL.replace(/\/+$/,"")}/v1/ingest`,this.environment=e.environment??"production",this._storePromptsDefault=e.storePrompts===void 0,this.storePrompts=e.storePrompts??!0,this.redactKeys=e.redactKeys??["password","secret","token","api_key"],this.redactPii=e.redactPii??!1,this.sampleRate=e.sampleRate??1,this.debug=e.debug??!1,this.enableOTel=e.enableOTel??!1,this.projectId=e.projectId,this.prompts=new Ce(this),this.redactPii&&Dt({piiPreset:e.piiPreset,piiCategories:e.piiCategories,piiIncludeNames:e.piiIncludeNames,piiIncludeEmails:e.piiIncludeEmails,piiIncludePhones:e.piiIncludePhones,piiIncludeAddresses:e.piiIncludeAddresses,piiConfidenceThreshold:e.piiConfidenceThreshold,piiRedactionMode:e.piiRedactionMode,piiWhitelist:e.piiWhitelist,piiCustomPatterns:e.piiCustomPatterns}),e.enableZespanPilot!==!1&&e.projectId?this.configClient=new Ke({baseUrl:this.baseURL,apiKey:this.apiKey,projectId:e.projectId}):this.configClient=null,this.batch=new De(this,{maxSize:e.batchSize??50,flushInterval:e.flushInterval??2e3},this.configClient??void 0),process.once("beforeExit",()=>this.batch.flush()),this.enableOTel&&Ge({endpoint:e.otelEndpoint,serviceName:e.otelServiceName,sampleRate:e.sampleRate,apiKey:this.apiKey,environment:this.environment}),e.autopatch!==!1&&Be()}enqueue(e){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. Set redactPii: true to enable pattern-based PII detection (emails, SSNs, credit cards, etc.). To disable prompt capture: { storePrompts: false }")),this.batch.push(e))}redactForStorage(e){return Oe(e,this.redactKeys)}async redactValueAsync(e){return Et(e,this.redactKeys,this.redactPii)}async redactTextAsync(e){return Gt(e,this.redactPii)}async redactObjectAsync(e){return Ft(e,this.redactKeys,this.redactPii)}resolveGuardrailsUrl(){let e=this.baseURL.replace(/\/+$/,"");return e.endsWith("/v1")?`${e}/guardrails/check`:`${e}/v1/guardrails/check`}async checkGuardrails(e){let n=await fetch(this.resolveGuardrailsUrl(),{method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey},body:JSON.stringify(e)});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 t=await n.json();return{allowed:!!t.allowed,results:Array.isArray(t.results)?t.results:[],modifiedText:typeof t.modifiedText=="string"?t.modifiedText:null}}flush(){return this.batch.flush()}createSpan(e){return ke().startSpan(e.name,{kind:e.kind??be.INTERNAL,attributes:e.attributes??{}})}async withSpan(e,n,t){let r=ke().startSpan(e,{kind:t?.kind??be.INTERNAL,attributes:t?.attributes??{}});try{let o=await n(r);return r.setStatus({code:we.OK}),o}catch(o){throw r.setStatus({code:we.ERROR,message:o.message}),r.recordException(o),o}finally{r.end()}}},ft=null,ht=a=>{ft=new We(a)},q=()=>{if(!ft)throw new Error("Call zespan.init() first");return ft},Dn=ht;var H=class extends Error{phase;results;constructor(e,n){super(`Guardrail blocked ${e} content`),this.name="GuardrailBlockedError",this.phase=e,this.results=n}};function te(a,e){if(!a)return null;if(a===!0)return{pre:!0,post:!0,failClosed:!1,operation:e};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??e}}function ae(a,e){return e?.modifiedText?e.modifiedText:a}async function Z(a,e,n){if(!e||n.phase==="pre"&&!e.pre||n.phase==="post"&&!e.post)return null;let t=n.text?.trim();if(!t)return null;try{let s=await a.checkGuardrails({...n,text:t.slice(0,5e4),operation:n.operation??e.operation});if(!s.allowed)throw new H(n.phase,s.results);return s}catch(s){if(s instanceof H||e.failClosed)throw s;return null}}function se(a){if(!Array.isArray(a))return{systemPrompt:void 0,conversationMessages:[]};let e=[],n=[];for(let t of a)if((typeof t?.role=="string"?t.role:t?._getType?.()??"")==="system"){let r=typeof t.content=="string"?t.content:Array.isArray(t.content)?t.content.map(o=>typeof o=="string"?o:o?.text??"").filter(Boolean).join(""):JSON.stringify(t.content??"");r&&e.push(r)}else n.push(t);return{systemPrompt:e.length?e.join(`
3
- `):void 0,conversationMessages:n}}function En(a){let e={};try{let n=[],t=[];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),t.push(r)}for(let s of n){try{let r=s.match(/You are the (\w+)Agent/i);if(r){e.agent_name=r[1];break}}catch{}try{let r=s.match(/Agent Name:\s*(\w+)/i);if(r){e.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]){e.agent_role=r[1].toLowerCase();break}}catch{}try{a.length>10&&(e.has_memory=!0)}catch{}try{let s=t.join(" ").toLowerCase();(s.includes("think step by step")||s.includes("let's reason")||s.includes("step 1"))&&(e.has_planning=!0)}catch{}}catch{}return e}function de(a,e){let n=En(a);try{!n.has_planning&&e&&/^o[13]/.test(e)&&(n.has_planning=!0)}catch{}return n}function ce(a){try{let e=a.filter(s=>s?.role==="user").length,n=a[a.length-1],t=typeof n?.role=="string"?n.role:"user";return{conversation_turn:e,message_role:t}}catch{return{conversation_turn:0,message_role:"user"}}}function le(a){try{return a.map(e=>{try{return e?.type==="function"&&e?.function?{name:String(e.function.name??""),description:e.function.description?String(e.function.description):void 0,parameters_schema:e.function.parameters??void 0,source:"function"}:e?.name?{name:String(e.name),description:e.description?String(e.description):void 0,parameters_schema:e.input_schema??e.parameters??void 0,source:"function"}:null}catch{return null}}).filter(e=>e!==null)}catch{return[]}}function $e(a){try{let e=a?.[0]?.message?.tool_calls??[],n=new Set,t={};for(let s of e)try{let r=s?.function?.name;if(typeof r=="string"&&r){n.add(r);try{t[r]=typeof s.function.arguments=="string"?JSON.parse(s.function.arguments):s.function.arguments??{}}catch{t[r]=s.function?.arguments??{}}}}catch{}return{tools_used:Array.from(n),tool_call_args:t}}catch{return{tools_used:[],tool_call_args:{}}}}function _e(a){try{let e={};for(let s of a)try{let r=typeof s?.index=="number"?s.index:0;e[r]||(e[r]={name:"",argumentsStr:""}),s?.function?.name&&(e[r].name+=s.function.name),s?.function?.arguments&&(e[r].argumentsStr+=s.function.arguments)}catch{}let n=new Set,t={};for(let s of Object.values(e))try{let r=s.name;if(r){n.add(r);try{t[r]=s.argumentsStr?JSON.parse(s.argumentsStr):{}}catch{t[r]=s.argumentsStr}}}catch{}return{tools_used:Array.from(n),tool_call_args:t}}catch{return{tools_used:[],tool_call_args:{}}}}import{createHash as Kn}from"crypto";import{SpanKind as Ln,SpanStatusCode as Te,trace as zn}from"@opentelemetry/api";async function fe(a,e){if(!e||!e.enabled)return a();let n;for(let t=0;t<=e.maxRetries;t++)try{return await a()}catch(s){if(n=s,e.retryOnStatusCodes.length>0&&!e.retryOnStatusCodes.includes(s?.status))throw s;if(t>=e.maxRetries)break;let r=Math.min(1e3*Math.pow(e.backoffMultiplier,t),3e4);await Gn(r)}throw n}function Gn(a){return new Promise(e=>setTimeout(e,a))}var yt=class{constructor(e,n=1/0){this.max=e;this.maxQueue=n;this.counter=e}counter;queue=[];acquire(){return this.counter>0?(this.counter--,Promise.resolve()):this.queue.length>=this.maxQueue?Promise.reject(new Error(`Semaphore queue full (max ${this.maxQueue})`)):new Promise(e=>{this.queue.push(e)})}release(){this.queue.length>0?this.queue.shift()():this.counter++}async run(e){await this.acquire();try{return await e()}finally{this.release()}}},ve=new Map,Fn=256;function qn(){let a=ve.keys().next().value;a!==void 0&&ve.delete(a)}function he(a,e){let n=ve.get(a);return n?(ve.delete(a),ve.set(a,n),n):(ve.size>=Fn&&qn(),n=new yt(e),ve.set(a,n),n)}var Ze=a=>Kn("sha256").update(a).digest("hex");function Bn(a,e,n="openai"){return{"gen_ai.system":n,"gen_ai.model":e,"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*Wn(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:c,otelSpan:d,model:p,agentCtx:m,autoDetected:i,conversation_turn:l,message_role:_,tool_definitions:g,provider:v,operation:I}=e,y=v??"openai",h,k=0,A=0,f=0,j="",w=p,T=[],S="",D=[],{systemPrompt:R,conversationMessages:C}=se(c.messages??[]),[N,x]=await Promise.all([n.storePrompts?n.redactValueAsync(C):Promise.resolve(void 0),n.storePrompts&&R?n.redactValueAsync(R):Promise.resolve(void 0)]);try{for await(let W of a){h||(h=performance.now()-t,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:w,operation:I,latency_ms:h,ttft_ms:h,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Ze(JSON.stringify(c.messages)),...N!==void 0?{prompt_text:N,...x!==void 0?{system_prompt:x}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,finish_reason:"stream_start",...m,span_kind:"llm",tool_definitions:g,conversation_turn:l,message_role:_,metadata:{auto_detected:Object.keys(i).length?i:void 0}}),d&&d.setAttribute("gen_ai.response.time_to_first_token",h));let G=W.choices?.[0]?.delta?.content;if(G&&(A++,S+=G),W.choices?.[0]?.finish_reason&&(j=W.choices[0].finish_reason),W.model&&(w=W.model),W.usage&&(k=Number(W.usage.prompt_tokens||k||0),A=Number(W.usage.completion_tokens||A||0),f=Number(W.usage.prompt_tokens_details?.cached_tokens||f||0)),W.choices?.[0]?.delta?.tool_calls)for(let U of W.choices[0].delta.tool_calls)D.push(U),U.function?.name&&!T.includes(U.function.name)&&T.push(U.function.name);yield W}let{tools_used:M,tool_call_args:P}=_e(D),E=M.length>0?M:T,O=performance.now()-t,[L,K,z]=await Promise.all([n.storePrompts?n.redactValueAsync(S):Promise.resolve(void 0),n.redactObjectAsync(P),E.length>0&&S?n.redactTextAsync(S):Promise.resolve(void 0)]);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:w,operation:I,latency_ms:O,ttft_ms:h,stream:!0,input_tokens:k,output_tokens:A,cached_tokens:f,status:"success",finish_reason:j||"stream_end",tools_used:E,tool_call_args:K,prompt_hash:Ze(JSON.stringify(c.messages)),...N!==void 0?{prompt_text:N,completion_text:L,...x!==void 0?{system_prompt:x}:{}}:{},...z!==void 0?{decision_rationale:z}:{},...m,span_kind:"llm",tool_definitions:g,conversation_turn:l,message_role:_,metadata:{usage:{prompt_tokens:k,completion_tokens:A,cached_tokens:f},auto_detected:Object.keys(i).length?i:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),d&&(d.setAttribute("gen_ai.usage.output_tokens",A),d.setAttribute("gen_ai.usage.total_tokens",A),d.setAttribute("gen_ai.response.finish_reason",j||"stream_end"),d.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:w,operation:I,latency_ms:performance.now()-t,ttft_ms:h,stream:!0,input_tokens:0,output_tokens:A,cost_usd:0,status:"error",error_code:String(M.status??"unknown"),error_message:String(M.message).slice(0,500),...m,span_kind:"llm",conversation_turn:l,message_role:_,metadata:{auto_detected:Object.keys(i).length?i:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),d&&(d.setStatus({code:Te.ERROR,message:M.message}),d.recordException(M)),M}}function Je(a,e={}){let n=a,t=n.chat.completions.create.bind(n.chat.completions),s=te(e.guardrails,"chat"),r=e.providerOverride??"openai",o=e.operation??"chat";return n.chat.completions.create=async(c,d)=>{let p=q(),m=performance.now(),i=F(),l=u(),_=i?.traceId??u(),g=c.model??"gpt-4",v;if(p.configClient){let C=p.configClient.getAbTest(o);if(C)Math.random()<C.splitPercentage/100?(g=C.candidateModel,v={ab_test:!0,ab_variant:"candidate"}):v={ab_test:!0,ab_variant:"control"},c={...c,model:g};else{let N=p.configClient.getModel(o,g);if(N!==g){let x=g;g=N,c={...c,model:N},p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:r,model:N,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:x,override_model:N},environment:p.environment,sdk_version:b})}}}let I=null,y=null,h=i?.agentId?{agent_id:i.agentId,agent_name:i.agentName,agent_role:i.agentRole,agent_framework:i.agentFramework,parent_agent_id:i.parentAgentId}:{},k=de(c.messages??[],c.model),{conversation_turn:A,message_role:f}=ce(c.messages??[]),j=c.tools?.length?le(c.tools):void 0,w=null,T=p.enableOTel?zn.getTracer("zespan-sdk"):null;T&&(w=T.startSpan(`chat.completions ${g}`,{kind:Ln.CLIENT,attributes:Bn(c,g,r)}));let S;if(p.configClient){let C=p.configClient.getTimeout(o);C&&(S=AbortSignal.timeout(C.timeoutMs))}let D=p.configClient?.getRetryPolicy(o)??null,R=p.configClient?.getConcurrencyLimit(o)??null;try{I=await Z(p,s,{text:JSON.stringify(c.messages??[]),phase:"pre",traceId:_,spanId:l,model:g,operation:o,agentName:i?.agentName});let C=()=>fe(()=>$({traceId:_,spanId:l,userId:i?.userId,sessionId:i?.sessionId,tags:i?.tags},()=>t(c,S?{...d,signal:S}:d)),D),N=await(R!==null?he(`${p.projectId??"default"}:${o}`,R).run(C):C());if(c.stream===!0)return Wn(N,{client:p,t0:m,traceId:_,spanId:l,parent:i,params:c,otelSpan:w,model:g,agentCtx:h,autoDetected:k,conversation_turn:A,message_role:f,tool_definitions:j,provider:r,operation:o});let{prompt_tokens:M,completion_tokens:P,prompt_tokens_details:E}=N.usage??{},O=E?.cached_tokens??0,L=N.model??c.model,K=N.usage?.completion_tokens_details?.reasoning_tokens,z=N.choices?.[0]?.message?.content||"";y=await Z(p,s,{text:z,phase:"post",traceId:_,spanId:l,model:L,operation:o,agentName:i?.agentName});let W=ae(z,y);W!==z&&typeof N?.choices?.[0]?.message?.content=="string"&&(N.choices[0].message.content=W);let{tools_used:G,tool_call_args:U}=$e(N.choices??[]),{systemPrompt:B,conversationMessages:J}=se(c.messages??[]),[Y,ee,oe,X,ue]=await Promise.all([p.storePrompts?p.redactValueAsync(J):Promise.resolve(void 0),p.storePrompts?p.redactValueAsync(W):Promise.resolve(void 0),p.storePrompts&&B?p.redactValueAsync(B):Promise.resolve(void 0),p.redactObjectAsync(U),G.length>0&&z?p.redactTextAsync(z):Promise.resolve(void 0)]);return p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:r,model:L,operation:o,latency_ms:performance.now()-m,stream:!1,input_tokens:M??0,output_tokens:P??0,cached_tokens:O,...K?{reasoning_tokens:K}:{},status:"success",finish_reason:N.choices?.[0]?.finish_reason??"",tools_used:G.length>0?G:N.choices?.[0]?.message?.tool_calls?.map(re=>re.function.name)??[],tool_call_args:X,prompt_hash:Ze(JSON.stringify(c.messages)),...Y!==void 0?{prompt_text:Y,completion_text:ee,...oe!==void 0?{system_prompt:oe}:{}}:{},...ue!==void 0?{decision_rationale:ue}:{},...h,span_kind:"llm",tool_definitions:j,conversation_turn:A,message_role:f,metadata:{usage:N.usage??null,guardrails:{pre:I?{matched:I.results.length,modified:!!I.modifiedText}:null,post:y?{matched:y.results.length,modified:!!y.modifiedText}:null},auto_detected:Object.keys(k).length?k:void 0,...v??{}},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:p.environment,sdk_version:b}),w&&(w.setAttribute("gen_ai.usage.input_tokens",M??0),w.setAttribute("gen_ai.usage.output_tokens",P??0),w.setAttribute("gen_ai.usage.total_tokens",(M??0)+(P??0)),w.setAttribute("gen_ai.usage.cached_tokens",O),w.setAttribute("gen_ai.response.finish_reason",N.choices?.[0]?.finish_reason??""),w.setAttribute("gen_ai.response.latency",performance.now()-m),w.setStatus({code:Te.OK}),w.end()),N}catch(C){if(C?.name==="TimeoutError"||C?.code==="ABORT_ERR"||S&&S.aborted)throw p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:r,model:c.model,operation:o,latency_ms:performance.now()-m,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(C.message).slice(0,500),...h,span_kind:"llm",conversation_turn:A,message_role:f,metadata:{auto_detected:Object.keys(k).length?k:void 0},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:p.environment,sdk_version:b}),w&&(w.setStatus({code:Te.ERROR,message:C.message}),w.recordException(C),w.end()),C;let x=p.configClient?.getFallback(o)??null;if(x&&x.model){let E=String(C.message??"")+String(C.status??"")+String(C.code??"");if(x.conditions.length===0||x.conditions.some(L=>E.toLowerCase().includes(L.toLowerCase()))){let L=g,K={...c,model:x.model};p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:r,model:x.model,operation:o,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:L,fallback_model:x.model,reason:String(C.message).slice(0,200)},environment:p.environment,sdk_version:b});try{let z=await $({traceId:_,spanId:l,userId:i?.userId,sessionId:i?.sessionId,tags:i?.tags},()=>t(K,d)),{prompt_tokens:W,completion_tokens:G,prompt_tokens_details:U}=z.usage??{},B=U?.cached_tokens??0,J=z.model??x.model;return p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:r,model:J,operation:o,latency_ms:performance.now()-m,stream:!1,input_tokens:W??0,output_tokens:G??0,cached_tokens:B,status:"success",finish_reason:z.choices?.[0]?.finish_reason??"",prompt_hash:Ze(JSON.stringify(c.messages)),...h,span_kind:"llm",conversation_turn:A,message_role:f,metadata:{usage:z.usage??null,fallback_used:!0,original_model:L,auto_detected:Object.keys(k).length?k:void 0},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:p.environment,sdk_version:b}),w&&(w.setStatus({code:Te.OK}),w.end()),z}catch(z){throw w&&(w.setStatus({code:Te.ERROR,message:z.message}),w.recordException(z),w.end()),z}}}let M=C instanceof H,P=M?"error":C.status===429?"rate_limited":C.status===408?"timeout":"error";throw p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:r,model:c.model,operation:o,latency_ms:performance.now()-m,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:P,error_code:M?"guardrail_blocked":String(C.status??"unknown"),error_message:String(C.message).slice(0,500),...h,span_kind:"llm",conversation_turn:A,message_role:f,metadata:{auto_detected:Object.keys(k).length?k:void 0},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:p.environment,sdk_version:b}),w&&(w.setStatus({code:Te.ERROR,message:C.message}),w.recordException(C),w.end()),C}},a}import{createHash as $n}from"crypto";import{SpanKind as Zn,SpanStatusCode as Ae,trace as Jn}from"@opentelemetry/api";var Ue=a=>$n("sha256").update(a).digest("hex");function Un(a){let e=Array.isArray(a?.messages)?[...a.messages]:[],n=a?.system;if(typeof n=="string"&&n.trim().length>0)return[{role:"system",content:n},...e];if(Array.isArray(n)&&n.length>0){let t=n.map(s=>typeof s=="string"?s:typeof s?.text=="string"?s.text:"").filter(s=>s.length>0).join(`
4
- `);if(t.length>0)return[{role:"system",content:t},...e]}return e}function Vn(a,e){return{"gen_ai.system":"anthropic","gen_ai.model":e,"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*Hn(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:c,otelSpan:d,agentCtx:p,tool_definitions:m,autoDetected:i,conversation_turn:l,message_role:_,operation:g,detectionMessages:v}=e,I,y=0,h=0,k=0,A=0,f="",j=c.model,w=new Set,T=[],{systemPrompt:S,conversationMessages:D}=se(v),[R,C]=await Promise.all([n.storePrompts?n.redactValueAsync(D):Promise.resolve(void 0),n.storePrompts&&S?n.redactValueAsync(S):Promise.resolve(void 0)]);try{for await(let O of a){if(!I&&O.type==="content_block_start"&&(I=performance.now()-t,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:j,operation:g,latency_ms:I,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Ue(JSON.stringify(v)),...R!==void 0?{prompt_text:R,...C!==void 0?{system_prompt:C}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,finish_reason:"stream_start",...p,span_kind:"llm",tool_definitions:m,conversation_turn:l,message_role:_,metadata:{auto_detected:Object.keys(i).length?i:void 0}}),d&&d.setAttribute("gen_ai.response.time_to_first_token",I)),O.type==="content_block_delta"&&O.delta?.type==="text_delta"&&(A++,T.push(O.delta.text||"")),O.type==="message_delta"&&O.delta?.stop_reason&&(f=O.delta.stop_reason),O.type==="message_delta"&&O.usage&&(y=Number(O.usage.input_tokens||y||0),A=Number(O.usage.output_tokens||A||0),h=Number(O.usage.cache_read_input_tokens||h||0)),O.type==="message_start"&&O.message?.usage&&(y=Number(O.message.usage.input_tokens||y||0),A=Number(O.message.usage.output_tokens||A||0),h=Number(O.message.usage.cache_read_input_tokens||h||0)),O.type==="content_block_start"&&O.content_block?.type==="tool_use"){let L=O.content_block.name;L&&w.add(L)}yield O}let N=performance.now()-t,x=[...w],M=T.join(""),[P,E]=await Promise.all([n.storePrompts?n.redactValueAsync(M):Promise.resolve(void 0),x.length>0&&M?n.redactTextAsync(M):Promise.resolve(void 0)]);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:j,operation:g,latency_ms:N,ttft_ms:I,stream:!0,input_tokens:y,output_tokens:A,cached_tokens:h,reasoning_tokens:k,status:"success",finish_reason:f||"stream_end",tools_used:x,prompt_hash:Ue(JSON.stringify(v)),...R!==void 0?{prompt_text:R,completion_text:P,...C!==void 0?{system_prompt:C}:{}}:{},...E!==void 0?{decision_rationale:E}:{},...p,span_kind:"llm",tool_definitions:m,conversation_turn:l,message_role:_,metadata:{usage:{input_tokens:y,output_tokens:A,cache_read_input_tokens:h,reasoning_tokens:k},auto_detected:Object.keys(i).length?i:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),d&&(d.setAttribute("gen_ai.usage.output_tokens",A),d.setAttribute("gen_ai.response.finish_reason",f||"stream_end"))}catch(N){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:j,operation:g,latency_ms:performance.now()-t,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:A,cost_usd:0,status:"error",error_code:String(N.status??N.type??"unknown"),error_message:String(N.message).slice(0,500),...p,span_kind:"llm",conversation_turn:l,message_role:_,metadata:{auto_detected:Object.keys(i).length?i:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),d&&(d.setStatus({code:Ae.ERROR,message:N.message}),d.recordException(N)),N}}function $t(a,e={}){let n=a,t=n.messages.create.bind(n.messages),s=te(e.guardrails,"chat"),r=e.operation??"chat";return n.messages.create=async(o,c)=>{let d=q(),p=performance.now(),m=F(),i=u(),l=m?.traceId??u(),_=o.model??"claude-3-5-sonnet-20241022",g;if(d.configClient){let P=d.configClient.getAbTest(r);if(P)Math.random()<P.splitPercentage/100?(_=P.candidateModel,g={ab_test:!0,ab_variant:"candidate"}):g={ab_test:!0,ab_variant:"control"},o={...o,model:_};else{let E=d.configClient.getModel(r,_);if(E!==_){let O=_;_=E,o={...o,model:E},d.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:i,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:E,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:O,override_model:E},environment:d.environment,sdk_version:b})}}}let v=null,I=null,y=Un(o),{systemPrompt:h,conversationMessages:k}=se(y),A=de(y,_),{conversation_turn:f,message_role:j}=ce(y),w=m?.agentName??A.agent_name,T=m?.agentRole??A.agent_role,S=m?.agentId||w||T?{agent_id:m?.agentId,agent_name:w,agent_role:T,agent_framework:m?.agentFramework,parent_agent_id:m?.parentAgentId}:{},D=o.tools?.length?le(o.tools):void 0,R=null,C=d.enableOTel?Jn.getTracer("zespan-sdk"):null;C&&(R=C.startSpan(`messages.create ${_}`,{kind:Zn.CLIENT,attributes:Vn(o,_)}));let N;if(d.configClient){let P=d.configClient.getTimeout(r);P&&(N=AbortSignal.timeout(P.timeoutMs))}let x=d.configClient?.getRetryPolicy(r)??null,M=d.configClient?.getConcurrencyLimit(r)??null;try{v=await Z(d,s,{text:JSON.stringify(o.messages??[]),phase:"pre",traceId:l,spanId:i,model:_,operation:r,agentName:m?.agentName});let P=()=>fe(()=>$({traceId:l,spanId:i,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags,agentId:m?.agentId,agentName:w,agentRole:T,agentFramework:m?.agentFramework,parentAgentId:m?.parentAgentId,conversationTurn:f,availableTools:D},()=>t(o,N?{...c,signal:N}:c)),x),E=await(M!==null?he(`${d.projectId??"default"}:${r}`,M).run(P):P());if(o.stream===!0)return Hn(E,{client:d,t0:p,traceId:l,spanId:i,parent:m,params:o,otelSpan:R,agentCtx:S,tool_definitions:D,autoDetected:A,conversation_turn:f,message_role:j,operation:r,detectionMessages:y});let L=E.usage?.input_tokens??0,K=E.usage?.output_tokens??0,z=E.usage?.cache_read_input_tokens??0,W=E.model??o.model,G=E.content?.find(V=>V.type==="text")?.text||"",U=(E.content??[]).filter(V=>V.type==="tool_use"),B=U.map(V=>V.name).filter(Boolean),J={};for(let V of U)V.name&&(J[V.name]=V.input??{});I=await Z(d,s,{text:G,phase:"post",traceId:l,spanId:i,model:W,operation:r,agentName:m?.agentName});let Y=ae(G,I);if(Y!==G){let V=E.content?.find(pe=>pe.type==="text");V&&typeof V.text=="string"&&(V.text=Y)}let[ee,oe,X,ue,re]=await Promise.all([d.storePrompts?d.redactValueAsync(k):Promise.resolve(void 0),d.storePrompts?d.redactValueAsync(Y):Promise.resolve(void 0),d.storePrompts&&h?d.redactValueAsync(h):Promise.resolve(void 0),d.redactObjectAsync(J),U.length>0&&G?d.redactTextAsync(G):Promise.resolve(void 0)]);return d.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:i,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:W,operation:r,latency_ms:performance.now()-p,stream:!1,input_tokens:L,output_tokens:K,cached_tokens:z,status:"success",finish_reason:E.stop_reason??"",tools_used:B.length>0?B:E.content?.filter(V=>V.type==="tool_use").map(V=>V.name)??[],tool_call_args:ue,prompt_hash:Ue(JSON.stringify(y)),...ee!==void 0?{prompt_text:ee,completion_text:oe,...X!==void 0?{system_prompt:X}:{}}:{},...re!==void 0?{decision_rationale:re}:{},...S,span_kind:"llm",tool_definitions:D,conversation_turn:f,message_role:j,metadata:{usage:E.usage??null,guardrails:{pre:v?{matched:v.results.length,modified:!!v.modifiedText}:null,post:I?{matched:I.results.length,modified:!!I.modifiedText}:null},auto_detected:Object.keys(A).length?A:void 0,...g??{}},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:d.environment,sdk_version:b}),R&&(R.setAttribute("gen_ai.usage.input_tokens",L),R.setAttribute("gen_ai.usage.output_tokens",K),R.setAttribute("gen_ai.usage.cached_tokens",z),R.setAttribute("gen_ai.response.finish_reason",E.stop_reason??""),R.setAttribute("gen_ai.response.latency",performance.now()-p),R.setStatus({code:Ae.OK}),R.end()),E}catch(P){if(P?.name==="TimeoutError"||P?.code==="ABORT_ERR"||N&&N.aborted)throw d.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:i,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:o.model,operation:r,latency_ms:performance.now()-p,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(P.message).slice(0,500),...S,span_kind:"llm",conversation_turn:f,message_role:j,metadata:{auto_detected:Object.keys(A).length?A:void 0},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:d.environment,sdk_version:b}),R&&(R.setStatus({code:Ae.ERROR,message:P.message}),R.recordException(P),R.end()),P;let O=d.configClient?.getFallback(r)??null;if(O&&O.model){let z=String(P.message??"")+String(P.status??"")+String(P.code??"");if(O.conditions.length===0||O.conditions.some(G=>z.toLowerCase().includes(G.toLowerCase()))){let G=_,U={...o,model:O.model};d.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:i,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:O.model,operation:r,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:G,fallback_model:O.model,reason:String(P.message).slice(0,200)},environment:d.environment,sdk_version:b});try{let B=await $({traceId:l,spanId:i,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags},()=>t(U,c)),J=B.usage?.input_tokens??0,Y=B.usage?.output_tokens??0,ee=B.usage?.cache_read_input_tokens??0,oe=B.model??O.model;return d.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:i,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:oe,operation:r,latency_ms:performance.now()-p,stream:!1,input_tokens:J,output_tokens:Y,cached_tokens:ee,status:"success",finish_reason:B.stop_reason??"",prompt_hash:Ue(JSON.stringify(y)),...S,span_kind:"llm",conversation_turn:f,message_role:j,metadata:{usage:B.usage??null,fallback_used:!0,original_model:G,auto_detected:Object.keys(A).length?A:void 0},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:d.environment,sdk_version:b}),R&&(R.setStatus({code:Ae.OK}),R.end()),B}catch(B){throw R&&(R.setStatus({code:Ae.ERROR,message:B.message}),R.recordException(B),R.end()),B}}}let L=P instanceof H,K=L?"error":P.status===429||P.type==="overloaded_error"?"rate_limited":P.status===408?"timeout":"error";throw d.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:i,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:o.model,operation:r,latency_ms:performance.now()-p,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:K,error_code:L?"guardrail_blocked":String(P.status??P.type??"unknown"),error_message:String(P.message).slice(0,500),...S,span_kind:"llm",conversation_turn:f,message_role:j,metadata:{auto_detected:Object.keys(A).length?A:void 0},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:d.environment,sdk_version:b}),R&&(R.setStatus({code:Ae.ERROR,message:P.message}),R.recordException(P),R.end()),P}},a}import{createHash as Qn}from"crypto";import{SpanKind as Ve,SpanStatusCode as me,trace as He}from"@opentelemetry/api";var Pe=a=>Qn("sha256").update(a).digest("hex");function Qe(a){let e=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,t=[],s=a?.systemInstruction??a?.system_instruction,r=e(s);if(r.length>0&&t.push({role:"system",content:r}),typeof n=="string")return t.push({role:"user",content:n}),t;if(Array.isArray(n)){for(let o of n){if(typeof o=="string"){t.push({role:"user",content:o});continue}if(o&&typeof o=="object"){let c=typeof o.role=="string"?o.role:"user",d=e(o);d.length>0&&t.push({role:c,content:d})}}return t}if(n&&typeof n=="object"){let o=typeof n.role=="string"?n.role:"user",c=e(n);c.length>0&&t.push({role:o,content:c})}return t}function Xe(a,e){return{"gen_ai.system":"google","gen_ai.model":e,"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 kt(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*Zt(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:c,modelName:d,otelSpan:p,streamResult:m,agentCtx:i,tool_definitions:l,autoDetected:_,conversation_turn:g,message_role:v,operation:I}=e,y,h=0,k=0,A=0,f=0,j="",w=[],T="";try{for await(let C of a){y||(y=performance.now()-t,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:d,operation:I,latency_ms:y,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Pe(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:b,finish_reason:"stream_start",...i,span_kind:"llm",tool_definitions:l,conversation_turn:g,message_role:v,metadata:{auto_detected:Object.keys(_).length?_:void 0}}),p&&p.setAttribute("gen_ai.response.time_to_first_token",y));let N=(typeof C?.text=="function"?C.text():C?.text)||C?.candidates?.[0]?.content?.parts?.map(P=>P?.text||"").join("")||"";N&&(h++,T+=N),C.candidates?.[0]?.finishReason&&(j=C.candidates[0].finishReason);let x=Array.isArray(C?.functionCalls)?C.functionCalls:C?.functionCalls?[C.functionCalls]:[],M=(C?.candidates?.[0]?.content?.parts??[]).map(P=>P?.functionCall).filter(Boolean);for(let P of[...x,...M])P?.name&&!w.includes(P.name)&&w.push(P.name);yield C}let S=await m?.response;S?.usageMetadata&&(k=Number(S.usageMetadata.promptTokenCount||k||0),h=Number(S.usageMetadata.candidatesTokenCount||h||0),A=Number(S.usageMetadata.cachedContentTokenCount||A||0),f=Number(S.usageMetadata.thoughtsTokenCount||f||0));let D=kt(S);D&&(T=D);let R=performance.now()-t;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:d,operation:I,latency_ms:R,ttft_ms:y,stream:!0,input_tokens:k,output_tokens:h,cached_tokens:A,reasoning_tokens:f,status:"success",finish_reason:j||"stream_end",tools_used:w,prompt_hash:Pe(JSON.stringify(c)),...n.storePrompts?{prompt_text:n.redactForStorage(c),completion_text:n.redactForStorage(T)}:{},...i,span_kind:"llm",tool_definitions:l,conversation_turn:g,message_role:v,metadata:{usage:S?.usageMetadata??{promptTokenCount:k,candidatesTokenCount:h,cachedContentTokenCount:A,thoughtsTokenCount:f},auto_detected:Object.keys(_).length?_:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),p&&(p.setAttribute("gen_ai.completion",T),p.setAttribute("gen_ai.usage.input_tokens",k),p.setAttribute("gen_ai.usage.output_tokens",h),p.setAttribute("gen_ai.usage.total_tokens",k+h),p.setAttribute("gen_ai.usage.cached_tokens",A),p.setAttribute("gen_ai.usage.reasoning_tokens",f),p.setAttribute("gen_ai.response.finish_reason",j||"stream_end"),p.setStatus({code:me.OK}),p.end())}catch(S){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:d,operation:I,latency_ms:performance.now()-t,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:h,cost_usd:0,status:"error",error_code:String(S.status??"unknown"),error_message:String(S.message).slice(0,500),...i,span_kind:"llm",conversation_turn:g,message_role:v,metadata:{auto_detected:Object.keys(_).length?_:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),p&&(p.setStatus({code:me.ERROR,message:S.message}),p.recordException(S),p.end()),S}}function Jt(a,e={}){let n=a,t=n.getGenerativeModel.bind(n),s=te(e.guardrails,"chat"),r=e.operation??"chat";return n.getGenerativeModel=(o,c)=>{let d=o.model,p=q(),m=!1,i=d,l;if(p.configClient){let y=p.configClient.getAbTest(r);if(y)Math.random()<y.splitPercentage/100?(i=d,d=y.candidateModel,o={...o,model:d},m=!0,l={ab_test:!0,ab_variant:"candidate"}):l={ab_test:!0,ab_variant:"control"};else{let h=p.configClient.getModel(r,d);h!==d&&(i=d,d=h,o={...o,model:h},m=!0)}}let _=t(o,c),g=_.generateContent.bind(_);_.generateContent=async(y,h)=>{let k=q(),A=performance.now(),f=F(),j=u(),w=f?.traceId??u(),T=null,S=null,D=Qe(y),R=de(D,d),{conversation_turn:C,message_role:N}=ce(D),x=f?.agentName??R.agent_name,M=f?.agentRole??R.agent_role,P=f?.agentId||x||M?{agent_id:f?.agentId,agent_name:x,agent_role:M,agent_framework:f?.agentFramework,parent_agent_id:f?.parentAgentId}:{},E=y?.tools?.length?le(y.tools):void 0,O=null,L=k.enableOTel?He.getTracer("zespan-sdk"):null;L&&(O=L.startSpan(`generateContent ${d}`,{kind:Ve.CLIENT,attributes:Xe(y,d)})),m&&k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:i,override_model:d},environment:k.environment,sdk_version:b});try{T=await Z(k,s,{text:JSON.stringify(y??""),phase:"pre",traceId:w,spanId:j,model:d,operation:r,agentName:f?.agentName});let K;if(k.configClient){let Q=k.configClient.getTimeout(r);Q&&(K=AbortSignal.timeout(Q.timeoutMs))}let z=k.configClient?.getRetryPolicy(r)??null,W=k.configClient?.getConcurrencyLimit(r)??null,G=()=>fe(()=>$({traceId:w,spanId:j,userId:f?.userId,sessionId:f?.sessionId,tags:f?.tags,agentId:f?.agentId,agentName:x,agentRole:M,agentFramework:f?.agentFramework,parentAgentId:f?.parentAgentId,conversationTurn:C,availableTools:E},()=>g(y,K?{...h,signal:K}:h)),z),U=await(W!==null?he(`${k.projectId??"default"}:${r}`,W).run(G):G()),B=U.response,J=B.usageMetadata?.promptTokenCount??0,Y=B.usageMetadata?.candidatesTokenCount??0,ee=B.usageMetadata?.cachedContentTokenCount??0,oe=B.usageMetadata?.thoughtsTokenCount??0,X=kt(B),ue=(B.candidates?.[0]?.content?.parts??[]).filter(Q=>Q?.functionCall),re=ue.map(Q=>Q.functionCall.name).filter(Boolean),V=(B.candidates?.[0]?.content?.parts??[]).filter(Q=>Q?.text&&!Q?.functionCall).map(Q=>Q.text).join(""),pe={};for(let Q of ue)Q.functionCall?.name&&(pe[Q.functionCall.name]=Q.functionCall.args??{});S=await Z(k,s,{text:X,phase:"post",traceId:w,spanId:j,model:d,operation:r,agentName:f?.agentName});let ye=ae(X,S);return k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-A,stream:!1,input_tokens:J,output_tokens:Y,cached_tokens:ee,reasoning_tokens:oe,status:"success",finish_reason:B.candidates?.[0]?.finishReason??"",tools_used:re,tool_call_args:Object.keys(pe).length?pe:void 0,prompt_hash:Pe(JSON.stringify(y)),...k.storePrompts?{prompt_text:k.redactForStorage(y),completion_text:k.redactForStorage(ye)}:{},...re.length>0&&V?{decision_rationale:V}:{},...P,span_kind:"llm",tool_definitions:E,conversation_turn:C,message_role:N,metadata:{usage:B.usageMetadata??null,guardrails:{pre:T?{matched:T.results.length,modified:!!T.modifiedText}:null,post:S?{matched:S.results.length,modified:!!S.modifiedText}:null},auto_detected:Object.keys(R).length?R:void 0,...l??{}},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),O&&(O.setAttribute("gen_ai.completion",ye),O.setAttribute("gen_ai.usage.input_tokens",J),O.setAttribute("gen_ai.usage.output_tokens",Y),O.setAttribute("gen_ai.usage.total_tokens",J+Y),O.setAttribute("gen_ai.usage.cached_tokens",ee),O.setAttribute("gen_ai.usage.reasoning_tokens",oe),O.setAttribute("gen_ai.response.finish_reason",B.candidates?.[0]?.finishReason??""),O.setAttribute("gen_ai.response.latency",performance.now()-A),O.setStatus({code:me.OK}),O.end()),U}catch(K){let z=K.__signal;if(K?.name==="TimeoutError"||K?.code==="ABORT_ERR")throw k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-A,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(K.message).slice(0,500),...P,span_kind:"llm",conversation_turn:C,message_role:N,metadata:{auto_detected:Object.keys(R).length?R:void 0},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),O&&(O.setStatus({code:me.ERROR,message:K.message}),O.recordException(K),O.end()),K;let G=k.configClient?.getFallback(r)??null;if(G&&G.model){let J=String(K.message??"")+String(K.status??"")+String(K.code??"");if(G.conditions.length===0||G.conditions.some(ee=>J.toLowerCase().includes(ee.toLowerCase()))){let ee=d,oe={...o,model:G.model},X=t(oe,c),ue=X.generateContent.bind(X);k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:G.model,operation:r,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:ee,fallback_model:G.model,reason:String(K.message).slice(0,200)},environment:k.environment,sdk_version:b});try{let re=await $({traceId:w,spanId:j,userId:f?.userId,sessionId:f?.sessionId,tags:f?.tags},()=>ue(y,h)),V=re.response,pe=V.usageMetadata?.promptTokenCount??0,ye=V.usageMetadata?.candidatesTokenCount??0,Q=V.usageMetadata?.cachedContentTokenCount??0;return k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:G.model,operation:r,latency_ms:performance.now()-A,stream:!1,input_tokens:pe,output_tokens:ye,cached_tokens:Q,status:"success",finish_reason:V.candidates?.[0]?.finishReason??"",prompt_hash:Pe(JSON.stringify(y)),...P,span_kind:"llm",conversation_turn:C,message_role:N,metadata:{usage:V.usageMetadata??null,fallback_used:!0,original_model:ee,auto_detected:Object.keys(R).length?R:void 0},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),O&&(O.setStatus({code:me.OK}),O.end()),re}catch(re){throw O&&(O.setStatus({code:me.ERROR,message:re.message}),O.recordException(re),O.end()),re}}}let U=K instanceof H,B=U?"error":K.status===429?"rate_limited":K.status===408?"timeout":"error";throw k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-A,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:B,error_code:U?"guardrail_blocked":String(K.status??"unknown"),error_message:String(K.message).slice(0,500),...P,span_kind:"llm",conversation_turn:C,message_role:N,metadata:{auto_detected:Object.keys(R).length?R:void 0},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),O&&(O.setStatus({code:me.ERROR,message:K.message}),O.recordException(K),O.end()),K}};let v=_.generateContentStream.bind(_);_.generateContentStream=async(y,h)=>{let k=q(),A=performance.now(),f=F(),j=u(),w=f?.traceId??u(),T=Qe(y),S=de(T,d),{conversation_turn:D,message_role:R}=ce(T),C=f?.agentName??S.agent_name,N=f?.agentRole??S.agent_role,x=f?.agentId||C||N?{agent_id:f?.agentId,agent_name:C,agent_role:N,agent_framework:f?.agentFramework,parent_agent_id:f?.parentAgentId}:{},M=y?.tools?.length?le(y.tools):void 0,P=null,E=k.enableOTel?He.getTracer("zespan-sdk"):null;E&&(P=E.startSpan(`generateContentStream ${d}`,{kind:Ve.CLIENT,attributes:Xe(y,d)}));try{let O=await $({traceId:w,spanId:j,userId:f?.userId,sessionId:f?.sessionId,tags:f?.tags,agentId:f?.agentId,agentName:C,agentRole:N,agentFramework:f?.agentFramework,parentAgentId:f?.parentAgentId,conversationTurn:D,availableTools:M},()=>v(y,h));return P&&P.setAttribute("gen_ai.request.stream",!0),O.stream=Zt(O.stream,{client:k,t0:A,traceId:w,spanId:j,parent:f,params:y,modelName:d,otelSpan:P,streamResult:O,agentCtx:x,tool_definitions:M,autoDetected:S,conversation_turn:D,message_role:R,operation:r}),O}catch(O){let L=O instanceof H,K=L?"error":O.status===429?"rate_limited":O.status===408?"timeout":"error";throw k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-A,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:K,error_code:L?"guardrail_blocked":String(O.status??"unknown"),error_message:String(O.message).slice(0,500),...x,span_kind:"llm",conversation_turn:D,message_role:R,metadata:{auto_detected:Object.keys(S).length?S:void 0},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),P&&(P.setStatus({code:me.ERROR,message:O.message}),P.recordException(O),P.end()),O}};let I=_.startChat?.bind(_);return I&&(_.startChat=y=>{let h=I(y),k=h.sendMessage?.bind(h),A=h.sendMessageStream?.bind(h);return k&&(h.sendMessage=async(f,j)=>{let w=q(),T=performance.now(),S=F(),D=u(),R=S?.traceId??u(),C={...y||{},message:f},N=null,x=null,M=Qe(C),P=de(M,d),{conversation_turn:E,message_role:O}=ce(M),L=S?.agentName??P.agent_name,K=S?.agentRole??P.agent_role,z=S?.agentId||L||K?{agent_id:S?.agentId,agent_name:L,agent_role:K,agent_framework:S?.agentFramework,parent_agent_id:S?.parentAgentId}:{},W=y?.tools?.length?le(y.tools):void 0,G=null,U=w.enableOTel?He.getTracer("zespan-sdk"):null;U&&(G=U.startSpan(`sendMessage ${d}`,{kind:Ve.CLIENT,attributes:Xe(C,d)}));try{N=await Z(w,s,{text:JSON.stringify(C),phase:"pre",traceId:R,spanId:D,model:d,operation:r,agentName:S?.agentName});let B=await $({traceId:R,spanId:D,userId:S?.userId,sessionId:S?.sessionId,tags:S?.tags,agentId:S?.agentId,agentName:L,agentRole:K,agentFramework:S?.agentFramework,parentAgentId:S?.parentAgentId,conversationTurn:E,availableTools:W},()=>k(f,j)),J=B.response,Y=J.usageMetadata?.promptTokenCount??0,ee=J.usageMetadata?.candidatesTokenCount??0,oe=J.usageMetadata?.cachedContentTokenCount??0,X=J.usageMetadata?.thoughtsTokenCount??0,ue=kt(J),re=(J.candidates?.[0]?.content?.parts??[]).filter(Q=>Q?.functionCall),V=re.map(Q=>Q.functionCall.name).filter(Boolean),pe={};for(let Q of re)Q.functionCall?.name&&(pe[Q.functionCall.name]=Q.functionCall.args??{});x=await Z(w,s,{text:ue,phase:"post",traceId:R,spanId:D,model:d,operation:r,agentName:S?.agentName});let ye=ae(ue,x);return w.enqueue({event_id:u(),project_id:"",trace_id:R,span_id:D,parent_span_id:S?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-T,stream:!1,input_tokens:Y,output_tokens:ee,cached_tokens:oe,reasoning_tokens:X,status:"success",finish_reason:J.candidates?.[0]?.finishReason??"",tools_used:V,tool_call_args:Object.keys(pe).length?pe:void 0,prompt_hash:Pe(JSON.stringify(C)),...w.storePrompts?{prompt_text:w.redactForStorage(C),completion_text:w.redactForStorage(ye)}:{},...z,span_kind:"llm",tool_definitions:W,conversation_turn:E,message_role:O,metadata:{usage:J.usageMetadata??null,guardrails:{pre:N?{matched:N.results.length,modified:!!N.modifiedText}:null,post:x?{matched:x.results.length,modified:!!x.modifiedText}:null},auto_detected:Object.keys(P).length?P:void 0},user_id:S?.userId,session_id:S?.sessionId,tags:S?.tags,environment:w.environment,sdk_version:b}),G&&(G.setAttribute("gen_ai.completion",ye),G.setAttribute("gen_ai.usage.input_tokens",Y),G.setAttribute("gen_ai.usage.output_tokens",ee),G.setAttribute("gen_ai.usage.total_tokens",Y+ee),G.setAttribute("gen_ai.usage.cached_tokens",oe),G.setAttribute("gen_ai.usage.reasoning_tokens",X),G.setAttribute("gen_ai.response.finish_reason",J.candidates?.[0]?.finishReason??""),G.setAttribute("gen_ai.response.latency",performance.now()-T),G.setStatus({code:me.OK}),G.end()),B}catch(B){let J=B instanceof H,Y=J?"error":B.status===429?"rate_limited":B.status===408?"timeout":"error";throw w.enqueue({event_id:u(),project_id:"",trace_id:R,span_id:D,parent_span_id:S?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-T,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:Y,error_code:J?"guardrail_blocked":String(B.status??"unknown"),error_message:String(B.message).slice(0,500),...z,span_kind:"llm",conversation_turn:E,message_role:O,metadata:{auto_detected:Object.keys(P).length?P:void 0},user_id:S?.userId,session_id:S?.sessionId,tags:S?.tags,environment:w.environment,sdk_version:b}),G&&(G.setStatus({code:me.ERROR,message:B.message}),G.recordException(B),G.end()),B}}),A&&(h.sendMessageStream=async(f,j)=>{let w=q(),T=performance.now(),S=F(),D=u(),R=S?.traceId??u(),C={...y||{},message:f},N=Qe(C),x=de(N,d),{conversation_turn:M,message_role:P}=ce(N),E=S?.agentName??x.agent_name,O=S?.agentRole??x.agent_role,L=S?.agentId||E||O?{agent_id:S?.agentId,agent_name:E,agent_role:O,agent_framework:S?.agentFramework,parent_agent_id:S?.parentAgentId}:{},K=y?.tools?.length?le(y.tools):void 0,z=null,W=w.enableOTel?He.getTracer("zespan-sdk"):null;W&&(z=W.startSpan(`sendMessageStream ${d}`,{kind:Ve.CLIENT,attributes:Xe(C,d)}));try{let G=await $({traceId:R,spanId:D,userId:S?.userId,sessionId:S?.sessionId,tags:S?.tags,agentId:S?.agentId,agentName:E,agentRole:O,agentFramework:S?.agentFramework,parentAgentId:S?.parentAgentId,conversationTurn:M,availableTools:K},()=>A(f,j));return z&&z.setAttribute("gen_ai.request.stream",!0),G.stream=Zt(G.stream,{client:w,t0:T,traceId:R,spanId:D,parent:S,params:C,modelName:d,otelSpan:z,streamResult:G,agentCtx:L,tool_definitions:K,autoDetected:x,conversation_turn:M,message_role:P,operation:r}),G}catch(G){let U=G instanceof H,B=U?"error":G.status===429?"rate_limited":G.status===408?"timeout":"error";throw w.enqueue({event_id:u(),project_id:"",trace_id:R,span_id:D,parent_span_id:S?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-T,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:B,error_code:U?"guardrail_blocked":String(G.status??"unknown"),error_message:String(G.message).slice(0,500),...L,span_kind:"llm",conversation_turn:M,message_role:P,metadata:{auto_detected:Object.keys(x).length?x:void 0},user_id:S?.userId,session_id:S?.sessionId,tags:S?.tags,environment:w.environment,sdk_version:b}),z&&(z.setStatus({code:me.ERROR,message:G.message}),z.recordException(G),z.end()),G}}),h}),_},a}import{createHash as Xn}from"crypto";import{SpanKind as Yn,SpanStatusCode as It,trace as es}from"@opentelemetry/api";var Ut=a=>Xn("sha256").update(a).digest("hex");function Vt(a){let e=[];if(a?.systemInstruction){let t=typeof a.systemInstruction=="string"?a.systemInstruction:a.systemInstruction?.parts?.map(s=>s?.text||"").join("")||"";t&&e.push({role:"system",content:t})}let n=a?.contents;if(typeof n=="string")e.push({role:"user",content:n});else if(Array.isArray(n))for(let t of n){if(typeof t=="string"){e.push({role:"user",content:t});continue}let s=t?.role||"user",r=Array.isArray(t?.parts)?t.parts.map(o=>o?.text||"").filter(Boolean).join(""):t?.text||"";r&&e.push({role:s,content:r})}return e}function ts(a){try{if(typeof a?.text=="function")return a.text()||"";if(typeof a?.text=="string")return a.text}catch{}return(a?.candidates?.[0]?.content?.parts??[]).filter(e=>typeof e?.text=="string").map(e=>e.text).join("")}function ns(a){return(a?.candidates?.[0]?.content?.parts??[]).filter(e=>e?.inlineData).length}function Ht(a){return{input:Number(a?.promptTokenCount||0),output:Number(a?.candidatesTokenCount||0),cached:Number(a?.cachedContentTokenCount||0),reasoning:Number(a?.thoughtsTokenCount||0)}}function Qt(a,e={}){let t=a.models;if(!t||t.__zespanPatched)return a;let s=te(e.guardrails,"chat"),r=e.operation??"chat",o=t.generateContent.bind(t),c=t.generateContentStream?.bind(t),d=t.embedContent?.bind(t),p=t.generateImages?.bind(t),m=t.generateVideos?.bind(t);return t.generateContent=async i=>{let l=q(),_=performance.now(),g=F(),v=u(),I=g?.traceId??u(),y=i?.model??"gemini",h=!1,k=y,A;if(l.configClient){let E=l.configClient.getAbTest(r);if(E)Math.random()<E.splitPercentage/100?(k=y,y=E.candidateModel,i={...i,model:y},h=!0,A={ab_test:!0,ab_variant:"candidate"}):A={ab_test:!0,ab_variant:"control"};else{let O=l.configClient.getModel(r,y);O!==y&&(k=y,y=O,i={...i,model:O},h=!0)}}let f=Vt(i),j=de(f,y),{conversation_turn:w,message_role:T}=ce(f),S=g?.agentName??j.agent_name,D=g?.agentRole??j.agent_role,R=g?.agentId||S||D?{agent_id:g?.agentId,agent_name:S,agent_role:D,agent_framework:g?.agentFramework,parent_agent_id:g?.parentAgentId}:{},C=i?.tools?.length?le(i.tools):void 0,N=null,x=l.enableOTel?es.getTracer("zespan-sdk"):null;x&&(N=x.startSpan(`generateContent ${y}`,{kind:Yn.CLIENT,attributes:{"gen_ai.system":"google","gen_ai.model":y,"gen_ai.operation.name":"chat"}})),h&&l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:k,override_model:y},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:l.environment,sdk_version:b});let M=null,P=null;try{M=await Z(l,s,{text:JSON.stringify(i??""),phase:"pre",traceId:I,spanId:v,model:y,operation:r,agentName:g?.agentName});let E;if(l.configClient){let X=l.configClient.getTimeout(r);X&&(E=AbortSignal.timeout(X.timeoutMs))}let O=l.configClient?.getRetryPolicy(r)??null,L=l.configClient?.getConcurrencyLimit(r)??null,K=()=>fe(()=>$({traceId:I,spanId:v,userId:g?.userId,sessionId:g?.sessionId,tags:g?.tags,agentId:g?.agentId,agentName:S,agentRole:D,agentFramework:g?.agentFramework,parentAgentId:g?.parentAgentId,conversationTurn:w,availableTools:C},()=>o(E?{...i,fetchOptions:{signal:E}}:i)),O),z=await(L!==null?he(`${l.projectId??"default"}:${r}`,L).run(K):K()),W=Ht(z?.usageMetadata),G=ts(z),U=ns(z),B=U>0,J=(z?.candidates?.[0]?.content?.parts??[]).filter(X=>X?.functionCall),Y=J.map(X=>X.functionCall.name).filter(Boolean),ee={};for(let X of J)X.functionCall?.name&&(ee[X.functionCall.name]=X.functionCall.args??{});P=await Z(l,s,{text:G,phase:"post",traceId:I,spanId:v,model:y,operation:r,agentName:g?.agentName});let oe=ae(G,P);return l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:r,latency_ms:performance.now()-_,stream:!1,input_tokens:W.input,output_tokens:W.output,cached_tokens:W.cached,reasoning_tokens:W.reasoning,status:"success",finish_reason:z?.candidates?.[0]?.finishReason??"",tools_used:Y,tool_call_args:Object.keys(ee).length?ee:void 0,prompt_hash:Ut(JSON.stringify(i)),...l.storePrompts?{prompt_text:l.redactForStorage(i),completion_text:l.redactForStorage(oe)}:{},...Y.length>0&&G?{decision_rationale:G}:{},...R,span_kind:B?"image_gen":"llm",tool_definitions:C,conversation_turn:w,message_role:T,metadata:{usage:z?.usageMetadata??null,...B?{num_images:U}:{},guardrails:{pre:M?{matched:M.results.length,modified:!!M.modifiedText}:null,post:P?{matched:P.results.length,modified:!!P.modifiedText}:null},auto_detected:Object.keys(j).length?j:void 0,...A??{}},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:l.environment,sdk_version:b}),N&&(N.setAttribute("gen_ai.completion",oe),N.setAttribute("gen_ai.usage.input_tokens",W.input),N.setAttribute("gen_ai.usage.output_tokens",W.output),N.setAttribute("gen_ai.usage.total_tokens",W.input+W.output),N.setStatus({code:It.OK}),N.end()),z}catch(E){throw E instanceof H?(N&&(N.setStatus({code:It.ERROR,message:"Guardrail blocked"}),N.end()),E):(l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:r,latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(E.status??E.code??"unknown"),error_message:String(E.message).slice(0,500),...R,span_kind:"llm",user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:l.environment,sdk_version:b}),N&&(N.setStatus({code:It.ERROR,message:E.message}),N.recordException(E),N.end()),E)}},c&&(t.generateContentStream=async i=>{let l=q(),_=performance.now(),g=F(),v=u(),I=g?.traceId??u(),y=i?.model??"gemini";if(l.configClient){let R=l.configClient.getModel(r,y);R!==y&&(y=R,i={...i,model:R})}let h=Vt(i),k=de(h,y),{conversation_turn:A,message_role:f}=ce(h),j=g?.agentName??k.agent_name,w=g?.agentRole??k.agent_role,T=g?.agentId||j||w?{agent_id:g?.agentId,agent_name:j,agent_role:w,agent_framework:g?.agentFramework,parent_agent_id:g?.parentAgentId}:{},S=i?.tools?.length?le(i.tools):void 0,D=await c(i);return(async function*(){let R=0,C=0,N=0,x=0,M,P="",E="",O=[];try{for await(let L of D){M||(M=performance.now()-_);let K=L?.usageMetadata;K&&(R=Number(K.promptTokenCount||R),C=Number(K.candidatesTokenCount||C),N=Number(K.cachedContentTokenCount||N),x=Number(K.thoughtsTokenCount||x));let z=typeof L?.text=="function"?L.text():L?.text||"";z&&(E+=z),L?.candidates?.[0]?.finishReason&&(P=L.candidates[0].finishReason);let W=(L?.candidates?.[0]?.content?.parts??[]).map(G=>G?.functionCall).filter(Boolean);for(let G of W)G?.name&&!O.includes(G.name)&&O.push(G.name);yield L}l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:r,latency_ms:performance.now()-_,ttft_ms:M,stream:!0,input_tokens:R,output_tokens:C,cached_tokens:N,reasoning_tokens:x,status:"success",finish_reason:P||"stream_end",tools_used:O,prompt_hash:Ut(JSON.stringify(i)),...l.storePrompts?{prompt_text:l.redactForStorage(i),completion_text:l.redactForStorage(E)}:{},...T,span_kind:"llm",tool_definitions:S,conversation_turn:A,message_role:f,user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:l.environment,sdk_version:b})}catch(L){throw l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:r,latency_ms:performance.now()-_,ttft_ms:M,stream:!0,input_tokens:R,output_tokens:C,status:"error",error_code:String(L.status??L.code??"unknown"),error_message:String(L.message).slice(0,500),...T,span_kind:"llm",user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:l.environment,sdk_version:b}),L}})()}),d&&(t.embedContent=async i=>{let l=q(),_=performance.now(),g=F(),v=u(),I=g?.traceId??u(),y=i?.model??"gemini-embedding";try{let h=await d(i),k=Ht(h?.usageMetadata);return l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"embedding",latency_ms:performance.now()-_,stream:!1,input_tokens:k.input,output_tokens:0,status:"success",span_kind:"embedding",user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:l.environment,sdk_version:b}),h}catch(h){throw l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"embedding",latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(h.status??h.code??"unknown"),error_message:String(h.message).slice(0,500),span_kind:"embedding",environment:l.environment,sdk_version:b}),h}}),p&&(t.generateImages=async i=>{let l=q(),_=performance.now(),g=F(),v=u(),I=g?.traceId??u(),y=i?.model??"imagen";try{let h=await p(i),k=h?.generatedImages?.length??0,A=i?.config??{};return l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"image_gen",latency_ms:performance.now()-_,stream:!1,input_tokens:k,output_tokens:0,status:"success",span_kind:"image_gen",metadata:{prompt:typeof i?.prompt=="string"?i.prompt.slice(0,500):void 0,num_images:k,image_config:{aspect_ratio:A.aspectRatio,number_of_images:A.numberOfImages,output_mime_type:A.outputMimeType,image_size:A.imageSize,person_generation:A.personGeneration}},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:l.environment,sdk_version:b}),h}catch(h){throw l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"image_gen",latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(h.status??h.code??"unknown"),error_message:String(h.message).slice(0,500),span_kind:"image_gen",environment:l.environment,sdk_version:b}),h}}),m&&(t.generateVideos=async i=>{let l=q(),_=performance.now(),g=F(),v=u(),I=g?.traceId??u(),y=i?.model??"veo";try{let h=await m(i),k=i?.config??{};return l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"video_gen",latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"success",span_kind:"video_gen",metadata:{prompt:typeof i?.prompt=="string"?i.prompt.slice(0,500):void 0,num_videos:k.numberOfVideos??1,video_duration_seconds:k.durationSeconds,video_config:{aspect_ratio:k.aspectRatio,resolution:k.resolution,fps:k.fps,person_generation:k.personGeneration}},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:l.environment,sdk_version:b}),h}catch(h){throw l.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:v,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"video_gen",latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(h.status??h.code??"unknown"),error_message:String(h.message).slice(0,500),span_kind:"video_gen",environment:l.environment,sdk_version:b}),h}}),t.__zespanPatched=!0,a}import{createHash as ss}from"crypto";import{SpanKind as os,SpanStatusCode as Ye,trace as rs}from"@opentelemetry/api";var St=a=>ss("sha256").update(a).digest("hex");function as(a,e,n,t){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 is(a,e){return{"gen_ai.system":"openrouter","gen_ai.model":e,"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*ds(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:c,otelSpan:d,agentCtx:p,autoDetected:m,conversation_turn:i,message_role:l,tool_definitions:_}=e,g,v=0,I=0,y=0,h=0,k="",A=c.model,f=[],j="",w=[],{systemPrompt:T,conversationMessages:S}=se(c.messages??[]);try{for await(let x of a){if(g||(g=performance.now()-t,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:A,operation:"chat",latency_ms:g,ttft_ms:g,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:St(JSON.stringify(c.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:b,finish_reason:"stream_start",...p,span_kind:"llm",tool_definitions:_,conversation_turn:i,message_role:l,metadata:{auto_detected:Object.keys(m).length?m:void 0}}),d&&d.setAttribute("gen_ai.response.time_to_first_token",g)),x.choices?.[0]?.delta?.content&&(v++,j+=x.choices[0].delta.content),x.choices?.[0]?.finish_reason&&(k=x.choices[0].finish_reason),x.model&&(A=x.model),x.usage){I=Number(x.usage.prompt_tokens||I||0),v=Number(x.usage.completion_tokens||v||0),y=Number(x.usage.prompt_tokens_details?.cached_tokens||y||0);let M=x.usage.completion_tokens_details||{};h=Number(M.reasoning_tokens||h||0)}if(x.choices?.[0]?.delta?.tool_calls)for(let M of x.choices[0].delta.tool_calls)w.push(M),M.function?.name&&!f.includes(M.function.name)&&f.push(M.function.name);yield x}let{tools_used:D,tool_call_args:R}=_e(w),C=D.length>0?D:f,N=performance.now()-t;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:A,operation:"chat",latency_ms:N,ttft_ms:g,stream:!0,input_tokens:I,output_tokens:v,cached_tokens:y,reasoning_tokens:h,status:"success",finish_reason:k||"stream_end",tools_used:C,tool_call_args:Object.keys(R).length?R:void 0,prompt_hash:St(JSON.stringify(c.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(S),completion_text:n.redactForStorage(j),...T?{system_prompt:n.redactForStorage(T)}:{}}:{},...p,span_kind:"llm",tool_definitions:_,conversation_turn:i,message_role:l,metadata:{usage:{prompt_tokens:I,completion_tokens:v,cached_tokens:y,reasoning_tokens:h},auto_detected:Object.keys(m).length?m:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),d&&(d.setAttribute("gen_ai.completion",j),d.setAttribute("gen_ai.usage.input_tokens",I),d.setAttribute("gen_ai.usage.output_tokens",v),d.setAttribute("gen_ai.usage.total_tokens",I+v),d.setAttribute("gen_ai.usage.reasoning_tokens",h),d.setAttribute("gen_ai.response.finish_reason",k||"stream_end"),d.setStatus({code:Ye.OK}),d.end())}catch(D){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:A,operation:"chat",latency_ms:performance.now()-t,ttft_ms:g,stream:!0,input_tokens:0,output_tokens:v,cost_usd:0,status:"error",error_code:String(D.status??"unknown"),error_message:String(D.message).slice(0,500),...p,span_kind:"llm",conversation_turn:i,message_role:l,metadata:{auto_detected:Object.keys(m).length?m:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),d&&(d.setStatus({code:Ye.ERROR,message:D.message}),d.recordException(D),d.end()),D}}function Xt(a,e={}){let n=a.chat.completions.create,t=te(e.guardrails,"chat");return a.chat.completions.create=async(s,r)=>{let o=q(),c=performance.now(),d=F(),p=u(),m=d?.traceId??u(),i=s.model??"openrouter\u6A21\u578B",l=null,_=null;if(o.configClient){let f=o.configClient.getModel("chat",i);if(f!==i){let j=i;i=f,s={...s,model:f},o.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:p,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:f,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:j,override_model:f},environment:o.environment,sdk_version:b})}}let g=d?.agentId?{agent_id:d.agentId,agent_name:d.agentName,agent_role:d.agentRole,agent_framework:d.agentFramework,parent_agent_id:d.parentAgentId}:{},v=de(s.messages??[],s.model),{conversation_turn:I,message_role:y}=ce(s.messages??[]),h=s.tools?.length?le(s.tools):void 0,k=null,A=o.enableOTel?rs.getTracer("zespan-sdk"):null;A&&(k=A.startSpan(`chat.completions ${i}`,{kind:os.CLIENT,attributes:is(s,i)}));try{l=await Z(o,t,{text:JSON.stringify(s.messages??[]),phase:"pre",traceId:m,spanId:p,model:i,operation:"chat"});let f=await $({traceId:m,spanId:p,userId:d?.userId,sessionId:d?.sessionId,tags:d?.tags},()=>n.call(a.chat.completions,s,r));if(s.stream===!0)return k&&k.setAttribute("gen_ai.request.stream",!0),ds(f,{client:o,t0:c,traceId:m,spanId:p,parent:d,params:s,otelSpan:k,agentCtx:g,autoDetected:v,conversation_turn:I,message_role:y,tool_definitions:h});let{prompt_tokens:w,completion_tokens:T,completion_tokens_details:S}=f.usage??{},D=S?.reasoning_tokens??0,R=f.model??s.model,{cost:C,source:N}=as(f,R,w??0,T??0);f.pricing||(f.pricing={cost_usd:C,source:N});let x=f.choices?.[0]?.message?.content||"";_=await Z(o,t,{text:x,phase:"post",traceId:m,spanId:p,model:R,operation:"chat"});let M=ae(x,_);M!==x&&typeof f?.choices?.[0]?.message?.content=="string"&&(f.choices[0].message.content=M);let{tools_used:P,tool_call_args:E}=$e(f.choices??[]);return o.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:p,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:R,operation:"chat",latency_ms:performance.now()-c,stream:!1,input_tokens:w??0,output_tokens:T??0,cached_tokens:0,cost_usd:C,status:"success",finish_reason:f.choices?.[0]?.finish_reason??"",tools_used:P.length>0?P:f.choices?.[0]?.message?.tool_calls?.map(O=>O.function.name)??[],tool_call_args:Object.keys(E).length?E:void 0,prompt_hash:St(JSON.stringify(s.messages)),...o.storePrompts?(()=>{let{systemPrompt:O,conversationMessages:L}=se(s.messages??[]);return{prompt_text:o.redactForStorage(L),completion_text:o.redactForStorage(M),...O?{system_prompt:o.redactForStorage(O)}:{}}})():{},...P.length>0&&x?{decision_rationale:x}:{},...g,span_kind:"llm",tool_definitions:h,conversation_turn:I,message_role:y,metadata:{usage:f.usage??null,pricing:f.pricing??{cost_usd:C,source:N},guardrails:{pre:l?{matched:l.results.length,modified:!!l.modifiedText}:null,post:_?{matched:_.results.length,modified:!!_.modifiedText}:null},auto_detected:Object.keys(v).length?v:void 0},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:o.environment,sdk_version:b}),k&&(k.setAttribute("gen_ai.usage.input_tokens",w??0),k.setAttribute("gen_ai.usage.output_tokens",T??0),k.setAttribute("gen_ai.usage.total_tokens",(w??0)+(T??0)),k.setAttribute("gen_ai.usage.reasoning_tokens",D),k.setAttribute("gen_ai.completion",f.choices?.[0]?.message?.content||""),k.setAttribute("gen_ai.response.finish_reason",f.choices?.[0]?.finish_reason??""),k.setAttribute("gen_ai.response.latency",performance.now()-c),k.setStatus({code:Ye.OK}),k.end()),f}catch(f){let j=f instanceof H,w=j?"error":f.status===429?"rate_limited":f.status===408?"timeout":"error";throw o.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:p,parent_span_id:d?.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:w,error_code:j?"guardrail_blocked":String(f.status??f.code??"unknown"),error_message:String(f.message).slice(0,500),...g,span_kind:"llm",conversation_turn:I,message_role:y,metadata:{auto_detected:Object.keys(v).length?v:void 0},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:o.environment,sdk_version:b}),k&&(k.setStatus({code:Ye.ERROR,message:f.message}),k.recordException(f),k.end()),f}},a}async function*Yt(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,model:c,operation:d,input:p}=e,m=0,i=0,l=0,_="",g,v=[],I=new Set,y={},h="",k=[],A=p?.messages??[],f=(p?.system??[]).map(S=>S.text??"").filter(Boolean),j=f.length?f.join(`
7
- `):void 0,[w,T]=await Promise.all([n.storePrompts?n.redactValueAsync(A):Promise.resolve(void 0),n.storePrompts&&j?n.redactValueAsync(j):Promise.resolve(void 0)]);try{for await(let x of a){if(g||(g=performance.now()-t,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:c,operation:d,latency_ms:g,ttft_ms:g,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(A),...j?{system_prompt:n.redactForStorage(j)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b})),"contentBlockStart"in x){let M=x.contentBlockStart?.start?.toolUse;M?.name&&(h=M.name,k.length=0,I.add(h))}else if("contentBlockDelta"in x){let M=x.contentBlockDelta?.delta;M?.text&&v.push(M.text),M?.toolUse?.input&&k.push(M.toolUse.input)}else if("contentBlockStop"in x){if(h){let M=k.join("");try{y[h]=JSON.parse(M)}catch{y[h]=M}h=""}}else"metadata"in x&&x.metadata?.usage?(m=x.metadata.usage.inputTokens??m,i=x.metadata.usage.outputTokens??i,l=x.metadata.usage.cacheReadInputTokens??l):"messageStop"in x&&x.messageStop?.stopReason&&(_=x.messageStop.stopReason);yield x}let S=[...I],D=v.join(""),[R,C,N]=await Promise.all([n.storePrompts?n.redactValueAsync(D):Promise.resolve(void 0),n.redactObjectAsync(y),S.length>0&&D?n.redactTextAsync(D):Promise.resolve(void 0)]);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:c,operation:d,latency_ms:performance.now()-t,ttft_ms:g,stream:!0,input_tokens:m,output_tokens:i,cached_tokens:l,cost_usd:0,status:"success",finish_reason:_||"stream_end",span_kind:"llm",tools_used:S.length?S:void 0,tool_call_args:C,...N!==void 0?{decision_rationale:N}:{},...w!==void 0?{prompt_text:w,completion_text:R,...T!==void 0?{system_prompt:T}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b})}catch(S){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:c,operation:d,latency_ms:performance.now()-t,ttft_ms:g,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:String(S.$metadata?.httpStatusCode??S.name??"unknown"),error_message:String(S.message).slice(0,500),user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),S}}function cs(a,e={}){let n=a,t=e.operation??"chat",s=te(e.guardrails,t),r=n.converse?.bind(n);r&&(n.converse=async(d,...p)=>{let m=q(),i=performance.now(),l=F(),_=u(),g=l?.traceId??u(),v=d.modelId??"amazon.nova-lite-v1:0";m.configClient&&(v=m.configClient.getModel(t,v),v!==d.modelId&&(d={...d,modelId:v}));let I=JSON.stringify(d.messages??[]);await Z(m,s,{text:I,phase:"pre",traceId:g,spanId:_,model:v,operation:t,agentName:l?.agentName});try{let y=await $({traceId:g,spanId:_,userId:l?.userId,sessionId:l?.sessionId,tags:l?.tags},()=>r(d,...p)),h=y.usage??{},k=y.output?.message?.content??[],A=k.filter(M=>M.text).map(M=>M.text).join(""),f=k.filter(M=>M.toolUse),j=f.map(M=>M.toolUse?.name).filter(Boolean),w={};for(let M of f)M.toolUse?.name&&(w[M.toolUse.name]=M.toolUse.input??{});let T=(d.system??[]).map(M=>M.text??"").filter(Boolean),S=T.length?T.join(`
8
- `):void 0,[D,R,C,N,x]=await Promise.all([m.storePrompts?m.redactValueAsync(d.messages??[]):Promise.resolve(void 0),m.storePrompts?m.redactValueAsync(A):Promise.resolve(void 0),m.storePrompts&&S?m.redactValueAsync(S):Promise.resolve(void 0),m.redactObjectAsync(w),j.length>0&&A?m.redactTextAsync(A):Promise.resolve(void 0)]);return m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:v,operation:t,latency_ms:performance.now()-i,stream:!1,input_tokens:Number(h.inputTokens??0),output_tokens:Number(h.outputTokens??0),cached_tokens:Number(h.cacheReadInputTokens??0),status:"success",finish_reason:y.stopReason??"",span_kind:"llm",tools_used:j.length?j:void 0,tool_call_args:N,...D!==void 0?{prompt_text:D,completion_text:R,...C!==void 0?{system_prompt:C}:{}}:{},...x!==void 0?{decision_rationale:x}:{},user_id:l?.userId,session_id:l?.sessionId,tags:l?.tags,environment:m.environment,sdk_version:b}),y}catch(y){throw m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:v,operation:t,latency_ms:performance.now()-i,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:l?.userId,session_id:l?.sessionId,tags:l?.tags,environment:m.environment,sdk_version:b}),y}});let o=n.converseStream?.bind(n);o&&(n.converseStream=async(d,...p)=>{let m=q(),i=performance.now(),l=F(),_=u(),g=l?.traceId??u(),v=d.modelId??"amazon.nova-lite-v1:0",I=await $({traceId:g,spanId:_,userId:l?.userId,sessionId:l?.sessionId,tags:l?.tags},()=>o(d,...p));return{...I,stream:Yt(I.stream,{client:m,t0:i,traceId:g,spanId:_,parent:l,model:v,operation:t,input:d})}});let c=n.send?.bind(n);return c&&(n.send=async(d,...p)=>{if(!(d?.constructor?.name==="ConverseStreamCommand"||d?.$name==="ConverseStream"))return c(d,...p);let i=q(),l=performance.now(),_=F(),g=u(),v=_?.traceId??u(),I=d?.input?.modelId??"amazon.nova-lite-v1:0",y=await $({traceId:v,spanId:g,userId:_?.userId,sessionId:_?.sessionId,tags:_?.tags},()=>c(d,...p));return{...y,stream:Yt(y.stream,{client:i,t0:l,traceId:v,spanId:g,parent:_,model:I,operation:t,input:d.input})}}),a}function ls(a,e={}){let n=a,t=e.operation??"chat",s=te(e.guardrails,t),r=n.chat.complete.bind(n.chat);n.chat.complete=async(c,...d)=>{let p=q(),m=performance.now(),i=F(),l=u(),_=i?.traceId??u(),g=c.model??"mistral-small-latest";p.configClient&&(g=p.configClient.getModel(t,g),g!==c.model&&(c={...c,model:g}));let v=JSON.stringify(c.messages??[]);await Z(p,s,{text:v,phase:"pre",traceId:_,spanId:l,model:g,operation:t});try{let I=await $({traceId:_,spanId:l,userId:i?.userId,sessionId:i?.sessionId,tags:i?.tags},()=>r(c,...d)),y=I.model??g,h=I.usage??{},k=Number(h.promptTokens??0),A=Number(h.completionTokens??0),f=I.choices?.[0]?.finishReason??"",j=I.choices?.[0]?.message?.content??"",w=I.choices?.[0]?.message?.tool_calls??[],T=w.map(C=>C.function?.name).filter(Boolean),S={};for(let C of w)if(C.function?.name)try{S[C.function.name]=JSON.parse(C.function.arguments??"{}")}catch{S[C.function.name]={}}await Z(p,s,{text:j,phase:"post",traceId:_,spanId:l,model:y,operation:t});let{systemPrompt:D,conversationMessages:R}=se(c.messages??[]);return p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:y,operation:t,latency_ms:performance.now()-m,stream:!1,input_tokens:k,output_tokens:A,status:"success",finish_reason:f,span_kind:"llm",tools_used:T.length?T:void 0,tool_call_args:Object.keys(S).length?S:void 0,...p.storePrompts?{prompt_text:p.redactForStorage(R),completion_text:p.redactForStorage(j),...D?{system_prompt:p.redactForStorage(D)}:{}}:{},...T.length>0&&j?{decision_rationale:j}:{},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:p.environment,sdk_version:b}),I}catch(I){throw p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:g,operation:t,latency_ms:performance.now()-m,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(I.message).slice(0,500),user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:p.environment,sdk_version:b}),I}};let o=n.chat.stream?.bind(n.chat);return o&&(n.chat.stream=async function*(c,...d){let p=q(),m=performance.now(),i=F(),l=u(),_=i?.traceId??u(),g=c.model??"mistral-small-latest";p.configClient&&(g=p.configClient.getModel(t,g),g!==c.model&&(c={...c,model:g}));let v=0,I=0,y="",h,k="",A=[],f=[],{systemPrompt:j,conversationMessages:w}=se(c.messages??[]);try{let T=await $({traceId:_,spanId:l,userId:i?.userId,sessionId:i?.sessionId,tags:i?.tags},()=>o(c,...d));for await(let C of T){h||(h=performance.now()-m,p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:g,operation:t,latency_ms:h,ttft_ms:h,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",finish_reason:"stream_start",span_kind:"llm",...p.storePrompts?{prompt_text:p.redactForStorage(w),...j?{system_prompt:p.redactForStorage(j)}:{}}:{},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:p.environment,sdk_version:b}));let N=C.data?.choices?.[0]?.delta?.content;if(N&&(I++,k+=N),C.data?.usage&&(v=C.data.usage.promptTokens??v,I=C.data.usage.completionTokens??I),C.data?.choices?.[0]?.finishReason&&(y=C.data.choices[0].finishReason),C.data?.model&&(g=C.data.model),C.data?.choices?.[0]?.delta?.tool_calls)for(let x of C.data.choices[0].delta.tool_calls)f.push(x),x.function?.name&&!A.includes(x.function.name)&&A.push(x.function.name);yield C}let{tools_used:S,tool_call_args:D}=_e(f),R=S.length>0?S:A;p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:g,operation:t,latency_ms:performance.now()-m,ttft_ms:h,stream:!0,input_tokens:v,output_tokens:I,cost_usd:0,status:"success",finish_reason:y||"stream_end",span_kind:"llm",tools_used:R.length?R:void 0,tool_call_args:Object.keys(D).length?D:void 0,...R.length>0&&k?{decision_rationale:k}:{},...p.storePrompts?{prompt_text:p.redactForStorage(w),completion_text:p.redactForStorage(k),...j?{system_prompt:p.redactForStorage(j)}:{}}:{},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:p.environment,sdk_version:b})}catch(T){throw p.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:g,operation:t,latency_ms:performance.now()-m,ttft_ms:h,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(T.message).slice(0,500),user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:p.environment,sdk_version:b}),T}}),a}import{createHash as us}from"crypto";var en=a=>us("sha256").update(a).digest("hex");async function*ps(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:c,model:d,operation:p}=e,m,i=0,l=0,_=0,g="",v="",I=d,y=[],h=[],{systemPrompt:k,conversationMessages:A}=se(c.messages??[]);try{for await(let T of a){m||(m=performance.now()-t,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:I,operation:p,latency_ms:m,ttft_ms:m,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:en(JSON.stringify(c.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(A),...k?{system_prompt:n.redactForStorage(k)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,finish_reason:"stream_start",span_kind:"llm"}));let S=T.choices?.[0]?.delta?.content;if(S&&(l++,v+=S),T.choices?.[0]?.finish_reason&&(g=T.choices[0].finish_reason),T.model&&(I=T.model),T.usage&&(i=Number(T.usage.prompt_tokens||i||0),l=Number(T.usage.completion_tokens||l||0),_=Number(T.usage.prompt_tokens_details?.cached_tokens||_||0)),T.choices?.[0]?.delta?.tool_calls)for(let D of T.choices[0].delta.tool_calls)h.push(D),D.function?.name&&!y.includes(D.function.name)&&y.push(D.function.name);yield T}let{tools_used:f,tool_call_args:j}=_e(h),w=f.length>0?f:y;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:I,operation:p,latency_ms:performance.now()-t,ttft_ms:m,stream:!0,input_tokens:i,output_tokens:l,cached_tokens:_,status:"success",finish_reason:g||"stream_end",tools_used:w.length?w:void 0,tool_call_args:Object.keys(j).length?j:void 0,...w.length>0&&v?{decision_rationale:v}:{},prompt_hash:en(JSON.stringify(c.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(A),completion_text:n.redactForStorage(v),...k?{system_prompt:n.redactForStorage(k)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,span_kind:"llm"})}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:"groq",model:I,operation:p,latency_ms:performance.now()-t,ttft_ms:m,stream:!0,input_tokens:0,output_tokens:l,cost_usd:0,status:"error",error_message:String(f.message).slice(0,500),user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),f}}function ms(a,e={}){let n=a,t=n.chat.completions.create.bind(n.chat.completions),s=e.operation??"chat";return n.chat.completions.create=async(r,...o)=>{let c=q(),d=performance.now(),p=F(),m=u(),i=p?.traceId??u(),l=r.model??"llama-3.3-70b-versatile";c.configClient&&(l=c.configClient.getModel(s,l),l!==r.model&&(r={...r,model:l}));try{let _=await $({traceId:i,spanId:m,userId:p?.userId,sessionId:p?.sessionId,tags:p?.tags},()=>t(r,...o));if(r.stream)return ps(_,{client:c,t0:d,traceId:i,spanId:m,parent:p,params:r,model:l,operation:s});let g=_.usage??{},v=Number(g.prompt_tokens??0),I=Number(g.completion_tokens??0),y=_.choices?.[0]?.finish_reason??"",h=_.choices?.[0]?.message?.content??"",k=_.choices?.[0]?.message?.tool_calls??[],A=k.map(T=>T.function?.name).filter(Boolean),f={};for(let T of k)if(T.function?.name)try{f[T.function.name]=JSON.parse(T.function.arguments??"{}")}catch{f[T.function.name]={}}let{systemPrompt:j,conversationMessages:w}=se(r.messages??[]);return c.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:m,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:l,operation:s,latency_ms:performance.now()-d,stream:!1,input_tokens:v,output_tokens:I,status:"success",finish_reason:y,span_kind:"llm",tools_used:A.length?A:void 0,tool_call_args:Object.keys(f).length?f:void 0,...c.storePrompts?{prompt_text:c.redactForStorage(w),completion_text:c.redactForStorage(h),...j?{system_prompt:c.redactForStorage(j)}:{}}:{},...A.length>0&&h?{decision_rationale:h}:{},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:c.environment,sdk_version:b}),_}catch(_){throw c.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:m,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:l,operation:s,latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(_.message).slice(0,500),user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:c.environment,sdk_version:b}),_}},a}function gs(a,e={}){let n=dt("openai").default??dt("openai"),t=new n({baseURL:a.baseURL,apiKey:a.apiKey??"litellm"});return Je(t,{...e,providerOverride:"litellm"})}import{BaseCallbackHandler as _s}from"@langchain/core/callbacks/base";import{createHash as fs}from"crypto";var vt=a=>fs("sha256").update(a).digest("hex"),hs=/\bstep\s+\d+[:\s]|\bfirst,?\s+(?:I|we|let)|\bthen,?\s+(?:I|we)|\bfinally,?\s+(?:I|we)|\blet me think|\blet'?s break (?:this |it )?down|\bthink(?:ing)? step by step|\bmy (?:plan|approach|strategy)|\bI'?ll start by|<thinking>|<scratchpad>|\bchain.of.thought/i,tn=["AgentExecutor","ReactAgent","ToolCallingAgent"],nn=["DynamicStructuredTool","StructuredTool","DynamicTool","Tool"],et=class extends _s{name="ZespanCallbackHandler";guardrailSettings=te(void 0,"chat");runs=new Map;constructor(e={}){super(),this.guardrailSettings=te(e.guardrails,"chat")}detectProvider(e){let n=e.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(e){try{let n=e?.generations?.[0];if(!Array.isArray(n))return[];let t=n[0]?.message;if(!t)return[];let s=t.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=t.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=t.additional_kwargs?.function_call;return o?[{name:o.name??"unknown",args:o.arguments?JSON.parse(o.arguments):{}}]:[]}catch{return[]}}detectConversationInfo(e,n,t){let s=n?._zespan_message_count;if(typeof s=="number"&&s>0)return{turns:s,hasMemory:s>2};let r=n?.invocation_params?.messages;if(Array.isArray(r))return{turns:r.length,hasMemory:r.length>2};let c=((t??JSON.stringify(e)).match(/"role"\s*:/g)||[]).length;return c>0?{turns:c,hasMemory:c>2}:{turns:e.length,hasMemory:!1}}detectAgentFromPrompts(e,n,t){try{let s=(t??JSON.stringify(e))+JSON.stringify(n?.invocation_params?.messages??[])+JSON.stringify(n?._zespan_structured_messages??[]),r=[/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 o of r){let c=s.match(o);if(c?.[1])return c[1].trim().replace(/[\s]+/g,"_")}return}catch{return}}detectPlanning(e,n){try{let t=e+" "+JSON.stringify(n);if(!hs.test(t))return{detected:!1};let r=/(?:step\s+\d+[:\s]|^\d+[\.\)]\s+)(.+)/gim,o=[],c;for(;(c=r.exec(e))!==null&&(c[1]&&o.push(c[1].trim().slice(0,200)),!(o.length>=10)););return{detected:!0,steps:o.length>0?o:void 0}}catch{return{detected:!1}}}extractCompletion(e){let n=e?.generations;if(!Array.isArray(n)||n.length===0)return"";let t=n[0];if(!Array.isArray(t)||t.length===0)return"";let s=t[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(e,n,t,s,r,o,c,d){try{let p=n.map(i=>i.map(l=>{let _=l._getType?.()??l.role??"unknown",g=typeof l.content=="string"?l.content:JSON.stringify(l.content);return`${_}: ${g}`}).join(`
10
- `)),m=n[0]?.map(i=>({role:i._getType?.()??i.role??"unknown",content:typeof i.content=="string"?i.content:JSON.stringify(i.content),tool_calls:i.tool_calls??i.additional_kwargs?.tool_calls}));await this.handleLLMStart(e,p,t,s,{...r,_zespan_structured_messages:m,_zespan_message_count:n[0]?.length??0})}catch{}}async handleLLMStart(e,n,t,s,r){try{let o=F(),c=q(),d=s?this.runs.get(s):void 0,p=u();ge(p);let m=d?.traceId??o?.traceId??u(),i=r?.invocation_params?.model??r?.invocation_params?.model_name??e.kwargs?.model??e.kwargs?.modelName??e.id?.[e.id.length-1]??"unknown",l=r?.invocation_params?.stream===!0,_=d?.spanKind==="agent"?d.agentId:void 0,g=d?.spanKind==="agent"?d.agentName:void 0,v=JSON.stringify(n),I=vt(v);if(!g){let f=this.detectAgentFromPrompts(n,r,v);f&&(g=f,_=_??u())}let y=r?.invocation_params?.tools??r?.invocation_params?.functions??[],h=y.map(f=>f.function?.name??f.name??"unknown").filter(Boolean),k=this.detectConversationInfo(n,r,v),A=await Z(c,this.guardrailSettings,{text:v,phase:"pre",traceId:m,spanId:p,model:i,operation:"chat"});this.runs.set(t,{t0:performance.now(),traceId:m,spanId:p,parentSpanId:d?.spanId??o?.spanId,model:i,agentId:_,agentName:g,spanKind:"llm",isStreaming:l,parent:o,prompts:n,promptHash:I,structuredMessages:r?._zespan_structured_messages,invocationParams:r?.invocation_params,preGuardrailResult:A,toolsAvailable:h,toolSchemas:c.storePrompts?y:void 0,conversationTurns:k.turns,hasMemory:k.hasMemory})}catch(o){if(o instanceof H)throw o}}async handleLLMNewToken(e,n,t){try{let s=this.runs.get(t);if(!s||s.ttft!==void 0)return;s.ttft=performance.now()-s.t0;let r=q();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:s.promptHash??vt(JSON.stringify(s.prompts)),...r.storePrompts?(()=>{let{systemPrompt:o,conversationMessages:c}=se(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:b,finish_reason:"stream_start"})}catch{}}async handleLLMEnd(e,n){try{let t=this.runs.get(n);if(!t)return;ie(t.spanId),this.runs.delete(n);let s=q(),r=e.llmOutput?.tokenUsage?.promptTokens??e.llmOutput?.usageMetadata?.promptTokenCount??0,o=e.llmOutput?.tokenUsage?.completionTokens??e.llmOutput?.usageMetadata?.candidatesTokenCount??0,c=performance.now()-t.t0,d=this.extractCompletion(e),p=this.extractToolCalls(e),m=e.llmOutput?.tokenUsage?.reasoningTokens??e.llmOutput?.usage?.completion_tokens_details?.reasoning_tokens??e.llmOutput?.reasoningTokens??e.llmOutput?.usageMetadata?.thoughtsTokenCount??0,i=e.llmOutput?.tokenUsage?.cachedTokens??e.llmOutput?.usage?.prompt_tokens_details?.cached_tokens??e.llmOutput?.usageMetadata?.cachedContentTokenCount??0,l=this.detectPlanning(d,t.prompts),_=e.generations?.[0]?.[0]?.generationInfo?.finish_reason??e.generations?.[0]?.[0]?.generationInfo?.finishReason??e.llmOutput?.finish_reason??(t.isStreaming?"stream_end":"stop"),g=await Z(s,this.guardrailSettings,{text:d,phase:"post",traceId:t.traceId,spanId:t.spanId,model:t.model,operation:"chat"}),v=ae(d,g);s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(t.model),model:t.model,operation:"chat",latency_ms:c,ttft_ms:t.ttft,stream:t.isStreaming??!1,input_tokens:r,output_tokens:o,status:"success",span_kind:"llm",agent_id:t.agentId,agent_name:t.agentName,finish_reason:_,prompt_hash:t.promptHash??vt(JSON.stringify(t.prompts)),tools_defined:t.toolsAvailable?.length?t.toolsAvailable:void 0,tools_used:p.length>0?p.map(I=>I.name):void 0,tool_calls:p.length>0?p:void 0,conversation_turns:t.conversationTurns,has_memory:t.hasMemory,reasoning_tokens:m>0?m:void 0,has_reasoning:m>0?!0:void 0,cached_tokens:i>0?i:void 0,has_planning:l.detected||void 0,planning_steps:l.steps,...s.storePrompts?(()=>{let{systemPrompt:I,conversationMessages:y}=se(t.structuredMessages??[]);return{prompt_text:s.redactForStorage(y.length?y:t.prompts),completion_text:s.redactForStorage(v),...I?{system_prompt:s.redactForStorage(I)}:{}}})():{},metadata:{usage:e?.llmOutput?.tokenUsage??null,llm_output:e?.llmOutput??null,invocation_params:t.invocationParams??null,guardrails:{pre:t.preGuardrailResult?{matched:t.preGuardrailResult.results.length,modified:!!t.preGuardrailResult.modifiedText}:null,post:g?{matched:g.results.length,modified:!!g.modifiedText}:null}},user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleLLMError(e,n){try{let t=this.runs.get(n);if(!t)return;ie(t.spanId),this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(t.model),model:t.model,operation:"chat",latency_ms:performance.now()-t.t0,ttft_ms:t.ttft,stream:t.isStreaming??!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",span_kind:"llm",agent_id:t.agentId,agent_name:t.agentName,error_code:e instanceof H?"guardrail_blocked":void 0,error_message:String(e.message).slice(0,1e3),user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleChainStart(e,n,t,s){try{let r=F(),o=s?this.runs.get(s):void 0,c=u(),d=o?.traceId??r?.traceId??u(),p=Array.isArray(e?.id)?e.id:[],m=p.some(k=>tn.includes(k)),i=!m&&p.some(k=>nn.includes(k)),l=m?"agent":i?"tool":"general",_=m?u():void 0,g=m?p.find(k=>tn.includes(k))??void 0:void 0,v=i?e.name??e.kwargs?.name??p.find(k=>nn.includes(k)):void 0,I=i?JSON.stringify(n):void 0,y=o?.spanKind==="agent"?o.agentId:void 0,h=o?.spanKind==="agent"?o.agentName:void 0;this.runs.set(t,{t0:performance.now(),traceId:d,spanId:c,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:_??o?.agentId,agentName:g??o?.agentName,spanKind:l,toolName:v,toolInput:I,prompts:[],parent:r,delegatedFromAgentId:y,delegatedFromAgentName:h})}catch{}}async handleChainEnd(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();if(t.spanKind==="tool"){let r=e?.output??e,o=typeof r=="string"?r:JSON.stringify(r);s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${t.toolName??"unknown"}`,latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",agent_id:t.agentId,agent_name:t.agentName,tools_used:t.toolName?[t.toolName]:[],tool_call_id:t.spanId,tool_call_args:t.toolInput?JSON.parse(t.toolInput):void 0,tool_call_result:o.slice(0,10240),stream:!1,finish_reason:"stop",user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}else s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"chain",latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:t.spanKind,agent_id:t.agentId,agent_name:t.agentName,stream:!1,finish_reason:"stop",delegation_from_agent_id:t.delegatedFromAgentId,delegation_from_agent_name:t.delegatedFromAgentName,user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleChainError(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:t.spanKind==="tool"?`tool.${t.toolName??"unknown"}`:"chain",latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:t.spanKind,agent_id:t.agentId,agent_name:t.agentName,tools_used:t.spanKind==="tool"&&t.toolName?[t.toolName]:void 0,tool_call_id:t.spanKind==="tool"?t.spanId:void 0,tool_call_args:t.spanKind==="tool"&&t.toolInput?JSON.parse(t.toolInput):void 0,error_message:String(e?.message??e).slice(0,1e3),stream:!1,delegation_from_agent_id:t.delegatedFromAgentId,delegation_from_agent_name:t.delegatedFromAgentName,user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleToolStart(e,n,t,s){try{let r=F(),o=s?this.runs.get(s):void 0,c=u(),d=o?.traceId??r?.traceId??u(),p=e.id?.[e.id.length-1]??"unknown_tool",m=e.name||e.kwargs?.name||p;this.runs.set(t,{t0:performance.now(),traceId:d,spanId:c,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:o?.agentId,agentName:o?.agentName,spanKind:"tool",toolName:m,toolInput:n,prompts:[],parent:r})}catch{}}async handleToolEnd(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q(),o=(typeof e=="string"?e:JSON.stringify(e)).slice(0,10240);s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${t.toolName??"unknown"}`,latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",agent_id:t.agentId,agent_name:t.agentName,tools_used:t.toolName?[t.toolName]:[],tool_call_id:t.spanId,tool_call_args:t.toolInput?{input:t.toolInput}:void 0,tool_call_result:o,stream:!1,finish_reason:"stop",user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleToolError(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${t.toolName??"unknown"}`,latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:"tool",agent_id:t.agentId,agent_name:t.agentName,tools_used:t.toolName?[t.toolName]:[],error_message:String(e?.message??e).slice(0,1e3),stream:!1,user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleAgentAction(e,n){try{let t=this.runs.get(n),s=F(),r=q(),o=t?.traceId??s?.traceId??u(),c=u(),d=[e?.tool??"",typeof e?.toolInput=="string"?e.toolInput:JSON.stringify(e?.toolInput??""),e?.log??""].join(" | ");r.enqueue({event_id:u(),project_id:"",trace_id:o,span_id:c,parent_span_id:t?.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:t?.agentId,agent_name:t?.agentName,planning_steps:[d],...e?.log?{decision_rationale:e.log}:{},stream:!1,user_id:t?.parent?.userId??s?.userId,session_id:t?.parent?.sessionId??s?.sessionId,tags:t?.parent?.tags??s?.tags,environment:r.environment,sdk_version:b})}catch{}}async handleRetrieverStart(e,n,t,s){try{let r=F(),o=s?this.runs.get(s):void 0,c=u(),d=o?.traceId??r?.traceId??u();this.runs.set(t,{t0:performance.now(),traceId:d,spanId:c,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:o?.agentId,agentName:o?.agentName,spanKind:"retriever",query:n,prompts:[],parent:r})}catch{}}async handleRetrieverEnd(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"retriever",latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"retriever",agent_id:t.agentId,agent_name:t.agentName,stream:!1,finish_reason:"stop",metadata:{"zespan.rag.contexts":Array.isArray(e)?e:[]},user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleRetrieverError(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"retriever",latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:"retriever",agent_id:t.agentId,agent_name:t.agentName,error_message:String(e?.message??e).slice(0,1e3),stream:!1,user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}};function sn(a){let e=a?.model;return typeof e=="string"?e:e&&typeof e=="object"?e.model??e.name??"gemini-2.5-flash":"gemini-2.5-flash"}function ys(a){let e=a??{};return{input:Number(e.promptTokenCount??e.inputTokenCount??0),output:Number(e.candidatesTokenCount??e.outputTokenCount??0),cached:Number(e.cachedContentTokenCount??0),reasoning:Number(e.thoughtsTokenCount??e.reasoningTokenCount??0)}}var tt=class{agentStates=new Map;pendingModelCalls=new Map;toolCallStates=new Map;agentKey(e,n){return`${e}:${n}`}getParentAgentState(e,n){if(n)return this.agentStates.get(this.agentKey(e,n))}beforeAgentCallback=e=>{try{let n=e.invocationId,t=e.agentName,s=e.invocationContext?.agent?.parentAgent?.name,r=F(),o=this.getParentAgentState(n,s),c=o?.traceId??r?.traceId??u(),d=u(),p=o?.spanId??r?.spanId,m=u(),i=sn(e.invocationContext?.agent),l=e.userId||r?.userId,_=e.sessionId||r?.sessionId;this.agentStates.set(this.agentKey(n,t),{t0:performance.now(),traceId:c,spanId:d,parentSpanId:p,agentId:m,agentName:t,model:i,userId:l,sessionId:_,parentAgentId:o?.agentId,parentAgentName:s})}catch{}};afterAgentCallback=e=>{try{let n=e.invocationId,t=e.agentName,s=this.agentKey(n,t),r=this.agentStates.get(s);if(!r)return;this.agentStates.delete(s);let o=!r.parentAgentName,c=q();c.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.${t}`,span_kind:"agent",agent_id:r.agentId,agent_name:t,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:b})}catch{}};beforeModelCallback=({context:e,request:n})=>{try{let t=e.invocationId,s=e.agentName,r=this.agentStates.get(this.agentKey(t,s)),o=r?.traceId??u(),c=sn(e.invocationContext?.agent),d=n?.config?.systemInstruction,p;if(d){let l=typeof d=="string"?d:(d?.parts??[]).filter(_=>_?.text).map(_=>_.text).join("");l&&(p=l)}let m,i=n?.contents??[];if(i.length){let l=i.map(_=>{let g=_?.role??"user",v=(_?.parts??[]).filter(I=>typeof I?.text=="string"&&!I.thought).map(I=>I.text).join("");return v?`${g}: ${v}`:""}).filter(Boolean).join(`
11
- `);l&&(m=l)}this.pendingModelCalls.set(this.agentKey(t,s),{t0:performance.now(),spanId:u(),traceId:o,parentSpanId:r?.spanId??"",model:c,agentId:r?.agentId,agentName:s,userId:r?.userId??e.userId,sessionId:r?.sessionId??e.sessionId,promptText:m,systemPrompt:p})}catch{}};afterModelCallback=({context:e,response:n})=>{try{let t=e.invocationId,s=e.agentName,r=this.agentKey(t,s),o=this.pendingModelCalls.get(r);if(!o)return;this.pendingModelCalls.delete(r);let{input:c,output:d,cached:p,reasoning:m}=ys(n?.usageMetadata),i=n?.content?.parts??[],l=i.filter(v=>typeof v?.text=="string"&&!v.thought).map(v=>v.text).join(""),_=i.filter(v=>v?.functionCall?.name).map(v=>v.functionCall.name),g=q();g.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:c,output_tokens:d,cached_tokens:p||void 0,reasoning_tokens:m||void 0,finish_reason:n?.finishReason??"stop",tools_used:_.length?_:void 0,status:n?.errorCode?"error":"success",error_message:n?.errorMessage,...g.storePrompts&&o.systemPrompt?{system_prompt:g.redactForStorage(o.systemPrompt)}:{},...g.storePrompts&&o.promptText?{prompt_text:g.redactForStorage(o.promptText)}:{},...g.storePrompts&&l?{completion_text:g.redactForStorage(l)}:{},user_id:o.userId,session_id:o.sessionId,environment:g.environment,sdk_version:b})}catch{}};beforeToolCallback=({tool:e,args:n,context:t})=>{try{let s=t.invocationId,r=t.agentName,o=t.functionCallId??u(),c=this.agentStates.get(this.agentKey(s,r));this.toolCallStates.set(o,{t0:performance.now(),spanId:u(),traceId:c?.traceId??u(),parentSpanId:c?.spanId??"",toolName:e?.name??"unknown_tool",args:n??{},agentId:c?.agentId,agentName:r,userId:c?.userId??t.userId,sessionId:c?.sessionId??t.sessionId})}catch{}};afterToolCallback=({tool:e,args:n,context:t,response:s})=>{try{let r=t.functionCallId??"",o=this.toolCallStates.get(r);if(!o)return;this.toolCallStates.delete(r);let c=q();c.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:c.environment,sdk_version:b})}catch{}};get callbacks(){return{beforeAgentCallback:this.beforeAgentCallback,afterAgentCallback:this.afterAgentCallback,beforeModelCallback:this.beforeModelCallback,afterModelCallback:this.afterModelCallback,beforeToolCallback:this.beforeToolCallback,afterToolCallback:this.afterToolCallback}}};import{createHash as ks}from"crypto";var wt=a=>ks("sha256").update(typeof a=="string"?a:JSON.stringify(a)).digest("hex");function Is(a){return a?.model??a?.config?.model??a?.llmConfig?.model??a?.generativeModel?.model??"gemini-2.5-flash"}function rn(a){let e=a?.usageMetadata??a?.usage_metadata??{},n=a?.usage??{};return{input:Number(e.inputTokenCount??e.promptTokenCount??n.input_tokens??n.prompt_tokens??0),output:Number(e.outputTokenCount??e.candidatesTokenCount??n.output_tokens??n.completion_tokens??0),cached:Number(e.cachedContentTokenCount??n.cached_tokens??0),reasoning:Number(e.reasoningTokenCount??e.thinking_token_count??n.reasoning_tokens??0)}}function Ss(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(t=>typeof t?.text=="string"?t.text:"").filter(Boolean).join("");return n||(a&&typeof a=="object"?JSON.stringify(a):"")}function vs(a){let e=[];try{let n=a?.candidates?.[0]?.content?.parts??a?.content?.parts??[];for(let t of n)t?.functionCall?.name&&e.push({name:t.functionCall.name,args:t.functionCall.args??{}});for(let t of a?.toolCalls??[])t?.name&&e.push({name:t.name,args:t.args??t.arguments??{}})}catch{}return e}function an(a){if(a instanceof H)return"guardrail_blocked";let e=String(a?.message??"").toLowerCase();if(/rate.?limit|quota|429/.test(e))return"rate_limited";if(/context.?length|too.?long|max.?token/.test(e))return"context_length";if(/timeout|timed?.?out/.test(e))return"timeout";if(/safety|blocked|harm/.test(e))return"content_filter"}function nt(a,e={}){let n=a;if(typeof n?.run!="function")return a;let t=n.run.bind(n),s=te(e.guardrails,"agent"),r=e.agentName??n.name??"ADKAgent",o=e.agentRole??(n.subAgents?.length?"coordinator":"specialist"),c=Is(n);return e.traceSubAgents!==!1&&Array.isArray(n.subAgents)&&(n.subAgents=n.subAgents.map(d=>nt(d,{...e,agentRole:"specialist",traceSubAgents:!0}))),n.run=async(d,p)=>{let m=q(),i=performance.now(),l=F(),_=u(),g=u(),v=l?.traceId??u(),I=e.sessionId??l?.sessionId,y=typeof d=="string"?d:JSON.stringify(d??"");return $({traceId:v,spanId:g,userId:l?.userId,sessionId:I,tags:l?.tags,agentId:_,agentName:r,agentRole:o,agentFramework:"google-adk",parentAgentId:l?.agentId},async()=>{try{let h=await Z(m,s,{text:y,phase:"pre",traceId:v,spanId:g,model:c,operation:"agent"}),k=await t(d,p),{input:A,output:f,cached:j,reasoning:w}=rn(k),T=Ss(k),S=vs(k),D=k?.candidates?.[0]?.finishReason??k?.finish_reason,R=await Z(m,s,{text:T,phase:"post",traceId:v,spanId:g,model:c,operation:"agent"}),C=ae(T,R);return m.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:g,parent_span_id:l?.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:l?.agentId,delegation_from_agent_id:l?.agentId,delegation_from_agent_name:l?.agentName,latency_ms:performance.now()-i,stream:!1,input_tokens:A,output_tokens:f,cached_tokens:j||void 0,reasoning_tokens:w||void 0,status:"success",finish_reason:D,tools_used:S.length?S.map(N=>N.name):void 0,tool_call_args:S.length?Object.fromEntries(S.map(N=>[N.name,N.args])):void 0,prompt_hash:wt(y),...m.storePrompts?{prompt_text:m.redactForStorage(y),completion_text:m.redactForStorage(C)}:{},...S.length>0&&T?{decision_rationale:T}:{},user_id:l?.userId,session_id:I,tags:l?.tags,environment:m.environment,sdk_version:b,metadata:{guardrails:{pre:h?{matched:h.results.length,modified:!!h.modifiedText}:null,post:R?{matched:R.results.length,modified:!!R.modifiedText}:null}}}),k}catch(h){throw m.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:g,parent_span_id:l?.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:l?.agentId,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:an(h),error_message:String(h?.message??h).slice(0,500),user_id:l?.userId,session_id:I,tags:l?.tags,environment:m.environment,sdk_version:b}),h}})},a}function bt(a,e={}){let n=a;if(typeof n?.runEphemeral=="function"){let t=n.runEphemeral.bind(n);n.runEphemeral=s=>on(t(s),s,e)}if(typeof n?.run=="function"){let t=n.run.bind(n);n.run=s=>on(t(s),s,e)}return a}async function*on(a,e,n){let t=q(),s=F(),r=s?.traceId??u(),o=u(),c=u(),d=performance.now(),p=n.agentName??"ADKAgent",m=n.agentRole??"coordinator",i=n.model??"gemini-2.5-flash",l=e?.userId??s?.userId,_=n.sessionId??e?.sessionId??s?.sessionId,g=(e?.newMessage?.parts??[]).map(w=>typeof w?.text=="string"?w.text:"").filter(Boolean).join(""),v=new Map,I=new Map,y=new Set,h="",k=0,A=0,f=0,j=0;ge(o);try{yield*$({traceId:r,spanId:o,userId:l,sessionId:_,tags:s?.tags,agentId:c,agentName:p,agentRole:m,agentFramework:"google-adk",parentAgentId:s?.agentId},async function*(){for await(let w of a){k++;let T=w.author??p;if(T!=="user"){T!==p&&!y.has(T)&&t.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:u(),parent_span_id:o,timestamp:new Date().toISOString(),provider:"google-adk",model:i,operation:`handoff.${p}\u2192${T}`,span_kind:"handoff",agent_name:T,agent_role:"specialist",agent_framework:"google-adk",delegation_from_agent_id:c,delegation_from_agent_name:p,delegation_reason:`delegated to ${T}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",user_id:l,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b}),y.add(T),v.has(T)||(v.set(T,{spanId:u(),agentId:u(),t0:performance.now()}),I.set(T,{input:0,output:0,cached:0,reasoning:0}));let S=v.get(T),D=rn(w);if(D.input>0||D.output>0){let x=I.get(T);x.input+=D.input,x.output+=D.output,x.cached+=D.cached,x.reasoning+=D.reasoning,A+=D.input,f+=D.output,j+=D.cached}let R=w.content?.parts??[];for(let x of R){let M=x?.functionCall;if(!M?.name)continue;let P=u();t.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:P,parent_span_id:S.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:i,operation:`tool.${M.name}`,span_kind:"tool",agent_id:S.agentId,agent_name:T,agent_framework:"google-adk",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",tools_used:[M.name],tool_call_id:P,tool_call_args:M.args??{},user_id:l,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b})}let C=R.filter(x=>typeof x?.text=="string"&&!x.thought).map(x=>x.text).join("");if(C&&(h+=C),typeof w.isFinalResponse=="function"?w.isFinalResponse():!!w.isFinalResponse||w.actions?.stateDelta!==void 0||w.turnComplete===!0){let x=R.map(E=>E?.functionCall?.name).filter(Boolean),M=R.filter(E=>typeof E?.text=="string"&&!E.thought).map(E=>E.text).join(""),P=I.get(T)??{input:0,output:0,cached:0,reasoning:0};t.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:S.spanId,parent_span_id:o,timestamp:new Date().toISOString(),provider:"google-adk",model:i,operation:`agent.${T}`,span_kind:"agent",agent_id:S.agentId,agent_name:T,agent_role:T===p?m:"specialist",agent_framework:"google-adk",parent_agent_id:c,latency_ms:performance.now()-S.t0,stream:!1,input_tokens:P.input,output_tokens:P.output,cached_tokens:P.cached||void 0,reasoning_tokens:P.reasoning||void 0,status:"success",tools_used:x.length?x:void 0,prompt_hash:g?wt(g):void 0,...t.storePrompts&&C?{completion_text:t.redactForStorage(C)}:{},...x.length>0&&M?{decision_rationale:M}:{},user_id:l,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b}),v.delete(T),I.delete(T)}}yield w}}),t.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:i,operation:"agent.run",span_kind:"agent",agent_id:c,agent_name:p,agent_role:m,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-d,stream:!1,input_tokens:A,output_tokens:f,cached_tokens:j||void 0,status:"success",prompt_hash:g?wt(g):void 0,...t.storePrompts?{prompt_text:t.redactForStorage(g),completion_text:t.redactForStorage(h)}:{},user_id:l,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b,metadata:{eventCount:k,agentsThatRan:[...y]}}),ie(o)}catch(w){throw ie(o),t.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:i,operation:"agent.run",span_kind:"agent",agent_id:c,agent_name:p,agent_role:m,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:an(w),error_message:String(w?.message??w).slice(0,500),user_id:l,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b}),w}}function dn(a){let{coordinator:e,runner:n,agentName:t,agentRole:s,model:r,...o}=a,c=nt(e,{...o,agentName:t??e?.name,agentRole:s??"coordinator",traceSubAgents:!0}),d=bt(n,{agentName:t??e?.name,agentRole:s??"coordinator",model:r});return{coordinator:c,runner:d}}var cn=nt;import{NodeTracerProvider as ws}from"@opentelemetry/sdk-trace-node";import{ExportResultCode as ln}from"@opentelemetry/core";function bs(){try{return q()}catch{return null}}var xt=class{export(e,n){let t=bs();if(!t){n({code:ln.SUCCESS});return}try{for(let s of e){let{name:r}=s;if(!r.startsWith("ai."))continue;let o=s.attributes,c=F(),d=s.spanContext().spanId,p=s.spanContext().traceId,m=s.duration[0]*1e3+s.duration[1]/1e6,i=new Date(s.startTime[0]*1e3+s.startTime[1]/1e6).toISOString(),l=s.status.code===2,_={event_id:u(),project_id:"",trace_id:c?.traceId??p,span_id:d,parent_span_id:c?.spanId,timestamp:i,provider:String(o["ai.model.provider"]??"unknown"),model:String(o["ai.model.id"]??"unknown"),latency_ms:m,stream:!1,status:l?"error":"success",environment:t.environment,sdk_version:b};r==="ai.generateText"||r==="ai.generateText.doGenerate"?(ie(d),t.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",...t.storePrompts&&o["ai.prompt"]?{prompt_text:t.redactForStorage(String(o["ai.prompt"]))}:{},...t.storePrompts&&o["ai.response.text"]?{completion_text:t.redactForStorage(String(o["ai.response.text"]))}:{}})):r==="ai.streamText"||r==="ai.streamText.doStream"?(ie(d),t.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"?(ie(d),t.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"?t.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")&&t.enqueue({..._,operation:r==="ai.embed"?"embed":"embedMany",input_tokens:Number(o["ai.usage.tokens"]??0),output_tokens:0,span_kind:"embedding"})}}catch{}n({code:ln.SUCCESS})}shutdown(){return Promise.resolve()}},Tt=class{exporter;constructor(e){this.exporter=e}onStart(e,n){e.name?.startsWith("ai.")&&ge(e.spanContext().spanId)}onEnd(e){e.name.startsWith("ai.")&&ie(e.spanContext().spanId),this.exporter.export([e],()=>{})}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},st=null,Ct=null;function At(){return st||(st=new ws,st.addSpanProcessor(new Tt(new xt)),Ct=st.getTracer("zespan-vercel-ai")),{tracer:Ct,telemetry:{isEnabled:!0,tracer:Ct}}}function un(){return At().telemetry}function Me(){try{return q()}catch{return null}}function Cs(a){let e=a.toLowerCase();return/gpt|o1-|o3-|davinci|turbo|whisper|dall-e/i.test(e)?"openai":/claude/i.test(e)?"anthropic":/gemini|palm|bard/i.test(e)?"google":/llama|codellama/i.test(e)?"meta":/mistral|mixtral/i.test(e)?"mistralai":/deepseek/i.test(e)?"deepseek":/command/i.test(e)?"cohere":/qwen/i.test(e)?"alibaba":"unknown"}var ot=class{runs=new Map;guardrailSettings;constructor(e={}){this.guardrailSettings=te(e.guardrails,"chat")}_onLLMStart=async e=>{let n=e.id??u(),t=F(),s=u();ge(s);let r=e.detail?.llm?.metadata?.model_name??e.detail?.model??"unknown",o=t?.traceId??u(),c=JSON.stringify(e.detail?.messages??e.detail?.prompt??e.detail?.input??""),d;try{let p=Me();p&&c&&(d=await Z(p,this.guardrailSettings,{text:c,phase:"pre",traceId:o,spanId:s,model:r,operation:"chat"}))}catch(p){if(p instanceof H)throw p}this.runs.set(n,{t0:performance.now(),traceId:o,spanId:s,parentSpanId:t?.spanId,model:r,preGuardrailResult:d,promptText:c})};_onLLMEnd=async e=>{let n=this.runs.get(e.id??"");if(!n)return;this.runs.delete(e.id),ie(n.spanId);let t=Me();if(!t)return;let s=e.detail?.response??e.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,d;if(o)try{d=await Z(t,this.guardrailSettings,{text:o,phase:"post",traceId:n.traceId,spanId:n.spanId,model:n.model,operation:"chat"}),c=ae(o,d)}catch(m){m instanceof H||(d=void 0)}let p=n.preGuardrailResult;try{t.enqueue({event_id:u(),project_id:"",trace_id:n.traceId,span_id:n.spanId,parent_span_id:n.parentSpanId,timestamp:new Date().toISOString(),provider:Cs(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:F()?.agentId,agent_name:F()?.agentName,...t.storePrompts?{prompt_text:t.redactForStorage(n.promptText??""),completion_text:t.redactForStorage(c)}:{},metadata:{guardrails:{pre:p?{matched:p.results.length,modified:!!p.modifiedText}:null,post:d?{matched:d.results.length,modified:!!d.modifiedText}:null}},environment:t.environment,sdk_version:b})}catch{}};_onLLMStream=e=>{let n=this.runs.get(e.id??"");n&&n.ttft===void 0&&(n.ttft=performance.now()-n.t0)};_onToolCall=e=>{let n=Me();if(!n)return;let t=F(),s=e.detail?.toolCall?.name??e.detail?.name??"";try{n.enqueue({event_id:u(),project_id:"",trace_id:t?.traceId??u(),span_id:u(),parent_span_id:t?.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:t?.agentId,agent_name:t?.agentName,environment:n.environment,sdk_version:b})}catch{}};_onToolResult=e=>{let n=Me();if(!n)return;let t=F(),s=e.detail?.toolCall?.name??e.detail?.name??"",r=e.detail?.result??e.detail?.toolResult??"";try{n.enqueue({event_id:u(),project_id:"",trace_id:t?.traceId??u(),span_id:u(),parent_span_id:t?.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:t?.agentId,agent_name:t?.agentName,environment:n.environment,sdk_version:b})}catch{}};_onAgentStart=e=>{let n=e.id??u(),t=F();this.runs.set(`agent-${n}`,{t0:performance.now(),traceId:t?.traceId??u(),spanId:u(),parentSpanId:t?.spanId,model:"agent",agentName:e.detail?.agentName??t?.agentName??""})};_onAgentEnd=e=>{let n=this.runs.get(`agent-${e.id??""}`);if(!n)return;this.runs.delete(`agent-${e.id}`);let t=Me();if(t)try{t.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??e.detail?.agentName??"",environment:t.environment,sdk_version:b})}catch{}};attach(e){e.on("llm-start",this._onLLMStart),e.on("llm-end",this._onLLMEnd),e.on("llm-stream",this._onLLMStream),e.on("llm-tool-call",this._onToolCall),e.on("llm-tool-result",this._onToolResult),e.on("agent-start",this._onAgentStart),e.on("agent-end",this._onAgentEnd)}detach(e){e.off("llm-start",this._onLLMStart),e.off("llm-end",this._onLLMEnd),e.off("llm-stream",this._onLLMStream),e.off("llm-tool-call",this._onToolCall),e.off("llm-tool-result",this._onToolResult),e.off("agent-start",this._onAgentStart),e.off("agent-end",this._onAgentEnd)}};function pn(a){let e=q(),n=F(),t=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"}:{},c={};return{span:{setEvalScore(p,m){c[p]=m},async end(p){let m=performance.now()-r;try{e.enqueue({event_id:u(),project_id:"",trace_id:t,span_id:s,parent_span_id:n?.spanId,timestamp:new Date().toISOString(),provider:a.provider??"custom",model:a.model??"custom",operation:"custom",latency_ms:m,stream:!1,input_tokens:p.input_tokens??0,output_tokens:p.output_tokens??0,cost_usd:p.cost_usd,status:p.status,error_message:p.error_message?.slice(0,500),environment:e.environment,eval_scores:Object.keys(c).length?c:void 0,sdk_version:b,...o})}catch{}}},run:p=>$({traceId:t,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},p)}}var rt=class{agentId;name;role;framework;tools;constructor(e,n){this.agentId=e,this.name=n.name,this.role=n.role??"specialist",this.framework=n.framework??"custom",this.tools=n.tools??[]}logPlan(e){let n=q(),t=F(),s={event_id:u(),project_id:"",trace_id:t?.traceId??u(),span_id:u(),parent_span_id:t?.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:b,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"planning",planning_steps:e,user_id:t?.userId,session_id:t?.sessionId,tags:t?.tags};n.enqueue(s)}async traceTool(e,n,t){let s=q(),r=F(),o=u(),c=r?.traceId??u(),d=performance.now(),p=this.tools.find(m=>m.name===e);try{let m=await $({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},()=>t()),i=typeof m=="string"?m:JSON.stringify(m),l={event_id:u(),project_id:"",trace_id:c,span_id:o,parent_span_id:r?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${e}`,latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:s.environment,sdk_version:b,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[e],tool_call_id:o,tool_call_args:n,tool_call_result:i.slice(0,10240),tool_definitions:p?[p]:void 0,user_id:r?.userId,session_id:r?.sessionId,tags:r?.tags};return s.enqueue(l),m}catch(m){let i=m instanceof Error?m.message:String(m),l={event_id:u(),project_id:"",trace_id:c,span_id:o,parent_span_id:r?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${e}`,latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:i.slice(0,500),environment:s.environment,sdk_version:b,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[e],tool_call_id:o,tool_call_args:n,user_id:r?.userId,session_id:r?.sessionId,tags:r?.tags};throw s.enqueue(l),m}}delegateTo(e,n){let t=q(),s=F(),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${e}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:t.environment,sdk_version:b,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};t.enqueue(r)}};function mn(a,e){let n=q(),t=F(),s=u(),r=t?.traceId??u(),o=u(),c={event_id:u(),project_id:"",trace_id:r,span_id:o,parent_span_id:t?.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:b,agent_id:s,agent_name:a.name,agent_role:a.role??"specialist",agent_framework:a.framework??"custom",parent_agent_id:t?.agentId,span_kind:"agent",tool_definitions:a.tools,delegation_reason:t?.agentId?"delegated":"root",user_id:t?.userId,session_id:t?.sessionId,tags:t?.tags,metadata:a.metadata};return n.enqueue(c),$({traceId:r,spanId:o,userId:t?.userId,sessionId:t?.sessionId,tags:t?.tags,agentId:s,agentName:a.name,agentRole:a.role??"specialist",agentFramework:a.framework??"custom",parentAgentId:t?.agentId,availableTools:a.tools},()=>e(new rt(s,a)))}import{propagation as xs}from"@opentelemetry/api";var Ot=class{onStart(e,n){let t=xs.getBaggage(n);t&&t.getAllEntries().forEach(([s,r])=>{e.setAttribute(`baggage.${s}`,r.value)})}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}};import{context as gn,propagation as je}from"@opentelemetry/api";function at(a,e,n){let t={};e&&(t["agent.delegation.reason"]=e),n&&(t["agent.task"]=n);let s=gn.active();if(Object.keys(t).length>0){let r=je.getBaggage(s)??je.createBaggage();for(let[o,c]of Object.entries(t))r=r.setEntry(o,{value:c});s=je.setBaggage(s,r)}je.inject(s,a)}function it(a){return je.extract(gn.active(),a)}var Ts={OTEL_EXPORTER_OTLP_ENDPOINT:"http://localhost:4318",OTEL_SERVICE_NAME:"crewai-agent"};function As(){return`
1
+ var lt=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});import{gzipSync as kn}from"zlib";var Ge=class{constructor(e,n,t){this.c=e;this.cfg=n;this.configClient=t??null,this.maxQueueSize=n.maxQueueSize??1e4,this.timer=setInterval(()=>this.flush(),n.flushInterval),this.timer.unref&&this.timer.unref()}queue=[];queueHead=0;timer=null;flushing=!1;consecutiveFlushFailures=0;configClient;maxQueueSize;push(e){this.queue.length-this.queueHead>=this.maxQueueSize&&(this.queueHead++,this.c.debug&&console.warn("[zespan] queue full, dropping oldest event")),this.queue.push(e),this.c.debug&&console.log(`[zespan] event queued: ${e.operation} span_kind=${e.span_kind??"llm"} trace=${e.trace_id?.slice(0,8)} tokens=${e.input_tokens}in/${e.output_tokens}out status=${e.status}`),this.queue.length-this.queueHead>=this.cfg.maxSize&&this.flush()}async flush(){if(this.queue.length-this.queueHead===0||this.flushing)return;this.flushing=!0;let e=this.queue.slice(this.queueHead),n=kn(Buffer.concat(e.map(t=>Buffer.from(JSON.stringify(t)+`
2
+ `))));try{let t=await this._post(n,0);t.ok?(this.queueHead+=e.length,this.queueHead>1e3&&(this.queue=this.queue.slice(this.queueHead),this.queueHead=0),this.c.debug&&console.log(`[zespan] flushed ${e.length} event(s) \u2192 ${this.c.endpoint}`),this.consecutiveFlushFailures>0&&this.c.debug&&console.warn("[zespan] ingest recovered",{recoveredBatchSize:e.length,queuedEvents:this.queue.length-this.queueHead,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:t.retriable,status:t.status??null,error:t.error??null,queuedEvents:this.queue.length-this.queueHead,failedBatchSize:e.length,consecutiveFailures:this.consecutiveFlushFailures}))}finally{this.flushing=!1}}async _post(e,n){let t=s=>new Promise(r=>setTimeout(r,s));try{let s=await fetch(this.c.endpoint,{method:"POST",body:e,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 t(Number(s.headers.get("retry-after")??5)*1e3),this._post(e,n+1)):s.status>=500&&n<3?(await t(2**n*1e3),this._post(e,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 t(2**n*1e3),this._post(e,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 b="1.1.0",Pt="zespan-node";import{trace as In,SpanKind as be,SpanStatusCode as we,context as vn}from"@opentelemetry/api";import{BatchSpanProcessor as Sn}from"@opentelemetry/sdk-trace-base";import{OTLPTraceExporter as wn}from"@opentelemetry/exporter-trace-otlp-http";import{AsyncHooksContextManager as bn}from"@opentelemetry/context-async-hooks";import{W3CTraceContextPropagator as Cn}from"@opentelemetry/core";var Fe=null,Mt=null;function qe(a){let e=a.serviceName??"zespan-sdk",n=new wn({url:a.endpoint??"https://localhost:3001/v1/traces",headers:a.apiKey?{"x-api-key":a.apiKey}:void 0}),t=new Sn(n,{maxQueueSize:100,maxExportBatchSize:10,exportTimeoutMillis:3e4,scheduledDelayMillis:2e3}),{NodeTracerProvider:s}=lt("@opentelemetry/sdk-trace-node"),r=new s({resource:{attributes:{"service.name":e,"service.version":"1.0.0","deployment.environment":a.environment??"production"}}});return r.addSpanProcessor(t),r.register({propagator:new Cn}),Fe=In.getTracer(e,"1.0.0"),Mt=new bn,vn.setGlobalContextManager(Mt.enable()),{tracer:Fe,provider:r}}function ke(){if(!Fe)throw new Error("OTel not initialized. Call initOTel() first.");return Fe}function jt(a){return ke().startSpan(a.name,{kind:a.kind??be.INTERNAL,attributes:a.attributes??{}})}async function Dt(a,e,n){let s=ke().startSpan(a,{kind:n?.kind??be.INTERNAL,attributes:n?.attributes??{}});try{let r=await e(s);return s.setStatus({code:we.OK}),s.end(),r}catch(r){throw s.setStatus({code:we.ERROR,message:r.message}),s.recordException(r),s.end(),r}}import{createHash as Et}from"crypto";var Gt=new Map;function xn(a){let e=Gt.get(a);return e||(e=new RegExp(`\\{\\{${a}\\}\\}`,"g"),Gt.set(a,e)),e}var Ce=class{constructor(e){this.client=e}cache=new Map;cacheIndex=new Map;cacheTTL=300*1e3;async get(e,n={}){let{version:t,label:s,cache:r=!0,fallback:o}=n,i=this.getCacheKey(e,t,s);if(r){let d=this.cache.get(i);if(d&&Date.now()-d.timestamp<this.cacheTTL)return d.prompt}try{let d=new URLSearchParams;t!==void 0&&d.set("version",t.toString()),s&&d.set("label",s);let l=`${this.client.baseURL}/v1/prompts/${encodeURIComponent(e)}?${d}`,m=await fetch(l,{headers:{"x-api-key":this.client.apiKey}});if(!m.ok)throw new Error(`Failed to fetch prompt: ${m.statusText}`);let c=await m.json(),p=Et("sha256").update(JSON.stringify(c.prompt)).digest("hex"),_={...c,promptHash:p};if(r!==!1){this.cache.set(i,{prompt:_,timestamp:Date.now()});let g=this.cacheIndex.get(e)??new Set;g.add(i),this.cacheIndex.set(e,g)}return _}catch(d){if(r!==!1){let l=this.cache.get(i);if(l)return console.warn(`[zespan] prompt "${e}" fetch failed; serving stale cache`),l.prompt}if(o)return console.warn(`[zespan] prompt "${e}" fetch failed; using fallback`),{id:`fallback:${e}`,name:e,version:0,type:o.type??"text",prompt:o.prompt,config:o.config??{},labels:[],tags:[],variables:[],createdAt:new Date(0).toISOString(),updatedAt:new Date(0).toISOString(),promptHash:Et("sha256").update(JSON.stringify(o.prompt)).digest("hex"),isFallback:!0};throw d}}async list(e){let n=new URLSearchParams;e&&n.set("name",e);let t=`${this.client.baseURL}/v1/prompts?${n}`,s=await fetch(t,{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(e){let n=`${this.client.baseURL}/v1/prompts`,t=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.client.apiKey},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Failed to create prompt: ${t.statusText}`);let s=await t.json();return this.invalidateCache(e.name),s}async updateLabels(e,n,t){let s=`${this.client.baseURL}/v1/prompts/${encodeURIComponent(e)}/versions/${n}/labels`,r=await fetch(s,{method:"PATCH",headers:{"Content-Type":"application/json","x-api-key":this.client.apiKey},body:JSON.stringify({labels:t})});if(!r.ok)throw new Error(`Failed to update labels: ${r.statusText}`);let o=await r.json();return this.invalidateCache(e),o}compile(e,n={},t={}){let s=i=>{let d=i;return Object.entries(n).forEach(([l,m])=>{d=d.replace(xn(l),m)}),d};if(e.type==="text"){let i=typeof e.prompt=="string"?e.prompt:e.prompt.content;return s(typeof i=="string"?i:String(i))}let r=Array.isArray(e.prompt)?e.prompt:[],o=[];for(let i of r)if(i&&typeof i=="object"&&i.type==="placeholder"){let d=t[i.name];if(Array.isArray(d))for(let l of d)o.push({role:l.role,content:l.content})}else i&&typeof i=="object"&&o.push({role:i.role,content:i.content});return o.map(i=>({role:i.role,content:s(i.content)}))}clearCache(e){e?this.invalidateCache(e):(this.cache.clear(),this.cacheIndex.clear())}getCacheKey(e,n,t){return n!==void 0?`${e}:v${n}`:t?`${e}:label:${t}`:`${e}:latest`}invalidateCache(e){let n=this.cacheIndex.get(e);if(n){for(let t of n)this.cache.delete(t);this.cacheIndex.delete(e)}}};var Re=class{constructor(e,n,t){this.client=e;this.datasetId=n;this.run=t}async link(e,n,t){let s=`${this.client.baseURL}/v1/datasets/${this.datasetId}/runs/${this.run.id}/items`,r=await fetch(s,{method:"POST",headers:{"x-api-key":this.client.apiKey,"Content-Type":"application/json"},body:JSON.stringify({datasetItemId:e,traceId:n,observationId:t})});if(!r.ok)throw new Error(`Failed to link dataset item: ${r.statusText}`)}},xe=class{constructor(e){this.client=e}datasetIdByName=new Map;async resolveDatasetId(e){let n=this.datasetIdByName.get(e);if(n)return n;let t=`${this.client.baseURL}/v1/datasets/by-name/${encodeURIComponent(e)}`,s=await fetch(t,{headers:{"x-api-key":this.client.apiKey}});if(!s.ok)throw new Error(`Failed to resolve dataset "${e}": ${s.statusText}`);let r=await s.json();return this.datasetIdByName.set(e,r.dataset.id),r.dataset.id}async getItems(e){let n=await this.resolveDatasetId(e),t=`${this.client.baseURL}/v1/datasets/${n}/items`,s=await fetch(t,{headers:{"x-api-key":this.client.apiKey}});if(!s.ok)throw new Error(`Failed to fetch dataset items: ${s.statusText}`);return(await s.json()).items}async createRun(e,n,t={}){let s=await this.resolveDatasetId(e),r=`${this.client.baseURL}/v1/datasets/${s}/runs`,o=await fetch(r,{method:"POST",headers:{"x-api-key":this.client.apiKey,"Content-Type":"application/json"},body:JSON.stringify({name:n,description:t.description})});if(!o.ok)throw new Error(`Failed to create dataset run: ${o.statusText}`);let i=await o.json();return new Re(this.client,s,i.run)}};var Tn="[REDACTED]";var Ft=a=>a.toLowerCase().replace(/[^a-z0-9]/g,""),An=a=>{let e=new Set;for(let n of a){let t=Ft(String(n));t&&e.add(t)}return e},Ke=(a,e,n=0,t=new WeakSet)=>{if(n>20)return"[REDACTED_DEPTH_LIMIT]";if(Array.isArray(a))return t.has(a)?"[Circular]":(t.add(a),a.map(o=>Ke(o,e,n+1,t)));if(!a||typeof a!="object")return a;if(t.has(a))return"[Circular]";t.add(a);let s=a,r={};for(let[o,i]of Object.entries(s)){if(e.has(Ft(o))){r[o]=Tn;continue}r[o]=Ke(i,e,n+1,t)}return r},Ne=(a,e)=>{if(a==null)return"";let n=An(e),t=new WeakSet;if(typeof a=="string")try{let s=JSON.parse(a);return s&&typeof s=="object"?JSON.stringify(Ke(s,n,0,t)):a}catch{return a}return JSON.stringify(Ke(a,n,0,t))};var Le=null,ne={};function qt(a){ne=a,Le=null}async function On(){if(!Le){let{default:a}=await import("openredaction");Le=new a({redactionMode:ne.piiRedactionMode??"placeholder",...ne.piiPreset&&!ne.piiCategories?{preset:ne.piiPreset}:{},...ne.piiCategories?{categories:ne.piiCategories}:{},...ne.piiIncludeNames!==void 0?{includeNames:ne.piiIncludeNames}:{},...ne.piiIncludeEmails!==void 0?{includeEmails:ne.piiIncludeEmails}:{},...ne.piiIncludePhones!==void 0?{includePhones:ne.piiIncludePhones}:{},...ne.piiIncludeAddresses!==void 0?{includeAddresses:ne.piiIncludeAddresses}:{},confidenceThreshold:ne.piiConfidenceThreshold??.7,enableContextAnalysis:!0,enableCache:!0,...ne.piiWhitelist?{whitelist:ne.piiWhitelist}:{},...ne.piiCustomPatterns?{customPatterns:ne.piiCustomPatterns}:{}})}return Le}async function ut(a){if(!a)return a;try{let e=await On(),{redacted:n}=await e.detect(a);return n}catch{return a}}async function Kt(a,e,n){let t=Ne(a,e);return n?ut(t):t}async function Lt(a,e){return e?ut(a):a}async function zt(a,e,n){if(!a||Object.keys(a).length===0)return;let t=Ne(a,e),s=n?await ut(t):t;try{return JSON.parse(s)}catch{return a}}function $t(){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 Rn(a,e){let n=Object.keys(a),t=Object.keys(e);if(n.length!==t.length)return!1;for(let s of n){let r=a[s],o=e[s];if(Array.isArray(r)&&Array.isArray(o)){if(r.length!==o.length)return!1;for(let i=0;i<r.length;i++)if(r[i]!==o[i])return!1;continue}if(r!==o)return!1}return!0}function Te(a,e){if(a.size!==e.size)return!1;for(let[n,t]of a){let s=e.get(n);if(s===void 0&&!e.has(n))return!1;if(typeof t=="object"&&t!==null&&typeof s=="object"&&s!==null){if(!Rn(t,s))return!1}else if(s!==t)return!1}return!0}var ze=class{localVersion=0;config=$t();listeners=new Map;fetching=!1;baseUrl;apiKey;projectId;constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.apiKey=e.apiKey,this.projectId=e.projectId}checkVersion(e){e>this.localVersion&&!this.fetching&&(this.fetching=!0,this.fetchConfig().then(n=>{n&&(this.localVersion=e,this.applyFullConfig(n))}).catch(()=>{}).finally(()=>{this.fetching=!1}))}getModel(e,n){return this.config.modelOverrides.get(e)??n}getCacheConfig(e){return this.config.cacheConfig.get(e)??null}getSamplingRate(){return this.config.samplingRate}getRuntimeConfig(){return this.config}getLocalVersion(){return this.localVersion}getFallback(e){return this.config.fallbacks.get(e)??null}getRetryPolicy(e){return this.config.retryPolicies.get(e)??null}getTimeout(e){return this.config.timeouts.get(e)??null}getConcurrencyLimit(e){return this.config.concurrencyLimits.get(e)??null}getAbTest(e){return this.config.abTests.get(e)??null}on(e,n){let t=this.listeners.get(e)??[];t.push(n),this.listeners.set(e,t)}emit(e,n){let t=this.listeners.get(e);if(t)for(let s of t)try{s(n)}catch{}}async fetchConfig(){try{let e=`${this.baseUrl}/v1/sdk/config?projectId=${encodeURIComponent(this.projectId)}`,n=await fetch(e,{headers:{"x-api-key":this.apiKey}});return n.ok?(await n.json()).config??null:null}catch{return null}}applyFullConfig(e){let n=this.config,t=this.parseSnapshot(e);this.config=t,Te(n.modelOverrides,t.modelOverrides)||this.emit("model_override",Object.fromEntries(t.modelOverrides)),n.samplingRate!==t.samplingRate&&this.emit("sampling_config",{samplingRate:t.samplingRate}),Te(n.cacheConfig,t.cacheConfig)||this.emit("cache_config",Object.fromEntries(t.cacheConfig)),Te(n.fallbacks,t.fallbacks)||this.emit("fallback_config",Object.fromEntries(t.fallbacks)),Te(n.retryPolicies,t.retryPolicies)||this.emit("retry_config",Object.fromEntries(t.retryPolicies)),Te(n.timeouts,t.timeouts)||this.emit("timeout_config",Object.fromEntries(t.timeouts)),Te(n.abTests,t.abTests)||this.emit("ab_test_config",Object.fromEntries(t.abTests))}parseSnapshot(e){let n=$t();for(let[t,s]of Object.entries(e))try{let r=typeof s=="string"?JSON.parse(s):s;if(t.startsWith("model_override.")){let o=t.slice(15),i=typeof r=="string"?r:r?.model??r?.value;typeof i=="string"&&n.modelOverrides.set(o,i)}else if(t.startsWith("cache.")){let o=t.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(t.startsWith("ratelimit.")){let o=t.slice(10);n.rateLimits.set(o,{maxRequests:typeof r?.maxRequests=="number"?r.maxRequests:100,windowSeconds:typeof r?.windowSeconds=="number"?r.windowSeconds:60})}else if(t.startsWith("guardrail.")&&!t.startsWith("guardrail_mode.")){let o=t.slice(10);n.guardrailOverrides.set(o,!!(r?.enabled??r))}else if(t.startsWith("sampling.")){let o=typeof r=="number"?r:r?.rate??r?.sampleRate;typeof o=="number"&&o>=0&&o<=1&&(n.samplingRate=o)}else if(t.startsWith("prompt_version.")){let o=t.slice(15),i=typeof r=="number"?r:r?.version;typeof i=="number"&&n.promptVersions.set(o,i)}else if(t.startsWith("fallback.")){let o=t.slice(9),i=typeof r?.model=="string"?r.model:null,d=Array.isArray(r?.conditions)?r.conditions.filter(l=>typeof l=="string"):[];i&&n.fallbacks.set(o,{model:i,conditions:d})}else if(t.startsWith("retry.")){let o=t.slice(6),i=typeof r?.enabled=="boolean"?r.enabled:!1,d=typeof r?.maxRetries=="number"?r.maxRetries:3,l=typeof r?.backoffMultiplier=="number"?r.backoffMultiplier:2,m=Array.isArray(r?.retryOnStatusCodes)?r.retryOnStatusCodes.filter(c=>typeof c=="number"):[];n.retryPolicies.set(o,{enabled:i,maxRetries:d,backoffMultiplier:l,retryOnStatusCodes:m})}else if(t.startsWith("timeout.")){let o=t.slice(8),i=typeof r?.timeoutMs=="number"?r.timeoutMs:typeof r=="number"?r:null;typeof i=="number"&&i>0&&n.timeouts.set(o,{timeoutMs:i})}else if(t.startsWith("concurrency.")){let o=t.slice(12),i=typeof r=="number"?r:typeof r?.limit=="number"?r.limit:null;typeof i=="number"&&i>0&&n.concurrencyLimits.set(o,i)}else if(t.startsWith("ab_test.")){let o=t.slice(8),i=typeof r?.candidateModel=="string"?r.candidateModel:null,d=typeof r?.splitPercentage=="number"?r.splitPercentage:null;i&&d!==null&&d>=0&&d<=100&&n.abTests.set(o,{candidateModel:i,splitPercentage:d})}}catch{}return n}};import{AsyncLocalStorage as Nn}from"async_hooks";import{randomUUID as Pn}from"crypto";var pt=new Nn,u=()=>Pn(),F=()=>pt.getStore();function W(a,e){return pt.run(a,e)}function mt(a,e){let n=F(),t={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 pt.run(t,e)}function gt(a,e){return mt(e??{},a)}var Mn=gt;function Ie(){try{return q()}catch{return null}}var ht=new Set;function ge(a){ht.add(a)}function ie(a){ht.delete(a)}function ve(){return ht.size>0}var $e=!1,Be=!1,Bt=!1,Wt=!1,Pe=null,Me=null,_t=null,ft=null,ro=(async()=>{try{Pe=await import("openai/resources/chat/completions")}catch{}try{Me=await import("@anthropic-ai/sdk/resources/messages")}catch{}try{_t=await import("@google/generative-ai")}catch{}try{ft=await import("@google/genai")}catch{}Ut()})();function Zt(a){async function e(n,t){let s=Ie();if(!s||ve())return a.call(this,n,t);let r=performance.now(),o=F(),i=u(),d=o?.traceId??u(),l=n?.model??"unknown",m=n?.stream===!0;try{let c=await a.call(this,n,t);if(m){let p=c[Symbol.asyncIterator]?.bind(c);return p&&(c[Symbol.asyncIterator]=function(){let _=p(),g=0,S=0,I="",y;return{async next(){let{value:h,done:k}=await _.next();return k?(s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:i,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:g,output_tokens:S,finish_reason:I,status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,environment:s.environment,sdk_version:b}),{value:h,done:!0}):(y||(y=performance.now()-r),h?.usage&&(g=h.usage.prompt_tokens??g,S=h.usage.completion_tokens??S),h?.choices?.[0]?.finish_reason&&(I=h.choices[0].finish_reason),{value:h,done:!1})},[Symbol.asyncIterator](){return this}}}),c}return s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:i,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:b}),c}catch(c){throw s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:i,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:l,operation:"chat",latency_ms:performance.now()-r,stream:m,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:b}),c}}return e.__zespanAutoPatched=!0,e}function jn(){if(!$e&&Pe)try{let a=Pe.Completions;if(!a?.prototype)return;let e=a.prototype.create;if(typeof e=="function"&&!e.__zespanAutoPatched){a.prototype.create=Zt(e),$e=!0;return}if(typeof e!="function"){if(a.__zespanAutoPatched){$e=!0;return}let n=a;class t extends n{constructor(...o){if(super(...o),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__zespanAutoPatched){let i=this.create;this.create=Zt(i)}}}t.__zespanAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Pe,"Completions");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Pe,"Completions",{value:t,writable:!0,enumerable:!0,configurable:!0}),$e=!0}catch{}}}catch{}}function Jt(a){async function e(n,t){let s=Ie();if(!s||ve())return a.call(this,n,t);let r=performance.now(),o=F(),i=u(),d=o?.traceId??u(),l=n?.model??"unknown",m=n?.stream===!0;try{let c=await a.call(this,n,t);if(m){let p=c[Symbol.asyncIterator]?.bind(c);return p&&(c[Symbol.asyncIterator]=function(){let _=p(),g=0,S=0,I="",y;return{async next(){let{value:h,done:k}=await _.next();return k?(s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:i,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:g,output_tokens:S,finish_reason:I,status:"success",span_kind:"llm",agent_id:o?.agentId,agent_name:o?.agentName,agent_role:o?.agentRole,environment:s.environment,sdk_version:b}),{value:h,done:!0}):(y||(y=performance.now()-r),h?.type==="message_delta"&&h?.usage&&(S=h.usage.output_tokens??S),h?.type==="message_start"&&h?.message?.usage&&(g=h.message.usage.input_tokens??g),h?.type==="message_delta"&&h?.delta?.stop_reason&&(I=h.delta.stop_reason),{value:h,done:!1})},[Symbol.asyncIterator](){return this}}}),c}return s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:i,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(p=>p.type==="text").map(p=>p.text).join("")??"")}:{},environment:s.environment,sdk_version:b}),c}catch(c){throw s.enqueue({event_id:u(),project_id:"",trace_id:d,span_id:i,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:l,operation:"messages",latency_ms:performance.now()-r,stream:m,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:b}),c}}return e.__zespanAutoPatched=!0,e}function Dn(){if(!Be&&Me)try{let a=Me.Messages;if(!a?.prototype)return;let e=a.prototype.create;if(typeof e=="function"&&!e.__zespanAutoPatched){a.prototype.create=Jt(e),Be=!0;return}if(typeof e!="function"){if(a.__zespanAutoPatched){Be=!0;return}let n=a;class t extends n{constructor(...o){if(super(...o),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__zespanAutoPatched){let i=this.create;this.create=Jt(i)}}}t.__zespanAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Me,"Messages");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Me,"Messages",{value:t,writable:!0,enumerable:!0,configurable:!0}),Be=!0}catch{}}}catch{}}function En(){if(!Bt&&_t)try{let t=function(s,r){let o=n.call(this,s,r),i=o.generateContent?.bind(o),d=o.generateContentStream?.bind(o);return!i||i.__zespanAutoPatched||(o.generateContent=async l=>{let m=Ie();if(!m||ve())return i(l);let c=performance.now(),p=F(),_=u(),g=p?.traceId??u(),S=s.model??"gemini-1.5-flash";try{let I=await i(l),y=I.response?.usageMetadata;return m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"google",model:S,operation:"generateContent",latency_ms:performance.now()-c,stream:!1,input_tokens:y?.promptTokenCount??0,output_tokens:y?.candidatesTokenCount??0,finish_reason:I.response?.candidates?.[0]?.finishReason??"",status:"success",span_kind:"llm",environment:m.environment,sdk_version:b}),I}catch(I){throw m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"google",model:S,operation:"generateContent",latency_ms:performance.now()-c,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:String(I.message).slice(0,500),span_kind:"llm",environment:m.environment,sdk_version:b}),I}},o.generateContent.__zespanAutoPatched=!0,d&&(o.generateContentStream=async l=>{let m=Ie();if(!m||ve())return d(l);let c=performance.now(),p=F(),_=u(),g=p?.traceId??u(),S=s.model??"gemini-1.5-flash",I=await d(l),y=I.stream,h=0,k=0,A;return I.stream=(async function*(){try{for await(let f of y){A||(A=performance.now()-c);let j=f.usageMetadata;j&&(h=j.promptTokenCount??h,k=j.candidatesTokenCount??k),yield f}m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"google",model:S,operation:"generateContent",latency_ms:performance.now()-c,ttft_ms:A,stream:!0,input_tokens:h,output_tokens:k,status:"success",span_kind:"llm",environment:m.environment,sdk_version:b})}catch(f){throw m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"google",model:S,operation:"generateContent",latency_ms:performance.now()-c,ttft_ms:A,stream:!0,input_tokens:h,output_tokens:k,status:"error",error_message:String(f.message).slice(0,500),span_kind:"llm",environment:m.environment,sdk_version:b}),f}})(),I})),o};var a=t;let e=_t?.GoogleGenerativeAI;if(!e?.prototype?.getGenerativeModel||e.prototype.getGenerativeModel.__zespanAutoPatched)return;let n=e.prototype.getGenerativeModel;t.__zespanAutoPatched=!0,e.prototype.getGenerativeModel=t,Bt=!0}catch{}}function Gn(){if(!Wt&&ft)try{let a=ft?.Models;if(!a?.prototype||a.prototype.generateContent?.__zespanAutoPatched)return;let e=a.prototype.generateContent,n=a.prototype.generateContentStream,t=a.prototype.embedContent;a.prototype.generateContent=async function(s){let r=Ie();if(!r||ve())return e.call(this,s);let o=performance.now(),i=F(),d=u(),l=i?.traceId??u(),m=s?.model??"gemini";try{let c=await e.call(this,s),p=c?.usageMetadata,_=(c?.candidates?.[0]?.content?.parts??[]).filter(g=>g?.inlineData);return r.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:d,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"generateContent",latency_ms:performance.now()-o,stream:!1,input_tokens:Number(p?.promptTokenCount||0),output_tokens:Number(p?.candidatesTokenCount||0),cached_tokens:Number(p?.cachedContentTokenCount||0),reasoning_tokens:Number(p?.thoughtsTokenCount||0),finish_reason:c?.candidates?.[0]?.finishReason??"",status:"success",span_kind:_.length>0?"image_gen":"llm",..._.length>0?{metadata:{num_images:_.length}}:{},agent_id:i?.agentId,agent_name:i?.agentName,agent_role:i?.agentRole,environment:r.environment,sdk_version:b}),c}catch(c){throw r.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:d,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"generateContent",latency_ms:performance.now()-o,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(c.status??c.code??"unknown"),error_message:String(c.message).slice(0,500),span_kind:"llm",environment:r.environment,sdk_version:b}),c}},a.prototype.generateContent.__zespanAutoPatched=!0,n&&(a.prototype.generateContentStream=async function(s){let r=Ie();if(!r||ve())return n.call(this,s);let o=performance.now(),i=F(),d=u(),l=i?.traceId??u(),m=s?.model??"gemini",c=await n.call(this,s);return(async function*(){let p=0,_=0,g=0,S=0,I,y="";try{for await(let h of c){I||(I=performance.now()-o);let k=h?.usageMetadata;k&&(p=Number(k.promptTokenCount||p),_=Number(k.candidatesTokenCount||_),g=Number(k.cachedContentTokenCount||g),S=Number(k.thoughtsTokenCount||S)),h?.candidates?.[0]?.finishReason&&(y=h.candidates[0].finishReason),yield h}r.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:d,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"generateContent",latency_ms:performance.now()-o,ttft_ms:I,stream:!0,input_tokens:p,output_tokens:_,cached_tokens:g,reasoning_tokens:S,finish_reason:y||"stream_end",status:"success",span_kind:"llm",agent_id:i?.agentId,agent_name:i?.agentName,agent_role:i?.agentRole,environment:r.environment,sdk_version:b})}catch(h){throw r.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:d,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"generateContent",latency_ms:performance.now()-o,ttft_ms:I,stream:!0,input_tokens:p,output_tokens:_,status:"error",error_code:String(h.status??h.code??"unknown"),error_message:String(h.message).slice(0,500),span_kind:"llm",environment:r.environment,sdk_version:b}),h}})()},a.prototype.generateContentStream.__zespanAutoPatched=!0),t&&(a.prototype.embedContent=async function(s){let r=Ie();if(!r||ve())return t.call(this,s);let o=performance.now(),i=F(),d=u(),l=i?.traceId??u(),m=s?.model??"gemini-embedding";try{let c=await t.call(this,s),p=c?.usageMetadata;return r.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:d,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"embedding",latency_ms:performance.now()-o,stream:!1,input_tokens:Number(p?.promptTokenCount||0),output_tokens:0,status:"success",span_kind:"embedding",agent_id:i?.agentId,agent_name:i?.agentName,agent_role:i?.agentRole,environment:r.environment,sdk_version:b}),c}catch(c){throw r.enqueue({event_id:u(),project_id:"",trace_id:l,span_id:d,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"google",model:m,operation:"embedding",latency_ms:performance.now()-o,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(c.status??c.code??"unknown"),error_message:String(c.message).slice(0,500),span_kind:"embedding",environment:r.environment,sdk_version:b}),c}},a.prototype.embedContent.__zespanAutoPatched=!0),Wt=!0}catch{}}function Ut(){jn(),Dn(),En(),Gn()}function We(){Ut()}var Ze=class{apiKey;endpoint;baseURL;environment;storePrompts;redactKeys;redactPii;sampleRate;debug;enableOTel;prompts;datasets;configClient;projectId;batch;_storePromptsDefault;_promptWarningShown=!1;constructor(e){if(!e.apiKey)throw new Error("Zespan: apiKey is required");e.apiKey.startsWith("zsp_")||console.warn("[zespan] API key should start with zsp_ \u2014 check your key"),this.apiKey=e.apiKey,this.baseURL=e.baseURL??"https://api.zespan.com",this.endpoint=e.endpoint??`${this.baseURL.replace(/\/+$/,"")}/v1/ingest`,this.environment=e.environment??"production",this._storePromptsDefault=e.storePrompts===void 0,this.storePrompts=e.storePrompts??!0,this.redactKeys=e.redactKeys??["password","secret","token","api_key"],this.redactPii=e.redactPii??!1,this.sampleRate=e.sampleRate??1,this.debug=e.debug??!1,this.enableOTel=e.enableOTel??!1,this.projectId=e.projectId,this.prompts=new Ce(this),this.datasets=new xe(this),this.redactPii&&qt({piiPreset:e.piiPreset,piiCategories:e.piiCategories,piiIncludeNames:e.piiIncludeNames,piiIncludeEmails:e.piiIncludeEmails,piiIncludePhones:e.piiIncludePhones,piiIncludeAddresses:e.piiIncludeAddresses,piiConfidenceThreshold:e.piiConfidenceThreshold,piiRedactionMode:e.piiRedactionMode,piiWhitelist:e.piiWhitelist,piiCustomPatterns:e.piiCustomPatterns}),e.enableZespanPilot!==!1&&e.projectId?this.configClient=new ze({baseUrl:this.baseURL,apiKey:this.apiKey,projectId:e.projectId}):this.configClient=null,this.batch=new Ge(this,{maxSize:e.batchSize??50,flushInterval:e.flushInterval??2e3},this.configClient??void 0),process.once("beforeExit",()=>this.batch.flush()),this.enableOTel&&qe({endpoint:e.otelEndpoint,serviceName:e.otelServiceName,sampleRate:e.sampleRate,apiKey:this.apiKey,environment:this.environment}),e.autopatch!==!1&&We()}enqueue(e){e.sdk_name||(e.sdk_name=Pt),!(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. Set redactPii: true to enable pattern-based PII detection (emails, SSNs, credit cards, etc.). To disable prompt capture: { storePrompts: false }")),this.batch.push(e))}redactForStorage(e){return Ne(e,this.redactKeys)}async redactValueAsync(e){return Kt(e,this.redactKeys,this.redactPii)}async redactTextAsync(e){return Lt(e,this.redactPii)}async redactObjectAsync(e){return zt(e,this.redactKeys,this.redactPii)}resolveGuardrailsUrl(){let e=this.baseURL.replace(/\/+$/,"");return e.endsWith("/v1")?`${e}/guardrails/check`:`${e}/v1/guardrails/check`}async checkGuardrails(e){let n=await fetch(this.resolveGuardrailsUrl(),{method:"POST",headers:{"content-type":"application/json","x-api-key":this.apiKey},body:JSON.stringify(e)});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 t=await n.json();return{allowed:!!t.allowed,results:Array.isArray(t.results)?t.results:[],modifiedText:typeof t.modifiedText=="string"?t.modifiedText:null}}flush(){return this.batch.flush()}createSpan(e){return ke().startSpan(e.name,{kind:e.kind??be.INTERNAL,attributes:e.attributes??{}})}async withSpan(e,n,t){let r=ke().startSpan(e,{kind:t?.kind??be.INTERNAL,attributes:t?.attributes??{}});try{let o=await n(r);return r.setStatus({code:we.OK}),o}catch(o){throw r.setStatus({code:we.ERROR,message:o.message}),r.recordException(o),o}finally{r.end()}}},yt=null,kt=a=>{yt=new Ze(a)},q=()=>{if(!yt)throw new Error("Call zespan.init() first");return yt},Fn=kt;var H=class extends Error{phase;results;constructor(e,n){super(`Guardrail blocked ${e} content`),this.name="GuardrailBlockedError",this.phase=e,this.results=n}};function te(a,e){if(!a)return null;if(a===!0)return{pre:!0,post:!0,failClosed:!1,operation:e};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??e}}function ae(a,e){return e?.modifiedText?e.modifiedText:a}async function Z(a,e,n){if(!e||n.phase==="pre"&&!e.pre||n.phase==="post"&&!e.post)return null;let t=n.text?.trim();if(!t)return null;try{let s=await a.checkGuardrails({...n,text:t.slice(0,5e4),operation:n.operation??e.operation});if(!s.allowed)throw new H(n.phase,s.results);return s}catch(s){if(s instanceof H||e.failClosed)throw s;return null}}function se(a){if(!Array.isArray(a))return{systemPrompt:void 0,conversationMessages:[]};let e=[],n=[];for(let t of a)if((typeof t?.role=="string"?t.role:t?._getType?.()??"")==="system"){let r=typeof t.content=="string"?t.content:Array.isArray(t.content)?t.content.map(o=>typeof o=="string"?o:o?.text??"").filter(Boolean).join(""):JSON.stringify(t.content??"");r&&e.push(r)}else n.push(t);return{systemPrompt:e.length?e.join(`
3
+ `):void 0,conversationMessages:n}}function qn(a){let e={};try{let n=[],t=[];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),t.push(r)}for(let s of n){try{let r=s.match(/You are the (\w+)Agent/i);if(r){e.agent_name=r[1];break}}catch{}try{let r=s.match(/Agent Name:\s*(\w+)/i);if(r){e.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]){e.agent_role=r[1].toLowerCase();break}}catch{}try{a.length>10&&(e.has_memory=!0)}catch{}try{let s=t.join(" ").toLowerCase();(s.includes("think step by step")||s.includes("let's reason")||s.includes("step 1"))&&(e.has_planning=!0)}catch{}}catch{}return e}function de(a,e){let n=qn(a);try{!n.has_planning&&e&&/^o[13]/.test(e)&&(n.has_planning=!0)}catch{}return n}function ce(a){try{let e=a.filter(s=>s?.role==="user").length,n=a[a.length-1],t=typeof n?.role=="string"?n.role:"user";return{conversation_turn:e,message_role:t}}catch{return{conversation_turn:0,message_role:"user"}}}function le(a){try{return a.map(e=>{try{return e?.type==="function"&&e?.function?{name:String(e.function.name??""),description:e.function.description?String(e.function.description):void 0,parameters_schema:e.function.parameters??void 0,source:"function"}:e?.name?{name:String(e.name),description:e.description?String(e.description):void 0,parameters_schema:e.input_schema??e.parameters??void 0,source:"function"}:null}catch{return null}}).filter(e=>e!==null)}catch{return[]}}function Je(a){try{let e=a?.[0]?.message?.tool_calls??[],n=new Set,t={};for(let s of e)try{let r=s?.function?.name;if(typeof r=="string"&&r){n.add(r);try{t[r]=typeof s.function.arguments=="string"?JSON.parse(s.function.arguments):s.function.arguments??{}}catch{t[r]=s.function?.arguments??{}}}}catch{}return{tools_used:Array.from(n),tool_call_args:t}}catch{return{tools_used:[],tool_call_args:{}}}}function _e(a){try{let e={};for(let s of a)try{let r=typeof s?.index=="number"?s.index:0;e[r]||(e[r]={name:"",argumentsStr:""}),s?.function?.name&&(e[r].name+=s.function.name),s?.function?.arguments&&(e[r].argumentsStr+=s.function.arguments)}catch{}let n=new Set,t={};for(let s of Object.values(e))try{let r=s.name;if(r){n.add(r);try{t[r]=s.argumentsStr?JSON.parse(s.argumentsStr):{}}catch{t[r]=s.argumentsStr}}}catch{}return{tools_used:Array.from(n),tool_call_args:t}}catch{return{tools_used:[],tool_call_args:{}}}}import{createHash as $n}from"crypto";import{SpanKind as Bn,SpanStatusCode as Ae,trace as Wn}from"@opentelemetry/api";async function fe(a,e){if(!e||!e.enabled)return a();let n;for(let t=0;t<=e.maxRetries;t++)try{return await a()}catch(s){if(n=s,e.retryOnStatusCodes.length>0&&!e.retryOnStatusCodes.includes(s?.status))throw s;if(t>=e.maxRetries)break;let r=Math.min(1e3*Math.pow(e.backoffMultiplier,t),3e4);await Kn(r)}throw n}function Kn(a){return new Promise(e=>setTimeout(e,a))}var It=class{constructor(e,n=1/0){this.max=e;this.maxQueue=n;this.counter=e}counter;queue=[];acquire(){return this.counter>0?(this.counter--,Promise.resolve()):this.queue.length>=this.maxQueue?Promise.reject(new Error(`Semaphore queue full (max ${this.maxQueue})`)):new Promise(e=>{this.queue.push(e)})}release(){this.queue.length>0?this.queue.shift()():this.counter++}async run(e){await this.acquire();try{return await e()}finally{this.release()}}},Se=new Map,Ln=256;function zn(){let a=Se.keys().next().value;a!==void 0&&Se.delete(a)}function he(a,e){let n=Se.get(a);return n?(Se.delete(a),Se.set(a,n),n):(Se.size>=Ln&&zn(),n=new It(e),Se.set(a,n),n)}var Ue=a=>$n("sha256").update(a).digest("hex");function Zn(a,e,n="openai"){return{"gen_ai.system":n,"gen_ai.model":e,"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*Jn(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:i,otelSpan:d,model:l,agentCtx:m,autoDetected:c,conversation_turn:p,message_role:_,tool_definitions:g,provider:S,operation:I}=e,y=S??"openai",h,k=0,A=0,f=0,j="",w=l,T=[],v="",D=[],{systemPrompt:R,conversationMessages:C}=se(i.messages??[]),[N,x]=await Promise.all([n.storePrompts?n.redactValueAsync(C):Promise.resolve(void 0),n.storePrompts&&R?n.redactValueAsync(R):Promise.resolve(void 0)]);try{for await(let B of a){h||(h=performance.now()-t,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:w,operation:I,latency_ms:h,ttft_ms:h,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Ue(JSON.stringify(i.messages)),...N!==void 0?{prompt_text:N,...x!==void 0?{system_prompt:x}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,finish_reason:"stream_start",...m,span_kind:"llm",tool_definitions:g,conversation_turn:p,message_role:_,metadata:{auto_detected:Object.keys(c).length?c:void 0}}),d&&d.setAttribute("gen_ai.response.time_to_first_token",h));let G=B.choices?.[0]?.delta?.content;if(G&&(A++,v+=G),B.choices?.[0]?.finish_reason&&(j=B.choices[0].finish_reason),B.model&&(w=B.model),B.usage&&(k=Number(B.usage.prompt_tokens||k||0),A=Number(B.usage.completion_tokens||A||0),f=Number(B.usage.prompt_tokens_details?.cached_tokens||f||0)),B.choices?.[0]?.delta?.tool_calls)for(let U of B.choices[0].delta.tool_calls)D.push(U),U.function?.name&&!T.includes(U.function.name)&&T.push(U.function.name);yield B}let{tools_used:M,tool_call_args:P}=_e(D),E=M.length>0?M:T,O=performance.now()-t,[L,K,z]=await Promise.all([n.storePrompts?n.redactValueAsync(v):Promise.resolve(void 0),n.redactObjectAsync(P),E.length>0&&v?n.redactTextAsync(v):Promise.resolve(void 0)]);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:w,operation:I,latency_ms:O,ttft_ms:h,stream:!0,input_tokens:k,output_tokens:A,cached_tokens:f,status:"success",finish_reason:j||"stream_end",tools_used:E,tool_call_args:K,prompt_hash:Ue(JSON.stringify(i.messages)),...N!==void 0?{prompt_text:N,completion_text:L,...x!==void 0?{system_prompt:x}:{}}:{},...z!==void 0?{decision_rationale:z}:{},...m,span_kind:"llm",tool_definitions:g,conversation_turn:p,message_role:_,metadata:{usage:{prompt_tokens:k,completion_tokens:A,cached_tokens:f},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:b}),d&&(d.setAttribute("gen_ai.usage.output_tokens",A),d.setAttribute("gen_ai.usage.total_tokens",A),d.setAttribute("gen_ai.response.finish_reason",j||"stream_end"),d.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:w,operation:I,latency_ms:performance.now()-t,ttft_ms:h,stream:!0,input_tokens:0,output_tokens:A,cost_usd:0,status:"error",error_code:String(M.status??"unknown"),error_message:String(M.message).slice(0,500),...m,span_kind:"llm",conversation_turn:p,message_role:_,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:b}),d&&(d.setStatus({code:Ae.ERROR,message:M.message}),d.recordException(M)),M}}function Ve(a,e={}){let n=a,t=n.chat.completions.create.bind(n.chat.completions),s=te(e.guardrails,"chat"),r=e.providerOverride??"openai",o=e.operation??"chat";return n.chat.completions.create=async(i,d)=>{let l=q(),m=performance.now(),c=F(),p=u(),_=c?.traceId??u(),g=i.model??"gpt-4",S;if(l.configClient){let C=l.configClient.getAbTest(o);if(C)Math.random()<C.splitPercentage/100?(g=C.candidateModel,S={ab_test:!0,ab_variant:"candidate"}):S={ab_test:!0,ab_variant:"control"},i={...i,model:g};else{let N=l.configClient.getModel(o,g);if(N!==g){let x=g;g=N,i={...i,model:N},l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:N,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:x,override_model:N},environment:l.environment,sdk_version:b})}}}let I=null,y=null,h=c?.agentId?{agent_id:c.agentId,agent_name:c.agentName,agent_role:c.agentRole,agent_framework:c.agentFramework,parent_agent_id:c.parentAgentId}:{},k=de(i.messages??[],i.model),{conversation_turn:A,message_role:f}=ce(i.messages??[]),j=i.tools?.length?le(i.tools):void 0,w=null,T=l.enableOTel?Wn.getTracer("zespan-sdk"):null;T&&(w=T.startSpan(`chat.completions ${g}`,{kind:Bn.CLIENT,attributes:Zn(i,g,r)}));let v;if(l.configClient){let C=l.configClient.getTimeout(o);C&&(v=AbortSignal.timeout(C.timeoutMs))}let D=l.configClient?.getRetryPolicy(o)??null,R=l.configClient?.getConcurrencyLimit(o)??null;try{I=await Z(l,s,{text:JSON.stringify(i.messages??[]),phase:"pre",traceId:_,spanId:p,model:g,operation:o,agentName:c?.agentName});let C=()=>fe(()=>W({traceId:_,spanId:p,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>t(i,v?{...d,signal:v}:d)),D),N=await(R!==null?he(`${l.projectId??"default"}:${o}`,R).run(C):C());if(i.stream===!0)return Jn(N,{client:l,t0:m,traceId:_,spanId:p,parent:c,params:i,otelSpan:w,model:g,agentCtx:h,autoDetected:k,conversation_turn:A,message_role:f,tool_definitions:j,provider:r,operation:o});let{prompt_tokens:M,completion_tokens:P,prompt_tokens_details:E}=N.usage??{},O=E?.cached_tokens??0,L=N.model??i.model,K=N.usage?.completion_tokens_details?.reasoning_tokens,z=N.choices?.[0]?.message?.content||"";y=await Z(l,s,{text:z,phase:"post",traceId:_,spanId:p,model:L,operation:o,agentName:c?.agentName});let B=ae(z,y);B!==z&&typeof N?.choices?.[0]?.message?.content=="string"&&(N.choices[0].message.content=B);let{tools_used:G,tool_call_args:U}=Je(N.choices??[]),{systemPrompt:$,conversationMessages:J}=se(i.messages??[]),[Y,ee,oe,X,ue]=await Promise.all([l.storePrompts?l.redactValueAsync(J):Promise.resolve(void 0),l.storePrompts?l.redactValueAsync(B):Promise.resolve(void 0),l.storePrompts&&$?l.redactValueAsync($):Promise.resolve(void 0),l.redactObjectAsync(U),G.length>0&&z?l.redactTextAsync(z):Promise.resolve(void 0)]);return l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:L,operation:o,latency_ms:performance.now()-m,stream:!1,input_tokens:M??0,output_tokens:P??0,cached_tokens:O,...K?{reasoning_tokens:K}:{},status:"success",finish_reason:N.choices?.[0]?.finish_reason??"",tools_used:G.length>0?G:N.choices?.[0]?.message?.tool_calls?.map(re=>re.function.name)??[],tool_call_args:X,prompt_hash:Ue(JSON.stringify(i.messages)),...Y!==void 0?{prompt_text:Y,completion_text:ee,...oe!==void 0?{system_prompt:oe}:{}}:{},...ue!==void 0?{decision_rationale:ue}:{},...h,span_kind:"llm",tool_definitions:j,conversation_turn:A,message_role:f,metadata:{usage:N.usage??null,guardrails:{pre:I?{matched:I.results.length,modified:!!I.modifiedText}:null,post:y?{matched:y.results.length,modified:!!y.modifiedText}:null},auto_detected:Object.keys(k).length?k:void 0,...S??{}},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:b}),w&&(w.setAttribute("gen_ai.usage.input_tokens",M??0),w.setAttribute("gen_ai.usage.output_tokens",P??0),w.setAttribute("gen_ai.usage.total_tokens",(M??0)+(P??0)),w.setAttribute("gen_ai.usage.cached_tokens",O),w.setAttribute("gen_ai.response.finish_reason",N.choices?.[0]?.finish_reason??""),w.setAttribute("gen_ai.response.latency",performance.now()-m),w.setStatus({code:Ae.OK}),w.end()),N}catch(C){if(C?.name==="TimeoutError"||C?.code==="ABORT_ERR"||v&&v.aborted)throw l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:i.model,operation:o,latency_ms:performance.now()-m,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(C.message).slice(0,500),...h,span_kind:"llm",conversation_turn:A,message_role:f,metadata:{auto_detected:Object.keys(k).length?k:void 0},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:b}),w&&(w.setStatus({code:Ae.ERROR,message:C.message}),w.recordException(C),w.end()),C;let x=l.configClient?.getFallback(o)??null;if(x&&x.model){let E=String(C.message??"")+String(C.status??"")+String(C.code??"");if(x.conditions.length===0||x.conditions.some(L=>E.toLowerCase().includes(L.toLowerCase()))){let L=g,K={...i,model:x.model};l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:x.model,operation:o,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:L,fallback_model:x.model,reason:String(C.message).slice(0,200)},environment:l.environment,sdk_version:b});try{let z=await W({traceId:_,spanId:p,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>t(K,d)),{prompt_tokens:B,completion_tokens:G,prompt_tokens_details:U}=z.usage??{},$=U?.cached_tokens??0,J=z.model??x.model;return l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:J,operation:o,latency_ms:performance.now()-m,stream:!1,input_tokens:B??0,output_tokens:G??0,cached_tokens:$,status:"success",finish_reason:z.choices?.[0]?.finish_reason??"",prompt_hash:Ue(JSON.stringify(i.messages)),...h,span_kind:"llm",conversation_turn:A,message_role:f,metadata:{usage:z.usage??null,fallback_used:!0,original_model:L,auto_detected:Object.keys(k).length?k:void 0},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:b}),w&&(w.setStatus({code:Ae.OK}),w.end()),z}catch(z){throw w&&(w.setStatus({code:Ae.ERROR,message:z.message}),w.recordException(z),w.end()),z}}}let M=C instanceof H,P=M?"error":C.status===429?"rate_limited":C.status===408?"timeout":"error";throw l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:r,model:i.model,operation:o,latency_ms:performance.now()-m,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:P,error_code:M?"guardrail_blocked":String(C.status??"unknown"),error_message:String(C.message).slice(0,500),...h,span_kind:"llm",conversation_turn:A,message_role:f,metadata:{auto_detected:Object.keys(k).length?k:void 0},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:b}),w&&(w.setStatus({code:Ae.ERROR,message:C.message}),w.recordException(C),w.end()),C}},a}import{createHash as Un}from"crypto";import{SpanKind as Vn,SpanStatusCode as Oe,trace as Hn}from"@opentelemetry/api";var He=a=>Un("sha256").update(a).digest("hex");function Qn(a){let e=Array.isArray(a?.messages)?[...a.messages]:[],n=a?.system;if(typeof n=="string"&&n.trim().length>0)return[{role:"system",content:n},...e];if(Array.isArray(n)&&n.length>0){let t=n.map(s=>typeof s=="string"?s:typeof s?.text=="string"?s.text:"").filter(s=>s.length>0).join(`
4
+ `);if(t.length>0)return[{role:"system",content:t},...e]}return e}function Xn(a,e){return{"gen_ai.system":"anthropic","gen_ai.model":e,"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*Yn(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:i,otelSpan:d,agentCtx:l,tool_definitions:m,autoDetected:c,conversation_turn:p,message_role:_,operation:g,detectionMessages:S}=e,I,y=0,h=0,k=0,A=0,f="",j=i.model,w=new Set,T=[],{systemPrompt:v,conversationMessages:D}=se(S),[R,C]=await Promise.all([n.storePrompts?n.redactValueAsync(D):Promise.resolve(void 0),n.storePrompts&&v?n.redactValueAsync(v):Promise.resolve(void 0)]);try{for await(let O of a){if(!I&&O.type==="content_block_start"&&(I=performance.now()-t,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:j,operation:g,latency_ms:I,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:He(JSON.stringify(S)),...R!==void 0?{prompt_text:R,...C!==void 0?{system_prompt:C}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,finish_reason:"stream_start",...l,span_kind:"llm",tool_definitions:m,conversation_turn:p,message_role:_,metadata:{auto_detected:Object.keys(c).length?c:void 0}}),d&&d.setAttribute("gen_ai.response.time_to_first_token",I)),O.type==="content_block_delta"&&O.delta?.type==="text_delta"&&(A++,T.push(O.delta.text||"")),O.type==="message_delta"&&O.delta?.stop_reason&&(f=O.delta.stop_reason),O.type==="message_delta"&&O.usage&&(y=Number(O.usage.input_tokens||y||0),A=Number(O.usage.output_tokens||A||0),h=Number(O.usage.cache_read_input_tokens||h||0)),O.type==="message_start"&&O.message?.usage&&(y=Number(O.message.usage.input_tokens||y||0),A=Number(O.message.usage.output_tokens||A||0),h=Number(O.message.usage.cache_read_input_tokens||h||0)),O.type==="content_block_start"&&O.content_block?.type==="tool_use"){let L=O.content_block.name;L&&w.add(L)}yield O}let N=performance.now()-t,x=[...w],M=T.join(""),[P,E]=await Promise.all([n.storePrompts?n.redactValueAsync(M):Promise.resolve(void 0),x.length>0&&M?n.redactTextAsync(M):Promise.resolve(void 0)]);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:j,operation:g,latency_ms:N,ttft_ms:I,stream:!0,input_tokens:y,output_tokens:A,cached_tokens:h,reasoning_tokens:k,status:"success",finish_reason:f||"stream_end",tools_used:x,prompt_hash:He(JSON.stringify(S)),...R!==void 0?{prompt_text:R,completion_text:P,...C!==void 0?{system_prompt:C}:{}}:{},...E!==void 0?{decision_rationale:E}:{},...l,span_kind:"llm",tool_definitions:m,conversation_turn:p,message_role:_,metadata:{usage:{input_tokens:y,output_tokens:A,cache_read_input_tokens:h,reasoning_tokens:k},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:b}),d&&(d.setAttribute("gen_ai.usage.output_tokens",A),d.setAttribute("gen_ai.response.finish_reason",f||"stream_end"))}catch(N){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:j,operation:g,latency_ms:performance.now()-t,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:A,cost_usd:0,status:"error",error_code:String(N.status??N.type??"unknown"),error_message:String(N.message).slice(0,500),...l,span_kind:"llm",conversation_turn:p,message_role:_,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:b}),d&&(d.setStatus({code:Oe.ERROR,message:N.message}),d.recordException(N)),N}}function Vt(a,e={}){let n=a,t=n.messages.create.bind(n.messages),s=te(e.guardrails,"chat"),r=e.operation??"chat";return n.messages.create=async(o,i)=>{let d=q(),l=performance.now(),m=F(),c=u(),p=m?.traceId??u(),_=o.model??"claude-3-5-sonnet-20241022",g;if(d.configClient){let P=d.configClient.getAbTest(r);if(P)Math.random()<P.splitPercentage/100?(_=P.candidateModel,g={ab_test:!0,ab_variant:"candidate"}):g={ab_test:!0,ab_variant:"control"},o={...o,model:_};else{let E=d.configClient.getModel(r,_);if(E!==_){let O=_;_=E,o={...o,model:E},d.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:c,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:E,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:O,override_model:E},environment:d.environment,sdk_version:b})}}}let S=null,I=null,y=Qn(o),{systemPrompt:h,conversationMessages:k}=se(y),A=de(y,_),{conversation_turn:f,message_role:j}=ce(y),w=m?.agentName??A.agent_name,T=m?.agentRole??A.agent_role,v=m?.agentId||w||T?{agent_id:m?.agentId,agent_name:w,agent_role:T,agent_framework:m?.agentFramework,parent_agent_id:m?.parentAgentId}:{},D=o.tools?.length?le(o.tools):void 0,R=null,C=d.enableOTel?Hn.getTracer("zespan-sdk"):null;C&&(R=C.startSpan(`messages.create ${_}`,{kind:Vn.CLIENT,attributes:Xn(o,_)}));let N;if(d.configClient){let P=d.configClient.getTimeout(r);P&&(N=AbortSignal.timeout(P.timeoutMs))}let x=d.configClient?.getRetryPolicy(r)??null,M=d.configClient?.getConcurrencyLimit(r)??null;try{S=await Z(d,s,{text:JSON.stringify(o.messages??[]),phase:"pre",traceId:p,spanId:c,model:_,operation:r,agentName:m?.agentName});let P=()=>fe(()=>W({traceId:p,spanId:c,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags,agentId:m?.agentId,agentName:w,agentRole:T,agentFramework:m?.agentFramework,parentAgentId:m?.parentAgentId,conversationTurn:f,availableTools:D},()=>t(o,N?{...i,signal:N}:i)),x),E=await(M!==null?he(`${d.projectId??"default"}:${r}`,M).run(P):P());if(o.stream===!0)return Yn(E,{client:d,t0:l,traceId:p,spanId:c,parent:m,params:o,otelSpan:R,agentCtx:v,tool_definitions:D,autoDetected:A,conversation_turn:f,message_role:j,operation:r,detectionMessages:y});let L=E.usage?.input_tokens??0,K=E.usage?.output_tokens??0,z=E.usage?.cache_read_input_tokens??0,B=E.model??o.model,G=E.content?.find(V=>V.type==="text")?.text||"",U=(E.content??[]).filter(V=>V.type==="tool_use"),$=U.map(V=>V.name).filter(Boolean),J={};for(let V of U)V.name&&(J[V.name]=V.input??{});I=await Z(d,s,{text:G,phase:"post",traceId:p,spanId:c,model:B,operation:r,agentName:m?.agentName});let Y=ae(G,I);if(Y!==G){let V=E.content?.find(pe=>pe.type==="text");V&&typeof V.text=="string"&&(V.text=Y)}let[ee,oe,X,ue,re]=await Promise.all([d.storePrompts?d.redactValueAsync(k):Promise.resolve(void 0),d.storePrompts?d.redactValueAsync(Y):Promise.resolve(void 0),d.storePrompts&&h?d.redactValueAsync(h):Promise.resolve(void 0),d.redactObjectAsync(J),U.length>0&&G?d.redactTextAsync(G):Promise.resolve(void 0)]);return d.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:c,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:B,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:L,output_tokens:K,cached_tokens:z,status:"success",finish_reason:E.stop_reason??"",tools_used:$.length>0?$:E.content?.filter(V=>V.type==="tool_use").map(V=>V.name)??[],tool_call_args:ue,prompt_hash:He(JSON.stringify(y)),...ee!==void 0?{prompt_text:ee,completion_text:oe,...X!==void 0?{system_prompt:X}:{}}:{},...re!==void 0?{decision_rationale:re}:{},...v,span_kind:"llm",tool_definitions:D,conversation_turn:f,message_role:j,metadata:{usage:E.usage??null,guardrails:{pre:S?{matched:S.results.length,modified:!!S.modifiedText}:null,post:I?{matched:I.results.length,modified:!!I.modifiedText}:null},auto_detected:Object.keys(A).length?A:void 0,...g??{}},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:d.environment,sdk_version:b}),R&&(R.setAttribute("gen_ai.usage.input_tokens",L),R.setAttribute("gen_ai.usage.output_tokens",K),R.setAttribute("gen_ai.usage.cached_tokens",z),R.setAttribute("gen_ai.response.finish_reason",E.stop_reason??""),R.setAttribute("gen_ai.response.latency",performance.now()-l),R.setStatus({code:Oe.OK}),R.end()),E}catch(P){if(P?.name==="TimeoutError"||P?.code==="ABORT_ERR"||N&&N.aborted)throw d.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:c,parent_span_id:m?.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(P.message).slice(0,500),...v,span_kind:"llm",conversation_turn:f,message_role:j,metadata:{auto_detected:Object.keys(A).length?A:void 0},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:d.environment,sdk_version:b}),R&&(R.setStatus({code:Oe.ERROR,message:P.message}),R.recordException(P),R.end()),P;let O=d.configClient?.getFallback(r)??null;if(O&&O.model){let z=String(P.message??"")+String(P.status??"")+String(P.code??"");if(O.conditions.length===0||O.conditions.some(G=>z.toLowerCase().includes(G.toLowerCase()))){let G=_,U={...o,model:O.model};d.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:c,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:O.model,operation:r,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:G,fallback_model:O.model,reason:String(P.message).slice(0,200)},environment:d.environment,sdk_version:b});try{let $=await W({traceId:p,spanId:c,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags},()=>t(U,i)),J=$.usage?.input_tokens??0,Y=$.usage?.output_tokens??0,ee=$.usage?.cache_read_input_tokens??0,oe=$.model??O.model;return d.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:c,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:oe,operation:r,latency_ms:performance.now()-l,stream:!1,input_tokens:J,output_tokens:Y,cached_tokens:ee,status:"success",finish_reason:$.stop_reason??"",prompt_hash:He(JSON.stringify(y)),...v,span_kind:"llm",conversation_turn:f,message_role:j,metadata:{usage:$.usage??null,fallback_used:!0,original_model:G,auto_detected:Object.keys(A).length?A:void 0},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:d.environment,sdk_version:b}),R&&(R.setStatus({code:Oe.OK}),R.end()),$}catch($){throw R&&(R.setStatus({code:Oe.ERROR,message:$.message}),R.recordException($),R.end()),$}}}let L=P instanceof H,K=L?"error":P.status===429||P.type==="overloaded_error"?"rate_limited":P.status===408?"timeout":"error";throw d.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:c,parent_span_id:m?.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:K,error_code:L?"guardrail_blocked":String(P.status??P.type??"unknown"),error_message:String(P.message).slice(0,500),...v,span_kind:"llm",conversation_turn:f,message_role:j,metadata:{auto_detected:Object.keys(A).length?A:void 0},user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:d.environment,sdk_version:b}),R&&(R.setStatus({code:Oe.ERROR,message:P.message}),R.recordException(P),R.end()),P}},a}import{createHash as es}from"crypto";import{SpanKind as Qe,SpanStatusCode as me,trace as Xe}from"@opentelemetry/api";var je=a=>es("sha256").update(a).digest("hex");function Ye(a){let e=o=>{if(typeof o=="string")return o;if(Array.isArray(o))return o.map(i=>typeof i=="string"?i:typeof i?.text=="string"?i.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(i=>typeof i?.text=="string"?i.text:"").filter(Boolean).join(`
6
+ `)}return""},n=a?.contents??a,t=[],s=a?.systemInstruction??a?.system_instruction,r=e(s);if(r.length>0&&t.push({role:"system",content:r}),typeof n=="string")return t.push({role:"user",content:n}),t;if(Array.isArray(n)){for(let o of n){if(typeof o=="string"){t.push({role:"user",content:o});continue}if(o&&typeof o=="object"){let i=typeof o.role=="string"?o.role:"user",d=e(o);d.length>0&&t.push({role:i,content:d})}}return t}if(n&&typeof n=="object"){let o=typeof n.role=="string"?n.role:"user",i=e(n);i.length>0&&t.push({role:o,content:i})}return t}function et(a,e){return{"gen_ai.system":"google","gen_ai.model":e,"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 vt(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*Ht(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:i,modelName:d,otelSpan:l,streamResult:m,agentCtx:c,tool_definitions:p,autoDetected:_,conversation_turn:g,message_role:S,operation:I}=e,y,h=0,k=0,A=0,f=0,j="",w=[],T="";try{for await(let C of a){y||(y=performance.now()-t,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:d,operation:I,latency_ms:y,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:je(JSON.stringify(i)),...n.storePrompts?{prompt_text:n.redactForStorage(i)}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,finish_reason:"stream_start",...c,span_kind:"llm",tool_definitions:p,conversation_turn:g,message_role:S,metadata:{auto_detected:Object.keys(_).length?_:void 0}}),l&&l.setAttribute("gen_ai.response.time_to_first_token",y));let N=(typeof C?.text=="function"?C.text():C?.text)||C?.candidates?.[0]?.content?.parts?.map(P=>P?.text||"").join("")||"";N&&(h++,T+=N),C.candidates?.[0]?.finishReason&&(j=C.candidates[0].finishReason);let x=Array.isArray(C?.functionCalls)?C.functionCalls:C?.functionCalls?[C.functionCalls]:[],M=(C?.candidates?.[0]?.content?.parts??[]).map(P=>P?.functionCall).filter(Boolean);for(let P of[...x,...M])P?.name&&!w.includes(P.name)&&w.push(P.name);yield C}let v=await m?.response;v?.usageMetadata&&(k=Number(v.usageMetadata.promptTokenCount||k||0),h=Number(v.usageMetadata.candidatesTokenCount||h||0),A=Number(v.usageMetadata.cachedContentTokenCount||A||0),f=Number(v.usageMetadata.thoughtsTokenCount||f||0));let D=vt(v);D&&(T=D);let R=performance.now()-t;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:d,operation:I,latency_ms:R,ttft_ms:y,stream:!0,input_tokens:k,output_tokens:h,cached_tokens:A,reasoning_tokens:f,status:"success",finish_reason:j||"stream_end",tools_used:w,prompt_hash:je(JSON.stringify(i)),...n.storePrompts?{prompt_text:n.redactForStorage(i),completion_text:n.redactForStorage(T)}:{},...c,span_kind:"llm",tool_definitions:p,conversation_turn:g,message_role:S,metadata:{usage:v?.usageMetadata??{promptTokenCount:k,candidatesTokenCount:h,cachedContentTokenCount:A,thoughtsTokenCount:f},auto_detected:Object.keys(_).length?_:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),l&&(l.setAttribute("gen_ai.completion",T),l.setAttribute("gen_ai.usage.input_tokens",k),l.setAttribute("gen_ai.usage.output_tokens",h),l.setAttribute("gen_ai.usage.total_tokens",k+h),l.setAttribute("gen_ai.usage.cached_tokens",A),l.setAttribute("gen_ai.usage.reasoning_tokens",f),l.setAttribute("gen_ai.response.finish_reason",j||"stream_end"),l.setStatus({code:me.OK}),l.end())}catch(v){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:d,operation:I,latency_ms:performance.now()-t,ttft_ms:y,stream:!0,input_tokens:0,output_tokens:h,cost_usd:0,status:"error",error_code:String(v.status??"unknown"),error_message:String(v.message).slice(0,500),...c,span_kind:"llm",conversation_turn:g,message_role:S,metadata:{auto_detected:Object.keys(_).length?_:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),l&&(l.setStatus({code:me.ERROR,message:v.message}),l.recordException(v),l.end()),v}}function Qt(a,e={}){let n=a,t=n.getGenerativeModel.bind(n),s=te(e.guardrails,"chat"),r=e.operation??"chat";return n.getGenerativeModel=(o,i)=>{let d=o.model,l=q(),m=!1,c=d,p;if(l.configClient){let y=l.configClient.getAbTest(r);if(y)Math.random()<y.splitPercentage/100?(c=d,d=y.candidateModel,o={...o,model:d},m=!0,p={ab_test:!0,ab_variant:"candidate"}):p={ab_test:!0,ab_variant:"control"};else{let h=l.configClient.getModel(r,d);h!==d&&(c=d,d=h,o={...o,model:h},m=!0)}}let _=t(o,i),g=_.generateContent.bind(_);_.generateContent=async(y,h)=>{let k=q(),A=performance.now(),f=F(),j=u(),w=f?.traceId??u(),T=null,v=null,D=Ye(y),R=de(D,d),{conversation_turn:C,message_role:N}=ce(D),x=f?.agentName??R.agent_name,M=f?.agentRole??R.agent_role,P=f?.agentId||x||M?{agent_id:f?.agentId,agent_name:x,agent_role:M,agent_framework:f?.agentFramework,parent_agent_id:f?.parentAgentId}:{},E=y?.tools?.length?le(y.tools):void 0,O=null,L=k.enableOTel?Xe.getTracer("zespan-sdk"):null;L&&(O=L.startSpan(`generateContent ${d}`,{kind:Qe.CLIENT,attributes:et(y,d)})),m&&k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:c,override_model:d},environment:k.environment,sdk_version:b});try{T=await Z(k,s,{text:JSON.stringify(y??""),phase:"pre",traceId:w,spanId:j,model:d,operation:r,agentName:f?.agentName});let K;if(k.configClient){let Q=k.configClient.getTimeout(r);Q&&(K=AbortSignal.timeout(Q.timeoutMs))}let z=k.configClient?.getRetryPolicy(r)??null,B=k.configClient?.getConcurrencyLimit(r)??null,G=()=>fe(()=>W({traceId:w,spanId:j,userId:f?.userId,sessionId:f?.sessionId,tags:f?.tags,agentId:f?.agentId,agentName:x,agentRole:M,agentFramework:f?.agentFramework,parentAgentId:f?.parentAgentId,conversationTurn:C,availableTools:E},()=>g(y,K?{...h,signal:K}:h)),z),U=await(B!==null?he(`${k.projectId??"default"}:${r}`,B).run(G):G()),$=U.response,J=$.usageMetadata?.promptTokenCount??0,Y=$.usageMetadata?.candidatesTokenCount??0,ee=$.usageMetadata?.cachedContentTokenCount??0,oe=$.usageMetadata?.thoughtsTokenCount??0,X=vt($),ue=($.candidates?.[0]?.content?.parts??[]).filter(Q=>Q?.functionCall),re=ue.map(Q=>Q.functionCall.name).filter(Boolean),V=($.candidates?.[0]?.content?.parts??[]).filter(Q=>Q?.text&&!Q?.functionCall).map(Q=>Q.text).join(""),pe={};for(let Q of ue)Q.functionCall?.name&&(pe[Q.functionCall.name]=Q.functionCall.args??{});v=await Z(k,s,{text:X,phase:"post",traceId:w,spanId:j,model:d,operation:r,agentName:f?.agentName});let ye=ae(X,v);return k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-A,stream:!1,input_tokens:J,output_tokens:Y,cached_tokens:ee,reasoning_tokens:oe,status:"success",finish_reason:$.candidates?.[0]?.finishReason??"",tools_used:re,tool_call_args:Object.keys(pe).length?pe:void 0,prompt_hash:je(JSON.stringify(y)),...k.storePrompts?{prompt_text:k.redactForStorage(y),completion_text:k.redactForStorage(ye)}:{},...re.length>0&&V?{decision_rationale:V}:{},...P,span_kind:"llm",tool_definitions:E,conversation_turn:C,message_role:N,metadata:{usage:$.usageMetadata??null,guardrails:{pre:T?{matched:T.results.length,modified:!!T.modifiedText}:null,post:v?{matched:v.results.length,modified:!!v.modifiedText}:null},auto_detected:Object.keys(R).length?R:void 0,...p??{}},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),O&&(O.setAttribute("gen_ai.completion",ye),O.setAttribute("gen_ai.usage.input_tokens",J),O.setAttribute("gen_ai.usage.output_tokens",Y),O.setAttribute("gen_ai.usage.total_tokens",J+Y),O.setAttribute("gen_ai.usage.cached_tokens",ee),O.setAttribute("gen_ai.usage.reasoning_tokens",oe),O.setAttribute("gen_ai.response.finish_reason",$.candidates?.[0]?.finishReason??""),O.setAttribute("gen_ai.response.latency",performance.now()-A),O.setStatus({code:me.OK}),O.end()),U}catch(K){let z=K.__signal;if(K?.name==="TimeoutError"||K?.code==="ABORT_ERR")throw k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-A,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(K.message).slice(0,500),...P,span_kind:"llm",conversation_turn:C,message_role:N,metadata:{auto_detected:Object.keys(R).length?R:void 0},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),O&&(O.setStatus({code:me.ERROR,message:K.message}),O.recordException(K),O.end()),K;let G=k.configClient?.getFallback(r)??null;if(G&&G.model){let J=String(K.message??"")+String(K.status??"")+String(K.code??"");if(G.conditions.length===0||G.conditions.some(ee=>J.toLowerCase().includes(ee.toLowerCase()))){let ee=d,oe={...o,model:G.model},X=t(oe,i),ue=X.generateContent.bind(X);k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:G.model,operation:r,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:ee,fallback_model:G.model,reason:String(K.message).slice(0,200)},environment:k.environment,sdk_version:b});try{let re=await W({traceId:w,spanId:j,userId:f?.userId,sessionId:f?.sessionId,tags:f?.tags},()=>ue(y,h)),V=re.response,pe=V.usageMetadata?.promptTokenCount??0,ye=V.usageMetadata?.candidatesTokenCount??0,Q=V.usageMetadata?.cachedContentTokenCount??0;return k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:G.model,operation:r,latency_ms:performance.now()-A,stream:!1,input_tokens:pe,output_tokens:ye,cached_tokens:Q,status:"success",finish_reason:V.candidates?.[0]?.finishReason??"",prompt_hash:je(JSON.stringify(y)),...P,span_kind:"llm",conversation_turn:C,message_role:N,metadata:{usage:V.usageMetadata??null,fallback_used:!0,original_model:ee,auto_detected:Object.keys(R).length?R:void 0},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),O&&(O.setStatus({code:me.OK}),O.end()),re}catch(re){throw O&&(O.setStatus({code:me.ERROR,message:re.message}),O.recordException(re),O.end()),re}}}let U=K instanceof H,$=U?"error":K.status===429?"rate_limited":K.status===408?"timeout":"error";throw k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-A,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:$,error_code:U?"guardrail_blocked":String(K.status??"unknown"),error_message:String(K.message).slice(0,500),...P,span_kind:"llm",conversation_turn:C,message_role:N,metadata:{auto_detected:Object.keys(R).length?R:void 0},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),O&&(O.setStatus({code:me.ERROR,message:K.message}),O.recordException(K),O.end()),K}};let S=_.generateContentStream.bind(_);_.generateContentStream=async(y,h)=>{let k=q(),A=performance.now(),f=F(),j=u(),w=f?.traceId??u(),T=Ye(y),v=de(T,d),{conversation_turn:D,message_role:R}=ce(T),C=f?.agentName??v.agent_name,N=f?.agentRole??v.agent_role,x=f?.agentId||C||N?{agent_id:f?.agentId,agent_name:C,agent_role:N,agent_framework:f?.agentFramework,parent_agent_id:f?.parentAgentId}:{},M=y?.tools?.length?le(y.tools):void 0,P=null,E=k.enableOTel?Xe.getTracer("zespan-sdk"):null;E&&(P=E.startSpan(`generateContentStream ${d}`,{kind:Qe.CLIENT,attributes:et(y,d)}));try{let O=await W({traceId:w,spanId:j,userId:f?.userId,sessionId:f?.sessionId,tags:f?.tags,agentId:f?.agentId,agentName:C,agentRole:N,agentFramework:f?.agentFramework,parentAgentId:f?.parentAgentId,conversationTurn:D,availableTools:M},()=>S(y,h));return P&&P.setAttribute("gen_ai.request.stream",!0),O.stream=Ht(O.stream,{client:k,t0:A,traceId:w,spanId:j,parent:f,params:y,modelName:d,otelSpan:P,streamResult:O,agentCtx:x,tool_definitions:M,autoDetected:v,conversation_turn:D,message_role:R,operation:r}),O}catch(O){let L=O instanceof H,K=L?"error":O.status===429?"rate_limited":O.status===408?"timeout":"error";throw k.enqueue({event_id:u(),project_id:"",trace_id:w,span_id:j,parent_span_id:f?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-A,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:K,error_code:L?"guardrail_blocked":String(O.status??"unknown"),error_message:String(O.message).slice(0,500),...x,span_kind:"llm",conversation_turn:D,message_role:R,metadata:{auto_detected:Object.keys(v).length?v:void 0},user_id:f?.userId,session_id:f?.sessionId,tags:f?.tags,environment:k.environment,sdk_version:b}),P&&(P.setStatus({code:me.ERROR,message:O.message}),P.recordException(O),P.end()),O}};let I=_.startChat?.bind(_);return I&&(_.startChat=y=>{let h=I(y),k=h.sendMessage?.bind(h),A=h.sendMessageStream?.bind(h);return k&&(h.sendMessage=async(f,j)=>{let w=q(),T=performance.now(),v=F(),D=u(),R=v?.traceId??u(),C={...y||{},message:f},N=null,x=null,M=Ye(C),P=de(M,d),{conversation_turn:E,message_role:O}=ce(M),L=v?.agentName??P.agent_name,K=v?.agentRole??P.agent_role,z=v?.agentId||L||K?{agent_id:v?.agentId,agent_name:L,agent_role:K,agent_framework:v?.agentFramework,parent_agent_id:v?.parentAgentId}:{},B=y?.tools?.length?le(y.tools):void 0,G=null,U=w.enableOTel?Xe.getTracer("zespan-sdk"):null;U&&(G=U.startSpan(`sendMessage ${d}`,{kind:Qe.CLIENT,attributes:et(C,d)}));try{N=await Z(w,s,{text:JSON.stringify(C),phase:"pre",traceId:R,spanId:D,model:d,operation:r,agentName:v?.agentName});let $=await W({traceId:R,spanId:D,userId:v?.userId,sessionId:v?.sessionId,tags:v?.tags,agentId:v?.agentId,agentName:L,agentRole:K,agentFramework:v?.agentFramework,parentAgentId:v?.parentAgentId,conversationTurn:E,availableTools:B},()=>k(f,j)),J=$.response,Y=J.usageMetadata?.promptTokenCount??0,ee=J.usageMetadata?.candidatesTokenCount??0,oe=J.usageMetadata?.cachedContentTokenCount??0,X=J.usageMetadata?.thoughtsTokenCount??0,ue=vt(J),re=(J.candidates?.[0]?.content?.parts??[]).filter(Q=>Q?.functionCall),V=re.map(Q=>Q.functionCall.name).filter(Boolean),pe={};for(let Q of re)Q.functionCall?.name&&(pe[Q.functionCall.name]=Q.functionCall.args??{});x=await Z(w,s,{text:ue,phase:"post",traceId:R,spanId:D,model:d,operation:r,agentName:v?.agentName});let ye=ae(ue,x);return w.enqueue({event_id:u(),project_id:"",trace_id:R,span_id:D,parent_span_id:v?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-T,stream:!1,input_tokens:Y,output_tokens:ee,cached_tokens:oe,reasoning_tokens:X,status:"success",finish_reason:J.candidates?.[0]?.finishReason??"",tools_used:V,tool_call_args:Object.keys(pe).length?pe:void 0,prompt_hash:je(JSON.stringify(C)),...w.storePrompts?{prompt_text:w.redactForStorage(C),completion_text:w.redactForStorage(ye)}:{},...z,span_kind:"llm",tool_definitions:B,conversation_turn:E,message_role:O,metadata:{usage:J.usageMetadata??null,guardrails:{pre:N?{matched:N.results.length,modified:!!N.modifiedText}:null,post:x?{matched:x.results.length,modified:!!x.modifiedText}:null},auto_detected:Object.keys(P).length?P:void 0},user_id:v?.userId,session_id:v?.sessionId,tags:v?.tags,environment:w.environment,sdk_version:b}),G&&(G.setAttribute("gen_ai.completion",ye),G.setAttribute("gen_ai.usage.input_tokens",Y),G.setAttribute("gen_ai.usage.output_tokens",ee),G.setAttribute("gen_ai.usage.total_tokens",Y+ee),G.setAttribute("gen_ai.usage.cached_tokens",oe),G.setAttribute("gen_ai.usage.reasoning_tokens",X),G.setAttribute("gen_ai.response.finish_reason",J.candidates?.[0]?.finishReason??""),G.setAttribute("gen_ai.response.latency",performance.now()-T),G.setStatus({code:me.OK}),G.end()),$}catch($){let J=$ instanceof H,Y=J?"error":$.status===429?"rate_limited":$.status===408?"timeout":"error";throw w.enqueue({event_id:u(),project_id:"",trace_id:R,span_id:D,parent_span_id:v?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-T,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:Y,error_code:J?"guardrail_blocked":String($.status??"unknown"),error_message:String($.message).slice(0,500),...z,span_kind:"llm",conversation_turn:E,message_role:O,metadata:{auto_detected:Object.keys(P).length?P:void 0},user_id:v?.userId,session_id:v?.sessionId,tags:v?.tags,environment:w.environment,sdk_version:b}),G&&(G.setStatus({code:me.ERROR,message:$.message}),G.recordException($),G.end()),$}}),A&&(h.sendMessageStream=async(f,j)=>{let w=q(),T=performance.now(),v=F(),D=u(),R=v?.traceId??u(),C={...y||{},message:f},N=Ye(C),x=de(N,d),{conversation_turn:M,message_role:P}=ce(N),E=v?.agentName??x.agent_name,O=v?.agentRole??x.agent_role,L=v?.agentId||E||O?{agent_id:v?.agentId,agent_name:E,agent_role:O,agent_framework:v?.agentFramework,parent_agent_id:v?.parentAgentId}:{},K=y?.tools?.length?le(y.tools):void 0,z=null,B=w.enableOTel?Xe.getTracer("zespan-sdk"):null;B&&(z=B.startSpan(`sendMessageStream ${d}`,{kind:Qe.CLIENT,attributes:et(C,d)}));try{let G=await W({traceId:R,spanId:D,userId:v?.userId,sessionId:v?.sessionId,tags:v?.tags,agentId:v?.agentId,agentName:E,agentRole:O,agentFramework:v?.agentFramework,parentAgentId:v?.parentAgentId,conversationTurn:M,availableTools:K},()=>A(f,j));return z&&z.setAttribute("gen_ai.request.stream",!0),G.stream=Ht(G.stream,{client:w,t0:T,traceId:R,spanId:D,parent:v,params:C,modelName:d,otelSpan:z,streamResult:G,agentCtx:L,tool_definitions:K,autoDetected:x,conversation_turn:M,message_role:P,operation:r}),G}catch(G){let U=G instanceof H,$=U?"error":G.status===429?"rate_limited":G.status===408?"timeout":"error";throw w.enqueue({event_id:u(),project_id:"",trace_id:R,span_id:D,parent_span_id:v?.spanId,timestamp:new Date().toISOString(),provider:"google",model:d,operation:r,latency_ms:performance.now()-T,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:$,error_code:U?"guardrail_blocked":String(G.status??"unknown"),error_message:String(G.message).slice(0,500),...L,span_kind:"llm",conversation_turn:M,message_role:P,metadata:{auto_detected:Object.keys(x).length?x:void 0},user_id:v?.userId,session_id:v?.sessionId,tags:v?.tags,environment:w.environment,sdk_version:b}),z&&(z.setStatus({code:me.ERROR,message:G.message}),z.recordException(G),z.end()),G}}),h}),_},a}import{createHash as ts}from"crypto";import{SpanKind as ns,SpanStatusCode as St,trace as ss}from"@opentelemetry/api";var Xt=a=>ts("sha256").update(a).digest("hex");function Yt(a){let e=[];if(a?.systemInstruction){let t=typeof a.systemInstruction=="string"?a.systemInstruction:a.systemInstruction?.parts?.map(s=>s?.text||"").join("")||"";t&&e.push({role:"system",content:t})}let n=a?.contents;if(typeof n=="string")e.push({role:"user",content:n});else if(Array.isArray(n))for(let t of n){if(typeof t=="string"){e.push({role:"user",content:t});continue}let s=t?.role||"user",r=Array.isArray(t?.parts)?t.parts.map(o=>o?.text||"").filter(Boolean).join(""):t?.text||"";r&&e.push({role:s,content:r})}return e}function os(a){try{if(typeof a?.text=="function")return a.text()||"";if(typeof a?.text=="string")return a.text}catch{}return(a?.candidates?.[0]?.content?.parts??[]).filter(e=>typeof e?.text=="string").map(e=>e.text).join("")}function rs(a){return(a?.candidates?.[0]?.content?.parts??[]).filter(e=>e?.inlineData).length}function en(a){return{input:Number(a?.promptTokenCount||0),output:Number(a?.candidatesTokenCount||0),cached:Number(a?.cachedContentTokenCount||0),reasoning:Number(a?.thoughtsTokenCount||0)}}function tn(a,e={}){let t=a.models;if(!t||t.__zespanPatched)return a;let s=te(e.guardrails,"chat"),r=e.operation??"chat",o=t.generateContent.bind(t),i=t.generateContentStream?.bind(t),d=t.embedContent?.bind(t),l=t.generateImages?.bind(t),m=t.generateVideos?.bind(t);return t.generateContent=async c=>{let p=q(),_=performance.now(),g=F(),S=u(),I=g?.traceId??u(),y=c?.model??"gemini",h=!1,k=y,A;if(p.configClient){let E=p.configClient.getAbTest(r);if(E)Math.random()<E.splitPercentage/100?(k=y,y=E.candidateModel,c={...c,model:y},h=!0,A={ab_test:!0,ab_variant:"candidate"}):A={ab_test:!0,ab_variant:"control"};else{let O=p.configClient.getModel(r,y);O!==y&&(k=y,y=O,c={...c,model:O},h=!0)}}let f=Yt(c),j=de(f,y),{conversation_turn:w,message_role:T}=ce(f),v=g?.agentName??j.agent_name,D=g?.agentRole??j.agent_role,R=g?.agentId||v||D?{agent_id:g?.agentId,agent_name:v,agent_role:D,agent_framework:g?.agentFramework,parent_agent_id:g?.parentAgentId}:{},C=c?.tools?.length?le(c.tools):void 0,N=null,x=p.enableOTel?ss.getTracer("zespan-sdk"):null;x&&(N=x.startSpan(`generateContent ${y}`,{kind:ns.CLIENT,attributes:{"gen_ai.system":"google","gen_ai.model":y,"gen_ai.operation.name":"chat"}})),h&&p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:k,override_model:y},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:p.environment,sdk_version:b});let M=null,P=null;try{M=await Z(p,s,{text:JSON.stringify(c??""),phase:"pre",traceId:I,spanId:S,model:y,operation:r,agentName:g?.agentName});let E;if(p.configClient){let X=p.configClient.getTimeout(r);X&&(E=AbortSignal.timeout(X.timeoutMs))}let O=p.configClient?.getRetryPolicy(r)??null,L=p.configClient?.getConcurrencyLimit(r)??null,K=()=>fe(()=>W({traceId:I,spanId:S,userId:g?.userId,sessionId:g?.sessionId,tags:g?.tags,agentId:g?.agentId,agentName:v,agentRole:D,agentFramework:g?.agentFramework,parentAgentId:g?.parentAgentId,conversationTurn:w,availableTools:C},()=>o(E?{...c,fetchOptions:{signal:E}}:c)),O),z=await(L!==null?he(`${p.projectId??"default"}:${r}`,L).run(K):K()),B=en(z?.usageMetadata),G=os(z),U=rs(z),$=U>0,J=(z?.candidates?.[0]?.content?.parts??[]).filter(X=>X?.functionCall),Y=J.map(X=>X.functionCall.name).filter(Boolean),ee={};for(let X of J)X.functionCall?.name&&(ee[X.functionCall.name]=X.functionCall.args??{});P=await Z(p,s,{text:G,phase:"post",traceId:I,spanId:S,model:y,operation:r,agentName:g?.agentName});let oe=ae(G,P);return p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:r,latency_ms:performance.now()-_,stream:!1,input_tokens:B.input,output_tokens:B.output,cached_tokens:B.cached,reasoning_tokens:B.reasoning,status:"success",finish_reason:z?.candidates?.[0]?.finishReason??"",tools_used:Y,tool_call_args:Object.keys(ee).length?ee:void 0,prompt_hash:Xt(JSON.stringify(c)),...p.storePrompts?{prompt_text:p.redactForStorage(c),completion_text:p.redactForStorage(oe)}:{},...Y.length>0&&G?{decision_rationale:G}:{},...R,span_kind:$?"image_gen":"llm",tool_definitions:C,conversation_turn:w,message_role:T,metadata:{usage:z?.usageMetadata??null,...$?{num_images:U}:{},guardrails:{pre:M?{matched:M.results.length,modified:!!M.modifiedText}:null,post:P?{matched:P.results.length,modified:!!P.modifiedText}:null},auto_detected:Object.keys(j).length?j:void 0,...A??{}},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:p.environment,sdk_version:b}),N&&(N.setAttribute("gen_ai.completion",oe),N.setAttribute("gen_ai.usage.input_tokens",B.input),N.setAttribute("gen_ai.usage.output_tokens",B.output),N.setAttribute("gen_ai.usage.total_tokens",B.input+B.output),N.setStatus({code:St.OK}),N.end()),z}catch(E){throw E instanceof H?(N&&(N.setStatus({code:St.ERROR,message:"Guardrail blocked"}),N.end()),E):(p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:r,latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(E.status??E.code??"unknown"),error_message:String(E.message).slice(0,500),...R,span_kind:"llm",user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:p.environment,sdk_version:b}),N&&(N.setStatus({code:St.ERROR,message:E.message}),N.recordException(E),N.end()),E)}},i&&(t.generateContentStream=async c=>{let p=q(),_=performance.now(),g=F(),S=u(),I=g?.traceId??u(),y=c?.model??"gemini";if(p.configClient){let R=p.configClient.getModel(r,y);R!==y&&(y=R,c={...c,model:R})}let h=Yt(c),k=de(h,y),{conversation_turn:A,message_role:f}=ce(h),j=g?.agentName??k.agent_name,w=g?.agentRole??k.agent_role,T=g?.agentId||j||w?{agent_id:g?.agentId,agent_name:j,agent_role:w,agent_framework:g?.agentFramework,parent_agent_id:g?.parentAgentId}:{},v=c?.tools?.length?le(c.tools):void 0,D=await i(c);return(async function*(){let R=0,C=0,N=0,x=0,M,P="",E="",O=[];try{for await(let L of D){M||(M=performance.now()-_);let K=L?.usageMetadata;K&&(R=Number(K.promptTokenCount||R),C=Number(K.candidatesTokenCount||C),N=Number(K.cachedContentTokenCount||N),x=Number(K.thoughtsTokenCount||x));let z=typeof L?.text=="function"?L.text():L?.text||"";z&&(E+=z),L?.candidates?.[0]?.finishReason&&(P=L.candidates[0].finishReason);let B=(L?.candidates?.[0]?.content?.parts??[]).map(G=>G?.functionCall).filter(Boolean);for(let G of B)G?.name&&!O.includes(G.name)&&O.push(G.name);yield L}p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:r,latency_ms:performance.now()-_,ttft_ms:M,stream:!0,input_tokens:R,output_tokens:C,cached_tokens:N,reasoning_tokens:x,status:"success",finish_reason:P||"stream_end",tools_used:O,prompt_hash:Xt(JSON.stringify(c)),...p.storePrompts?{prompt_text:p.redactForStorage(c),completion_text:p.redactForStorage(E)}:{},...T,span_kind:"llm",tool_definitions:v,conversation_turn:A,message_role:f,user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:p.environment,sdk_version:b})}catch(L){throw p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:r,latency_ms:performance.now()-_,ttft_ms:M,stream:!0,input_tokens:R,output_tokens:C,status:"error",error_code:String(L.status??L.code??"unknown"),error_message:String(L.message).slice(0,500),...T,span_kind:"llm",user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:p.environment,sdk_version:b}),L}})()}),d&&(t.embedContent=async c=>{let p=q(),_=performance.now(),g=F(),S=u(),I=g?.traceId??u(),y=c?.model??"gemini-embedding";try{let h=await d(c),k=en(h?.usageMetadata);return p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"embedding",latency_ms:performance.now()-_,stream:!1,input_tokens:k.input,output_tokens:0,status:"success",span_kind:"embedding",user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:p.environment,sdk_version:b}),h}catch(h){throw p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"embedding",latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(h.status??h.code??"unknown"),error_message:String(h.message).slice(0,500),span_kind:"embedding",environment:p.environment,sdk_version:b}),h}}),l&&(t.generateImages=async c=>{let p=q(),_=performance.now(),g=F(),S=u(),I=g?.traceId??u(),y=c?.model??"imagen";try{let h=await l(c),k=h?.generatedImages?.length??0,A=c?.config??{};return p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"image_gen",latency_ms:performance.now()-_,stream:!1,input_tokens:k,output_tokens:0,status:"success",span_kind:"image_gen",metadata:{prompt:typeof c?.prompt=="string"?c.prompt.slice(0,500):void 0,num_images:k,image_config:{aspect_ratio:A.aspectRatio,number_of_images:A.numberOfImages,output_mime_type:A.outputMimeType,image_size:A.imageSize,person_generation:A.personGeneration}},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:p.environment,sdk_version:b}),h}catch(h){throw p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"image_gen",latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(h.status??h.code??"unknown"),error_message:String(h.message).slice(0,500),span_kind:"image_gen",environment:p.environment,sdk_version:b}),h}}),m&&(t.generateVideos=async c=>{let p=q(),_=performance.now(),g=F(),S=u(),I=g?.traceId??u(),y=c?.model??"veo";try{let h=await m(c),k=c?.config??{};return p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"video_gen",latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"success",span_kind:"video_gen",metadata:{prompt:typeof c?.prompt=="string"?c.prompt.slice(0,500):void 0,num_videos:k.numberOfVideos??1,video_duration_seconds:k.durationSeconds,video_config:{aspect_ratio:k.aspectRatio,resolution:k.resolution,fps:k.fps,person_generation:k.personGeneration}},user_id:g?.userId,session_id:g?.sessionId,tags:g?.tags,environment:p.environment,sdk_version:b}),h}catch(h){throw p.enqueue({event_id:u(),project_id:"",trace_id:I,span_id:S,parent_span_id:g?.spanId,timestamp:new Date().toISOString(),provider:"google",model:y,operation:"video_gen",latency_ms:performance.now()-_,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:String(h.status??h.code??"unknown"),error_message:String(h.message).slice(0,500),span_kind:"video_gen",environment:p.environment,sdk_version:b}),h}}),t.__zespanPatched=!0,a}import{createHash as as}from"crypto";import{SpanKind as is,SpanStatusCode as tt,trace as ds}from"@opentelemetry/api";var wt=a=>as("sha256").update(a).digest("hex");function cs(a,e,n,t){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 ls(a,e){return{"gen_ai.system":"openrouter","gen_ai.model":e,"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*us(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:i,otelSpan:d,agentCtx:l,autoDetected:m,conversation_turn:c,message_role:p,tool_definitions:_}=e,g,S=0,I=0,y=0,h=0,k="",A=i.model,f=[],j="",w=[],{systemPrompt:T,conversationMessages:v}=se(i.messages??[]);try{for await(let x of a){if(g||(g=performance.now()-t,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:A,operation:"chat",latency_ms:g,ttft_ms:g,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:wt(JSON.stringify(i.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(v),...T?{system_prompt:n.redactForStorage(T)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,finish_reason:"stream_start",...l,span_kind:"llm",tool_definitions:_,conversation_turn:c,message_role:p,metadata:{auto_detected:Object.keys(m).length?m:void 0}}),d&&d.setAttribute("gen_ai.response.time_to_first_token",g)),x.choices?.[0]?.delta?.content&&(S++,j+=x.choices[0].delta.content),x.choices?.[0]?.finish_reason&&(k=x.choices[0].finish_reason),x.model&&(A=x.model),x.usage){I=Number(x.usage.prompt_tokens||I||0),S=Number(x.usage.completion_tokens||S||0),y=Number(x.usage.prompt_tokens_details?.cached_tokens||y||0);let M=x.usage.completion_tokens_details||{};h=Number(M.reasoning_tokens||h||0)}if(x.choices?.[0]?.delta?.tool_calls)for(let M of x.choices[0].delta.tool_calls)w.push(M),M.function?.name&&!f.includes(M.function.name)&&f.push(M.function.name);yield x}let{tools_used:D,tool_call_args:R}=_e(w),C=D.length>0?D:f,N=performance.now()-t;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:A,operation:"chat",latency_ms:N,ttft_ms:g,stream:!0,input_tokens:I,output_tokens:S,cached_tokens:y,reasoning_tokens:h,status:"success",finish_reason:k||"stream_end",tools_used:C,tool_call_args:Object.keys(R).length?R:void 0,prompt_hash:wt(JSON.stringify(i.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(v),completion_text:n.redactForStorage(j),...T?{system_prompt:n.redactForStorage(T)}:{}}:{},...l,span_kind:"llm",tool_definitions:_,conversation_turn:c,message_role:p,metadata:{usage:{prompt_tokens:I,completion_tokens:S,cached_tokens:y,reasoning_tokens:h},auto_detected:Object.keys(m).length?m:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),d&&(d.setAttribute("gen_ai.completion",j),d.setAttribute("gen_ai.usage.input_tokens",I),d.setAttribute("gen_ai.usage.output_tokens",S),d.setAttribute("gen_ai.usage.total_tokens",I+S),d.setAttribute("gen_ai.usage.reasoning_tokens",h),d.setAttribute("gen_ai.response.finish_reason",k||"stream_end"),d.setStatus({code:tt.OK}),d.end())}catch(D){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:A,operation:"chat",latency_ms:performance.now()-t,ttft_ms:g,stream:!0,input_tokens:0,output_tokens:S,cost_usd:0,status:"error",error_code:String(D.status??"unknown"),error_message:String(D.message).slice(0,500),...l,span_kind:"llm",conversation_turn:c,message_role:p,metadata:{auto_detected:Object.keys(m).length?m:void 0},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),d&&(d.setStatus({code:tt.ERROR,message:D.message}),d.recordException(D),d.end()),D}}function nn(a,e={}){let n=a.chat.completions.create,t=te(e.guardrails,"chat");return a.chat.completions.create=async(s,r)=>{let o=q(),i=performance.now(),d=F(),l=u(),m=d?.traceId??u(),c=s.model??"openrouter\u6A21\u578B",p=null,_=null;if(o.configClient){let f=o.configClient.getModel("chat",c);if(f!==c){let j=c;c=f,s={...s,model:f},o.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:l,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:f,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:j,override_model:f},environment:o.environment,sdk_version:b})}}let g=d?.agentId?{agent_id:d.agentId,agent_name:d.agentName,agent_role:d.agentRole,agent_framework:d.agentFramework,parent_agent_id:d.parentAgentId}:{},S=de(s.messages??[],s.model),{conversation_turn:I,message_role:y}=ce(s.messages??[]),h=s.tools?.length?le(s.tools):void 0,k=null,A=o.enableOTel?ds.getTracer("zespan-sdk"):null;A&&(k=A.startSpan(`chat.completions ${c}`,{kind:is.CLIENT,attributes:ls(s,c)}));try{p=await Z(o,t,{text:JSON.stringify(s.messages??[]),phase:"pre",traceId:m,spanId:l,model:c,operation:"chat"});let f=await W({traceId:m,spanId:l,userId:d?.userId,sessionId:d?.sessionId,tags:d?.tags},()=>n.call(a.chat.completions,s,r));if(s.stream===!0)return k&&k.setAttribute("gen_ai.request.stream",!0),us(f,{client:o,t0:i,traceId:m,spanId:l,parent:d,params:s,otelSpan:k,agentCtx:g,autoDetected:S,conversation_turn:I,message_role:y,tool_definitions:h});let{prompt_tokens:w,completion_tokens:T,completion_tokens_details:v}=f.usage??{},D=v?.reasoning_tokens??0,R=f.model??s.model,{cost:C,source:N}=cs(f,R,w??0,T??0);f.pricing||(f.pricing={cost_usd:C,source:N});let x=f.choices?.[0]?.message?.content||"";_=await Z(o,t,{text:x,phase:"post",traceId:m,spanId:l,model:R,operation:"chat"});let M=ae(x,_);M!==x&&typeof f?.choices?.[0]?.message?.content=="string"&&(f.choices[0].message.content=M);let{tools_used:P,tool_call_args:E}=Je(f.choices??[]);return o.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:l,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:R,operation:"chat",latency_ms:performance.now()-i,stream:!1,input_tokens:w??0,output_tokens:T??0,cached_tokens:0,cost_usd:C,status:"success",finish_reason:f.choices?.[0]?.finish_reason??"",tools_used:P.length>0?P:f.choices?.[0]?.message?.tool_calls?.map(O=>O.function.name)??[],tool_call_args:Object.keys(E).length?E:void 0,prompt_hash:wt(JSON.stringify(s.messages)),...o.storePrompts?(()=>{let{systemPrompt:O,conversationMessages:L}=se(s.messages??[]);return{prompt_text:o.redactForStorage(L),completion_text:o.redactForStorage(M),...O?{system_prompt:o.redactForStorage(O)}:{}}})():{},...P.length>0&&x?{decision_rationale:x}:{},...g,span_kind:"llm",tool_definitions:h,conversation_turn:I,message_role:y,metadata:{usage:f.usage??null,pricing:f.pricing??{cost_usd:C,source:N},guardrails:{pre:p?{matched:p.results.length,modified:!!p.modifiedText}:null,post:_?{matched:_.results.length,modified:!!_.modifiedText}:null},auto_detected:Object.keys(S).length?S:void 0},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:o.environment,sdk_version:b}),k&&(k.setAttribute("gen_ai.usage.input_tokens",w??0),k.setAttribute("gen_ai.usage.output_tokens",T??0),k.setAttribute("gen_ai.usage.total_tokens",(w??0)+(T??0)),k.setAttribute("gen_ai.usage.reasoning_tokens",D),k.setAttribute("gen_ai.completion",f.choices?.[0]?.message?.content||""),k.setAttribute("gen_ai.response.finish_reason",f.choices?.[0]?.finish_reason??""),k.setAttribute("gen_ai.response.latency",performance.now()-i),k.setStatus({code:tt.OK}),k.end()),f}catch(f){let j=f instanceof H,w=j?"error":f.status===429?"rate_limited":f.status===408?"timeout":"error";throw o.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:l,parent_span_id:d?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:s.model,operation:"chat",latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:w,error_code:j?"guardrail_blocked":String(f.status??f.code??"unknown"),error_message:String(f.message).slice(0,500),...g,span_kind:"llm",conversation_turn:I,message_role:y,metadata:{auto_detected:Object.keys(S).length?S:void 0},user_id:d?.userId,session_id:d?.sessionId,tags:d?.tags,environment:o.environment,sdk_version:b}),k&&(k.setStatus({code:tt.ERROR,message:f.message}),k.recordException(f),k.end()),f}},a}async function*sn(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,model:i,operation:d,input:l}=e,m=0,c=0,p=0,_="",g,S=[],I=new Set,y={},h="",k=[],A=l?.messages??[],f=(l?.system??[]).map(v=>v.text??"").filter(Boolean),j=f.length?f.join(`
7
+ `):void 0,[w,T]=await Promise.all([n.storePrompts?n.redactValueAsync(A):Promise.resolve(void 0),n.storePrompts&&j?n.redactValueAsync(j):Promise.resolve(void 0)]);try{for await(let x of a){if(g||(g=performance.now()-t,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:i,operation:d,latency_ms:g,ttft_ms:g,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(A),...j?{system_prompt:n.redactForStorage(j)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b})),"contentBlockStart"in x){let M=x.contentBlockStart?.start?.toolUse;M?.name&&(h=M.name,k.length=0,I.add(h))}else if("contentBlockDelta"in x){let M=x.contentBlockDelta?.delta;M?.text&&S.push(M.text),M?.toolUse?.input&&k.push(M.toolUse.input)}else if("contentBlockStop"in x){if(h){let M=k.join("");try{y[h]=JSON.parse(M)}catch{y[h]=M}h=""}}else"metadata"in x&&x.metadata?.usage?(m=x.metadata.usage.inputTokens??m,c=x.metadata.usage.outputTokens??c,p=x.metadata.usage.cacheReadInputTokens??p):"messageStop"in x&&x.messageStop?.stopReason&&(_=x.messageStop.stopReason);yield x}let v=[...I],D=S.join(""),[R,C,N]=await Promise.all([n.storePrompts?n.redactValueAsync(D):Promise.resolve(void 0),n.redactObjectAsync(y),v.length>0&&D?n.redactTextAsync(D):Promise.resolve(void 0)]);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:i,operation:d,latency_ms:performance.now()-t,ttft_ms:g,stream:!0,input_tokens:m,output_tokens:c,cached_tokens:p,cost_usd:0,status:"success",finish_reason:_||"stream_end",span_kind:"llm",tools_used:v.length?v:void 0,tool_call_args:C,...N!==void 0?{decision_rationale:N}:{},...w!==void 0?{prompt_text:w,completion_text:R,...T!==void 0?{system_prompt:T}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b})}catch(v){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:i,operation:d,latency_ms:performance.now()-t,ttft_ms:g,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:String(v.$metadata?.httpStatusCode??v.name??"unknown"),error_message:String(v.message).slice(0,500),user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),v}}function ps(a,e={}){let n=a,t=e.operation??"chat",s=te(e.guardrails,t),r=n.converse?.bind(n);r&&(n.converse=async(d,...l)=>{let m=q(),c=performance.now(),p=F(),_=u(),g=p?.traceId??u(),S=d.modelId??"amazon.nova-lite-v1:0";m.configClient&&(S=m.configClient.getModel(t,S),S!==d.modelId&&(d={...d,modelId:S}));let I=JSON.stringify(d.messages??[]);await Z(m,s,{text:I,phase:"pre",traceId:g,spanId:_,model:S,operation:t,agentName:p?.agentName});try{let y=await W({traceId:g,spanId:_,userId:p?.userId,sessionId:p?.sessionId,tags:p?.tags},()=>r(d,...l)),h=y.usage??{},k=y.output?.message?.content??[],A=k.filter(M=>M.text).map(M=>M.text).join(""),f=k.filter(M=>M.toolUse),j=f.map(M=>M.toolUse?.name).filter(Boolean),w={};for(let M of f)M.toolUse?.name&&(w[M.toolUse.name]=M.toolUse.input??{});let T=(d.system??[]).map(M=>M.text??"").filter(Boolean),v=T.length?T.join(`
8
+ `):void 0,[D,R,C,N,x]=await Promise.all([m.storePrompts?m.redactValueAsync(d.messages??[]):Promise.resolve(void 0),m.storePrompts?m.redactValueAsync(A):Promise.resolve(void 0),m.storePrompts&&v?m.redactValueAsync(v):Promise.resolve(void 0),m.redactObjectAsync(w),j.length>0&&A?m.redactTextAsync(A):Promise.resolve(void 0)]);return m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:S,operation:t,latency_ms:performance.now()-c,stream:!1,input_tokens:Number(h.inputTokens??0),output_tokens:Number(h.outputTokens??0),cached_tokens:Number(h.cacheReadInputTokens??0),status:"success",finish_reason:y.stopReason??"",span_kind:"llm",tools_used:j.length?j:void 0,tool_call_args:N,...D!==void 0?{prompt_text:D,completion_text:R,...C!==void 0?{system_prompt:C}:{}}:{},...x!==void 0?{decision_rationale:x}:{},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:m.environment,sdk_version:b}),y}catch(y){throw m.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:_,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:S,operation:t,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:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:m.environment,sdk_version:b}),y}});let o=n.converseStream?.bind(n);o&&(n.converseStream=async(d,...l)=>{let m=q(),c=performance.now(),p=F(),_=u(),g=p?.traceId??u(),S=d.modelId??"amazon.nova-lite-v1:0",I=await W({traceId:g,spanId:_,userId:p?.userId,sessionId:p?.sessionId,tags:p?.tags},()=>o(d,...l));return{...I,stream:sn(I.stream,{client:m,t0:c,traceId:g,spanId:_,parent:p,model:S,operation:t,input:d})}});let i=n.send?.bind(n);return i&&(n.send=async(d,...l)=>{if(!(d?.constructor?.name==="ConverseStreamCommand"||d?.$name==="ConverseStream"))return i(d,...l);let c=q(),p=performance.now(),_=F(),g=u(),S=_?.traceId??u(),I=d?.input?.modelId??"amazon.nova-lite-v1:0",y=await W({traceId:S,spanId:g,userId:_?.userId,sessionId:_?.sessionId,tags:_?.tags},()=>i(d,...l));return{...y,stream:sn(y.stream,{client:c,t0:p,traceId:S,spanId:g,parent:_,model:I,operation:t,input:d.input})}}),a}function ms(a,e={}){let n=a,t=e.operation??"chat",s=te(e.guardrails,t),r=n.chat.complete.bind(n.chat);n.chat.complete=async(i,...d)=>{let l=q(),m=performance.now(),c=F(),p=u(),_=c?.traceId??u(),g=i.model??"mistral-small-latest";l.configClient&&(g=l.configClient.getModel(t,g),g!==i.model&&(i={...i,model:g}));let S=JSON.stringify(i.messages??[]);await Z(l,s,{text:S,phase:"pre",traceId:_,spanId:p,model:g,operation:t});try{let I=await W({traceId:_,spanId:p,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>r(i,...d)),y=I.model??g,h=I.usage??{},k=Number(h.promptTokens??0),A=Number(h.completionTokens??0),f=I.choices?.[0]?.finishReason??"",j=I.choices?.[0]?.message?.content??"",w=I.choices?.[0]?.message?.tool_calls??[],T=w.map(C=>C.function?.name).filter(Boolean),v={};for(let C of w)if(C.function?.name)try{v[C.function.name]=JSON.parse(C.function.arguments??"{}")}catch{v[C.function.name]={}}await Z(l,s,{text:j,phase:"post",traceId:_,spanId:p,model:y,operation:t});let{systemPrompt:D,conversationMessages:R}=se(i.messages??[]);return l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:y,operation:t,latency_ms:performance.now()-m,stream:!1,input_tokens:k,output_tokens:A,status:"success",finish_reason:f,span_kind:"llm",tools_used:T.length?T:void 0,tool_call_args:Object.keys(v).length?v:void 0,...l.storePrompts?{prompt_text:l.redactForStorage(R),completion_text:l.redactForStorage(j),...D?{system_prompt:l.redactForStorage(D)}:{}}:{},...T.length>0&&j?{decision_rationale:j}:{},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:b}),I}catch(I){throw l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:g,operation:t,latency_ms:performance.now()-m,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(I.message).slice(0,500),user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:b}),I}};let o=n.chat.stream?.bind(n.chat);return o&&(n.chat.stream=async function*(i,...d){let l=q(),m=performance.now(),c=F(),p=u(),_=c?.traceId??u(),g=i.model??"mistral-small-latest";l.configClient&&(g=l.configClient.getModel(t,g),g!==i.model&&(i={...i,model:g}));let S=0,I=0,y="",h,k="",A=[],f=[],{systemPrompt:j,conversationMessages:w}=se(i.messages??[]);try{let T=await W({traceId:_,spanId:p,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>o(i,...d));for await(let C of T){h||(h=performance.now()-m,l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:g,operation:t,latency_ms:h,ttft_ms:h,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(w),...j?{system_prompt:l.redactForStorage(j)}:{}}:{},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:b}));let N=C.data?.choices?.[0]?.delta?.content;if(N&&(I++,k+=N),C.data?.usage&&(S=C.data.usage.promptTokens??S,I=C.data.usage.completionTokens??I),C.data?.choices?.[0]?.finishReason&&(y=C.data.choices[0].finishReason),C.data?.model&&(g=C.data.model),C.data?.choices?.[0]?.delta?.tool_calls)for(let x of C.data.choices[0].delta.tool_calls)f.push(x),x.function?.name&&!A.includes(x.function.name)&&A.push(x.function.name);yield C}let{tools_used:v,tool_call_args:D}=_e(f),R=v.length>0?v:A;l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:g,operation:t,latency_ms:performance.now()-m,ttft_ms:h,stream:!0,input_tokens:S,output_tokens:I,cost_usd:0,status:"success",finish_reason:y||"stream_end",span_kind:"llm",tools_used:R.length?R:void 0,tool_call_args:Object.keys(D).length?D:void 0,...R.length>0&&k?{decision_rationale:k}:{},...l.storePrompts?{prompt_text:l.redactForStorage(w),completion_text:l.redactForStorage(k),...j?{system_prompt:l.redactForStorage(j)}:{}}:{},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:b})}catch(T){throw l.enqueue({event_id:u(),project_id:"",trace_id:_,span_id:p,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:g,operation:t,latency_ms:performance.now()-m,ttft_ms:h,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(T.message).slice(0,500),user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:b}),T}}),a}import{createHash as gs}from"crypto";var on=a=>gs("sha256").update(a).digest("hex");async function*_s(a,e){let{client:n,t0:t,traceId:s,spanId:r,parent:o,params:i,model:d,operation:l}=e,m,c=0,p=0,_=0,g="",S="",I=d,y=[],h=[],{systemPrompt:k,conversationMessages:A}=se(i.messages??[]);try{for await(let T of a){m||(m=performance.now()-t,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:I,operation:l,latency_ms:m,ttft_ms:m,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:on(JSON.stringify(i.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(A),...k?{system_prompt:n.redactForStorage(k)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,finish_reason:"stream_start",span_kind:"llm"}));let v=T.choices?.[0]?.delta?.content;if(v&&(p++,S+=v),T.choices?.[0]?.finish_reason&&(g=T.choices[0].finish_reason),T.model&&(I=T.model),T.usage&&(c=Number(T.usage.prompt_tokens||c||0),p=Number(T.usage.completion_tokens||p||0),_=Number(T.usage.prompt_tokens_details?.cached_tokens||_||0)),T.choices?.[0]?.delta?.tool_calls)for(let D of T.choices[0].delta.tool_calls)h.push(D),D.function?.name&&!y.includes(D.function.name)&&y.push(D.function.name);yield T}let{tools_used:f,tool_call_args:j}=_e(h),w=f.length>0?f:y;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:r,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:I,operation:l,latency_ms:performance.now()-t,ttft_ms:m,stream:!0,input_tokens:c,output_tokens:p,cached_tokens:_,status:"success",finish_reason:g||"stream_end",tools_used:w.length?w:void 0,tool_call_args:Object.keys(j).length?j:void 0,...w.length>0&&S?{decision_rationale:S}:{},prompt_hash:on(JSON.stringify(i.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(A),completion_text:n.redactForStorage(S),...k?{system_prompt:n.redactForStorage(k)}:{}}:{},user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b,span_kind:"llm"})}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:"groq",model:I,operation:l,latency_ms:performance.now()-t,ttft_ms:m,stream:!0,input_tokens:0,output_tokens:p,cost_usd:0,status:"error",error_message:String(f.message).slice(0,500),user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags,environment:n.environment,sdk_version:b}),f}}function fs(a,e={}){let n=a,t=n.chat.completions.create.bind(n.chat.completions),s=e.operation??"chat";return n.chat.completions.create=async(r,...o)=>{let i=q(),d=performance.now(),l=F(),m=u(),c=l?.traceId??u(),p=r.model??"llama-3.3-70b-versatile";i.configClient&&(p=i.configClient.getModel(s,p),p!==r.model&&(r={...r,model:p}));try{let _=await W({traceId:c,spanId:m,userId:l?.userId,sessionId:l?.sessionId,tags:l?.tags},()=>t(r,...o));if(r.stream)return _s(_,{client:i,t0:d,traceId:c,spanId:m,parent:l,params:r,model:p,operation:s});let g=_.usage??{},S=Number(g.prompt_tokens??0),I=Number(g.completion_tokens??0),y=_.choices?.[0]?.finish_reason??"",h=_.choices?.[0]?.message?.content??"",k=_.choices?.[0]?.message?.tool_calls??[],A=k.map(T=>T.function?.name).filter(Boolean),f={};for(let T of k)if(T.function?.name)try{f[T.function.name]=JSON.parse(T.function.arguments??"{}")}catch{f[T.function.name]={}}let{systemPrompt:j,conversationMessages:w}=se(r.messages??[]);return i.enqueue({event_id:u(),project_id:"",trace_id:c,span_id:m,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:p,operation:s,latency_ms:performance.now()-d,stream:!1,input_tokens:S,output_tokens:I,status:"success",finish_reason:y,span_kind:"llm",tools_used:A.length?A:void 0,tool_call_args:Object.keys(f).length?f:void 0,...i.storePrompts?{prompt_text:i.redactForStorage(w),completion_text:i.redactForStorage(h),...j?{system_prompt:i.redactForStorage(j)}:{}}:{},...A.length>0&&h?{decision_rationale:h}:{},user_id:l?.userId,session_id:l?.sessionId,tags:l?.tags,environment:i.environment,sdk_version:b}),_}catch(_){throw i.enqueue({event_id:u(),project_id:"",trace_id:c,span_id:m,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:p,operation:s,latency_ms:performance.now()-d,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:i.environment,sdk_version:b}),_}},a}function hs(a,e={}){let n=lt("openai").default??lt("openai"),t=new n({baseURL:a.baseURL,apiKey:a.apiKey??"litellm"});return Ve(t,{...e,providerOverride:"litellm"})}import{BaseCallbackHandler as ys}from"@langchain/core/callbacks/base";import{createHash as ks}from"crypto";var bt=a=>ks("sha256").update(a).digest("hex"),Is=/\bstep\s+\d+[:\s]|\bfirst,?\s+(?:I|we|let)|\bthen,?\s+(?:I|we)|\bfinally,?\s+(?:I|we)|\blet me think|\blet'?s break (?:this |it )?down|\bthink(?:ing)? step by step|\bmy (?:plan|approach|strategy)|\bI'?ll start by|<thinking>|<scratchpad>|\bchain.of.thought/i,rn=["AgentExecutor","ReactAgent","ToolCallingAgent"],an=["DynamicStructuredTool","StructuredTool","DynamicTool","Tool"],nt=class extends ys{name="ZespanCallbackHandler";guardrailSettings=te(void 0,"chat");runs=new Map;constructor(e={}){super(),this.guardrailSettings=te(e.guardrails,"chat")}detectProvider(e){let n=e.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(e){try{let n=e?.generations?.[0];if(!Array.isArray(n))return[];let t=n[0]?.message;if(!t)return[];let s=t.tool_calls;if(Array.isArray(s)&&s.length>0)return s.map(i=>({name:i.name??"unknown",args:i.args??{},id:i.id}));let r=t.additional_kwargs?.tool_calls;if(Array.isArray(r)&&r.length>0)return r.map(i=>({name:i.function?.name??"unknown",args:i.function?.arguments?JSON.parse(i.function.arguments):{},id:i.id}));let o=t.additional_kwargs?.function_call;return o?[{name:o.name??"unknown",args:o.arguments?JSON.parse(o.arguments):{}}]:[]}catch{return[]}}detectConversationInfo(e,n,t){let s=n?._zespan_message_count;if(typeof s=="number"&&s>0)return{turns:s,hasMemory:s>2};let r=n?.invocation_params?.messages;if(Array.isArray(r))return{turns:r.length,hasMemory:r.length>2};let i=((t??JSON.stringify(e)).match(/"role"\s*:/g)||[]).length;return i>0?{turns:i,hasMemory:i>2}:{turns:e.length,hasMemory:!1}}detectAgentFromPrompts(e,n,t){try{let s=(t??JSON.stringify(e))+JSON.stringify(n?.invocation_params?.messages??[])+JSON.stringify(n?._zespan_structured_messages??[]),r=[/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 o of r){let i=s.match(o);if(i?.[1])return i[1].trim().replace(/[\s]+/g,"_")}return}catch{return}}detectPlanning(e,n){try{let t=e+" "+JSON.stringify(n);if(!Is.test(t))return{detected:!1};let r=/(?:step\s+\d+[:\s]|^\d+[\.\)]\s+)(.+)/gim,o=[],i;for(;(i=r.exec(e))!==null&&(i[1]&&o.push(i[1].trim().slice(0,200)),!(o.length>=10)););return{detected:!0,steps:o.length>0?o:void 0}}catch{return{detected:!1}}}extractCompletion(e){let n=e?.generations;if(!Array.isArray(n)||n.length===0)return"";let t=n[0];if(!Array.isArray(t)||t.length===0)return"";let s=t[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(e,n,t,s,r,o,i,d){try{let l=n.map(c=>c.map(p=>{let _=p._getType?.()??p.role??"unknown",g=typeof p.content=="string"?p.content:JSON.stringify(p.content);return`${_}: ${g}`}).join(`
10
+ `)),m=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(e,l,t,s,{...r,_zespan_structured_messages:m,_zespan_message_count:n[0]?.length??0})}catch{}}async handleLLMStart(e,n,t,s,r){try{let o=F(),i=q(),d=s?this.runs.get(s):void 0,l=u();ge(l);let m=d?.traceId??o?.traceId??u(),c=r?.invocation_params?.model??r?.invocation_params?.model_name??e.kwargs?.model??e.kwargs?.modelName??e.id?.[e.id.length-1]??"unknown",p=r?.invocation_params?.stream===!0,_=d?.spanKind==="agent"?d.agentId:void 0,g=d?.spanKind==="agent"?d.agentName:void 0,S=JSON.stringify(n),I=bt(S);if(!g){let f=this.detectAgentFromPrompts(n,r,S);f&&(g=f,_=_??u())}let y=r?.invocation_params?.tools??r?.invocation_params?.functions??[],h=y.map(f=>f.function?.name??f.name??"unknown").filter(Boolean),k=this.detectConversationInfo(n,r,S),A=await Z(i,this.guardrailSettings,{text:S,phase:"pre",traceId:m,spanId:l,model:c,operation:"chat"});this.runs.set(t,{t0:performance.now(),traceId:m,spanId:l,parentSpanId:d?.spanId??o?.spanId,model:c,agentId:_,agentName:g,spanKind:"llm",isStreaming:p,parent:o,prompts:n,promptHash:I,structuredMessages:r?._zespan_structured_messages,invocationParams:r?.invocation_params,preGuardrailResult:A,toolsAvailable:h,toolSchemas:i.storePrompts?y:void 0,conversationTurns:k.turns,hasMemory:k.hasMemory})}catch(o){if(o instanceof H)throw o}}async handleLLMNewToken(e,n,t){try{let s=this.runs.get(t);if(!s||s.ttft!==void 0)return;s.ttft=performance.now()-s.t0;let r=q();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:s.promptHash??bt(JSON.stringify(s.prompts)),...r.storePrompts?(()=>{let{systemPrompt:o,conversationMessages:i}=se(s.structuredMessages??[]);return{prompt_text:r.redactForStorage(i.length?i: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:b,finish_reason:"stream_start"})}catch{}}async handleLLMEnd(e,n){try{let t=this.runs.get(n);if(!t)return;ie(t.spanId),this.runs.delete(n);let s=q(),r=e.llmOutput?.tokenUsage?.promptTokens??e.llmOutput?.usageMetadata?.promptTokenCount??0,o=e.llmOutput?.tokenUsage?.completionTokens??e.llmOutput?.usageMetadata?.candidatesTokenCount??0,i=performance.now()-t.t0,d=this.extractCompletion(e),l=this.extractToolCalls(e),m=e.llmOutput?.tokenUsage?.reasoningTokens??e.llmOutput?.usage?.completion_tokens_details?.reasoning_tokens??e.llmOutput?.reasoningTokens??e.llmOutput?.usageMetadata?.thoughtsTokenCount??0,c=e.llmOutput?.tokenUsage?.cachedTokens??e.llmOutput?.usage?.prompt_tokens_details?.cached_tokens??e.llmOutput?.usageMetadata?.cachedContentTokenCount??0,p=this.detectPlanning(d,t.prompts),_=e.generations?.[0]?.[0]?.generationInfo?.finish_reason??e.generations?.[0]?.[0]?.generationInfo?.finishReason??e.llmOutput?.finish_reason??(t.isStreaming?"stream_end":"stop"),g=await Z(s,this.guardrailSettings,{text:d,phase:"post",traceId:t.traceId,spanId:t.spanId,model:t.model,operation:"chat"}),S=ae(d,g);s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(t.model),model:t.model,operation:"chat",latency_ms:i,ttft_ms:t.ttft,stream:t.isStreaming??!1,input_tokens:r,output_tokens:o,status:"success",span_kind:"llm",agent_id:t.agentId,agent_name:t.agentName,finish_reason:_,prompt_hash:t.promptHash??bt(JSON.stringify(t.prompts)),tools_defined:t.toolsAvailable?.length?t.toolsAvailable:void 0,tools_used:l.length>0?l.map(I=>I.name):void 0,tool_calls:l.length>0?l:void 0,conversation_turns:t.conversationTurns,has_memory:t.hasMemory,reasoning_tokens:m>0?m:void 0,has_reasoning:m>0?!0:void 0,cached_tokens:c>0?c:void 0,has_planning:p.detected||void 0,planning_steps:p.steps,...s.storePrompts?(()=>{let{systemPrompt:I,conversationMessages:y}=se(t.structuredMessages??[]);return{prompt_text:s.redactForStorage(y.length?y:t.prompts),completion_text:s.redactForStorage(S),...I?{system_prompt:s.redactForStorage(I)}:{}}})():{},metadata:{usage:e?.llmOutput?.tokenUsage??null,llm_output:e?.llmOutput??null,invocation_params:t.invocationParams??null,guardrails:{pre:t.preGuardrailResult?{matched:t.preGuardrailResult.results.length,modified:!!t.preGuardrailResult.modifiedText}:null,post:g?{matched:g.results.length,modified:!!g.modifiedText}:null}},user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleLLMError(e,n){try{let t=this.runs.get(n);if(!t)return;ie(t.spanId),this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:this.detectProvider(t.model),model:t.model,operation:"chat",latency_ms:performance.now()-t.t0,ttft_ms:t.ttft,stream:t.isStreaming??!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",span_kind:"llm",agent_id:t.agentId,agent_name:t.agentName,error_code:e instanceof H?"guardrail_blocked":void 0,error_message:String(e.message).slice(0,1e3),user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleChainStart(e,n,t,s){try{let r=F(),o=s?this.runs.get(s):void 0,i=u(),d=o?.traceId??r?.traceId??u(),l=Array.isArray(e?.id)?e.id:[],m=l.some(k=>rn.includes(k)),c=!m&&l.some(k=>an.includes(k)),p=m?"agent":c?"tool":"general",_=m?u():void 0,g=m?l.find(k=>rn.includes(k))??void 0:void 0,S=c?e.name??e.kwargs?.name??l.find(k=>an.includes(k)):void 0,I=c?JSON.stringify(n):void 0,y=o?.spanKind==="agent"?o.agentId:void 0,h=o?.spanKind==="agent"?o.agentName:void 0;this.runs.set(t,{t0:performance.now(),traceId:d,spanId:i,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:_??o?.agentId,agentName:g??o?.agentName,spanKind:p,toolName:S,toolInput:I,prompts:[],parent:r,delegatedFromAgentId:y,delegatedFromAgentName:h})}catch{}}async handleChainEnd(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();if(t.spanKind==="tool"){let r=e?.output??e,o=typeof r=="string"?r:JSON.stringify(r);s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${t.toolName??"unknown"}`,latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",agent_id:t.agentId,agent_name:t.agentName,tools_used:t.toolName?[t.toolName]:[],tool_call_id:t.spanId,tool_call_args:t.toolInput?JSON.parse(t.toolInput):void 0,tool_call_result:o.slice(0,10240),stream:!1,finish_reason:"stop",user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}else s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"chain",latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:t.spanKind,agent_id:t.agentId,agent_name:t.agentName,stream:!1,finish_reason:"stop",delegation_from_agent_id:t.delegatedFromAgentId,delegation_from_agent_name:t.delegatedFromAgentName,user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleChainError(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:t.spanKind==="tool"?`tool.${t.toolName??"unknown"}`:"chain",latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:t.spanKind,agent_id:t.agentId,agent_name:t.agentName,tools_used:t.spanKind==="tool"&&t.toolName?[t.toolName]:void 0,tool_call_id:t.spanKind==="tool"?t.spanId:void 0,tool_call_args:t.spanKind==="tool"&&t.toolInput?JSON.parse(t.toolInput):void 0,error_message:String(e?.message??e).slice(0,1e3),stream:!1,delegation_from_agent_id:t.delegatedFromAgentId,delegation_from_agent_name:t.delegatedFromAgentName,user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleToolStart(e,n,t,s){try{let r=F(),o=s?this.runs.get(s):void 0,i=u(),d=o?.traceId??r?.traceId??u(),l=e.id?.[e.id.length-1]??"unknown_tool",m=e.name||e.kwargs?.name||l;this.runs.set(t,{t0:performance.now(),traceId:d,spanId:i,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:o?.agentId,agentName:o?.agentName,spanKind:"tool",toolName:m,toolInput:n,prompts:[],parent:r})}catch{}}async handleToolEnd(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q(),o=(typeof e=="string"?e:JSON.stringify(e)).slice(0,10240);s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${t.toolName??"unknown"}`,latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"tool",agent_id:t.agentId,agent_name:t.agentName,tools_used:t.toolName?[t.toolName]:[],tool_call_id:t.spanId,tool_call_args:t.toolInput?{input:t.toolInput}:void 0,tool_call_result:o,stream:!1,finish_reason:"stop",user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleToolError(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:`tool.${t.toolName??"unknown"}`,latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:"tool",agent_id:t.agentId,agent_name:t.agentName,tools_used:t.toolName?[t.toolName]:[],error_message:String(e?.message??e).slice(0,1e3),stream:!1,user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleAgentAction(e,n){try{let t=this.runs.get(n),s=F(),r=q(),o=t?.traceId??s?.traceId??u(),i=u(),d=[e?.tool??"",typeof e?.toolInput=="string"?e.toolInput:JSON.stringify(e?.toolInput??""),e?.log??""].join(" | ");r.enqueue({event_id:u(),project_id:"",trace_id:o,span_id:i,parent_span_id:t?.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:t?.agentId,agent_name:t?.agentName,planning_steps:[d],...e?.log?{decision_rationale:e.log}:{},stream:!1,user_id:t?.parent?.userId??s?.userId,session_id:t?.parent?.sessionId??s?.sessionId,tags:t?.parent?.tags??s?.tags,environment:r.environment,sdk_version:b})}catch{}}async handleRetrieverStart(e,n,t,s){try{let r=F(),o=s?this.runs.get(s):void 0,i=u(),d=o?.traceId??r?.traceId??u();this.runs.set(t,{t0:performance.now(),traceId:d,spanId:i,parentSpanId:o?.spanId??r?.spanId,model:"",agentId:o?.agentId,agentName:o?.agentName,spanKind:"retriever",query:n,prompts:[],parent:r})}catch{}}async handleRetrieverEnd(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"retriever",latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"success",span_kind:"retriever",agent_id:t.agentId,agent_name:t.agentName,stream:!1,finish_reason:"stop",metadata:{"zespan.rag.contexts":Array.isArray(e)?e:[]},user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}async handleRetrieverError(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=q();s.enqueue({event_id:u(),project_id:"",trace_id:t.traceId,span_id:t.spanId,parent_span_id:t.parentSpanId,timestamp:new Date().toISOString(),provider:"langchain",model:"",operation:"retriever",latency_ms:performance.now()-t.t0,input_tokens:0,output_tokens:0,status:"error",span_kind:"retriever",agent_id:t.agentId,agent_name:t.agentName,error_message:String(e?.message??e).slice(0,1e3),stream:!1,user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:b})}catch{}}};function dn(a){let e=a?.model;return typeof e=="string"?e:e&&typeof e=="object"?e.model??e.name??"gemini-2.5-flash":"gemini-2.5-flash"}function vs(a){let e=a??{};return{input:Number(e.promptTokenCount??e.inputTokenCount??0),output:Number(e.candidatesTokenCount??e.outputTokenCount??0),cached:Number(e.cachedContentTokenCount??0),reasoning:Number(e.thoughtsTokenCount??e.reasoningTokenCount??0)}}var st=class{agentStates=new Map;pendingModelCalls=new Map;toolCallStates=new Map;agentKey(e,n){return`${e}:${n}`}getParentAgentState(e,n){if(n)return this.agentStates.get(this.agentKey(e,n))}beforeAgentCallback=e=>{try{let n=e.invocationId,t=e.agentName,s=e.invocationContext?.agent?.parentAgent?.name,r=F(),o=this.getParentAgentState(n,s),i=o?.traceId??r?.traceId??u(),d=u(),l=o?.spanId??r?.spanId,m=u(),c=dn(e.invocationContext?.agent),p=e.userId||r?.userId,_=e.sessionId||r?.sessionId;this.agentStates.set(this.agentKey(n,t),{t0:performance.now(),traceId:i,spanId:d,parentSpanId:l,agentId:m,agentName:t,model:c,userId:p,sessionId:_,parentAgentId:o?.agentId,parentAgentName:s})}catch{}};afterAgentCallback=e=>{try{let n=e.invocationId,t=e.agentName,s=this.agentKey(n,t),r=this.agentStates.get(s);if(!r)return;this.agentStates.delete(s);let o=!r.parentAgentName,i=q();i.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.${t}`,span_kind:"agent",agent_id:r.agentId,agent_name:t,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:i.environment,sdk_version:b})}catch{}};beforeModelCallback=({context:e,request:n})=>{try{let t=e.invocationId,s=e.agentName,r=this.agentStates.get(this.agentKey(t,s)),o=r?.traceId??u(),i=dn(e.invocationContext?.agent),d=n?.config?.systemInstruction,l;if(d){let p=typeof d=="string"?d:(d?.parts??[]).filter(_=>_?.text).map(_=>_.text).join("");p&&(l=p)}let m,c=n?.contents??[];if(c.length){let p=c.map(_=>{let g=_?.role??"user",S=(_?.parts??[]).filter(I=>typeof I?.text=="string"&&!I.thought).map(I=>I.text).join("");return S?`${g}: ${S}`:""}).filter(Boolean).join(`
11
+ `);p&&(m=p)}this.pendingModelCalls.set(this.agentKey(t,s),{t0:performance.now(),spanId:u(),traceId:o,parentSpanId:r?.spanId??"",model:i,agentId:r?.agentId,agentName:s,userId:r?.userId??e.userId,sessionId:r?.sessionId??e.sessionId,promptText:m,systemPrompt:l})}catch{}};afterModelCallback=({context:e,response:n})=>{try{let t=e.invocationId,s=e.agentName,r=this.agentKey(t,s),o=this.pendingModelCalls.get(r);if(!o)return;this.pendingModelCalls.delete(r);let{input:i,output:d,cached:l,reasoning:m}=vs(n?.usageMetadata),c=n?.content?.parts??[],p=c.filter(S=>typeof S?.text=="string"&&!S.thought).map(S=>S.text).join(""),_=c.filter(S=>S?.functionCall?.name).map(S=>S.functionCall.name),g=q();g.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:i,output_tokens:d,cached_tokens:l||void 0,reasoning_tokens:m||void 0,finish_reason:n?.finishReason??"stop",tools_used:_.length?_:void 0,status:n?.errorCode?"error":"success",error_message:n?.errorMessage,...g.storePrompts&&o.systemPrompt?{system_prompt:g.redactForStorage(o.systemPrompt)}:{},...g.storePrompts&&o.promptText?{prompt_text:g.redactForStorage(o.promptText)}:{},...g.storePrompts&&p?{completion_text:g.redactForStorage(p)}:{},user_id:o.userId,session_id:o.sessionId,environment:g.environment,sdk_version:b})}catch{}};beforeToolCallback=({tool:e,args:n,context:t})=>{try{let s=t.invocationId,r=t.agentName,o=t.functionCallId??u(),i=this.agentStates.get(this.agentKey(s,r));this.toolCallStates.set(o,{t0:performance.now(),spanId:u(),traceId:i?.traceId??u(),parentSpanId:i?.spanId??"",toolName:e?.name??"unknown_tool",args:n??{},agentId:i?.agentId,agentName:r,userId:i?.userId??t.userId,sessionId:i?.sessionId??t.sessionId})}catch{}};afterToolCallback=({tool:e,args:n,context:t,response:s})=>{try{let r=t.functionCallId??"",o=this.toolCallStates.get(r);if(!o)return;this.toolCallStates.delete(r);let i=q();i.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:i.environment,sdk_version:b})}catch{}};get callbacks(){return{beforeAgentCallback:this.beforeAgentCallback,afterAgentCallback:this.afterAgentCallback,beforeModelCallback:this.beforeModelCallback,afterModelCallback:this.afterModelCallback,beforeToolCallback:this.beforeToolCallback,afterToolCallback:this.afterToolCallback}}};import{createHash as Ss}from"crypto";var Ct=a=>Ss("sha256").update(typeof a=="string"?a:JSON.stringify(a)).digest("hex");function ws(a){return a?.model??a?.config?.model??a?.llmConfig?.model??a?.generativeModel?.model??"gemini-2.5-flash"}function ln(a){let e=a?.usageMetadata??a?.usage_metadata??{},n=a?.usage??{};return{input:Number(e.inputTokenCount??e.promptTokenCount??n.input_tokens??n.prompt_tokens??0),output:Number(e.outputTokenCount??e.candidatesTokenCount??n.output_tokens??n.completion_tokens??0),cached:Number(e.cachedContentTokenCount??n.cached_tokens??0),reasoning:Number(e.reasoningTokenCount??e.thinking_token_count??n.reasoning_tokens??0)}}function bs(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(t=>typeof t?.text=="string"?t.text:"").filter(Boolean).join("");return n||(a&&typeof a=="object"?JSON.stringify(a):"")}function Cs(a){let e=[];try{let n=a?.candidates?.[0]?.content?.parts??a?.content?.parts??[];for(let t of n)t?.functionCall?.name&&e.push({name:t.functionCall.name,args:t.functionCall.args??{}});for(let t of a?.toolCalls??[])t?.name&&e.push({name:t.name,args:t.args??t.arguments??{}})}catch{}return e}function un(a){if(a instanceof H)return"guardrail_blocked";let e=String(a?.message??"").toLowerCase();if(/rate.?limit|quota|429/.test(e))return"rate_limited";if(/context.?length|too.?long|max.?token/.test(e))return"context_length";if(/timeout|timed?.?out/.test(e))return"timeout";if(/safety|blocked|harm/.test(e))return"content_filter"}function ot(a,e={}){let n=a;if(typeof n?.run!="function")return a;let t=n.run.bind(n),s=te(e.guardrails,"agent"),r=e.agentName??n.name??"ADKAgent",o=e.agentRole??(n.subAgents?.length?"coordinator":"specialist"),i=ws(n);return e.traceSubAgents!==!1&&Array.isArray(n.subAgents)&&(n.subAgents=n.subAgents.map(d=>ot(d,{...e,agentRole:"specialist",traceSubAgents:!0}))),n.run=async(d,l)=>{let m=q(),c=performance.now(),p=F(),_=u(),g=u(),S=p?.traceId??u(),I=e.sessionId??p?.sessionId,y=typeof d=="string"?d:JSON.stringify(d??"");return W({traceId:S,spanId:g,userId:p?.userId,sessionId:I,tags:p?.tags,agentId:_,agentName:r,agentRole:o,agentFramework:"google-adk",parentAgentId:p?.agentId},async()=>{try{let h=await Z(m,s,{text:y,phase:"pre",traceId:S,spanId:g,model:i,operation:"agent"}),k=await t(d,l),{input:A,output:f,cached:j,reasoning:w}=ln(k),T=bs(k),v=Cs(k),D=k?.candidates?.[0]?.finishReason??k?.finish_reason,R=await Z(m,s,{text:T,phase:"post",traceId:S,spanId:g,model:i,operation:"agent"}),C=ae(T,R);return m.enqueue({event_id:u(),project_id:"",trace_id:S,span_id:g,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:i,operation:"agent",span_kind:"agent",agent_id:_,agent_name:r,agent_role:o,agent_framework:"google-adk",parent_agent_id:p?.agentId,delegation_from_agent_id:p?.agentId,delegation_from_agent_name:p?.agentName,latency_ms:performance.now()-c,stream:!1,input_tokens:A,output_tokens:f,cached_tokens:j||void 0,reasoning_tokens:w||void 0,status:"success",finish_reason:D,tools_used:v.length?v.map(N=>N.name):void 0,tool_call_args:v.length?Object.fromEntries(v.map(N=>[N.name,N.args])):void 0,prompt_hash:Ct(y),...m.storePrompts?{prompt_text:m.redactForStorage(y),completion_text:m.redactForStorage(C)}:{},...v.length>0&&T?{decision_rationale:T}:{},user_id:p?.userId,session_id:I,tags:p?.tags,environment:m.environment,sdk_version:b,metadata:{guardrails:{pre:h?{matched:h.results.length,modified:!!h.modifiedText}:null,post:R?{matched:R.results.length,modified:!!R.modifiedText}:null}}}),k}catch(h){throw m.enqueue({event_id:u(),project_id:"",trace_id:S,span_id:g,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:i,operation:"agent",span_kind:"agent",agent_id:_,agent_name:r,agent_role:o,agent_framework:"google-adk",parent_agent_id:p?.agentId,latency_ms:performance.now()-c,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:un(h),error_message:String(h?.message??h).slice(0,500),user_id:p?.userId,session_id:I,tags:p?.tags,environment:m.environment,sdk_version:b}),h}})},a}function xt(a,e={}){let n=a;if(typeof n?.runEphemeral=="function"){let t=n.runEphemeral.bind(n);n.runEphemeral=s=>cn(t(s),s,e)}if(typeof n?.run=="function"){let t=n.run.bind(n);n.run=s=>cn(t(s),s,e)}return a}async function*cn(a,e,n){let t=q(),s=F(),r=s?.traceId??u(),o=u(),i=u(),d=performance.now(),l=n.agentName??"ADKAgent",m=n.agentRole??"coordinator",c=n.model??"gemini-2.5-flash",p=e?.userId??s?.userId,_=n.sessionId??e?.sessionId??s?.sessionId,g=(e?.newMessage?.parts??[]).map(w=>typeof w?.text=="string"?w.text:"").filter(Boolean).join(""),S=new Map,I=new Map,y=new Set,h="",k=0,A=0,f=0,j=0;ge(o);try{yield*W({traceId:r,spanId:o,userId:p,sessionId:_,tags:s?.tags,agentId:i,agentName:l,agentRole:m,agentFramework:"google-adk",parentAgentId:s?.agentId},async function*(){for await(let w of a){k++;let T=w.author??l;if(T!=="user"){T!==l&&!y.has(T)&&t.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${T}`,span_kind:"handoff",agent_name:T,agent_role:"specialist",agent_framework:"google-adk",delegation_from_agent_id:i,delegation_from_agent_name:l,delegation_reason:`delegated to ${T}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",user_id:p,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b}),y.add(T),S.has(T)||(S.set(T,{spanId:u(),agentId:u(),t0:performance.now()}),I.set(T,{input:0,output:0,cached:0,reasoning:0}));let v=S.get(T),D=ln(w);if(D.input>0||D.output>0){let x=I.get(T);x.input+=D.input,x.output+=D.output,x.cached+=D.cached,x.reasoning+=D.reasoning,A+=D.input,f+=D.output,j+=D.cached}let R=w.content?.parts??[];for(let x of R){let M=x?.functionCall;if(!M?.name)continue;let P=u();t.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:P,parent_span_id:v.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:`tool.${M.name}`,span_kind:"tool",agent_id:v.agentId,agent_name:T,agent_framework:"google-adk",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",tools_used:[M.name],tool_call_id:P,tool_call_args:M.args??{},user_id:p,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b})}let C=R.filter(x=>typeof x?.text=="string"&&!x.thought).map(x=>x.text).join("");if(C&&(h+=C),typeof w.isFinalResponse=="function"?w.isFinalResponse():!!w.isFinalResponse||w.actions?.stateDelta!==void 0||w.turnComplete===!0){let x=R.map(E=>E?.functionCall?.name).filter(Boolean),M=R.filter(E=>typeof E?.text=="string"&&!E.thought).map(E=>E.text).join(""),P=I.get(T)??{input:0,output:0,cached:0,reasoning:0};t.enqueue({event_id:u(),project_id:"",trace_id:r,span_id:v.spanId,parent_span_id:o,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:`agent.${T}`,span_kind:"agent",agent_id:v.agentId,agent_name:T,agent_role:T===l?m:"specialist",agent_framework:"google-adk",parent_agent_id:i,latency_ms:performance.now()-v.t0,stream:!1,input_tokens:P.input,output_tokens:P.output,cached_tokens:P.cached||void 0,reasoning_tokens:P.reasoning||void 0,status:"success",tools_used:x.length?x:void 0,prompt_hash:g?Ct(g):void 0,...t.storePrompts&&C?{completion_text:t.redactForStorage(C)}:{},...x.length>0&&M?{decision_rationale:M}:{},user_id:p,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b}),S.delete(T),I.delete(T)}}yield w}}),t.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:i,agent_name:l,agent_role:m,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-d,stream:!1,input_tokens:A,output_tokens:f,cached_tokens:j||void 0,status:"success",prompt_hash:g?Ct(g):void 0,...t.storePrompts?{prompt_text:t.redactForStorage(g),completion_text:t.redactForStorage(h)}:{},user_id:p,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b,metadata:{eventCount:k,agentsThatRan:[...y]}}),ie(o)}catch(w){throw ie(o),t.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:i,agent_name:l,agent_role:m,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:un(w),error_message:String(w?.message??w).slice(0,500),user_id:p,session_id:_,tags:s?.tags,environment:t.environment,sdk_version:b}),w}}function pn(a){let{coordinator:e,runner:n,agentName:t,agentRole:s,model:r,...o}=a,i=ot(e,{...o,agentName:t??e?.name,agentRole:s??"coordinator",traceSubAgents:!0}),d=xt(n,{agentName:t??e?.name,agentRole:s??"coordinator",model:r});return{coordinator:i,runner:d}}var mn=ot;import{NodeTracerProvider as xs}from"@opentelemetry/sdk-trace-node";import{ExportResultCode as gn}from"@opentelemetry/core";function Ts(){try{return q()}catch{return null}}var At=class{export(e,n){let t=Ts();if(!t){n({code:gn.SUCCESS});return}try{for(let s of e){let{name:r}=s;if(!r.startsWith("ai."))continue;let o=s.attributes,i=F(),d=s.spanContext().spanId,l=s.spanContext().traceId,m=s.duration[0]*1e3+s.duration[1]/1e6,c=new Date(s.startTime[0]*1e3+s.startTime[1]/1e6).toISOString(),p=s.status.code===2,_={event_id:u(),project_id:"",trace_id:i?.traceId??l,span_id:d,parent_span_id:i?.spanId,timestamp:c,provider:String(o["ai.model.provider"]??"unknown"),model:String(o["ai.model.id"]??"unknown"),latency_ms:m,stream:!1,status:p?"error":"success",environment:t.environment,sdk_version:b};r==="ai.generateText"||r==="ai.generateText.doGenerate"?(ie(d),t.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",...t.storePrompts&&o["ai.prompt"]?{prompt_text:t.redactForStorage(String(o["ai.prompt"]))}:{},...t.storePrompts&&o["ai.response.text"]?{completion_text:t.redactForStorage(String(o["ai.response.text"]))}:{}})):r==="ai.streamText"||r==="ai.streamText.doStream"?(ie(d),t.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"?(ie(d),t.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"?t.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")&&t.enqueue({..._,operation:r==="ai.embed"?"embed":"embedMany",input_tokens:Number(o["ai.usage.tokens"]??0),output_tokens:0,span_kind:"embedding"})}}catch{}n({code:gn.SUCCESS})}shutdown(){return Promise.resolve()}},Ot=class{exporter;constructor(e){this.exporter=e}onStart(e,n){e.name?.startsWith("ai.")&&ge(e.spanContext().spanId)}onEnd(e){e.name.startsWith("ai.")&&ie(e.spanContext().spanId),this.exporter.export([e],()=>{})}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},rt=null,Tt=null;function Rt(){return rt||(rt=new xs,rt.addSpanProcessor(new Ot(new At)),Tt=rt.getTracer("zespan-vercel-ai")),{tracer:Tt,telemetry:{isEnabled:!0,tracer:Tt}}}function _n(){return Rt().telemetry}function De(){try{return q()}catch{return null}}function As(a){let e=a.toLowerCase();return/gpt|o1-|o3-|davinci|turbo|whisper|dall-e/i.test(e)?"openai":/claude/i.test(e)?"anthropic":/gemini|palm|bard/i.test(e)?"google":/llama|codellama/i.test(e)?"meta":/mistral|mixtral/i.test(e)?"mistralai":/deepseek/i.test(e)?"deepseek":/command/i.test(e)?"cohere":/qwen/i.test(e)?"alibaba":"unknown"}var at=class{runs=new Map;guardrailSettings;constructor(e={}){this.guardrailSettings=te(e.guardrails,"chat")}_onLLMStart=async e=>{let n=e.id??u(),t=F(),s=u();ge(s);let r=e.detail?.llm?.metadata?.model_name??e.detail?.model??"unknown",o=t?.traceId??u(),i=JSON.stringify(e.detail?.messages??e.detail?.prompt??e.detail?.input??""),d;try{let l=De();l&&i&&(d=await Z(l,this.guardrailSettings,{text:i,phase:"pre",traceId:o,spanId:s,model:r,operation:"chat"}))}catch(l){if(l instanceof H)throw l}this.runs.set(n,{t0:performance.now(),traceId:o,spanId:s,parentSpanId:t?.spanId,model:r,preGuardrailResult:d,promptText:i})};_onLLMEnd=async e=>{let n=this.runs.get(e.id??"");if(!n)return;this.runs.delete(e.id),ie(n.spanId);let t=De();if(!t)return;let s=e.detail?.response??e.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)??"",i=o,d;if(o)try{d=await Z(t,this.guardrailSettings,{text:o,phase:"post",traceId:n.traceId,spanId:n.spanId,model:n.model,operation:"chat"}),i=ae(o,d)}catch(m){m instanceof H||(d=void 0)}let l=n.preGuardrailResult;try{t.enqueue({event_id:u(),project_id:"",trace_id:n.traceId,span_id:n.spanId,parent_span_id:n.parentSpanId,timestamp:new Date().toISOString(),provider:As(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:F()?.agentId,agent_name:F()?.agentName,...t.storePrompts?{prompt_text:t.redactForStorage(n.promptText??""),completion_text:t.redactForStorage(i)}:{},metadata:{guardrails:{pre:l?{matched:l.results.length,modified:!!l.modifiedText}:null,post:d?{matched:d.results.length,modified:!!d.modifiedText}:null}},environment:t.environment,sdk_version:b})}catch{}};_onLLMStream=e=>{let n=this.runs.get(e.id??"");n&&n.ttft===void 0&&(n.ttft=performance.now()-n.t0)};_onToolCall=e=>{let n=De();if(!n)return;let t=F(),s=e.detail?.toolCall?.name??e.detail?.name??"";try{n.enqueue({event_id:u(),project_id:"",trace_id:t?.traceId??u(),span_id:u(),parent_span_id:t?.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:t?.agentId,agent_name:t?.agentName,environment:n.environment,sdk_version:b})}catch{}};_onToolResult=e=>{let n=De();if(!n)return;let t=F(),s=e.detail?.toolCall?.name??e.detail?.name??"",r=e.detail?.result??e.detail?.toolResult??"";try{n.enqueue({event_id:u(),project_id:"",trace_id:t?.traceId??u(),span_id:u(),parent_span_id:t?.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:t?.agentId,agent_name:t?.agentName,environment:n.environment,sdk_version:b})}catch{}};_onAgentStart=e=>{let n=e.id??u(),t=F();this.runs.set(`agent-${n}`,{t0:performance.now(),traceId:t?.traceId??u(),spanId:u(),parentSpanId:t?.spanId,model:"agent",agentName:e.detail?.agentName??t?.agentName??""})};_onAgentEnd=e=>{let n=this.runs.get(`agent-${e.id??""}`);if(!n)return;this.runs.delete(`agent-${e.id}`);let t=De();if(t)try{t.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??e.detail?.agentName??"",environment:t.environment,sdk_version:b})}catch{}};attach(e){e.on("llm-start",this._onLLMStart),e.on("llm-end",this._onLLMEnd),e.on("llm-stream",this._onLLMStream),e.on("llm-tool-call",this._onToolCall),e.on("llm-tool-result",this._onToolResult),e.on("agent-start",this._onAgentStart),e.on("agent-end",this._onAgentEnd)}detach(e){e.off("llm-start",this._onLLMStart),e.off("llm-end",this._onLLMEnd),e.off("llm-stream",this._onLLMStream),e.off("llm-tool-call",this._onToolCall),e.off("llm-tool-result",this._onToolResult),e.off("agent-start",this._onAgentStart),e.off("agent-end",this._onAgentEnd)}};function fn(a){let e=q(),n=F(),t=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"}:{},i={};return{span:{setEvalScore(l,m){i[l]=m},async end(l){let m=performance.now()-r;try{e.enqueue({event_id:u(),project_id:"",trace_id:t,span_id:s,parent_span_id:n?.spanId,timestamp:new Date().toISOString(),provider:a.provider??"custom",model:a.model??"custom",operation:"custom",latency_ms:m,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:e.environment,eval_scores:Object.keys(i).length?i:void 0,sdk_version:b,...o})}catch{}}},run:l=>W({traceId:t,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 it=class{agentId;name;role;framework;tools;constructor(e,n){this.agentId=e,this.name=n.name,this.role=n.role??"specialist",this.framework=n.framework??"custom",this.tools=n.tools??[]}logPlan(e){let n=q(),t=F(),s={event_id:u(),project_id:"",trace_id:t?.traceId??u(),span_id:u(),parent_span_id:t?.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:b,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"planning",planning_steps:e,user_id:t?.userId,session_id:t?.sessionId,tags:t?.tags};n.enqueue(s)}async traceTool(e,n,t){let s=q(),r=F(),o=u(),i=r?.traceId??u(),d=performance.now(),l=this.tools.find(m=>m.name===e);try{let m=await W({traceId:i,spanId:o,userId:r?.userId,sessionId:r?.sessionId,tags:r?.tags,agentId:this.agentId,agentName:this.name,agentRole:this.role,agentFramework:this.framework},()=>t()),c=typeof m=="string"?m:JSON.stringify(m),p={event_id:u(),project_id:"",trace_id:i,span_id:o,parent_span_id:r?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${e}`,latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:s.environment,sdk_version:b,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[e],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(p),m}catch(m){let c=m instanceof Error?m.message:String(m),p={event_id:u(),project_id:"",trace_id:i,span_id:o,parent_span_id:r?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${e}`,latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:c.slice(0,500),environment:s.environment,sdk_version:b,agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[e],tool_call_id:o,tool_call_args:n,user_id:r?.userId,session_id:r?.sessionId,tags:r?.tags};throw s.enqueue(p),m}}delegateTo(e,n){let t=q(),s=F(),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${e}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:t.environment,sdk_version:b,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};t.enqueue(r)}};function hn(a,e){let n=q(),t=F(),s=u(),r=t?.traceId??u(),o=u(),i={event_id:u(),project_id:"",trace_id:r,span_id:o,parent_span_id:t?.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:b,agent_id:s,agent_name:a.name,agent_role:a.role??"specialist",agent_framework:a.framework??"custom",agent_version:a.version,agent_description:a.description,parent_agent_id:t?.agentId,span_kind:"agent",tool_definitions:a.tools,delegation_reason:t?.agentId?"delegated":"root",user_id:t?.userId,session_id:t?.sessionId,tags:t?.tags,metadata:a.metadata};return n.enqueue(i),W({traceId:r,spanId:o,userId:t?.userId,sessionId:t?.sessionId,tags:t?.tags,agentId:s,agentName:a.name,agentRole:a.role??"specialist",agentFramework:a.framework??"custom",parentAgentId:t?.agentId,availableTools:a.tools},()=>e(new it(s,a)))}import{propagation as Os}from"@opentelemetry/api";var Nt=class{onStart(e,n){let t=Os.getBaggage(n);t&&t.getAllEntries().forEach(([s,r])=>{e.setAttribute(`baggage.${s}`,r.value)})}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}};import{context as yn,propagation as Ee}from"@opentelemetry/api";function dt(a,e,n){let t={};e&&(t["agent.delegation.reason"]=e),n&&(t["agent.task"]=n);let s=yn.active();if(Object.keys(t).length>0){let r=Ee.getBaggage(s)??Ee.createBaggage();for(let[o,i]of Object.entries(t))r=r.setEntry(o,{value:i});s=Ee.setBaggage(s,r)}Ee.inject(s,a)}function ct(a){return Ee.extract(yn.active(),a)}var Rs={OTEL_EXPORTER_OTLP_ENDPOINT:"http://localhost:4318",OTEL_SERVICE_NAME:"crewai-agent"};function Ns(){return`
12
12
  pip install openinference-instrumentation-crewai opentelemetry-exporter-otlp-proto-grpc
13
13
 
14
14
  from openinference.instrumentation.crewai import CrewAIInstrumentor
@@ -21,4 +21,4 @@ provider = TracerProvider()
21
21
  provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="http://localhost:4318")))
22
22
  trace.set_tracer_provider(provider)
23
23
  CrewAIInstrumentor().instrument()
24
- `.trim()}function Os(a,e){let n={};return at(n,e),{...a,_zespan_trace:n}}function Rs(a){let e=a._zespan_trace??{};return it(e)}function Ns(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 Xa={init:ht,getClient:q,getZespanClient:q,wrapOpenAI:Je,wrapAnthropic:$t,wrapGoogle:Jt,wrapGoogleGenAI:Qt,wrapOpenRouter:Xt,wrapADKAgent:cn,wrapADKRunner:bt,instrumentADK:dn,startSpan:pn,withContext:ut,withTrace:pt,withAgent:mn,initOTel:Ge,getTracer:ke,createSpan:Nt,withSpan:Pt,PromptClient:Ce,CallbackHandler:et,ADKCallbackHandler:tt,autopatch:Be,markFrameworkActive:ge,markFrameworkInactive:ie,instrumentVercelAI:At,getZespanVercelTelemetry:un,ZespanLlamaIndexHandler:ot};export{rt as AgentContext,Ot as BaggageSpanProcessor,Ts as CREWAI_OTEL_ENV,H as GuardrailBlockedError,Ce as PromptClient,be as SpanKind,we as SpanStatusCode,tt as ZespanADKCallbackHandler,et as ZespanCallbackHandler,We as ZespanClient,ot as ZespanLlamaIndexHandler,Os as attachTraceToAutoGenMessage,Be as autopatch,Nt as createSpan,it as extractAgentContext,it as extractAutoGenContext,Rs as extractTraceFromAutoGenMessage,As as getCrewAIInstrumentationGuide,Ns as getPydanticAIConfig,ke as getTracer,q as getZespanClient,un as getZespanVercelTelemetry,Dn as init,Ge as initOTel,ht as initZespan,at as injectAgentContext,at as injectAutoGenContext,dn as instrumentADK,At as instrumentVercelAI,ge as markFrameworkActive,ie as markFrameworkInactive,pn as startSpan,mn as withAgent,Pt as withSpan,Rn as withZespan,ut as withZespanContext,pt as withZespanTrace,nt as wrapADKAgent,bt as wrapADKRunner,$t as wrapAnthropic,cs as wrapBedrock,Jt as wrapGoogle,Qt as wrapGoogleGenAI,ms as wrapGroq,gs as wrapLiteLLM,ls as wrapMistral,Je as wrapOpenAI,Xt as wrapOpenRouter,cn as wrapZespanADKAgent,Xa as zespan};
24
+ `.trim()}function Ps(a,e){let n={};return dt(n,e),{...a,_zespan_trace:n}}function Ms(a){let e=a._zespan_trace??{};return ct(e)}function js(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 ri={init:kt,getClient:q,getZespanClient:q,wrapOpenAI:Ve,wrapAnthropic:Vt,wrapGoogle:Qt,wrapGoogleGenAI:tn,wrapOpenRouter:nn,wrapADKAgent:mn,wrapADKRunner:xt,instrumentADK:pn,startSpan:fn,withContext:mt,withTrace:gt,withAgent:hn,initOTel:qe,getTracer:ke,createSpan:jt,withSpan:Dt,PromptClient:Ce,DatasetsClient:xe,DatasetRunHandle:Re,CallbackHandler:nt,ADKCallbackHandler:st,autopatch:We,markFrameworkActive:ge,markFrameworkInactive:ie,instrumentVercelAI:Rt,getZespanVercelTelemetry:_n,ZespanLlamaIndexHandler:at};export{it as AgentContext,Nt as BaggageSpanProcessor,Rs as CREWAI_OTEL_ENV,Re as DatasetRunHandle,xe as DatasetsClient,H as GuardrailBlockedError,Ce as PromptClient,be as SpanKind,we as SpanStatusCode,st as ZespanADKCallbackHandler,nt as ZespanCallbackHandler,Ze as ZespanClient,at as ZespanLlamaIndexHandler,Ps as attachTraceToAutoGenMessage,We as autopatch,jt as createSpan,ct as extractAgentContext,ct as extractAutoGenContext,Ms as extractTraceFromAutoGenMessage,Ns as getCrewAIInstrumentationGuide,js as getPydanticAIConfig,ke as getTracer,q as getZespanClient,_n as getZespanVercelTelemetry,Fn as init,qe as initOTel,kt as initZespan,dt as injectAgentContext,dt as injectAutoGenContext,pn as instrumentADK,Rt as instrumentVercelAI,ge as markFrameworkActive,ie as markFrameworkInactive,fn as startSpan,hn as withAgent,Dt as withSpan,Mn as withZespan,mt as withZespanContext,gt as withZespanTrace,ot as wrapADKAgent,xt as wrapADKRunner,Vt as wrapAnthropic,ps as wrapBedrock,Qt as wrapGoogle,tn as wrapGoogleGenAI,fs as wrapGroq,hs as wrapLiteLLM,ms as wrapMistral,Ve as wrapOpenAI,nn as wrapOpenRouter,mn as wrapZespanADKAgent,ri as zespan};