@zespan/sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +327 -0
- package/dist/index.d.mts +588 -0
- package/dist/index.d.ts +588 -0
- package/dist/index.js +20 -0
- package/dist/index.mjs +20 -0
- package/package.json +80 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";var xn=Object.create;var Fe=Object.defineProperty;var Tn=Object.getOwnPropertyDescriptor;var On=Object.getOwnPropertyNames;var An=Object.getPrototypeOf,Rn=Object.prototype.hasOwnProperty;var Nn=(r,e)=>{for(var n in e)Fe(r,n,{get:e[n],enumerable:!0})},At=(r,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of On(e))!Rn.call(r,s)&&s!==n&&Fe(r,s,{get:()=>e[s],enumerable:!(t=Tn(e,s))||t.enumerable});return r};var rt=(r,e,n)=>(n=r!=null?xn(An(r)):{},At(e||!r||!r.__esModule?Fe(n,"default",{value:r,enumerable:!0}):n,r)),Mn=r=>At(Fe({},"__esModule",{value:!0}),r);var ts={};Nn(ts,{AgentContext:()=>Ee,BaggageSpanProcessor:()=>ot,CREWAI_OTEL_ENV:()=>vn,GuardrailBlockedError:()=>J,LumiqCallbackHandler:()=>mn,LumiqClient:()=>ve,LumiqLlamaIndexHandler:()=>Pe,PromptClient:()=>ke,SpanKind:()=>H.SpanKind,SpanStatusCode:()=>H.SpanStatusCode,ZespanADKCallbackHandler:()=>Me,ZespanCallbackHandler:()=>we,ZespanClient:()=>ve,attachTraceToAutoGenMessage:()=>bn,autopatch:()=>Ae,createSpan:()=>it,extractAgentContext:()=>De,extractAutoGenContext:()=>De,extractTraceFromAutoGenMessage:()=>wn,getCrewAIInstrumentationGuide:()=>Sn,getLumiqClient:()=>Vt,getLumiqVercelTelemetry:()=>xt,getPydanticAIConfig:()=>Cn,getTracer:()=>fe,getZespanClient:()=>P,init:()=>Ut,initOTel:()=>Ce,initZespan:()=>Ve,injectAgentContext:()=>Ge,injectAutoGenContext:()=>Ge,instrumentADK:()=>It,instrumentVercelAI:()=>at,markFrameworkActive:()=>oe,markFrameworkInactive:()=>X,startSpan:()=>Tt,withAgent:()=>Ot,withLumiqContext:()=>Wt,withSpan:()=>dt,withZespan:()=>$t,withZespanContext:()=>xe,withZespanTrace:()=>Be,wrapADKAgent:()=>qe,wrapADKRunner:()=>nt,wrapAnthropic:()=>gt,wrapBedrock:()=>sn,wrapGoogle:()=>ft,wrapGroq:()=>on,wrapLiteLLM:()=>rn,wrapMistral:()=>an,wrapOpenAI:()=>Re,wrapOpenRouter:()=>yt,wrapZespanADKAgent:()=>vt,zespan:()=>es});module.exports=Mn(ts);var Rt=require("zlib"),Le=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=[];timer=null;flushing=!1;consecutiveFlushFailures=0;configClient;maxQueueSize;push(e){this.queue.length>=this.maxQueueSize&&(this.queue.shift(),this.c.debug&&console.warn("[lumiq] queue full, dropping oldest event")),this.queue.push(e),this.c.debug&&console.log(`[lumiq] 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.cfg.maxSize&&this.flush()}async flush(){if(!this.queue.length||this.flushing)return;this.flushing=!0;let e=this.queue.slice(),n=(0,Rt.gzipSync)(Buffer.from(e.map(t=>JSON.stringify(t)).join(`
|
|
2
|
+
`)));try{let t=await this._post(n,0);t.ok?(this.queue.splice(0,e.length),this.c.debug&&console.log(`[lumiq] flushed ${e.length} event(s) \u2192 ${this.c.endpoint}`),this.consecutiveFlushFailures>0&&this.c.debug&&console.warn("[lumiq] ingest recovered",{recoveredBatchSize:e.length,queuedEvents:this.queue.length,priorFailures:this.consecutiveFlushFailures}),this.consecutiveFlushFailures=0):(this.consecutiveFlushFailures+=1,(this.c.debug||this.consecutiveFlushFailures===1||this.consecutiveFlushFailures%5===0)&&console.error("[lumiq] ingest flush failed; retaining events for retry",{retriable:t.retriable,status:t.status??null,error:t.error??null,queuedEvents:this.queue.length,failedBatchSize:e.length,consecutiveFailures:this.consecutiveFlushFailures}))}finally{this.flushing=!1}}async _post(e,n){let t=s=>new Promise(o=>setTimeout(o,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 o=await s.json();typeof o?.cv=="number"&&this.configClient&&this.configClient.checkVersion(o.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("[lumiq] retryable ingest failure",{status:s.status,attempt:n}),{ok:!1,retriable:!0,status:s.status}):(console.error("[lumiq] non-retriable ingest failure",{status:s.status}),{ok:!1,retriable:!1,status:s.status})}catch(s){return n<3?(await t(2**n*1e3),this._post(e,n+1)):(this.c.debug&&console.error("[lumiq] ingest transport error",s),{ok:!1,retriable:!0,error:s instanceof Error?s.message:String(s)})}}};var H=require("@opentelemetry/api"),Mt=require("@opentelemetry/sdk-trace-base"),qt=require("@opentelemetry/exporter-trace-otlp-http"),jt=require("@opentelemetry/context-async-hooks"),Pt=require("@opentelemetry/core"),Ke=null,Nt=null;function Ce(r){let e=r.serviceName??"zespan-sdk",n=new qt.OTLPTraceExporter({url:r.endpoint??"https://localhost:3001/v1/traces",headers:r.apiKey?{"x-api-key":r.apiKey}:void 0}),t=new Mt.BatchSpanProcessor(n,{maxQueueSize:100,maxExportBatchSize:10,exportTimeoutMillis:3e4,scheduledDelayMillis:2e3}),{NodeTracerProvider:s}=require("@opentelemetry/sdk-trace-node"),o=new s({resource:{attributes:{"service.name":e,"service.version":"1.0.0","deployment.environment":r.environment??"production"}}});return o.addSpanProcessor(t),o.register({propagator:new Pt.W3CTraceContextPropagator}),Ke=H.trace.getTracer(e,"1.0.0"),Nt=new jt.AsyncHooksContextManager,H.context.setGlobalContextManager(Nt.enable()),{tracer:Ke,provider:o}}function fe(){if(!Ke)throw new Error("OTel not initialized. Call initOTel() first.");return Ke}function it(r){return fe().startSpan(r.name,{kind:r.kind??H.SpanKind.INTERNAL,attributes:r.attributes??{}})}async function dt(r,e,n){let s=fe().startSpan(r,{kind:n?.kind??H.SpanKind.INTERNAL,attributes:n?.attributes??{}});try{let o=await e(s);return s.setStatus({code:H.SpanStatusCode.OK}),s.end(),o}catch(o){throw s.setStatus({code:H.SpanStatusCode.ERROR,message:o.message}),s.recordException(o),s.end(),o}}var Et=require("crypto"),ke=class{constructor(e){this.client=e}cache=new Map;cacheTTL=300*1e3;async get(e,n={}){let{version:t,label:s,cache:o=!0}=n;if(o){let m=this.getCacheKey(e,t,s),g=this.cache.get(m);if(g&&Date.now()-g.timestamp<this.cacheTTL)return g.prompt}let a=new URLSearchParams;t!==void 0&&a.set("version",t.toString()),s&&a.set("label",s);let d=`${this.client.baseURL}/v1/prompts/${encodeURIComponent(e)}?${a}`,i=await fetch(d,{headers:{"x-api-key":this.client.apiKey}});if(!i.ok)throw new Error(`Failed to fetch prompt: ${i.statusText}`);let l=await i.json(),p=(0,Et.createHash)("sha256").update(JSON.stringify(l.prompt)).digest("hex"),c={...l,promptHash:p};if(o){let m=this.getCacheKey(e,t,s);this.cache.set(m,{prompt:c,timestamp:Date.now()})}return c}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`,o=await fetch(s,{method:"PATCH",headers:{"Content-Type":"application/json","x-api-key":this.client.apiKey},body:JSON.stringify({labels:t})});if(!o.ok)throw new Error(`Failed to update labels: ${o.statusText}`);let a=await o.json();return this.invalidateCache(e),a}compile(e,n){if(e.type==="text"){let t=typeof e.prompt=="string"?e.prompt:e.prompt.content;return Object.entries(n).forEach(([s,o])=>{t=t.replace(new RegExp(`\\{\\{${s}\\}\\}`,"g"),o)}),t}return JSON.stringify(e.prompt)}clearCache(e){e?this.invalidateCache(e):this.cache.clear()}getCacheKey(e,n,t){return n!==void 0?`${e}:v${n}`:t?`${e}:label:${t}`:`${e}:latest`}invalidateCache(e){let n=[];for(let t of this.cache.keys())t.startsWith(`${e}:`)&&n.push(t);n.forEach(t=>this.cache.delete(t))}};var qn="[REDACTED]",Gt=r=>r.toLowerCase().replace(/[^a-z0-9]/g,""),jn=r=>{let e=new Set;for(let n of r){let t=Gt(String(n));t&&e.add(t)}return e},$e=(r,e)=>{if(Array.isArray(r))return r.map(s=>$e(s,e));if(!r||typeof r!="object")return r;let n=r,t={};for(let[s,o]of Object.entries(n)){if(e.has(Gt(s))){t[s]=qn;continue}t[s]=$e(o,e)}return t},Dt=(r,e)=>{if(r==null)return"";let n=jn(e);if(typeof r=="string")try{let t=JSON.parse(r);return t&&typeof t=="object"?JSON.stringify($e(t,n)):r}catch{return r}return JSON.stringify($e(r,n))};function Ft(){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 Ie(r,e){if(r.size!==e.size)return!1;for(let[n,t]of r){let s=e.get(n);if(typeof t=="object"&&t!==null&&typeof s=="object"&&s!==null){if(JSON.stringify(t)!==JSON.stringify(s))return!1}else if(s!==t)return!1}return!0}var We=class{localVersion=0;config=Ft();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,Ie(n.modelOverrides,t.modelOverrides)||this.emit("model_override",Object.fromEntries(t.modelOverrides)),n.samplingRate!==t.samplingRate&&this.emit("sampling_config",{samplingRate:t.samplingRate}),Ie(n.cacheConfig,t.cacheConfig)||this.emit("cache_config",Object.fromEntries(t.cacheConfig)),Ie(n.fallbacks,t.fallbacks)||this.emit("fallback_config",Object.fromEntries(t.fallbacks)),Ie(n.retryPolicies,t.retryPolicies)||this.emit("retry_config",Object.fromEntries(t.retryPolicies)),Ie(n.timeouts,t.timeouts)||this.emit("timeout_config",Object.fromEntries(t.timeouts)),Ie(n.abTests,t.abTests)||this.emit("ab_test_config",Object.fromEntries(t.abTests))}parseSnapshot(e){let n=Ft();for(let[t,s]of Object.entries(e))try{let o=typeof s=="string"?JSON.parse(s):s;if(t.startsWith("model_override.")){let a=t.slice(15),d=typeof o=="string"?o:o?.model??o?.value;typeof d=="string"&&n.modelOverrides.set(a,d)}else if(t.startsWith("cache.")){let a=t.slice(6);n.cacheConfig.set(a,{enabled:o?.enabled??!0,ttlSeconds:typeof o?.ttlSeconds=="number"?o.ttlSeconds:300,similarityThreshold:typeof o?.similarityThreshold=="number"?o.similarityThreshold:.85})}else if(t.startsWith("ratelimit.")){let a=t.slice(10);n.rateLimits.set(a,{maxRequests:typeof o?.maxRequests=="number"?o.maxRequests:100,windowSeconds:typeof o?.windowSeconds=="number"?o.windowSeconds:60})}else if(t.startsWith("guardrail.")&&!t.startsWith("guardrail_mode.")){let a=t.slice(10);n.guardrailOverrides.set(a,!!(o?.enabled??o))}else if(t.startsWith("sampling.")){let a=typeof o=="number"?o:o?.rate??o?.sampleRate;typeof a=="number"&&a>=0&&a<=1&&(n.samplingRate=a)}else if(t.startsWith("prompt_version.")){let a=t.slice(15),d=typeof o=="number"?o:o?.version;typeof d=="number"&&n.promptVersions.set(a,d)}else if(t.startsWith("fallback.")){let a=t.slice(9),d=typeof o?.model=="string"?o.model:null,i=Array.isArray(o?.conditions)?o.conditions.filter(l=>typeof l=="string"):[];d&&n.fallbacks.set(a,{model:d,conditions:i})}else if(t.startsWith("retry.")){let a=t.slice(6),d=typeof o?.enabled=="boolean"?o.enabled:!1,i=typeof o?.maxRetries=="number"?o.maxRetries:3,l=typeof o?.backoffMultiplier=="number"?o.backoffMultiplier:2,p=Array.isArray(o?.retryOnStatusCodes)?o.retryOnStatusCodes.filter(c=>typeof c=="number"):[];n.retryPolicies.set(a,{enabled:d,maxRetries:i,backoffMultiplier:l,retryOnStatusCodes:p})}else if(t.startsWith("timeout.")){let a=t.slice(8),d=typeof o?.timeoutMs=="number"?o.timeoutMs:typeof o=="number"?o:null;typeof d=="number"&&d>0&&n.timeouts.set(a,{timeoutMs:d})}else if(t.startsWith("concurrency.")){let a=t.slice(12),d=typeof o=="number"?o:typeof o?.limit=="number"?o.limit:null;typeof d=="number"&&d>0&&n.concurrencyLimits.set(a,d)}else if(t.startsWith("ab_test.")){let a=t.slice(8),d=typeof o?.candidateModel=="string"?o.candidateModel:null,i=typeof o?.splitPercentage=="number"?o.splitPercentage:null;d&&i!==null&&i>=0&&i<=100&&n.abTests.set(a,{candidateModel:d,splitPercentage:i})}}catch{}return n}};var Lt=require("async_hooks"),Kt=require("crypto"),ct=new Lt.AsyncLocalStorage,u=()=>(0,Kt.randomUUID)(),G=()=>ct.getStore();function W(r,e){return ct.run(r,e)}function xe(r,e){let n=G(),t={traceId:r.traceId??n?.traceId??u(),spanId:u(),userId:r.userId??n?.userId,sessionId:r.sessionId??n?.sessionId,tags:{...n?.tags,...r.tags},agentId:r.agentId??n?.agentId,agentName:r.agentName??n?.agentName,agentRole:r.agentRole??n?.agentRole,agentFramework:r.agentFramework??n?.agentFramework,parentAgentId:r.agentId?n?.agentId:n?.parentAgentId,conversationTurn:n?.conversationTurn,availableTools:n?.availableTools};return ct.run(t,e)}function Be(r,e){return xe(e??{},r)}var $t=Be,Wt=xe;function ze(){try{return P()}catch{return null}}var ut=new Set;function oe(r){ut.add(r)}function X(r){ut.delete(r)}function Ue(){return ut.size>0}var Ze=!1,Je=!1,Bt=!1,Te=null,Oe=null,lt=null,ps=(async()=>{try{Te=await import("openai/resources/chat/completions")}catch{}try{Oe=await import("@anthropic-ai/sdk/resources/messages")}catch{}try{lt=await import("@google/generative-ai")}catch{}zt()})();function Zt(r){async function e(n,t){let s=ze();if(!s||Ue())return r.call(this,n,t);let o=performance.now(),a=G(),d=u(),i=a?.traceId??u(),l=n?.model??"unknown",p=n?.stream===!0;try{let c=await r.call(this,n,t);if(p){let m=c[Symbol.asyncIterator]?.bind(c);return m&&(c[Symbol.asyncIterator]=function(){let g=m(),f=0,S=0,b="",I;return{async next(){let{value:k,done:y}=await g.next();return y?(s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:l,operation:"chat",latency_ms:performance.now()-o,ttft_ms:I,stream:!0,input_tokens:f,output_tokens:S,finish_reason:b,status:"success",span_kind:"llm",agent_id:a?.agentId,agent_name:a?.agentName,agent_role:a?.agentRole,environment:s.environment,sdk_version:"1.0.0"}),{value:k,done:!0}):(I||(I=performance.now()-o),k?.usage&&(f=k.usage.prompt_tokens??f,S=k.usage.completion_tokens??S),k?.choices?.[0]?.finish_reason&&(b=k.choices[0].finish_reason),{value:k,done:!1})},[Symbol.asyncIterator](){return this}}}),c}return s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:c.model??l,operation:"chat",latency_ms:performance.now()-o,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:a?.agentId,agent_name:a?.agentName,agent_role:a?.agentRole,...s.storePrompts?{prompt_text:s.redactForStorage(n.messages),completion_text:s.redactForStorage(c.choices?.[0]?.message?.content??"")}:{},environment:s.environment,sdk_version:"1.0.0"}),c}catch(c){throw s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"openai",model:l,operation:"chat",latency_ms:performance.now()-o,stream:p,input_tokens:0,output_tokens:0,status:"error",error_code:String(c.status??"unknown"),error_message:String(c.message).slice(0,500),span_kind:"llm",environment:s.environment,sdk_version:"1.0.0"}),c}}return e.__lumiqAutoPatched=!0,e}function Pn(){if(!Ze&&Te)try{let r=Te.Completions;if(!r?.prototype)return;let e=r.prototype.create;if(typeof e=="function"&&!e.__lumiqAutoPatched){r.prototype.create=Zt(e),Ze=!0;return}if(typeof e!="function"){if(r.__lumiqAutoPatched){Ze=!0;return}let n=r;class t extends n{constructor(...a){if(super(...a),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__lumiqAutoPatched){let d=this.create;this.create=Zt(d)}}}t.__lumiqAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Te,"Completions");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Te,"Completions",{value:t,writable:!0,enumerable:!0,configurable:!0}),Ze=!0}catch{}}}catch{}}function Jt(r){async function e(n,t){let s=ze();if(!s||Ue())return r.call(this,n,t);let o=performance.now(),a=G(),d=u(),i=a?.traceId??u(),l=n?.model??"unknown",p=n?.stream===!0;try{let c=await r.call(this,n,t);if(p){let m=c[Symbol.asyncIterator]?.bind(c);return m&&(c[Symbol.asyncIterator]=function(){let g=m(),f=0,S=0,b="",I;return{async next(){let{value:k,done:y}=await g.next();return y?(s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:l,operation:"messages",latency_ms:performance.now()-o,ttft_ms:I,stream:!0,input_tokens:f,output_tokens:S,finish_reason:b,status:"success",span_kind:"llm",agent_id:a?.agentId,agent_name:a?.agentName,agent_role:a?.agentRole,environment:s.environment,sdk_version:"1.0.0"}),{value:k,done:!0}):(I||(I=performance.now()-o),k?.type==="message_delta"&&k?.usage&&(S=k.usage.output_tokens??S),k?.type==="message_start"&&k?.message?.usage&&(f=k.message.usage.input_tokens??f),k?.type==="message_delta"&&k?.delta?.stop_reason&&(b=k.delta.stop_reason),{value:k,done:!1})},[Symbol.asyncIterator](){return this}}}),c}return s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:c.model??l,operation:"messages",latency_ms:performance.now()-o,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:a?.agentId,agent_name:a?.agentName,agent_role:a?.agentRole,...s.storePrompts?{prompt_text:s.redactForStorage(n.messages),completion_text:s.redactForStorage(c.content?.filter(m=>m.type==="text").map(m=>m.text).join("")??"")}:{},environment:s.environment,sdk_version:"1.0.0"}),c}catch(c){throw s.enqueue({event_id:u(),project_id:"",trace_id:i,span_id:d,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:l,operation:"messages",latency_ms:performance.now()-o,stream:p,input_tokens:0,output_tokens:0,status:"error",error_code:String(c.status??"unknown"),error_message:String(c.message).slice(0,500),span_kind:"llm",environment:s.environment,sdk_version:"1.0.0"}),c}}return e.__lumiqAutoPatched=!0,e}function En(){if(!Je&&Oe)try{let r=Oe.Messages;if(!r?.prototype)return;let e=r.prototype.create;if(typeof e=="function"&&!e.__lumiqAutoPatched){r.prototype.create=Jt(e),Je=!0;return}if(typeof e!="function"){if(r.__lumiqAutoPatched){Je=!0;return}let n=r;class t extends n{constructor(...a){if(super(...a),Object.prototype.hasOwnProperty.call(this,"create")&&!this.create?.__lumiqAutoPatched){let d=this.create;this.create=Jt(d)}}}t.__lumiqAutoPatched=!0;let s=Object.getOwnPropertyDescriptor(Oe,"Messages");if(s&&(s.writable!==!1||s.configurable))try{Object.defineProperty(Oe,"Messages",{value:t,writable:!0,enumerable:!0,configurable:!0}),Je=!0}catch{}}}catch{}}function Gn(){if(!Bt&<)try{let t=function(s,o){let a=n.call(this,s,o),d=a.generateContent?.bind(a),i=a.generateContentStream?.bind(a);return!d||d.__lumiqAutoPatched||(a.generateContent=async l=>{let p=ze();if(!p||Ue())return d(l);let c=performance.now(),m=G(),g=u(),f=m?.traceId??u(),S=s.model??"gemini-1.5-flash";try{let b=await d(l),I=b.response?.usageMetadata;return p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:S,operation:"generateContent",latency_ms:performance.now()-c,stream:!1,input_tokens:I?.promptTokenCount??0,output_tokens:I?.candidatesTokenCount??0,finish_reason:b.response?.candidates?.[0]?.finishReason??"",status:"success",span_kind:"llm",environment:p.environment,sdk_version:"1.0.0"}),b}catch(b){throw p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:S,operation:"generateContent",latency_ms:performance.now()-c,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:String(b.message).slice(0,500),span_kind:"llm",environment:p.environment,sdk_version:"1.0.0"}),b}},a.generateContent.__lumiqAutoPatched=!0,i&&(a.generateContentStream=async l=>{let p=ze();if(!p||Ue())return i(l);let c=performance.now(),m=G(),g=u(),f=m?.traceId??u(),S=s.model??"gemini-1.5-flash",b=await i(l),I=b.stream,k=0,y=0,x;return b.stream=(async function*(){try{for await(let _ of I){x||(x=performance.now()-c);let E=_.usageMetadata;E&&(k=E.promptTokenCount??k,y=E.candidatesTokenCount??y),yield _}p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:S,operation:"generateContent",latency_ms:performance.now()-c,ttft_ms:x,stream:!0,input_tokens:k,output_tokens:y,status:"success",span_kind:"llm",environment:p.environment,sdk_version:"1.0.0"})}catch(_){throw p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google",model:S,operation:"generateContent",latency_ms:performance.now()-c,ttft_ms:x,stream:!0,input_tokens:k,output_tokens:y,status:"error",error_message:String(_.message).slice(0,500),span_kind:"llm",environment:p.environment,sdk_version:"1.0.0"}),_}})(),b})),a};var r=t;let e=lt?.GoogleGenerativeAI;if(!e?.prototype?.getGenerativeModel||e.prototype.getGenerativeModel.__lumiqAutoPatched)return;let n=e.prototype.getGenerativeModel;t.__lumiqAutoPatched=!0,e.prototype.getGenerativeModel=t,Bt=!0}catch{}}function zt(){Pn(),En(),Gn()}function Ae(){zt()}var ve=class{apiKey;endpoint;baseURL;environment;storePrompts;redactKeys;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.sampleRate=e.sampleRate??1,this.debug=e.debug??!1,this.enableOTel=e.enableOTel??!1,this.projectId=e.projectId,this.prompts=new ke(this),e.enableZespanPilot!==!1&&e.projectId?this.configClient=new We({baseUrl:this.baseURL,apiKey:this.apiKey,projectId:e.projectId}):this.configClient=null,this.batch=new Le(this,{maxSize:e.batchSize??50,flushInterval:e.flushInterval??2e3},this.configClient??void 0),process.once("beforeExit",()=>this.batch.flush()),this.enableOTel&&Ce({endpoint:e.otelEndpoint,serviceName:e.otelServiceName,sampleRate:e.sampleRate,apiKey:this.apiKey,environment:this.environment}),e.autopatch!==!1&&Ae()}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. PII (emails, phone numbers, SSNs, credit cards) is automatically redacted server-side. To opt out: { storePrompts: false }")),this.batch.push(e))}redactForStorage(e){return Dt(e,this.redactKeys)}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 fe().startSpan(e.name,{kind:e.kind??H.SpanKind.INTERNAL,attributes:e.attributes??{}})}async withSpan(e,n,t){let o=fe().startSpan(e,{kind:t?.kind??H.SpanKind.INTERNAL,attributes:t?.attributes??{}});try{let a=await n(o);return o.setStatus({code:H.SpanStatusCode.OK}),a}catch(a){throw o.setStatus({code:H.SpanStatusCode.ERROR,message:a.message}),o.recordException(a),a}finally{o.end()}}},pt=null,Ve=r=>{pt=new ve(r)},P=()=>{if(!pt)throw new Error("Call zespan.init() first");return pt};var Ut=Ve,Vt=P;var J=class extends Error{phase;results;constructor(e,n){super(`Guardrail blocked ${e} content`),this.name="GuardrailBlockedError",this.phase=e,this.results=n}};function Q(r,e){if(!r)return null;if(r===!0)return{pre:!0,post:!0,failClosed:!1,operation:e};let n=typeof r.pre=="boolean"||typeof r.post=="boolean";return{pre:n?!!r.pre:!0,post:n?!!r.post:!0,failClosed:!!r.failClosed,operation:r.operation??e}}function ee(r,e){return e?.modifiedText?e.modifiedText:r}async function B(r,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 r.checkGuardrails({...n,text:t.slice(0,5e4),operation:n.operation??e.operation});if(!s.allowed)throw new J(n.phase,s.results);return s}catch(s){if(s instanceof J||e.failClosed)throw s;return null}}function Dn(r){let e={};try{let n=[],t=[];for(let s of r){let o=typeof s?.content=="string"?s.content:Array.isArray(s?.content)?s.content.map(a=>typeof a=="string"?a:a?.text??"").join(" "):"";s?.role==="system"&&n.push(o),t.push(o)}for(let s of n){try{let o=s.match(/You are the (\w+)Agent/i);if(o){e.agent_name=o[1];break}}catch{}try{let o=s.match(/Agent Name:\s*(\w+)/i);if(o){e.agent_name=o[1];break}}catch{}}for(let s of n)try{let o=s.match(/Role:\s*(orchestrator|specialist|planner|executor|critic)/i);if(o?.[1]){e.agent_role=o[1].toLowerCase();break}}catch{}try{r.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 re(r,e){let n=Dn(r);try{!n.has_planning&&e&&/^o[13]/.test(e)&&(n.has_planning=!0)}catch{}return n}function ie(r){try{let e=r.filter(s=>s?.role==="user").length,n=r[r.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 de(r){try{return r.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 He(r){try{let e=r?.[0]?.message?.tool_calls??[],n=[],t={};for(let s of e)try{let o=s?.function?.name;if(typeof o=="string"&&o){n.includes(o)||n.push(o);try{t[o]=typeof s.function.arguments=="string"?JSON.parse(s.function.arguments):s.function.arguments??{}}catch{t[o]=s.function?.arguments??{}}}}catch{}return{tools_used:n,tool_call_args:t}}catch{return{tools_used:[],tool_call_args:{}}}}function Qe(r){try{let e={};for(let s of r)try{let o=typeof s?.index=="number"?s.index:0;e[o]||(e[o]={name:"",argumentsStr:""}),s?.function?.name&&(e[o].name+=s.function.name),s?.function?.arguments&&(e[o].argumentsStr+=s.function.arguments)}catch{}let n=[],t={};for(let s of Object.values(e))try{let o=s.name;if(o&&!n.includes(o)){n.push(o);try{t[o]=s.argumentsStr?JSON.parse(s.argumentsStr):{}}catch{t[o]=s.argumentsStr}}}catch{}return{tools_used:n,tool_call_args:t}}catch{return{tools_used:[],tool_call_args:{}}}}var Qt=require("crypto"),ce=require("@opentelemetry/api");async function Se(r,e){if(!e||!e.enabled)return r();let n;for(let t=0;t<=e.maxRetries;t++)try{return await r()}catch(s){if(n=s,e.retryOnStatusCodes.length>0&&!e.retryOnStatusCodes.includes(s?.status))throw s;if(t>=e.maxRetries)break;let o=Math.min(1e3*Math.pow(e.backoffMultiplier,t),3e4);await Fn(o)}throw n}function Fn(r){return new Promise(e=>setTimeout(e,r))}var mt=class{constructor(e){this.max=e;this.counter=e}counter;queue=[];acquire(){return this.counter>0?(this.counter--,Promise.resolve()):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()}}},Ht=new Map;function be(r,e){let n=Ht.get(r);return n||(n=new mt(e),Ht.set(r,n)),n}var Xe=r=>(0,Qt.createHash)("sha256").update(r).digest("hex");function Ln(r,e,n="openai"){return{"gen_ai.system":n,"gen_ai.model":e,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(r.messages),"gen_ai.request.max_tokens":r.max_tokens,"gen_ai.request.temperature":r.temperature,"gen_ai.request.top_p":r.top_p}}async function*Kn(r,e){let{lumiq:n,t0:t,traceId:s,spanId:o,parent:a,params:d,otelSpan:i,model:l,agentCtx:p,autoDetected:c,conversation_turn:m,message_role:g,tool_definitions:f,provider:S,operation:b}=e,I=S??"openai",k,y=0,x=0,_=0,E="",v=l,T=[],h="",A=[];try{for await(let O of r){k||(k=performance.now()-t,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:I,model:v,operation:b,latency_ms:k,ttft_ms:k,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Xe(JSON.stringify(d.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(d.messages)}:{},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0",finish_reason:"stream_start",...p,span_kind:"llm",tool_definitions:f,conversation_turn:m,message_role:g,metadata:{auto_detected:Object.keys(c).length?c:void 0}}),i&&i.setAttribute("gen_ai.response.time_to_first_token",k));let q=O.choices?.[0]?.delta?.content;if(q&&(x++,h+=q),O.choices?.[0]?.finish_reason&&(E=O.choices[0].finish_reason),O.model&&(v=O.model),O.usage&&(y=Number(O.usage.prompt_tokens||y||0),x=Number(O.usage.completion_tokens||x||0),_=Number(O.usage.prompt_tokens_details?.cached_tokens||_||0)),O.choices?.[0]?.delta?.tool_calls)for(let $ of O.choices[0].delta.tool_calls)A.push($),$.function?.name&&!T.includes($.function.name)&&T.push($.function.name);yield O}let{tools_used:R,tool_call_args:w}=Qe(A),M=R.length>0?R:T,C=performance.now()-t;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:I,model:v,operation:b,latency_ms:C,ttft_ms:k,stream:!0,input_tokens:y,output_tokens:x,cached_tokens:_,status:"success",finish_reason:E||"stream_end",tools_used:M,tool_call_args:Object.keys(w).length?w:void 0,prompt_hash:Xe(JSON.stringify(d.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(d.messages),completion_text:n.redactForStorage(h)}:{},...p,span_kind:"llm",tool_definitions:f,conversation_turn:m,message_role:g,metadata:{usage:{prompt_tokens:y,completion_tokens:x,cached_tokens:_},auto_detected:Object.keys(c).length?c:void 0},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setAttribute("gen_ai.usage.output_tokens",x),i.setAttribute("gen_ai.usage.total_tokens",x),i.setAttribute("gen_ai.response.finish_reason",E||"stream_end"),i.setAttribute("gen_ai.response.latency",C))}catch(R){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:I,model:v,operation:b,latency_ms:performance.now()-t,ttft_ms:k,stream:!0,input_tokens:0,output_tokens:x,cost_usd:0,status:"error",error_code:String(R.status??"unknown"),error_message:String(R.message).slice(0,500),...p,span_kind:"llm",conversation_turn:m,message_role:g,metadata:{auto_detected:Object.keys(c).length?c:void 0},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setStatus({code:ce.SpanStatusCode.ERROR,message:R.message}),i.recordException(R)),R}}function Re(r,e={}){let n=r,t=n.chat.completions.create.bind(n.chat.completions),s=Q(e.guardrails,"chat"),o=e.providerOverride??"openai",a=e.operation??"chat";return n.chat.completions.create=async(d,i)=>{let l=P(),p=performance.now(),c=G(),m=u(),g=c?.traceId??u(),f=d.model??"gpt-4",S;if(l.configClient){let w=l.configClient.getAbTest(a);if(w)Math.random()<w.splitPercentage/100?(f=w.candidateModel,S={ab_test:!0,ab_variant:"candidate"}):S={ab_test:!0,ab_variant:"control"},d={...d,model:f};else{let M=l.configClient.getModel(a,f);if(M!==f){let C=f;f=M,d={...d,model:M},l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:o,model:M,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:C,override_model:M},environment:l.environment,sdk_version:"1.0.0"})}}}let b=null,I=null,k=c?.agentId?{agent_id:c.agentId,agent_name:c.agentName,agent_role:c.agentRole,agent_framework:c.agentFramework,parent_agent_id:c.parentAgentId}:{},y=re(d.messages??[],d.model),{conversation_turn:x,message_role:_}=ie(d.messages??[]),E=d.tools?.length?de(d.tools):void 0,v=null,T=l.enableOTel?ce.trace.getTracer("zespan-sdk"):null;T&&(v=T.startSpan(`chat.completions ${f}`,{kind:ce.SpanKind.CLIENT,attributes:Ln(d,f,o)}));let h;if(l.configClient){let w=l.configClient.getTimeout(a);w&&(h=AbortSignal.timeout(w.timeoutMs))}let A=l.configClient?.getRetryPolicy(a)??null,R=l.configClient?.getConcurrencyLimit(a)??null;try{b=await B(l,s,{text:JSON.stringify(d.messages??[]),phase:"pre",traceId:g,spanId:m,model:f,operation:a,agentName:c?.agentName});let w=()=>Se(()=>W({traceId:g,spanId:m,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>t(d,h?{...i,signal:h}:i)),A),M=await(R!==null?be(`${l.projectId??"default"}:${a}`,R).run(w):w());if(d.stream===!0)return Kn(M,{lumiq:l,t0:p,traceId:g,spanId:m,parent:c,params:d,otelSpan:v,model:f,agentCtx:k,autoDetected:y,conversation_turn:x,message_role:_,tool_definitions:E,provider:o,operation:a});let{prompt_tokens:O,completion_tokens:q,prompt_tokens_details:$}=M.usage??{},j=$?.cached_tokens??0,Z=M.model??d.model,D=M.usage?.completion_tokens_details?.reasoning_tokens,L=M.choices?.[0]?.message?.content||"";I=await B(l,s,{text:L,phase:"post",traceId:g,spanId:m,model:Z,operation:a,agentName:c?.agentName});let V=ee(L,I);V!==L&&typeof M?.choices?.[0]?.message?.content=="string"&&(M.choices[0].message.content=V);let{tools_used:N,tool_call_args:z}=He(M.choices??[]);return l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:o,model:Z,operation:a,latency_ms:performance.now()-p,stream:!1,input_tokens:O??0,output_tokens:q??0,cached_tokens:j,...D?{reasoning_tokens:D}:{},status:"success",finish_reason:M.choices?.[0]?.finish_reason??"",tools_used:N.length>0?N:M.choices?.[0]?.message?.tool_calls?.map(K=>K.function.name)??[],tool_call_args:Object.keys(z).length?z:void 0,prompt_hash:Xe(JSON.stringify(d.messages)),...l.storePrompts?{prompt_text:l.redactForStorage(d.messages),completion_text:l.redactForStorage(V)}:{},...k,span_kind:"llm",tool_definitions:E,conversation_turn:x,message_role:_,metadata:{usage:M.usage??null,guardrails:{pre:b?{matched:b.results.length,modified:!!b.modifiedText}:null,post:I?{matched:I.results.length,modified:!!I.modifiedText}:null},auto_detected:Object.keys(y).length?y:void 0,...S??{}},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),v&&(v.setAttribute("gen_ai.usage.input_tokens",O??0),v.setAttribute("gen_ai.usage.output_tokens",q??0),v.setAttribute("gen_ai.usage.total_tokens",(O??0)+(q??0)),v.setAttribute("gen_ai.usage.cached_tokens",j),v.setAttribute("gen_ai.response.finish_reason",M.choices?.[0]?.finish_reason??""),v.setAttribute("gen_ai.response.latency",performance.now()-p),v.setStatus({code:ce.SpanStatusCode.OK}),v.end()),M}catch(w){if(w?.name==="TimeoutError"||w?.code==="ABORT_ERR"||h&&h.aborted)throw l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:o,model:d.model,operation:a,latency_ms:performance.now()-p,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(w.message).slice(0,500),...k,span_kind:"llm",conversation_turn:x,message_role:_,metadata:{auto_detected:Object.keys(y).length?y:void 0},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),v&&(v.setStatus({code:ce.SpanStatusCode.ERROR,message:w.message}),v.recordException(w),v.end()),w;let C=l.configClient?.getFallback(a)??null;if(C&&C.model){let $=String(w.message??"")+String(w.status??"")+String(w.code??"");if(C.conditions.length===0||C.conditions.some(Z=>$.toLowerCase().includes(Z.toLowerCase()))){let Z=f,D={...d,model:C.model};l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:o,model:C.model,operation:a,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:Z,fallback_model:C.model,reason:String(w.message).slice(0,200)},environment:l.environment,sdk_version:"1.0.0"});try{let L=await W({traceId:g,spanId:m,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>t(D,i)),{prompt_tokens:V,completion_tokens:N,prompt_tokens_details:z}=L.usage??{},K=z?.cached_tokens??0,F=L.model??C.model;return l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:o,model:F,operation:a,latency_ms:performance.now()-p,stream:!1,input_tokens:V??0,output_tokens:N??0,cached_tokens:K,status:"success",finish_reason:L.choices?.[0]?.finish_reason??"",prompt_hash:Xe(JSON.stringify(d.messages)),...k,span_kind:"llm",conversation_turn:x,message_role:_,metadata:{usage:L.usage??null,fallback_used:!0,original_model:Z,auto_detected:Object.keys(y).length?y:void 0},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),v&&(v.setStatus({code:ce.SpanStatusCode.OK}),v.end()),L}catch(L){throw v&&(v.setStatus({code:ce.SpanStatusCode.ERROR,message:L.message}),v.recordException(L),v.end()),L}}}let O=w instanceof J,q=O?"error":w.status===429?"rate_limited":w.status===408?"timeout":"error";throw l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:o,model:d.model,operation:a,latency_ms:performance.now()-p,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:q,error_code:O?"guardrail_blocked":String(w.status??"unknown"),error_message:String(w.message).slice(0,500),...k,span_kind:"llm",conversation_turn:x,message_role:_,metadata:{auto_detected:Object.keys(y).length?y:void 0},user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),v&&(v.setStatus({code:ce.SpanStatusCode.ERROR,message:w.message}),v.recordException(w),v.end()),w}},r}var Xt=require("crypto"),le=require("@opentelemetry/api");var Ye=r=>(0,Xt.createHash)("sha256").update(r).digest("hex");function $n(r){let e=Array.isArray(r?.messages)?[...r.messages]:[],n=r?.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(`
|
|
3
|
+
`);if(t.length>0)return[{role:"system",content:t},...e]}return e}function Wn(r,e){return{"gen_ai.system":"anthropic","gen_ai.model":e,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(r.messages),"gen_ai.request.max_tokens":r.max_tokens,"gen_ai.request.temperature":r.temperature}}async function*Bn(r,e){let{lumiq:n,t0:t,traceId:s,spanId:o,parent:a,params:d,otelSpan:i,agentCtx:l,tool_definitions:p,autoDetected:c,conversation_turn:m,message_role:g,operation:f,detectionMessages:S}=e,b,I=0,k=0,y=0,x=0,_="",E=d.model,v=[],T="";try{for await(let A of r){if(!b&&A.type==="content_block_start"&&(b=performance.now()-t,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:E,operation:f,latency_ms:b,ttft_ms:b,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Ye(JSON.stringify(S)),...n.storePrompts?{prompt_text:n.redactForStorage(S)}:{},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0",finish_reason:"stream_start",...l,span_kind:"llm",tool_definitions:p,conversation_turn:m,message_role:g,metadata:{auto_detected:Object.keys(c).length?c:void 0}}),i&&i.setAttribute("gen_ai.response.time_to_first_token",b)),A.type==="content_block_delta"&&A.delta?.type==="text_delta"&&(x++,T+=A.delta.text||""),A.type==="message_delta"&&A.delta?.stop_reason&&(_=A.delta.stop_reason),A.type==="message_delta"&&A.usage&&(I=Number(A.usage.input_tokens||I||0),x=Number(A.usage.output_tokens||x||0),k=Number(A.usage.cache_read_input_tokens||k||0)),A.type==="message_start"&&A.message?.usage&&(I=Number(A.message.usage.input_tokens||I||0),x=Number(A.message.usage.output_tokens||x||0),k=Number(A.message.usage.cache_read_input_tokens||k||0)),A.type==="content_block_start"&&A.content_block?.type==="tool_use"){let R=A.content_block.name;R&&!v.includes(R)&&v.push(R)}yield A}let h=performance.now()-t;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:E,operation:f,latency_ms:h,ttft_ms:b,stream:!0,input_tokens:I,output_tokens:x,cached_tokens:k,reasoning_tokens:y,status:"success",finish_reason:_||"stream_end",tools_used:v,prompt_hash:Ye(JSON.stringify(S)),...n.storePrompts?{prompt_text:n.redactForStorage(S),completion_text:n.redactForStorage(T)}:{},...l,span_kind:"llm",tool_definitions:p,conversation_turn:m,message_role:g,metadata:{usage:{input_tokens:I,output_tokens:x,cache_read_input_tokens:k,reasoning_tokens:y},auto_detected:Object.keys(c).length?c:void 0},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setAttribute("gen_ai.usage.output_tokens",x),i.setAttribute("gen_ai.response.finish_reason",_||"stream_end"))}catch(h){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:E,operation:f,latency_ms:performance.now()-t,ttft_ms:b,stream:!0,input_tokens:0,output_tokens:x,cost_usd:0,status:"error",error_code:String(h.status??h.type??"unknown"),error_message:String(h.message).slice(0,500),...l,span_kind:"llm",conversation_turn:m,message_role:g,metadata:{auto_detected:Object.keys(c).length?c:void 0},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setStatus({code:le.SpanStatusCode.ERROR,message:h.message}),i.recordException(h)),h}}function gt(r,e={}){let n=r,t=n.messages.create.bind(n.messages),s=Q(e.guardrails,"chat"),o=e.operation??"chat";return n.messages.create=async(a,d)=>{let i=P(),l=performance.now(),p=G(),c=u(),m=p?.traceId??u(),g=a.model??"claude-3-5-sonnet-20241022",f;if(i.configClient){let C=i.configClient.getAbTest(o);if(C)Math.random()<C.splitPercentage/100?(g=C.candidateModel,f={ab_test:!0,ab_variant:"candidate"}):f={ab_test:!0,ab_variant:"control"},a={...a,model:g};else{let O=i.configClient.getModel(o,g);if(O!==g){let q=g;g=O,a={...a,model:O},i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:O,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:q,override_model:O},environment:i.environment,sdk_version:"1.0.0"})}}}let S=null,b=null,I=$n(a),k=re(I,g),{conversation_turn:y,message_role:x}=ie(I),_=p?.agentName??k.agent_name,E=p?.agentRole??k.agent_role,v=p?.agentId||_||E?{agent_id:p?.agentId,agent_name:_,agent_role:E,agent_framework:p?.agentFramework,parent_agent_id:p?.parentAgentId}:{},T=a.tools?.length?de(a.tools):void 0,h=null,A=i.enableOTel?le.trace.getTracer("zespan-sdk"):null;A&&(h=A.startSpan(`messages.create ${g}`,{kind:le.SpanKind.CLIENT,attributes:Wn(a,g)}));let R;if(i.configClient){let C=i.configClient.getTimeout(o);C&&(R=AbortSignal.timeout(C.timeoutMs))}let w=i.configClient?.getRetryPolicy(o)??null,M=i.configClient?.getConcurrencyLimit(o)??null;try{S=await B(i,s,{text:JSON.stringify(a.messages??[]),phase:"pre",traceId:m,spanId:c,model:g,operation:o,agentName:p?.agentName});let C=()=>Se(()=>W({traceId:m,spanId:c,userId:p?.userId,sessionId:p?.sessionId,tags:p?.tags,agentId:p?.agentId,agentName:_,agentRole:E,agentFramework:p?.agentFramework,parentAgentId:p?.parentAgentId,conversationTurn:y,availableTools:T},()=>t(a,R?{...d,signal:R}:d)),w),O=await(M!==null?be(`${i.projectId??"default"}:${o}`,M).run(C):C());if(a.stream===!0)return Bn(O,{lumiq:i,t0:l,traceId:m,spanId:c,parent:p,params:a,otelSpan:h,agentCtx:v,tool_definitions:T,autoDetected:k,conversation_turn:y,message_role:x,operation:o,detectionMessages:I});let $=O.usage?.input_tokens??0,j=O.usage?.output_tokens??0,Z=O.usage?.cache_read_input_tokens??0,D=O.model??a.model,L=O.content?.find(F=>F.type==="text")?.text||"",V=(O.content??[]).filter(F=>F.type==="tool_use"),N=V.map(F=>F.name).filter(Boolean),z={};for(let F of V)F.name&&(z[F.name]=F.input??{});b=await B(i,s,{text:L,phase:"post",traceId:m,spanId:c,model:D,operation:o,agentName:p?.agentName});let K=ee(L,b);if(K!==L){let F=O.content?.find(te=>te.type==="text");F&&typeof F.text=="string"&&(F.text=K)}return i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:D,operation:o,latency_ms:performance.now()-l,stream:!1,input_tokens:$,output_tokens:j,cached_tokens:Z,status:"success",finish_reason:O.stop_reason??"",tools_used:N.length>0?N:O.content?.filter(F=>F.type==="tool_use").map(F=>F.name)??[],tool_call_args:Object.keys(z).length?z:void 0,prompt_hash:Ye(JSON.stringify(I)),...i.storePrompts?{prompt_text:i.redactForStorage(I),completion_text:i.redactForStorage(K)}:{},...v,span_kind:"llm",tool_definitions:T,conversation_turn:y,message_role:x,metadata:{usage:O.usage??null,guardrails:{pre:S?{matched:S.results.length,modified:!!S.modifiedText}:null,post:b?{matched:b.results.length,modified:!!b.modifiedText}:null},auto_detected:Object.keys(k).length?k:void 0,...f??{}},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:i.environment,sdk_version:"1.0.0"}),h&&(h.setAttribute("gen_ai.usage.input_tokens",$),h.setAttribute("gen_ai.usage.output_tokens",j),h.setAttribute("gen_ai.usage.cached_tokens",Z),h.setAttribute("gen_ai.response.finish_reason",O.stop_reason??""),h.setAttribute("gen_ai.response.latency",performance.now()-l),h.setStatus({code:le.SpanStatusCode.OK}),h.end()),O}catch(C){if(C?.name==="TimeoutError"||C?.code==="ABORT_ERR"||R&&R.aborted)throw i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:a.model,operation:o,latency_ms:performance.now()-l,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(C.message).slice(0,500),...v,span_kind:"llm",conversation_turn:y,message_role:x,metadata:{auto_detected:Object.keys(k).length?k:void 0},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:i.environment,sdk_version:"1.0.0"}),h&&(h.setStatus({code:le.SpanStatusCode.ERROR,message:C.message}),h.recordException(C),h.end()),C;let q=i.configClient?.getFallback(o)??null;if(q&&q.model){let Z=String(C.message??"")+String(C.status??"")+String(C.code??"");if(q.conditions.length===0||q.conditions.some(L=>Z.toLowerCase().includes(L.toLowerCase()))){let L=g,V={...a,model:q.model};i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:q.model,operation:o,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:L,fallback_model:q.model,reason:String(C.message).slice(0,200)},environment:i.environment,sdk_version:"1.0.0"});try{let N=await W({traceId:m,spanId:c,userId:p?.userId,sessionId:p?.sessionId,tags:p?.tags},()=>t(V,d)),z=N.usage?.input_tokens??0,K=N.usage?.output_tokens??0,F=N.usage?.cache_read_input_tokens??0,te=N.model??q.model;return i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:te,operation:o,latency_ms:performance.now()-l,stream:!1,input_tokens:z,output_tokens:K,cached_tokens:F,status:"success",finish_reason:N.stop_reason??"",prompt_hash:Ye(JSON.stringify(I)),...v,span_kind:"llm",conversation_turn:y,message_role:x,metadata:{usage:N.usage??null,fallback_used:!0,original_model:L,auto_detected:Object.keys(k).length?k:void 0},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:i.environment,sdk_version:"1.0.0"}),h&&(h.setStatus({code:le.SpanStatusCode.OK}),h.end()),N}catch(N){throw h&&(h.setStatus({code:le.SpanStatusCode.ERROR,message:N.message}),h.recordException(N),h.end()),N}}}let $=C instanceof J,j=$?"error":C.status===429||C.type==="overloaded_error"?"rate_limited":C.status===408?"timeout":"error";throw i.enqueue({event_id:u(),project_id:"",trace_id:m,span_id:c,parent_span_id:p?.spanId,timestamp:new Date().toISOString(),provider:"anthropic",model:a.model,operation:o,latency_ms:performance.now()-l,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:j,error_code:$?"guardrail_blocked":String(C.status??C.type??"unknown"),error_message:String(C.message).slice(0,500),...v,span_kind:"llm",conversation_turn:y,message_role:x,metadata:{auto_detected:Object.keys(k).length?k:void 0},user_id:p?.userId,session_id:p?.sessionId,tags:p?.tags,environment:i.environment,sdk_version:"1.0.0"}),h&&(h.setStatus({code:le.SpanStatusCode.ERROR,message:C.message}),h.recordException(C),h.end()),C}},r}var en=require("crypto"),U=require("@opentelemetry/api");var Ne=r=>(0,en.createHash)("sha256").update(r).digest("hex");function et(r){let e=a=>{if(typeof a=="string")return a;if(Array.isArray(a))return a.map(d=>typeof d=="string"?d:typeof d?.text=="string"?d.text:"").filter(Boolean).join(`
|
|
4
|
+
`);if(a&&typeof a=="object"){if(typeof a.text=="string")return a.text;if(Array.isArray(a.parts))return a.parts.map(d=>typeof d?.text=="string"?d.text:"").filter(Boolean).join(`
|
|
5
|
+
`)}return""},n=r?.contents??r,t=[],s=r?.systemInstruction??r?.system_instruction,o=e(s);if(o.length>0&&t.push({role:"system",content:o}),typeof n=="string")return t.push({role:"user",content:n}),t;if(Array.isArray(n)){for(let a of n){if(typeof a=="string"){t.push({role:"user",content:a});continue}if(a&&typeof a=="object"){let d=typeof a.role=="string"?a.role:"user",i=e(a);i.length>0&&t.push({role:d,content:i})}}return t}if(n&&typeof n=="object"){let a=typeof n.role=="string"?n.role:"user",d=e(n);d.length>0&&t.push({role:a,content:d})}return t}function tt(r,e){return{"gen_ai.system":"google","gen_ai.model":e,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(r),"gen_ai.request.max_tokens":r.generationConfig?.maxOutputTokens,"gen_ai.request.temperature":r.generationConfig?.temperature,"gen_ai.request.top_p":r.generationConfig?.topP}}function _t(r){try{if(typeof r?.text=="function"){let n=r.text();if(typeof n=="string"&&n.length>0)return n}}catch{}return(r?.candidates?.[0]?.content?.parts??[]).map(n=>typeof n?.text=="string"?n.text:"").filter(Boolean).join("")}async function*Yt(r,e){let{lumiq:n,t0:t,traceId:s,spanId:o,parent:a,params:d,modelName:i,otelSpan:l,streamResult:p,agentCtx:c,tool_definitions:m,autoDetected:g,conversation_turn:f,message_role:S,operation:b}=e,I,k=0,y=0,x=0,_=0,E="",v=[],T="";try{for await(let w of r){I||(I=performance.now()-t,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:b,latency_ms:I,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:Ne(JSON.stringify(d)),...n.storePrompts?{prompt_text:n.redactForStorage(d)}:{},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0",finish_reason:"stream_start",...c,span_kind:"llm",tool_definitions:m,conversation_turn:f,message_role:S,metadata:{auto_detected:Object.keys(g).length?g:void 0}}),l&&l.setAttribute("gen_ai.response.time_to_first_token",I));let M=(typeof w?.text=="function"?w.text():w?.text)||w?.candidates?.[0]?.content?.parts?.map(q=>q?.text||"").join("")||"";M&&(k++,T+=M),w.candidates?.[0]?.finishReason&&(E=w.candidates[0].finishReason);let C=Array.isArray(w?.functionCalls)?w.functionCalls:w?.functionCalls?[w.functionCalls]:[],O=(w?.candidates?.[0]?.content?.parts??[]).map(q=>q?.functionCall).filter(Boolean);for(let q of[...C,...O])q?.name&&!v.includes(q.name)&&v.push(q.name);yield w}let h=await p?.response;h?.usageMetadata&&(y=Number(h.usageMetadata.promptTokenCount||y||0),k=Number(h.usageMetadata.candidatesTokenCount||k||0),x=Number(h.usageMetadata.cachedContentTokenCount||x||0),_=Number(h.usageMetadata.thoughtsTokenCount||_||0));let A=_t(h);A&&(T=A);let R=performance.now()-t;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:b,latency_ms:R,ttft_ms:I,stream:!0,input_tokens:y,output_tokens:k,cached_tokens:x,reasoning_tokens:_,status:"success",finish_reason:E||"stream_end",tools_used:v,prompt_hash:Ne(JSON.stringify(d)),...n.storePrompts?{prompt_text:n.redactForStorage(d),completion_text:n.redactForStorage(T)}:{},...c,span_kind:"llm",tool_definitions:m,conversation_turn:f,message_role:S,metadata:{usage:h?.usageMetadata??{promptTokenCount:y,candidatesTokenCount:k,cachedContentTokenCount:x,thoughtsTokenCount:_},auto_detected:Object.keys(g).length?g:void 0},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"}),l&&(l.setAttribute("gen_ai.completion",T),l.setAttribute("gen_ai.usage.input_tokens",y),l.setAttribute("gen_ai.usage.output_tokens",k),l.setAttribute("gen_ai.usage.total_tokens",y+k),l.setAttribute("gen_ai.usage.cached_tokens",x),l.setAttribute("gen_ai.usage.reasoning_tokens",_),l.setAttribute("gen_ai.response.finish_reason",E||"stream_end"),l.setStatus({code:U.SpanStatusCode.OK}),l.end())}catch(h){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:b,latency_ms:performance.now()-t,ttft_ms:I,stream:!0,input_tokens:0,output_tokens:k,cost_usd:0,status:"error",error_code:String(h.status??"unknown"),error_message:String(h.message).slice(0,500),...c,span_kind:"llm",conversation_turn:f,message_role:S,metadata:{auto_detected:Object.keys(g).length?g:void 0},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"}),l&&(l.setStatus({code:U.SpanStatusCode.ERROR,message:h.message}),l.recordException(h),l.end()),h}}function ft(r,e={}){let n=r,t=n.getGenerativeModel.bind(n),s=Q(e.guardrails,"chat"),o=e.operation??"chat";return n.getGenerativeModel=(a,d)=>{let i=a.model,l=P(),p=!1,c=i,m;if(l.configClient){let I=l.configClient.getAbTest(o);if(I)Math.random()<I.splitPercentage/100?(c=i,i=I.candidateModel,a={...a,model:i},p=!0,m={ab_test:!0,ab_variant:"candidate"}):m={ab_test:!0,ab_variant:"control"};else{let k=l.configClient.getModel(o,i);k!==i&&(c=i,i=k,a={...a,model:k},p=!0)}}let g=t(a,d),f=g.generateContent.bind(g);g.generateContent=async(I,k)=>{let y=P(),x=performance.now(),_=G(),E=u(),v=_?.traceId??u(),T=null,h=null,A=et(I),R=re(A,i),{conversation_turn:w,message_role:M}=ie(A),C=_?.agentName??R.agent_name,O=_?.agentRole??R.agent_role,q=_?.agentId||C||O?{agent_id:_?.agentId,agent_name:C,agent_role:O,agent_framework:_?.agentFramework,parent_agent_id:_?.parentAgentId}:{},$=I?.tools?.length?de(I.tools):void 0,j=null,Z=y.enableOTel?U.trace.getTracer("zespan-sdk"):null;Z&&(j=Z.startSpan(`generateContent ${i}`,{kind:U.SpanKind.CLIENT,attributes:tt(I,i)})),p&&y.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:E,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:c,override_model:i},environment:y.environment,sdk_version:"1.0.0"});try{T=await B(y,s,{text:JSON.stringify(I??""),phase:"pre",traceId:v,spanId:E,model:i,operation:o,agentName:_?.agentName});let D;if(y.configClient){let Y=y.configClient.getTimeout(o);Y&&(D=AbortSignal.timeout(Y.timeoutMs))}let L=y.configClient?.getRetryPolicy(o)??null,V=y.configClient?.getConcurrencyLimit(o)??null,N=()=>Se(()=>W({traceId:v,spanId:E,userId:_?.userId,sessionId:_?.sessionId,tags:_?.tags,agentId:_?.agentId,agentName:C,agentRole:O,agentFramework:_?.agentFramework,parentAgentId:_?.parentAgentId,conversationTurn:w,availableTools:$},()=>f(I,D?{...k,signal:D}:k)),L),z=await(V!==null?be(`${y.projectId??"default"}:${o}`,V).run(N):N()),K=z.response,F=K.usageMetadata?.promptTokenCount??0,te=K.usageMetadata?.candidatesTokenCount??0,ne=K.usageMetadata?.cachedContentTokenCount??0,he=K.usageMetadata?.thoughtsTokenCount??0,ge=_t(K),ye=(K.candidates?.[0]?.content?.parts??[]).filter(Y=>Y?.functionCall),se=ye.map(Y=>Y.functionCall.name).filter(Boolean),ae={};for(let Y of ye)Y.functionCall?.name&&(ae[Y.functionCall.name]=Y.functionCall.args??{});h=await B(y,s,{text:ge,phase:"post",traceId:v,spanId:E,model:i,operation:o,agentName:_?.agentName});let _e=ee(ge,h);return y.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:E,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:o,latency_ms:performance.now()-x,stream:!1,input_tokens:F,output_tokens:te,cached_tokens:ne,reasoning_tokens:he,status:"success",finish_reason:K.candidates?.[0]?.finishReason??"",tools_used:se,tool_call_args:Object.keys(ae).length?ae:void 0,prompt_hash:Ne(JSON.stringify(I)),...y.storePrompts?{prompt_text:y.redactForStorage(I),completion_text:y.redactForStorage(_e)}:{},...q,span_kind:"llm",tool_definitions:$,conversation_turn:w,message_role:M,metadata:{usage:K.usageMetadata??null,guardrails:{pre:T?{matched:T.results.length,modified:!!T.modifiedText}:null,post:h?{matched:h.results.length,modified:!!h.modifiedText}:null},auto_detected:Object.keys(R).length?R:void 0,...m??{}},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:y.environment,sdk_version:"1.0.0"}),j&&(j.setAttribute("gen_ai.completion",_e),j.setAttribute("gen_ai.usage.input_tokens",F),j.setAttribute("gen_ai.usage.output_tokens",te),j.setAttribute("gen_ai.usage.total_tokens",F+te),j.setAttribute("gen_ai.usage.cached_tokens",ne),j.setAttribute("gen_ai.usage.reasoning_tokens",he),j.setAttribute("gen_ai.response.finish_reason",K.candidates?.[0]?.finishReason??""),j.setAttribute("gen_ai.response.latency",performance.now()-x),j.setStatus({code:U.SpanStatusCode.OK}),j.end()),z}catch(D){let L=D.__signal;if(D?.name==="TimeoutError"||D?.code==="ABORT_ERR")throw y.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:E,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:o,latency_ms:performance.now()-x,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:"timeout",error_message:String(D.message).slice(0,500),...q,span_kind:"llm",conversation_turn:w,message_role:M,metadata:{auto_detected:Object.keys(R).length?R:void 0},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:y.environment,sdk_version:"1.0.0"}),j&&(j.setStatus({code:U.SpanStatusCode.ERROR,message:D.message}),j.recordException(D),j.end()),D;let N=y.configClient?.getFallback(o)??null;if(N&&N.model){let F=String(D.message??"")+String(D.status??"")+String(D.code??"");if(N.conditions.length===0||N.conditions.some(ne=>F.toLowerCase().includes(ne.toLowerCase()))){let ne=i,he={...a,model:N.model},ge=t(he,d),ye=ge.generateContent.bind(ge);y.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:E,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:N.model,operation:o,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:ne,fallback_model:N.model,reason:String(D.message).slice(0,200)},environment:y.environment,sdk_version:"1.0.0"});try{let se=await W({traceId:v,spanId:E,userId:_?.userId,sessionId:_?.sessionId,tags:_?.tags},()=>ye(I,k)),ae=se.response,_e=ae.usageMetadata?.promptTokenCount??0,Y=ae.usageMetadata?.candidatesTokenCount??0,ue=ae.usageMetadata?.cachedContentTokenCount??0;return y.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:E,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:N.model,operation:o,latency_ms:performance.now()-x,stream:!1,input_tokens:_e,output_tokens:Y,cached_tokens:ue,status:"success",finish_reason:ae.candidates?.[0]?.finishReason??"",prompt_hash:Ne(JSON.stringify(I)),...q,span_kind:"llm",conversation_turn:w,message_role:M,metadata:{usage:ae.usageMetadata??null,fallback_used:!0,original_model:ne,auto_detected:Object.keys(R).length?R:void 0},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:y.environment,sdk_version:"1.0.0"}),j&&(j.setStatus({code:U.SpanStatusCode.OK}),j.end()),se}catch(se){throw j&&(j.setStatus({code:U.SpanStatusCode.ERROR,message:se.message}),j.recordException(se),j.end()),se}}}let z=D instanceof J,K=z?"error":D.status===429?"rate_limited":D.status===408?"timeout":"error";throw y.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:E,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:o,latency_ms:performance.now()-x,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:K,error_code:z?"guardrail_blocked":String(D.status??"unknown"),error_message:String(D.message).slice(0,500),...q,span_kind:"llm",conversation_turn:w,message_role:M,metadata:{auto_detected:Object.keys(R).length?R:void 0},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:y.environment,sdk_version:"1.0.0"}),j&&(j.setStatus({code:U.SpanStatusCode.ERROR,message:D.message}),j.recordException(D),j.end()),D}};let S=g.generateContentStream.bind(g);g.generateContentStream=async(I,k)=>{let y=P(),x=performance.now(),_=G(),E=u(),v=_?.traceId??u(),T=et(I),h=re(T,i),{conversation_turn:A,message_role:R}=ie(T),w=_?.agentName??h.agent_name,M=_?.agentRole??h.agent_role,C=_?.agentId||w||M?{agent_id:_?.agentId,agent_name:w,agent_role:M,agent_framework:_?.agentFramework,parent_agent_id:_?.parentAgentId}:{},O=I?.tools?.length?de(I.tools):void 0,q=null,$=y.enableOTel?U.trace.getTracer("zespan-sdk"):null;$&&(q=$.startSpan(`generateContentStream ${i}`,{kind:U.SpanKind.CLIENT,attributes:tt(I,i)}));try{let j=await W({traceId:v,spanId:E,userId:_?.userId,sessionId:_?.sessionId,tags:_?.tags,agentId:_?.agentId,agentName:w,agentRole:M,agentFramework:_?.agentFramework,parentAgentId:_?.parentAgentId,conversationTurn:A,availableTools:O},()=>S(I,k));return q&&q.setAttribute("gen_ai.request.stream",!0),j.stream=Yt(j.stream,{lumiq:y,t0:x,traceId:v,spanId:E,parent:_,params:I,modelName:i,otelSpan:q,streamResult:j,agentCtx:C,tool_definitions:O,autoDetected:h,conversation_turn:A,message_role:R,operation:o}),j}catch(j){let Z=j instanceof J,D=Z?"error":j.status===429?"rate_limited":j.status===408?"timeout":"error";throw y.enqueue({event_id:u(),project_id:"",trace_id:v,span_id:E,parent_span_id:_?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:o,latency_ms:performance.now()-x,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:D,error_code:Z?"guardrail_blocked":String(j.status??"unknown"),error_message:String(j.message).slice(0,500),...C,span_kind:"llm",conversation_turn:A,message_role:R,metadata:{auto_detected:Object.keys(h).length?h:void 0},user_id:_?.userId,session_id:_?.sessionId,tags:_?.tags,environment:y.environment,sdk_version:"1.0.0"}),q&&(q.setStatus({code:U.SpanStatusCode.ERROR,message:j.message}),q.recordException(j),q.end()),j}};let b=g.startChat?.bind(g);return b&&(g.startChat=I=>{let k=b(I),y=k.sendMessage?.bind(k),x=k.sendMessageStream?.bind(k);return y&&(k.sendMessage=async(_,E)=>{let v=P(),T=performance.now(),h=G(),A=u(),R=h?.traceId??u(),w={...I||{},message:_},M=null,C=null,O=et(w),q=re(O,i),{conversation_turn:$,message_role:j}=ie(O),Z=h?.agentName??q.agent_name,D=h?.agentRole??q.agent_role,L=h?.agentId||Z||D?{agent_id:h?.agentId,agent_name:Z,agent_role:D,agent_framework:h?.agentFramework,parent_agent_id:h?.parentAgentId}:{},V=I?.tools?.length?de(I.tools):void 0,N=null,z=v.enableOTel?U.trace.getTracer("zespan-sdk"):null;z&&(N=z.startSpan(`sendMessage ${i}`,{kind:U.SpanKind.CLIENT,attributes:tt(w,i)}));try{M=await B(v,s,{text:JSON.stringify(w),phase:"pre",traceId:R,spanId:A,model:i,operation:o,agentName:h?.agentName});let K=await W({traceId:R,spanId:A,userId:h?.userId,sessionId:h?.sessionId,tags:h?.tags,agentId:h?.agentId,agentName:Z,agentRole:D,agentFramework:h?.agentFramework,parentAgentId:h?.parentAgentId,conversationTurn:$,availableTools:V},()=>y(_,E)),F=K.response,te=F.usageMetadata?.promptTokenCount??0,ne=F.usageMetadata?.candidatesTokenCount??0,he=F.usageMetadata?.cachedContentTokenCount??0,ge=F.usageMetadata?.thoughtsTokenCount??0,ye=_t(F),se=(F.candidates?.[0]?.content?.parts??[]).filter(ue=>ue?.functionCall),ae=se.map(ue=>ue.functionCall.name).filter(Boolean),_e={};for(let ue of se)ue.functionCall?.name&&(_e[ue.functionCall.name]=ue.functionCall.args??{});C=await B(v,s,{text:ye,phase:"post",traceId:R,spanId:A,model:i,operation:o,agentName:h?.agentName});let Y=ee(ye,C);return v.enqueue({event_id:u(),project_id:"",trace_id:R,span_id:A,parent_span_id:h?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:o,latency_ms:performance.now()-T,stream:!1,input_tokens:te,output_tokens:ne,cached_tokens:he,reasoning_tokens:ge,status:"success",finish_reason:F.candidates?.[0]?.finishReason??"",tools_used:ae,tool_call_args:Object.keys(_e).length?_e:void 0,prompt_hash:Ne(JSON.stringify(w)),...v.storePrompts?{prompt_text:v.redactForStorage(w),completion_text:v.redactForStorage(Y)}:{},...L,span_kind:"llm",tool_definitions:V,conversation_turn:$,message_role:j,metadata:{usage:F.usageMetadata??null,guardrails:{pre:M?{matched:M.results.length,modified:!!M.modifiedText}:null,post:C?{matched:C.results.length,modified:!!C.modifiedText}:null},auto_detected:Object.keys(q).length?q:void 0},user_id:h?.userId,session_id:h?.sessionId,tags:h?.tags,environment:v.environment,sdk_version:"1.0.0"}),N&&(N.setAttribute("gen_ai.completion",Y),N.setAttribute("gen_ai.usage.input_tokens",te),N.setAttribute("gen_ai.usage.output_tokens",ne),N.setAttribute("gen_ai.usage.total_tokens",te+ne),N.setAttribute("gen_ai.usage.cached_tokens",he),N.setAttribute("gen_ai.usage.reasoning_tokens",ge),N.setAttribute("gen_ai.response.finish_reason",F.candidates?.[0]?.finishReason??""),N.setAttribute("gen_ai.response.latency",performance.now()-T),N.setStatus({code:U.SpanStatusCode.OK}),N.end()),K}catch(K){let F=K instanceof J,te=F?"error":K.status===429?"rate_limited":K.status===408?"timeout":"error";throw v.enqueue({event_id:u(),project_id:"",trace_id:R,span_id:A,parent_span_id:h?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:o,latency_ms:performance.now()-T,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:te,error_code:F?"guardrail_blocked":String(K.status??"unknown"),error_message:String(K.message).slice(0,500),...L,span_kind:"llm",conversation_turn:$,message_role:j,metadata:{auto_detected:Object.keys(q).length?q:void 0},user_id:h?.userId,session_id:h?.sessionId,tags:h?.tags,environment:v.environment,sdk_version:"1.0.0"}),N&&(N.setStatus({code:U.SpanStatusCode.ERROR,message:K.message}),N.recordException(K),N.end()),K}}),x&&(k.sendMessageStream=async(_,E)=>{let v=P(),T=performance.now(),h=G(),A=u(),R=h?.traceId??u(),w={...I||{},message:_},M=et(w),C=re(M,i),{conversation_turn:O,message_role:q}=ie(M),$=h?.agentName??C.agent_name,j=h?.agentRole??C.agent_role,Z=h?.agentId||$||j?{agent_id:h?.agentId,agent_name:$,agent_role:j,agent_framework:h?.agentFramework,parent_agent_id:h?.parentAgentId}:{},D=I?.tools?.length?de(I.tools):void 0,L=null,V=v.enableOTel?U.trace.getTracer("zespan-sdk"):null;V&&(L=V.startSpan(`sendMessageStream ${i}`,{kind:U.SpanKind.CLIENT,attributes:tt(w,i)}));try{let N=await W({traceId:R,spanId:A,userId:h?.userId,sessionId:h?.sessionId,tags:h?.tags,agentId:h?.agentId,agentName:$,agentRole:j,agentFramework:h?.agentFramework,parentAgentId:h?.parentAgentId,conversationTurn:O,availableTools:D},()=>x(_,E));return L&&L.setAttribute("gen_ai.request.stream",!0),N.stream=Yt(N.stream,{lumiq:v,t0:T,traceId:R,spanId:A,parent:h,params:w,modelName:i,otelSpan:L,streamResult:N,agentCtx:Z,tool_definitions:D,autoDetected:C,conversation_turn:O,message_role:q,operation:o}),N}catch(N){let z=N instanceof J,K=z?"error":N.status===429?"rate_limited":N.status===408?"timeout":"error";throw v.enqueue({event_id:u(),project_id:"",trace_id:R,span_id:A,parent_span_id:h?.spanId,timestamp:new Date().toISOString(),provider:"google",model:i,operation:o,latency_ms:performance.now()-T,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:K,error_code:z?"guardrail_blocked":String(N.status??"unknown"),error_message:String(N.message).slice(0,500),...Z,span_kind:"llm",conversation_turn:O,message_role:q,metadata:{auto_detected:Object.keys(C).length?C:void 0},user_id:h?.userId,session_id:h?.sessionId,tags:h?.tags,environment:v.environment,sdk_version:"1.0.0"}),L&&(L.setStatus({code:U.SpanStatusCode.ERROR,message:N.message}),L.recordException(N),L.end()),N}}),k}),g},r}var tn=require("crypto"),pe=require("@opentelemetry/api"),ht=r=>(0,tn.createHash)("sha256").update(r).digest("hex");function Zn(r,e,n,t){let s=Number(r?.usage?.cost);if(Number.isFinite(s))return{cost:s,source:"usage.cost"};let o=r?.headers?.get?.("x-ratelimit-cost"),a=Number.parseFloat(String(o??""));return Number.isFinite(a)?{cost:a,source:"x-ratelimit-cost"}:{cost:0,source:"computed"}}function Jn(r,e){return{"gen_ai.system":"openrouter","gen_ai.model":e,"gen_ai.operation.name":"chat","gen_ai.prompt":JSON.stringify(r.messages),"gen_ai.request.max_tokens":r.max_tokens,"gen_ai.request.temperature":r.temperature,"gen_ai.request.top_p":r.top_p}}async function*zn(r,e){let{lumiq:n,t0:t,traceId:s,spanId:o,parent:a,params:d,otelSpan:i,agentCtx:l,autoDetected:p,conversation_turn:c,message_role:m,tool_definitions:g}=e,f,S=0,b=0,I=0,k=0,y="",x=d.model,_=[],E="",v=[];try{for await(let w of r){if(f||(f=performance.now()-t,n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:x,operation:"chat",latency_ms:f,ttft_ms:f,stream:!0,input_tokens:0,output_tokens:0,cost_usd:0,status:"success",prompt_hash:ht(JSON.stringify(d.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(d.messages)}:{},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0",finish_reason:"stream_start",...l,span_kind:"llm",tool_definitions:g,conversation_turn:c,message_role:m,metadata:{auto_detected:Object.keys(p).length?p:void 0}}),i&&i.setAttribute("gen_ai.response.time_to_first_token",f)),w.choices?.[0]?.delta?.content&&(S++,E+=w.choices[0].delta.content),w.choices?.[0]?.finish_reason&&(y=w.choices[0].finish_reason),w.model&&(x=w.model),w.usage){b=Number(w.usage.prompt_tokens||b||0),S=Number(w.usage.completion_tokens||S||0),I=Number(w.usage.prompt_tokens_details?.cached_tokens||I||0);let M=w.usage.completion_tokens_details||{};k=Number(M.reasoning_tokens||k||0)}if(w.choices?.[0]?.delta?.tool_calls)for(let M of w.choices[0].delta.tool_calls)v.push(M),M.function?.name&&!_.includes(M.function.name)&&_.push(M.function.name);yield w}let{tools_used:T,tool_call_args:h}=Qe(v),A=T.length>0?T:_,R=performance.now()-t;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:x,operation:"chat",latency_ms:R,ttft_ms:f,stream:!0,input_tokens:b,output_tokens:S,cached_tokens:I,reasoning_tokens:k,status:"success",finish_reason:y||"stream_end",tools_used:A,tool_call_args:Object.keys(h).length?h:void 0,prompt_hash:ht(JSON.stringify(d.messages)),...n.storePrompts?{prompt_text:n.redactForStorage(d.messages),completion_text:n.redactForStorage(E)}:{},...l,span_kind:"llm",tool_definitions:g,conversation_turn:c,message_role:m,metadata:{usage:{prompt_tokens:b,completion_tokens:S,cached_tokens:I,reasoning_tokens:k},auto_detected:Object.keys(p).length?p:void 0},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setAttribute("gen_ai.completion",E),i.setAttribute("gen_ai.usage.input_tokens",b),i.setAttribute("gen_ai.usage.output_tokens",S),i.setAttribute("gen_ai.usage.total_tokens",b+S),i.setAttribute("gen_ai.usage.reasoning_tokens",k),i.setAttribute("gen_ai.response.finish_reason",y||"stream_end"),i.setStatus({code:pe.SpanStatusCode.OK}),i.end())}catch(T){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:x,operation:"chat",latency_ms:performance.now()-t,ttft_ms:f,stream:!0,input_tokens:0,output_tokens:S,cost_usd:0,status:"error",error_code:String(T.status??"unknown"),error_message:String(T.message).slice(0,500),...l,span_kind:"llm",conversation_turn:c,message_role:m,metadata:{auto_detected:Object.keys(p).length?p:void 0},user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"}),i&&(i.setStatus({code:pe.SpanStatusCode.ERROR,message:T.message}),i.recordException(T),i.end()),T}}function yt(r,e={}){let n=r.chat.completions.create,t=Q(e.guardrails,"chat");return r.chat.completions.create=async(s,o)=>{let a=P(),d=performance.now(),i=G(),l=u(),p=i?.traceId??u(),c=s.model??"openrouter\u6A21\u578B",m=null,g=null;if(a.configClient){let _=a.configClient.getModel("chat",c);if(_!==c){let E=c;c=_,s={...s,model:_},a.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:_,operation:"model_override",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",metadata:{original_model:E,override_model:_},environment:a.environment,sdk_version:"1.0.0"})}}let f=i?.agentId?{agent_id:i.agentId,agent_name:i.agentName,agent_role:i.agentRole,agent_framework:i.agentFramework,parent_agent_id:i.parentAgentId}:{},S=re(s.messages??[],s.model),{conversation_turn:b,message_role:I}=ie(s.messages??[]),k=s.tools?.length?de(s.tools):void 0,y=null,x=a.enableOTel?pe.trace.getTracer("zespan-sdk"):null;x&&(y=x.startSpan(`chat.completions ${c}`,{kind:pe.SpanKind.CLIENT,attributes:Jn(s,c)}));try{m=await B(a,t,{text:JSON.stringify(s.messages??[]),phase:"pre",traceId:p,spanId:l,model:c,operation:"chat"});let _=await W({traceId:p,spanId:l,userId:i?.userId,sessionId:i?.sessionId,tags:i?.tags},()=>n.call(r.chat.completions,s,o));if(s.stream===!0)return y&&y.setAttribute("gen_ai.request.stream",!0),zn(_,{lumiq:a,t0:d,traceId:p,spanId:l,parent:i,params:s,otelSpan:y,agentCtx:f,autoDetected:S,conversation_turn:b,message_role:I,tool_definitions:k});let{prompt_tokens:v,completion_tokens:T,completion_tokens_details:h}=_.usage??{},A=h?.reasoning_tokens??0,R=_.model??s.model,{cost:w,source:M}=Zn(_,R,v??0,T??0);_.pricing||(_.pricing={cost_usd:w,source:M});let C=_.choices?.[0]?.message?.content||"";g=await B(a,t,{text:C,phase:"post",traceId:p,spanId:l,model:R,operation:"chat"});let O=ee(C,g);O!==C&&typeof _?.choices?.[0]?.message?.content=="string"&&(_.choices[0].message.content=O);let{tools_used:q,tool_call_args:$}=He(_.choices??[]);return a.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:R,operation:"chat",latency_ms:performance.now()-d,stream:!1,input_tokens:v??0,output_tokens:T??0,cached_tokens:0,cost_usd:w,status:"success",finish_reason:_.choices?.[0]?.finish_reason??"",tools_used:q.length>0?q:_.choices?.[0]?.message?.tool_calls?.map(j=>j.function.name)??[],tool_call_args:Object.keys($).length?$:void 0,prompt_hash:ht(JSON.stringify(s.messages)),...a.storePrompts?{prompt_text:a.redactForStorage(s.messages),completion_text:a.redactForStorage(O)}:{},...f,span_kind:"llm",tool_definitions:k,conversation_turn:b,message_role:I,metadata:{usage:_.usage??null,pricing:_.pricing??{cost_usd:w,source:M},guardrails:{pre:m?{matched:m.results.length,modified:!!m.modifiedText}:null,post:g?{matched:g.results.length,modified:!!g.modifiedText}:null},auto_detected:Object.keys(S).length?S:void 0},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:a.environment,sdk_version:"1.0.0"}),y&&(y.setAttribute("gen_ai.usage.input_tokens",v??0),y.setAttribute("gen_ai.usage.output_tokens",T??0),y.setAttribute("gen_ai.usage.total_tokens",(v??0)+(T??0)),y.setAttribute("gen_ai.usage.reasoning_tokens",A),y.setAttribute("gen_ai.completion",_.choices?.[0]?.message?.content||""),y.setAttribute("gen_ai.response.finish_reason",_.choices?.[0]?.finish_reason??""),y.setAttribute("gen_ai.response.latency",performance.now()-d),y.setStatus({code:pe.SpanStatusCode.OK}),y.end()),_}catch(_){let E=_ instanceof J,v=E?"error":_.status===429?"rate_limited":_.status===408?"timeout":"error";throw a.enqueue({event_id:u(),project_id:"",trace_id:p,span_id:l,parent_span_id:i?.spanId,timestamp:new Date().toISOString(),provider:"openrouter",model:s.model,operation:"chat",latency_ms:performance.now()-d,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:v,error_code:E?"guardrail_blocked":String(_.status??_.code??"unknown"),error_message:String(_.message).slice(0,500),...f,span_kind:"llm",conversation_turn:b,message_role:I,metadata:{auto_detected:Object.keys(S).length?S:void 0},user_id:i?.userId,session_id:i?.sessionId,tags:i?.tags,environment:a.environment,sdk_version:"1.0.0"}),y&&(y.setStatus({code:pe.SpanStatusCode.ERROR,message:_.message}),y.recordException(_),y.end()),_}},r}async function*nn(r,e){let{lumiq:n,t0:t,traceId:s,spanId:o,parent:a,model:d,operation:i}=e,l=0,p=0,c=0,m="",g;try{for await(let f of r)g||(g=performance.now()-t),"metadata"in f&&f.metadata?.usage&&(l=f.metadata.usage.inputTokens??l,p=f.metadata.usage.outputTokens??p,c=f.metadata.usage.cacheReadInputTokens??c),"messageStop"in f&&f.messageStop?.stopReason&&(m=f.messageStop.stopReason),yield f;n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:d,operation:i,latency_ms:performance.now()-t,ttft_ms:g,stream:!0,input_tokens:l,output_tokens:p,cached_tokens:c,status:"success",finish_reason:m,user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"})}catch(f){throw n.enqueue({event_id:u(),project_id:"",trace_id:s,span_id:o,parent_span_id:a?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:d,operation:i,latency_ms:performance.now()-t,ttft_ms:g,stream:!0,input_tokens:0,output_tokens:0,status:"error",error_code:String(f.$metadata?.httpStatusCode??f.name??"unknown"),error_message:String(f.message).slice(0,500),user_id:a?.userId,session_id:a?.sessionId,tags:a?.tags,environment:n.environment,sdk_version:"1.0.0"}),f}}function sn(r,e={}){let n=r,t=e.operation??"chat",s=Q(e.guardrails,t),o=n.converse?.bind(n);o&&(n.converse=async(i,...l)=>{let p=P(),c=performance.now(),m=G(),g=u(),f=m?.traceId??u(),S=i.modelId??"amazon.nova-lite-v1:0";p.configClient&&(S=p.configClient.getModel(t,S),S!==i.modelId&&(i={...i,modelId:S}));let b=JSON.stringify(i.messages??[]);await B(p,s,{text:b,phase:"pre",traceId:f,spanId:g,model:S,operation:t,agentName:m?.agentName});try{let I=await W({traceId:f,spanId:g,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags},()=>o(i,...l)),k=I.usage??{};return p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:S,operation:t,latency_ms:performance.now()-c,stream:!1,input_tokens:Number(k.inputTokens??0),output_tokens:Number(k.outputTokens??0),cached_tokens:Number(k.cacheReadInputTokens??0),status:"success",finish_reason:I.stopReason??"",user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:p.environment,sdk_version:"1.0.0"}),I}catch(I){throw p.enqueue({event_id:u(),project_id:"",trace_id:f,span_id:g,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"bedrock",model:S,operation:t,latency_ms:performance.now()-c,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_code:String(I.$metadata?.httpStatusCode??I.name??"unknown"),error_message:String(I.message).slice(0,500),user_id:m?.userId,session_id:m?.sessionId,tags:m?.tags,environment:p.environment,sdk_version:"1.0.0"}),I}});let a=n.converseStream?.bind(n);a&&(n.converseStream=async(i,...l)=>{let p=P(),c=performance.now(),m=G(),g=u(),f=m?.traceId??u(),S=i.modelId??"amazon.nova-lite-v1:0",b=await W({traceId:f,spanId:g,userId:m?.userId,sessionId:m?.sessionId,tags:m?.tags},()=>a(i,...l));return{...b,stream:nn(b.stream,{lumiq:p,t0:c,traceId:f,spanId:g,parent:m,model:S,operation:t})}});let d=n.send?.bind(n);return d&&(n.send=async(i,...l)=>{if(!(i?.constructor?.name==="ConverseStreamCommand"||i?.$name==="ConverseStream"))return d(i,...l);let c=P(),m=performance.now(),g=G(),f=u(),S=g?.traceId??u(),b=i?.input?.modelId??"amazon.nova-lite-v1:0",I=await W({traceId:S,spanId:f,userId:g?.userId,sessionId:g?.sessionId,tags:g?.tags},()=>d(i,...l));return{...I,stream:nn(I.stream,{lumiq:c,t0:m,traceId:S,spanId:f,parent:g,model:b,operation:t})}}),r}function an(r,e={}){let n=r,t=e.operation??"chat",s=Q(e.guardrails,t),o=n.chat.complete.bind(n.chat);n.chat.complete=async(d,...i)=>{let l=P(),p=performance.now(),c=G(),m=u(),g=c?.traceId??u(),f=d.model??"mistral-small-latest";l.configClient&&(f=l.configClient.getModel(t,f),f!==d.model&&(d={...d,model:f}));let S=JSON.stringify(d.messages??[]);await B(l,s,{text:S,phase:"pre",traceId:g,spanId:m,model:f,operation:t});try{let b=await W({traceId:g,spanId:m,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>o(d,...i)),I=b.model??f,k=b.usage??{},y=Number(k.promptTokens??0),x=Number(k.completionTokens??0),_=b.choices?.[0]?.finishReason??"";return await B(l,s,{text:b.choices?.[0]?.message?.content??"",phase:"post",traceId:g,spanId:m,model:I,operation:t}),l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:I,operation:t,latency_ms:performance.now()-p,stream:!1,input_tokens:y,output_tokens:x,status:"success",finish_reason:_,user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),b}catch(b){throw l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:f,operation:t,latency_ms:performance.now()-p,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(b.message).slice(0,500),user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),b}};let a=n.chat.stream?.bind(n.chat);return a&&(n.chat.stream=async function*(d,...i){let l=P(),p=performance.now(),c=G(),m=u(),g=c?.traceId??u(),f=d.model??"mistral-small-latest";l.configClient&&(f=l.configClient.getModel(t,f),f!==d.model&&(d={...d,model:f}));let S=0,b=0,I="",k;try{let y=await W({traceId:g,spanId:m,userId:c?.userId,sessionId:c?.sessionId,tags:c?.tags},()=>a(d,...i));for await(let x of y)k||(k=performance.now()-p),x.data?.usage&&(S=x.data.usage.promptTokens??S,b=x.data.usage.completionTokens??b),x.data?.choices?.[0]?.finishReason&&(I=x.data.choices[0].finishReason),x.data?.model&&(f=x.data.model),yield x;l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:f,operation:t,latency_ms:performance.now()-p,ttft_ms:k,stream:!0,input_tokens:S,output_tokens:b,status:"success",finish_reason:I,user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"})}catch(y){throw l.enqueue({event_id:u(),project_id:"",trace_id:g,span_id:m,parent_span_id:c?.spanId,timestamp:new Date().toISOString(),provider:"mistral",model:f,operation:t,latency_ms:performance.now()-p,ttft_ms:k,stream:!0,input_tokens:0,output_tokens:0,status:"error",error_message:String(y.message).slice(0,500),user_id:c?.userId,session_id:c?.sessionId,tags:c?.tags,environment:l.environment,sdk_version:"1.0.0"}),y}}),r}function on(r,e={}){let n=r,t=n.chat.completions.create.bind(n.chat.completions),s=e.operation??"chat";return n.chat.completions.create=async(o,...a)=>{let d=P(),i=performance.now(),l=G(),p=u(),c=l?.traceId??u(),m=o.model??"llama-3.3-70b-versatile";d.configClient&&(m=d.configClient.getModel(s,m),m!==o.model&&(o={...o,model:m}));try{let g=await W({traceId:c,spanId:p,userId:l?.userId,sessionId:l?.sessionId,tags:l?.tags},()=>t(o,...a)),f=g.usage??{},S=Number(f.prompt_tokens??0),b=Number(f.completion_tokens??0),I=g.choices?.[0]?.finish_reason??"";return d.enqueue({event_id:u(),project_id:"",trace_id:c,span_id:p,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:m,operation:s,latency_ms:performance.now()-i,stream:!1,input_tokens:S,output_tokens:b,status:"success",finish_reason:I,user_id:l?.userId,session_id:l?.sessionId,tags:l?.tags,environment:d.environment,sdk_version:"1.0.0"}),g}catch(g){throw d.enqueue({event_id:u(),project_id:"",trace_id:c,span_id:p,parent_span_id:l?.spanId,timestamp:new Date().toISOString(),provider:"groq",model:m,operation:s,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,cost_usd:0,status:"error",error_message:String(g.message).slice(0,500),user_id:l?.userId,session_id:l?.sessionId,tags:l?.tags,environment:d.environment,sdk_version:"1.0.0"}),g}},r}function rn(r,e={}){let n=require("openai").default??require("openai"),t=new n({baseURL:r.baseURL,apiKey:r.apiKey??"litellm"});return Re(t,{...e,providerOverride:"litellm"})}var un=require("@langchain/core/callbacks/base");var pn=require("crypto"),dn=r=>(0,pn.createHash)("sha256").update(r).digest("hex"),cn=["AgentExecutor","ReactAgent","ToolCallingAgent"],ln=["DynamicStructuredTool","StructuredTool","DynamicTool","Tool"],we=class extends un.BaseCallbackHandler{name="ZespanCallbackHandler";guardrailSettings=Q(void 0,"chat");runs=new Map;constructor(e={}){super(),this.guardrailSettings=Q(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(d=>({name:d.name??"unknown",args:d.args??{},id:d.id}));let o=t.additional_kwargs?.tool_calls;if(Array.isArray(o)&&o.length>0)return o.map(d=>({name:d.function?.name??"unknown",args:d.function?.arguments?JSON.parse(d.function.arguments):{},id:d.id}));let a=t.additional_kwargs?.function_call;return a?[{name:a.name??"unknown",args:a.arguments?JSON.parse(a.arguments):{}}]:[]}catch{return[]}}detectConversationInfo(e,n){let t=n?._lumiq_message_count;if(typeof t=="number"&&t>0)return{turns:t,hasMemory:t>2};let s=n?.invocation_params?.messages;if(Array.isArray(s))return{turns:s.length,hasMemory:s.length>2};let a=(JSON.stringify(e).match(/"role"\s*:/g)||[]).length;return a>0?{turns:a,hasMemory:a>2}:{turns:e.length,hasMemory:!1}}detectAgentFromPrompts(e,n){try{let t=JSON.stringify(e)+JSON.stringify(n?.invocation_params?.messages??[])+JSON.stringify(n?._lumiq_structured_messages??[]),s=[/you are (?:a |an |the )?([A-Z][A-Za-z]*(?:[_\s][A-Z][A-Za-z]*){0,3}(?:Agent|Bot|Assistant|AI|Specialist|Expert|Analyzer|Manager|Coordinator))/i,/act as (?:a |an |the )?([A-Z][A-Za-z]*(?:[_\s][A-Z][A-Za-z]*){0,3}(?:Agent|Bot|Assistant|AI))/i,/agent[_\s]?name["'\s:=]+["']?([A-Za-z][A-Za-z_\-]+)/i,/role["'\s:=]+["']?([A-Za-z]+(?:Agent|Bot|Assistant))/i,/name["'\s:=]+["']?([A-Za-z]+Agent)/i];for(let o of s){let a=t.match(o);if(a?.[1])return a[1].trim().replace(/[\s]+/g,"_")}return}catch{return}}detectPlanning(e,n){try{let t=e+" "+JSON.stringify(n);if(![/\bstep\s+\d+[:\s]/i,/\bfirst,?\s+(?:I|we|let)/i,/\bthen,?\s+(?:I|we)/i,/\bfinally,?\s+(?:I|we)/i,/\blet me think/i,/\blet'?s break (?:this |it )?down/i,/\bthink(?:ing)? step by step/i,/\bmy (?:plan|approach|strategy)/i,/\bI'?ll start by/i,/<thinking>/i,/<scratchpad>/i,/\bchain.of.thought/i].some(l=>l.test(t)))return{detected:!1};let a=/(?:step\s+\d+[:\s]|^\d+[\.\)]\s+)(.+)/gim,d=[],i;for(;(i=a.exec(e))!==null&&(i[1]&&d.push(i[1].trim().slice(0,200)),!(d.length>=10)););return{detected:!0,steps:d.length>0?d:void 0}}catch{return{detected:!1}}}extractCompletion(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 o=s?.message?.content;return typeof o=="string"?o:Array.isArray(o)?o.map(a=>typeof a?.text=="string"?a.text:"").filter(Boolean).join(`
|
|
6
|
+
`):""}async handleChatModelStart(e,n,t,s,o,a,d,i){try{let l=n.map(c=>c.map(m=>{let g=m._getType?.()??m.role??"unknown",f=typeof m.content=="string"?m.content:JSON.stringify(m.content);return`${g}: ${f}`}).join(`
|
|
7
|
+
`)),p=n[0]?.map(c=>({role:c._getType?.()??c.role??"unknown",content:typeof c.content=="string"?c.content:JSON.stringify(c.content),tool_calls:c.tool_calls??c.additional_kwargs?.tool_calls}));await this.handleLLMStart(e,l,t,s,{...o,_lumiq_structured_messages:p,_lumiq_message_count:n[0]?.length??0})}catch{}}async handleLLMStart(e,n,t,s,o){try{let a=G(),d=P(),i=s?this.runs.get(s):void 0,l=u();oe(l);let p=i?.traceId??a?.traceId??u(),c=o?.invocation_params?.model??o?.invocation_params?.model_name??e.kwargs?.model??e.kwargs?.modelName??e.id?.[e.id.length-1]??"unknown",m=o?.invocation_params?.stream===!0,g=i?.spanKind==="agent"?i.agentId:void 0,f=i?.spanKind==="agent"?i.agentName:void 0;if(!f){let y=this.detectAgentFromPrompts(n,o);y&&(f=y,g=g??u())}let S=o?.invocation_params?.tools??o?.invocation_params?.functions??[],b=S.map(y=>y.function?.name??y.name??"unknown").filter(Boolean),I=this.detectConversationInfo(n,o),k=await B(d,this.guardrailSettings,{text:JSON.stringify(n??[]),phase:"pre",traceId:p,spanId:l,model:c,operation:"chat"});this.runs.set(t,{t0:performance.now(),traceId:p,spanId:l,parentSpanId:i?.spanId??a?.spanId,model:c,agentId:g,agentName:f,spanKind:"llm",isStreaming:m,parent:a,prompts:n,invocationParams:o?.invocation_params,preGuardrailResult:k,toolsAvailable:b,toolSchemas:d.storePrompts?S:void 0,conversationTurns:I.turns,hasMemory:I.hasMemory})}catch(a){if(a instanceof J)throw a}}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 o=P();o.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:dn(JSON.stringify(s.prompts)),...o.storePrompts?{prompt_text:o.redactForStorage(s.prompts)}:{},metadata:{invocation_params:s.invocationParams??null},user_id:s.parent?.userId,session_id:s.parent?.sessionId,tags:s.parent?.tags,environment:o.environment,sdk_version:"1.0.0",finish_reason:"stream_start"})}catch{}}async handleLLMEnd(e,n){try{let t=this.runs.get(n);if(!t)return;X(t.spanId),this.runs.delete(n);let s=P(),o=e.llmOutput?.tokenUsage?.promptTokens??e.llmOutput?.usageMetadata?.promptTokenCount??0,a=e.llmOutput?.tokenUsage?.completionTokens??e.llmOutput?.usageMetadata?.candidatesTokenCount??0,d=performance.now()-t.t0,i=this.extractCompletion(e),l=this.extractToolCalls(e),p=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,m=this.detectPlanning(i,t.prompts),g=e.generations?.[0]?.[0]?.generationInfo?.finish_reason??e.generations?.[0]?.[0]?.generationInfo?.finishReason??e.llmOutput?.finish_reason??(t.isStreaming?"stream_end":"stop"),f=await B(s,this.guardrailSettings,{text:i,phase:"post",traceId:t.traceId,spanId:t.spanId,model:t.model,operation:"chat"}),S=ee(i,f);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:d,ttft_ms:t.ttft,stream:t.isStreaming??!1,input_tokens:o,output_tokens:a,status:"success",span_kind:"llm",agent_id:t.agentId,agent_name:t.agentName,finish_reason:g,prompt_hash:dn(JSON.stringify(t.prompts)),tools_defined:t.toolsAvailable?.length?t.toolsAvailable:void 0,tools_used:l.length>0?l.map(b=>b.name):void 0,tool_calls:l.length>0?l:void 0,conversation_turns:t.conversationTurns,has_memory:t.hasMemory,reasoning_tokens:p>0?p:void 0,has_reasoning:p>0?!0:void 0,cached_tokens:c>0?c:void 0,has_planning:m.detected||void 0,planning_steps:m.steps,...s.storePrompts?{prompt_text:s.redactForStorage(t.prompts),completion_text:s.redactForStorage(S)}:{},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:f?{matched:f.results.length,modified:!!f.modifiedText}:null}},user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}async handleLLMError(e,n){try{let t=this.runs.get(n);if(!t)return;X(t.spanId),this.runs.delete(n);let s=P();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 J?"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:"1.0.0"})}catch{}}async handleChainStart(e,n,t,s){try{let o=G(),a=s?this.runs.get(s):void 0,d=u(),i=a?.traceId??o?.traceId??u(),l=Array.isArray(e?.id)?e.id:[],p=l.some(y=>cn.includes(y)),c=!p&&l.some(y=>ln.includes(y)),m=p?"agent":c?"tool":"general",g=p?u():void 0,f=p?l.find(y=>cn.includes(y))??void 0:void 0,S=c?e.name??e.kwargs?.name??l.find(y=>ln.includes(y)):void 0,b=c?JSON.stringify(n):void 0,I=a?.spanKind==="agent"?a.agentId:void 0,k=a?.spanKind==="agent"?a.agentName:void 0;this.runs.set(t,{t0:performance.now(),traceId:i,spanId:d,parentSpanId:a?.spanId??o?.spanId,model:"",agentId:g??a?.agentId,agentName:f??a?.agentName,spanKind:m,toolName:S,toolInput:b,prompts:[],parent:o,delegatedFromAgentId:I,delegatedFromAgentName:k})}catch{}}async handleChainEnd(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=P();if(t.spanKind==="tool"){let o=e?.output??e,a=typeof o=="string"?o:JSON.stringify(o);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:a.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:"1.0.0"})}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:"1.0.0"})}catch{}}async handleChainError(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=P();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:"1.0.0"})}catch{}}async handleToolStart(e,n,t,s){try{let o=G(),a=s?this.runs.get(s):void 0,d=u(),i=a?.traceId??o?.traceId??u(),l=e.id?.[e.id.length-1]??"unknown_tool",p=e.name||e.kwargs?.name||l;this.runs.set(t,{t0:performance.now(),traceId:i,spanId:d,parentSpanId:a?.spanId??o?.spanId,model:"",agentId:a?.agentId,agentName:a?.agentName,spanKind:"tool",toolName:p,toolInput:n,prompts:[],parent:o})}catch{}}async handleToolEnd(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=P(),a=(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:a,stream:!1,finish_reason:"stop",user_id:t.parent?.userId,session_id:t.parent?.sessionId,tags:t.parent?.tags,environment:s.environment,sdk_version:"1.0.0"})}catch{}}async handleToolError(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=P();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:"1.0.0"})}catch{}}async handleAgentAction(e,n){try{let t=this.runs.get(n),s=G(),o=P(),a=t?.traceId??s?.traceId??u(),d=u(),i=[e?.tool??"",typeof e?.toolInput=="string"?e.toolInput:JSON.stringify(e?.toolInput??""),e?.log??""].join(" | ");o.enqueue({event_id:u(),project_id:"",trace_id:a,span_id:d,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:[i],stream:!1,user_id:t?.parent?.userId??s?.userId,session_id:t?.parent?.sessionId??s?.sessionId,tags:t?.parent?.tags??s?.tags,environment:o.environment,sdk_version:"1.0.0"})}catch{}}async handleRetrieverStart(e,n,t,s){try{let o=G(),a=s?this.runs.get(s):void 0,d=u(),i=a?.traceId??o?.traceId??u();this.runs.set(t,{t0:performance.now(),traceId:i,spanId:d,parentSpanId:a?.spanId??o?.spanId,model:"",agentId:a?.agentId,agentName:a?.agentName,spanKind:"retriever",query:n,prompts:[],parent:o})}catch{}}async handleRetrieverEnd(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=P();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:{"lumiq.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:"1.0.0"})}catch{}}async handleRetrieverError(e,n){try{let t=this.runs.get(n);if(!t)return;this.runs.delete(n);let s=P();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:"1.0.0"})}catch{}}},mn=we;function gn(r){let e=r?.model;return typeof e=="string"?e:e&&typeof e=="object"?e.model??e.name??"gemini-2.5-flash":"gemini-2.5-flash"}function Un(r){let e=r??{};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 Me=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,o=G(),a=this.getParentAgentState(n,s),d=a?.traceId??o?.traceId??u(),i=u(),l=a?.spanId??o?.spanId,p=u(),c=gn(e.invocationContext?.agent),m=e.userId||o?.userId,g=e.sessionId||o?.sessionId;this.agentStates.set(this.agentKey(n,t),{t0:performance.now(),traceId:d,spanId:i,parentSpanId:l,agentId:p,agentName:t,model:c,userId:m,sessionId:g,parentAgentId:a?.agentId,parentAgentName:s})}catch{}};afterAgentCallback=e=>{try{let n=e.invocationId,t=e.agentName,s=this.agentKey(n,t),o=this.agentStates.get(s);if(!o)return;this.agentStates.delete(s);let a=!o.parentAgentName,d=P();d.enqueue({event_id:u(),project_id:"",trace_id:o.traceId,span_id:o.spanId,parent_span_id:o.parentSpanId,timestamp:new Date().toISOString(),provider:"google-adk",model:o.model,operation:`agent.${t}`,span_kind:"agent",agent_id:o.agentId,agent_name:t,agent_role:a?"coordinator":"specialist",agent_framework:"google-adk",parent_agent_id:o.parentAgentId,delegation_from_agent_id:o.parentAgentId,delegation_from_agent_name:o.parentAgentName,latency_ms:performance.now()-o.t0,stream:!1,input_tokens:0,output_tokens:0,status:"success",user_id:o.userId,session_id:o.sessionId,environment:d.environment,sdk_version:"1.0.0"})}catch{}};beforeModelCallback=({context:e,request:n})=>{try{let t=e.invocationId,s=e.agentName,o=this.agentStates.get(this.agentKey(t,s)),a=o?.traceId??u(),d=gn(e.invocationContext?.agent);this.pendingModelCalls.set(this.agentKey(t,s),{t0:performance.now(),spanId:u(),traceId:a,parentSpanId:o?.spanId??"",model:d,agentId:o?.agentId,agentName:s,userId:o?.userId??e.userId,sessionId:o?.sessionId??e.sessionId})}catch{}};afterModelCallback=({context:e,response:n})=>{try{let t=e.invocationId,s=e.agentName,o=this.agentKey(t,s),a=this.pendingModelCalls.get(o);if(!a)return;this.pendingModelCalls.delete(o);let{input:d,output:i,cached:l,reasoning:p}=Un(n?.usageMetadata),c=n?.content?.parts??[],m=c.filter(S=>typeof S?.text=="string"&&!S.thought).map(S=>S.text).join(""),g=c.filter(S=>S?.functionCall?.name).map(S=>S.functionCall.name),f=P();f.enqueue({event_id:u(),project_id:"",trace_id:a.traceId,span_id:a.spanId,parent_span_id:a.parentSpanId,timestamp:new Date().toISOString(),provider:"google",model:a.model,operation:"chat",span_kind:"llm",agent_id:a.agentId,agent_name:a.agentName,agent_framework:"google-adk",latency_ms:performance.now()-a.t0,stream:!1,input_tokens:d,output_tokens:i,cached_tokens:l||void 0,reasoning_tokens:p||void 0,finish_reason:n?.finishReason??"stop",tools_used:g.length?g:void 0,status:n?.errorCode?"error":"success",error_message:n?.errorMessage,...f.storePrompts&&m?{completion_text:f.redactForStorage(m)}:{},user_id:a.userId,session_id:a.sessionId,environment:f.environment,sdk_version:"1.0.0"})}catch{}};beforeToolCallback=({tool:e,args:n,context:t})=>{try{let s=t.invocationId,o=t.agentName,a=t.functionCallId??u(),d=this.agentStates.get(this.agentKey(s,o));this.toolCallStates.set(a,{t0:performance.now(),spanId:u(),traceId:d?.traceId??u(),parentSpanId:d?.spanId??"",toolName:e?.name??"unknown_tool",args:n??{},agentId:d?.agentId,agentName:o,userId:d?.userId??t.userId,sessionId:d?.sessionId??t.sessionId})}catch{}};afterToolCallback=({tool:e,args:n,context:t,response:s})=>{try{let o=t.functionCallId??"",a=this.toolCallStates.get(o);if(!a)return;this.toolCallStates.delete(o);let d=P();d.enqueue({event_id:u(),project_id:"",trace_id:a.traceId,span_id:a.spanId,parent_span_id:a.parentSpanId,timestamp:new Date().toISOString(),provider:"google-adk",model:"",operation:`tool.${a.toolName}`,span_kind:"tool",agent_id:a.agentId,agent_name:a.agentName,agent_framework:"google-adk",latency_ms:performance.now()-a.t0,stream:!1,input_tokens:0,output_tokens:0,status:"success",tools_used:[a.toolName],tool_call_id:o,tool_call_args:a.args,tool_call_result:JSON.stringify(s??{}).slice(0,10240),user_id:a.userId,session_id:a.sessionId,environment:d.environment,sdk_version:"1.0.0"})}catch{}};get callbacks(){return{beforeAgentCallback:this.beforeAgentCallback,afterAgentCallback:this.afterAgentCallback,beforeModelCallback:this.beforeModelCallback,afterModelCallback:this.afterModelCallback,beforeToolCallback:this.beforeToolCallback,afterToolCallback:this.afterToolCallback}}};var fn=require("crypto"),kt=r=>(0,fn.createHash)("sha256").update(typeof r=="string"?r:JSON.stringify(r)).digest("hex");function Vn(r){return r?.model??r?.config?.model??r?.llmConfig?.model??r?.generativeModel?.model??"gemini-2.5-flash"}function hn(r){let e=r?.usageMetadata??r?.usage_metadata??{},n=r?.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 Hn(r){if(typeof r?.text=="string")return r.text;if(typeof r?.output=="string")return r.output;let n=(r?.candidates?.[0]?.content?.parts??r?.content?.parts??[]).map(t=>typeof t?.text=="string"?t.text:"").filter(Boolean).join("");return n||(r&&typeof r=="object"?JSON.stringify(r):"")}function Qn(r){let e=[];try{let n=r?.candidates?.[0]?.content?.parts??r?.content?.parts??[];for(let t of n)t?.functionCall?.name&&e.push({name:t.functionCall.name,args:t.functionCall.args??{}});for(let t of r?.toolCalls??[])t?.name&&e.push({name:t.name,args:t.args??t.arguments??{}})}catch{}return e}function yn(r){if(r instanceof J)return"guardrail_blocked";let e=String(r?.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 qe(r,e={}){let n=r;if(typeof n?.run!="function")return r;let t=n.run.bind(n),s=Q(e.guardrails,"agent"),o=e.agentName??n.name??"ADKAgent",a=e.agentRole??(n.subAgents?.length?"coordinator":"specialist"),d=Vn(n);return e.traceSubAgents!==!1&&Array.isArray(n.subAgents)&&(n.subAgents=n.subAgents.map(i=>qe(i,{...e,agentRole:"specialist",traceSubAgents:!0}))),n.run=async(i,l)=>{let p=P(),c=performance.now(),m=G(),g=u(),f=u(),S=m?.traceId??u(),b=e.sessionId??m?.sessionId,I=typeof i=="string"?i:JSON.stringify(i??"");return W({traceId:S,spanId:f,userId:m?.userId,sessionId:b,tags:m?.tags,agentId:g,agentName:o,agentRole:a,agentFramework:"google-adk",parentAgentId:m?.agentId},async()=>{try{let k=await B(p,s,{text:I,phase:"pre",traceId:S,spanId:f,model:d,operation:"agent"}),y=await t(i,l),{input:x,output:_,cached:E,reasoning:v}=hn(y),T=Hn(y),h=Qn(y),A=y?.candidates?.[0]?.finishReason??y?.finish_reason,R=await B(p,s,{text:T,phase:"post",traceId:S,spanId:f,model:d,operation:"agent"}),w=ee(T,R);return p.enqueue({event_id:u(),project_id:"",trace_id:S,span_id:f,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:d,operation:"agent",span_kind:"agent",agent_id:g,agent_name:o,agent_role:a,agent_framework:"google-adk",parent_agent_id:m?.agentId,delegation_from_agent_id:m?.agentId,delegation_from_agent_name:m?.agentName,latency_ms:performance.now()-c,stream:!1,input_tokens:x,output_tokens:_,cached_tokens:E||void 0,reasoning_tokens:v||void 0,status:"success",finish_reason:A,tools_used:h.length?h.map(M=>M.name):void 0,tool_call_args:h.length?Object.fromEntries(h.map(M=>[M.name,M.args])):void 0,prompt_hash:kt(I),...p.storePrompts?{prompt_text:p.redactForStorage(I),completion_text:p.redactForStorage(w)}:{},user_id:m?.userId,session_id:b,tags:m?.tags,environment:p.environment,sdk_version:"1.0.0",metadata:{guardrails:{pre:k?{matched:k.results.length,modified:!!k.modifiedText}:null,post:R?{matched:R.results.length,modified:!!R.modifiedText}:null}}}),y}catch(k){throw p.enqueue({event_id:u(),project_id:"",trace_id:S,span_id:f,parent_span_id:m?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:d,operation:"agent",span_kind:"agent",agent_id:g,agent_name:o,agent_role:a,agent_framework:"google-adk",parent_agent_id:m?.agentId,latency_ms:performance.now()-c,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:yn(k),error_message:String(k?.message??k).slice(0,500),user_id:m?.userId,session_id:b,tags:m?.tags,environment:p.environment,sdk_version:"1.0.0"}),k}})},r}function nt(r,e={}){let n=r;if(typeof n?.runEphemeral=="function"){let t=n.runEphemeral.bind(n);n.runEphemeral=s=>_n(t(s),s,e)}if(typeof n?.run=="function"){let t=n.run.bind(n);n.run=s=>_n(t(s),s,e)}return r}async function*_n(r,e,n){let t=P(),s=G(),o=s?.traceId??u(),a=u(),d=u(),i=performance.now(),l=n.agentName??"ADKAgent",p=n.agentRole??"coordinator",c=n.model??"gemini-2.5-flash",m=e?.userId??s?.userId,g=n.sessionId??e?.sessionId??s?.sessionId,f=(e?.newMessage?.parts??[]).map(v=>typeof v?.text=="string"?v.text:"").filter(Boolean).join(""),S=new Map,b=new Map,I=new Set,k="",y=0,x=0,_=0,E=0;oe(a);try{yield*W({traceId:o,spanId:a,userId:m,sessionId:g,tags:s?.tags,agentId:d,agentName:l,agentRole:p,agentFramework:"google-adk",parentAgentId:s?.agentId},async function*(){for await(let v of r){y++;let T=v.author??l;if(T!=="user"){T!==l&&!I.has(T)&&t.enqueue({event_id:u(),project_id:"",trace_id:o,span_id:u(),parent_span_id:a,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:d,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:m,session_id:g,tags:s?.tags,environment:t.environment,sdk_version:"1.0.0"}),I.add(T),S.has(T)||(S.set(T,{spanId:u(),agentId:u(),t0:performance.now()}),b.set(T,{input:0,output:0,cached:0,reasoning:0}));let h=S.get(T),A=hn(v);if(A.input>0||A.output>0){let C=b.get(T);C.input+=A.input,C.output+=A.output,C.cached+=A.cached,C.reasoning+=A.reasoning,x+=A.input,_+=A.output,E+=A.cached}let R=v.content?.parts??[];for(let C of R){let O=C?.functionCall;if(!O?.name)continue;let q=u();t.enqueue({event_id:u(),project_id:"",trace_id:o,span_id:q,parent_span_id:h.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:`tool.${O.name}`,span_kind:"tool",agent_id:h.agentId,agent_name:T,agent_framework:"google-adk",latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",tools_used:[O.name],tool_call_id:q,tool_call_args:O.args??{},user_id:m,session_id:g,tags:s?.tags,environment:t.environment,sdk_version:"1.0.0"})}let w=R.filter(C=>typeof C?.text=="string"&&!C.thought).map(C=>C.text).join("");if(w&&(k+=w),typeof v.isFinalResponse=="function"?v.isFinalResponse():!!v.isFinalResponse||v.actions?.stateDelta!==void 0||v.turnComplete===!0){let C=R.map(q=>q?.functionCall?.name).filter(Boolean),O=b.get(T)??{input:0,output:0,cached:0,reasoning:0};t.enqueue({event_id:u(),project_id:"",trace_id:o,span_id:h.spanId,parent_span_id:a,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:`agent.${T}`,span_kind:"agent",agent_id:h.agentId,agent_name:T,agent_role:T===l?p:"specialist",agent_framework:"google-adk",parent_agent_id:d,latency_ms:performance.now()-h.t0,stream:!1,input_tokens:O.input,output_tokens:O.output,cached_tokens:O.cached||void 0,reasoning_tokens:O.reasoning||void 0,status:"success",tools_used:C.length?C:void 0,prompt_hash:f?kt(f):void 0,...t.storePrompts&&w?{completion_text:t.redactForStorage(w)}:{},user_id:m,session_id:g,tags:s?.tags,environment:t.environment,sdk_version:"1.0.0"}),S.delete(T),b.delete(T)}}yield v}}),t.enqueue({event_id:u(),project_id:"",trace_id:o,span_id:a,parent_span_id:s?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:"agent.run",span_kind:"agent",agent_id:d,agent_name:l,agent_role:p,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-i,stream:!1,input_tokens:x,output_tokens:_,cached_tokens:E||void 0,status:"success",prompt_hash:f?kt(f):void 0,...t.storePrompts?{prompt_text:t.redactForStorage(f),completion_text:t.redactForStorage(k)}:{},user_id:m,session_id:g,tags:s?.tags,environment:t.environment,sdk_version:"1.0.0",metadata:{eventCount:y,agentsThatRan:[...I]}}),X(a)}catch(v){throw X(a),t.enqueue({event_id:u(),project_id:"",trace_id:o,span_id:a,parent_span_id:s?.spanId,timestamp:new Date().toISOString(),provider:"google-adk",model:c,operation:"agent.run",span_kind:"agent",agent_id:d,agent_name:l,agent_role:p,agent_framework:"google-adk",parent_agent_id:s?.agentId,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_code:yn(v),error_message:String(v?.message??v).slice(0,500),user_id:m,session_id:g,tags:s?.tags,environment:t.environment,sdk_version:"1.0.0"}),v}}function It(r){let{coordinator:e,runner:n,agentName:t,agentRole:s,model:o,...a}=r,d=qe(e,{...a,agentName:t??e?.name,agentRole:s??"coordinator",traceSubAgents:!0}),i=nt(n,{agentName:t??e?.name,agentRole:s??"coordinator",model:o});return{coordinator:d,runner:i}}var vt=qe;var kn=require("@opentelemetry/sdk-trace-node"),bt=require("@opentelemetry/core");function Xn(){try{return P()}catch{return null}}var wt=class{export(e,n){let t=Xn();if(!t){n({code:bt.ExportResultCode.SUCCESS});return}try{for(let s of e){let{name:o}=s;if(!o.startsWith("ai."))continue;let a=s.attributes,d=G(),i=s.spanContext().spanId,l=s.spanContext().traceId,p=s.duration[0]*1e3+s.duration[1]/1e6,c=new Date(s.startTime[0]*1e3+s.startTime[1]/1e6).toISOString(),m=s.status.code===2,g={event_id:u(),project_id:"",trace_id:d?.traceId??l,span_id:i,parent_span_id:d?.spanId,timestamp:c,provider:String(a["ai.model.provider"]??"unknown"),model:String(a["ai.model.id"]??"unknown"),latency_ms:p,stream:!1,status:m?"error":"success",environment:t.environment,sdk_version:"1.0.0"};o==="ai.generateText"||o==="ai.generateText.doGenerate"?(X(i),t.enqueue({...g,operation:"generateText",input_tokens:Number(a["ai.usage.promptTokens"]??0),output_tokens:Number(a["ai.usage.completionTokens"]??0),finish_reason:String(a["ai.response.finishReason"]??""),span_kind:"llm",...t.storePrompts&&a["ai.prompt"]?{prompt_text:t.redactForStorage(String(a["ai.prompt"]))}:{},...t.storePrompts&&a["ai.response.text"]?{completion_text:t.redactForStorage(String(a["ai.response.text"]))}:{}})):o==="ai.streamText"||o==="ai.streamText.doStream"?(X(i),t.enqueue({...g,operation:"streamText",stream:!0,input_tokens:Number(a["ai.usage.promptTokens"]??0),output_tokens:Number(a["ai.usage.completionTokens"]??0),finish_reason:String(a["ai.response.finishReason"]??""),ttft_ms:a["ai.response.msToFirstChunk"]!==void 0?Number(a["ai.response.msToFirstChunk"]):void 0,span_kind:"llm"})):o==="ai.generateObject"||o==="ai.generateObject.doGenerate"?(X(i),t.enqueue({...g,operation:"generateObject",input_tokens:Number(a["ai.usage.promptTokens"]??0),output_tokens:Number(a["ai.usage.completionTokens"]??0),span_kind:"general"})):o==="ai.toolCall"?t.enqueue({...g,provider:"vercel-ai",model:"tool",operation:`tool.${String(a["ai.toolCall.name"]??"unknown")}`,input_tokens:0,output_tokens:0,span_kind:"tool",tools_used:a["ai.toolCall.name"]?[String(a["ai.toolCall.name"])]:[]}):(o==="ai.embed"||o==="ai.embedMany")&&t.enqueue({...g,operation:o==="ai.embed"?"embed":"embedMany",input_tokens:Number(a["ai.usage.tokens"]??0),output_tokens:0,span_kind:"embedding"})}}catch{}n({code:bt.ExportResultCode.SUCCESS})}shutdown(){return Promise.resolve()}},Ct=class{exporter;constructor(e){this.exporter=e}onStart(e,n){e.name?.startsWith("ai.")&&oe(e.spanContext().spanId)}onEnd(e){e.name.startsWith("ai.")&&X(e.spanContext().spanId),this.exporter.export([e],()=>{})}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},st=null,St=null;function at(){return st||(st=new kn.NodeTracerProvider,st.addSpanProcessor(new Ct(new wt)),St=st.getTracer("zespan-vercel-ai")),{tracer:St,telemetry:{isEnabled:!0,tracer:St}}}function xt(){return at().telemetry}function je(){try{return P()}catch{return null}}function Yn(r){let e=r.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 Pe=class{runs=new Map;guardrailSettings;constructor(e={}){this.guardrailSettings=Q(e.guardrails,"chat")}_onLLMStart=async e=>{let n=e.id??u(),t=G(),s=u();oe(s);let o=e.detail?.llm?.metadata?.model_name??e.detail?.model??"unknown",a=t?.traceId??u(),d=JSON.stringify(e.detail?.messages??e.detail?.prompt??e.detail?.input??""),i;try{let l=je();l&&d&&(i=await B(l,this.guardrailSettings,{text:d,phase:"pre",traceId:a,spanId:s,model:o,operation:"chat"}))}catch(l){if(l instanceof J)throw l}this.runs.set(n,{t0:performance.now(),traceId:a,spanId:s,parentSpanId:t?.spanId,model:o,preGuardrailResult:i,promptText:d})};_onLLMEnd=async e=>{let n=this.runs.get(e.id??"");if(!n)return;this.runs.delete(e.id),X(n.spanId);let t=je();if(!t)return;let s=e.detail?.response??e.detail?.chunk??{},o=s.usage??s.raw?.usage??{},a=(typeof s.text=="string"?s.text:null)??(typeof s.message?.content=="string"?s.message.content:null)??"",d=a,i;if(a)try{i=await B(t,this.guardrailSettings,{text:a,phase:"post",traceId:n.traceId,spanId:n.spanId,model:n.model,operation:"chat"}),d=ee(a,i)}catch(p){p instanceof J||(i=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:Yn(n.model),model:n.model,operation:"chat",latency_ms:performance.now()-n.t0,ttft_ms:n.ttft,stream:!1,input_tokens:o.promptTokens??o.prompt_tokens??0,output_tokens:o.completionTokens??o.completion_tokens??0,finish_reason:s.finishReason??s.finish_reason??"",status:"success",span_kind:"llm",agent_id:G()?.agentId,agent_name:G()?.agentName,...t.storePrompts?{prompt_text:t.redactForStorage(n.promptText??""),completion_text:t.redactForStorage(d)}:{},metadata:{guardrails:{pre:l?{matched:l.results.length,modified:!!l.modifiedText}:null,post:i?{matched:i.results.length,modified:!!i.modifiedText}:null}},environment:t.environment,sdk_version:"1.0.0"})}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=je();if(!n)return;let t=G(),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:"1.0.0"})}catch{}};_onToolResult=e=>{let n=je();if(!n)return;let t=G(),s=e.detail?.toolCall?.name??e.detail?.name??"",o=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(o).slice(0,10240),agent_id:t?.agentId,agent_name:t?.agentName,environment:n.environment,sdk_version:"1.0.0"})}catch{}};_onAgentStart=e=>{let n=e.id??u(),t=G();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=je();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:"1.0.0"})}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 Tt(r){let e=P(),n=G(),t=n?.traceId??u(),s=u(),o=performance.now(),a=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:r.span_kind??"general"}:{},d={};return{span:{setEvalScore(l,p){d[l]=p},async end(l){let p=performance.now()-o;try{e.enqueue({event_id:u(),project_id:"",trace_id:t,span_id:s,parent_span_id:n?.spanId,timestamp:new Date().toISOString(),provider:r.provider??"custom",model:r.model??"custom",operation:"custom",latency_ms:p,stream:!1,input_tokens:l.input_tokens??0,output_tokens:l.output_tokens??0,cost_usd:l.cost_usd,status:l.status,error_message:l.error_message?.slice(0,500),environment:e.environment,eval_scores:Object.keys(d).length?d:void 0,sdk_version:"1.0.0",...a})}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 Ee=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=P(),t=G(),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:"1.0.0",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=P(),o=G(),a=u(),d=o?.traceId??u(),i=performance.now(),l=this.tools.find(p=>p.name===e);try{let p=await W({traceId:d,spanId:a,userId:o?.userId,sessionId:o?.sessionId,tags:o?.tags,agentId:this.agentId,agentName:this.name,agentRole:this.role,agentFramework:this.framework},()=>t()),c=typeof p=="string"?p:JSON.stringify(p),m={event_id:u(),project_id:"",trace_id:d,span_id:a,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${e}`,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:s.environment,sdk_version:"1.0.0",agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[e],tool_call_id:a,tool_call_args:n,tool_call_result:c.slice(0,10240),tool_definitions:l?[l]:void 0,user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags};return s.enqueue(m),p}catch(p){let c=p instanceof Error?p.message:String(p),m={event_id:u(),project_id:"",trace_id:d,span_id:a,parent_span_id:o?.spanId,timestamp:new Date().toISOString(),provider:"tool",model:"",operation:`tool.${e}`,latency_ms:performance.now()-i,stream:!1,input_tokens:0,output_tokens:0,status:"error",error_message:c.slice(0,500),environment:s.environment,sdk_version:"1.0.0",agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"tool",tools_used:[e],tool_call_id:a,tool_call_args:n,user_id:o?.userId,session_id:o?.sessionId,tags:o?.tags};throw s.enqueue(m),p}}delegateTo(e,n){let t=P(),s=G(),o={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:"1.0.0",agent_id:this.agentId,agent_name:this.name,agent_role:this.role,agent_framework:this.framework,span_kind:"handoff",delegation_reason:n,user_id:s?.userId,session_id:s?.sessionId,tags:s?.tags};t.enqueue(o)}};function Ot(r,e){let n=P(),t=G(),s=u(),o=t?.traceId??u(),a=u(),d={event_id:u(),project_id:"",trace_id:o,span_id:a,parent_span_id:t?.spanId,timestamp:new Date().toISOString(),provider:"agent",model:"",operation:`agent.${r.name}`,latency_ms:0,stream:!1,input_tokens:0,output_tokens:0,status:"success",environment:n.environment,sdk_version:"1.0.0",agent_id:s,agent_name:r.name,agent_role:r.role??"specialist",agent_framework:r.framework??"custom",parent_agent_id:t?.agentId,span_kind:"agent",tool_definitions:r.tools,delegation_reason:t?.agentId?"delegated":"root",user_id:t?.userId,session_id:t?.sessionId,tags:t?.tags,metadata:r.metadata};return n.enqueue(d),W({traceId:o,spanId:a,userId:t?.userId,sessionId:t?.sessionId,tags:t?.tags,agentId:s,agentName:r.name,agentRole:r.role??"specialist",agentFramework:r.framework??"custom",parentAgentId:t?.agentId,availableTools:r.tools},()=>e(new Ee(s,r)))}var In=require("@opentelemetry/api"),ot=class{onStart(e,n){let t=In.propagation.getBaggage(n);t&&t.getAllEntries().forEach(([s,o])=>{e.setAttribute(`baggage.${s}`,o.value)})}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}};var me=require("@opentelemetry/api");function Ge(r,e,n){let t={};e&&(t["agent.delegation.reason"]=e),n&&(t["agent.task"]=n);let s=me.context.active();if(Object.keys(t).length>0){let o=me.propagation.getBaggage(s)??me.propagation.createBaggage();for(let[a,d]of Object.entries(t))o=o.setEntry(a,{value:d});s=me.propagation.setBaggage(s,o)}me.propagation.inject(s,r)}function De(r){return me.propagation.extract(me.context.active(),r)}var vn={OTEL_EXPORTER_OTLP_ENDPOINT:"http://localhost:4318",OTEL_SERVICE_NAME:"crewai-agent"};function Sn(){return`
|
|
8
|
+
pip install openinference-instrumentation-crewai opentelemetry-exporter-otlp-proto-grpc
|
|
9
|
+
|
|
10
|
+
from openinference.instrumentation.crewai import CrewAIInstrumentor
|
|
11
|
+
from opentelemetry import trace
|
|
12
|
+
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
|
13
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
14
|
+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
15
|
+
|
|
16
|
+
provider = TracerProvider()
|
|
17
|
+
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="http://localhost:4318")))
|
|
18
|
+
trace.set_tracer_provider(provider)
|
|
19
|
+
CrewAIInstrumentor().instrument()
|
|
20
|
+
`.trim()}function bn(r,e){let n={};return Ge(n,e),{...r,_lumiq_trace:n}}function wn(r){let e=r._lumiq_trace??{};return De(e)}function Cn(r){return{OTEL_EXPORTER_OTLP_ENDPOINT:r,OTEL_EXPORTER_OTLP_PROTOCOL:"http/protobuf",OTEL_SERVICE_NAME:"pydantic-ai-agent",LOGFIRE_SEND_TO_LOGFIRE:"false"}}var es={init:Ve,getClient:P,getZespanClient:P,wrapOpenAI:Re,wrapAnthropic:gt,wrapGoogle:ft,wrapOpenRouter:yt,wrapADKAgent:vt,wrapADKRunner:nt,instrumentADK:It,startSpan:Tt,withContext:xe,withTrace:Be,withAgent:Ot,initOTel:Ce,getTracer:fe,createSpan:it,withSpan:dt,PromptClient:ke,CallbackHandler:we,ADKCallbackHandler:Me,autopatch:Ae,markFrameworkActive:oe,markFrameworkInactive:X,instrumentVercelAI:at,getLumiqVercelTelemetry:xt,LumiqLlamaIndexHandler:Pe};0&&(module.exports={AgentContext,BaggageSpanProcessor,CREWAI_OTEL_ENV,GuardrailBlockedError,LumiqCallbackHandler,LumiqClient,LumiqLlamaIndexHandler,PromptClient,SpanKind,SpanStatusCode,ZespanADKCallbackHandler,ZespanCallbackHandler,ZespanClient,attachTraceToAutoGenMessage,autopatch,createSpan,extractAgentContext,extractAutoGenContext,extractTraceFromAutoGenMessage,getCrewAIInstrumentationGuide,getLumiqClient,getLumiqVercelTelemetry,getPydanticAIConfig,getTracer,getZespanClient,init,initOTel,initZespan,injectAgentContext,injectAutoGenContext,instrumentADK,instrumentVercelAI,markFrameworkActive,markFrameworkInactive,startSpan,withAgent,withLumiqContext,withSpan,withZespan,withZespanContext,withZespanTrace,wrapADKAgent,wrapADKRunner,wrapAnthropic,wrapBedrock,wrapGoogle,wrapGroq,wrapLiteLLM,wrapMistral,wrapOpenAI,wrapOpenRouter,wrapZespanADKAgent,zespan});
|