syntropylabs-evalkit 0.1.29 → 0.1.30

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.
@@ -0,0 +1,4 @@
1
+ import {trace,context,SpanKind,SpanStatusCode}from'@opentelemetry/api';import {createRequire}from'module';var f=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(a,r)=>(typeof require<"u"?require:a)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var E=new Map,C=new Map;function m(e,a,r){if(!e||!a||!E.has(e))return;let o=C.get(e)??[];o.push({name:a,args:r}),C.set(e,o);}var k=32768;function p(e){return e.length<=k?e:e.slice(0,k)+"\u2026"}function y(e){if(typeof e=="string")return e;try{return JSON.stringify(e??{})}catch{return String(e)}}function w(e){try{let a=JSON.parse(e);return a&&typeof a=="object"?a:void 0}catch{return}}function G(e,a){let r=[];try{for(let o of e?.choices??[])for(let n of o?.message?.tool_calls??[]){let t=n?.function?.name??"";t&&r.push({name:t,argsJson:p(y(n?.function?.arguments??"")),id:n?.id??""});}}catch{}return r}function W(e,a){let r=[];try{for(let o of e??[]){if(o?.type!=="tool_use")continue;let n=o?.name??"";n&&r.push({name:n,argsJson:p(y(o?.input??{})),id:o?.id??""});}}catch{}return r}function X(e,a){let r=[];try{let o=[];if(Array.isArray(e?.functionCalls))o.push(...e.functionCalls);else for(let t of e?.candidates??[])for(let i of t?.content?.parts??[])i?.functionCall?.name&&o.push(i.functionCall);let n=0;for(let t of o){let i=t?.name??"";i&&r.push({name:i,argsJson:p(y(t?.args??{})),id:t?.id??`call_${n++}`});}}catch{}return r}function R(e,a){let r=[];try{for(let o of e?.generations??[])for(let n of o??[])for(let t of n?.message?.tool_calls??[]){let i=t?.name??"";i&&r.push({name:i,argsJson:p(y(t?.args??{})),id:t?.id??""});}}catch{}return r}function S(e,a,r){if(!r.length)return;let o=a.spanContext().traceId,n=trace.setSpan(context.active(),a);for(let t of r){if(!t.name)continue;let i={"gen_ai.tool.name":t.name,"gen_ai.tool.call.id":t.id,"gen_ai.tool.call.arguments":t.argsJson};t.result!=null&&(i["gen_ai.tool.call.result"]=t.result);try{a.addEvent("gen_ai.tool.call",i);}catch{}try{m(o,t.name,w(t.argsJson));}catch{}if(t.result!=null)try{e.tracer.startSpan(t.name,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...i,"tool.name":t.name,"tool.arguments":t.argsJson,"tool.result":t.result}},n).end();}catch{}}}var _=new Function("s","return import(s)");function Q(e){if(typeof f>"u")return null;let a=f.cache;if(!a)return null;let r=Object.keys(a).find(o=>{let n=o.split("/node_modules/");return n.length>1&&n[n.length-1].startsWith(e+"/")});return r?a[r]?.exports??null:null}function V(){return typeof f<"u"?f:createRequire(import.meta.url)}var J=4096;function u(e,a=J){let r;try{r=typeof e=="string"?e:JSON.stringify(e);}catch{r=String(e);}return r==null?"":r.length>a?r.slice(0,a)+"\u2026":r}function b(e){let a=e?.id;if(Array.isArray(a)){for(let r of ["openai","anthropic","google","vertexai","cohere","mistral","bedrock","ollama","groq"])if(a.includes(r))return r==="vertexai"?"vertex-ai":r;return a[a.length-1]}}function v(e,a){let r=a?.invocation_params??{};for(let n of ["model","model_name","modelName","model_id","deployment_name"])if(r[n])return String(r[n]);let o=e?.kwargs??{};for(let n of ["model","model_name","modelName","model_id"])if(o[n])return String(o[n]);return "unknown"}function z(e){try{let r=((Array.isArray(e?.[0])?e[0]:e)??[]).map(o=>{let n=(typeof o?._getType=="function"?o._getType():void 0)??o?.role??o?.type??"message",t=typeof o?.content=="string"?o.content:u(o?.content);return `${n}: ${t}`});return u(r.join(`
2
+ `))}catch{return u(e)}}function L(e){try{let a=[];for(let r of e?.generations??[])for(let o of r??[])o?.text?a.push(String(o.text)):o?.message?.content&&a.push(typeof o.message.content=="string"?o.message.content:u(o.message.content));return u(a.filter(Boolean).join(`
3
+ `))}catch{return ""}}function I(e){let a=0,r=0;try{let o=e?.llmOutput?.tokenUsage??e?.llmOutput?.usage??{};if(a=o.promptTokens??o.prompt_tokens??o.input_tokens??0,r=o.completionTokens??o.completion_tokens??o.output_tokens??0,!a&&!r)for(let n of e?.generations??[])for(let t of n??[]){let i=t?.message?.usage_metadata;i&&(a=i.input_tokens??a,r=i.output_tokens??r);}}catch{}return {tin:a||0,tout:r||0}}function j(e){let a=new Map;function r(n,t,i,l,s){try{let c=t?a.get(t):void 0,d=c?c.ctx:context.active(),g=e.tracer.startSpan(l,{kind:i==="llm_call"?SpanKind.CLIENT:SpanKind.INTERNAL,attributes:{"evalkit.span_type":i,"evalkit.framework":"langchain",...s}},d);a.set(n,{span:g,ctx:trace.setSpan(d,g)});}catch{}}function o(n,t,i,l){try{let s=a.get(n);if(!s)return;a.delete(n),i&&s.span.setAttributes(i),s.span.setStatus({code:t==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR,message:l}),s.span.end();}catch{}}return {handleChainStart(n,t,i,l,s,c,d,g){let h=g??n?.id?.[n.id.length-1]??"chain";r(i,l,"function_call",String(h),s?.length?{"langchain.tags":s.join(",")}:{});},handleChainEnd(n,t){o(t,"OK");},handleChainError(n,t){o(t,"ERROR",void 0,String(n?.message??n));},handleLLMStart(n,t,i,l,s){let c=v(n,s);r(i,l,"llm_call","llm.generate",{"gen_ai.request.model":c,"gen_ai.system":b(n)??"","evalkit.prompt":u((t??[]).join(`
4
+ `))});},handleChatModelStart(n,t,i,l,s){let c=v(n,s);r(i,l,"llm_call","chat.generate",{"gen_ai.request.model":c,"gen_ai.system":b(n)??"","evalkit.prompt":z(t)});},handleLLMEnd(n,t){let{tin:i,tout:l}=I(n),s=a.get(t);try{s&&S(e,s.span,R(n));}catch{}o(t,"OK",{"evalkit.completion":L(n),"gen_ai.usage.input_tokens":i,"gen_ai.usage.output_tokens":l,"gen_ai.usage.total_tokens":i+l});},handleLLMError(n,t){o(t,"ERROR",void 0,String(n?.message??n));},handleToolStart(n,t,i,l,s,c,d){let g=d??n?.id?.[n.id.length-1]??"tool",h=a.get(l??"");m(h?.span.spanContext().traceId,String(g)),r(i,l,"tool_call",String(g),{"tool.name":String(g),"tool.arguments":u(t)});},handleToolEnd(n,t){o(t,"OK",{"tool.result":u(n)});},handleToolError(n,t){o(t,"ERROR",void 0,String(n?.message??n));},handleRetrieverStart(n,t,i,l){let s=n?.id?.[n.id.length-1]??"retriever";r(i,l,"db_query",String(s),{"retriever.query":u(t)});},handleRetrieverEnd(n,t){let i=Array.isArray(n)?n.length:0;o(t,"OK",{"retriever.document_count":i});},handleRetrieverError(n,t){o(t,"ERROR",void 0,String(n?.message??n));}}}async function P(e){try{let r=(await _("@langchain/core/callbacks/base")).BaseCallbackHandler.fromMethods(j(e));return r.name="evalkit",r.__evalkit=!0,r}catch{return null}}async function rn(e){let a=await P(e);if(!a)return null;try{let o=(await _("@langchain/core/callbacks/manager")).CallbackManager;if(o&&typeof o.configure=="function"&&!o.__evalkitPatched){let n=o.configure.bind(o);o.configure=(...t)=>{let i=n(...t);try{i&&![...i.handlers??[],...i.inheritableHandlers??[]].some(c=>c?.__evalkit)&&typeof i.addHandler=="function"&&i.addHandler(a,!0);}catch{}return i},o.__evalkitPatched=!0;}}catch{}return a}export{f as a,E as b,C as c,G as d,W as e,X as f,S as g,_ as h,Q as i,V as j,j as k,P as l,rn as m};
package/dist/index.js CHANGED
@@ -1,15 +1,15 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var api=require('@opentelemetry/api'),crypto=require('crypto'),sdkTraceNode=require('@opentelemetry/sdk-trace-node'),sdkTraceBase=require('@opentelemetry/sdk-trace-base'),resources=require('@opentelemetry/resources'),semanticConventions=require('@opentelemetry/semantic-conventions'),module$1=require('module');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var At=Object.defineProperty;var nr=Object.getOwnPropertyDescriptor;var rr=Object.getOwnPropertyNames;var or=Object.prototype.hasOwnProperty;var I=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var ee=(e,t)=>{for(var n in t)At(e,n,{get:t[n],enumerable:true});},sr=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of rr(t))!or.call(e,o)&&o!==n&&At(e,o,{get:()=>t[o],enumerable:!(r=nr(t,o))||r.enumerable});return e};var ar=e=>sr(At({},"__esModule",{value:true}),e);function ir(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let a=1;a<=n;a++)for(let c=1;c<=r;c++)e[a-1]===t[c-1]?o[a][c]=o[a-1][c-1]+1:o[a][c]=Math.max(o[a-1][c],o[a][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function cr(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(i=>r.has(i))),s=o.size/n.size,a=o.size/r.size;return {score:s+a===0?0:2*s*a/(s+a),precision:s,recall:a}}function lr(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function pr(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function ur(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),a=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=a,r.push(a);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function dr(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function mr(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function U(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(i=>i.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let i=ir(n,r);o.tool_trajectory=i.score,s.tool_trajectory={lcsLength:i.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let i=cr(n,r);o.tool_f1=i.score,s.tool_f1={precision:i.precision,recall:i.recall};}if(t.has("tool_correctness")&&r.length>0){let i=lr(n,r);o.tool_correctness=i.score,s.tool_correctness={called:i.called,total:i.total};}let a=e.constraints?.requiredTerms??[];if(t.has("response_match")&&a.length>0){let i=pr(e.output,a);o.response_match=i.score,s.response_match={matched:i.matched,missing:i.missing};}if(t.has("constraint_compliance")&&e.constraints){let i=ur(e.output,e.constraints);o.constraint_compliance=i.score,s.constraint_compliance={checks:i.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let i=dr(e.retrievedContext,e.expectedContext);o.contextual_precision=i.score,s.contextual_precision={relevant:i.relevant,total:i.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let i=mr(e.retrievedContext,e.expectedContext);o.contextual_recall=i.score,s.contextual_recall={covered:i.covered,total:i.total};}let c={scores:o,details:s};try{let i=(re(),ar(ne)),l={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[p,u]of Object.entries(o))l[`evalkit.metric.${p}`]=u;let{end:d}=i.startSpan("evaluation",l);d("OK");}catch{}return c}var vt=x(()=>{});function xt(e,t,n){if(!e||!t||!F.has(e))return;let r=Z.get(e)??[];r.push({name:t,args:n}),Z.set(e,r);}var F,Z,tt=x(()=>{F=new Map,Z=new Map;});function _t(e){return crypto.randomBytes(e).toString("hex")}function oe(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}async function se(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(oe)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(oe)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature),t.reasoningEffort!==void 0&&(r.reasoningEffort=t.reasoningEffort),t.maxCompletionTokens!==void 0&&(r.maxCompletionTokens=t.maxCompletionTokens),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${a}`)}return (await o.json()).scenarios??[]}function yr(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function hr(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return U({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function vr(e,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+_t(6),a="sess_"+_t(6),c=yr(n).slice(0,r.maxTurns),i={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:l,end:d,ctx:p}=e.startTrace(`scenario:${o}`,{"evalkit.session_id":a});F.set(l,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let u="OK",m,f=[],g=[],y=0,h={};try{await api.context.with(p,async()=>{for(let S=0;S<c.length;S++){let O={message:c[S],sessionId:a,state:i,turn:S+1},w=await t.entrypoint(O);w&&typeof w=="object"&&"text"in w?(f.push(w.text),w.toolCalls&&g.push(...w.toolCalls)):f.push(String(w)),y++;}let k=g.length?g:Z.get(l)??[];h=hr(n,f.join(`
2
- `),k,t.metrics);});}catch(k){u="ERROR",m=k?.message??String(k);}finally{d(u);}let v={scenarioId:s,name:o,status:u,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:l}}async function ae(e,t){let n="sim_"+_t(8),r="run_"+_t(8),o=t.maxTurns??12,s=[],a=[];for(let c of t.scenarios){let{result:i,traceId:l}=await vr(e,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(i),a.push(l);}await e.flush();for(let c of a)F.delete(c),Z.delete(c);return {simulationId:n,runId:r,results:s}}async function ie(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={simulationId:t.simulationId,collectionId:t.collectionId,provider:t.provider,model:t.model,apiKey:t.apiKey};t.runId!==void 0&&(r.runId=t.runId),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/simulations/evaluate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r),signal:AbortSignal.timeout(3e5)});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`evaluateSimulation failed ${o.status}: ${s}`)}return await o.json()}var ce=x(()=>{tt();vt();});var M,le=x(()=>{(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(M||(M={}));});var pe=x(()=>{le();});function xr(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=V)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let a=o[s];typeof a=="string"&&a.length>1024&&(o[s]=r(a.length));}if(n(e)<=V||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=V))return e;if(o)for(let[s,a]of Object.entries(o))typeof a=="string"&&a.length>512&&(o[s]=a.slice(0,512)+"\u2026");return n(e)<=V||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=V)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${V}B)`),null)}function It(e){return e[0]*1e3+e[1]/1e6}function _r(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function Cr(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function kr(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function de(e){return new Promise(t=>setTimeout(t,e))}var ue,V,Ct,me=x(()=>{pe();tt();ue=3,V=900*1024,Ct=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:M.FAILED});return}let r=t.map(s=>xr(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:M.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let a=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=ue?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${a} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${ue})`)):console.error(`[evalkit] export failed ${s.status}: ${a}`),n({code:M.FAILED});return}if(this.authFailures=0,this.debug){let a=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${a.status}`);}n({code:M.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:M.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let a=0;a<=r;a++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(a<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${a+1}/${r}`),await de(o[a]??1800);else return c}catch(c){s=c,a<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${a+1}/${r}:`,c),await de(o[a]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=It(t.startTime),s=It(t.endTime),a=t.events.map(l=>({name:l.name,timestamp:new Date(It(l.time)).toISOString(),attributes:l.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:_r(t.kind),spanType:r["evalkit.span_type"]??"log",status:Cr(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:a.length>0?a:void 0,attributes:kr(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},i=F.get(n.traceId);return i&&(c.isSimulation=true,c.simulationId=i.simulationId,c.scenarioId=i.scenarioId,c.runId=i.runId),c}};});function J(e,t=Tr){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var wr,Tr;exports.EvalKitClient=void 0;var Mt=x(()=>{me();wr="0.1.29",Tr=4096;exports.EvalKitClient=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new Ct({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new sdkTraceNode.NodeTracerProvider({resource:new resources.Resource({[semanticConventions.ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new sdkTraceBase.BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=api.trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":wr};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,n){let r=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},api.context.active()),o=api.trace.setSpan(api.context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(a="OK")=>{r.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},api.context.active()),s=api.trace.setSpan(api.context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",i)=>{i?.statusCode!==void 0&&o.setAttribute("http.status_code",i.statusCode),i?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(i.body)),i?.headers&&o.setAttribute("http.response.headers",JSON.stringify(i.headers)),o.setStatus({code:c==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??api.context.active());return {ctx:api.trace.setSpan(api.context.active(),o),end:(a="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"function_call",...r};o&&a.length&&(c["function.args"]=J(a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"function.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"function.result":J(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&a.length&&(c["tool.arguments"]=J(a.length===1?a[0]:a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"tool.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"tool.result":J(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function K(e){if(!e)return api.context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?api.trace.setSpanContext(api.ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):api.context.active()}var W=x(()=>{});function kt(e){return e.length<=ge?e:e.slice(0,ge)+"\u2026"}function St(e){if(typeof e=="string")return e;try{return JSON.stringify(e??{})}catch{return String(e)}}function Pr(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:void 0}catch{return}}function ye(e,t){let n=[];try{for(let r of e?.choices??[])for(let o of r?.message?.tool_calls??[]){let s=o?.function?.name??"";s&&n.push({name:s,argsJson:kt(St(o?.function?.arguments??"")),id:o?.id??""});}}catch{}return n}function he(e,t){let n=[];try{for(let r of e??[]){if(r?.type!=="tool_use")continue;let o=r?.name??"";o&&n.push({name:o,argsJson:kt(St(r?.input??{})),id:r?.id??""});}}catch{}return n}function ve(e,t){let n=[];try{let r=[];if(Array.isArray(e?.functionCalls))r.push(...e.functionCalls);else for(let s of e?.candidates??[])for(let a of s?.content?.parts??[])a?.functionCall?.name&&r.push(a.functionCall);let o=0;for(let s of r){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(St(s?.args??{})),id:s?.id??`call_${o++}`});}}catch{}return n}function xe(e,t){let n=[];try{for(let r of e?.generations??[])for(let o of r??[])for(let s of o?.message?.tool_calls??[]){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(St(s?.args??{})),id:s?.id??""});}}catch{}return n}function $(e,t,n){if(!n.length)return;let r=t.spanContext().traceId,o=api.trace.setSpan(api.context.active(),t);for(let s of n){if(!s.name)continue;let a={"gen_ai.tool.name":s.name,"gen_ai.tool.call.id":s.id,"gen_ai.tool.call.arguments":s.argsJson};s.result!=null&&(a["gen_ai.tool.call.result"]=s.result);try{t.addEvent("gen_ai.tool.call",a);}catch{}try{xt(r,s.name,Pr(s.argsJson));}catch{}if(s.result!=null)try{e.tracer.startSpan(s.name,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...a,"tool.name":s.name,"tool.arguments":s.argsJson,"tool.result":s.result}},o).end();}catch{}}}var ge,et=x(()=>{tt();ge=32768;});function jr(e,t){let n="",r=0,o=0,s=false;function a(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:api.SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,i,l){if(i===Symbol.asyncIterator)return function(){let p=c[Symbol.asyncIterator]();return {async next(){try{let u=await p.next();if(!u.done&&u.value){let m=u.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return u.done&&a(),u}catch(u){throw a(u instanceof Error?u:new Error(String(u))),u}},return(){return a(),p.return?.()??Promise.resolve({done:true,value:void 0})},throw(u){return a(u instanceof Error?u:new Error(String(u))),p.throw?.(u)??Promise.reject(u)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,i,l);return typeof d=="function"?d.bind(c):d}})}function B(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let a=s[0],c=n??api.context.active(),i=e.tracer.startSpan("chat.completions.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":a.model??"unknown",...a.temperature!=null&&{"gen_ai.request.temperature":a.temperature},...a.max_tokens!=null&&{"gen_ai.request.max_tokens":a.max_tokens},...a.top_p!=null&&{"gen_ai.request.top_p":a.top_p},"evalkit.prompt":$r(a.messages??[])}},c),l=api.trace.setSpan(c,i);if(a?.stream){let m;try{m=await api.context.with(l,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw i.recordException(g),i.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),i.end(),f}return jr(m,i)}let d;try{d=await api.context.with(l,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}let p=d.choices?.[0],u=p?.message.content??"";return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":p?.finish_reason?[p.finish_reason]:[],"evalkit.completion":u}),$(e,i,ye(d)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function $r(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
3
- `)}var qt=x(()=>{et();});function Lr(e,t){let n="",r=0,o=0,s=false;function a(i){let l=i?.type;if(l==="content_block_delta"){let d=i.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else l==="message_start"?r=i.message?.usage?.input_tokens??0:l==="message_delta"&&(o=i.usage?.output_tokens??0);}function c(i){s||(s=true,i?(t.recordException(i),t.setStatus({code:api.SpanStatusCode.ERROR,message:i.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(i,l,d){if(l===Symbol.asyncIterator)return function(){let u=i[Symbol.asyncIterator]();return {async next(){try{let m=await u.next();return !m.done&&m.value&&a(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),u.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let p=Reflect.get(i,l,d);return typeof p=="function"?p.bind(i):p}})}function G(e,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],a=n??api.context.active(),c=Hr(s.system,s.messages??[]),i=e.tracer.startSpan("messages.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},a),l=api.trace.setSpan(a,i);if(s?.stream){let u;try{u=await api.context.with(l,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}return Lr(u,i)}let d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}let p=d.content.filter(u=>u.type==="text").map(u=>u.text??"").join("");return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":p}),$(e,i,he(d.content)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function Hr(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
4
- `)}var Rt=x(()=>{et();});function bt(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!api.trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",a=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${a}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":a,"db.query":JSON.stringify(this._conditions??{})}},api.context.active());try{let i=await r.call(this);return c.setStatus({code:api.SpanStatusCode.OK}),c.end(),i}catch(i){let l=i instanceof Error?i:new Error(String(i));throw c.recordException(l),c.setStatus({code:api.SpanStatusCode.ERROR,message:l.message}),c.end(),i}},n.__evalkit=true;}var jt=x(()=>{});function ot(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(a,...c){if(!api.trace.getActiveSpan()?.isRecording())return s.call(this,a,...c);let l=Array.isArray(a)?a[0]:a?.name??a?.args?.[0]??"cmd",d=(typeof l=="string"?l:String(l)).toUpperCase(),p=e.tracer.startSpan(`redis ${d}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},api.context.active());try{let u=await s.call(this,a,...c);return p.setStatus({code:api.SpanStatusCode.OK}),p.end(),u}catch(u){let m=u instanceof Error?u:new Error(String(u));throw p.recordException(m),p.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),p.end(),u}},r.__evalkit_redis=true;}var $t=x(()=>{});function T(e){let t={};for(let[n,r]of Object.entries(e))Wr.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var Wr,Bt=x(()=>{Wr=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var X,Gt=x(()=>{X=new Map;});function st(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return st(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(Zr.some(d=>d.test(r))||!api.trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let a=(n.method??"get").toUpperCase(),c=T(n.headers??{}),i=e.tracer.startSpan(`${a} ${s}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":a,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},api.context.active()),l=i.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${l.traceId}-${l.spanId}-01`,n.headers["x-evalkit-span-id"]=l.spanId,X.set(l.spanId,i),n.__evalkitSpan=i,n.__evalkitSpanId=l.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=T(n.headers??{}),s=n.data,a;s!=null&&(a=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...a!==void 0?{"http.response.body":a}:{}}),r.setStatus({code:api.SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=T(n.response?.headers??{}),a=n.response?.data,c;a!=null&&(c=(typeof a=="string"?a:JSON.stringify(a)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}var Zr,Lt=x(()=>{Bt();Gt();Zr=[/\/v1\/ingest/,/\/health(z)?$/];});function at(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!api.trace.getActiveSpan()?.isRecording())return r.apply(this,o);let a=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,l=a.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",p=a.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",u=p?`${l} ${p}`:`pg ${l}`,m=e.tracer.startSpan(u,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":l,"db.statement":a.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...p?{"db.sql.table":p}:{}}},api.context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,k)=>{v?(m.recordException(v),m.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",k?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK})),m.end(),y(v,k);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:api.SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},n.__evalkit_pg=true);}var Ht=x(()=>{});function it(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!api.trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",i=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=u?`${d} ${u}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...i!==void 0?{"db.params":JSON.stringify(i).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},api.context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(k,S,O)=>{k?(f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.setAttribute("error.message",k.message)):(f.setAttribute("db.rows_affected",Array.isArray(S)?S.length:S?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK})),f.end(),h(k,S,O);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}var Ut=x(()=>{});function co(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function ct(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!co(s))return r.apply(this,o);let a=s.input,c=a?.modelId??"unknown",i=c.split(".")[0]??"bedrock",l=a?.system?.map(v=>v.text).join(`
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var api=require('@opentelemetry/api'),crypto=require('crypto'),sdkTraceNode=require('@opentelemetry/sdk-trace-node'),sdkTraceBase=require('@opentelemetry/sdk-trace-base'),resources=require('@opentelemetry/resources'),semanticConventions=require('@opentelemetry/semantic-conventions'),module$1=require('module');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var nr=Object.defineProperty;var I=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var te=(e,t)=>{for(var n in t)nr(e,n,{get:t[n],enumerable:true});};function rr(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let a=1;a<=n;a++)for(let c=1;c<=r;c++)e[a-1]===t[c-1]?o[a][c]=o[a-1][c-1]+1:o[a][c]=Math.max(o[a-1][c],o[a][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function or(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(i=>r.has(i))),s=o.size/n.size,a=o.size/r.size;return {score:s+a===0?0:2*s*a/(s+a),precision:s,recall:a}}function sr(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function ar(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function ir(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),a=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=a,r.push(a);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function cr(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function lr(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function H(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(l=>l.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let l=rr(n,r);o.tool_trajectory=l.score,s.tool_trajectory={lcsLength:l.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let l=or(n,r);o.tool_f1=l.score,s.tool_f1={precision:l.precision,recall:l.recall};}if(t.has("tool_correctness")&&r.length>0){let l=sr(n,r);o.tool_correctness=l.score,s.tool_correctness={called:l.called,total:l.total};}let a=e.constraints?.requiredTerms??[];if(t.has("response_match")&&a.length>0){let l=ar(e.output,a);o.response_match=l.score,s.response_match={matched:l.matched,missing:l.missing};}if(t.has("constraint_compliance")&&e.constraints){let l=ir(e.output,e.constraints);o.constraint_compliance=l.score,s.constraint_compliance={checks:l.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let l=cr(e.retrievedContext,e.expectedContext);o.contextual_precision=l.score,s.contextual_precision={relevant:l.relevant,total:l.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let l=lr(e.retrievedContext,e.expectedContext);o.contextual_recall=l.score,s.contextual_recall={covered:l.covered,total:l.total};}let c={scores:o,details:s},i={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[l,d]of Object.entries(o))i[`evalkit.metric.${l}`]=d;return Promise.resolve().then(()=>(ne(),ee)).then(l=>{let{end:d}=l.startSpan("evaluation",i);d("OK");}).catch(()=>{}),c}var vt=x(()=>{});function xt(e,t,n){if(!e||!t||!F.has(e))return;let r=Z.get(e)??[];r.push({name:t,args:n}),Z.set(e,r);}var F,Z,tt=x(()=>{F=new Map,Z=new Map;});function _t(e){return crypto.randomBytes(e).toString("hex")}function re(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}function oe(){if(typeof fetch>"u")throw new Error("[evalkit] global fetch is required (Node 18+). Upgrade Node or install a fetch polyfill.")}async function se(e,t){oe();let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(re)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(re)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature),t.reasoningEffort!==void 0&&(r.reasoningEffort=t.reasoningEffort),t.maxCompletionTokens!==void 0&&(r.maxCompletionTokens=t.maxCompletionTokens),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${a}`)}return (await o.json()).scenarios??[]}function dr(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function mr(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return H({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function fr(e,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+_t(6),a="sess_"+_t(6),c=dr(n).slice(0,r.maxTurns),i={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:l,end:d,ctx:p}=e.startTrace(`scenario:${o}`,{"evalkit.session_id":a});F.set(l,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let u="OK",m,f=[],g=[],y=0,h={};try{await api.context.with(p,async()=>{for(let S=0;S<c.length;S++){let O={message:c[S],sessionId:a,state:i,turn:S+1},w=await t.entrypoint(O);w&&typeof w=="object"&&"text"in w?(f.push(w.text),w.toolCalls&&g.push(...w.toolCalls)):f.push(String(w)),y++;}let k=g.length?g:Z.get(l)??[];h=mr(n,f.join(`
2
+ `),k,t.metrics);});}catch(k){u="ERROR",m=k?.message??String(k);}finally{d(u);}let v={scenarioId:s,name:o,status:u,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:l}}async function ae(e,t){let n="sim_"+_t(8),r="run_"+_t(8),o=t.maxTurns??12,s=[],a=[];for(let c of t.scenarios){let{result:i,traceId:l}=await fr(e,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(i),a.push(l);}await e.flush();for(let c of a)F.delete(c),Z.delete(c);return {simulationId:n,runId:r,results:s}}async function ie(e,t){oe();let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={simulationId:t.simulationId,collectionId:t.collectionId,provider:t.provider,model:t.model,apiKey:t.apiKey};t.runId!==void 0&&(r.runId=t.runId),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/simulations/evaluate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r),signal:AbortSignal.timeout(3e5)});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`evaluateSimulation failed ${o.status}: ${s}`)}return await o.json()}var ce=x(()=>{tt();vt();});var M,le=x(()=>{(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(M||(M={}));});var pe=x(()=>{le();});function gr(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=V)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let a=o[s];typeof a=="string"&&a.length>1024&&(o[s]=r(a.length));}if(n(e)<=V||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=V))return e;if(o)for(let[s,a]of Object.entries(o))typeof a=="string"&&a.length>512&&(o[s]=a.slice(0,512)+"\u2026");return n(e)<=V||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=V)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${V}B)`),null)}function At(e){return e[0]*1e3+e[1]/1e6}function yr(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function hr(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function vr(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function de(e){return new Promise(t=>setTimeout(t,e))}var ue,V,Ct,me=x(()=>{pe();tt();ue=3,V=900*1024,Ct=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:M.FAILED});return}let r=t.map(s=>gr(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:M.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let a=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=ue?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${a} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${ue})`)):console.error(`[evalkit] export failed ${s.status}: ${a}`),n({code:M.FAILED});return}if(this.authFailures=0,this.debug){let a=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${a.status}`);}n({code:M.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:M.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let a=0;a<=r;a++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(a<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${a+1}/${r}`),await de(o[a]??1800);else return c}catch(c){s=c,a<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${a+1}/${r}:`,c),await de(o[a]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=At(t.startTime),s=At(t.endTime),a=t.events.map(l=>({name:l.name,timestamp:new Date(At(l.time)).toISOString(),attributes:l.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:yr(t.kind),spanType:r["evalkit.span_type"]??"log",status:hr(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:a.length>0?a:void 0,attributes:vr(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},i=F.get(n.traceId);return i&&(c.isSimulation=true,c.simulationId=i.simulationId,c.scenarioId=i.scenarioId,c.runId=i.runId),c}};});function J(e,t=Rr){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var Sr,Rr;exports.EvalKitClient=void 0;var Kt=x(()=>{me();Sr="0.1.30",Rr=4096;exports.EvalKitClient=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new Ct({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new sdkTraceNode.NodeTracerProvider({resource:new resources.Resource({[semanticConventions.ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new sdkTraceBase.BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=api.trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":Sr};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,n){let r=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},api.context.active()),o=api.trace.setSpan(api.context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(a="OK")=>{r.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},api.context.active()),s=api.trace.setSpan(api.context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",i)=>{i?.statusCode!==void 0&&o.setAttribute("http.status_code",i.statusCode),i?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(i.body)),i?.headers&&o.setAttribute("http.response.headers",JSON.stringify(i.headers)),o.setStatus({code:c==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??api.context.active());return {ctx:api.trace.setSpan(api.context.active(),o),end:(a="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"function_call",...r};o&&a.length&&(c["function.args"]=J(a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"function.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"function.result":J(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&a.length&&(c["tool.arguments"]=J(a.length===1?a[0]:a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"tool.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"tool.result":J(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function K(e){if(!e)return api.context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?api.trace.setSpanContext(api.ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):api.context.active()}var W=x(()=>{});function kt(e){return e.length<=ge?e:e.slice(0,ge)+"\u2026"}function St(e){if(typeof e=="string")return e;try{return JSON.stringify(e??{})}catch{return String(e)}}function Ar(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:void 0}catch{return}}function ye(e,t){let n=[];try{for(let r of e?.choices??[])for(let o of r?.message?.tool_calls??[]){let s=o?.function?.name??"";s&&n.push({name:s,argsJson:kt(St(o?.function?.arguments??"")),id:o?.id??""});}}catch{}return n}function he(e,t){let n=[];try{for(let r of e??[]){if(r?.type!=="tool_use")continue;let o=r?.name??"";o&&n.push({name:o,argsJson:kt(St(r?.input??{})),id:r?.id??""});}}catch{}return n}function ve(e,t){let n=[];try{let r=[];if(Array.isArray(e?.functionCalls))r.push(...e.functionCalls);else for(let s of e?.candidates??[])for(let a of s?.content?.parts??[])a?.functionCall?.name&&r.push(a.functionCall);let o=0;for(let s of r){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(St(s?.args??{})),id:s?.id??`call_${o++}`});}}catch{}return n}function xe(e,t){let n=[];try{for(let r of e?.generations??[])for(let o of r??[])for(let s of o?.message?.tool_calls??[]){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(St(s?.args??{})),id:s?.id??""});}}catch{}return n}function $(e,t,n){if(!n.length)return;let r=t.spanContext().traceId,o=api.trace.setSpan(api.context.active(),t);for(let s of n){if(!s.name)continue;let a={"gen_ai.tool.name":s.name,"gen_ai.tool.call.id":s.id,"gen_ai.tool.call.arguments":s.argsJson};s.result!=null&&(a["gen_ai.tool.call.result"]=s.result);try{t.addEvent("gen_ai.tool.call",a);}catch{}try{xt(r,s.name,Ar(s.argsJson));}catch{}if(s.result!=null)try{e.tracer.startSpan(s.name,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...a,"tool.name":s.name,"tool.arguments":s.argsJson,"tool.result":s.result}},o).end();}catch{}}}var ge,et=x(()=>{tt();ge=32768;});function Mr(e,t){let n="",r=0,o=0,s=false;function a(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:api.SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,i,l){if(i===Symbol.asyncIterator)return function(){let p=c[Symbol.asyncIterator]();return {async next(){try{let u=await p.next();if(!u.done&&u.value){let m=u.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return u.done&&a(),u}catch(u){throw a(u instanceof Error?u:new Error(String(u))),u}},return(){return a(),p.return?.()??Promise.resolve({done:true,value:void 0})},throw(u){return a(u instanceof Error?u:new Error(String(u))),p.throw?.(u)??Promise.reject(u)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,i,l);return typeof d=="function"?d.bind(c):d}})}function B(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let a=s[0],c=n??api.context.active(),i=e.tracer.startSpan("chat.completions.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":a.model??"unknown",...a.temperature!=null&&{"gen_ai.request.temperature":a.temperature},...a.max_tokens!=null&&{"gen_ai.request.max_tokens":a.max_tokens},...a.top_p!=null&&{"gen_ai.request.top_p":a.top_p},"evalkit.prompt":Pr(a.messages??[])}},c),l=api.trace.setSpan(c,i);if(a?.stream){let m;try{m=await api.context.with(l,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw i.recordException(g),i.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),i.end(),f}return Mr(m,i)}let d;try{d=await api.context.with(l,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}let p=d.choices?.[0],u=p?.message.content??"";return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":p?.finish_reason?[p.finish_reason]:[],"evalkit.completion":u}),$(e,i,ye(d)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function Pr(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
3
+ `)}var Pt=x(()=>{et();});function jr(e,t){let n="",r=0,o=0,s=false;function a(i){let l=i?.type;if(l==="content_block_delta"){let d=i.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else l==="message_start"?r=i.message?.usage?.input_tokens??0:l==="message_delta"&&(o=i.usage?.output_tokens??0);}function c(i){s||(s=true,i?(t.recordException(i),t.setStatus({code:api.SpanStatusCode.ERROR,message:i.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(i,l,d){if(l===Symbol.asyncIterator)return function(){let u=i[Symbol.asyncIterator]();return {async next(){try{let m=await u.next();return !m.done&&m.value&&a(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),u.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let p=Reflect.get(i,l,d);return typeof p=="function"?p.bind(i):p}})}function G(e,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],a=n??api.context.active(),c=$r(s.system,s.messages??[]),i=e.tracer.startSpan("messages.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},a),l=api.trace.setSpan(a,i);if(s?.stream){let u;try{u=await api.context.with(l,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}return jr(u,i)}let d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}let p=d.content.filter(u=>u.type==="text").map(u=>u.text??"").join("");return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":p}),$(e,i,he(d.content)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function $r(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
4
+ `)}var Rt=x(()=>{et();});function bt(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!api.trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",a=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${a}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":a,"db.query":JSON.stringify(this._conditions??{})}},api.context.active());try{let i=await r.call(this);return c.setStatus({code:api.SpanStatusCode.OK}),c.end(),i}catch(i){let l=i instanceof Error?i:new Error(String(i));throw c.recordException(l),c.setStatus({code:api.SpanStatusCode.ERROR,message:l.message}),c.end(),i}},n.__evalkit=true;}var Nt=x(()=>{});function ot(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(a,...c){if(!api.trace.getActiveSpan()?.isRecording())return s.call(this,a,...c);let l=Array.isArray(a)?a[0]:a?.name??a?.args?.[0]??"cmd",d=(typeof l=="string"?l:String(l)).toUpperCase(),p=e.tracer.startSpan(`redis ${d}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},api.context.active());try{let u=await s.call(this,a,...c);return p.setStatus({code:api.SpanStatusCode.OK}),p.end(),u}catch(u){let m=u instanceof Error?u:new Error(String(u));throw p.recordException(m),p.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),p.end(),u}},r.__evalkit_redis=true;}var jt=x(()=>{});function T(e){let t={};for(let[n,r]of Object.entries(e))Vr.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var Vr,$t=x(()=>{Vr=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var X,Bt=x(()=>{X=new Map;});function st(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return st(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(Wr.some(d=>d.test(r))||!api.trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let a=(n.method??"get").toUpperCase(),c=T(n.headers??{}),i=e.tracer.startSpan(`${a} ${s}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":a,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},api.context.active()),l=i.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${l.traceId}-${l.spanId}-01`,n.headers["x-evalkit-span-id"]=l.spanId,X.set(l.spanId,i),n.__evalkitSpan=i,n.__evalkitSpanId=l.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=T(n.headers??{}),s=n.data,a;s!=null&&(a=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...a!==void 0?{"http.response.body":a}:{}}),r.setStatus({code:api.SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=T(n.response?.headers??{}),a=n.response?.data,c;a!=null&&(c=(typeof a=="string"?a:JSON.stringify(a)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}var Wr,Gt=x(()=>{$t();Bt();Wr=[/\/v1\/ingest/,/\/health(z)?$/];});function at(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!api.trace.getActiveSpan()?.isRecording())return r.apply(this,o);let a=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,l=a.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",p=a.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",u=p?`${l} ${p}`:`pg ${l}`,m=e.tracer.startSpan(u,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":l,"db.statement":a.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...p?{"db.sql.table":p}:{}}},api.context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,k)=>{v?(m.recordException(v),m.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",k?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK})),m.end(),y(v,k);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:api.SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},n.__evalkit_pg=true);}var Lt=x(()=>{});function it(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!api.trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",i=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=u?`${d} ${u}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...i!==void 0?{"db.params":JSON.stringify(i).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},api.context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(k,S,O)=>{k?(f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.setAttribute("error.message",k.message)):(f.setAttribute("db.rows_affected",Array.isArray(S)?S.length:S?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK})),f.end(),h(k,S,O);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}var Ut=x(()=>{});function oo(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function ct(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!oo(s))return r.apply(this,o);let a=s.input,c=a?.modelId??"unknown",i=c.split(".")[0]??"bedrock",l=a?.system?.map(v=>v.text).join(`
5
5
  `)??"",d=a?.messages?.map(v=>`${v.role}: ${v.content.map(k=>k.text??"").join("")}`)??[],p=[l?`system: ${l}`:"",...d].filter(Boolean).join(`
6
- `),u=a?.inferenceConfig??{},m=api.context.active(),f=e.tracer.startSpan("converse",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":i,"gen_ai.request.model":c,...u.temperature!=null&&{"gen_ai.request.temperature":u.temperature},...u.maxTokens!=null&&{"gen_ai.request.max_tokens":u.maxTokens},...u.topP!=null&&{"gen_ai.request.top_p":u.topP},"evalkit.prompt":p}},m),g=api.trace.setSpan(m,f),y;try{y=await api.context.with(g,()=>r.apply(this,o));}catch(v){let k=v instanceof Error?v:new Error(String(v));throw f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return f.setAttributes({"gen_ai.response.model":c,"gen_ai.usage.input_tokens":y.usage?.inputTokens??0,"gen_ai.usage.output_tokens":y.usage?.outputTokens??0,"gen_ai.usage.total_tokens":y.usage?.totalTokens??0,"gen_ai.response.finish_reasons":y.stopReason?[y.stopReason]:[],"evalkit.completion":h}),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}var Ft=x(()=>{});function lt(e,t,n){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let s=o[0];if(s?.stream)return r.apply(this,o);let a=s?.chatHistory?.map(u=>`${u.role}: ${u.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...a,`user: ${s?.message??""}`].filter(Boolean).join(`
7
- `),i=api.context.active(),l=e.tracer.startSpan("chat",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":s?.model??"unknown",...s?.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s?.maxTokens!=null&&{"gen_ai.request.max_tokens":s.maxTokens},"evalkit.prompt":c}},i),d=api.trace.setSpan(i,l),p;try{p=await api.context.with(d,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw l.recordException(m),l.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),l.end(),u}return l.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":p.generationId??"","gen_ai.usage.input_tokens":p.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":p.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":p.finishReason?[p.finishReason]:[],"evalkit.completion":p.text??""}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.chat.__evalkit=true;}var Vt=x(()=>{});function pt(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c="";if(typeof a=="string")c=`user: ${a}`;else {let g=a,y=g?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=g?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(k=>k.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
- `);}let i=api.context.active(),l=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},i),d=api.trace.setSpan(i,l),p;try{p=await api.context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw l.recordException(y),l.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),l.end(),g}let u=p?.response,m=u?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return l.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":u?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":u?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":u?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.generateContent.__evalkit=true;}var Dt=x(()=>{});function Ie(e){return e?.text??""}function fo(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(Ie).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
- `);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(Ie).join("")}return e!=null?String(e):""}function go(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function Ke(e){let t=go(e?.config),n=fo(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
10
- `)}function Me(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}function Pe(e,t,n){Jt&&$(Jt,t,ve(e));}function dt(e,t,n){if(Jt=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"evalkit.prompt":Ke(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw i.recordException(u),i.setStatus({code:api.SpanStatusCode.ERROR,message:u.message}),i.end(),p}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":Me(d)});try{Pe(d,i,i.spanContext().traceId);}catch{}return i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContentStream",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"gen_ai.streaming":true,"evalkit.prompt":Ke(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}async function*p(){let u=[],m=0,f=0;try{for await(let g of d){try{let y=Me(g);y&&u.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Pe(g,i,i.spanContext().traceId);}catch{}yield g;}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":u.join("")}),i.setStatus({code:api.SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw i.recordException(y),i.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),g}finally{i.end();}}return p()},t.generateContentStream.__evalkit=true;}}var Jt,zt=x(()=>{et();Jt=null;});function Wt(e){if(typeof I>"u")return null;let t=I.cache;if(!t)return null;let n=Object.keys(t).find(r=>{let o=r.split("/node_modules/");return o.length>1&&o[o.length-1].startsWith(e+"/")});return n?t[n]?.exports??null:null}function E(){return typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)))}var R,Xt=x(()=>{R=new Function("s","return import(s)");});var Ge={};ee(Ge,{langchainCallbackHandler:()=>Ot,langchainHandlerMethods:()=>Be,patchLangChain:()=>So});function P(e,t=xo){let n;try{n=typeof e=="string"?e:JSON.stringify(e);}catch{n=String(e);}return n==null?"":n.length>t?n.slice(0,t)+"\u2026":n}function je(e){let t=e?.id;if(Array.isArray(t)){for(let n of ["openai","anthropic","google","vertexai","cohere","mistral","bedrock","ollama","groq"])if(t.includes(n))return n==="vertexai"?"vertex-ai":n;return t[t.length-1]}}function $e(e,t){let n=t?.invocation_params??{};for(let o of ["model","model_name","modelName","model_id","deployment_name"])if(n[o])return String(n[o]);let r=e?.kwargs??{};for(let o of ["model","model_name","modelName","model_id"])if(r[o])return String(r[o]);return "unknown"}function _o(e){try{let n=((Array.isArray(e?.[0])?e[0]:e)??[]).map(r=>{let o=(typeof r?._getType=="function"?r._getType():void 0)??r?.role??r?.type??"message",s=typeof r?.content=="string"?r.content:P(r?.content);return `${o}: ${s}`});return P(n.join(`
11
- `))}catch{return P(e)}}function Co(e){try{let t=[];for(let n of e?.generations??[])for(let r of n??[])r?.text?t.push(String(r.text)):r?.message?.content&&t.push(typeof r.message.content=="string"?r.message.content:P(r.message.content));return P(t.filter(Boolean).join(`
12
- `))}catch{return ""}}function ko(e){let t=0,n=0;try{let r=e?.llmOutput?.tokenUsage??e?.llmOutput?.usage??{};if(t=r.promptTokens??r.prompt_tokens??r.input_tokens??0,n=r.completionTokens??r.completion_tokens??r.output_tokens??0,!t&&!n)for(let o of e?.generations??[])for(let s of o??[]){let a=s?.message?.usage_metadata;a&&(t=a.input_tokens??t,n=a.output_tokens??n);}}catch{}return {tin:t||0,tout:n||0}}function Be(e){let t=new Map;function n(o,s,a,c,i){try{let l=s?t.get(s):void 0,d=l?l.ctx:api.context.active(),p=e.tracer.startSpan(c,{kind:a==="llm_call"?api.SpanKind.CLIENT:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":a,"evalkit.framework":"langchain",...i}},d);t.set(o,{span:p,ctx:api.trace.setSpan(d,p)});}catch{}}function r(o,s,a,c){try{let i=t.get(o);if(!i)return;t.delete(o),a&&i.span.setAttributes(a),i.span.setStatus({code:s==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR,message:c}),i.span.end();}catch{}}return {handleChainStart(o,s,a,c,i,l,d,p){let u=p??o?.id?.[o.id.length-1]??"chain";n(a,c,"function_call",String(u),i?.length?{"langchain.tags":i.join(",")}:{});},handleChainEnd(o,s){r(s,"OK");},handleChainError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleLLMStart(o,s,a,c,i){let l=$e(o,i);n(a,c,"llm_call","llm.generate",{"gen_ai.request.model":l,"gen_ai.system":je(o)??"","evalkit.prompt":P((s??[]).join(`
13
- `))});},handleChatModelStart(o,s,a,c,i){let l=$e(o,i);n(a,c,"llm_call","chat.generate",{"gen_ai.request.model":l,"gen_ai.system":je(o)??"","evalkit.prompt":_o(s)});},handleLLMEnd(o,s){let{tin:a,tout:c}=ko(o),i=t.get(s);try{i&&$(e,i.span,xe(o));}catch{}r(s,"OK",{"evalkit.completion":Co(o),"gen_ai.usage.input_tokens":a,"gen_ai.usage.output_tokens":c,"gen_ai.usage.total_tokens":a+c});},handleLLMError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleToolStart(o,s,a,c,i,l,d){let p=d??o?.id?.[o.id.length-1]??"tool",u=t.get(c??"");xt(u?.span.spanContext().traceId,String(p)),n(a,c,"tool_call",String(p),{"tool.name":String(p),"tool.arguments":P(s)});},handleToolEnd(o,s){r(s,"OK",{"tool.result":P(o)});},handleToolError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleRetrieverStart(o,s,a,c){let i=o?.id?.[o.id.length-1]??"retriever";n(a,c,"db_query",String(i),{"retriever.query":P(s)});},handleRetrieverEnd(o,s){let a=Array.isArray(o)?o.length:0;r(s,"OK",{"retriever.document_count":a});},handleRetrieverError(o,s){r(s,"ERROR",void 0,String(o?.message??o));}}}async function Ot(e){try{let n=(await R("@langchain/core/callbacks/base")).BaseCallbackHandler.fromMethods(Be(e));return n.name="evalkit",n.__evalkit=!0,n}catch{return null}}async function So(e){let t=await Ot(e);if(!t)return null;try{let r=(await R("@langchain/core/callbacks/manager")).CallbackManager;if(r&&typeof r.configure=="function"&&!r.__evalkitPatched){let o=r.configure.bind(r);r.configure=(...s)=>{let a=o(...s);try{a&&![...a.handlers??[],...a.inheritableHandlers??[]].some(l=>l?.__evalkit)&&typeof a.addHandler=="function"&&a.addHandler(t,!0);}catch{}return a},r.__evalkitPatched=!0;}}catch{}return t}var xo,Yt=x(()=>{tt();et();Xt();xo=4096;});function mt(e,t,n){G(e,t,n);}function ft(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c=a?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",i=a?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],l=[c?`system: ${c}`:"",...i].filter(Boolean).join(`
14
- `),d=api.context.active(),p=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":l}},d),u=api.trace.setSpan(d,p),m;try{m=await api.context.with(u,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw p.recordException(v),p.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),p.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),p.setStatus({code:api.SpanStatusCode.OK}),p.end(),m},t.generateContent.__evalkit=true;}var Qt=x(()=>{Rt();});function Ue(e,t={},n){function r(o,s,a){let c={...t,...s};o.addHook("onRequest",(i,l,d)=>{let p=i.routerPath??i.routeOptions?.url??i.url??"/",u=typeof c.name=="function"?c.name(i):c.name??`${String(i.method??"GET")} ${String(p)}`,m=i.headers?.traceparent,f=n?n(m):api.context.active(),{traceId:g,end:y,ctx:h}=api.context.with(f,()=>e.startHttpTrace(u,{method:String(i.method??"GET"),url:String(i.url??"/"),headers:i.headers,requestBody:void 0}));i._evalkitCtx=h,i._evalkitTraceId=g,i._evalkitEnd=y,i._evalkitEnded=false,api.context.with(h,d);}),o.addHook("preHandler",(i,l,d)=>{if(i._evalkitCtx&&i.body!==void 0){let p=api.trace.getActiveSpan();if(p?.isRecording())try{p.setAttribute("http.request.body",typeof i.body=="string"?i.body.slice(0,e.options.maxBodyBytes):JSON.stringify(i.body).slice(0,e.options.maxBodyBytes));}catch{}}api.context.with(i._evalkitCtx??api.context.active(),d);}),o.addHook("onSend",(i,l,d,p)=>{try{if(d!=null){let u=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);i._evalkitRespBody=u;}}catch{}p(null,d);}),o.addHook("onResponse",(i,l,d)=>{if(typeof i._evalkitEnd=="function"&&!i._evalkitEnded){i._evalkitEnded=true;let p=l.statusCode??200;i._evalkitEnd(p>=400?"ERROR":"OK",{statusCode:p,body:i._evalkitRespBody});}d();}),o.addHook("onError",(i,l,d,p)=>{typeof i._evalkitEnd=="function"&&!i._evalkitEnded&&(i._evalkitEnded=true,i._evalkitEnd("ERROR",{statusCode:l.statusCode??500})),p();}),a();}return r[Symbol.for("skip-override")]=true,r}var Fe=x(()=>{});function De(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,a=K(n.headers?.traceparent),{end:c,ctx:i,traceId:l}=api.context.with(a,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=i,n._evalkitTraceId=l;let d=api.trace.getSpan(i)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",l),r.setHeader?.("traceparent",`00-${l}-${d}-01`);let p=e.options.maxBodyBytes,u=[],m=0,f=h=>{if(!(!h||m>=p))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(u.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,k;if(u.length)try{k=Buffer.concat(u).subarray(0,p).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:k}),y.apply(r,h)},api.context.with(i,()=>o());}}var Je=x(()=>{W();});function We(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=K(n.request?.headers?.traceparent),{end:a,ctx:c}=api.context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await api.context.with(c,r);let i=n.status??200,l;try{let d=n.body;d!=null&&(l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}a(i>=400?"ERROR":"OK",{statusCode:i,body:l});}catch(i){throw a("ERROR",{statusCode:n.status??500}),i}}}var Xe=x(()=>{W();});function Qe(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",a=s;try{a=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${a}`,i=K(o.header("traceparent")),{end:l,ctx:d}=api.context.with(i,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await api.context.with(d,r);let p=n.res?.status??200,u;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(u=m.slice(0,e.options.maxBodyBytes));}}catch{}l(p>=400?"ERROR":"OK",{statusCode:p,body:u});}catch(p){throw l("ERROR",{statusCode:500}),p}}}var Ze=x(()=>{W();});function tn(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let a=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=K(o.headers?.traceparent),{end:i,ctx:l}=api.context.with(c,()=>e.startHttpTrace(a,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:i,ctx:l}),s.continue}),n.ext("onPreResponse",(o,s)=>{let a=r.get(o);if(a){let c=o.response?.output?.statusCode??o.response?.statusCode??200,i;try{let l=o.response?.source??o.response?.result;l!=null&&(i=(typeof l=="string"?l:JSON.stringify(l)).slice(0,e.options.maxBodyBytes));}catch{}a.end(c>=400?"ERROR":"OK",{statusCode:c,body:i}),r.delete(o);}return s.continue});}}}var en=x(()=>{W();});exports.EvalKitInterceptor=void 0;var Zt=x(()=>{exports.EvalKitInterceptor=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),a=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:i}=this.client.startHttpTrace(a,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),l=this.client.options.maxBodyBytes,d=[],p=0,u=f=>{if(!(!f||p>=l))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),p+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return u(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return u(g),f(g,...y)};}let m=api.context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{i("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,l).toString("utf-8");}catch{}i(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function Ko(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let a of s)try{n.defineMetadata(a,o.call(n,a,e),t);}catch{}}function nn(e,t,n){let r=n?.include??Io,o=n?.captureIO??true,s=new Set,a=0,c=[...t.getProviders(),...t.getControllers()];for(let i of c){let l=i?.instance;if(!l||typeof l!="object")continue;let d=l.constructor?.name??"";if(!r.test(d))continue;let p=Object.getPrototypeOf(l);if(!(!p||p===Object.prototype||s.has(p))){s.add(p);for(let u of Object.getOwnPropertyNames(p)){if(Ao.has(u))continue;let m=Object.getOwnPropertyDescriptor(p,u);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${u}`,f,void 0,o);Ko(f,g);try{Object.defineProperty(g,"name",{value:u,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(p,u,{...m,value:g}),a++;}}}return a}var Ao,Io,rn=x(()=>{Ao=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),Io=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function te(e){return Mo.some(t=>t.test(e))}function Po(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let a=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",i=e.path??"/";r=`${n}://${a}${c}${i}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function an(e){let t,n;try{let s=typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)));t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:a}of r){let i=function(l,d,p){let u=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=Po(l,u,a);if(te(m)||!api.trace.getActiveSpan()?.isRecording())return c.call(s,l,d,p);let h={...typeof l=="object"&&!(l instanceof URL)?l.headers??{}:{},...u?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof l=="object"&&!(l instanceof URL)&&l.headers&&delete l.headers["x-evalkit-span-id"],u?.headers&&delete u.headers["x-evalkit-span-id"];let b=X.get(String(v));if(b){let _=T({...h});delete _["x-evalkit-span-id"],Object.keys(_).length&&b.setAttributes({"http.request.headers":JSON.stringify(_)});}return c.call(s,l,d,p)}let k=T(h),S=e.tracer.startSpan(`${f} ${g}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},api.context.active()),O=c.call(s,l,d,p),w=S.spanContext();return O.setHeader("traceparent",`00-${w.traceId}-${w.spanId}-01`),O.on("response",b=>{let _=b.statusCode??0;S.setAttributes({"http.status_code":_,...b.headers?{"http.response.headers":JSON.stringify(T(b.headers))}:{}}),S.setStatus({code:_>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),S.end();}),O.on("error",b=>{S.setAttributes({"http.status_code":0,"error.message":b.message}),S.recordException(b instanceof Error?b:new Error(String(b))),S.setStatus({code:api.SpanStatusCode.ERROR,message:b.message}),S.end();}),O};let c=s.request;c.__evalkit||(i.__evalkit=true,Object.defineProperty(s,"request",{value:i,writable:true,configurable:true}));}}function cn(e){let t;try{t=(typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href))))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let a=s[0],c=s[1],i=a.url??"/";if(te(i))return n.call(this,o,...s);if(api.trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let l=(a.method??"GET").toUpperCase(),d=i;try{d=new URL(i,"http://localhost").pathname;}catch{}let p=a.headers.traceparent,u=p?qo(Array.isArray(p)?p[0]:p):api.context.active(),m=e.tracer.startSpan(`${l} ${d}`,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":l,"http.url":i,"http.request.headers":JSON.stringify(T(a.headers))}},u),f=api.trace.setSpan(u,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(a.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let _=[],A=0;a.on("data",q=>{try{if(q&&A<y){let ht=Buffer.isBuffer(q)?q:typeof q=="string"?Buffer.from(q):null;ht&&ht.length&&(_.push(ht),A+=ht.length);}}catch{}}),a.on("end",()=>{if(_.length)try{let q=Buffer.concat(_).subarray(0,y).toString("utf-8");q&&m.setAttribute("http.request.body",q);}catch{}});}let k=[],S=0,O=_=>{try{if(_&&typeof _!="function"&&S<y){let A=Buffer.isBuffer(_)?_:typeof _=="string"?Buffer.from(_):null;A&&A.length&&(k.push(A),S+=A.length);}}catch{}},w=c.write.bind(c),b=c.end.bind(c);return c.write=function(_,...A){return O(_),w(_,...A)},c.end=function(_,...A){return O(_),b(_,...A)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let _=c.getHeaders();_&&Object.keys(_).length&&m.setAttribute("http.response.headers",JSON.stringify(T(_)));}catch{}if(k.length)try{let _=Buffer.concat(k).subarray(0,y).toString("utf-8");_&&m.setAttribute("http.response.body",_);}catch{}m.setStatus({code:c.statusCode>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),m.end();}),c.on("error",_=>{m.setAttribute("error.message",_.message),m.recordException(_ instanceof Error?_:new Error(String(_))),m.setStatus({code:api.SpanStatusCode.ERROR,message:_.message}),m.end();}),api.context.with(f,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function qo(e){let t=e.split("-");if(t.length<4)return api.context.active();let[,n,r,o]=t;if(!n||!r)return api.context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return api.trace.setSpanContext(api.context.active(),s)}catch{return api.context.active()}}function ln(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(te(o))return e(n,r);let s=api.trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let a=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let i={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{i[y]=g;});let l=T(i),d=s.spanContext(),p=`00-${d.traceId}-${d.spanId}-01`,u=new Headers(r?.headers);u.set("traceparent",p);let m={...r,headers:u};Object.keys(l).length&&s.addEvent("http.fetch.request",{"http.method":a,"http.url":o,"http.request.headers":JSON.stringify(l)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(T(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var Mo,pn=x(()=>{Bt();Gt();Mo=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function dn(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=a=>a.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
15
- ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(a,c)=>{let i=api.trace.getActiveSpan();if(i?.isRecording())i.addEvent(`log.${a}`,{"log.level":a,"log.message":c});else {let l=e.tracer.startSpan(`log.${a}`,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":a,"log.message":c}},api.context.active());l.setStatus({code:a==="ERROR"?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),l.end();}};console.log=(...a)=>{t(...a),s("INFO",o(a));},console.warn=(...a)=>{n(...a),s("WARN",o(a));},console.error=(...a)=>{r(...a),s("ERROR",o(a));},console.__evalkit=true;}var mn=x(()=>{});function gn(e,t,n){let r=api.trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},api.context.active());o.recordException(n),o.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),o.end();}}function yn(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));gn(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{gn(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var hn=x(()=>{});function Ho(e){let t=Wt("mongoose");t&&bt(e,t);}function Uo(e){let t=Wt("axios");t&&st(e,t.default??t);}async function Fo(e){try{let n=E()("pg"),r=n.Client??n.default?.Client;if(r){at(e,r);return}}catch{}try{let t=await R("pg"),n=t.Client??t.default?.Client;n&&at(e,n);}catch{}}async function Vo(e){try{let t=E(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){it(e,r);return}}catch{}try{let t=await R("mysql2"),n=t.Connection??t.default?.Connection;n&&it(e,n);}catch{}}async function Do(e){try{let n=E()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){ot(e,r);return}}catch{}try{let t=await R("ioredis"),n=t.default??t.Redis??t;n?.prototype&&ot(e,n);}catch{}}async function Jo(e){try{let n=E()("openai"),o=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o){B(e,o);return}}catch{}try{let t=await R("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&B(e,r);}catch{}}async function zo(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o){G(e,o);return}}catch{}try{let t=await R("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&G(e,r);}catch{}}async function Wo(e){try{let n=E()("@aws-sdk/client-bedrock-runtime"),o=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o){ct(e,o);return}}catch{}try{let t=await R("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&ct(e,r);}catch{}}async function Xo(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o){mt(e,o);return}}catch{}try{let t=await R("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&mt(e,r);}catch{}}async function Yo(e){try{let n=E()("@google-cloud/vertexai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){ft(e,o);return}}catch{}try{let t=await R("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ft(e,r);}catch{}}async function Qo(e){try{let n=E()("cohere-ai"),o=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o){lt(e,o);return}}catch{}try{let t=await R("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&lt(e,r);}catch{}}async function Zo(e){try{let n=E()("@google/generative-ai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){pt(e,o);return}}catch{}try{let t=await R("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&pt(e,r);}catch{}}async function ts(e){try{let n=E()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){dt(e,r.prototype);return}}catch{}try{let t=await R("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&dt(e,n.prototype);}catch{}}async function es(e){try{let n=E()("groq-sdk"),o=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o){B(e,o,void 0,"groq");return}}catch{}try{let t=await R("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&B(e,r,void 0,"groq");}catch{}}async function ns(e){try{let{patchLangChain:t}=await Promise.resolve().then(()=>(Yt(),Ge));await t(e);}catch{}}function vn(e){try{cn(e);}catch{}try{an(e);}catch{}ln(),dn(e),yn(e),Ho(e),Uo(e),Promise.all([Jo(e),zo(e),Wo(e),Xo(e),Yo(e),Qo(e),Zo(e),ts(e),es(e),ns(e),Fo(e),Vo(e),Do(e)]).catch(()=>{});}var xn=x(()=>{Xt();qt();Rt();Ft();Qt();Vt();Dt();zt();jt();Ht();Ut();$t();Lt();pn();mn();hn();});var ne={};ee(ne,{EvalKitClient:()=>exports.EvalKitClient,EvalKitInterceptor:()=>exports.EvalKitInterceptor,TraceMethod:()=>Jn,Traced:()=>zn,createNestjsInterceptor:()=>Gn,currentTraceId:()=>Qn,default:()=>exports.default,enableNestjsAutoTrace:()=>Xn,evaluate:()=>U,evaluateSimulation:()=>er,expressMiddleware:()=>qn,fastifyPlugin:()=>Nn,flush:()=>Hn,generateScenarios:()=>Zn,hapiPlugin:()=>Bn,honoMiddleware:()=>$n,init:()=>_n,koaMiddleware:()=>jn,langchainHandler:()=>On,patchAnthropicClient:()=>kn,patchAnthropicVertexClient:()=>Rn,patchAxiosClient:()=>Kn,patchBedrockClient:()=>Sn,patchCohereClient:()=>En,patchGoogleAIModel:()=>wn,patchGoogleGenAIModels:()=>Tn,patchMongooseClient:()=>An,patchMysql2Client:()=>Pn,patchOpenAIClient:()=>Cn,patchPgClient:()=>Mn,patchRedisClient:()=>In,patchVertexGenerativeModel:()=>bn,simulateUser:()=>tr,startHttpTrace:()=>Un,startSpan:()=>Fn,startTrace:()=>Ln,traceFunction:()=>Vn,traceObject:()=>Wn,traceTool:()=>Dn,withTrace:()=>Yn});function C(){if(!H)throw new Error("[evalkit] call evalkit.init() before using the SDK");return H}function _n(e){return H&&H.destroy(),H=new exports.EvalKitClient(e),vn(H),H}function Cn(e,t){B(C(),e.chat.completions,t);}function kn(e,t){G(C(),e.messages,t);}function Sn(e){ct(C(),e);}function Rn(e){mt(C(),e.messages);}function bn(e){ft(C(),e);}function En(e){lt(C(),e);}function wn(e){pt(C(),e);}function Tn(e){dt(C(),e);}function On(){return Ot(C())}function An(e){bt(C(),e);}function In(e){ot(C(),e);}function Kn(e){st(C(),e);}function Mn(e){at(C(),e);}function Pn(e){it(C(),e);}function qn(e){return De(C(),e)}function Nn(e){return Ue(C(),e,ss)}function jn(e){return We(C(),e)}function $n(e){return Qe(C(),e)}function Bn(e){return tn(C(),e)}function Gn(){return new exports.EvalKitInterceptor(C())}function Ln(e,t){return C().startTrace(e,t)}async function Hn(){return C().flush()}function Un(e,t,n){return C().startHttpTrace(e,t,n)}function Fn(e,t,n){return C().startSpan(e,t,n)}function Vn(e,t,n,r=true){return C().traceFunction(e,t,n,r)}function Dn(e,t,n,r=true){return C().traceTool(e,t,n,r)}function Jn(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,a;return r.value=function(...c){return a||(a=C().traceFunction(s,o)),a.apply(this,c)},r}}function zn(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let a=s.value,c=`${r}.${o}`,i=null;Object.defineProperty(n,o,{...s,value:function(...l){return i||(i=C().traceFunction(c,a)),i.apply(this,l)}});}return t}}function Wn(e,t){let n=C(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let a=e[s];if(typeof a=="function"&&!a.__evalkitTraced){let c=r?`${r}.${s}`:s,i=n.traceFunction(c,a,void 0,o);i.__evalkitTraced=true,e[s]=i;}}return e}async function Xn(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?nn(C(),n,t):0}function Yn(e,t){return api.context.with(e,t)}function Qn(){let e=api.trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function Zn(e){return se(C(),e)}function tr(e){return ae(C(),e)}function er(e){return ie(C(),e)}function ss(e){return K(e)}var H;exports.default=void 0;var re=x(()=>{vt();ce();Mt();W();qt();Rt();jt();$t();Lt();Ht();Ut();Ft();Vt();Dt();zt();Yt();Qt();Fe();Je();Xe();Ze();en();Zt();rn();xn();Mt();Zt();vt();H=null;exports.default={init:_n,evaluate:U,generateScenarios:Zn,simulateUser:tr,evaluateSimulation:er,patchOpenAIClient:Cn,patchAnthropicClient:kn,patchBedrockClient:Sn,patchAnthropicVertexClient:Rn,patchVertexGenerativeModel:bn,patchCohereClient:En,patchGoogleAIModel:wn,patchGoogleGenAIModels:Tn,langchainHandler:On,patchMongooseClient:An,patchRedisClient:In,patchAxiosClient:Kn,patchPgClient:Mn,patchMysql2Client:Pn,expressMiddleware:qn,fastifyPlugin:Nn,koaMiddleware:jn,honoMiddleware:$n,hapiPlugin:Bn,createNestjsInterceptor:Gn,startTrace:Ln,startHttpTrace:Un,startSpan:Fn,traceFunction:Vn,traceTool:Dn,traceObject:Wn,TraceMethod:Jn,Traced:zn,enableNestjsAutoTrace:Xn,withTrace:Yn,currentTraceId:Qn,flush:Hn};});re();exports.TraceMethod=Jn;exports.Traced=zn;exports.createNestjsInterceptor=Gn;exports.currentTraceId=Qn;exports.enableNestjsAutoTrace=Xn;exports.evaluate=U;exports.evaluateSimulation=er;exports.expressMiddleware=qn;exports.fastifyPlugin=Nn;exports.flush=Hn;exports.generateScenarios=Zn;exports.hapiPlugin=Bn;exports.honoMiddleware=$n;exports.init=_n;exports.koaMiddleware=jn;exports.langchainHandler=On;exports.patchAnthropicClient=kn;exports.patchAnthropicVertexClient=Rn;exports.patchAxiosClient=Kn;exports.patchBedrockClient=Sn;exports.patchCohereClient=En;exports.patchGoogleAIModel=wn;exports.patchGoogleGenAIModels=Tn;exports.patchMongooseClient=An;exports.patchMysql2Client=Pn;exports.patchOpenAIClient=Cn;exports.patchPgClient=Mn;exports.patchRedisClient=In;exports.patchVertexGenerativeModel=bn;exports.simulateUser=tr;exports.startHttpTrace=Un;exports.startSpan=Fn;exports.startTrace=Ln;exports.traceFunction=Vn;exports.traceObject=Wn;exports.traceTool=Dn;exports.withTrace=Yn;
6
+ `),u=a?.inferenceConfig??{},m=api.context.active(),f=e.tracer.startSpan("converse",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":i,"gen_ai.request.model":c,...u.temperature!=null&&{"gen_ai.request.temperature":u.temperature},...u.maxTokens!=null&&{"gen_ai.request.max_tokens":u.maxTokens},...u.topP!=null&&{"gen_ai.request.top_p":u.topP},"evalkit.prompt":p}},m),g=api.trace.setSpan(m,f),y;try{y=await api.context.with(g,()=>r.apply(this,o));}catch(v){let k=v instanceof Error?v:new Error(String(v));throw f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return f.setAttributes({"gen_ai.response.model":c,"gen_ai.usage.input_tokens":y.usage?.inputTokens??0,"gen_ai.usage.output_tokens":y.usage?.outputTokens??0,"gen_ai.usage.total_tokens":y.usage?.totalTokens??0,"gen_ai.response.finish_reasons":y.stopReason?[y.stopReason]:[],"evalkit.completion":h}),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}var Ht=x(()=>{});function lt(e,t,n){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let s=o[0];if(s?.stream)return r.apply(this,o);let a=s?.chatHistory?.map(u=>`${u.role}: ${u.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...a,`user: ${s?.message??""}`].filter(Boolean).join(`
7
+ `),i=api.context.active(),l=e.tracer.startSpan("chat",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":s?.model??"unknown",...s?.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s?.maxTokens!=null&&{"gen_ai.request.max_tokens":s.maxTokens},"evalkit.prompt":c}},i),d=api.trace.setSpan(i,l),p;try{p=await api.context.with(d,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw l.recordException(m),l.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),l.end(),u}return l.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":p.generationId??"","gen_ai.usage.input_tokens":p.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":p.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":p.finishReason?[p.finishReason]:[],"evalkit.completion":p.text??""}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.chat.__evalkit=true;}var Ft=x(()=>{});function pt(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c="";if(typeof a=="string")c=`user: ${a}`;else {let g=a,y=g?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=g?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(k=>k.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
+ `);}let i=api.context.active(),l=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},i),d=api.trace.setSpan(i,l),p;try{p=await api.context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw l.recordException(y),l.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),l.end(),g}let u=p?.response,m=u?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return l.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":u?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":u?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":u?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.generateContent.__evalkit=true;}var Vt=x(()=>{});function Ie(e){return e?.text??""}function lo(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(Ie).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
+ `);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(Ie).join("")}return e!=null?String(e):""}function po(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function Ke(e){let t=po(e?.config),n=lo(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
10
+ `)}function Me(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}function Pe(e,t,n){Dt&&$(Dt,t,ve(e));}function dt(e,t,n){if(Dt=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"evalkit.prompt":Ke(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw i.recordException(u),i.setStatus({code:api.SpanStatusCode.ERROR,message:u.message}),i.end(),p}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":Me(d)});try{Pe(d,i,i.spanContext().traceId);}catch{}return i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContentStream",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"gen_ai.streaming":true,"evalkit.prompt":Ke(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}async function*p(){let u=[],m=0,f=0;try{for await(let g of d){try{let y=Me(g);y&&u.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Pe(g,i,i.spanContext().traceId);}catch{}yield g;}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":u.join("")}),i.setStatus({code:api.SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw i.recordException(y),i.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),g}finally{i.end();}}return p()},t.generateContentStream.__evalkit=true;}}var Dt,Jt=x(()=>{et();Dt=null;});function zt(e){if(typeof I>"u")return null;let t=I.cache;if(!t)return null;let n=Object.keys(t).find(r=>{let o=r.split("/node_modules/");return o.length>1&&o[o.length-1].startsWith(e+"/")});return n?t[n]?.exports??null:null}function E(){return typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)))}var R,Wt=x(()=>{R=new Function("s","return import(s)");});var Ge={};te(Ge,{langchainCallbackHandler:()=>Ot,langchainHandlerMethods:()=>Be,patchLangChain:()=>xo});function P(e,t=go){let n;try{n=typeof e=="string"?e:JSON.stringify(e);}catch{n=String(e);}return n==null?"":n.length>t?n.slice(0,t)+"\u2026":n}function je(e){let t=e?.id;if(Array.isArray(t)){for(let n of ["openai","anthropic","google","vertexai","cohere","mistral","bedrock","ollama","groq"])if(t.includes(n))return n==="vertexai"?"vertex-ai":n;return t[t.length-1]}}function $e(e,t){let n=t?.invocation_params??{};for(let o of ["model","model_name","modelName","model_id","deployment_name"])if(n[o])return String(n[o]);let r=e?.kwargs??{};for(let o of ["model","model_name","modelName","model_id"])if(r[o])return String(r[o]);return "unknown"}function yo(e){try{let n=((Array.isArray(e?.[0])?e[0]:e)??[]).map(r=>{let o=(typeof r?._getType=="function"?r._getType():void 0)??r?.role??r?.type??"message",s=typeof r?.content=="string"?r.content:P(r?.content);return `${o}: ${s}`});return P(n.join(`
11
+ `))}catch{return P(e)}}function ho(e){try{let t=[];for(let n of e?.generations??[])for(let r of n??[])r?.text?t.push(String(r.text)):r?.message?.content&&t.push(typeof r.message.content=="string"?r.message.content:P(r.message.content));return P(t.filter(Boolean).join(`
12
+ `))}catch{return ""}}function vo(e){let t=0,n=0;try{let r=e?.llmOutput?.tokenUsage??e?.llmOutput?.usage??{};if(t=r.promptTokens??r.prompt_tokens??r.input_tokens??0,n=r.completionTokens??r.completion_tokens??r.output_tokens??0,!t&&!n)for(let o of e?.generations??[])for(let s of o??[]){let a=s?.message?.usage_metadata;a&&(t=a.input_tokens??t,n=a.output_tokens??n);}}catch{}return {tin:t||0,tout:n||0}}function Be(e){let t=new Map;function n(o,s,a,c,i){try{let l=s?t.get(s):void 0,d=l?l.ctx:api.context.active(),p=e.tracer.startSpan(c,{kind:a==="llm_call"?api.SpanKind.CLIENT:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":a,"evalkit.framework":"langchain",...i}},d);t.set(o,{span:p,ctx:api.trace.setSpan(d,p)});}catch{}}function r(o,s,a,c){try{let i=t.get(o);if(!i)return;t.delete(o),a&&i.span.setAttributes(a),i.span.setStatus({code:s==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR,message:c}),i.span.end();}catch{}}return {handleChainStart(o,s,a,c,i,l,d,p){let u=p??o?.id?.[o.id.length-1]??"chain";n(a,c,"function_call",String(u),i?.length?{"langchain.tags":i.join(",")}:{});},handleChainEnd(o,s){r(s,"OK");},handleChainError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleLLMStart(o,s,a,c,i){let l=$e(o,i);n(a,c,"llm_call","llm.generate",{"gen_ai.request.model":l,"gen_ai.system":je(o)??"","evalkit.prompt":P((s??[]).join(`
13
+ `))});},handleChatModelStart(o,s,a,c,i){let l=$e(o,i);n(a,c,"llm_call","chat.generate",{"gen_ai.request.model":l,"gen_ai.system":je(o)??"","evalkit.prompt":yo(s)});},handleLLMEnd(o,s){let{tin:a,tout:c}=vo(o),i=t.get(s);try{i&&$(e,i.span,xe(o));}catch{}r(s,"OK",{"evalkit.completion":ho(o),"gen_ai.usage.input_tokens":a,"gen_ai.usage.output_tokens":c,"gen_ai.usage.total_tokens":a+c});},handleLLMError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleToolStart(o,s,a,c,i,l,d){let p=d??o?.id?.[o.id.length-1]??"tool",u=t.get(c??"");xt(u?.span.spanContext().traceId,String(p)),n(a,c,"tool_call",String(p),{"tool.name":String(p),"tool.arguments":P(s)});},handleToolEnd(o,s){r(s,"OK",{"tool.result":P(o)});},handleToolError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleRetrieverStart(o,s,a,c){let i=o?.id?.[o.id.length-1]??"retriever";n(a,c,"db_query",String(i),{"retriever.query":P(s)});},handleRetrieverEnd(o,s){let a=Array.isArray(o)?o.length:0;r(s,"OK",{"retriever.document_count":a});},handleRetrieverError(o,s){r(s,"ERROR",void 0,String(o?.message??o));}}}async function Ot(e){try{let n=(await R("@langchain/core/callbacks/base")).BaseCallbackHandler.fromMethods(Be(e));return n.name="evalkit",n.__evalkit=!0,n}catch{return null}}async function xo(e){let t=await Ot(e);if(!t)return null;try{let r=(await R("@langchain/core/callbacks/manager")).CallbackManager;if(r&&typeof r.configure=="function"&&!r.__evalkitPatched){let o=r.configure.bind(r);r.configure=(...s)=>{let a=o(...s);try{a&&![...a.handlers??[],...a.inheritableHandlers??[]].some(l=>l?.__evalkit)&&typeof a.addHandler=="function"&&a.addHandler(t,!0);}catch{}return a},r.__evalkitPatched=!0;}}catch{}return t}var go,Xt=x(()=>{tt();et();Wt();go=4096;});function mt(e,t,n){G(e,t,n);}function ft(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c=a?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",i=a?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],l=[c?`system: ${c}`:"",...i].filter(Boolean).join(`
14
+ `),d=api.context.active(),p=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":l}},d),u=api.trace.setSpan(d,p),m;try{m=await api.context.with(u,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw p.recordException(v),p.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),p.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),p.setStatus({code:api.SpanStatusCode.OK}),p.end(),m},t.generateContent.__evalkit=true;}var Yt=x(()=>{Rt();});function He(e,t={},n){function r(o,s,a){let c={...t,...s};o.addHook("onRequest",(i,l,d)=>{let p=i.routerPath??i.routeOptions?.url??i.url??"/",u=typeof c.name=="function"?c.name(i):c.name??`${String(i.method??"GET")} ${String(p)}`,m=i.headers?.traceparent,f=n?n(m):api.context.active(),{traceId:g,end:y,ctx:h}=api.context.with(f,()=>e.startHttpTrace(u,{method:String(i.method??"GET"),url:String(i.url??"/"),headers:i.headers,requestBody:void 0}));i._evalkitCtx=h,i._evalkitTraceId=g,i._evalkitEnd=y,i._evalkitEnded=false,api.context.with(h,d);}),o.addHook("preHandler",(i,l,d)=>{if(i._evalkitCtx&&i.body!==void 0){let p=api.trace.getActiveSpan();if(p?.isRecording())try{p.setAttribute("http.request.body",typeof i.body=="string"?i.body.slice(0,e.options.maxBodyBytes):JSON.stringify(i.body).slice(0,e.options.maxBodyBytes));}catch{}}api.context.with(i._evalkitCtx??api.context.active(),d);}),o.addHook("onSend",(i,l,d,p)=>{try{if(d!=null){let u=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);i._evalkitRespBody=u;}}catch{}p(null,d);}),o.addHook("onResponse",(i,l,d)=>{if(typeof i._evalkitEnd=="function"&&!i._evalkitEnded){i._evalkitEnded=true;let p=l.statusCode??200;i._evalkitEnd(p>=400?"ERROR":"OK",{statusCode:p,body:i._evalkitRespBody});}d();}),o.addHook("onError",(i,l,d,p)=>{typeof i._evalkitEnd=="function"&&!i._evalkitEnded&&(i._evalkitEnded=true,i._evalkitEnd("ERROR",{statusCode:l.statusCode??500})),p();}),a();}return r[Symbol.for("skip-override")]=true,r}var Fe=x(()=>{});function De(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,a=K(n.headers?.traceparent),{end:c,ctx:i,traceId:l}=api.context.with(a,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=i,n._evalkitTraceId=l;let d=api.trace.getSpan(i)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",l),r.setHeader?.("traceparent",`00-${l}-${d}-01`);let p=e.options.maxBodyBytes,u=[],m=0,f=h=>{if(!(!h||m>=p))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(u.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,k;if(u.length)try{k=Buffer.concat(u).subarray(0,p).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:k}),y.apply(r,h)},api.context.with(i,()=>o());}}var Je=x(()=>{W();});function We(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=K(n.request?.headers?.traceparent),{end:a,ctx:c}=api.context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await api.context.with(c,r);let i=n.status??200,l;try{let d=n.body;d!=null&&(l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}a(i>=400?"ERROR":"OK",{statusCode:i,body:l});}catch(i){throw a("ERROR",{statusCode:n.status??500}),i}}}var Xe=x(()=>{W();});function Qe(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",a=s;try{a=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${a}`,i=K(o.header("traceparent")),{end:l,ctx:d}=api.context.with(i,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await api.context.with(d,r);let p=n.res?.status??200,u;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(u=m.slice(0,e.options.maxBodyBytes));}}catch{}l(p>=400?"ERROR":"OK",{statusCode:p,body:u});}catch(p){throw l("ERROR",{statusCode:500}),p}}}var Ze=x(()=>{W();});function tn(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let a=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=K(o.headers?.traceparent),{end:i,ctx:l}=api.context.with(c,()=>e.startHttpTrace(a,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:i,ctx:l}),s.continue}),n.ext("onPreResponse",(o,s)=>{let a=r.get(o);if(a){let c=o.response?.output?.statusCode??o.response?.statusCode??200,i;try{let l=o.response?.source??o.response?.result;l!=null&&(i=(typeof l=="string"?l:JSON.stringify(l)).slice(0,e.options.maxBodyBytes));}catch{}a.end(c>=400?"ERROR":"OK",{statusCode:c,body:i}),r.delete(o);}return s.continue});}}}var en=x(()=>{W();});exports.EvalKitInterceptor=void 0;var Qt=x(()=>{exports.EvalKitInterceptor=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),a=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:i}=this.client.startHttpTrace(a,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),l=this.client.options.maxBodyBytes,d=[],p=0,u=f=>{if(!(!f||p>=l))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),p+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return u(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return u(g),f(g,...y)};}let m=api.context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{i("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,l).toString("utf-8");}catch{}i(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function To(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let a of s)try{n.defineMetadata(a,o.call(n,a,e),t);}catch{}}function nn(e,t,n){let r=n?.include??wo,o=n?.captureIO??true,s=new Set,a=0,c=[...t.getProviders(),...t.getControllers()];for(let i of c){let l=i?.instance;if(!l||typeof l!="object")continue;let d=l.constructor?.name??"";if(!r.test(d))continue;let p=Object.getPrototypeOf(l);if(!(!p||p===Object.prototype||s.has(p))){s.add(p);for(let u of Object.getOwnPropertyNames(p)){if(Eo.has(u))continue;let m=Object.getOwnPropertyDescriptor(p,u);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${u}`,f,void 0,o);To(f,g);try{Object.defineProperty(g,"name",{value:u,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(p,u,{...m,value:g}),a++;}}}return a}var Eo,wo,rn=x(()=>{Eo=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),wo=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function Zt(e){return Oo.some(t=>t.test(e))}function Ao(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let a=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",i=e.path??"/";r=`${n}://${a}${c}${i}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function an(e){let t,n;try{let s=typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)));t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:a}of r){let i=function(l,d,p){let u=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=Ao(l,u,a);if(Zt(m)||!api.trace.getActiveSpan()?.isRecording())return c.call(s,l,d,p);let h={...typeof l=="object"&&!(l instanceof URL)?l.headers??{}:{},...u?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof l=="object"&&!(l instanceof URL)&&l.headers&&delete l.headers["x-evalkit-span-id"],u?.headers&&delete u.headers["x-evalkit-span-id"];let b=X.get(String(v));if(b){let _=T({...h});delete _["x-evalkit-span-id"],Object.keys(_).length&&b.setAttributes({"http.request.headers":JSON.stringify(_)});}return c.call(s,l,d,p)}let k=T(h),S=e.tracer.startSpan(`${f} ${g}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},api.context.active()),O=c.call(s,l,d,p),w=S.spanContext();return O.setHeader("traceparent",`00-${w.traceId}-${w.spanId}-01`),O.on("response",b=>{let _=b.statusCode??0;S.setAttributes({"http.status_code":_,...b.headers?{"http.response.headers":JSON.stringify(T(b.headers))}:{}}),S.setStatus({code:_>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),S.end();}),O.on("error",b=>{S.setAttributes({"http.status_code":0,"error.message":b.message}),S.recordException(b instanceof Error?b:new Error(String(b))),S.setStatus({code:api.SpanStatusCode.ERROR,message:b.message}),S.end();}),O};let c=s.request;c.__evalkit||(i.__evalkit=true,Object.defineProperty(s,"request",{value:i,writable:true,configurable:true}));}}function cn(e){let t;try{t=(typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href))))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let a=s[0],c=s[1],i=a.url??"/";if(Zt(i))return n.call(this,o,...s);if(api.trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let l=(a.method??"GET").toUpperCase(),d=i;try{d=new URL(i,"http://localhost").pathname;}catch{}let p=a.headers.traceparent,u=p?Io(Array.isArray(p)?p[0]:p):api.context.active(),m=e.tracer.startSpan(`${l} ${d}`,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":l,"http.url":i,"http.request.headers":JSON.stringify(T(a.headers))}},u),f=api.trace.setSpan(u,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(a.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let _=[],A=0;a.on("data",q=>{try{if(q&&A<y){let ht=Buffer.isBuffer(q)?q:typeof q=="string"?Buffer.from(q):null;ht&&ht.length&&(_.push(ht),A+=ht.length);}}catch{}}),a.on("end",()=>{if(_.length)try{let q=Buffer.concat(_).subarray(0,y).toString("utf-8");q&&m.setAttribute("http.request.body",q);}catch{}});}let k=[],S=0,O=_=>{try{if(_&&typeof _!="function"&&S<y){let A=Buffer.isBuffer(_)?_:typeof _=="string"?Buffer.from(_):null;A&&A.length&&(k.push(A),S+=A.length);}}catch{}},w=c.write.bind(c),b=c.end.bind(c);return c.write=function(_,...A){return O(_),w(_,...A)},c.end=function(_,...A){return O(_),b(_,...A)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let _=c.getHeaders();_&&Object.keys(_).length&&m.setAttribute("http.response.headers",JSON.stringify(T(_)));}catch{}if(k.length)try{let _=Buffer.concat(k).subarray(0,y).toString("utf-8");_&&m.setAttribute("http.response.body",_);}catch{}m.setStatus({code:c.statusCode>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),m.end();}),c.on("error",_=>{m.setAttribute("error.message",_.message),m.recordException(_ instanceof Error?_:new Error(String(_))),m.setStatus({code:api.SpanStatusCode.ERROR,message:_.message}),m.end();}),api.context.with(f,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function Io(e){let t=e.split("-");if(t.length<4)return api.context.active();let[,n,r,o]=t;if(!n||!r)return api.context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return api.trace.setSpanContext(api.context.active(),s)}catch{return api.context.active()}}function ln(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(Zt(o))return e(n,r);let s=api.trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let a=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let i={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{i[y]=g;});let l=T(i),d=s.spanContext(),p=`00-${d.traceId}-${d.spanId}-01`,u=new Headers(r?.headers);u.set("traceparent",p);let m={...r,headers:u};Object.keys(l).length&&s.addEvent("http.fetch.request",{"http.method":a,"http.url":o,"http.request.headers":JSON.stringify(l)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(T(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var Oo,pn=x(()=>{$t();Bt();Oo=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function dn(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=a=>a.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
15
+ ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(a,c)=>{let i=api.trace.getActiveSpan();if(i?.isRecording())i.addEvent(`log.${a}`,{"log.level":a,"log.message":c});else {let l=e.tracer.startSpan(`log.${a}`,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":a,"log.message":c}},api.context.active());l.setStatus({code:a==="ERROR"?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),l.end();}};console.log=(...a)=>{t(...a),s("INFO",o(a));},console.warn=(...a)=>{n(...a),s("WARN",o(a));},console.error=(...a)=>{r(...a),s("ERROR",o(a));},console.__evalkit=true;}var mn=x(()=>{});function gn(e,t,n){let r=api.trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},api.context.active());o.recordException(n),o.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),o.end();}}function yn(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));gn(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{gn(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var hn=x(()=>{});function $o(e){let t=zt("mongoose");t&&bt(e,t);}function Bo(e){let t=zt("axios");t&&st(e,t.default??t);}async function Go(e){try{let n=E()("pg"),r=n.Client??n.default?.Client;if(r){at(e,r);return}}catch{}try{let t=await R("pg"),n=t.Client??t.default?.Client;n&&at(e,n);}catch{}}async function Lo(e){try{let t=E(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){it(e,r);return}}catch{}try{let t=await R("mysql2"),n=t.Connection??t.default?.Connection;n&&it(e,n);}catch{}}async function Uo(e){try{let n=E()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){ot(e,r);return}}catch{}try{let t=await R("ioredis"),n=t.default??t.Redis??t;n?.prototype&&ot(e,n);}catch{}}async function Ho(e){try{let n=E()("openai"),o=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o){B(e,o);return}}catch{}try{let t=await R("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&B(e,r);}catch{}}async function Fo(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o){G(e,o);return}}catch{}try{let t=await R("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&G(e,r);}catch{}}async function Vo(e){try{let n=E()("@aws-sdk/client-bedrock-runtime"),o=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o){ct(e,o);return}}catch{}try{let t=await R("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&ct(e,r);}catch{}}async function Do(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o){mt(e,o);return}}catch{}try{let t=await R("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&mt(e,r);}catch{}}async function Jo(e){try{let n=E()("@google-cloud/vertexai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){ft(e,o);return}}catch{}try{let t=await R("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ft(e,r);}catch{}}async function zo(e){try{let n=E()("cohere-ai"),o=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o){lt(e,o);return}}catch{}try{let t=await R("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&lt(e,r);}catch{}}async function Wo(e){try{let n=E()("@google/generative-ai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){pt(e,o);return}}catch{}try{let t=await R("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&pt(e,r);}catch{}}async function Xo(e){try{let n=E()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){dt(e,r.prototype);return}}catch{}try{let t=await R("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&dt(e,n.prototype);}catch{}}async function Yo(e){try{let n=E()("groq-sdk"),o=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o){B(e,o,void 0,"groq");return}}catch{}try{let t=await R("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&B(e,r,void 0,"groq");}catch{}}async function Qo(e){try{let{patchLangChain:t}=await Promise.resolve().then(()=>(Xt(),Ge));await t(e);}catch{}}function vn(e){try{cn(e);}catch{}try{an(e);}catch{}ln(),dn(e),yn(e),$o(e),Bo(e),Promise.all([Ho(e),Fo(e),Vo(e),Do(e),Jo(e),zo(e),Wo(e),Xo(e),Yo(e),Qo(e),Go(e),Lo(e),Uo(e)]).catch(()=>{});}var xn=x(()=>{Wt();Pt();Rt();Ht();Yt();Ft();Vt();Jt();Nt();Lt();Ut();jt();Gt();pn();mn();hn();});var ee={};te(ee,{EvalKitClient:()=>exports.EvalKitClient,EvalKitInterceptor:()=>exports.EvalKitInterceptor,TraceMethod:()=>Jn,Traced:()=>zn,createNestjsInterceptor:()=>Gn,currentTraceId:()=>Qn,default:()=>exports.default,enableNestjsAutoTrace:()=>Xn,evaluate:()=>H,evaluateSimulation:()=>er,expressMiddleware:()=>qn,fastifyPlugin:()=>Nn,flush:()=>Un,generateScenarios:()=>Zn,hapiPlugin:()=>Bn,honoMiddleware:()=>$n,init:()=>_n,koaMiddleware:()=>jn,langchainHandler:()=>On,patchAnthropicClient:()=>kn,patchAnthropicVertexClient:()=>Rn,patchAxiosClient:()=>Kn,patchBedrockClient:()=>Sn,patchCohereClient:()=>En,patchGoogleAIModel:()=>wn,patchGoogleGenAIModels:()=>Tn,patchMongooseClient:()=>An,patchMysql2Client:()=>Pn,patchOpenAIClient:()=>Cn,patchPgClient:()=>Mn,patchRedisClient:()=>In,patchVertexGenerativeModel:()=>bn,simulateUser:()=>tr,startHttpTrace:()=>Hn,startSpan:()=>Fn,startTrace:()=>Ln,traceFunction:()=>Vn,traceObject:()=>Wn,traceTool:()=>Dn,withTrace:()=>Yn});function C(){if(!U)throw new Error("[evalkit] call evalkit.init() before using the SDK");return U}function _n(e){return U&&U.destroy(),U=new exports.EvalKitClient(e),vn(U),U}function Cn(e,t){B(C(),e.chat.completions,t);}function kn(e,t){G(C(),e.messages,t);}function Sn(e){ct(C(),e);}function Rn(e){mt(C(),e.messages);}function bn(e){ft(C(),e);}function En(e){lt(C(),e);}function wn(e){pt(C(),e);}function Tn(e){dt(C(),e);}function On(){return Ot(C())}function An(e){bt(C(),e);}function In(e){ot(C(),e);}function Kn(e){st(C(),e);}function Mn(e){at(C(),e);}function Pn(e){it(C(),e);}function qn(e){return De(C(),e)}function Nn(e){return He(C(),e,es)}function jn(e){return We(C(),e)}function $n(e){return Qe(C(),e)}function Bn(e){return tn(C(),e)}function Gn(){return new exports.EvalKitInterceptor(C())}function Ln(e,t){return C().startTrace(e,t)}async function Un(){return C().flush()}function Hn(e,t,n){return C().startHttpTrace(e,t,n)}function Fn(e,t,n){return C().startSpan(e,t,n)}function Vn(e,t,n,r=true){return C().traceFunction(e,t,n,r)}function Dn(e,t,n,r=true){return C().traceTool(e,t,n,r)}function Jn(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,a;return r.value=function(...c){return a||(a=C().traceFunction(s,o)),a.apply(this,c)},r}}function zn(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let a=s.value,c=`${r}.${o}`,i=null;Object.defineProperty(n,o,{...s,value:function(...l){return i||(i=C().traceFunction(c,a)),i.apply(this,l)}});}return t}}function Wn(e,t){let n=C(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let a=e[s];if(typeof a=="function"&&!a.__evalkitTraced){let c=r?`${r}.${s}`:s,i=n.traceFunction(c,a,void 0,o);i.__evalkitTraced=true,e[s]=i;}}return e}async function Xn(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?nn(C(),n,t):0}function Yn(e,t){return api.context.with(e,t)}function Qn(){let e=api.trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function Zn(e){return se(C(),e)}function tr(e){return ae(C(),e)}function er(e){return ie(C(),e)}function es(e){return K(e)}var U;exports.default=void 0;var ne=x(()=>{vt();ce();Kt();W();Pt();Rt();Nt();jt();Gt();Lt();Ut();Ht();Ft();Vt();Jt();Xt();Yt();Fe();Je();Xe();Ze();en();Qt();rn();xn();Kt();Qt();vt();U=null;exports.default={init:_n,evaluate:H,generateScenarios:Zn,simulateUser:tr,evaluateSimulation:er,patchOpenAIClient:Cn,patchAnthropicClient:kn,patchBedrockClient:Sn,patchAnthropicVertexClient:Rn,patchVertexGenerativeModel:bn,patchCohereClient:En,patchGoogleAIModel:wn,patchGoogleGenAIModels:Tn,langchainHandler:On,patchMongooseClient:An,patchRedisClient:In,patchAxiosClient:Kn,patchPgClient:Mn,patchMysql2Client:Pn,expressMiddleware:qn,fastifyPlugin:Nn,koaMiddleware:jn,honoMiddleware:$n,hapiPlugin:Bn,createNestjsInterceptor:Gn,startTrace:Ln,startHttpTrace:Hn,startSpan:Fn,traceFunction:Vn,traceTool:Dn,traceObject:Wn,TraceMethod:Jn,Traced:zn,enableNestjsAutoTrace:Xn,withTrace:Yn,currentTraceId:Qn,flush:Un};});ne();exports.TraceMethod=Jn;exports.Traced=zn;exports.createNestjsInterceptor=Gn;exports.currentTraceId=Qn;exports.enableNestjsAutoTrace=Xn;exports.evaluate=H;exports.evaluateSimulation=er;exports.expressMiddleware=qn;exports.fastifyPlugin=Nn;exports.flush=Un;exports.generateScenarios=Zn;exports.hapiPlugin=Bn;exports.honoMiddleware=$n;exports.init=_n;exports.koaMiddleware=jn;exports.langchainHandler=On;exports.patchAnthropicClient=kn;exports.patchAnthropicVertexClient=Rn;exports.patchAxiosClient=Kn;exports.patchBedrockClient=Sn;exports.patchCohereClient=En;exports.patchGoogleAIModel=wn;exports.patchGoogleGenAIModels=Tn;exports.patchMongooseClient=An;exports.patchMysql2Client=Pn;exports.patchOpenAIClient=Cn;exports.patchPgClient=Mn;exports.patchRedisClient=In;exports.patchVertexGenerativeModel=bn;exports.simulateUser=tr;exports.startHttpTrace=Hn;exports.startSpan=Fn;exports.startTrace=Ln;exports.traceFunction=Vn;exports.traceObject=Wn;exports.traceTool=Dn;exports.withTrace=Yn;
package/dist/index.mjs CHANGED
@@ -1,12 +1,12 @@
1
- import {b,g,l,p,c,r,t,d,k,h,i,e,f,a,n,o,m,j as j$1}from'./chunk-S5ISUJPR.mjs';import {context,trace,SpanKind,SpanStatusCode,ROOT_CONTEXT}from'@opentelemetry/api';import {randomBytes}from'crypto';import {NodeTracerProvider}from'@opentelemetry/sdk-trace-node';import {BatchSpanProcessor}from'@opentelemetry/sdk-trace-base';import {Resource}from'@opentelemetry/resources';import {ATTR_SERVICE_NAME}from'@opentelemetry/semantic-conventions';import {createRequire}from'module';function Vn(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let i=1;i<=n;i++)for(let c=1;c<=r;c++)e[i-1]===t[c-1]?o[i][c]=o[i-1][c-1]+1:o[i][c]=Math.max(o[i-1][c],o[i][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function Dn(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(a=>r.has(a))),s=o.size/n.size,i=o.size/r.size;return {score:s+i===0?0:2*s*i/(s+i),precision:s,recall:i}}function Fn(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function Jn(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function zn(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),i=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=i,r.push(i);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function Wn(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function Xn(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function U(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(a=>a.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let a=Vn(n,r);o.tool_trajectory=a.score,s.tool_trajectory={lcsLength:a.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let a=Dn(n,r);o.tool_f1=a.score,s.tool_f1={precision:a.precision,recall:a.recall};}if(t.has("tool_correctness")&&r.length>0){let a=Fn(n,r);o.tool_correctness=a.score,s.tool_correctness={called:a.called,total:a.total};}let i=e.constraints?.requiredTerms??[];if(t.has("response_match")&&i.length>0){let a=Jn(e.output,i);o.response_match=a.score,s.response_match={matched:a.matched,missing:a.missing};}if(t.has("constraint_compliance")&&e.constraints){let a=zn(e.output,e.constraints);o.constraint_compliance=a.score,s.constraint_compliance={checks:a.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let a=Wn(e.retrievedContext,e.expectedContext);o.contextual_precision=a.score,s.contextual_precision={relevant:a.relevant,total:a.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let a=Xn(e.retrievedContext,e.expectedContext);o.contextual_recall=a.score,s.contextual_recall={covered:a.covered,total:a.total};}let c={scores:o,details:s};try{let a=(Qt(),d(Yt)),p={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[u,l]of Object.entries(o))p[`evalkit.metric.${u}`]=l;let{end:d$1}=a.startSpan("evaluation",p);d$1("OK");}catch{}return c}var ft=b(()=>{});function gt(e){return randomBytes(e).toString("hex")}function Zt(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}async function te(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(Zt)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(Zt)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature),t.reasoningEffort!==void 0&&(r.reasoningEffort=t.reasoningEffort),t.maxCompletionTokens!==void 0&&(r.maxCompletionTokens=t.maxCompletionTokens),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let i=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${i}`)}return (await o.json()).scenarios??[]}function Zn(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function tr(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return U({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function er(e$1,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+gt(6),i="sess_"+gt(6),c=Zn(n).slice(0,r.maxTurns),a={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:p,end:d,ctx:u}=e$1.startTrace(`scenario:${o}`,{"evalkit.session_id":i});e.set(p,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let l="OK",m,f$1=[],g=[],y=0,h={};try{await context.with(u,async()=>{for(let k=0;k<c.length;k++){let T={message:c[k],sessionId:i,state:a,turn:k+1},w=await t.entrypoint(T);w&&typeof w=="object"&&"text"in w?(f$1.push(w.text),w.toolCalls&&g.push(...w.toolCalls)):f$1.push(String(w)),y++;}let S=g.length?g:f.get(p)??[];h=tr(n,f$1.join(`
2
- `),S,t.metrics);});}catch(S){l="ERROR",m=S?.message??String(S);}finally{d(l);}let v={scenarioId:s,name:o,status:l,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:p}}async function ee(e$1,t){let n="sim_"+gt(8),r="run_"+gt(8),o=t.maxTurns??12,s=[],i=[];for(let c of t.scenarios){let{result:a,traceId:p}=await er(e$1,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(a),i.push(p);}await e$1.flush();for(let c of i)e.delete(c),f.delete(c);return {simulationId:n,runId:r,results:s}}async function ne(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={simulationId:t.simulationId,collectionId:t.collectionId,provider:t.provider,model:t.model,apiKey:t.apiKey};t.runId!==void 0&&(r.runId=t.runId),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/simulations/evaluate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r),signal:AbortSignal.timeout(3e5)});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`evaluateSimulation failed ${o.status}: ${s}`)}return await o.json()}var re=b(()=>{g();ft();});var K,oe=b(()=>{(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(K||(K={}));});var se=b(()=>{oe();});function nr(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=L)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let i=o[s];typeof i=="string"&&i.length>1024&&(o[s]=r(i.length));}if(n(e)<=L||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=L))return e;if(o)for(let[s,i]of Object.entries(o))typeof i=="string"&&i.length>512&&(o[s]=i.slice(0,512)+"\u2026");return n(e)<=L||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=L)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${L}B)`),null)}function Et(e){return e[0]*1e3+e[1]/1e6}function rr(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function or(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function sr(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function ie(e){return new Promise(t=>setTimeout(t,e))}var ae,L,yt,ce=b(()=>{se();g();ae=3,L=900*1024,yt=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:K.FAILED});return}let r=t.map(s=>nr(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:K.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let i=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=ae?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${i} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${ae})`)):console.error(`[evalkit] export failed ${s.status}: ${i}`),n({code:K.FAILED});return}if(this.authFailures=0,this.debug){let i=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${i.status}`);}n({code:K.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:K.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let i=0;i<=r;i++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(i<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${i+1}/${r}`),await ie(o[i]??1800);else return c}catch(c){s=c,i<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${i+1}/${r}:`,c),await ie(o[i]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=Et(t.startTime),s=Et(t.endTime),i=t.events.map(p=>({name:p.name,timestamp:new Date(Et(p.time)).toISOString(),attributes:p.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:rr(t.kind),spanType:r["evalkit.span_type"]??"log",status:or(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:i.length>0?i:void 0,attributes:sr(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},a=e.get(n.traceId);return a&&(c.isSimulation=true,c.simulationId=a.simulationId,c.scenarioId=a.scenarioId,c.runId=a.runId),c}};});function V(e,t=ur){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var lr,ur,D,wt=b(()=>{ce();lr="0.1.29",ur=4096;D=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new yt({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new NodeTracerProvider({resource:new Resource({[ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":lr};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,n){let r=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},context.active()),o=trace.setSpan(context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(i="OK")=>{r.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},context.active()),s=trace.setSpan(context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",a)=>{a?.statusCode!==void 0&&o.setAttribute("http.status_code",a.statusCode),a?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(a.body)),a?.headers&&o.setAttribute("http.response.headers",JSON.stringify(a.headers)),o.setStatus({code:c==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??context.active());return {ctx:trace.setSpan(context.active(),o),end:(i="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"function_call",...r};o&&i.length&&(c["function.args"]=V(i));let{ctx:a,end:p}=s.startSpan(t,c),d;try{d=context.with(a,()=>n.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"function.result":V(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"function.result":V(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&i.length&&(c["tool.arguments"]=V(i.length===1?i[0]:i));let{ctx:a,end:p}=s.startSpan(t,c),d;try{d=context.with(a,()=>n.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"tool.result":V(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"tool.result":V(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function I(e){if(!e)return context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?trace.setSpanContext(ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):context.active()}var F=b(()=>{});function yr(e,t){let n="",r=0,o=0,s=false;function i(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,a,p){if(a===Symbol.asyncIterator)return function(){let u=c[Symbol.asyncIterator]();return {async next(){try{let l=await u.next();if(!l.done&&l.value){let m=l.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return l.done&&i(),l}catch(l){throw i(l instanceof Error?l:new Error(String(l))),l}},return(){return i(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(l){return i(l instanceof Error?l:new Error(String(l))),u.throw?.(l)??Promise.reject(l)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,a,p);return typeof d=="function"?d.bind(c):d}})}function j(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let i=s[0],c=n??context.active(),a=e.tracer.startSpan("chat.completions.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":i.model??"unknown",...i.temperature!=null&&{"gen_ai.request.temperature":i.temperature},...i.max_tokens!=null&&{"gen_ai.request.max_tokens":i.max_tokens},...i.top_p!=null&&{"gen_ai.request.top_p":i.top_p},"evalkit.prompt":hr(i.messages??[])}},c),p=trace.setSpan(c,a);if(i?.stream){let m;try{m=await context.with(p,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw a.recordException(g),a.setStatus({code:SpanStatusCode.ERROR,message:g.message}),a.end(),f}return yr(m,a)}let d;try{d=await context.with(p,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:SpanStatusCode.ERROR,message:f.message}),a.end(),m}let u=d.choices?.[0],l=u?.message.content??"";return a.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":u?.finish_reason?[u.finish_reason]:[],"evalkit.completion":l}),k(e,a,h(d)),a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function hr(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
3
- `)}var Tt=b(()=>{l();});function Cr(e,t){let n="",r=0,o=0,s=false;function i(a){let p=a?.type;if(p==="content_block_delta"){let d=a.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else p==="message_start"?r=a.message?.usage?.input_tokens??0:p==="message_delta"&&(o=a.usage?.output_tokens??0);}function c(a){s||(s=true,a?(t.recordException(a),t.setStatus({code:SpanStatusCode.ERROR,message:a.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(a,p,d){if(p===Symbol.asyncIterator)return function(){let l=a[Symbol.asyncIterator]();return {async next(){try{let m=await l.next();return !m.done&&m.value&&i(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),l.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),l.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let u=Reflect.get(a,p,d);return typeof u=="function"?u.bind(a):u}})}function N(e,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],i$1=n??context.active(),c=_r(s.system,s.messages??[]),a=e.tracer.startSpan("messages.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},i$1),p=trace.setSpan(i$1,a);if(s?.stream){let l;try{l=await context.with(p,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:SpanStatusCode.ERROR,message:f.message}),a.end(),m}return Cr(l,a)}let d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw a.recordException(m),a.setStatus({code:SpanStatusCode.ERROR,message:m.message}),a.end(),l}let u=d.content.filter(l=>l.type==="text").map(l=>l.text??"").join("");return a.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":u}),k(e,a,i(d.content)),a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function _r(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
4
- `)}var ht=b(()=>{l();});function vt(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",i=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${i}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":i,"db.query":JSON.stringify(this._conditions??{})}},context.active());try{let a=await r.call(this);return c.setStatus({code:SpanStatusCode.OK}),c.end(),a}catch(a){let p=a instanceof Error?a:new Error(String(a));throw c.recordException(p),c.setStatus({code:SpanStatusCode.ERROR,message:p.message}),c.end(),a}},n.__evalkit=true;}var It=b(()=>{});function tt(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(i,...c){if(!trace.getActiveSpan()?.isRecording())return s.call(this,i,...c);let p=Array.isArray(i)?i[0]:i?.name??i?.args?.[0]??"cmd",d=(typeof p=="string"?p:String(p)).toUpperCase(),u=e.tracer.startSpan(`redis ${d}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},context.active());try{let l=await s.call(this,i,...c);return u.setStatus({code:SpanStatusCode.OK}),u.end(),l}catch(l){let m=l instanceof Error?l:new Error(String(l));throw u.recordException(m),u.setStatus({code:SpanStatusCode.ERROR,message:m.message}),u.end(),l}},r.__evalkit_redis=true;}var Kt=b(()=>{});function O(e){let t={};for(let[n,r]of Object.entries(e))Or.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var Or,Pt=b(()=>{Or=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var J,Mt=b(()=>{J=new Map;});function et(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return et(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(Kr.some(d=>d.test(r))||!trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let i=(n.method??"get").toUpperCase(),c=O(n.headers??{}),a=e.tracer.startSpan(`${i} ${s}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":i,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},context.active()),p=a.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${p.traceId}-${p.spanId}-01`,n.headers["x-evalkit-span-id"]=p.spanId,J.set(p.spanId,a),n.__evalkitSpan=a,n.__evalkitSpanId=p.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&J.delete(n.config.__evalkitSpanId),r){let o=O(n.headers??{}),s=n.data,i;s!=null&&(i=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...i!==void 0?{"http.response.body":i}:{}}),r.setStatus({code:SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&J.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=O(n.response?.headers??{}),i=n.response?.data,c;i!=null&&(c=(typeof i=="string"?i:JSON.stringify(i)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}var Kr,qt=b(()=>{Pt();Mt();Kr=[/\/v1\/ingest/,/\/health(z)?$/];});function nt(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!trace.getActiveSpan()?.isRecording())return r.apply(this,o);let i=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,p=i.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=i.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",l=u?`${p} ${u}`:`pg ${p}`,m=e.tracer.startSpan(l,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":p,"db.statement":i.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,S)=>{v?(m.recordException(v),m.setStatus({code:SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",S?.rowCount??0),m.setStatus({code:SpanStatusCode.OK})),m.end(),y(v,S);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},n.__evalkit_pg=true);}var jt=b(()=>{});function rt(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",a=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",l=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=l?`${d} ${l}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...a!==void 0?{"db.params":JSON.stringify(a).slice(0,1024)}:{},...l?{"db.sql.table":l}:{}}},context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(S,k,T)=>{S?(f.recordException(S),f.setStatus({code:SpanStatusCode.ERROR,message:S.message}),f.setAttribute("error.message",S.message)):(f.setAttribute("db.rows_affected",Array.isArray(k)?k.length:k?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK})),f.end(),h(S,k,T);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}var Nt=b(()=>{});function Ur(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function ot(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!Ur(s))return r.apply(this,o);let i=s.input,c=i?.modelId??"unknown",a=c.split(".")[0]??"bedrock",p=i?.system?.map(v=>v.text).join(`
5
- `)??"",d=i?.messages?.map(v=>`${v.role}: ${v.content.map(S=>S.text??"").join("")}`)??[],u=[p?`system: ${p}`:"",...d].filter(Boolean).join(`
6
- `),l=i?.inferenceConfig??{},m=context.active(),f=e.tracer.startSpan("converse",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":a,"gen_ai.request.model":c,...l.temperature!=null&&{"gen_ai.request.temperature":l.temperature},...l.maxTokens!=null&&{"gen_ai.request.max_tokens":l.maxTokens},...l.topP!=null&&{"gen_ai.request.top_p":l.topP},"evalkit.prompt":u}},m),g=trace.setSpan(m,f),y;try{y=await context.with(g,()=>r.apply(this,o));}catch(v){let S=v instanceof Error?v:new Error(String(v));throw f.recordException(S),f.setStatus({code:SpanStatusCode.ERROR,message:S.message}),f.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return f.setAttributes({"gen_ai.response.model":c,"gen_ai.usage.input_tokens":y.usage?.inputTokens??0,"gen_ai.usage.output_tokens":y.usage?.outputTokens??0,"gen_ai.usage.total_tokens":y.usage?.totalTokens??0,"gen_ai.response.finish_reasons":y.stopReason?[y.stopReason]:[],"evalkit.completion":h}),f.setStatus({code:SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}var $t=b(()=>{});function st(e,t,n){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let s=o[0];if(s?.stream)return r.apply(this,o);let i=s?.chatHistory?.map(l=>`${l.role}: ${l.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...i,`user: ${s?.message??""}`].filter(Boolean).join(`
7
- `),a=context.active(),p=e.tracer.startSpan("chat",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":s?.model??"unknown",...s?.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s?.maxTokens!=null&&{"gen_ai.request.max_tokens":s.maxTokens},"evalkit.prompt":c}},a),d=trace.setSpan(a,p),u;try{u=await context.with(d,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw p.recordException(m),p.setStatus({code:SpanStatusCode.ERROR,message:m.message}),p.end(),l}return p.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":u.generationId??"","gen_ai.usage.input_tokens":u.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":u.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":u.finishReason?[u.finishReason]:[],"evalkit.completion":u.text??""}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.chat.__evalkit=true;}var Bt=b(()=>{});function at(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let i=s[0],c="";if(typeof i=="string")c=`user: ${i}`;else {let g=i,y=g?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=g?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(S=>S.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
- `);}let a=context.active(),p=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},a),d=trace.setSpan(a,p),u;try{u=await context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw p.recordException(y),p.setStatus({code:SpanStatusCode.ERROR,message:y.message}),p.end(),g}let l=u?.response,m=l?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":l?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":l?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":l?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.generateContent.__evalkit=true;}var Gt=b(()=>{});function _e(e){return e?.text??""}function Fr(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(_e).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
- `);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(_e).join("")}return e!=null?String(e):""}function Jr(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function Se(e){let t=Jr(e?.config),n=Fr(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
10
- `)}function ke(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}function Re(e,t,n){Ut&&k(Ut,t,j$1(e));}function ct(e,t,n){if(Ut=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=context.active(),a=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"evalkit.prompt":Se(s)}},c),p=trace.setSpan(c,a),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw a.recordException(l),a.setStatus({code:SpanStatusCode.ERROR,message:l.message}),a.end(),u}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":ke(d)});try{Re(d,a,a.spanContext().traceId);}catch{}return a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=context.active(),a=e.tracer.startSpan("generateContentStream",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"gen_ai.streaming":true,"evalkit.prompt":Se(s)}},c),p=trace.setSpan(c,a),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw a.recordException(m),a.setStatus({code:SpanStatusCode.ERROR,message:m.message}),a.end(),l}async function*u(){let l=[],m=0,f=0;try{for await(let g of d){try{let y=ke(g);y&&l.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Re(g,a,a.spanContext().traceId);}catch{}yield g;}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":l.join("")}),a.setStatus({code:SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw a.recordException(y),a.setStatus({code:SpanStatusCode.ERROR,message:y.message}),g}finally{a.end();}}return u()},t.generateContentStream.__evalkit=true;}}var Ut,Lt=b(()=>{l();Ut=null;});function pt(e,t,n){N(e,t,n);}function lt(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let i=s[0],c=i?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",a=i?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],p=[c?`system: ${c}`:"",...a].filter(Boolean).join(`
11
- `),d=context.active(),u=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":p}},d),l=trace.setSpan(d,u),m;try{m=await context.with(l,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw u.recordException(v),u.setStatus({code:SpanStatusCode.ERROR,message:v.message}),u.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return u.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),u.setStatus({code:SpanStatusCode.OK}),u.end(),m},t.generateContent.__evalkit=true;}var Ht=b(()=>{ht();});function we(e,t={},n){function r(o,s,i){let c={...t,...s};o.addHook("onRequest",(a,p,d)=>{let u=a.routerPath??a.routeOptions?.url??a.url??"/",l=typeof c.name=="function"?c.name(a):c.name??`${String(a.method??"GET")} ${String(u)}`,m=a.headers?.traceparent,f=n?n(m):context.active(),{traceId:g,end:y,ctx:h}=context.with(f,()=>e.startHttpTrace(l,{method:String(a.method??"GET"),url:String(a.url??"/"),headers:a.headers,requestBody:void 0}));a._evalkitCtx=h,a._evalkitTraceId=g,a._evalkitEnd=y,a._evalkitEnded=false,context.with(h,d);}),o.addHook("preHandler",(a,p,d)=>{if(a._evalkitCtx&&a.body!==void 0){let u=trace.getActiveSpan();if(u?.isRecording())try{u.setAttribute("http.request.body",typeof a.body=="string"?a.body.slice(0,e.options.maxBodyBytes):JSON.stringify(a.body).slice(0,e.options.maxBodyBytes));}catch{}}context.with(a._evalkitCtx??context.active(),d);}),o.addHook("onSend",(a,p,d,u)=>{try{if(d!=null){let l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);a._evalkitRespBody=l;}}catch{}u(null,d);}),o.addHook("onResponse",(a,p,d)=>{if(typeof a._evalkitEnd=="function"&&!a._evalkitEnded){a._evalkitEnded=true;let u=p.statusCode??200;a._evalkitEnd(u>=400?"ERROR":"OK",{statusCode:u,body:a._evalkitRespBody});}d();}),o.addHook("onError",(a,p,d,u)=>{typeof a._evalkitEnd=="function"&&!a._evalkitEnded&&(a._evalkitEnded=true,a._evalkitEnd("ERROR",{statusCode:p.statusCode??500})),u();}),i();}return r[Symbol.for("skip-override")]=true,r}var Oe=b(()=>{});function Ae(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,i=I(n.headers?.traceparent),{end:c,ctx:a,traceId:p}=context.with(i,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=a,n._evalkitTraceId=p;let d=trace.getSpan(a)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",p),r.setHeader?.("traceparent",`00-${p}-${d}-01`);let u=e.options.maxBodyBytes,l=[],m=0,f=h=>{if(!(!h||m>=u))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(l.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,S;if(l.length)try{S=Buffer.concat(l).subarray(0,u).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:S}),y.apply(r,h)},context.with(a,()=>o());}}var Ie=b(()=>{F();});function Pe(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=I(n.request?.headers?.traceparent),{end:i,ctx:c}=context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await context.with(c,r);let a=n.status??200,p;try{let d=n.body;d!=null&&(p=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}i(a>=400?"ERROR":"OK",{statusCode:a,body:p});}catch(a){throw i("ERROR",{statusCode:n.status??500}),a}}}var Me=b(()=>{F();});function je(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",i=s;try{i=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${i}`,a=I(o.header("traceparent")),{end:p,ctx:d}=context.with(a,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await context.with(d,r);let u=n.res?.status??200,l;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(l=m.slice(0,e.options.maxBodyBytes));}}catch{}p(u>=400?"ERROR":"OK",{statusCode:u,body:l});}catch(u){throw p("ERROR",{statusCode:500}),u}}}var Ne=b(()=>{F();});function $e(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let i=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=I(o.headers?.traceparent),{end:a,ctx:p}=context.with(c,()=>e.startHttpTrace(i,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:a,ctx:p}),s.continue}),n.ext("onPreResponse",(o,s)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,a;try{let p=o.response?.source??o.response?.result;p!=null&&(a=(typeof p=="string"?p:JSON.stringify(p)).slice(0,e.options.maxBodyBytes));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:a}),r.delete(o);}return s.continue});}}}var Be=b(()=>{F();});var z,Vt=b(()=>{z=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),i=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:a}=this.client.startHttpTrace(i,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),p=this.client.options.maxBodyBytes,d=[],u=0,l=f=>{if(!(!f||u>=p))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),u+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return l(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return l(g),f(g,...y)};}let m=context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{a("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,p).toString("utf-8");}catch{}a(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function no(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let i of s)try{n.defineMetadata(i,o.call(n,i,e),t);}catch{}}function Ge(e,t,n){let r=n?.include??eo,o=n?.captureIO??true,s=new Set,i=0,c=[...t.getProviders(),...t.getControllers()];for(let a of c){let p=a?.instance;if(!p||typeof p!="object")continue;let d=p.constructor?.name??"";if(!r.test(d))continue;let u=Object.getPrototypeOf(p);if(!(!u||u===Object.prototype||s.has(u))){s.add(u);for(let l of Object.getOwnPropertyNames(u)){if(to.has(l))continue;let m=Object.getOwnPropertyDescriptor(u,l);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${l}`,f,void 0,o);no(f,g);try{Object.defineProperty(g,"name",{value:l,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(u,l,{...m,value:g}),i++;}}}return i}var to,eo,Ue=b(()=>{to=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),eo=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function Dt(e){return ro.some(t=>t.test(e))}function oo(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let i=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",a=e.path??"/";r=`${n}://${i}${c}${a}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function Ve(e){let t,n;try{let s=typeof a<"u"?a:createRequire(import.meta.url);t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:i}of r){let a=function(p,d,u){let l=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=oo(p,l,i);if(Dt(m)||!trace.getActiveSpan()?.isRecording())return c.call(s,p,d,u);let h={...typeof p=="object"&&!(p instanceof URL)?p.headers??{}:{},...l?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof p=="object"&&!(p instanceof URL)&&p.headers&&delete p.headers["x-evalkit-span-id"],l?.headers&&delete l.headers["x-evalkit-span-id"];let R=J.get(String(v));if(R){let x=O({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&R.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(s,p,d,u)}let S=O(h),k=e.tracer.startSpan(`${f} ${g}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(S).length?{"http.request.headers":JSON.stringify(S)}:{}}},context.active()),T=c.call(s,p,d,u),w=k.spanContext();return T.setHeader("traceparent",`00-${w.traceId}-${w.spanId}-01`),T.on("response",R=>{let x=R.statusCode??0;k.setAttributes({"http.status_code":x,...R.headers?{"http.response.headers":JSON.stringify(O(R.headers))}:{}}),k.setStatus({code:x>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),k.end();}),T.on("error",R=>{k.setAttributes({"http.status_code":0,"error.message":R.message}),k.recordException(R instanceof Error?R:new Error(String(R))),k.setStatus({code:SpanStatusCode.ERROR,message:R.message}),k.end();}),T};let c=s.request;c.__evalkit||(a.__evalkit=true,Object.defineProperty(s,"request",{value:a,writable:true,configurable:true}));}}function De(e){let t;try{t=(typeof a<"u"?a:createRequire(import.meta.url))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let i=s[0],c=s[1],a=i.url??"/";if(Dt(a))return n.call(this,o,...s);if(trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let p=(i.method??"GET").toUpperCase(),d=a;try{d=new URL(a,"http://localhost").pathname;}catch{}let u=i.headers.traceparent,l=u?so(Array.isArray(u)?u[0]:u):context.active(),m=e.tracer.startSpan(`${p} ${d}`,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":p,"http.url":a,"http.request.headers":JSON.stringify(O(i.headers))}},l),f=trace.setSpan(l,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(i.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let x=[],A=0;i.on("data",P=>{try{if(P&&A<y){let mt=Buffer.isBuffer(P)?P:typeof P=="string"?Buffer.from(P):null;mt&&mt.length&&(x.push(mt),A+=mt.length);}}catch{}}),i.on("end",()=>{if(x.length)try{let P=Buffer.concat(x).subarray(0,y).toString("utf-8");P&&m.setAttribute("http.request.body",P);}catch{}});}let S=[],k=0,T=x=>{try{if(x&&typeof x!="function"&&k<y){let A=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;A&&A.length&&(S.push(A),k+=A.length);}}catch{}},w=c.write.bind(c),R=c.end.bind(c);return c.write=function(x,...A){return T(x),w(x,...A)},c.end=function(x,...A){return T(x),R(x,...A)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let x=c.getHeaders();x&&Object.keys(x).length&&m.setAttribute("http.response.headers",JSON.stringify(O(x)));}catch{}if(S.length)try{let x=Buffer.concat(S).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.response.body",x);}catch{}m.setStatus({code:c.statusCode>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),m.end();}),c.on("error",x=>{m.setAttribute("error.message",x.message),m.recordException(x instanceof Error?x:new Error(String(x))),m.setStatus({code:SpanStatusCode.ERROR,message:x.message}),m.end();}),context.with(f,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function so(e){let t=e.split("-");if(t.length<4)return context.active();let[,n,r,o]=t;if(!n||!r)return context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return trace.setSpanContext(context.active(),s)}catch{return context.active()}}function Fe(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(Dt(o))return e(n,r);let s=trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let i=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let a={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{a[y]=g;});let p=O(a),d=s.spanContext(),u=`00-${d.traceId}-${d.spanId}-01`,l=new Headers(r?.headers);l.set("traceparent",u);let m={...r,headers:l};Object.keys(p).length&&s.addEvent("http.fetch.request",{"http.method":i,"http.url":o,"http.request.headers":JSON.stringify(p)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(O(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var ro,Je=b(()=>{Pt();Mt();ro=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function We(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=i=>i.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
12
- ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(i,c)=>{let a=trace.getActiveSpan();if(a?.isRecording())a.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let p=e.tracer.startSpan(`log.${i}`,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":i,"log.message":c}},context.active());p.setStatus({code:i==="ERROR"?SpanStatusCode.ERROR:SpanStatusCode.OK}),p.end();}};console.log=(...i)=>{t(...i),s("INFO",o(i));},console.warn=(...i)=>{n(...i),s("WARN",o(i));},console.error=(...i)=>{r(...i),s("ERROR",o(i));},console.__evalkit=true;}var Xe=b(()=>{});function Qe(e,t,n){let r=trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},context.active());o.recordException(n),o.setStatus({code:SpanStatusCode.ERROR,message:n.message}),o.end();}}function Ze(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));Qe(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{Qe(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var tn=b(()=>{});function mo(e){let t=n("mongoose");t&&vt(e,t);}function fo(e){let t=n("axios");t&&et(e,t.default??t);}async function go(e){try{let n=o()("pg"),r=n.Client??n.default?.Client;if(r){nt(e,r);return}}catch{}try{let t=await m("pg"),n=t.Client??t.default?.Client;n&&nt(e,n);}catch{}}async function yo(e){try{let t=o(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){rt(e,r);return}}catch{}try{let t=await m("mysql2"),n=t.Connection??t.default?.Connection;n&&rt(e,n);}catch{}}async function ho(e){try{let n=o()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){tt(e,r);return}}catch{}try{let t=await m("ioredis"),n=t.default??t.Redis??t;n?.prototype&&tt(e,n);}catch{}}async function vo(e){try{let n=o()("openai"),o$1=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o$1){j(e,o$1);return}}catch{}try{let t=await m("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&j(e,r);}catch{}}async function xo(e){try{let n=o()("@anthropic-ai/sdk"),o$1=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o$1){N(e,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&N(e,r);}catch{}}async function Co(e){try{let n=o()("@aws-sdk/client-bedrock-runtime"),o$1=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o$1){ot(e,o$1);return}}catch{}try{let t=await m("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&ot(e,r);}catch{}}async function _o(e){try{let n=o()("@anthropic-ai/sdk"),o$1=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o$1){pt(e,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&pt(e,r);}catch{}}async function So(e){try{let n=o()("@google-cloud/vertexai"),o$1=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o$1){lt(e,o$1);return}}catch{}try{let t=await m("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&lt(e,r);}catch{}}async function ko(e){try{let n=o()("cohere-ai"),o$1=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o$1){st(e,o$1);return}}catch{}try{let t=await m("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&st(e,r);}catch{}}async function Ro(e){try{let n=o()("@google/generative-ai"),o$1=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o$1){at(e,o$1);return}}catch{}try{let t=await m("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&at(e,r);}catch{}}async function Eo(e){try{let n=o()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){ct(e,r.prototype);return}}catch{}try{let t=await m("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&ct(e,n.prototype);}catch{}}async function bo(e){try{let n=o()("groq-sdk"),o$1=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o$1){j(e,o$1,void 0,"groq");return}}catch{}try{let t=await m("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&j(e,r,void 0,"groq");}catch{}}async function wo(e){try{let{patchLangChain:t}=await import('./langchain-CL5EBCAT.mjs');await t(e);}catch{}}function en(e){try{De(e);}catch{}try{Ve(e);}catch{}Fe(),We(e),Ze(e),mo(e),fo(e),Promise.all([vo(e),xo(e),Co(e),_o(e),So(e),ko(e),Ro(e),Eo(e),bo(e),wo(e),go(e),yo(e),ho(e)]).catch(()=>{});}var nn=b(()=>{p();Tt();ht();$t();Ht();Bt();Gt();Lt();It();jt();Nt();Kt();qt();Je();Xe();tn();});var Yt={};c(Yt,{EvalKitClient:()=>D,EvalKitInterceptor:()=>z,TraceMethod:()=>In,Traced:()=>Kn,createNestjsInterceptor:()=>Rn,currentTraceId:()=>jn,default:()=>Io,enableNestjsAutoTrace:()=>Mn,evaluate:()=>U,evaluateSimulation:()=>Bn,expressMiddleware:()=>xn,fastifyPlugin:()=>Cn,flush:()=>bn,generateScenarios:()=>Nn,hapiPlugin:()=>kn,honoMiddleware:()=>Sn,init:()=>rn,koaMiddleware:()=>_n,langchainHandler:()=>mn,patchAnthropicClient:()=>sn,patchAnthropicVertexClient:()=>cn,patchAxiosClient:()=>yn,patchBedrockClient:()=>an,patchCohereClient:()=>ln,patchGoogleAIModel:()=>un,patchGoogleGenAIModels:()=>dn,patchMongooseClient:()=>fn,patchMysql2Client:()=>vn,patchOpenAIClient:()=>on,patchPgClient:()=>hn,patchRedisClient:()=>gn,patchVertexGenerativeModel:()=>pn,simulateUser:()=>$n,startHttpTrace:()=>wn,startSpan:()=>On,startTrace:()=>En,traceFunction:()=>Tn,traceObject:()=>Pn,traceTool:()=>An,withTrace:()=>qn});function _(){if(!B)throw new Error("[evalkit] call evalkit.init() before using the SDK");return B}function rn(e){return B&&B.destroy(),B=new D(e),en(B),B}function on(e,t){j(_(),e.chat.completions,t);}function sn(e,t){N(_(),e.messages,t);}function an(e){ot(_(),e);}function cn(e){pt(_(),e.messages);}function pn(e){lt(_(),e);}function ln(e){st(_(),e);}function un(e){at(_(),e);}function dn(e){ct(_(),e);}function mn(){return r(_())}function fn(e){vt(_(),e);}function gn(e){tt(_(),e);}function yn(e){et(_(),e);}function hn(e){nt(_(),e);}function vn(e){rt(_(),e);}function xn(e){return Ae(_(),e)}function Cn(e){return we(_(),e,Ao)}function _n(e){return Pe(_(),e)}function Sn(e){return je(_(),e)}function kn(e){return $e(_(),e)}function Rn(){return new z(_())}function En(e,t){return _().startTrace(e,t)}async function bn(){return _().flush()}function wn(e,t,n){return _().startHttpTrace(e,t,n)}function On(e,t,n){return _().startSpan(e,t,n)}function Tn(e,t,n,r=true){return _().traceFunction(e,t,n,r)}function An(e,t,n,r=true){return _().traceTool(e,t,n,r)}function In(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,i;return r.value=function(...c){return i||(i=_().traceFunction(s,o)),i.apply(this,c)},r}}function Kn(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let i=s.value,c=`${r}.${o}`,a=null;Object.defineProperty(n,o,{...s,value:function(...p){return a||(a=_().traceFunction(c,i)),a.apply(this,p)}});}return t}}function Pn(e,t){let n=_(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let i=e[s];if(typeof i=="function"&&!i.__evalkitTraced){let c=r?`${r}.${s}`:s,a=n.traceFunction(c,i,void 0,o);a.__evalkitTraced=true,e[s]=a;}}return e}async function Mn(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?Ge(_(),n,t):0}function qn(e,t){return context.with(e,t)}function jn(){let e=trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function Nn(e){return te(_(),e)}function $n(e){return ee(_(),e)}function Bn(e){return ne(_(),e)}function Ao(e){return I(e)}var B,Io,Qt=b(()=>{ft();re();wt();F();Tt();ht();It();Kt();qt();jt();Nt();$t();Bt();Gt();Lt();t();Ht();Oe();Ie();Me();Ne();Be();Vt();Ue();nn();wt();Vt();ft();B=null;Io={init:rn,evaluate:U,generateScenarios:Nn,simulateUser:$n,evaluateSimulation:Bn,patchOpenAIClient:on,patchAnthropicClient:sn,patchBedrockClient:an,patchAnthropicVertexClient:cn,patchVertexGenerativeModel:pn,patchCohereClient:ln,patchGoogleAIModel:un,patchGoogleGenAIModels:dn,langchainHandler:mn,patchMongooseClient:fn,patchRedisClient:gn,patchAxiosClient:yn,patchPgClient:hn,patchMysql2Client:vn,expressMiddleware:xn,fastifyPlugin:Cn,koaMiddleware:_n,honoMiddleware:Sn,hapiPlugin:kn,createNestjsInterceptor:Rn,startTrace:En,startHttpTrace:wn,startSpan:On,traceFunction:Tn,traceTool:An,traceObject:Pn,TraceMethod:In,Traced:Kn,enableNestjsAutoTrace:Mn,withTrace:qn,currentTraceId:jn,flush:bn};});Qt();export{D as EvalKitClient,z as EvalKitInterceptor,In as TraceMethod,Kn as Traced,Rn as createNestjsInterceptor,jn as currentTraceId,Io as default,Mn as enableNestjsAutoTrace,U as evaluate,Bn as evaluateSimulation,xn as expressMiddleware,Cn as fastifyPlugin,bn as flush,Nn as generateScenarios,kn as hapiPlugin,Sn as honoMiddleware,rn as init,_n as koaMiddleware,mn as langchainHandler,sn as patchAnthropicClient,cn as patchAnthropicVertexClient,yn as patchAxiosClient,an as patchBedrockClient,ln as patchCohereClient,un as patchGoogleAIModel,dn as patchGoogleGenAIModels,fn as patchMongooseClient,vn as patchMysql2Client,on as patchOpenAIClient,hn as patchPgClient,gn as patchRedisClient,pn as patchVertexGenerativeModel,$n as simulateUser,wn as startHttpTrace,On as startSpan,En as startTrace,Tn as traceFunction,Pn as traceObject,An as traceTool,qn as withTrace};
1
+ import {l,b,g,d,e,c,a,i,j as j$1,h,f}from'./chunk-JWXCYRSU.mjs';import {trace,SpanKind,context,SpanStatusCode,ROOT_CONTEXT}from'@opentelemetry/api';import {randomBytes}from'crypto';import {NodeTracerProvider}from'@opentelemetry/sdk-trace-node';import {BatchSpanProcessor}from'@opentelemetry/sdk-trace-base';import {Resource}from'@opentelemetry/resources';import {ATTR_SERVICE_NAME}from'@opentelemetry/semantic-conventions';import {createRequire}from'module';function _e(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let a=1;a<=n;a++)for(let c=1;c<=r;c++)e[a-1]===t[c-1]?o[a][c]=o[a-1][c-1]+1:o[a][c]=Math.max(o[a-1][c],o[a][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function Se(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(i=>r.has(i))),s=o.size/n.size,a=o.size/r.size;return {score:s+a===0?0:2*s*a/(s+a),precision:s,recall:a}}function ke(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function Re(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function Ee(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),a=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=a,r.push(a);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function be(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function we(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function J(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(p=>p.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let p=_e(n,r);o.tool_trajectory=p.score,s.tool_trajectory={lcsLength:p.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let p=Se(n,r);o.tool_f1=p.score,s.tool_f1={precision:p.precision,recall:p.recall};}if(t.has("tool_correctness")&&r.length>0){let p=ke(n,r);o.tool_correctness=p.score,s.tool_correctness={called:p.called,total:p.total};}let a=e.constraints?.requiredTerms??[];if(t.has("response_match")&&a.length>0){let p=Re(e.output,a);o.response_match=p.score,s.response_match={matched:p.matched,missing:p.missing};}if(t.has("constraint_compliance")&&e.constraints){let p=Ee(e.output,e.constraints);o.constraint_compliance=p.score,s.constraint_compliance={checks:p.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let p=be(e.retrievedContext,e.expectedContext);o.contextual_precision=p.score,s.contextual_precision={relevant:p.relevant,total:p.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let p=we(e.retrievedContext,e.expectedContext);o.contextual_recall=p.score,s.contextual_recall={covered:p.covered,total:p.total};}let c={scores:o,details:s},i={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[p,d]of Object.entries(o))i[`evalkit.metric.${p}`]=d;return import('./index.mjs').then(p=>{let{end:d}=p.startSpan("evaluation",i);d("OK");}).catch(()=>{}),c}function dt(e){return randomBytes(e).toString("hex")}function At(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}function It(){if(typeof fetch>"u")throw new Error("[evalkit] global fetch is required (Node 18+). Upgrade Node or install a fetch polyfill.")}async function Kt(e,t){It();let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(At)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(At)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature),t.reasoningEffort!==void 0&&(r.reasoningEffort=t.reasoningEffort),t.maxCompletionTokens!==void 0&&(r.maxCompletionTokens=t.maxCompletionTokens),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${a}`)}return (await o.json()).scenarios??[]}function Ae(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function Ie(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return J({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function Ke(e,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+dt(6),a="sess_"+dt(6),c$1=Ae(n).slice(0,r.maxTurns),i={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:p,end:d,ctx:u}=e.startTrace(`scenario:${o}`,{"evalkit.session_id":a});b.set(p,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let l="OK",m,f=[],g=[],y=0,h={};try{await context.with(u,async()=>{for(let S=0;S<c$1.length;S++){let O={message:c$1[S],sessionId:a,state:i,turn:S+1},b=await t.entrypoint(O);b&&typeof b=="object"&&"text"in b?(f.push(b.text),b.toolCalls&&g.push(...b.toolCalls)):f.push(String(b)),y++;}let _=g.length?g:c.get(p)??[];h=Ie(n,f.join(`
2
+ `),_,t.metrics);});}catch(_){l="ERROR",m=_?.message??String(_);}finally{d(l);}let v={scenarioId:s,name:o,status:l,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:p}}async function Pt(e,t){let n="sim_"+dt(8),r="run_"+dt(8),o=t.maxTurns??12,s=[],a=[];for(let c of t.scenarios){let{result:i,traceId:p}=await Ke(e,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(i),a.push(p);}await e.flush();for(let c$1 of a)b.delete(c$1),c.delete(c$1);return {simulationId:n,runId:r,results:s}}async function Mt(e,t){It();let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={simulationId:t.simulationId,collectionId:t.collectionId,provider:t.provider,model:t.model,apiKey:t.apiKey};t.runId!==void 0&&(r.runId=t.runId),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/simulations/evaluate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r),signal:AbortSignal.timeout(3e5)});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`evaluateSimulation failed ${o.status}: ${s}`)}return await o.json()}var I;(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(I||(I={}));var qt=3,G=900*1024,mt=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:I.FAILED});return}let r=t.map(s=>Pe(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:I.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let a=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=qt?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${a} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${qt})`)):console.error(`[evalkit] export failed ${s.status}: ${a}`),n({code:I.FAILED});return}if(this.authFailures=0,this.debug){let a=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${a.status}`);}n({code:I.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:I.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let a=0;a<=r;a++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(a<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${a+1}/${r}`),await jt(o[a]??1800);else return c}catch(c){s=c,a<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${a+1}/${r}:`,c),await jt(o[a]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=Ct(t.startTime),s=Ct(t.endTime),a=t.events.map(p=>({name:p.name,timestamp:new Date(Ct(p.time)).toISOString(),attributes:p.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:Me(t.kind),spanType:r["evalkit.span_type"]??"log",status:qe(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:a.length>0?a:void 0,attributes:je(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},i=b.get(n.traceId);return i&&(c.isSimulation=true,c.simulationId=i.simulationId,c.scenarioId=i.scenarioId,c.runId=i.runId),c}};function Pe(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=G)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let a=o[s];typeof a=="string"&&a.length>1024&&(o[s]=r(a.length));}if(n(e)<=G||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=G))return e;if(o)for(let[s,a]of Object.entries(o))typeof a=="string"&&a.length>512&&(o[s]=a.slice(0,512)+"\u2026");return n(e)<=G||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=G)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${G}B)`),null)}function Ct(e){return e[0]*1e3+e[1]/1e6}function Me(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function qe(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function je(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function jt(e){return new Promise(t=>setTimeout(t,e))}var Ue="0.1.30",Le=4096;function L(e,t=Le){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var z=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new mt({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new NodeTracerProvider({resource:new Resource({[ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":Ue};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,n){let r=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},context.active()),o=trace.setSpan(context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(a="OK")=>{r.setStatus({code:a==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},context.active()),s=trace.setSpan(context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",i)=>{i?.statusCode!==void 0&&o.setAttribute("http.status_code",i.statusCode),i?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(i.body)),i?.headers&&o.setAttribute("http.response.headers",JSON.stringify(i.headers)),o.setStatus({code:c==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??context.active());return {ctx:trace.setSpan(context.active(),o),end:(a="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:a==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"function_call",...r};o&&a.length&&(c["function.args"]=L(a));let{ctx:i,end:p}=s.startSpan(t,c),d;try{d=context.with(i,()=>n.apply(this,a));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(i)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"function.result":L(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(i)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"function.result":L(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&a.length&&(c["tool.arguments"]=L(a.length===1?a[0]:a));let{ctx:i,end:p}=s.startSpan(t,c),d;try{d=context.with(i,()=>n.apply(this,a));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(i)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"tool.result":L(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(i)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"tool.result":L(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};function A(e){if(!e)return context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?trace.setSpanContext(ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):context.active()}function Je(e,t){let n="",r=0,o=0,s=false;function a(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,i,p){if(i===Symbol.asyncIterator)return function(){let u=c[Symbol.asyncIterator]();return {async next(){try{let l=await u.next();if(!l.done&&l.value){let m=l.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return l.done&&a(),l}catch(l){throw a(l instanceof Error?l:new Error(String(l))),l}},return(){return a(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(l){return a(l instanceof Error?l:new Error(String(l))),u.throw?.(l)??Promise.reject(l)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,i,p);return typeof d=="function"?d.bind(c):d}})}function q(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let a=s[0],c=n??context.active(),i=e.tracer.startSpan("chat.completions.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":a.model??"unknown",...a.temperature!=null&&{"gen_ai.request.temperature":a.temperature},...a.max_tokens!=null&&{"gen_ai.request.max_tokens":a.max_tokens},...a.top_p!=null&&{"gen_ai.request.top_p":a.top_p},"evalkit.prompt":ze(a.messages??[])}},c),p=trace.setSpan(c,i);if(a?.stream){let m;try{m=await context.with(p,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw i.recordException(g),i.setStatus({code:SpanStatusCode.ERROR,message:g.message}),i.end(),f}return Je(m,i)}let d$1;try{d$1=await context.with(p,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:SpanStatusCode.ERROR,message:f.message}),i.end(),m}let u=d$1.choices?.[0],l=u?.message.content??"";return i.setAttributes({"gen_ai.response.model":d$1.model,"gen_ai.response.id":d$1.id,"gen_ai.usage.input_tokens":d$1.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d$1.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d$1.usage?.total_tokens??0,"gen_ai.response.finish_reasons":u?.finish_reason?[u.finish_reason]:[],"evalkit.completion":l}),g(e,i,d(d$1)),i.setStatus({code:SpanStatusCode.OK}),i.end(),d$1},t.create.__evalkit=true;}function ze(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
3
+ `)}function Ye(e,t){let n="",r=0,o=0,s=false;function a(i){let p=i?.type;if(p==="content_block_delta"){let d=i.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else p==="message_start"?r=i.message?.usage?.input_tokens??0:p==="message_delta"&&(o=i.usage?.output_tokens??0);}function c(i){s||(s=true,i?(t.recordException(i),t.setStatus({code:SpanStatusCode.ERROR,message:i.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(i,p,d){if(p===Symbol.asyncIterator)return function(){let l=i[Symbol.asyncIterator]();return {async next(){try{let m=await l.next();return !m.done&&m.value&&a(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),l.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),l.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let u=Reflect.get(i,p,d);return typeof u=="function"?u.bind(i):u}})}function j(e$1,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],a=n??context.active(),c=Qe(s.system,s.messages??[]),i=e$1.tracer.startSpan("messages.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},a),p=trace.setSpan(a,i);if(s?.stream){let l;try{l=await context.with(p,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:SpanStatusCode.ERROR,message:f.message}),i.end(),m}return Ye(l,i)}let d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw i.recordException(m),i.setStatus({code:SpanStatusCode.ERROR,message:m.message}),i.end(),l}let u=d.content.filter(l=>l.type==="text").map(l=>l.text??"").join("");return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":u}),g(e$1,i,e(d.content)),i.setStatus({code:SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function Qe(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
4
+ `)}function ft(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",a=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${a}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":a,"db.query":JSON.stringify(this._conditions??{})}},context.active());try{let i=await r.call(this);return c.setStatus({code:SpanStatusCode.OK}),c.end(),i}catch(i){let p=i instanceof Error?i:new Error(String(i));throw c.recordException(p),c.setStatus({code:SpanStatusCode.ERROR,message:p.message}),c.end(),i}},n.__evalkit=true;}function Y(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(a,...c){if(!trace.getActiveSpan()?.isRecording())return s.call(this,a,...c);let p=Array.isArray(a)?a[0]:a?.name??a?.args?.[0]??"cmd",d=(typeof p=="string"?p:String(p)).toUpperCase(),u=e.tracer.startSpan(`redis ${d}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},context.active());try{let l=await s.call(this,a,...c);return u.setStatus({code:SpanStatusCode.OK}),u.end(),l}catch(l){let m=l instanceof Error?l:new Error(String(l));throw u.recordException(m),u.setStatus({code:SpanStatusCode.ERROR,message:m.message}),u.end(),l}},r.__evalkit_redis=true;}var sn=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;function w(e){let t={};for(let[n,r]of Object.entries(e))sn.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var H=new Map;var ln=[/\/v1\/ingest/,/\/health(z)?$/];function Q(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return Q(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(ln.some(d=>d.test(r))||!trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let a=(n.method??"get").toUpperCase(),c=w(n.headers??{}),i=e.tracer.startSpan(`${a} ${s}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":a,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},context.active()),p=i.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${p.traceId}-${p.spanId}-01`,n.headers["x-evalkit-span-id"]=p.spanId,H.set(p.spanId,i),n.__evalkitSpan=i,n.__evalkitSpanId=p.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&H.delete(n.config.__evalkitSpanId),r){let o=w(n.headers??{}),s=n.data,a;s!=null&&(a=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...a!==void 0?{"http.response.body":a}:{}}),r.setStatus({code:SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&H.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=w(n.response?.headers??{}),a=n.response?.data,c;a!=null&&(c=(typeof a=="string"?a:JSON.stringify(a)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}function Z(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!trace.getActiveSpan()?.isRecording())return r.apply(this,o);let a=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,p=a.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=a.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",l=u?`${p} ${u}`:`pg ${p}`,m=e.tracer.startSpan(l,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":p,"db.statement":a.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,_)=>{v?(m.recordException(v),m.setStatus({code:SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",_?.rowCount??0),m.setStatus({code:SpanStatusCode.OK})),m.end(),y(v,_);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},n.__evalkit_pg=true);}function tt(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",i=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",l=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=l?`${d} ${l}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...i!==void 0?{"db.params":JSON.stringify(i).slice(0,1024)}:{},...l?{"db.sql.table":l}:{}}},context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(_,S,O)=>{_?(f.recordException(_),f.setStatus({code:SpanStatusCode.ERROR,message:_.message}),f.setAttribute("error.message",_.message)):(f.setAttribute("db.rows_affected",Array.isArray(S)?S.length:S?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK})),f.end(),h(_,S,O);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}function xn(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function et(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!xn(s))return r.apply(this,o);let a=s.input,c=a?.modelId??"unknown",i=c.split(".")[0]??"bedrock",p=a?.system?.map(v=>v.text).join(`
5
+ `)??"",d=a?.messages?.map(v=>`${v.role}: ${v.content.map(_=>_.text??"").join("")}`)??[],u=[p?`system: ${p}`:"",...d].filter(Boolean).join(`
6
+ `),l=a?.inferenceConfig??{},m=context.active(),f=e.tracer.startSpan("converse",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":i,"gen_ai.request.model":c,...l.temperature!=null&&{"gen_ai.request.temperature":l.temperature},...l.maxTokens!=null&&{"gen_ai.request.max_tokens":l.maxTokens},...l.topP!=null&&{"gen_ai.request.top_p":l.topP},"evalkit.prompt":u}},m),g=trace.setSpan(m,f),y;try{y=await context.with(g,()=>r.apply(this,o));}catch(v){let _=v instanceof Error?v:new Error(String(v));throw f.recordException(_),f.setStatus({code:SpanStatusCode.ERROR,message:_.message}),f.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return f.setAttributes({"gen_ai.response.model":c,"gen_ai.usage.input_tokens":y.usage?.inputTokens??0,"gen_ai.usage.output_tokens":y.usage?.outputTokens??0,"gen_ai.usage.total_tokens":y.usage?.totalTokens??0,"gen_ai.response.finish_reasons":y.stopReason?[y.stopReason]:[],"evalkit.completion":h}),f.setStatus({code:SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}function nt(e,t,n){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let s=o[0];if(s?.stream)return r.apply(this,o);let a=s?.chatHistory?.map(l=>`${l.role}: ${l.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...a,`user: ${s?.message??""}`].filter(Boolean).join(`
7
+ `),i=context.active(),p=e.tracer.startSpan("chat",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":s?.model??"unknown",...s?.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s?.maxTokens!=null&&{"gen_ai.request.max_tokens":s.maxTokens},"evalkit.prompt":c}},i),d=trace.setSpan(i,p),u;try{u=await context.with(d,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw p.recordException(m),p.setStatus({code:SpanStatusCode.ERROR,message:m.message}),p.end(),l}return p.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":u.generationId??"","gen_ai.usage.input_tokens":u.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":u.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":u.finishReason?[u.finishReason]:[],"evalkit.completion":u.text??""}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.chat.__evalkit=true;}function rt(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c="";if(typeof a=="string")c=`user: ${a}`;else {let g=a,y=g?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=g?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(_=>_.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
+ `);}let i=context.active(),p=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},i),d=trace.setSpan(i,p),u;try{u=await context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw p.recordException(y),p.setStatus({code:SpanStatusCode.ERROR,message:y.message}),p.end(),g}let l=u?.response,m=l?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":l?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":l?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":l?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.generateContent.__evalkit=true;}function Wt(e){return e?.text??""}function Rn(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(Wt).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
+ `);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(Wt).join("")}return e!=null?String(e):""}function En(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function Xt(e){let t=En(e?.config),n=Rn(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
10
+ `)}function Yt(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}var Rt=null;function Qt(e,t,n){Rt&&g(Rt,t,f(e));}function st(e,t,n){if(Rt=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=context.active(),i=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"evalkit.prompt":Xt(s)}},c),p=trace.setSpan(c,i),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw i.recordException(l),i.setStatus({code:SpanStatusCode.ERROR,message:l.message}),i.end(),u}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":Yt(d)});try{Qt(d,i,i.spanContext().traceId);}catch{}return i.setStatus({code:SpanStatusCode.OK}),i.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=context.active(),i=e.tracer.startSpan("generateContentStream",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"gen_ai.streaming":true,"evalkit.prompt":Xt(s)}},c),p=trace.setSpan(c,i),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw i.recordException(m),i.setStatus({code:SpanStatusCode.ERROR,message:m.message}),i.end(),l}async function*u(){let l=[],m=0,f=0;try{for await(let g of d){try{let y=Yt(g);y&&l.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Qt(g,i,i.spanContext().traceId);}catch{}yield g;}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":l.join("")}),i.setStatus({code:SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw i.recordException(y),i.setStatus({code:SpanStatusCode.ERROR,message:y.message}),g}finally{i.end();}}return u()},t.generateContentStream.__evalkit=true;}}function at(e,t,n){j(e,t,n);}function it(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c=a?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",i=a?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],p=[c?`system: ${c}`:"",...i].filter(Boolean).join(`
11
+ `),d=context.active(),u=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":p}},d),l=trace.setSpan(d,u),m;try{m=await context.with(l,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw u.recordException(v),u.setStatus({code:SpanStatusCode.ERROR,message:v.message}),u.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return u.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),u.setStatus({code:SpanStatusCode.OK}),u.end(),m},t.generateContent.__evalkit=true;}function ee(e,t={},n){function r(o,s,a){let c={...t,...s};o.addHook("onRequest",(i,p,d)=>{let u=i.routerPath??i.routeOptions?.url??i.url??"/",l=typeof c.name=="function"?c.name(i):c.name??`${String(i.method??"GET")} ${String(u)}`,m=i.headers?.traceparent,f=n?n(m):context.active(),{traceId:g,end:y,ctx:h}=context.with(f,()=>e.startHttpTrace(l,{method:String(i.method??"GET"),url:String(i.url??"/"),headers:i.headers,requestBody:void 0}));i._evalkitCtx=h,i._evalkitTraceId=g,i._evalkitEnd=y,i._evalkitEnded=false,context.with(h,d);}),o.addHook("preHandler",(i,p,d)=>{if(i._evalkitCtx&&i.body!==void 0){let u=trace.getActiveSpan();if(u?.isRecording())try{u.setAttribute("http.request.body",typeof i.body=="string"?i.body.slice(0,e.options.maxBodyBytes):JSON.stringify(i.body).slice(0,e.options.maxBodyBytes));}catch{}}context.with(i._evalkitCtx??context.active(),d);}),o.addHook("onSend",(i,p,d,u)=>{try{if(d!=null){let l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);i._evalkitRespBody=l;}}catch{}u(null,d);}),o.addHook("onResponse",(i,p,d)=>{if(typeof i._evalkitEnd=="function"&&!i._evalkitEnded){i._evalkitEnded=true;let u=p.statusCode??200;i._evalkitEnd(u>=400?"ERROR":"OK",{statusCode:u,body:i._evalkitRespBody});}d();}),o.addHook("onError",(i,p,d,u)=>{typeof i._evalkitEnd=="function"&&!i._evalkitEnded&&(i._evalkitEnded=true,i._evalkitEnd("ERROR",{statusCode:p.statusCode??500})),u();}),a();}return r[Symbol.for("skip-override")]=true,r}function re(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,a=A(n.headers?.traceparent),{end:c,ctx:i,traceId:p}=context.with(a,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=i,n._evalkitTraceId=p;let d=trace.getSpan(i)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",p),r.setHeader?.("traceparent",`00-${p}-${d}-01`);let u=e.options.maxBodyBytes,l=[],m=0,f=h=>{if(!(!h||m>=u))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(l.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,_;if(l.length)try{_=Buffer.concat(l).subarray(0,u).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:_}),y.apply(r,h)},context.with(i,()=>o());}}function se(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=A(n.request?.headers?.traceparent),{end:a,ctx:c}=context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await context.with(c,r);let i=n.status??200,p;try{let d=n.body;d!=null&&(p=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}a(i>=400?"ERROR":"OK",{statusCode:i,body:p});}catch(i){throw a("ERROR",{statusCode:n.status??500}),i}}}function ie(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",a=s;try{a=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${a}`,i=A(o.header("traceparent")),{end:p,ctx:d}=context.with(i,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await context.with(d,r);let u=n.res?.status??200,l;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(l=m.slice(0,e.options.maxBodyBytes));}}catch{}p(u>=400?"ERROR":"OK",{statusCode:u,body:l});}catch(u){throw p("ERROR",{statusCode:500}),u}}}function ce(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let a=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=A(o.headers?.traceparent),{end:i,ctx:p}=context.with(c,()=>e.startHttpTrace(a,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:i,ctx:p}),s.continue}),n.ext("onPreResponse",(o,s)=>{let a=r.get(o);if(a){let c=o.response?.output?.statusCode??o.response?.statusCode??200,i;try{let p=o.response?.source??o.response?.result;p!=null&&(i=(typeof p=="string"?p:JSON.stringify(p)).slice(0,e.options.maxBodyBytes));}catch{}a.end(c>=400?"ERROR":"OK",{statusCode:c,body:i}),r.delete(o);}return s.continue});}}}var pt=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),a=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:i}=this.client.startHttpTrace(a,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),p=this.client.options.maxBodyBytes,d=[],u=0,l=f=>{if(!(!f||u>=p))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),u+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return l(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return l(g),f(g,...y)};}let m=context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{i("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,p).toString("utf-8");}catch{}i(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};var Kn=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),Pn=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;function Mn(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let a of s)try{n.defineMetadata(a,o.call(n,a,e),t);}catch{}}function pe(e,t,n){let r=n?.include??Pn,o=n?.captureIO??true,s=new Set,a=0,c=[...t.getProviders(),...t.getControllers()];for(let i of c){let p=i?.instance;if(!p||typeof p!="object")continue;let d=p.constructor?.name??"";if(!r.test(d))continue;let u=Object.getPrototypeOf(p);if(!(!u||u===Object.prototype||s.has(u))){s.add(u);for(let l of Object.getOwnPropertyNames(u)){if(Kn.has(l))continue;let m=Object.getOwnPropertyDescriptor(u,l);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${l}`,f,void 0,o);Mn(f,g);try{Object.defineProperty(g,"name",{value:l,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(u,l,{...m,value:g}),a++;}}}return a}var qn=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];function Et(e){return qn.some(t=>t.test(e))}function jn(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let a=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",i=e.path??"/";r=`${n}://${a}${c}${i}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function de(e){let t,n;try{let s=typeof a<"u"?a:createRequire(import.meta.url);t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:a}of r){let i=function(p,d,u){let l=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=jn(p,l,a);if(Et(m)||!trace.getActiveSpan()?.isRecording())return c.call(s,p,d,u);let h={...typeof p=="object"&&!(p instanceof URL)?p.headers??{}:{},...l?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof p=="object"&&!(p instanceof URL)&&p.headers&&delete p.headers["x-evalkit-span-id"],l?.headers&&delete l.headers["x-evalkit-span-id"];let k=H.get(String(v));if(k){let x=w({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&k.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(s,p,d,u)}let _=w(h),S=e.tracer.startSpan(`${f} ${g}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(_).length?{"http.request.headers":JSON.stringify(_)}:{}}},context.active()),O=c.call(s,p,d,u),b=S.spanContext();return O.setHeader("traceparent",`00-${b.traceId}-${b.spanId}-01`),O.on("response",k=>{let x=k.statusCode??0;S.setAttributes({"http.status_code":x,...k.headers?{"http.response.headers":JSON.stringify(w(k.headers))}:{}}),S.setStatus({code:x>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),S.end();}),O.on("error",k=>{S.setAttributes({"http.status_code":0,"error.message":k.message}),S.recordException(k instanceof Error?k:new Error(String(k))),S.setStatus({code:SpanStatusCode.ERROR,message:k.message}),S.end();}),O};let c=s.request;c.__evalkit||(i.__evalkit=true,Object.defineProperty(s,"request",{value:i,writable:true,configurable:true}));}}function me(e){let t;try{t=(typeof a<"u"?a:createRequire(import.meta.url))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let a=s[0],c=s[1],i=a.url??"/";if(Et(i))return n.call(this,o,...s);if(trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let p=(a.method??"GET").toUpperCase(),d=i;try{d=new URL(i,"http://localhost").pathname;}catch{}let u=a.headers.traceparent,l=u?Nn(Array.isArray(u)?u[0]:u):context.active(),m=e.tracer.startSpan(`${p} ${d}`,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":p,"http.url":i,"http.request.headers":JSON.stringify(w(a.headers))}},l),f=trace.setSpan(l,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(a.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let x=[],T=0;a.on("data",K=>{try{if(K&&T<y){let ut=Buffer.isBuffer(K)?K:typeof K=="string"?Buffer.from(K):null;ut&&ut.length&&(x.push(ut),T+=ut.length);}}catch{}}),a.on("end",()=>{if(x.length)try{let K=Buffer.concat(x).subarray(0,y).toString("utf-8");K&&m.setAttribute("http.request.body",K);}catch{}});}let _=[],S=0,O=x=>{try{if(x&&typeof x!="function"&&S<y){let T=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;T&&T.length&&(_.push(T),S+=T.length);}}catch{}},b=c.write.bind(c),k=c.end.bind(c);return c.write=function(x,...T){return O(x),b(x,...T)},c.end=function(x,...T){return O(x),k(x,...T)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let x=c.getHeaders();x&&Object.keys(x).length&&m.setAttribute("http.response.headers",JSON.stringify(w(x)));}catch{}if(_.length)try{let x=Buffer.concat(_).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.response.body",x);}catch{}m.setStatus({code:c.statusCode>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),m.end();}),c.on("error",x=>{m.setAttribute("error.message",x.message),m.recordException(x instanceof Error?x:new Error(String(x))),m.setStatus({code:SpanStatusCode.ERROR,message:x.message}),m.end();}),context.with(f,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function Nn(e){let t=e.split("-");if(t.length<4)return context.active();let[,n,r,o]=t;if(!n||!r)return context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return trace.setSpanContext(context.active(),s)}catch{return context.active()}}function fe(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(Et(o))return e(n,r);let s=trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let a=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let i={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{i[y]=g;});let p=w(i),d=s.spanContext(),u=`00-${d.traceId}-${d.spanId}-01`,l=new Headers(r?.headers);l.set("traceparent",u);let m={...r,headers:l};Object.keys(p).length&&s.addEvent("http.fetch.request",{"http.method":a,"http.url":o,"http.request.headers":JSON.stringify(p)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(w(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}function ye(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=a=>a.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
12
+ ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(a,c)=>{let i=trace.getActiveSpan();if(i?.isRecording())i.addEvent(`log.${a}`,{"log.level":a,"log.message":c});else {let p=e.tracer.startSpan(`log.${a}`,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":a,"log.message":c}},context.active());p.setStatus({code:a==="ERROR"?SpanStatusCode.ERROR:SpanStatusCode.OK}),p.end();}};console.log=(...a)=>{t(...a),s("INFO",o(a));},console.warn=(...a)=>{n(...a),s("WARN",o(a));},console.error=(...a)=>{r(...a),s("ERROR",o(a));},console.__evalkit=true;}function ve(e,t,n){let r=trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},context.active());o.recordException(n),o.setStatus({code:SpanStatusCode.ERROR,message:n.message}),o.end();}}function xe(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));ve(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{ve(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}function Vn(e){let t=i("mongoose");t&&ft(e,t);}function Fn(e){let t=i("axios");t&&Q(e,t.default??t);}async function Dn(e){try{let n=j$1()("pg"),r=n.Client??n.default?.Client;if(r){Z(e,r);return}}catch{}try{let t=await h("pg"),n=t.Client??t.default?.Client;n&&Z(e,n);}catch{}}async function Jn(e){try{let t=j$1(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){tt(e,r);return}}catch{}try{let t=await h("mysql2"),n=t.Connection??t.default?.Connection;n&&tt(e,n);}catch{}}async function zn(e){try{let n=j$1()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){Y(e,r);return}}catch{}try{let t=await h("ioredis"),n=t.default??t.Redis??t;n?.prototype&&Y(e,n);}catch{}}async function Wn(e){try{let n=j$1()("openai"),o=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o){q(e,o);return}}catch{}try{let t=await h("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&q(e,r);}catch{}}async function Xn(e){try{let n=j$1()("@anthropic-ai/sdk"),o=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o){j(e,o);return}}catch{}try{let t=await h("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&j(e,r);}catch{}}async function Yn(e){try{let n=j$1()("@aws-sdk/client-bedrock-runtime"),o=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o){et(e,o);return}}catch{}try{let t=await h("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&et(e,r);}catch{}}async function Qn(e){try{let n=j$1()("@anthropic-ai/sdk"),o=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o){at(e,o);return}}catch{}try{let t=await h("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&at(e,r);}catch{}}async function Zn(e){try{let n=j$1()("@google-cloud/vertexai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){it(e,o);return}}catch{}try{let t=await h("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&it(e,r);}catch{}}async function tr(e){try{let n=j$1()("cohere-ai"),o=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o){nt(e,o);return}}catch{}try{let t=await h("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&nt(e,r);}catch{}}async function er(e){try{let n=j$1()("@google/generative-ai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){rt(e,o);return}}catch{}try{let t=await h("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&rt(e,r);}catch{}}async function nr(e){try{let n=j$1()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){st(e,r.prototype);return}}catch{}try{let t=await h("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&st(e,n.prototype);}catch{}}async function rr(e){try{let n=j$1()("groq-sdk"),o=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o){q(e,o,void 0,"groq");return}}catch{}try{let t=await h("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&q(e,r,void 0,"groq");}catch{}}async function or(e){try{let{patchLangChain:t}=await import('./langchain-XODHMQRQ.mjs');await t(e);}catch{}}function Ce(e){try{me(e);}catch{}try{de(e);}catch{}fe(),ye(e),xe(e),Vn(e),Fn(e),Promise.all([Wn(e),Xn(e),Yn(e),Qn(e),Zn(e),tr(e),er(e),nr(e),rr(e),or(e),Dn(e),Jn(e),zn(e)]).catch(()=>{});}var $=null;function C(){if(!$)throw new Error("[evalkit] call evalkit.init() before using the SDK");return $}function ir(e){return $&&$.destroy(),$=new z(e),Ce($),$}function cr(e,t){q(C(),e.chat.completions,t);}function pr(e,t){j(C(),e.messages,t);}function lr(e){et(C(),e);}function ur(e){at(C(),e.messages);}function dr(e){it(C(),e);}function mr(e){nt(C(),e);}function fr(e){rt(C(),e);}function gr(e){st(C(),e);}function yr(){return l(C())}function hr(e){ft(C(),e);}function vr(e){Y(C(),e);}function xr(e){Q(C(),e);}function Cr(e){Z(C(),e);}function _r(e){tt(C(),e);}function Sr(e){return re(C(),e)}function kr(e){return ee(C(),e,Hr)}function Rr(e){return se(C(),e)}function Er(e){return ie(C(),e)}function br(e){return ce(C(),e)}function wr(){return new pt(C())}function Or(e,t){return C().startTrace(e,t)}async function Tr(){return C().flush()}function Ar(e,t,n){return C().startHttpTrace(e,t,n)}function Ir(e,t,n){return C().startSpan(e,t,n)}function Kr(e,t,n,r=true){return C().traceFunction(e,t,n,r)}function Pr(e,t,n,r=true){return C().traceTool(e,t,n,r)}function Mr(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,a;return r.value=function(...c){return a||(a=C().traceFunction(s,o)),a.apply(this,c)},r}}function qr(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let a=s.value,c=`${r}.${o}`,i=null;Object.defineProperty(n,o,{...s,value:function(...p){return i||(i=C().traceFunction(c,a)),i.apply(this,p)}});}return t}}function jr(e,t){let n=C(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let a=e[s];if(typeof a=="function"&&!a.__evalkitTraced){let c=r?`${r}.${s}`:s,i=n.traceFunction(c,a,void 0,o);i.__evalkitTraced=true,e[s]=i;}}return e}async function Nr(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?pe(C(),n,t):0}function $r(e,t){return context.with(e,t)}function Br(){let e=trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function Gr(e){return Kt(C(),e)}function Ur(e){return Pt(C(),e)}function Lr(e){return Mt(C(),e)}function Hr(e){return A(e)}var aa={init:ir,evaluate:J,generateScenarios:Gr,simulateUser:Ur,evaluateSimulation:Lr,patchOpenAIClient:cr,patchAnthropicClient:pr,patchBedrockClient:lr,patchAnthropicVertexClient:ur,patchVertexGenerativeModel:dr,patchCohereClient:mr,patchGoogleAIModel:fr,patchGoogleGenAIModels:gr,langchainHandler:yr,patchMongooseClient:hr,patchRedisClient:vr,patchAxiosClient:xr,patchPgClient:Cr,patchMysql2Client:_r,expressMiddleware:Sr,fastifyPlugin:kr,koaMiddleware:Rr,honoMiddleware:Er,hapiPlugin:br,createNestjsInterceptor:wr,startTrace:Or,startHttpTrace:Ar,startSpan:Ir,traceFunction:Kr,traceTool:Pr,traceObject:jr,TraceMethod:Mr,Traced:qr,enableNestjsAutoTrace:Nr,withTrace:$r,currentTraceId:Br,flush:Tr};export{z as EvalKitClient,pt as EvalKitInterceptor,Mr as TraceMethod,qr as Traced,wr as createNestjsInterceptor,Br as currentTraceId,aa as default,Nr as enableNestjsAutoTrace,J as evaluate,Lr as evaluateSimulation,Sr as expressMiddleware,kr as fastifyPlugin,Tr as flush,Gr as generateScenarios,br as hapiPlugin,Er as honoMiddleware,ir as init,Rr as koaMiddleware,yr as langchainHandler,pr as patchAnthropicClient,ur as patchAnthropicVertexClient,xr as patchAxiosClient,lr as patchBedrockClient,mr as patchCohereClient,fr as patchGoogleAIModel,gr as patchGoogleGenAIModels,hr as patchMongooseClient,_r as patchMysql2Client,cr as patchOpenAIClient,Cr as patchPgClient,vr as patchRedisClient,dr as patchVertexGenerativeModel,Ur as simulateUser,Ar as startHttpTrace,Ir as startSpan,Or as startTrace,Kr as traceFunction,jr as traceObject,Pr as traceTool,$r as withTrace};
@@ -0,0 +1 @@
1
+ export{l as langchainCallbackHandler,k as langchainHandlerMethods,m as patchLangChain}from'./chunk-JWXCYRSU.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "syntropylabs-evalkit",
3
- "version": "0.1.29",
3
+ "version": "0.1.30",
4
4
  "description": "EvalKit TypeScript SDK — OpenTelemetry-based LLM observability and tracing",
5
5
  "license": "LicenseRef-Proprietary",
6
6
  "author": "Syntropy Labs",
@@ -61,15 +61,33 @@
61
61
  },
62
62
  "peerDependencies": {
63
63
  "@anthropic-ai/sdk": ">=0.20.0",
64
- "openai": ">=4.0.0"
64
+ "openai": ">=4.0.0",
65
+ "@aws-sdk/client-bedrock-runtime": "*",
66
+ "cohere-ai": "*",
67
+ "@google/generative-ai": "*",
68
+ "@google/genai": "*",
69
+ "@google-cloud/vertexai": "*",
70
+ "@langchain/core": "*",
71
+ "groq-sdk": "*",
72
+ "pg": "*",
73
+ "mysql2": "*",
74
+ "mongoose": "*",
75
+ "ioredis": "*"
65
76
  },
66
77
  "peerDependenciesMeta": {
67
- "openai": {
68
- "optional": true
69
- },
70
- "@anthropic-ai/sdk": {
71
- "optional": true
72
- }
78
+ "openai": { "optional": true },
79
+ "@anthropic-ai/sdk": { "optional": true },
80
+ "@aws-sdk/client-bedrock-runtime": { "optional": true },
81
+ "cohere-ai": { "optional": true },
82
+ "@google/generative-ai": { "optional": true },
83
+ "@google/genai": { "optional": true },
84
+ "@google-cloud/vertexai": { "optional": true },
85
+ "@langchain/core": { "optional": true },
86
+ "groq-sdk": { "optional": true },
87
+ "pg": { "optional": true },
88
+ "mysql2": { "optional": true },
89
+ "mongoose": { "optional": true },
90
+ "ioredis": { "optional": true }
73
91
  },
74
92
  "devDependencies": {
75
93
  "@anthropic-ai/sdk": "^0.39.0",
@@ -1,4 +0,0 @@
1
- import {trace,context,SpanKind,SpanStatusCode}from'@opentelemetry/api';import {createRequire}from'module';var C=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var f=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,a)=>(typeof require<"u"?require:e)[a]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var m=(t,e)=>()=>(t&&(e=t(t=0)),e);var V=(t,e)=>{for(var a in e)C(t,a,{get:e[a],enumerable:true});},J=(t,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of K(e))!M.call(t,n)&&n!==a&&C(t,n,{get:()=>e[n],enumerable:!(o=q(e,n))||o.enumerable});return t};var Y=t=>J(C({},"__esModule",{value:true}),t);function p(t,e,a){if(!t||!e||!z.has(t))return;let o=S.get(t)??[];o.push({name:e,args:a}),S.set(t,o);}var z,S,k=m(()=>{z=new Map,S=new Map;});function y(t){return t.length<=x?t:t.slice(0,x)+"\u2026"}function h(t){if(typeof t=="string")return t;try{return JSON.stringify(t??{})}catch{return String(t)}}function P(t){try{let e=JSON.parse(t);return e&&typeof e=="object"?e:void 0}catch{return}}function on(t,e){let a=[];try{for(let o of t?.choices??[])for(let n of o?.message?.tool_calls??[]){let r=n?.function?.name??"";r&&a.push({name:r,argsJson:y(h(n?.function?.arguments??"")),id:n?.id??""});}}catch{}return a}function rn(t,e){let a=[];try{for(let o of t??[]){if(o?.type!=="tool_use")continue;let n=o?.name??"";n&&a.push({name:n,argsJson:y(h(o?.input??{})),id:o?.id??""});}}catch{}return a}function an(t,e){let a=[];try{let o=[];if(Array.isArray(t?.functionCalls))o.push(...t.functionCalls);else for(let r of t?.candidates??[])for(let i of r?.content?.parts??[])i?.functionCall?.name&&o.push(i.functionCall);let n=0;for(let r of o){let i=r?.name??"";i&&a.push({name:i,argsJson:y(h(r?.args??{})),id:r?.id??`call_${n++}`});}}catch{}return a}function T(t,e){let a=[];try{for(let o of t?.generations??[])for(let n of o??[])for(let r of n?.message?.tool_calls??[]){let i=r?.name??"";i&&a.push({name:i,argsJson:y(h(r?.args??{})),id:r?.id??""});}}catch{}return a}function b(t,e,a){if(!a.length)return;let o=e.spanContext().traceId,n=trace.setSpan(context.active(),e);for(let r of a){if(!r.name)continue;let i={"gen_ai.tool.name":r.name,"gen_ai.tool.call.id":r.id,"gen_ai.tool.call.arguments":r.argsJson};r.result!=null&&(i["gen_ai.tool.call.result"]=r.result);try{e.addEvent("gen_ai.tool.call",i);}catch{}try{p(o,r.name,P(r.argsJson));}catch{}if(r.result!=null)try{t.tracer.startSpan(r.name,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...i,"tool.name":r.name,"tool.arguments":r.argsJson,"tool.result":r.result}},n).end();}catch{}}}var x,v=m(()=>{k();x=32768;});function cn(t){if(typeof f>"u")return null;let e=f.cache;if(!e)return null;let a=Object.keys(e).find(o=>{let n=o.split("/node_modules/");return n.length>1&&n[n.length-1].startsWith(t+"/")});return a?e[a]?.exports??null:null}function un(){return typeof f<"u"?f:createRequire(import.meta.url)}var R,E=m(()=>{R=new Function("s","return import(s)");});function u(t,e=F){let a;try{a=typeof t=="string"?t:JSON.stringify(t);}catch{a=String(t);}return a==null?"":a.length>e?a.slice(0,e)+"\u2026":a}function O(t){let e=t?.id;if(Array.isArray(e)){for(let a of ["openai","anthropic","google","vertexai","cohere","mistral","bedrock","ollama","groq"])if(e.includes(a))return a==="vertexai"?"vertex-ai":a;return e[e.length-1]}}function w(t,e){let a=e?.invocation_params??{};for(let n of ["model","model_name","modelName","model_id","deployment_name"])if(a[n])return String(a[n]);let o=t?.kwargs??{};for(let n of ["model","model_name","modelName","model_id"])if(o[n])return String(o[n]);return "unknown"}function G(t){try{let a=((Array.isArray(t?.[0])?t[0]:t)??[]).map(o=>{let n=(typeof o?._getType=="function"?o._getType():void 0)??o?.role??o?.type??"message",r=typeof o?.content=="string"?o.content:u(o?.content);return `${n}: ${r}`});return u(a.join(`
2
- `))}catch{return u(t)}}function W(t){try{let e=[];for(let a of t?.generations??[])for(let o of a??[])o?.text?e.push(String(o.text)):o?.message?.content&&e.push(typeof o.message.content=="string"?o.message.content:u(o.message.content));return u(e.filter(Boolean).join(`
3
- `))}catch{return ""}}function X(t){let e=0,a=0;try{let o=t?.llmOutput?.tokenUsage??t?.llmOutput?.usage??{};if(e=o.promptTokens??o.prompt_tokens??o.input_tokens??0,a=o.completionTokens??o.completion_tokens??o.output_tokens??0,!e&&!a)for(let n of t?.generations??[])for(let r of n??[]){let i=r?.message?.usage_metadata;i&&(e=i.input_tokens??e,a=i.output_tokens??a);}}catch{}return {tin:e||0,tout:a||0}}function U(t){let e=new Map;function a(n,r,i,l,s){try{let c=r?e.get(r):void 0,d=c?c.ctx:context.active(),g=t.tracer.startSpan(l,{kind:i==="llm_call"?SpanKind.CLIENT:SpanKind.INTERNAL,attributes:{"evalkit.span_type":i,"evalkit.framework":"langchain",...s}},d);e.set(n,{span:g,ctx:trace.setSpan(d,g)});}catch{}}function o(n,r,i,l){try{let s=e.get(n);if(!s)return;e.delete(n),i&&s.span.setAttributes(i),s.span.setStatus({code:r==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR,message:l}),s.span.end();}catch{}}return {handleChainStart(n,r,i,l,s,c,d,g){let _=g??n?.id?.[n.id.length-1]??"chain";a(i,l,"function_call",String(_),s?.length?{"langchain.tags":s.join(",")}:{});},handleChainEnd(n,r){o(r,"OK");},handleChainError(n,r){o(r,"ERROR",void 0,String(n?.message??n));},handleLLMStart(n,r,i,l,s){let c=w(n,s);a(i,l,"llm_call","llm.generate",{"gen_ai.request.model":c,"gen_ai.system":O(n)??"","evalkit.prompt":u((r??[]).join(`
4
- `))});},handleChatModelStart(n,r,i,l,s){let c=w(n,s);a(i,l,"llm_call","chat.generate",{"gen_ai.request.model":c,"gen_ai.system":O(n)??"","evalkit.prompt":G(r)});},handleLLMEnd(n,r){let{tin:i,tout:l}=X(n),s=e.get(r);try{s&&b(t,s.span,T(n));}catch{}o(r,"OK",{"evalkit.completion":W(n),"gen_ai.usage.input_tokens":i,"gen_ai.usage.output_tokens":l,"gen_ai.usage.total_tokens":i+l});},handleLLMError(n,r){o(r,"ERROR",void 0,String(n?.message??n));},handleToolStart(n,r,i,l,s,c,d){let g=d??n?.id?.[n.id.length-1]??"tool",_=e.get(l??"");p(_?.span.spanContext().traceId,String(g)),a(i,l,"tool_call",String(g),{"tool.name":String(g),"tool.arguments":u(r)});},handleToolEnd(n,r){o(r,"OK",{"tool.result":u(n)});},handleToolError(n,r){o(r,"ERROR",void 0,String(n?.message??n));},handleRetrieverStart(n,r,i,l){let s=n?.id?.[n.id.length-1]??"retriever";a(i,l,"db_query",String(s),{"retriever.query":u(r)});},handleRetrieverEnd(n,r){let i=Array.isArray(n)?n.length:0;o(r,"OK",{"retriever.document_count":i});},handleRetrieverError(n,r){o(r,"ERROR",void 0,String(n?.message??n));}}}async function D(t){try{let a=(await R("@langchain/core/callbacks/base")).BaseCallbackHandler.fromMethods(U(t));return a.name="evalkit",a.__evalkit=!0,a}catch{return null}}async function hn(t){let e=await D(t);if(!e)return null;try{let o=(await R("@langchain/core/callbacks/manager")).CallbackManager;if(o&&typeof o.configure=="function"&&!o.__evalkitPatched){let n=o.configure.bind(o);o.configure=(...r)=>{let i=n(...r);try{i&&![...i.handlers??[],...i.inheritableHandlers??[]].some(c=>c?.__evalkit)&&typeof i.addHandler=="function"&&i.addHandler(e,!0);}catch{}return i},o.__evalkitPatched=!0;}}catch{}return e}var F,Q=m(()=>{k();v();E();F=4096;});export{f as a,m as b,V as c,Y as d,z as e,S as f,k as g,on as h,rn as i,an as j,b as k,v as l,R as m,cn as n,un as o,E as p,U as q,D as r,hn as s,Q as t};
@@ -1 +0,0 @@
1
- import {t}from'./chunk-S5ISUJPR.mjs';export{r as langchainCallbackHandler,q as langchainHandlerMethods,s as patchLangChain}from'./chunk-S5ISUJPR.mjs';t();