syntropylabs-evalkit 0.1.24 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -54,28 +54,72 @@ Supported adapters: `expressMiddleware()`, `fastifyPlugin()`, `koaMiddleware()`,
54
54
  ```ts
55
55
  import evalkit from "syntropylabs-evalkit";
56
56
 
57
- // Wrap a function input/output captured automatically
58
- const handler = evalkit.traceFunction("rank-results", rankResults);
59
-
60
- // Or open a span by hand
61
- const span = evalkit.startSpan("embed-documents", { count: 42 });
57
+ // Open a span by hand
58
+ const { end } = evalkit.startSpan("embed-documents", { count: 42 });
62
59
  try {
63
60
  await embed(docs);
64
- span.end("OK");
61
+ end("OK", { "result.count": docs.length });
65
62
  } catch (e) {
66
- span.end("ERROR");
63
+ end("ERROR", { "error.message": String(e) });
67
64
  throw e;
68
65
  }
69
66
 
70
- // Decorators
67
+ await evalkit.flush(); // force-flush before process exit
68
+ ```
69
+
70
+ ## Tracing your own functions & tools (APM)
71
+
72
+ Auto-instrumentation covers libraries (LLM / HTTP / DB). For **your** code, opt in —
73
+ a function, a tool, a class, or a whole service object:
74
+
75
+ ```ts
76
+ import evalkit, { Traced } from "syntropylabs-evalkit";
77
+
78
+ // One function -> function_call span (input / output / latency)
79
+ const rankResults = evalkit.traceFunction("rank-results", rank);
80
+
81
+ // One tool -> tool_call span (Input/Output panels + tool metrics)
82
+ const searchWeb = evalkit.traceTool("search_web", (q: string) => runSearch(q));
83
+
84
+ // Every method of a class, APM-style
85
+ @Traced()
86
+ class OrderService {
87
+ place(order: Order) { /* ... */ }
88
+ cancel(id: string) { /* ... */ }
89
+ }
90
+
91
+ // Or one method
71
92
  class Service {
72
93
  @evalkit.TraceMethod()
73
94
  async compute() { /* ... */ }
74
95
  }
75
96
 
76
- await evalkit.flush(); // force-flush before process exit
97
+ // Every function of a service object (parity with Python's trace_module)
98
+ export const orders = evalkit.traceObject({ place, cancel }, { prefix: "orders" });
99
+ ```
100
+
101
+ ### NestJS — trace the whole app automatically
102
+
103
+ NestJS exposes a DI registry, so the SDK can wrap **every** provider/controller
104
+ method for you — no per-class decorators. In `main.ts`:
105
+
106
+ ```ts
107
+ import { DiscoveryModule, DiscoveryService } from "@nestjs/core";
108
+ // 1) add DiscoveryModule to your AppModule's imports
109
+ // 2) after the app is created:
110
+ const app = await NestFactory.create(AppModule);
111
+ evalkit.enableNestjsAutoTrace(app.get(DiscoveryService));
77
112
  ```
78
113
 
114
+ > Auto-discovery is only possible where the framework has a registry (NestJS). For
115
+ > Express / Fastify / Koa / Hono / Hapi, use `traceObject` / `traceFunction` on your
116
+ > own modules — incoming HTTP and LLM/DB/HTTP calls are already auto-traced.
117
+
118
+ > **Client-side tools you run yourself** only show their output if you wrap them with
119
+ > `traceTool` — the SDK sees the model's *request* but never your function's return
120
+ > value. Server-side tools (OpenAI `web_search`, …) and LangChain tools are captured
121
+ > automatically.
122
+
79
123
  ## Offline evaluation
80
124
 
81
125
  ```ts
@@ -108,6 +152,7 @@ const { simulationId, results } = await evalkit.simulateUser({ /* ... */ });
108
152
  | `environment` | `"development"` \| `"staging"` \| `"production"`. |
109
153
  | `baseUrl` | Override the trace ingest endpoint (defaults to hosted). |
110
154
  | `apiUrl` | Override the control-plane endpoint (scenario generation). |
155
+ | `maxBodyBytes` | Max captured HTTP request/response body size (default 10 MB). |
111
156
 
112
157
  See the exported `EvalKitOptions` type for the full set (`appVersion`, `deviceId`, `debug`, batch tuning).
113
158
 
@@ -1,4 +1,4 @@
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{}try{t.tracer.startSpan(r.name,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...i,"tool.name":r.name,"tool.arguments":r.argsJson,...r.result!=null?{"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(`
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
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
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
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};
package/dist/index.d.mts CHANGED
@@ -58,6 +58,12 @@ interface EvalKitOptions {
58
58
  maxExportBatchSize?: number;
59
59
  /** Export interval in ms (default: 5000) */
60
60
  scheduledDelayMillis?: number;
61
+ /**
62
+ * Max bytes of any captured HTTP request/response body stored on a span
63
+ * (default: 10 MB). Bodies larger than this are truncated. Applies to the HTTP
64
+ * client patches (axios/node-http) and all framework middleware.
65
+ */
66
+ maxBodyBytes?: number;
61
67
  /** deployment environment, e.g. "development" | "staging" | "production" */
62
68
  environment?: string;
63
69
  /** application version string, e.g. "1.2.3" */
@@ -103,6 +109,12 @@ declare class EvalKitClient {
103
109
  ctx: Context;
104
110
  };
105
111
  traceFunction<T extends (...args: any[]) => any>(name: string, fn: T, attributes?: Record<string, string | number | boolean>, captureIO?: boolean): T;
112
+ /**
113
+ * Like traceFunction but emits a first-class tool_call span (renders in the
114
+ * Input/Output panels and counts toward tool metrics). Use it to wrap your own
115
+ * client-side tools so they behave like server-side / LangChain tools.
116
+ */
117
+ traceTool<T extends (...args: any[]) => any>(name: string, fn: T, attributes?: Record<string, string | number | boolean>, captureIO?: boolean): T;
106
118
  flush(): Promise<void>;
107
119
  destroy(): Promise<void>;
108
120
  }
@@ -299,10 +311,47 @@ declare function startSpan(name: string, attributes?: Record<string, string | nu
299
311
  ctx: Context;
300
312
  };
301
313
  declare function traceFunction<T extends (...args: any[]) => any>(name: string, fn: T, attributes?: Record<string, string | number | boolean>, captureIO?: boolean): T;
314
+ /** Wrap your own client-side tool so it traces as a first-class tool_call span
315
+ * (Input/Output panels + tool metrics), like server-side / LangChain tools. */
316
+ declare function traceTool<T extends (...args: any[]) => any>(name: string, fn: T, attributes?: Record<string, string | number | boolean>, captureIO?: boolean): T;
302
317
  declare function TraceMethod(name?: string): MethodDecorator;
303
318
  declare function Traced(options?: {
304
319
  prefix?: string;
305
320
  }): ClassDecorator;
321
+ /**
322
+ * Trace every function-valued property of an object in place, APM-style — the
323
+ * parity for Python's `trace_module`. Use it for a service object or a CommonJS
324
+ * `module.exports` so all its functions are traced with one call:
325
+ *
326
+ * export const orders = traceObject({ place, cancel }, { prefix: 'orders' });
327
+ */
328
+ declare function traceObject<T extends Record<string, any>>(obj: T, options?: {
329
+ prefix?: string;
330
+ captureIO?: boolean;
331
+ }): T;
332
+ /**
333
+ * APM-style auto-tracing for a NestJS app — wraps every provider/controller
334
+ * method so the whole service call tree is traced, no per-class decorators.
335
+ * NestJS is the one framework with a DI registry the SDK can enumerate; for
336
+ * other frameworks use `traceObject` / `traceFunction` on your modules.
337
+ *
338
+ * Usage (main.ts), after `const app = await NestFactory.create(...)`:
339
+ * import { DiscoveryService } from '@nestjs/core'; // requires DiscoveryModule in AppModule
340
+ * evalkit.enableNestjsAutoTrace(app.get(DiscoveryService));
341
+ *
342
+ * Returns the number of methods wrapped.
343
+ */
344
+ declare function enableNestjsAutoTrace(discovery: {
345
+ getProviders: () => Array<{
346
+ instance?: unknown;
347
+ }>;
348
+ getControllers: () => Array<{
349
+ instance?: unknown;
350
+ }>;
351
+ }, options?: {
352
+ include?: RegExp;
353
+ captureIO?: boolean;
354
+ }): number;
306
355
  declare function withTrace<T>(ctx: Context, fn: () => Promise<T>): Promise<T>;
307
356
  /** Return the trace ID of the currently active span, or undefined if no span is active. */
308
357
  declare function currentTraceId(): string | undefined;
@@ -341,11 +390,14 @@ declare const _default: {
341
390
  startHttpTrace: typeof startHttpTrace;
342
391
  startSpan: typeof startSpan;
343
392
  traceFunction: typeof traceFunction;
393
+ traceTool: typeof traceTool;
394
+ traceObject: typeof traceObject;
344
395
  TraceMethod: typeof TraceMethod;
345
396
  Traced: typeof Traced;
397
+ enableNestjsAutoTrace: typeof enableNestjsAutoTrace;
346
398
  withTrace: typeof withTrace;
347
399
  currentTraceId: typeof currentTraceId;
348
400
  flush: typeof flush;
349
401
  };
350
402
 
351
- export { type AgentTurnResult, EvalKitClient, EvalKitInterceptor, type EvalKitOptions, type ExpressMiddlewareOptions, type FastifyPluginOptions, type GenerateScenariosOptions, type HapiPluginOptions, type HonoMiddlewareOptions, type KoaMiddlewareOptions, type OfflineEvalInput, type OfflineEvalResult, type OfflineMetric, type SimContext, type SimulateUserOptions, type SpanEvent, type TraceEnvelope, TraceMethod, Traced, createNestjsInterceptor, currentTraceId, _default as default, evaluate, expressMiddleware, fastifyPlugin, flush, generateScenarios, hapiPlugin, honoMiddleware, init, koaMiddleware, langchainHandler, patchAnthropicClient, patchAnthropicVertexClient, patchAxiosClient, patchBedrockClient, patchCohereClient, patchGoogleAIModel, patchGoogleGenAIModels, patchMongooseClient, patchMysql2Client, patchOpenAIClient, patchPgClient, patchRedisClient, patchVertexGenerativeModel, simulateUser, startHttpTrace, startSpan, startTrace, traceFunction, withTrace };
403
+ export { type AgentTurnResult, EvalKitClient, EvalKitInterceptor, type EvalKitOptions, type ExpressMiddlewareOptions, type FastifyPluginOptions, type GenerateScenariosOptions, type HapiPluginOptions, type HonoMiddlewareOptions, type KoaMiddlewareOptions, type OfflineEvalInput, type OfflineEvalResult, type OfflineMetric, type SimContext, type SimulateUserOptions, type SpanEvent, type TraceEnvelope, TraceMethod, Traced, createNestjsInterceptor, currentTraceId, _default as default, enableNestjsAutoTrace, evaluate, expressMiddleware, fastifyPlugin, flush, generateScenarios, hapiPlugin, honoMiddleware, init, koaMiddleware, langchainHandler, patchAnthropicClient, patchAnthropicVertexClient, patchAxiosClient, patchBedrockClient, patchCohereClient, patchGoogleAIModel, patchGoogleGenAIModels, patchMongooseClient, patchMysql2Client, patchOpenAIClient, patchPgClient, patchRedisClient, patchVertexGenerativeModel, simulateUser, startHttpTrace, startSpan, startTrace, traceFunction, traceObject, traceTool, withTrace };
package/dist/index.d.ts CHANGED
@@ -58,6 +58,12 @@ interface EvalKitOptions {
58
58
  maxExportBatchSize?: number;
59
59
  /** Export interval in ms (default: 5000) */
60
60
  scheduledDelayMillis?: number;
61
+ /**
62
+ * Max bytes of any captured HTTP request/response body stored on a span
63
+ * (default: 10 MB). Bodies larger than this are truncated. Applies to the HTTP
64
+ * client patches (axios/node-http) and all framework middleware.
65
+ */
66
+ maxBodyBytes?: number;
61
67
  /** deployment environment, e.g. "development" | "staging" | "production" */
62
68
  environment?: string;
63
69
  /** application version string, e.g. "1.2.3" */
@@ -103,6 +109,12 @@ declare class EvalKitClient {
103
109
  ctx: Context;
104
110
  };
105
111
  traceFunction<T extends (...args: any[]) => any>(name: string, fn: T, attributes?: Record<string, string | number | boolean>, captureIO?: boolean): T;
112
+ /**
113
+ * Like traceFunction but emits a first-class tool_call span (renders in the
114
+ * Input/Output panels and counts toward tool metrics). Use it to wrap your own
115
+ * client-side tools so they behave like server-side / LangChain tools.
116
+ */
117
+ traceTool<T extends (...args: any[]) => any>(name: string, fn: T, attributes?: Record<string, string | number | boolean>, captureIO?: boolean): T;
106
118
  flush(): Promise<void>;
107
119
  destroy(): Promise<void>;
108
120
  }
@@ -299,10 +311,47 @@ declare function startSpan(name: string, attributes?: Record<string, string | nu
299
311
  ctx: Context;
300
312
  };
301
313
  declare function traceFunction<T extends (...args: any[]) => any>(name: string, fn: T, attributes?: Record<string, string | number | boolean>, captureIO?: boolean): T;
314
+ /** Wrap your own client-side tool so it traces as a first-class tool_call span
315
+ * (Input/Output panels + tool metrics), like server-side / LangChain tools. */
316
+ declare function traceTool<T extends (...args: any[]) => any>(name: string, fn: T, attributes?: Record<string, string | number | boolean>, captureIO?: boolean): T;
302
317
  declare function TraceMethod(name?: string): MethodDecorator;
303
318
  declare function Traced(options?: {
304
319
  prefix?: string;
305
320
  }): ClassDecorator;
321
+ /**
322
+ * Trace every function-valued property of an object in place, APM-style — the
323
+ * parity for Python's `trace_module`. Use it for a service object or a CommonJS
324
+ * `module.exports` so all its functions are traced with one call:
325
+ *
326
+ * export const orders = traceObject({ place, cancel }, { prefix: 'orders' });
327
+ */
328
+ declare function traceObject<T extends Record<string, any>>(obj: T, options?: {
329
+ prefix?: string;
330
+ captureIO?: boolean;
331
+ }): T;
332
+ /**
333
+ * APM-style auto-tracing for a NestJS app — wraps every provider/controller
334
+ * method so the whole service call tree is traced, no per-class decorators.
335
+ * NestJS is the one framework with a DI registry the SDK can enumerate; for
336
+ * other frameworks use `traceObject` / `traceFunction` on your modules.
337
+ *
338
+ * Usage (main.ts), after `const app = await NestFactory.create(...)`:
339
+ * import { DiscoveryService } from '@nestjs/core'; // requires DiscoveryModule in AppModule
340
+ * evalkit.enableNestjsAutoTrace(app.get(DiscoveryService));
341
+ *
342
+ * Returns the number of methods wrapped.
343
+ */
344
+ declare function enableNestjsAutoTrace(discovery: {
345
+ getProviders: () => Array<{
346
+ instance?: unknown;
347
+ }>;
348
+ getControllers: () => Array<{
349
+ instance?: unknown;
350
+ }>;
351
+ }, options?: {
352
+ include?: RegExp;
353
+ captureIO?: boolean;
354
+ }): number;
306
355
  declare function withTrace<T>(ctx: Context, fn: () => Promise<T>): Promise<T>;
307
356
  /** Return the trace ID of the currently active span, or undefined if no span is active. */
308
357
  declare function currentTraceId(): string | undefined;
@@ -341,11 +390,14 @@ declare const _default: {
341
390
  startHttpTrace: typeof startHttpTrace;
342
391
  startSpan: typeof startSpan;
343
392
  traceFunction: typeof traceFunction;
393
+ traceTool: typeof traceTool;
394
+ traceObject: typeof traceObject;
344
395
  TraceMethod: typeof TraceMethod;
345
396
  Traced: typeof Traced;
397
+ enableNestjsAutoTrace: typeof enableNestjsAutoTrace;
346
398
  withTrace: typeof withTrace;
347
399
  currentTraceId: typeof currentTraceId;
348
400
  flush: typeof flush;
349
401
  };
350
402
 
351
- export { type AgentTurnResult, EvalKitClient, EvalKitInterceptor, type EvalKitOptions, type ExpressMiddlewareOptions, type FastifyPluginOptions, type GenerateScenariosOptions, type HapiPluginOptions, type HonoMiddlewareOptions, type KoaMiddlewareOptions, type OfflineEvalInput, type OfflineEvalResult, type OfflineMetric, type SimContext, type SimulateUserOptions, type SpanEvent, type TraceEnvelope, TraceMethod, Traced, createNestjsInterceptor, currentTraceId, _default as default, evaluate, expressMiddleware, fastifyPlugin, flush, generateScenarios, hapiPlugin, honoMiddleware, init, koaMiddleware, langchainHandler, patchAnthropicClient, patchAnthropicVertexClient, patchAxiosClient, patchBedrockClient, patchCohereClient, patchGoogleAIModel, patchGoogleGenAIModels, patchMongooseClient, patchMysql2Client, patchOpenAIClient, patchPgClient, patchRedisClient, patchVertexGenerativeModel, simulateUser, startHttpTrace, startSpan, startTrace, traceFunction, withTrace };
403
+ export { type AgentTurnResult, EvalKitClient, EvalKitInterceptor, type EvalKitOptions, type ExpressMiddlewareOptions, type FastifyPluginOptions, type GenerateScenariosOptions, type HapiPluginOptions, type HonoMiddlewareOptions, type KoaMiddlewareOptions, type OfflineEvalInput, type OfflineEvalResult, type OfflineMetric, type SimContext, type SimulateUserOptions, type SpanEvent, type TraceEnvelope, TraceMethod, Traced, createNestjsInterceptor, currentTraceId, _default as default, enableNestjsAutoTrace, evaluate, expressMiddleware, fastifyPlugin, flush, generateScenarios, hapiPlugin, honoMiddleware, init, koaMiddleware, langchainHandler, patchAnthropicClient, patchAnthropicVertexClient, patchAxiosClient, patchBedrockClient, patchCohereClient, patchGoogleAIModel, patchGoogleGenAIModels, patchMongooseClient, patchMysql2Client, patchOpenAIClient, patchPgClient, patchRedisClient, patchVertexGenerativeModel, simulateUser, startHttpTrace, startSpan, startTrace, traceFunction, traceObject, traceTool, withTrace };
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 bt=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var Fn=Object.getOwnPropertyNames;var Dn=Object.prototype.hasOwnProperty;var I=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var _=(n,t)=>()=>(n&&(t=n(n=0)),t);var Yt=(n,t)=>{for(var e in t)bt(n,e,{get:t[e],enumerable:true});},zn=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Fn(t))!Dn.call(n,o)&&o!==e&&bt(n,o,{get:()=>t[o],enumerable:!(r=Jn(t,o))||r.enumerable});return n};var Wn=n=>zn(bt({},"__esModule",{value:true}),n);function Xn(n,t){if(t.length===0)return {score:1,lcsLength:0};let e=n.length,r=t.length,o=Array.from({length:e+1},()=>new Array(r+1).fill(0));for(let i=1;i<=e;i++)for(let c=1;c<=r;c++)n[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[e][r];return {score:s/t.length,lcsLength:s}}function Qn(n,t){if(n.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(n.length===0||t.length===0)return {score:0,precision:0,recall:0};let e=new Set(n),r=new Set(t),o=new Set([...e].filter(a=>r.has(a))),s=o.size/e.size,i=o.size/r.size;return {score:s+i===0?0:2*s*i/(s+i),precision:s,recall:i}}function Yn(n,t){if(t.length===0)return {score:1,called:0,total:0};let e=new Set(n),r=t.filter(o=>e.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function Zn(n,t){if(t.length===0)return {score:1,matched:[],missing:[]};let e=n.toLowerCase(),r=t.filter(s=>e.includes(s.toLowerCase())),o=t.filter(s=>!e.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function tr(n,t){let e={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=n.toLowerCase(),i=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));e.requiredTerms=i,r.push(i);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(n);e.hasCitations=t.hasCitations?s:!s,r.push(e.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(n.match(s)??[]).length===t.slideCount;e.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:e}:{score:r.filter(Boolean).length/r.length,checks:e}}function er(n,t){if(n.length===0)return {score:1,relevant:0,total:0};let e=new Set(t),r=n.filter(o=>e.has(o)).length;return {score:r/n.length,relevant:r,total:n.length}}function nr(n,t){if(t.length===0)return {score:1,covered:0,total:0};let e=new Set(n),r=t.filter(o=>e.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function L(n){let t=new Set(n.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),e=(n.toolCalls??[]).map(a=>a.name),r=n.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let a=Xn(e,r);o.tool_trajectory=a.score,s.tool_trajectory={lcsLength:a.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(e.length>0||r.length>0)){let a=Qn(e,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=Yn(e,r);o.tool_correctness=a.score,s.tool_correctness={called:a.called,total:a.total};}let i=n.constraints?.requiredTerms??[];if(t.has("response_match")&&i.length>0){let a=Zn(n.output,i);o.response_match=a.score,s.response_match={matched:a.matched,missing:a.missing};}if(t.has("constraint_compliance")&&n.constraints){let a=tr(n.output,n.constraints);o.constraint_compliance=a.score,s.constraint_compliance={checks:a.checks};}if(t.has("contextual_precision")&&n.retrievedContext!==void 0&&n.expectedContext!==void 0){let a=er(n.retrievedContext,n.expectedContext);o.contextual_precision=a.score,s.contextual_precision={relevant:a.relevant,total:a.total};}if(t.has("contextual_recall")&&n.retrievedContext!==void 0&&n.expectedContext!==void 0){let a=nr(n.retrievedContext,n.expectedContext);o.contextual_recall=a.score,s.contextual_recall={covered:a.covered,total:a.total};}let c={scores:o,details:s};try{let a=(te(),Wn(Zt)),l={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[d,p]of Object.entries(o))l[`evalkit.metric.${d}`]=p;let{end:u}=a.startSpan("evaluation",l);u("OK");}catch{}return c}var gt=_(()=>{});function ft(n,t,e){if(!n||!t||!H.has(n))return;let r=X.get(n)??[];r.push({name:t,args:e}),X.set(n,r);}var H,X,Q=_(()=>{H=new Map,X=new Map;});function yt(n){return crypto.randomBytes(n).toString("hex")}function ee(n){return typeof n=="function"?{name:n.name||"tool"}:typeof n=="string"||n&&typeof n=="object"?n:String(n)}async function ne(n,t){let e=(t.apiUrl??process.env.EVALKIT_API_URL??n.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(ee)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(ee)),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);let o=await fetch(e+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":n.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 sr(n){let t=n.turns??n.messages??[],e=[];for(let r of t)typeof r=="string"?e.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&e.push(String(r.content));return e.length===0&&n.starting_prompt&&e.push(String(n.starting_prompt)),e}function ar(n,t,e,r){let o=Array.from(new Set([...n.constraints?.required_terms??[],...n.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),n.constraints?.has_citations!==void 0&&(s.hasCitations=n.constraints.has_citations);try{return L({output:t,toolCalls:e,expectedTools:n.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function ir(n,t,e,r){let o=e.name??"scenario",s=e.scenario_id??"scn_"+yt(6),i="sess_"+yt(6),c=sr(e).slice(0,r.maxTurns),a={...e.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:l,end:u,ctx:d}=n.startTrace(`scenario:${o}`,{"evalkit.session_id":i});H.set(l,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let p="OK",m,g=[],f=[],y=0,h={};try{await api.context.with(d,async()=>{for(let R=0;R<c.length;R++){let A={message:c[R],sessionId:i,state:a,turn:R+1},O=await t.entrypoint(A);O&&typeof O=="object"&&"text"in O?(g.push(O.text),O.toolCalls&&f.push(...O.toolCalls)):g.push(String(O)),y++;}let C=f.length?f:X.get(l)??[];h=ar(e,g.join(`
2
- `),C,t.metrics);});}catch(C){p="ERROR",m=C?.message??String(C);}finally{u(p);}let v={scenarioId:s,name:o,status:p,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:l}}async function re(n,t){let e="sim_"+yt(8),r="run_"+yt(8),o=t.maxTurns??12,s=[],i=[];for(let c of t.scenarios){let{result:a,traceId:l}=await ir(n,t,c,{simulationId:e,runId:r,maxTurns:o});s.push(a),i.push(l);}await n.flush();for(let c of i)H.delete(c),X.delete(c);return {simulationId:e,runId:r,results:s}}var oe=_(()=>{Q();gt();});var q,se=_(()=>{(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.FAILED=1]="FAILED";})(q||(q={}));});var ae=_(()=>{se();});function wt(n){return n[0]*1e3+n[1]/1e6}function cr(n){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[n]??"INTERNAL"}function lr(n){return n===1?"OK":n===2?"ERROR":"UNSET"}function pr(n){let t={};for(let[e,r]of Object.entries(n))e.startsWith("evalkit.")||e==="gen_ai.system"||r!=null&&(t[e]=r);return t}function ie(n){return new Promise(t=>setTimeout(t,n))}var ht,ce=_(()=>{ae();Q();ht=class{constructor(t){this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,e){let r=t.map(s=>this.toEnvelope(s)),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)");console.error(`[evalkit] export failed ${s.status}: ${i}`),e({code:q.FAILED});return}if(this.debug){let i=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${i.status}`);}e({code:q.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),e({code:q.FAILED});});}async fetchWithRetry(t,e,r=3){let o=[200,600,1800],s;for(let i=0;i<=r;i++)try{let c=await fetch(t,e);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 e=t.spanContext(),r=t.attributes,o=wt(t.startTime),s=wt(t.endTime),i=t.events.map(l=>({name:l.name,timestamp:new Date(wt(l.time)).toISOString(),attributes:l.attributes})),c={traceId:e.traceId,spanId:e.spanId,parentSpanId:t.parentSpanId,spanKind:cr(t.kind),spanType:r["evalkit.span_type"]??"log",status:lr(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:pr(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=H.get(e.traceId);return a&&(c.isSimulation=true,c.simulationId=a.simulationId,c.scenarioId=a.scenarioId,c.runId=a.runId),c}};});function Tt(n,t=yr){let e;try{e=JSON.stringify(n);}catch{}if(e===void 0)try{e=String(n);}catch{e="<unserializable>";}return e.length>t?e.slice(0,t)+"\u2026":e}var fr,yr;exports.EvalKitClient=void 0;var At=_(()=>{ce();fr="0.1.24",yr=4096;exports.EvalKitClient=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let e=new ht({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(e,{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":fr};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,e){let r=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...e}},api.context.active()),o=api.trace.setSpan(api.context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(i="OK")=>{r.setStatus({code:i==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,e,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":e.method,"http.url":e.url,...e.headers?{"http.request.headers":JSON.stringify(e.headers)}:{},...e.requestBody!==void 0?{"http.request.body":JSON.stringify(e.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",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"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}startSpan(t,e,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...e}},r??api.context.active());return {ctx:api.trace.setSpan(api.context.active(),o),end:(i="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:i==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,e,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"function_call",...r};o&&i.length&&(c["function.args"]=Tt(i));let{ctx:a,end:l}=s.startSpan(t,c),u;try{u=api.context.with(a,()=>e.apply(this,i));}catch(d){let p=d instanceof Error?d:new Error(String(d));throw api.trace.getSpan(a)?.recordException(p),l("ERROR",{"error.message":p.message}),d}return u&&typeof u.then=="function"?u.then(d=>(l("OK",o?{"function.result":Tt(d)}:void 0),d),d=>{let p=d instanceof Error?d:new Error(String(d));throw api.trace.getSpan(a)?.recordException(p),l("ERROR",{"error.message":p.message}),d}):(l("OK",o?{"function.result":Tt(u)}:void 0),u)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function K(n){if(!n)return api.context.active();let t=n.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 F=_(()=>{});function vt(n){return n.length<=pe?n:n.slice(0,pe)+"\u2026"}function xt(n){if(typeof n=="string")return n;try{return JSON.stringify(n??{})}catch{return String(n)}}function kr(n){try{let t=JSON.parse(n);return t&&typeof t=="object"?t:void 0}catch{return}}function ue(n,t){let e=[];try{for(let r of n?.choices??[])for(let o of r?.message?.tool_calls??[]){let s=o?.function?.name??"";s&&e.push({name:s,argsJson:vt(xt(o?.function?.arguments??"")),id:o?.id??""});}}catch{}return e}function de(n,t){let e=[];try{for(let r of n??[]){if(r?.type!=="tool_use")continue;let o=r?.name??"";o&&e.push({name:o,argsJson:vt(xt(r?.input??{})),id:r?.id??""});}}catch{}return e}function me(n,t){let e=[];try{let r=[];if(Array.isArray(n?.functionCalls))r.push(...n.functionCalls);else for(let s of n?.candidates??[])for(let i of s?.content?.parts??[])i?.functionCall?.name&&r.push(i.functionCall);let o=0;for(let s of r){let i=s?.name??"";i&&e.push({name:i,argsJson:vt(xt(s?.args??{})),id:s?.id??`call_${o++}`});}}catch{}return e}function ge(n,t){let e=[];try{for(let r of n?.generations??[])for(let o of r??[])for(let s of o?.message?.tool_calls??[]){let i=s?.name??"";i&&e.push({name:i,argsJson:vt(xt(s?.args??{})),id:s?.id??""});}}catch{}return e}function M(n,t,e){if(!e.length)return;let r=t.spanContext().traceId,o=api.trace.setSpan(api.context.active(),t);for(let s of e){if(!s.name)continue;let i={"gen_ai.tool.name":s.name,"gen_ai.tool.call.id":s.id,"gen_ai.tool.call.arguments":s.argsJson};s.result!=null&&(i["gen_ai.tool.call.result"]=s.result);try{t.addEvent("gen_ai.tool.call",i);}catch{}try{ft(r,s.name,kr(s.argsJson));}catch{}try{n.tracer.startSpan(s.name,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...i,"tool.name":s.name,"tool.arguments":s.argsJson,...s.result!=null?{"tool.result":s.result}:{}}},o).end();}catch{}}}var pe,Y=_(()=>{Q();pe=32768;});function Er(n,t){let e="",r=0,o=0,s=false;function i(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:api.SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":e,"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(n,{get(c,a,l){if(a===Symbol.asyncIterator)return function(){let d=c[Symbol.asyncIterator]();return {async next(){try{let p=await d.next();if(!p.done&&p.value){let m=p.value,g=m.choices?.[0]?.delta?.content;g&&(e+=g),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return p.done&&i(),p}catch(p){throw i(p instanceof Error?p:new Error(String(p))),p}},return(){return i(),d.return?.()??Promise.resolve({done:true,value:void 0})},throw(p){return i(p instanceof Error?p:new Error(String(p))),d.throw?.(p)??Promise.reject(p)},[Symbol.asyncIterator](){return this}}};let u=Reflect.get(c,a,l);return typeof u=="function"?u.bind(c):u}})}function j(n,t,e,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let i=s[0],c=e??api.context.active(),a=n.tracer.startSpan("chat.completions.create",{kind:api.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":br(i.messages??[])}},c),l=api.trace.setSpan(c,a);if(i?.stream){let m;try{m=await api.context.with(l,()=>o.apply(this,s));}catch(g){let f=g instanceof Error?g:new Error(String(g));throw a.recordException(f),a.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),a.end(),g}return Er(m,a)}let u;try{u=await api.context.with(l,()=>o.apply(this,s));}catch(m){let g=m instanceof Error?m:new Error(String(m));throw a.recordException(g),a.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),a.end(),m}let d=u.choices?.[0],p=d?.message.content??"";return a.setAttributes({"gen_ai.response.model":u.model,"gen_ai.response.id":u.id,"gen_ai.usage.input_tokens":u.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":u.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":u.usage?.total_tokens??0,"gen_ai.response.finish_reasons":d?.finish_reason?[d.finish_reason]:[],"evalkit.completion":p}),M(n,a,ue(u)),a.setStatus({code:api.SpanStatusCode.OK}),a.end(),u},t.create.__evalkit=true;}function br(n){return n.map(t=>`${t.role}: ${t.content??""}`).join(`
3
- `)}var Kt=_(()=>{Y();});function Tr(n,t){let e="",r=0,o=0,s=false;function i(a){let l=a?.type;if(l==="content_block_delta"){let u=a.delta;u?.type==="text_delta"&&u.text&&(e+=u.text);}else l==="message_start"?r=a.message?.usage?.input_tokens??0:l==="message_delta"&&(o=a.usage?.output_tokens??0);}function c(a){s||(s=true,a?(t.recordException(a),t.setStatus({code:api.SpanStatusCode.ERROR,message:a.message})):(t.setAttributes({"evalkit.completion":e,"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(n,{get(a,l,u){if(l===Symbol.asyncIterator)return function(){let p=a[Symbol.asyncIterator]();return {async next(){try{let m=await p.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(),p.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),p.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(a,l,u);return typeof d=="function"?d.bind(a):d}})}function $(n,t,e){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],i=e??api.context.active(),c=Ar(s.system,s.messages??[]),a=n.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}},i),l=api.trace.setSpan(i,a);if(s?.stream){let p;try{p=await api.context.with(l,()=>r.apply(this,o));}catch(m){let g=m instanceof Error?m:new Error(String(m));throw a.recordException(g),a.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),a.end(),m}return Tr(p,a)}let u;try{u=await api.context.with(l,()=>r.apply(this,o));}catch(p){let m=p instanceof Error?p:new Error(String(p));throw a.recordException(m),a.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),a.end(),p}let d=u.content.filter(p=>p.type==="text").map(p=>p.text??"").join("");return a.setAttributes({"gen_ai.response.model":u.model,"gen_ai.response.id":u.id,"gen_ai.usage.input_tokens":u.usage?.input_tokens??0,"gen_ai.usage.output_tokens":u.usage?.output_tokens??0,"gen_ai.response.finish_reasons":u.stop_reason?[u.stop_reason]:[],"evalkit.completion":d}),M(n,a,de(u.content)),a.setStatus({code:api.SpanStatusCode.OK}),a.end(),u},t.create.__evalkit=true;}function Ar(n,t){let e=[];return n&&e.push(`system: ${n}`),e.push(...t.map(r=>`${r.role}: ${r.content}`)),e.join(`
4
- `)}var _t=_(()=>{Y();});function Ct(n,t){let e=t.Query?.prototype;if(!e||e.__evalkit)return;let r=e.exec;e.exec=async function(){if(!api.trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",i=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=n.tracer.startSpan(`${s} ${i}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":i,"db.query":JSON.stringify(this._conditions??{})}},api.context.active());try{let a=await r.call(this);return c.setStatus({code:api.SpanStatusCode.OK}),c.end(),a}catch(a){let l=a instanceof Error?a:new Error(String(a));throw c.recordException(l),c.setStatus({code:api.SpanStatusCode.ERROR,message:l.message}),c.end(),a}},e.__evalkit=true;}var Mt=_(()=>{});function et(n,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(!api.trace.getActiveSpan()?.isRecording())return s.call(this,i,...c);let l=Array.isArray(i)?i[0]:i?.name??i?.args?.[0]??"cmd",u=(typeof l=="string"?l:String(l)).toUpperCase(),d=n.tracer.startSpan(`redis ${u}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":u}},api.context.active());try{let p=await s.call(this,i,...c);return d.setStatus({code:api.SpanStatusCode.OK}),d.end(),p}catch(p){let m=p instanceof Error?p:new Error(String(p));throw d.recordException(m),d.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),d.end(),p}},r.__evalkit_redis=true;}var qt=_(()=>{});function T(n){let t={};for(let[e,r]of Object.entries(n))jr.test(e)||r!==void 0&&(t[e]=Array.isArray(r)?r.join(", "):String(r));return t}var jr,Nt=_(()=>{jr=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var D,jt=_(()=>{D=new Map;});function nt(n,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let e=t.create.bind(t);t.create=function(...r){let o=e(...r);return nt(n,o),o};}t.interceptors.request.use(e=>{let r=(e.baseURL?e.baseURL.replace(/\/$/,""):"")+(e.url??"");if(Lr.some(u=>u.test(r))||!api.trace.getActiveSpan()?.isRecording())return e;let s=e.url??"";try{s=new URL(r,e.baseURL??"http://localhost").pathname;}catch{}let i=(e.method??"get").toUpperCase(),c=T(e.headers??{}),a=n.tracer.startSpan(`${i} ${s}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":i,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...e.data!==void 0?{"http.request.body":typeof e.data=="string"?e.data.slice(0,4096):JSON.stringify(e.data).slice(0,4096)}:{}}},api.context.active()),l=a.spanContext();return e.headers=e.headers??{},e.headers.traceparent=`00-${l.traceId}-${l.spanId}-01`,e.headers["x-evalkit-span-id"]=l.spanId,D.set(l.spanId,a),e.__evalkitSpan=a,e.__evalkitSpanId=l.spanId,e}),t.interceptors.response.use(e=>{let r=e.config?.__evalkitSpan;if(e.config?.__evalkitSpanId&&D.delete(e.config.__evalkitSpanId),r){let o=T(e.headers??{}),s=e.data,i;s!=null&&(i=(typeof s=="string"?s:JSON.stringify(s)).slice(0,4096)),r.setAttributes({"http.status_code":e.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...i!==void 0?{"http.response.body":i}:{}}),r.setStatus({code:api.SpanStatusCode.OK}),r.end();}return e},e=>{let r=e.config?.__evalkitSpan;if(e.config?.__evalkitSpanId&&D.delete(e.config.__evalkitSpanId),r){let o=e.response?.status??0,s=T(e.response?.headers??{}),i=e.response?.data,c;i!=null&&(c=(typeof i=="string"?i:JSON.stringify(i)).slice(0,4096)),r.setAttributes({"http.status_code":o,"error.message":e.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(e instanceof Error?e:new Error(String(e))),r.setStatus({code:api.SpanStatusCode.ERROR,message:e.message}),r.end();}throw e});}}var Lr,$t=_(()=>{Nt();jt();Lr=[/\/v1\/ingest/,/\/health(z)?$/];});function rt(n,t){let e=t?.prototype??Object.getPrototypeOf(t);if(!e||e.__evalkit_pg)return;let r=e.query;typeof r=="function"&&(e.query=function(...o){if(!api.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,l=i.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",d=i.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",p=d?`${l} ${d}`:`pg ${l}`,m=n.tracer.startSpan(p,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":l,"db.statement":i.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...d?{"db.sql.table":d}:{}}},api.context.active()),g=o[o.length-1];if(typeof g=="function"){let y=g,h=o.slice(0,-1).concat([(v,C)=>{v?(m.recordException(v),m.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",C?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK})),m.end(),y(v,C);}]);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})},e.__evalkit_pg=true);}var Gt=_(()=>{});function ot(n,t){let e=t?.prototype??Object.getPrototypeOf(t);if(!(!e||e.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=e[r];typeof o=="function"&&(e[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",a=Array.isArray(s[1])?s[1]:void 0,u=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",p=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=p?`${u} ${p}`:`mysql ${u}`,g=n.tracer.startSpan(m,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":u,"db.statement":c.slice(0,2048),...a!==void 0?{"db.params":JSON.stringify(a).slice(0,1024)}:{},...p?{"db.sql.table":p}:{}}},api.context.active()),f=s[s.length-1];if(typeof f=="function"){let h=f,v=s.slice(0,-1).concat([(C,R,A)=>{C?(g.recordException(C),g.setStatus({code:api.SpanStatusCode.ERROR,message:C.message}),g.setAttribute("error.message",C.message)):(g.setAttribute("db.rows_affected",Array.isArray(R)?R.length:R?.affectedRows??0),g.setStatus({code:api.SpanStatusCode.OK})),g.end(),h(C,R,A);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(g.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),g.setStatus({code:api.SpanStatusCode.OK}),g.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw g.recordException(v),g.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),g.setAttribute("error.message",v.message),g.end(),h}):(g.end(),y)});}e.__evalkit_mysql2=true;}}var Bt=_(()=>{});function Xr(n){if(!n||typeof n!="object")return false;let t=n.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function st(n,t,e){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!Xr(s))return r.apply(this,o);let i=s.input,c=i?.modelId??"unknown",a=c.split(".")[0]??"bedrock",l=i?.system?.map(v=>v.text).join(`
5
- `)??"",u=i?.messages?.map(v=>`${v.role}: ${v.content.map(C=>C.text??"").join("")}`)??[],d=[l?`system: ${l}`:"",...u].filter(Boolean).join(`
6
- `),p=i?.inferenceConfig??{},m=api.context.active(),g=n.tracer.startSpan("converse",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":a,"gen_ai.request.model":c,...p.temperature!=null&&{"gen_ai.request.temperature":p.temperature},...p.maxTokens!=null&&{"gen_ai.request.max_tokens":p.maxTokens},...p.topP!=null&&{"gen_ai.request.top_p":p.topP},"evalkit.prompt":d}},m),f=api.trace.setSpan(m,g),y;try{y=await api.context.with(f,()=>r.apply(this,o));}catch(v){let C=v instanceof Error?v:new Error(String(v));throw g.recordException(C),g.setStatus({code:api.SpanStatusCode.ERROR,message:C.message}),g.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return g.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}),g.setStatus({code:api.SpanStatusCode.OK}),g.end(),y},t.send.__evalkit=true;}var Lt=_(()=>{});function at(n,t,e){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(p=>`${p.role}: ${p.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...i,`user: ${s?.message??""}`].filter(Boolean).join(`
7
- `),a=api.context.active(),l=n.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}},a),u=api.trace.setSpan(a,l),d;try{d=await api.context.with(u,()=>r.apply(this,o));}catch(p){let m=p instanceof Error?p:new Error(String(p));throw l.recordException(m),l.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),l.end(),p}return l.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":d.generationId??"","gen_ai.usage.input_tokens":d.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":d.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":d.finishReason?[d.finishReason]:[],"evalkit.completion":d.text??""}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),d},t.chat.__evalkit=true;}var Ht=_(()=>{});function it(n,t,e){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 f=i,y=f?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=f?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(C=>C.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
- `);}let a=api.context.active(),l=n.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}},a),u=api.trace.setSpan(a,l),d;try{d=await api.context.with(u,()=>r.apply(this,s));}catch(f){let y=f instanceof Error?f:new Error(String(f));throw l.recordException(y),l.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),l.end(),f}let p=d?.response,m=p?.candidates?.[0],g=m?.content?.parts?.map(f=>f.text??"").join("")??"";return l.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":p?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":p?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":p?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":g}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),d},t.generateContent.__evalkit=true;}var Ut=_(()=>{});function be(n){return n?.text??""}function eo(n){if(typeof n=="string")return n;if(Array.isArray(n))return n.map(t=>{if(typeof t=="string")return t;let e=t,r=e.role??"user",o=(e.parts??[]).map(be).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
- `);if(n&&typeof n=="object"){let t=n;if(t.parts)return (t.parts??[]).map(be).join("")}return n!=null?String(n):""}function no(n){let t=n?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(e=>e?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function we(n){let t=no(n?.config),e=eo(n?.contents);return [t?`system: ${t}`:"",e].filter(Boolean).join(`
10
- `)}function Oe(n){let t=[];for(let e of n?.candidates??[])for(let r of e.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):n?.text??""}function Te(n,t,e){Vt&&M(Vt,t,me(n));}function lt(n,t,e){if(Vt=n,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=api.context.active(),a=n.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"evalkit.prompt":we(s)}},c),l=api.trace.setSpan(c,a),u;try{u=await api.context.with(l,()=>r.apply(this,o));}catch(d){let p=d instanceof Error?d:new Error(String(d));throw a.recordException(p),a.setStatus({code:api.SpanStatusCode.ERROR,message:p.message}),a.end(),d}a.setAttributes({"gen_ai.response.model":i,"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,"evalkit.completion":Oe(u)});try{Te(u,a,a.spanContext().traceId);}catch{}return a.setStatus({code:api.SpanStatusCode.OK}),a.end(),u},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=api.context.active(),a=n.tracer.startSpan("generateContentStream",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"gen_ai.streaming":true,"evalkit.prompt":we(s)}},c),l=api.trace.setSpan(c,a),u;try{u=await api.context.with(l,()=>r.apply(this,o));}catch(p){let m=p instanceof Error?p:new Error(String(p));throw a.recordException(m),a.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),a.end(),p}async function*d(){let p=[],m=0,g=0;try{for await(let f of u){try{let y=Oe(f);y&&p.push(y),f?.usageMetadata&&(m=f.usageMetadata.promptTokenCount??m,g=f.usageMetadata.candidatesTokenCount??g),Te(f,a,a.spanContext().traceId);}catch{}yield f;}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":g,"evalkit.completion":p.join("")}),a.setStatus({code:api.SpanStatusCode.OK});}catch(f){let y=f instanceof Error?f:new Error(String(f));throw a.recordException(y),a.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),f}finally{a.end();}}return d()},t.generateContentStream.__evalkit=true;}}var Vt,Jt=_(()=>{Y();Vt=null;});function Ft(n){if(typeof I>"u")return null;let t=I.cache;if(!t)return null;let e=Object.keys(t).find(r=>{let o=r.split("/node_modules/");return o.length>1&&o[o.length-1].startsWith(n+"/")});return e?t[e]?.exports??null:null}function w(){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 S,Dt=_(()=>{S=new Function("s","return import(s)");});var qe={};Yt(qe,{langchainCallbackHandler:()=>Et,langchainHandlerMethods:()=>Me,patchLangChain:()=>po});function P(n,t=ao){let e;try{e=typeof n=="string"?n:JSON.stringify(n);}catch{e=String(n);}return e==null?"":e.length>t?e.slice(0,t)+"\u2026":e}function Ke(n){let t=n?.id;if(Array.isArray(t)){for(let e of ["openai","anthropic","google","vertexai","cohere","mistral","bedrock","ollama","groq"])if(t.includes(e))return e==="vertexai"?"vertex-ai":e;return t[t.length-1]}}function Pe(n,t){let e=t?.invocation_params??{};for(let o of ["model","model_name","modelName","model_id","deployment_name"])if(e[o])return String(e[o]);let r=n?.kwargs??{};for(let o of ["model","model_name","modelName","model_id"])if(r[o])return String(r[o]);return "unknown"}function io(n){try{let e=((Array.isArray(n?.[0])?n[0]:n)??[]).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(e.join(`
11
- `))}catch{return P(n)}}function co(n){try{let t=[];for(let e of n?.generations??[])for(let r of e??[])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 lo(n){let t=0,e=0;try{let r=n?.llmOutput?.tokenUsage??n?.llmOutput?.usage??{};if(t=r.promptTokens??r.prompt_tokens??r.input_tokens??0,e=r.completionTokens??r.completion_tokens??r.output_tokens??0,!t&&!e)for(let o of n?.generations??[])for(let s of o??[]){let i=s?.message?.usage_metadata;i&&(t=i.input_tokens??t,e=i.output_tokens??e);}}catch{}return {tin:t||0,tout:e||0}}function Me(n){let t=new Map;function e(o,s,i,c,a){try{let l=s?t.get(s):void 0,u=l?l.ctx:api.context.active(),d=n.tracer.startSpan(c,{kind:i==="llm_call"?api.SpanKind.CLIENT:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":i,"evalkit.framework":"langchain",...a}},u);t.set(o,{span:d,ctx:api.trace.setSpan(u,d)});}catch{}}function r(o,s,i,c){try{let a=t.get(o);if(!a)return;t.delete(o),i&&a.span.setAttributes(i),a.span.setStatus({code:s==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR,message:c}),a.span.end();}catch{}}return {handleChainStart(o,s,i,c,a,l,u,d){let p=d??o?.id?.[o.id.length-1]??"chain";e(i,c,"function_call",String(p),a?.length?{"langchain.tags":a.join(",")}:{});},handleChainEnd(o,s){r(s,"OK");},handleChainError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleLLMStart(o,s,i,c,a){let l=Pe(o,a);e(i,c,"llm_call","llm.generate",{"gen_ai.request.model":l,"gen_ai.system":Ke(o)??"","evalkit.prompt":P((s??[]).join(`
13
- `))});},handleChatModelStart(o,s,i,c,a){let l=Pe(o,a);e(i,c,"llm_call","chat.generate",{"gen_ai.request.model":l,"gen_ai.system":Ke(o)??"","evalkit.prompt":io(s)});},handleLLMEnd(o,s){let{tin:i,tout:c}=lo(o),a=t.get(s);try{a&&M(n,a.span,ge(o));}catch{}r(s,"OK",{"evalkit.completion":co(o),"gen_ai.usage.input_tokens":i,"gen_ai.usage.output_tokens":c,"gen_ai.usage.total_tokens":i+c});},handleLLMError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleToolStart(o,s,i,c,a,l,u){let d=u??o?.id?.[o.id.length-1]??"tool",p=t.get(c??"");ft(p?.span.spanContext().traceId,String(d)),e(i,c,"tool_call",String(d),{"tool.name":String(d),"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,i,c){let a=o?.id?.[o.id.length-1]??"retriever";e(i,c,"db_query",String(a),{"retriever.query":P(s)});},handleRetrieverEnd(o,s){let i=Array.isArray(o)?o.length:0;r(s,"OK",{"retriever.document_count":i});},handleRetrieverError(o,s){r(s,"ERROR",void 0,String(o?.message??o));}}}async function Et(n){try{let e=(await S("@langchain/core/callbacks/base")).BaseCallbackHandler.fromMethods(Me(n));return e.name="evalkit",e.__evalkit=!0,e}catch{return null}}async function po(n){let t=await Et(n);if(!t)return null;try{let r=(await S("@langchain/core/callbacks/manager")).CallbackManager;if(r&&typeof r.configure=="function"&&!r.__evalkitPatched){let o=r.configure.bind(r);r.configure=(...s)=>{let i=o(...s);try{i&&![...i.handlers??[],...i.inheritableHandlers??[]].some(l=>l?.__evalkit)&&typeof i.addHandler=="function"&&i.addHandler(t,!0);}catch{}return i},r.__evalkitPatched=!0;}}catch{}return t}var ao,zt=_(()=>{Q();Y();Dt();ao=4096;});function pt(n,t,e){$(n,t,e);}function ut(n,t,e){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("")}`)??[],l=[c?`system: ${c}`:"",...a].filter(Boolean).join(`
14
- `),u=api.context.active(),d=n.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}},u),p=api.trace.setSpan(u,d),m;try{m=await api.context.with(p,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw d.recordException(v),d.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),d.end(),h}let g=m?.response,f=g?.candidates?.[0],y=f?.content?.parts?.map(h=>h.text??"").join("")??"";return d.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":g?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":g?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":g?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":f?.finishReason?[f.finishReason]:[],"evalkit.completion":y}),d.setStatus({code:api.SpanStatusCode.OK}),d.end(),m},t.generateContent.__evalkit=true;}var Wt=_(()=>{_t();});function $e(n,t={},e){function r(o,s,i){let c={...t,...s};o.addHook("onRequest",(a,l,u)=>{let d=a.routerPath??a.routeOptions?.url??a.url??"/",p=typeof c.name=="function"?c.name(a):c.name??`${String(a.method??"GET")} ${String(d)}`,m=a.headers?.traceparent,g=e?e(m):api.context.active(),{traceId:f,end:y,ctx:h}=api.context.with(g,()=>n.startHttpTrace(p,{method:String(a.method??"GET"),url:String(a.url??"/"),headers:a.headers,requestBody:void 0}));a._evalkitCtx=h,a._evalkitTraceId=f,a._evalkitEnd=y,a._evalkitEnded=false,api.context.with(h,u);}),o.addHook("preHandler",(a,l,u)=>{if(a._evalkitCtx&&a.body!==void 0){let d=api.trace.getActiveSpan();if(d?.isRecording())try{d.setAttribute("http.request.body",typeof a.body=="string"?a.body.slice(0,4096):JSON.stringify(a.body).slice(0,4096));}catch{}}api.context.with(a._evalkitCtx??api.context.active(),u);}),o.addHook("onSend",(a,l,u,d)=>{try{if(u!=null){let p=(typeof u=="string"?u:JSON.stringify(u)).slice(0,4096);a._evalkitRespBody=p;}}catch{}d(null,u);}),o.addHook("onResponse",(a,l,u)=>{if(typeof a._evalkitEnd=="function"&&!a._evalkitEnded){a._evalkitEnded=true;let d=l.statusCode??200;a._evalkitEnd(d>=400?"ERROR":"OK",{statusCode:d,body:a._evalkitRespBody});}u();}),o.addHook("onError",(a,l,u,d)=>{typeof a._evalkitEnd=="function"&&!a._evalkitEnded&&(a._evalkitEnded=true,a._evalkitEnd("ERROR",{statusCode:l.statusCode??500})),d();}),i();}return r[Symbol.for("skip-override")]=true,r}var Ge=_(()=>{});function Le(n,t){return (e,r,o)=>{let s=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method)} ${String(e.route?.path??e.path??e.url)}`,i=K(e.headers?.traceparent),{end:c,ctx:a,traceId:l}=api.context.with(i,()=>n.startHttpTrace(s,{method:String(e.method??"GET"),url:String(e.originalUrl??e.url??"/"),headers:e.headers,requestBody:e.body}));e._evalkitCtx=a,e._evalkitTraceId=l;let u=api.trace.getSpan(a)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",l),r.setHeader?.("traceparent",`00-${l}-${u}-01`);let d=4096,p=[],m=0,g=h=>{if(!(!h||m>=d))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(p.push(v),m+=v.length);}catch{}},f=r.write.bind(r),y=r.end;r.write=function(h,...v){return g(h),f(h,...v)},r.end=function(...h){g(h[0]);let v=r.statusCode??200,C;if(p.length)try{C=Buffer.concat(p).subarray(0,d).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:C}),y.apply(r,h)},api.context.with(a,()=>o());}}var He=_(()=>{F();});function Ve(n,t){return async(e,r)=>{let o=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method??"GET")} ${String(e.path??"/")}`,s=K(e.request?.headers?.traceparent),{end:i,ctx:c}=api.context.with(s,()=>n.startHttpTrace(o,{method:String(e.method??"GET"),url:String(e.href??e.url??"/"),headers:e.request?.headers,requestBody:e.request?.body}));e._evalkitCtx=c;try{await api.context.with(c,r);let a=e.status??200,l;try{let u=e.body;u!=null&&(l=(typeof u=="string"?u:JSON.stringify(u)).slice(0,4096));}catch{}i(a>=400?"ERROR":"OK",{statusCode:a,body:l});}catch(a){throw i("ERROR",{statusCode:e.status??500}),a}}}var Je=_(()=>{F();});function De(n,t){return async(e,r)=>{let o=e.req,s=o.url??"/",i=s;try{i=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(e):t?.name??`${String(o.method??"GET")} ${i}`,a=K(o.header("traceparent")),{end:l,ctx:u}=api.context.with(a,()=>n.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await api.context.with(u,r);let d=e.res?.status??200,p;try{if(e.res&&typeof e.res.clone=="function"){let m=await e.res.clone().text();m&&(p=m.slice(0,4096));}}catch{}l(d>=400?"ERROR":"OK",{statusCode:d,body:p});}catch(d){throw l("ERROR",{statusCode:500}),d}}}var ze=_(()=>{F();});function We(n,t){return {name:"@evalkit/hapi",register(e){let r=new WeakMap;e.ext("onRequest",(o,s)=>{let i=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=K(o.headers?.traceparent),{end:a,ctx:l}=api.context.with(c,()=>n.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:l}),s.continue}),e.ext("onPreResponse",(o,s)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,a;try{let l=o.response?.source??o.response?.result;l!=null&&(a=(typeof l=="string"?l:JSON.stringify(l)).slice(0,4096));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:a}),r.delete(o);}return s.continue});}}}var Xe=_(()=>{F();});exports.EvalKitInterceptor=void 0;var Xt=_(()=>{exports.EvalKitInterceptor=class{constructor(t){this.client=t;}intercept(t,e){let r=t.switchToHttp?.();if(!r)return e.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}),l=4096,u=[],d=0,p=g=>{if(!(!g||d>=l))try{let f=Buffer.isBuffer(g)?g:typeof g=="string"?Buffer.from(g):null;f?.length&&(u.push(f),d+=f.length);}catch{}};if(s&&typeof s.write=="function"){let g=s.write.bind(s);s.write=function(f,...y){return p(f),g(f,...y)};}if(s&&typeof s.end=="function"){let g=s.end.bind(s);s.end=function(f,...y){return p(f),g(f,...y)};}let m=api.context.with(c,()=>e.handle());return {subscribe(g){return m.subscribe({next:f=>g.next?.(f),error:f=>{a("ERROR"),g.error?.(f);},complete:()=>{let f=s?.statusCode??200,y;if(u.length)try{y=Buffer.concat(u).subarray(0,l).toString("utf-8");}catch{}a(f>=400?"ERROR":"OK",{statusCode:f,body:y}),g.complete?.();}})},pipe(...g){return m.pipe(...g)}}}};});function Qt(n){return vo.some(t=>t.test(n))}function xo(n,t,e){let r="",o="GET";if(typeof n=="string")r=n,o=(t?.method??"GET").toUpperCase();else if(n instanceof URL)r=n.href,o=(t?.method??"GET").toUpperCase();else {let i=n.hostname??n.host??"localhost",c=n.port?`:${n.port}`:"",a=n.path??"/";r=`${e}://${i}${c}${a}`,o=(n.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${e}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function Ze(n){let t,e;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"),e=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:e,scheme:"https"}];for(let{mod:s,scheme:i}of r){let a=function(l,u,d){let p=typeof u=="function"?void 0:u,{url:m,method:g,pathname:f}=xo(l,p,i);if(Qt(m)||!api.trace.getActiveSpan()?.isRecording())return c.call(s,l,u,d);let h={...typeof l=="object"&&!(l instanceof URL)?l.headers??{}:{},...p?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof l=="object"&&!(l instanceof URL)&&l.headers&&delete l.headers["x-evalkit-span-id"],p?.headers&&delete p.headers["x-evalkit-span-id"];let E=D.get(String(v));if(E){let x=T({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&E.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(s,l,u,d)}let C=T(h),R=n.tracer.startSpan(`${g} ${f}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":g,"http.url":m,...Object.keys(C).length?{"http.request.headers":JSON.stringify(C)}:{}}},api.context.active()),A=c.call(s,l,u,d),O=R.spanContext();return A.setHeader("traceparent",`00-${O.traceId}-${O.spanId}-01`),A.on("response",E=>{let x=E.statusCode??0;R.setAttributes({"http.status_code":x,...E.headers?{"http.response.headers":JSON.stringify(T(E.headers))}:{}}),R.setStatus({code:x>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),R.end();}),A.on("error",E=>{R.setAttributes({"http.status_code":0,"error.message":E.message}),R.recordException(E instanceof Error?E:new Error(String(E))),R.setStatus({code:api.SpanStatusCode.ERROR,message:E.message}),R.end();}),A};let c=s.request;c.__evalkit||(a.__evalkit=true,Object.defineProperty(s,"request",{value:a,writable:true,configurable:true}));}}function tn(n){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 e=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return e.call(this,o,...s);let i=s[0],c=s[1],a=i.url??"/";if(Qt(a))return e.call(this,o,...s);if(api.trace.getActiveSpan()?.isRecording())return e.call(this,o,...s);let l=(i.method??"GET").toUpperCase(),u=a;try{u=new URL(a,"http://localhost").pathname;}catch{}let d=i.headers.traceparent,p=d?_o(Array.isArray(d)?d[0]:d):api.context.active(),m=n.tracer.startSpan(`${l} ${u}`,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":l,"http.url":a,"http.request.headers":JSON.stringify(T(i.headers))}},p),g=api.trace.setSpan(p,m),f=m.spanContext();c.setHeader("x-trace-id",f.traceId),c.setHeader("traceparent",`00-${f.traceId}-${f.spanId}-01`);let y=8192,h=[],v=0;i.on("data",x=>{try{if(x&&v<y){let b=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;b&&b.length&&(h.push(b),v+=b.length);}}catch{}}),i.on("end",()=>{if(h.length)try{let x=Buffer.concat(h).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.request.body",x);}catch{}});let C=[],R=0,A=x=>{try{if(x&&typeof x!="function"&&R<y){let b=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;b&&b.length&&(C.push(b),R+=b.length);}}catch{}},O=c.write.bind(c),E=c.end.bind(c);return c.write=function(x,...b){return A(x),O(x,...b)},c.end=function(x,...b){return A(x),E(x,...b)},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(T(x)));}catch{}if(C.length)try{let x=Buffer.concat(C).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.response.body",x);}catch{}m.setStatus({code:c.statusCode>=400?api.SpanStatusCode.ERROR:api.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:api.SpanStatusCode.ERROR,message:x.message}),m.end();}),api.context.with(g,()=>e.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function _o(n){let t=n.split("-");if(t.length<4)return api.context.active();let[,e,r,o]=t;if(!e||!r)return api.context.active();try{let s={traceId:e,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return api.trace.setSpanContext(api.context.active(),s)}catch{return api.context.active()}}function en(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let n=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(e,r){let o=typeof e=="string"?e:e instanceof URL?e.href:e.url;if(Qt(o))return n(e,r);let s=api.trace.getActiveSpan();if(!s?.isRecording())return n(e,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((f,y)=>{a[y]=f;});let l=T(a),u=s.spanContext(),d=`00-${u.traceId}-${u.spanId}-01`,p=new Headers(r?.headers);p.set("traceparent",d);let m={...r,headers:p};Object.keys(l).length&&s.addEvent("http.fetch.request",{"http.method":i,"http.url":o,"http.request.headers":JSON.stringify(l)});try{let g=await n(e,m),f={};return g.headers.forEach((y,h)=>{f[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":g.status,"http.response.headers":JSON.stringify(T(f))}),g}catch(g){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":g?.message??String(g),"error.stack":g?.stack??""}),g}},globalThis.fetch.__evalkit=true;}var vo,nn=_(()=>{Nt();jt();vo=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function on(n){if(console.__evalkit)return;let t=console.log.bind(console),e=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}
15
- ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(i,c)=>{let a=api.trace.getActiveSpan();if(a?.isRecording())a.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let l=n.tracer.startSpan(`log.${i}`,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":i,"log.message":c}},api.context.active());l.setStatus({code:i==="ERROR"?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),l.end();}};console.log=(...i)=>{t(...i),s("INFO",o(i));},console.warn=(...i)=>{e(...i),s("WARN",o(i));},console.error=(...i)=>{r(...i),s("ERROR",o(i));},console.__evalkit=true;}var sn=_(()=>{});function cn(n,t,e){let r=api.trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":e.message,"error.stack":e.stack??"","log.level":"ERROR","log.message":`${t}: ${e.message}`}),r.recordException(e),r.setStatus({code:api.SpanStatusCode.ERROR,message:e.message});else {let o=n.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${e.message}`,"error.message":e.message,"error.stack":e.stack??""}},api.context.active());o.recordException(e),o.setStatus({code:api.SpanStatusCode.ERROR,message:e.message}),o.end();}}function ln(n){typeof process>"u"||(process.on("unhandledRejection",t=>{let e=t instanceof Error?t:new Error(String(t));cn(n,"error.unhandled_rejection",e);}),process.on("uncaughtException",t=>{cn(n,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var pn=_(()=>{});function wo(n){let t=Ft("mongoose");t&&Ct(n,t);}function Oo(n){let t=Ft("axios");t&&nt(n,t.default??t);}async function To(n){try{let e=w()("pg"),r=e.Client??e.default?.Client;if(r){rt(n,r);return}}catch{}try{let t=await S("pg"),e=t.Client??t.default?.Client;e&&rt(n,e);}catch{}}async function Ao(n){try{let t=w(),e=t("mysql2"),r=e.Connection??e.default?.Connection??t("mysql2/lib/connection");if(r){ot(n,r);return}}catch{}try{let t=await S("mysql2"),e=t.Connection??t.default?.Connection;e&&ot(n,e);}catch{}}async function Io(n){try{let e=w()("ioredis"),r=e.default??e.Redis??e;if(r?.prototype){et(n,r);return}}catch{}try{let t=await S("ioredis"),e=t.default??t.Redis??t;e?.prototype&&et(n,e);}catch{}}async function Ko(n){try{let e=w()("openai"),o=(e.default??e.OpenAI??e)?.Chat?.Completions?.prototype;if(o){j(n,o);return}}catch{}try{let t=await S("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&j(n,r);}catch{}}async function Po(n){try{let e=w()("@anthropic-ai/sdk"),o=(e.default??e.Anthropic??e)?.Messages?.prototype;if(o){$(n,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&$(n,r);}catch{}}async function Mo(n){try{let e=w()("@aws-sdk/client-bedrock-runtime"),o=(e.BedrockRuntimeClient??e.default?.BedrockRuntimeClient)?.prototype;if(o){st(n,o);return}}catch{}try{let t=await S("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&st(n,r);}catch{}}async function qo(n){try{let e=w()("@anthropic-ai/sdk"),o=(e.AnthropicVertex??e.default?.AnthropicVertex)?.Messages?.prototype;if(o){pt(n,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&pt(n,r);}catch{}}async function No(n){try{let e=w()("@google-cloud/vertexai"),o=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o){ut(n,o);return}}catch{}try{let t=await S("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ut(n,r);}catch{}}async function jo(n){try{let e=w()("cohere-ai"),o=(e.CohereClient??e.default?.CohereClient??e.default)?.prototype;if(o){at(n,o);return}}catch{}try{let t=await S("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&at(n,r);}catch{}}async function $o(n){try{let e=w()("@google/generative-ai"),o=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o){it(n,o);return}}catch{}try{let t=await S("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&it(n,r);}catch{}}async function Go(n){try{let e=w()("@google/genai"),r=e.Models??e.default?.Models;if(r?.prototype){lt(n,r.prototype);return}}catch{}try{let t=await S("@google/genai"),e=t.Models??t.default?.Models;e?.prototype&&lt(n,e.prototype);}catch{}}async function Bo(n){try{let e=w()("groq-sdk"),o=(e.default??e.Groq??e)?.Chat?.Completions?.prototype;if(o){j(n,o,void 0,"groq");return}}catch{}try{let t=await S("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&j(n,r,void 0,"groq");}catch{}}async function Lo(n){try{let{patchLangChain:t}=await Promise.resolve().then(()=>(zt(),qe));await t(n);}catch{}}function un(n){try{tn(n);}catch{}try{Ze(n);}catch{}en(),on(n),ln(n),wo(n),Oo(n),Promise.all([Ko(n),Po(n),Mo(n),qo(n),No(n),jo(n),$o(n),Go(n),Bo(n),Lo(n),To(n),Ao(n),Io(n)]).catch(()=>{});}var dn=_(()=>{Dt();Kt();_t();Lt();Wt();Ht();Ut();Jt();Mt();Gt();Bt();qt();$t();nn();sn();pn();});var Zt={};Yt(Zt,{EvalKitClient:()=>exports.EvalKitClient,EvalKitInterceptor:()=>exports.EvalKitInterceptor,TraceMethod:()=>Gn,Traced:()=>Bn,createNestjsInterceptor:()=>Pn,currentTraceId:()=>Hn,default:()=>exports.default,evaluate:()=>L,expressMiddleware:()=>On,fastifyPlugin:()=>Tn,flush:()=>qn,generateScenarios:()=>Un,hapiPlugin:()=>Kn,honoMiddleware:()=>In,init:()=>mn,koaMiddleware:()=>An,langchainHandler:()=>kn,patchAnthropicClient:()=>fn,patchAnthropicVertexClient:()=>hn,patchAxiosClient:()=>En,patchBedrockClient:()=>yn,patchCohereClient:()=>xn,patchGoogleAIModel:()=>_n,patchGoogleGenAIModels:()=>Cn,patchMongooseClient:()=>Rn,patchMysql2Client:()=>wn,patchOpenAIClient:()=>gn,patchPgClient:()=>bn,patchRedisClient:()=>Sn,patchVertexGenerativeModel:()=>vn,simulateUser:()=>Vn,startHttpTrace:()=>Nn,startSpan:()=>jn,startTrace:()=>Mn,traceFunction:()=>$n,withTrace:()=>Ln});function k(){if(!B)throw new Error("[evalkit] call evalkit.init() before using the SDK");return B}function mn(n){return B&&B.destroy(),B=new exports.EvalKitClient(n),un(B),B}function gn(n,t){j(k(),n.chat.completions,t);}function fn(n,t){$(k(),n.messages,t);}function yn(n){st(k(),n);}function hn(n){pt(k(),n.messages);}function vn(n){ut(k(),n);}function xn(n){at(k(),n);}function _n(n){it(k(),n);}function Cn(n){lt(k(),n);}function kn(){return Et(k())}function Rn(n){Ct(k(),n);}function Sn(n){et(k(),n);}function En(n){nt(k(),n);}function bn(n){rt(k(),n);}function wn(n){ot(k(),n);}function On(n){return Le(k(),n)}function Tn(n){return $e(k(),n,Vo)}function An(n){return Ve(k(),n)}function In(n){return De(k(),n)}function Kn(n){return We(k(),n)}function Pn(){return new exports.EvalKitInterceptor(k())}function Mn(n,t){return k().startTrace(n,t)}async function qn(){return k().flush()}function Nn(n,t,e){return k().startHttpTrace(n,t,e)}function jn(n,t,e){return k().startSpan(n,t,e)}function $n(n,t,e,r=true){return k().traceFunction(n,t,e,r)}function Gn(n){return (t,e,r)=>{let o=r.value,s=n??`${t.constructor?.name??"unknown"}.${String(e)}`,i;return r.value=function(...c){return i||(i=k().traceFunction(s,o)),i.apply(this,c)},r}}function Bn(n){return t=>{let e=t.prototype,r=n?.prefix??t.name;for(let o of Object.getOwnPropertyNames(e)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(e,o);if(!s||typeof s.value!="function")continue;let i=s.value,c=`${r}.${o}`,a=null;Object.defineProperty(e,o,{...s,value:function(...l){return a||(a=k().traceFunction(c,i)),a.apply(this,l)}});}return t}}function Ln(n,t){return api.context.with(n,t)}function Hn(){let n=api.trace.getActiveSpan();return n?.isRecording()?n.spanContext().traceId:void 0}function Un(n){return ne(k(),n)}function Vn(n){return re(k(),n)}function Vo(n){return K(n)}var B;exports.default=void 0;var te=_(()=>{gt();oe();At();F();Kt();_t();Mt();qt();$t();Gt();Bt();Lt();Ht();Ut();Jt();zt();Wt();Ge();He();Je();ze();Xe();Xt();dn();At();Xt();gt();B=null;exports.default={init:mn,evaluate:L,generateScenarios:Un,simulateUser:Vn,patchOpenAIClient:gn,patchAnthropicClient:fn,patchBedrockClient:yn,patchAnthropicVertexClient:hn,patchVertexGenerativeModel:vn,patchCohereClient:xn,patchGoogleAIModel:_n,patchGoogleGenAIModels:Cn,langchainHandler:kn,patchMongooseClient:Rn,patchRedisClient:Sn,patchAxiosClient:En,patchPgClient:bn,patchMysql2Client:wn,expressMiddleware:On,fastifyPlugin:Tn,koaMiddleware:An,honoMiddleware:In,hapiPlugin:Kn,createNestjsInterceptor:Pn,startTrace:Mn,startHttpTrace:Nn,startSpan:jn,traceFunction:$n,TraceMethod:Gn,Traced:Bn,withTrace:Ln,currentTraceId:Hn,flush:qn};});te();exports.TraceMethod=Gn;exports.Traced=Bn;exports.createNestjsInterceptor=Pn;exports.currentTraceId=Hn;exports.evaluate=L;exports.expressMiddleware=On;exports.fastifyPlugin=Tn;exports.flush=qn;exports.generateScenarios=Un;exports.hapiPlugin=Kn;exports.honoMiddleware=In;exports.init=mn;exports.koaMiddleware=An;exports.langchainHandler=kn;exports.patchAnthropicClient=fn;exports.patchAnthropicVertexClient=hn;exports.patchAxiosClient=En;exports.patchBedrockClient=yn;exports.patchCohereClient=xn;exports.patchGoogleAIModel=_n;exports.patchGoogleGenAIModels=Cn;exports.patchMongooseClient=Rn;exports.patchMysql2Client=wn;exports.patchOpenAIClient=gn;exports.patchPgClient=bn;exports.patchRedisClient=Sn;exports.patchVertexGenerativeModel=vn;exports.simulateUser=Vn;exports.startHttpTrace=Nn;exports.startSpan=jn;exports.startTrace=Mn;exports.traceFunction=$n;exports.withTrace=Ln;
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 wt=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var Yn=Object.getOwnPropertyNames;var Zn=Object.prototype.hasOwnProperty;var I=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var _=(n,t)=>()=>(n&&(t=n(n=0)),t);var Yt=(n,t)=>{for(var e in t)wt(n,e,{get:t[e],enumerable:true});},tr=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Yn(t))!Zn.call(n,o)&&o!==e&&wt(n,o,{get:()=>t[o],enumerable:!(r=Qn(t,o))||r.enumerable});return n};var er=n=>tr(wt({},"__esModule",{value:true}),n);function nr(n,t){if(t.length===0)return {score:1,lcsLength:0};let e=n.length,r=t.length,o=Array.from({length:e+1},()=>new Array(r+1).fill(0));for(let i=1;i<=e;i++)for(let c=1;c<=r;c++)n[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[e][r];return {score:s/t.length,lcsLength:s}}function rr(n,t){if(n.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(n.length===0||t.length===0)return {score:0,precision:0,recall:0};let e=new Set(n),r=new Set(t),o=new Set([...e].filter(a=>r.has(a))),s=o.size/e.size,i=o.size/r.size;return {score:s+i===0?0:2*s*i/(s+i),precision:s,recall:i}}function or(n,t){if(t.length===0)return {score:1,called:0,total:0};let e=new Set(n),r=t.filter(o=>e.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function sr(n,t){if(t.length===0)return {score:1,matched:[],missing:[]};let e=n.toLowerCase(),r=t.filter(s=>e.includes(s.toLowerCase())),o=t.filter(s=>!e.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function ar(n,t){let e={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=n.toLowerCase(),i=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));e.requiredTerms=i,r.push(i);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(n);e.hasCitations=t.hasCitations?s:!s,r.push(e.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(n.match(s)??[]).length===t.slideCount;e.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:e}:{score:r.filter(Boolean).length/r.length,checks:e}}function ir(n,t){if(n.length===0)return {score:1,relevant:0,total:0};let e=new Set(t),r=n.filter(o=>e.has(o)).length;return {score:r/n.length,relevant:r,total:n.length}}function cr(n,t){if(t.length===0)return {score:1,covered:0,total:0};let e=new Set(n),r=t.filter(o=>e.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function H(n){let t=new Set(n.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),e=(n.toolCalls??[]).map(a=>a.name),r=n.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let a=nr(e,r);o.tool_trajectory=a.score,s.tool_trajectory={lcsLength:a.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(e.length>0||r.length>0)){let a=rr(e,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=or(e,r);o.tool_correctness=a.score,s.tool_correctness={called:a.called,total:a.total};}let i=n.constraints?.requiredTerms??[];if(t.has("response_match")&&i.length>0){let a=sr(n.output,i);o.response_match=a.score,s.response_match={matched:a.matched,missing:a.missing};}if(t.has("constraint_compliance")&&n.constraints){let a=ar(n.output,n.constraints);o.constraint_compliance=a.score,s.constraint_compliance={checks:a.checks};}if(t.has("contextual_precision")&&n.retrievedContext!==void 0&&n.expectedContext!==void 0){let a=ir(n.retrievedContext,n.expectedContext);o.contextual_precision=a.score,s.contextual_precision={relevant:a.relevant,total:a.total};}if(t.has("contextual_recall")&&n.retrievedContext!==void 0&&n.expectedContext!==void 0){let a=cr(n.retrievedContext,n.expectedContext);o.contextual_recall=a.score,s.contextual_recall={covered:a.covered,total:a.total};}let c={scores:o,details:s};try{let a=(te(),er(Zt)),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}=a.startSpan("evaluation",l);d("OK");}catch{}return c}var ft=_(()=>{});function yt(n,t,e){if(!n||!t||!U.has(n))return;let r=Q.get(n)??[];r.push({name:t,args:e}),Q.set(n,r);}var U,Q,Y=_(()=>{U=new Map,Q=new Map;});function ht(n){return crypto.randomBytes(n).toString("hex")}function ee(n){return typeof n=="function"?{name:n.name||"tool"}:typeof n=="string"||n&&typeof n=="object"?n:String(n)}async function ne(n,t){let e=(t.apiUrl??process.env.EVALKIT_API_URL??n.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(ee)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(ee)),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);let o=await fetch(e+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":n.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 ur(n){let t=n.turns??n.messages??[],e=[];for(let r of t)typeof r=="string"?e.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&e.push(String(r.content));return e.length===0&&n.starting_prompt&&e.push(String(n.starting_prompt)),e}function dr(n,t,e,r){let o=Array.from(new Set([...n.constraints?.required_terms??[],...n.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),n.constraints?.has_citations!==void 0&&(s.hasCitations=n.constraints.has_citations);try{return H({output:t,toolCalls:e,expectedTools:n.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function mr(n,t,e,r){let o=e.name??"scenario",s=e.scenario_id??"scn_"+ht(6),i="sess_"+ht(6),c=ur(e).slice(0,r.maxTurns),a={...e.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:l,end:d,ctx:p}=n.startTrace(`scenario:${o}`,{"evalkit.session_id":i});U.set(l,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let u="OK",m,g=[],f=[],y=0,h={};try{await api.context.with(p,async()=>{for(let R=0;R<c.length;R++){let A={message:c[R],sessionId:i,state:a,turn:R+1},O=await t.entrypoint(A);O&&typeof O=="object"&&"text"in O?(g.push(O.text),O.toolCalls&&f.push(...O.toolCalls)):g.push(String(O)),y++;}let k=f.length?f:Q.get(l)??[];h=dr(e,g.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 re(n,t){let e="sim_"+ht(8),r="run_"+ht(8),o=t.maxTurns??12,s=[],i=[];for(let c of t.scenarios){let{result:a,traceId:l}=await mr(n,t,c,{simulationId:e,runId:r,maxTurns:o});s.push(a),i.push(l);}await n.flush();for(let c of i)U.delete(c),Q.delete(c);return {simulationId:e,runId:r,results:s}}var oe=_(()=>{Y();ft();});var M,se=_(()=>{(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.FAILED=1]="FAILED";})(M||(M={}));});var ae=_(()=>{se();});function Ot(n){return n[0]*1e3+n[1]/1e6}function gr(n){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[n]??"INTERNAL"}function fr(n){return n===1?"OK":n===2?"ERROR":"UNSET"}function yr(n){let t={};for(let[e,r]of Object.entries(n))e.startsWith("evalkit.")||e==="gen_ai.system"||r!=null&&(t[e]=r);return t}function ce(n){return new Promise(t=>setTimeout(t,n))}var ie,vt,le=_(()=>{ae();Y();ie=3,vt=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,e){if(this.disabled){e({code:M.FAILED});return}let r=t.map(s=>this.toEnvelope(s)),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>=ie?(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}/${ie})`)):console.error(`[evalkit] export failed ${s.status}: ${i}`),e({code:M.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}`);}e({code:M.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),e({code:M.FAILED});});}async fetchWithRetry(t,e,r=3){let o=[200,600,1800],s;for(let i=0;i<=r;i++)try{let c=await fetch(t,e);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 ce(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 ce(o[i]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let e=t.spanContext(),r=t.attributes,o=Ot(t.startTime),s=Ot(t.endTime),i=t.events.map(l=>({name:l.name,timestamp:new Date(Ot(l.time)).toISOString(),attributes:l.attributes})),c={traceId:e.traceId,spanId:e.spanId,parentSpanId:t.parentSpanId,spanKind:gr(t.kind),spanType:r["evalkit.span_type"]??"log",status:fr(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:yr(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=U.get(e.traceId);return a&&(c.isSimulation=true,c.simulationId=a.simulationId,c.scenarioId=a.scenarioId,c.runId=a.runId),c}};});function V(n,t=kr){let e;try{e=JSON.stringify(n);}catch{}if(e===void 0)try{e=String(n);}catch{e="<unserializable>";}return e.length>t?e.slice(0,t)+"\u2026":e}var Cr,kr;exports.EvalKitClient=void 0;var At=_(()=>{le();Cr="0.1.26",kr=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 e=new vt({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(e,{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":Cr};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,e){let r=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...e}},api.context.active()),o=api.trace.setSpan(api.context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(i="OK")=>{r.setStatus({code:i==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,e,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":e.method,"http.url":e.url,...e.headers?{"http.request.headers":JSON.stringify(e.headers)}:{},...e.requestBody!==void 0?{"http.request.body":JSON.stringify(e.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",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"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}startSpan(t,e,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...e}},r??api.context.active());return {ctx:api.trace.setSpan(api.context.active(),o),end:(i="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:i==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,e,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:l}=s.startSpan(t,c),d;try{d=api.context.with(a,()=>e.apply(this,i));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(a)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"function.result":V(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(a)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"function.result":V(d)}:void 0),d)}}traceTool(t,e,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:l}=s.startSpan(t,c),d;try{d=api.context.with(a,()=>e.apply(this,i));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(a)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"tool.result":V(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(a)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"tool.result":V(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function K(n){if(!n)return api.context.active();let t=n.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 D=_(()=>{});function xt(n){return n.length<=ue?n:n.slice(0,ue)+"\u2026"}function _t(n){if(typeof n=="string")return n;try{return JSON.stringify(n??{})}catch{return String(n)}}function Or(n){try{let t=JSON.parse(n);return t&&typeof t=="object"?t:void 0}catch{return}}function de(n,t){let e=[];try{for(let r of n?.choices??[])for(let o of r?.message?.tool_calls??[]){let s=o?.function?.name??"";s&&e.push({name:s,argsJson:xt(_t(o?.function?.arguments??"")),id:o?.id??""});}}catch{}return e}function me(n,t){let e=[];try{for(let r of n??[]){if(r?.type!=="tool_use")continue;let o=r?.name??"";o&&e.push({name:o,argsJson:xt(_t(r?.input??{})),id:r?.id??""});}}catch{}return e}function ge(n,t){let e=[];try{let r=[];if(Array.isArray(n?.functionCalls))r.push(...n.functionCalls);else for(let s of n?.candidates??[])for(let i of s?.content?.parts??[])i?.functionCall?.name&&r.push(i.functionCall);let o=0;for(let s of r){let i=s?.name??"";i&&e.push({name:i,argsJson:xt(_t(s?.args??{})),id:s?.id??`call_${o++}`});}}catch{}return e}function fe(n,t){let e=[];try{for(let r of n?.generations??[])for(let o of r??[])for(let s of o?.message?.tool_calls??[]){let i=s?.name??"";i&&e.push({name:i,argsJson:xt(_t(s?.args??{})),id:s?.id??""});}}catch{}return e}function j(n,t,e){if(!e.length)return;let r=t.spanContext().traceId,o=api.trace.setSpan(api.context.active(),t);for(let s of e){if(!s.name)continue;let i={"gen_ai.tool.name":s.name,"gen_ai.tool.call.id":s.id,"gen_ai.tool.call.arguments":s.argsJson};s.result!=null&&(i["gen_ai.tool.call.result"]=s.result);try{t.addEvent("gen_ai.tool.call",i);}catch{}try{yt(r,s.name,Or(s.argsJson));}catch{}if(s.result!=null)try{n.tracer.startSpan(s.name,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...i,"tool.name":s.name,"tool.arguments":s.argsJson,"tool.result":s.result}},o).end();}catch{}}}var ue,Z=_(()=>{Y();ue=32768;});function Ir(n,t){let e="",r=0,o=0,s=false;function i(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:api.SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":e,"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(n,{get(c,a,l){if(a===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,g=m.choices?.[0]?.delta?.content;g&&(e+=g),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return u.done&&i(),u}catch(u){throw i(u instanceof Error?u:new Error(String(u))),u}},return(){return i(),p.return?.()??Promise.resolve({done:true,value:void 0})},throw(u){return i(u instanceof Error?u:new Error(String(u))),p.throw?.(u)??Promise.reject(u)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,a,l);return typeof d=="function"?d.bind(c):d}})}function B(n,t,e,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let i=s[0],c=e??api.context.active(),a=n.tracer.startSpan("chat.completions.create",{kind:api.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":Kr(i.messages??[])}},c),l=api.trace.setSpan(c,a);if(i?.stream){let m;try{m=await api.context.with(l,()=>o.apply(this,s));}catch(g){let f=g instanceof Error?g:new Error(String(g));throw a.recordException(f),a.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),a.end(),g}return Ir(m,a)}let d;try{d=await api.context.with(l,()=>o.apply(this,s));}catch(m){let g=m instanceof Error?m:new Error(String(m));throw a.recordException(g),a.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),a.end(),m}let p=d.choices?.[0],u=p?.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":p?.finish_reason?[p.finish_reason]:[],"evalkit.completion":u}),j(n,a,de(d)),a.setStatus({code:api.SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function Kr(n){return n.map(t=>`${t.role}: ${t.content??""}`).join(`
3
+ `)}var Kt=_(()=>{Z();});function qr(n,t){let e="",r=0,o=0,s=false;function i(a){let l=a?.type;if(l==="content_block_delta"){let d=a.delta;d?.type==="text_delta"&&d.text&&(e+=d.text);}else l==="message_start"?r=a.message?.usage?.input_tokens??0:l==="message_delta"&&(o=a.usage?.output_tokens??0);}function c(a){s||(s=true,a?(t.recordException(a),t.setStatus({code:api.SpanStatusCode.ERROR,message:a.message})):(t.setAttributes({"evalkit.completion":e,"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(n,{get(a,l,d){if(l===Symbol.asyncIterator)return function(){let u=a[Symbol.asyncIterator]();return {async next(){try{let m=await u.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(),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(a,l,d);return typeof p=="function"?p.bind(a):p}})}function $(n,t,e){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],i=e??api.context.active(),c=Nr(s.system,s.messages??[]),a=n.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}},i),l=api.trace.setSpan(i,a);if(s?.stream){let u;try{u=await api.context.with(l,()=>r.apply(this,o));}catch(m){let g=m instanceof Error?m:new Error(String(m));throw a.recordException(g),a.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),a.end(),m}return qr(u,a)}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 a.recordException(m),a.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),a.end(),u}let p=d.content.filter(u=>u.type==="text").map(u=>u.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":p}),j(n,a,me(d.content)),a.setStatus({code:api.SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function Nr(n,t){let e=[];return n&&e.push(`system: ${n}`),e.push(...t.map(r=>`${r.role}: ${r.content}`)),e.join(`
4
+ `)}var Ct=_(()=>{Z();});function kt(n,t){let e=t.Query?.prototype;if(!e||e.__evalkit)return;let r=e.exec;e.exec=async function(){if(!api.trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",i=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=n.tracer.startSpan(`${s} ${i}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":i,"db.query":JSON.stringify(this._conditions??{})}},api.context.active());try{let a=await r.call(this);return c.setStatus({code:api.SpanStatusCode.OK}),c.end(),a}catch(a){let l=a instanceof Error?a:new Error(String(a));throw c.recordException(l),c.setStatus({code:api.SpanStatusCode.ERROR,message:l.message}),c.end(),a}},e.__evalkit=true;}var Mt=_(()=>{});function nt(n,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(!api.trace.getActiveSpan()?.isRecording())return s.call(this,i,...c);let l=Array.isArray(i)?i[0]:i?.name??i?.args?.[0]??"cmd",d=(typeof l=="string"?l:String(l)).toUpperCase(),p=n.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,i,...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 qt=_(()=>{});function T(n){let t={};for(let[e,r]of Object.entries(n))Ur.test(e)||r!==void 0&&(t[e]=Array.isArray(r)?r.join(", "):String(r));return t}var Ur,Nt=_(()=>{Ur=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var z,jt=_(()=>{z=new Map;});function rt(n,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let e=t.create.bind(t);t.create=function(...r){let o=e(...r);return rt(n,o),o};}t.interceptors.request.use(e=>{let r=(e.baseURL?e.baseURL.replace(/\/$/,""):"")+(e.url??"");if(Dr.some(d=>d.test(r))||!api.trace.getActiveSpan()?.isRecording())return e;let s=e.url??"";try{s=new URL(r,e.baseURL??"http://localhost").pathname;}catch{}let i=(e.method??"get").toUpperCase(),c=T(e.headers??{}),a=n.tracer.startSpan(`${i} ${s}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":i,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...e.data!==void 0?{"http.request.body":typeof e.data=="string"?e.data.slice(0,n.options.maxBodyBytes):JSON.stringify(e.data).slice(0,n.options.maxBodyBytes)}:{}}},api.context.active()),l=a.spanContext();return e.headers=e.headers??{},e.headers.traceparent=`00-${l.traceId}-${l.spanId}-01`,e.headers["x-evalkit-span-id"]=l.spanId,z.set(l.spanId,a),e.__evalkitSpan=a,e.__evalkitSpanId=l.spanId,e}),t.interceptors.response.use(e=>{let r=e.config?.__evalkitSpan;if(e.config?.__evalkitSpanId&&z.delete(e.config.__evalkitSpanId),r){let o=T(e.headers??{}),s=e.data,i;s!=null&&(i=(typeof s=="string"?s:JSON.stringify(s)).slice(0,n.options.maxBodyBytes)),r.setAttributes({"http.status_code":e.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...i!==void 0?{"http.response.body":i}:{}}),r.setStatus({code:api.SpanStatusCode.OK}),r.end();}return e},e=>{let r=e.config?.__evalkitSpan;if(e.config?.__evalkitSpanId&&z.delete(e.config.__evalkitSpanId),r){let o=e.response?.status??0,s=T(e.response?.headers??{}),i=e.response?.data,c;i!=null&&(c=(typeof i=="string"?i:JSON.stringify(i)).slice(0,n.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":e.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(e instanceof Error?e:new Error(String(e))),r.setStatus({code:api.SpanStatusCode.ERROR,message:e.message}),r.end();}throw e});}}var Dr,Bt=_(()=>{Nt();jt();Dr=[/\/v1\/ingest/,/\/health(z)?$/];});function ot(n,t){let e=t?.prototype??Object.getPrototypeOf(t);if(!e||e.__evalkit_pg)return;let r=e.query;typeof r=="function"&&(e.query=function(...o){if(!api.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,l=i.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",p=i.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",u=p?`${l} ${p}`:`pg ${l}`,m=n.tracer.startSpan(u,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":l,"db.statement":i.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...p?{"db.sql.table":p}:{}}},api.context.active()),g=o[o.length-1];if(typeof g=="function"){let y=g,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})},e.__evalkit_pg=true);}var $t=_(()=>{});function st(n,t){let e=t?.prototype??Object.getPrototypeOf(t);if(!(!e||e.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=e[r];typeof o=="function"&&(e[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",a=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}`,g=n.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),...a!==void 0?{"db.params":JSON.stringify(a).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},api.context.active()),f=s[s.length-1];if(typeof f=="function"){let h=f,v=s.slice(0,-1).concat([(k,R,A)=>{k?(g.recordException(k),g.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),g.setAttribute("error.message",k.message)):(g.setAttribute("db.rows_affected",Array.isArray(R)?R.length:R?.affectedRows??0),g.setStatus({code:api.SpanStatusCode.OK})),g.end(),h(k,R,A);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(g.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),g.setStatus({code:api.SpanStatusCode.OK}),g.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw g.recordException(v),g.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),g.setAttribute("error.message",v.message),g.end(),h}):(g.end(),y)});}e.__evalkit_mysql2=true;}}var Gt=_(()=>{});function no(n){if(!n||typeof n!="object")return false;let t=n.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function at(n,t,e){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!no(s))return r.apply(this,o);let i=s.input,c=i?.modelId??"unknown",a=c.split(".")[0]??"bedrock",l=i?.system?.map(v=>v.text).join(`
5
+ `)??"",d=i?.messages?.map(v=>`${v.role}: ${v.content.map(k=>k.text??"").join("")}`)??[],p=[l?`system: ${l}`:"",...d].filter(Boolean).join(`
6
+ `),u=i?.inferenceConfig??{},m=api.context.active(),g=n.tracer.startSpan("converse",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":a,"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),f=api.trace.setSpan(m,g),y;try{y=await api.context.with(f,()=>r.apply(this,o));}catch(v){let k=v instanceof Error?v:new Error(String(v));throw g.recordException(k),g.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),g.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return g.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}),g.setStatus({code:api.SpanStatusCode.OK}),g.end(),y},t.send.__evalkit=true;}var Lt=_(()=>{});function it(n,t,e){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(u=>`${u.role}: ${u.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...i,`user: ${s?.message??""}`].filter(Boolean).join(`
7
+ `),a=api.context.active(),l=n.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}},a),d=api.trace.setSpan(a,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 Ht=_(()=>{});function ct(n,t,e){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 f=i,y=f?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=f?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(k=>k.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
+ `);}let a=api.context.active(),l=n.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}},a),d=api.trace.setSpan(a,l),p;try{p=await api.context.with(d,()=>r.apply(this,s));}catch(f){let y=f instanceof Error?f:new Error(String(f));throw l.recordException(y),l.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),l.end(),f}let u=p?.response,m=u?.candidates?.[0],g=m?.content?.parts?.map(f=>f.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":g}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.generateContent.__evalkit=true;}var Ut=_(()=>{});function we(n){return n?.text??""}function io(n){if(typeof n=="string")return n;if(Array.isArray(n))return n.map(t=>{if(typeof t=="string")return t;let e=t,r=e.role??"user",o=(e.parts??[]).map(we).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
+ `);if(n&&typeof n=="object"){let t=n;if(t.parts)return (t.parts??[]).map(we).join("")}return n!=null?String(n):""}function co(n){let t=n?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(e=>e?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function Oe(n){let t=co(n?.config),e=io(n?.contents);return [t?`system: ${t}`:"",e].filter(Boolean).join(`
10
+ `)}function Te(n){let t=[];for(let e of n?.candidates??[])for(let r of e.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):n?.text??""}function Ae(n,t,e){Ft&&j(Ft,t,ge(n));}function pt(n,t,e){if(Ft=n,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=api.context.active(),a=n.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"evalkit.prompt":Oe(s)}},c),l=api.trace.setSpan(c,a),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 a.recordException(u),a.setStatus({code:api.SpanStatusCode.ERROR,message:u.message}),a.end(),p}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":Te(d)});try{Ae(d,a,a.spanContext().traceId);}catch{}return a.setStatus({code:api.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=api.context.active(),a=n.tracer.startSpan("generateContentStream",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"gen_ai.streaming":true,"evalkit.prompt":Oe(s)}},c),l=api.trace.setSpan(c,a),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 a.recordException(m),a.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),a.end(),u}async function*p(){let u=[],m=0,g=0;try{for await(let f of d){try{let y=Te(f);y&&u.push(y),f?.usageMetadata&&(m=f.usageMetadata.promptTokenCount??m,g=f.usageMetadata.candidatesTokenCount??g),Ae(f,a,a.spanContext().traceId);}catch{}yield f;}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":g,"evalkit.completion":u.join("")}),a.setStatus({code:api.SpanStatusCode.OK});}catch(f){let y=f instanceof Error?f:new Error(String(f));throw a.recordException(y),a.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),f}finally{a.end();}}return p()},t.generateContentStream.__evalkit=true;}}var Ft,Vt=_(()=>{Z();Ft=null;});function Jt(n){if(typeof I>"u")return null;let t=I.cache;if(!t)return null;let e=Object.keys(t).find(r=>{let o=r.split("/node_modules/");return o.length>1&&o[o.length-1].startsWith(n+"/")});return e?t[e]?.exports??null:null}function w(){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 S,Dt=_(()=>{S=new Function("s","return import(s)");});var Ne={};Yt(Ne,{langchainCallbackHandler:()=>Et,langchainHandlerMethods:()=>qe,patchLangChain:()=>ho});function P(n,t=mo){let e;try{e=typeof n=="string"?n:JSON.stringify(n);}catch{e=String(n);}return e==null?"":e.length>t?e.slice(0,t)+"\u2026":e}function Pe(n){let t=n?.id;if(Array.isArray(t)){for(let e of ["openai","anthropic","google","vertexai","cohere","mistral","bedrock","ollama","groq"])if(t.includes(e))return e==="vertexai"?"vertex-ai":e;return t[t.length-1]}}function Me(n,t){let e=t?.invocation_params??{};for(let o of ["model","model_name","modelName","model_id","deployment_name"])if(e[o])return String(e[o]);let r=n?.kwargs??{};for(let o of ["model","model_name","modelName","model_id"])if(r[o])return String(r[o]);return "unknown"}function go(n){try{let e=((Array.isArray(n?.[0])?n[0]:n)??[]).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(e.join(`
11
+ `))}catch{return P(n)}}function fo(n){try{let t=[];for(let e of n?.generations??[])for(let r of e??[])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 yo(n){let t=0,e=0;try{let r=n?.llmOutput?.tokenUsage??n?.llmOutput?.usage??{};if(t=r.promptTokens??r.prompt_tokens??r.input_tokens??0,e=r.completionTokens??r.completion_tokens??r.output_tokens??0,!t&&!e)for(let o of n?.generations??[])for(let s of o??[]){let i=s?.message?.usage_metadata;i&&(t=i.input_tokens??t,e=i.output_tokens??e);}}catch{}return {tin:t||0,tout:e||0}}function qe(n){let t=new Map;function e(o,s,i,c,a){try{let l=s?t.get(s):void 0,d=l?l.ctx:api.context.active(),p=n.tracer.startSpan(c,{kind:i==="llm_call"?api.SpanKind.CLIENT:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":i,"evalkit.framework":"langchain",...a}},d);t.set(o,{span:p,ctx:api.trace.setSpan(d,p)});}catch{}}function r(o,s,i,c){try{let a=t.get(o);if(!a)return;t.delete(o),i&&a.span.setAttributes(i),a.span.setStatus({code:s==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR,message:c}),a.span.end();}catch{}}return {handleChainStart(o,s,i,c,a,l,d,p){let u=p??o?.id?.[o.id.length-1]??"chain";e(i,c,"function_call",String(u),a?.length?{"langchain.tags":a.join(",")}:{});},handleChainEnd(o,s){r(s,"OK");},handleChainError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleLLMStart(o,s,i,c,a){let l=Me(o,a);e(i,c,"llm_call","llm.generate",{"gen_ai.request.model":l,"gen_ai.system":Pe(o)??"","evalkit.prompt":P((s??[]).join(`
13
+ `))});},handleChatModelStart(o,s,i,c,a){let l=Me(o,a);e(i,c,"llm_call","chat.generate",{"gen_ai.request.model":l,"gen_ai.system":Pe(o)??"","evalkit.prompt":go(s)});},handleLLMEnd(o,s){let{tin:i,tout:c}=yo(o),a=t.get(s);try{a&&j(n,a.span,fe(o));}catch{}r(s,"OK",{"evalkit.completion":fo(o),"gen_ai.usage.input_tokens":i,"gen_ai.usage.output_tokens":c,"gen_ai.usage.total_tokens":i+c});},handleLLMError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleToolStart(o,s,i,c,a,l,d){let p=d??o?.id?.[o.id.length-1]??"tool",u=t.get(c??"");yt(u?.span.spanContext().traceId,String(p)),e(i,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,i,c){let a=o?.id?.[o.id.length-1]??"retriever";e(i,c,"db_query",String(a),{"retriever.query":P(s)});},handleRetrieverEnd(o,s){let i=Array.isArray(o)?o.length:0;r(s,"OK",{"retriever.document_count":i});},handleRetrieverError(o,s){r(s,"ERROR",void 0,String(o?.message??o));}}}async function Et(n){try{let e=(await S("@langchain/core/callbacks/base")).BaseCallbackHandler.fromMethods(qe(n));return e.name="evalkit",e.__evalkit=!0,e}catch{return null}}async function ho(n){let t=await Et(n);if(!t)return null;try{let r=(await S("@langchain/core/callbacks/manager")).CallbackManager;if(r&&typeof r.configure=="function"&&!r.__evalkitPatched){let o=r.configure.bind(r);r.configure=(...s)=>{let i=o(...s);try{i&&![...i.handlers??[],...i.inheritableHandlers??[]].some(l=>l?.__evalkit)&&typeof i.addHandler=="function"&&i.addHandler(t,!0);}catch{}return i},r.__evalkitPatched=!0;}}catch{}return t}var mo,zt=_(()=>{Y();Z();Dt();mo=4096;});function ut(n,t,e){$(n,t,e);}function dt(n,t,e){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("")}`)??[],l=[c?`system: ${c}`:"",...a].filter(Boolean).join(`
14
+ `),d=api.context.active(),p=n.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 g=m?.response,f=g?.candidates?.[0],y=f?.content?.parts?.map(h=>h.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":g?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":g?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":g?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":f?.finishReason?[f.finishReason]:[],"evalkit.completion":y}),p.setStatus({code:api.SpanStatusCode.OK}),p.end(),m},t.generateContent.__evalkit=true;}var Wt=_(()=>{Ct();});function $e(n,t={},e){function r(o,s,i){let c={...t,...s};o.addHook("onRequest",(a,l,d)=>{let p=a.routerPath??a.routeOptions?.url??a.url??"/",u=typeof c.name=="function"?c.name(a):c.name??`${String(a.method??"GET")} ${String(p)}`,m=a.headers?.traceparent,g=e?e(m):api.context.active(),{traceId:f,end:y,ctx:h}=api.context.with(g,()=>n.startHttpTrace(u,{method:String(a.method??"GET"),url:String(a.url??"/"),headers:a.headers,requestBody:void 0}));a._evalkitCtx=h,a._evalkitTraceId=f,a._evalkitEnd=y,a._evalkitEnded=false,api.context.with(h,d);}),o.addHook("preHandler",(a,l,d)=>{if(a._evalkitCtx&&a.body!==void 0){let p=api.trace.getActiveSpan();if(p?.isRecording())try{p.setAttribute("http.request.body",typeof a.body=="string"?a.body.slice(0,n.options.maxBodyBytes):JSON.stringify(a.body).slice(0,n.options.maxBodyBytes));}catch{}}api.context.with(a._evalkitCtx??api.context.active(),d);}),o.addHook("onSend",(a,l,d,p)=>{try{if(d!=null){let u=(typeof d=="string"?d:JSON.stringify(d)).slice(0,n.options.maxBodyBytes);a._evalkitRespBody=u;}}catch{}p(null,d);}),o.addHook("onResponse",(a,l,d)=>{if(typeof a._evalkitEnd=="function"&&!a._evalkitEnded){a._evalkitEnded=true;let p=l.statusCode??200;a._evalkitEnd(p>=400?"ERROR":"OK",{statusCode:p,body:a._evalkitRespBody});}d();}),o.addHook("onError",(a,l,d,p)=>{typeof a._evalkitEnd=="function"&&!a._evalkitEnded&&(a._evalkitEnded=true,a._evalkitEnd("ERROR",{statusCode:l.statusCode??500})),p();}),i();}return r[Symbol.for("skip-override")]=true,r}var Ge=_(()=>{});function He(n,t){return (e,r,o)=>{let s=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method)} ${String(e.route?.path??e.path??e.url)}`,i=K(e.headers?.traceparent),{end:c,ctx:a,traceId:l}=api.context.with(i,()=>n.startHttpTrace(s,{method:String(e.method??"GET"),url:String(e.originalUrl??e.url??"/"),headers:e.headers,requestBody:e.body}));e._evalkitCtx=a,e._evalkitTraceId=l;let d=api.trace.getSpan(a)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",l),r.setHeader?.("traceparent",`00-${l}-${d}-01`);let p=n.options.maxBodyBytes,u=[],m=0,g=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{}},f=r.write.bind(r),y=r.end;r.write=function(h,...v){return g(h),f(h,...v)},r.end=function(...h){g(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(a,()=>o());}}var Ue=_(()=>{D();});function Ve(n,t){return async(e,r)=>{let o=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method??"GET")} ${String(e.path??"/")}`,s=K(e.request?.headers?.traceparent),{end:i,ctx:c}=api.context.with(s,()=>n.startHttpTrace(o,{method:String(e.method??"GET"),url:String(e.href??e.url??"/"),headers:e.request?.headers,requestBody:e.request?.body}));e._evalkitCtx=c;try{await api.context.with(c,r);let a=e.status??200,l;try{let d=e.body;d!=null&&(l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,n.options.maxBodyBytes));}catch{}i(a>=400?"ERROR":"OK",{statusCode:a,body:l});}catch(a){throw i("ERROR",{statusCode:e.status??500}),a}}}var Je=_(()=>{D();});function ze(n,t){return async(e,r)=>{let o=e.req,s=o.url??"/",i=s;try{i=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(e):t?.name??`${String(o.method??"GET")} ${i}`,a=K(o.header("traceparent")),{end:l,ctx:d}=api.context.with(a,()=>n.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await api.context.with(d,r);let p=e.res?.status??200,u;try{if(e.res&&typeof e.res.clone=="function"){let m=await e.res.clone().text();m&&(u=m.slice(0,n.options.maxBodyBytes));}}catch{}l(p>=400?"ERROR":"OK",{statusCode:p,body:u});}catch(p){throw l("ERROR",{statusCode:500}),p}}}var We=_(()=>{D();});function Xe(n,t){return {name:"@evalkit/hapi",register(e){let r=new WeakMap;e.ext("onRequest",(o,s)=>{let i=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=K(o.headers?.traceparent),{end:a,ctx:l}=api.context.with(c,()=>n.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:l}),s.continue}),e.ext("onPreResponse",(o,s)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,a;try{let l=o.response?.source??o.response?.result;l!=null&&(a=(typeof l=="string"?l:JSON.stringify(l)).slice(0,n.options.maxBodyBytes));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:a}),r.delete(o);}return s.continue});}}}var Qe=_(()=>{D();});exports.EvalKitInterceptor=void 0;var Xt=_(()=>{exports.EvalKitInterceptor=class{constructor(t){this.client=t;}intercept(t,e){let r=t.switchToHttp?.();if(!r)return e.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}),l=this.client.options.maxBodyBytes,d=[],p=0,u=g=>{if(!(!g||p>=l))try{let f=Buffer.isBuffer(g)?g:typeof g=="string"?Buffer.from(g):null;f?.length&&(d.push(f),p+=f.length);}catch{}};if(s&&typeof s.write=="function"){let g=s.write.bind(s);s.write=function(f,...y){return u(f),g(f,...y)};}if(s&&typeof s.end=="function"){let g=s.end.bind(s);s.end=function(f,...y){return u(f),g(f,...y)};}let m=api.context.with(c,()=>e.handle());return {subscribe(g){return m.subscribe({next:f=>g.next?.(f),error:f=>{a("ERROR"),g.error?.(f);},complete:()=>{let f=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,l).toString("utf-8");}catch{}a(f>=400?"ERROR":"OK",{statusCode:f,body:y}),g.complete?.();}})},pipe(...g){return m.pipe(...g)}}}};});function Eo(n,t){let e=globalThis.Reflect;if(!e||typeof e.defineMetadata!="function")return;let r=typeof e.getOwnMetadataKeys=="function"?e.getOwnMetadataKeys:e.getMetadataKeys,o=typeof e.getOwnMetadata=="function"?e.getOwnMetadata:e.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(e,n)||[];}catch{return}for(let i of s)try{e.defineMetadata(i,o.call(e,i,n),t);}catch{}}function Ye(n,t,e){let r=e?.include??bo,o=e?.captureIO??true,s=new Set,i=0,c=[...t.getProviders(),...t.getControllers()];for(let a of c){let l=a?.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(So.has(u))continue;let m=Object.getOwnPropertyDescriptor(p,u);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let g=m.value,f=n.traceFunction(`${d}.${u}`,g,void 0,o);Eo(g,f);try{Object.defineProperty(f,"name",{value:u,configurable:!0});}catch{}try{Object.defineProperty(f,"length",{value:g.length,configurable:!0});}catch{}f.__evalkitTraced=true,Object.defineProperty(p,u,{...m,value:f}),i++;}}}return i}var So,bo,Ze=_(()=>{So=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),bo=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function Qt(n){return wo.some(t=>t.test(n))}function Oo(n,t,e){let r="",o="GET";if(typeof n=="string")r=n,o=(t?.method??"GET").toUpperCase();else if(n instanceof URL)r=n.href,o=(t?.method??"GET").toUpperCase();else {let i=n.hostname??n.host??"localhost",c=n.port?`:${n.port}`:"",a=n.path??"/";r=`${e}://${i}${c}${a}`,o=(n.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${e}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function nn(n){let t,e;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"),e=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:e,scheme:"https"}];for(let{mod:s,scheme:i}of r){let a=function(l,d,p){let u=typeof d=="function"?void 0:d,{url:m,method:g,pathname:f}=Oo(l,u,i);if(Qt(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=z.get(String(v));if(b){let x=T({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&b.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(s,l,d,p)}let k=T(h),R=n.tracer.startSpan(`${g} ${f}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":g,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},api.context.active()),A=c.call(s,l,d,p),O=R.spanContext();return A.setHeader("traceparent",`00-${O.traceId}-${O.spanId}-01`),A.on("response",b=>{let x=b.statusCode??0;R.setAttributes({"http.status_code":x,...b.headers?{"http.response.headers":JSON.stringify(T(b.headers))}:{}}),R.setStatus({code:x>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),R.end();}),A.on("error",b=>{R.setAttributes({"http.status_code":0,"error.message":b.message}),R.recordException(b instanceof Error?b:new Error(String(b))),R.setStatus({code:api.SpanStatusCode.ERROR,message:b.message}),R.end();}),A};let c=s.request;c.__evalkit||(a.__evalkit=true,Object.defineProperty(s,"request",{value:a,writable:true,configurable:true}));}}function rn(n){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 e=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return e.call(this,o,...s);let i=s[0],c=s[1],a=i.url??"/";if(Qt(a))return e.call(this,o,...s);if(api.trace.getActiveSpan()?.isRecording())return e.call(this,o,...s);let l=(i.method??"GET").toUpperCase(),d=a;try{d=new URL(a,"http://localhost").pathname;}catch{}let p=i.headers.traceparent,u=p?To(Array.isArray(p)?p[0]:p):api.context.active(),m=n.tracer.startSpan(`${l} ${d}`,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":l,"http.url":a,"http.request.headers":JSON.stringify(T(i.headers))}},u),g=api.trace.setSpan(u,m),f=m.spanContext();c.setHeader("x-trace-id",f.traceId),c.setHeader("traceparent",`00-${f.traceId}-${f.spanId}-01`);let y=n.options.maxBodyBytes,h=[],v=0;i.on("data",x=>{try{if(x&&v<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(h.push(E),v+=E.length);}}catch{}}),i.on("end",()=>{if(h.length)try{let x=Buffer.concat(h).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.request.body",x);}catch{}});let k=[],R=0,A=x=>{try{if(x&&typeof x!="function"&&R<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(k.push(E),R+=E.length);}}catch{}},O=c.write.bind(c),b=c.end.bind(c);return c.write=function(x,...E){return A(x),O(x,...E)},c.end=function(x,...E){return A(x),b(x,...E)},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(T(x)));}catch{}if(k.length)try{let x=Buffer.concat(k).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.response.body",x);}catch{}m.setStatus({code:c.statusCode>=400?api.SpanStatusCode.ERROR:api.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:api.SpanStatusCode.ERROR,message:x.message}),m.end();}),api.context.with(g,()=>e.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function To(n){let t=n.split("-");if(t.length<4)return api.context.active();let[,e,r,o]=t;if(!e||!r)return api.context.active();try{let s={traceId:e,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return api.trace.setSpanContext(api.context.active(),s)}catch{return api.context.active()}}function on(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let n=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(e,r){let o=typeof e=="string"?e:e instanceof URL?e.href:e.url;if(Qt(o))return n(e,r);let s=api.trace.getActiveSpan();if(!s?.isRecording())return n(e,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((f,y)=>{a[y]=f;});let l=T(a),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":i,"http.url":o,"http.request.headers":JSON.stringify(l)});try{let g=await n(e,m),f={};return g.headers.forEach((y,h)=>{f[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":g.status,"http.response.headers":JSON.stringify(T(f))}),g}catch(g){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":g?.message??String(g),"error.stack":g?.stack??""}),g}},globalThis.fetch.__evalkit=true;}var wo,sn=_(()=>{Nt();jt();wo=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function cn(n){if(console.__evalkit)return;let t=console.log.bind(console),e=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}
15
+ ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(i,c)=>{let a=api.trace.getActiveSpan();if(a?.isRecording())a.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let l=n.tracer.startSpan(`log.${i}`,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":i,"log.message":c}},api.context.active());l.setStatus({code:i==="ERROR"?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),l.end();}};console.log=(...i)=>{t(...i),s("INFO",o(i));},console.warn=(...i)=>{e(...i),s("WARN",o(i));},console.error=(...i)=>{r(...i),s("ERROR",o(i));},console.__evalkit=true;}var ln=_(()=>{});function un(n,t,e){let r=api.trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":e.message,"error.stack":e.stack??"","log.level":"ERROR","log.message":`${t}: ${e.message}`}),r.recordException(e),r.setStatus({code:api.SpanStatusCode.ERROR,message:e.message});else {let o=n.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${e.message}`,"error.message":e.message,"error.stack":e.stack??""}},api.context.active());o.recordException(e),o.setStatus({code:api.SpanStatusCode.ERROR,message:e.message}),o.end();}}function dn(n){typeof process>"u"||(process.on("unhandledRejection",t=>{let e=t instanceof Error?t:new Error(String(t));un(n,"error.unhandled_rejection",e);}),process.on("uncaughtException",t=>{un(n,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var mn=_(()=>{});function No(n){let t=Jt("mongoose");t&&kt(n,t);}function jo(n){let t=Jt("axios");t&&rt(n,t.default??t);}async function Bo(n){try{let e=w()("pg"),r=e.Client??e.default?.Client;if(r){ot(n,r);return}}catch{}try{let t=await S("pg"),e=t.Client??t.default?.Client;e&&ot(n,e);}catch{}}async function $o(n){try{let t=w(),e=t("mysql2"),r=e.Connection??e.default?.Connection??t("mysql2/lib/connection");if(r){st(n,r);return}}catch{}try{let t=await S("mysql2"),e=t.Connection??t.default?.Connection;e&&st(n,e);}catch{}}async function Go(n){try{let e=w()("ioredis"),r=e.default??e.Redis??e;if(r?.prototype){nt(n,r);return}}catch{}try{let t=await S("ioredis"),e=t.default??t.Redis??t;e?.prototype&&nt(n,e);}catch{}}async function Lo(n){try{let e=w()("openai"),o=(e.default??e.OpenAI??e)?.Chat?.Completions?.prototype;if(o){B(n,o);return}}catch{}try{let t=await S("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&B(n,r);}catch{}}async function Ho(n){try{let e=w()("@anthropic-ai/sdk"),o=(e.default??e.Anthropic??e)?.Messages?.prototype;if(o){$(n,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&$(n,r);}catch{}}async function Uo(n){try{let e=w()("@aws-sdk/client-bedrock-runtime"),o=(e.BedrockRuntimeClient??e.default?.BedrockRuntimeClient)?.prototype;if(o){at(n,o);return}}catch{}try{let t=await S("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&at(n,r);}catch{}}async function Fo(n){try{let e=w()("@anthropic-ai/sdk"),o=(e.AnthropicVertex??e.default?.AnthropicVertex)?.Messages?.prototype;if(o){ut(n,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&ut(n,r);}catch{}}async function Vo(n){try{let e=w()("@google-cloud/vertexai"),o=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o){dt(n,o);return}}catch{}try{let t=await S("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&dt(n,r);}catch{}}async function Jo(n){try{let e=w()("cohere-ai"),o=(e.CohereClient??e.default?.CohereClient??e.default)?.prototype;if(o){it(n,o);return}}catch{}try{let t=await S("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&it(n,r);}catch{}}async function Do(n){try{let e=w()("@google/generative-ai"),o=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o){ct(n,o);return}}catch{}try{let t=await S("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ct(n,r);}catch{}}async function zo(n){try{let e=w()("@google/genai"),r=e.Models??e.default?.Models;if(r?.prototype){pt(n,r.prototype);return}}catch{}try{let t=await S("@google/genai"),e=t.Models??t.default?.Models;e?.prototype&&pt(n,e.prototype);}catch{}}async function Wo(n){try{let e=w()("groq-sdk"),o=(e.default??e.Groq??e)?.Chat?.Completions?.prototype;if(o){B(n,o,void 0,"groq");return}}catch{}try{let t=await S("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&B(n,r,void 0,"groq");}catch{}}async function Xo(n){try{let{patchLangChain:t}=await Promise.resolve().then(()=>(zt(),Ne));await t(n);}catch{}}function gn(n){try{rn(n);}catch{}try{nn(n);}catch{}on(),cn(n),dn(n),No(n),jo(n),Promise.all([Lo(n),Ho(n),Uo(n),Fo(n),Vo(n),Jo(n),Do(n),zo(n),Wo(n),Xo(n),Bo(n),$o(n),Go(n)]).catch(()=>{});}var fn=_(()=>{Dt();Kt();Ct();Lt();Wt();Ht();Ut();Vt();Mt();$t();Gt();qt();Bt();sn();ln();mn();});var Zt={};Yt(Zt,{EvalKitClient:()=>exports.EvalKitClient,EvalKitInterceptor:()=>exports.EvalKitInterceptor,TraceMethod:()=>Un,Traced:()=>Fn,createNestjsInterceptor:()=>Nn,currentTraceId:()=>zn,default:()=>exports.default,enableNestjsAutoTrace:()=>Jn,evaluate:()=>H,expressMiddleware:()=>In,fastifyPlugin:()=>Kn,flush:()=>Bn,generateScenarios:()=>Wn,hapiPlugin:()=>qn,honoMiddleware:()=>Mn,init:()=>yn,koaMiddleware:()=>Pn,langchainHandler:()=>bn,patchAnthropicClient:()=>vn,patchAnthropicVertexClient:()=>_n,patchAxiosClient:()=>On,patchBedrockClient:()=>xn,patchCohereClient:()=>kn,patchGoogleAIModel:()=>Rn,patchGoogleGenAIModels:()=>Sn,patchMongooseClient:()=>En,patchMysql2Client:()=>An,patchOpenAIClient:()=>hn,patchPgClient:()=>Tn,patchRedisClient:()=>wn,patchVertexGenerativeModel:()=>Cn,simulateUser:()=>Xn,startHttpTrace:()=>$n,startSpan:()=>Gn,startTrace:()=>jn,traceFunction:()=>Ln,traceObject:()=>Vn,traceTool:()=>Hn,withTrace:()=>Dn});function C(){if(!L)throw new Error("[evalkit] call evalkit.init() before using the SDK");return L}function yn(n){return L&&L.destroy(),L=new exports.EvalKitClient(n),gn(L),L}function hn(n,t){B(C(),n.chat.completions,t);}function vn(n,t){$(C(),n.messages,t);}function xn(n){at(C(),n);}function _n(n){ut(C(),n.messages);}function Cn(n){dt(C(),n);}function kn(n){it(C(),n);}function Rn(n){ct(C(),n);}function Sn(n){pt(C(),n);}function bn(){return Et(C())}function En(n){kt(C(),n);}function wn(n){nt(C(),n);}function On(n){rt(C(),n);}function Tn(n){ot(C(),n);}function An(n){st(C(),n);}function In(n){return He(C(),n)}function Kn(n){return $e(C(),n,Zo)}function Pn(n){return Ve(C(),n)}function Mn(n){return ze(C(),n)}function qn(n){return Xe(C(),n)}function Nn(){return new exports.EvalKitInterceptor(C())}function jn(n,t){return C().startTrace(n,t)}async function Bn(){return C().flush()}function $n(n,t,e){return C().startHttpTrace(n,t,e)}function Gn(n,t,e){return C().startSpan(n,t,e)}function Ln(n,t,e,r=true){return C().traceFunction(n,t,e,r)}function Hn(n,t,e,r=true){return C().traceTool(n,t,e,r)}function Un(n){return (t,e,r)=>{let o=r.value,s=n??`${t.constructor?.name??"unknown"}.${String(e)}`,i;return r.value=function(...c){return i||(i=C().traceFunction(s,o)),i.apply(this,c)},r}}function Fn(n){return t=>{let e=t.prototype,r=n?.prefix??t.name;for(let o of Object.getOwnPropertyNames(e)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(e,o);if(!s||typeof s.value!="function")continue;let i=s.value,c=`${r}.${o}`,a=null;Object.defineProperty(e,o,{...s,value:function(...l){return a||(a=C().traceFunction(c,i)),a.apply(this,l)}});}return t}}function Vn(n,t){let e=C(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(n)){let i=n[s];if(typeof i=="function"&&!i.__evalkitTraced){let c=r?`${r}.${s}`:s,a=e.traceFunction(c,i,void 0,o);a.__evalkitTraced=true,n[s]=a;}}return n}function Jn(n,t){return Ye(C(),n,t)}function Dn(n,t){return api.context.with(n,t)}function zn(){let n=api.trace.getActiveSpan();return n?.isRecording()?n.spanContext().traceId:void 0}function Wn(n){return ne(C(),n)}function Xn(n){return re(C(),n)}function Zo(n){return K(n)}var L;exports.default=void 0;var te=_(()=>{ft();oe();At();D();Kt();Ct();Mt();qt();Bt();$t();Gt();Lt();Ht();Ut();Vt();zt();Wt();Ge();Ue();Je();We();Qe();Xt();Ze();fn();At();Xt();ft();L=null;exports.default={init:yn,evaluate:H,generateScenarios:Wn,simulateUser:Xn,patchOpenAIClient:hn,patchAnthropicClient:vn,patchBedrockClient:xn,patchAnthropicVertexClient:_n,patchVertexGenerativeModel:Cn,patchCohereClient:kn,patchGoogleAIModel:Rn,patchGoogleGenAIModels:Sn,langchainHandler:bn,patchMongooseClient:En,patchRedisClient:wn,patchAxiosClient:On,patchPgClient:Tn,patchMysql2Client:An,expressMiddleware:In,fastifyPlugin:Kn,koaMiddleware:Pn,honoMiddleware:Mn,hapiPlugin:qn,createNestjsInterceptor:Nn,startTrace:jn,startHttpTrace:$n,startSpan:Gn,traceFunction:Ln,traceTool:Hn,traceObject:Vn,TraceMethod:Un,Traced:Fn,enableNestjsAutoTrace:Jn,withTrace:Dn,currentTraceId:zn,flush:Bn};});te();exports.TraceMethod=Un;exports.Traced=Fn;exports.createNestjsInterceptor=Nn;exports.currentTraceId=zn;exports.enableNestjsAutoTrace=Jn;exports.evaluate=H;exports.expressMiddleware=In;exports.fastifyPlugin=Kn;exports.flush=Bn;exports.generateScenarios=Wn;exports.hapiPlugin=qn;exports.honoMiddleware=Mn;exports.init=yn;exports.koaMiddleware=Pn;exports.langchainHandler=bn;exports.patchAnthropicClient=vn;exports.patchAnthropicVertexClient=_n;exports.patchAxiosClient=On;exports.patchBedrockClient=xn;exports.patchCohereClient=kn;exports.patchGoogleAIModel=Rn;exports.patchGoogleGenAIModels=Sn;exports.patchMongooseClient=En;exports.patchMysql2Client=An;exports.patchOpenAIClient=hn;exports.patchPgClient=Tn;exports.patchRedisClient=wn;exports.patchVertexGenerativeModel=Cn;exports.simulateUser=Xn;exports.startHttpTrace=$n;exports.startSpan=Gn;exports.startTrace=jn;exports.traceFunction=Ln;exports.traceObject=Vn;exports.traceTool=Hn;exports.withTrace=Dn;
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}from'./chunk-XWAPTMKS.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 Pn(n,t){if(t.length===0)return {score:1,lcsLength:0};let e=n.length,r=t.length,o=Array.from({length:e+1},()=>new Array(r+1).fill(0));for(let i=1;i<=e;i++)for(let c=1;c<=r;c++)n[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 a=o[e][r];return {score:a/t.length,lcsLength:a}}function Mn(n,t){if(n.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(n.length===0||t.length===0)return {score:0,precision:0,recall:0};let e=new Set(n),r=new Set(t),o=new Set([...e].filter(s=>r.has(s))),a=o.size/e.size,i=o.size/r.size;return {score:a+i===0?0:2*a*i/(a+i),precision:a,recall:i}}function qn(n,t){if(t.length===0)return {score:1,called:0,total:0};let e=new Set(n),r=t.filter(o=>e.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function jn(n,t){if(t.length===0)return {score:1,matched:[],missing:[]};let e=n.toLowerCase(),r=t.filter(a=>e.includes(a.toLowerCase())),o=t.filter(a=>!e.includes(a.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function Nn(n,t){let e={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let a=n.toLowerCase(),i=t.requiredTerms.every(c=>a.includes(c.toLowerCase()));e.requiredTerms=i,r.push(i);}if(t.hasCitations!==void 0){let a=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(n);e.hasCitations=t.hasCitations?a:!a,r.push(e.hasCitations);}if(t.slideCount!==void 0){let a=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(n.match(a)??[]).length===t.slideCount;e.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:e}:{score:r.filter(Boolean).length/r.length,checks:e}}function $n(n,t){if(n.length===0)return {score:1,relevant:0,total:0};let e=new Set(t),r=n.filter(o=>e.has(o)).length;return {score:r/n.length,relevant:r,total:n.length}}function Gn(n,t){if(t.length===0)return {score:1,covered:0,total:0};let e=new Set(n),r=t.filter(o=>e.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function G(n){let t=new Set(n.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),e=(n.toolCalls??[]).map(s=>s.name),r=n.expectedTools??[],o={},a={};if(t.has("tool_trajectory")&&r.length>0){let s=Pn(e,r);o.tool_trajectory=s.score,a.tool_trajectory={lcsLength:s.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(e.length>0||r.length>0)){let s=Mn(e,r);o.tool_f1=s.score,a.tool_f1={precision:s.precision,recall:s.recall};}if(t.has("tool_correctness")&&r.length>0){let s=qn(e,r);o.tool_correctness=s.score,a.tool_correctness={called:s.called,total:s.total};}let i=n.constraints?.requiredTerms??[];if(t.has("response_match")&&i.length>0){let s=jn(n.output,i);o.response_match=s.score,a.response_match={matched:s.matched,missing:s.missing};}if(t.has("constraint_compliance")&&n.constraints){let s=Nn(n.output,n.constraints);o.constraint_compliance=s.score,a.constraint_compliance={checks:s.checks};}if(t.has("contextual_precision")&&n.retrievedContext!==void 0&&n.expectedContext!==void 0){let s=$n(n.retrievedContext,n.expectedContext);o.contextual_precision=s.score,a.contextual_precision={relevant:s.relevant,total:s.total};}if(t.has("contextual_recall")&&n.retrievedContext!==void 0&&n.expectedContext!==void 0){let s=Gn(n.retrievedContext,n.expectedContext);o.contextual_recall=s.score,a.contextual_recall={covered:s.covered,total:s.total};}let c={scores:o,details:a};try{let s=(Wt(),d(zt)),p={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[m,l]of Object.entries(o))p[`evalkit.metric.${m}`]=l;let{end:u}=s.startSpan("evaluation",p);u("OK");}catch{}return c}var lt=b(()=>{});function ut(n){return randomBytes(n).toString("hex")}function Xt(n){return typeof n=="function"?{name:n.name||"tool"}:typeof n=="string"||n&&typeof n=="object"?n:String(n)}async function Qt(n,t){let e=(t.apiUrl??process.env.EVALKIT_API_URL??n.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(Xt)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(Xt)),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);let o=await fetch(e+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":n.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 Un(n){let t=n.turns??n.messages??[],e=[];for(let r of t)typeof r=="string"?e.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&e.push(String(r.content));return e.length===0&&n.starting_prompt&&e.push(String(n.starting_prompt)),e}function Ln(n,t,e,r){let o=Array.from(new Set([...n.constraints?.required_terms??[],...n.target_keywords??[]])),a={};o.length&&(a.requiredTerms=o),n.constraints?.has_citations!==void 0&&(a.hasCitations=n.constraints.has_citations);try{return G({output:t,toolCalls:e,expectedTools:n.expected_tools??[],constraints:a,metrics:r}).scores}catch{return {}}}async function Vn(n,t,e$1,r){let o=e$1.name??"scenario",a=e$1.scenario_id??"scn_"+ut(6),i="sess_"+ut(6),c=Un(e$1).slice(0,r.maxTurns),s={...e$1.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:p,end:u,ctx:m}=n.startTrace(`scenario:${o}`,{"evalkit.session_id":i});e.set(p,{simulationId:r.simulationId,runId:r.runId,scenarioId:a});let l="OK",d,f$1=[],g=[],y=0,h={};try{await context.with(m,async()=>{for(let k=0;k<c.length;k++){let A={message:c[k],sessionId:i,state:s,turn:k+1},O=await t.entrypoint(A);O&&typeof O=="object"&&"text"in O?(f$1.push(O.text),O.toolCalls&&g.push(...O.toolCalls)):f$1.push(String(O)),y++;}let _=g.length?g:f.get(p)??[];h=Ln(e$1,f$1.join(`
2
- `),_,t.metrics);});}catch(_){l="ERROR",d=_?.message??String(_);}finally{u(l);}let v={scenarioId:a,name:o,status:l,turns:y,scores:h};return d&&(v.error=d),{result:v,traceId:p}}async function Yt(n,t){let e$1="sim_"+ut(8),r="run_"+ut(8),o=t.maxTurns??12,a=[],i=[];for(let c of t.scenarios){let{result:s,traceId:p}=await Vn(n,t,c,{simulationId:e$1,runId:r,maxTurns:o});a.push(s),i.push(p);}await n.flush();for(let c of i)e.delete(c),f.delete(c);return {simulationId:e$1,runId:r,results:a}}var Zt=b(()=>{g();lt();});var K,te=b(()=>{(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.FAILED=1]="FAILED";})(K||(K={}));});var ee=b(()=>{te();});function _t(n){return n[0]*1e3+n[1]/1e6}function Fn(n){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[n]??"INTERNAL"}function Dn(n){return n===1?"OK":n===2?"ERROR":"UNSET"}function Jn(n){let t={};for(let[e,r]of Object.entries(n))e.startsWith("evalkit.")||e==="gen_ai.system"||r!=null&&(t[e]=r);return t}function ne(n){return new Promise(t=>setTimeout(t,n))}var dt,re=b(()=>{ee();g();dt=class{constructor(t){this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,e){let r=t.map(a=>this.toEnvelope(a)),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 a=>{if(!a.ok){let i=await a.text().catch(()=>"(no body)");console.error(`[evalkit] export failed ${a.status}: ${i}`),e({code:K.FAILED});return}if(this.debug){let i=await a.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${i.status}`);}e({code:K.SUCCESS});}).catch(a=>{console.error("[evalkit] export network error:",a),e({code:K.FAILED});});}async fetchWithRetry(t,e,r=3){let o=[200,600,1800],a;for(let i=0;i<=r;i++)try{let c=await fetch(t,e);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 ne(o[i]??1800);else return c}catch(c){a=c,i<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${i+1}/${r}:`,c),await ne(o[i]??1800));}throw a}shutdown(){return Promise.resolve()}toEnvelope(t){let e$1=t.spanContext(),r=t.attributes,o=_t(t.startTime),a=_t(t.endTime),i=t.events.map(p=>({name:p.name,timestamp:new Date(_t(p.time)).toISOString(),attributes:p.attributes})),c={traceId:e$1.traceId,spanId:e$1.spanId,parentSpanId:t.parentSpanId,spanKind:Fn(t.kind),spanType:r["evalkit.span_type"]??"log",status:Dn(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(a-o),startTime:new Date(o).toISOString(),endTime:new Date(a).toISOString(),events:i.length>0?i:void 0,attributes:Jn(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"]},s=e.get(e$1.traceId);return s&&(c.isSimulation=true,c.simulationId=s.simulationId,c.scenarioId=s.scenarioId,c.runId=s.runId),c}};});function kt(n,t=Zn){let e;try{e=JSON.stringify(n);}catch{}if(e===void 0)try{e=String(n);}catch{e="<unserializable>";}return e.length>t?e.slice(0,t)+"\u2026":e}var Yn,Zn,U,St=b(()=>{re();Yn="0.1.24",Zn=4096;U=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let e=new dt({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(e,{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":Yn};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,e){let r=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...e}},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,e,r){let o=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":e.method,"http.url":e.url,...e.headers?{"http.request.headers":JSON.stringify(e.headers)}:{},...e.requestBody!==void 0?{"http.request.body":JSON.stringify(e.requestBody)}:{},...this.metaAttributes(),...r}},context.active()),a=trace.setSpan(context.active(),o);return {traceId:o.spanContext().traceId,ctx:a,end:(c="OK",s)=>{s?.statusCode!==void 0&&o.setAttribute("http.status_code",s.statusCode),s?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(s.body)),s?.headers&&o.setAttribute("http.response.headers",JSON.stringify(s.headers)),o.setStatus({code:c==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}startSpan(t,e,r){let o=this.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...e}},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,e,r,o=true){let a=this;return function(...i){let c={"evalkit.span_type":"function_call",...r};o&&i.length&&(c["function.args"]=kt(i));let{ctx:s,end:p}=a.startSpan(t,c),u;try{u=context.with(s,()=>e.apply(this,i));}catch(m){let l=m instanceof Error?m:new Error(String(m));throw trace.getSpan(s)?.recordException(l),p("ERROR",{"error.message":l.message}),m}return u&&typeof u.then=="function"?u.then(m=>(p("OK",o?{"function.result":kt(m)}:void 0),m),m=>{let l=m instanceof Error?m:new Error(String(m));throw trace.getSpan(s)?.recordException(l),p("ERROR",{"error.message":l.message}),m}):(p("OK",o?{"function.result":kt(u)}:void 0),u)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function I(n){if(!n)return context.active();let t=n.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 L=b(()=>{});function or(n,t){let e="",r=0,o=0,a=false;function i(c){a||(a=true,c?(t.recordException(c),t.setStatus({code:SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":e,"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(n,{get(c,s,p){if(s===Symbol.asyncIterator)return function(){let m=c[Symbol.asyncIterator]();return {async next(){try{let l=await m.next();if(!l.done&&l.value){let d=l.value,f=d.choices?.[0]?.delta?.content;f&&(e+=f),d.usage&&(r=d.usage.prompt_tokens??0,o=d.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(),m.return?.()??Promise.resolve({done:true,value:void 0})},throw(l){return i(l instanceof Error?l:new Error(String(l))),m.throw?.(l)??Promise.reject(l)},[Symbol.asyncIterator](){return this}}};let u=Reflect.get(c,s,p);return typeof u=="function"?u.bind(c):u}})}function M(n,t,e,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...a){let i=a[0],c=e??context.active(),s=n.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":sr(i.messages??[])}},c),p=trace.setSpan(c,s);if(i?.stream){let d;try{d=await context.with(p,()=>o.apply(this,a));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw s.recordException(g),s.setStatus({code:SpanStatusCode.ERROR,message:g.message}),s.end(),f}return or(d,s)}let u;try{u=await context.with(p,()=>o.apply(this,a));}catch(d){let f=d instanceof Error?d:new Error(String(d));throw s.recordException(f),s.setStatus({code:SpanStatusCode.ERROR,message:f.message}),s.end(),d}let m=u.choices?.[0],l=m?.message.content??"";return s.setAttributes({"gen_ai.response.model":u.model,"gen_ai.response.id":u.id,"gen_ai.usage.input_tokens":u.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":u.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":u.usage?.total_tokens??0,"gen_ai.response.finish_reasons":m?.finish_reason?[m.finish_reason]:[],"evalkit.completion":l}),k(n,s,h(u)),s.setStatus({code:SpanStatusCode.OK}),s.end(),u},t.create.__evalkit=true;}function sr(n){return n.map(t=>`${t.role}: ${t.content??""}`).join(`
3
- `)}var bt=b(()=>{l();});function cr(n,t){let e="",r=0,o=0,a=false;function i(s){let p=s?.type;if(p==="content_block_delta"){let u=s.delta;u?.type==="text_delta"&&u.text&&(e+=u.text);}else p==="message_start"?r=s.message?.usage?.input_tokens??0:p==="message_delta"&&(o=s.usage?.output_tokens??0);}function c(s){a||(a=true,s?(t.recordException(s),t.setStatus({code:SpanStatusCode.ERROR,message:s.message})):(t.setAttributes({"evalkit.completion":e,"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(n,{get(s,p,u){if(p===Symbol.asyncIterator)return function(){let l=s[Symbol.asyncIterator]();return {async next(){try{let d=await l.next();return !d.done&&d.value&&i(d.value),d.done&&c(),d}catch(d){throw c(d instanceof Error?d:new Error(String(d))),d}},return(){return c(),l.return?.()??Promise.resolve({done:true,value:void 0})},throw(d){return c(d instanceof Error?d:new Error(String(d))),l.throw?.(d)??Promise.reject(d)},[Symbol.asyncIterator](){return this}}};let m=Reflect.get(s,p,u);return typeof m=="function"?m.bind(s):m}})}function q(n,t,e){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let a=o[0],i$1=e??context.active(),c=pr(a.system,a.messages??[]),s=n.tracer.startSpan("messages.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","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":c}},i$1),p=trace.setSpan(i$1,s);if(a?.stream){let l;try{l=await context.with(p,()=>r.apply(this,o));}catch(d){let f=d instanceof Error?d:new Error(String(d));throw s.recordException(f),s.setStatus({code:SpanStatusCode.ERROR,message:f.message}),s.end(),d}return cr(l,s)}let u;try{u=await context.with(p,()=>r.apply(this,o));}catch(l){let d=l instanceof Error?l:new Error(String(l));throw s.recordException(d),s.setStatus({code:SpanStatusCode.ERROR,message:d.message}),s.end(),l}let m=u.content.filter(l=>l.type==="text").map(l=>l.text??"").join("");return s.setAttributes({"gen_ai.response.model":u.model,"gen_ai.response.id":u.id,"gen_ai.usage.input_tokens":u.usage?.input_tokens??0,"gen_ai.usage.output_tokens":u.usage?.output_tokens??0,"gen_ai.response.finish_reasons":u.stop_reason?[u.stop_reason]:[],"evalkit.completion":m}),k(n,s,i(u.content)),s.setStatus({code:SpanStatusCode.OK}),s.end(),u},t.create.__evalkit=true;}function pr(n,t){let e=[];return n&&e.push(`system: ${n}`),e.push(...t.map(r=>`${r.role}: ${r.content}`)),e.join(`
4
- `)}var mt=b(()=>{l();});function ft(n,t){let e=t.Query?.prototype;if(!e||e.__evalkit)return;let r=e.exec;e.exec=async function(){if(!trace.getActiveSpan()?.isRecording())return r.call(this);let a=this.op??"query",i=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=n.tracer.startSpan(`${a} ${i}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":a,"db.collection":i,"db.query":JSON.stringify(this._conditions??{})}},context.active());try{let s=await r.call(this);return c.setStatus({code:SpanStatusCode.OK}),c.end(),s}catch(s){let p=s instanceof Error?s:new Error(String(s));throw c.recordException(p),c.setStatus({code:SpanStatusCode.ERROR,message:p.message}),c.end(),s}},e.__evalkit=true;}var Ot=b(()=>{});function Q(n,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 a=r[o];r[o]=async function(i,...c){if(!trace.getActiveSpan()?.isRecording())return a.call(this,i,...c);let p=Array.isArray(i)?i[0]:i?.name??i?.args?.[0]??"cmd",u=(typeof p=="string"?p:String(p)).toUpperCase(),m=n.tracer.startSpan(`redis ${u}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":u}},context.active());try{let l=await a.call(this,i,...c);return m.setStatus({code:SpanStatusCode.OK}),m.end(),l}catch(l){let d=l instanceof Error?l:new Error(String(l));throw m.recordException(d),m.setStatus({code:SpanStatusCode.ERROR,message:d.message}),m.end(),l}},r.__evalkit_redis=true;}var Tt=b(()=>{});function T(n){let t={};for(let[e,r]of Object.entries(n))yr.test(e)||r!==void 0&&(t[e]=Array.isArray(r)?r.join(", "):String(r));return t}var yr,At=b(()=>{yr=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var V,It=b(()=>{V=new Map;});function Y(n,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let e=t.create.bind(t);t.create=function(...r){let o=e(...r);return Y(n,o),o};}t.interceptors.request.use(e=>{let r=(e.baseURL?e.baseURL.replace(/\/$/,""):"")+(e.url??"");if(Cr.some(u=>u.test(r))||!trace.getActiveSpan()?.isRecording())return e;let a=e.url??"";try{a=new URL(r,e.baseURL??"http://localhost").pathname;}catch{}let i=(e.method??"get").toUpperCase(),c=T(e.headers??{}),s=n.tracer.startSpan(`${i} ${a}`,{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)}:{},...e.data!==void 0?{"http.request.body":typeof e.data=="string"?e.data.slice(0,4096):JSON.stringify(e.data).slice(0,4096)}:{}}},context.active()),p=s.spanContext();return e.headers=e.headers??{},e.headers.traceparent=`00-${p.traceId}-${p.spanId}-01`,e.headers["x-evalkit-span-id"]=p.spanId,V.set(p.spanId,s),e.__evalkitSpan=s,e.__evalkitSpanId=p.spanId,e}),t.interceptors.response.use(e=>{let r=e.config?.__evalkitSpan;if(e.config?.__evalkitSpanId&&V.delete(e.config.__evalkitSpanId),r){let o=T(e.headers??{}),a=e.data,i;a!=null&&(i=(typeof a=="string"?a:JSON.stringify(a)).slice(0,4096)),r.setAttributes({"http.status_code":e.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 e},e=>{let r=e.config?.__evalkitSpan;if(e.config?.__evalkitSpanId&&V.delete(e.config.__evalkitSpanId),r){let o=e.response?.status??0,a=T(e.response?.headers??{}),i=e.response?.data,c;i!=null&&(c=(typeof i=="string"?i:JSON.stringify(i)).slice(0,4096)),r.setAttributes({"http.status_code":o,"error.message":e.message,...Object.keys(a).length?{"http.response.headers":JSON.stringify(a)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(e instanceof Error?e:new Error(String(e))),r.setStatus({code:SpanStatusCode.ERROR,message:e.message}),r.end();}throw e});}}var Cr,Kt=b(()=>{At();It();Cr=[/\/v1\/ingest/,/\/health(z)?$/];});function Z(n,t){let e=t?.prototype??Object.getPrototypeOf(t);if(!e||e.__evalkit_pg)return;let r=e.query;typeof r=="function"&&(e.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",m=i.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",l=m?`${p} ${m}`:`pg ${p}`,d=n.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)}:{},...m?{"db.sql.table":m}:{}}},context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,_)=>{v?(d.recordException(v),d.setStatus({code:SpanStatusCode.ERROR,message:v.message}),d.setAttribute("error.message",v.message)):(d.setAttribute("db.rows_affected",_?.rowCount??0),d.setStatus({code:SpanStatusCode.OK})),d.end(),y(v,_);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(d.setAttribute("db.rows_affected",y?.rowCount??0),d.setStatus({code:SpanStatusCode.OK}),d.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw d.recordException(h),d.setStatus({code:SpanStatusCode.ERROR,message:h.message}),d.setAttribute("error.message",h.message),d.end(),y})},e.__evalkit_pg=true);}var Pt=b(()=>{});function tt(n,t){let e=t?.prototype??Object.getPrototypeOf(t);if(!(!e||e.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=e[r];typeof o=="function"&&(e[r]=function(...a){if(!trace.getActiveSpan()?.isRecording())return o.apply(this,a);let c=typeof a[0]=="string"?a[0]:a[0]?.sql??"query",s=Array.isArray(a[1])?a[1]:void 0,u=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",l=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",d=l?`${u} ${l}`:`mysql ${u}`,f=n.tracer.startSpan(d,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":u,"db.statement":c.slice(0,2048),...s!==void 0?{"db.params":JSON.stringify(s).slice(0,1024)}:{},...l?{"db.sql.table":l}:{}}},context.active()),g=a[a.length-1];if(typeof g=="function"){let h=g,v=a.slice(0,-1).concat([(_,k,A)=>{_?(f.recordException(_),f.setStatus({code:SpanStatusCode.ERROR,message:_.message}),f.setAttribute("error.message",_.message)):(f.setAttribute("db.rows_affected",Array.isArray(k)?k.length:k?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK})),f.end(),h(_,k,A);}]);return o.apply(this,v)}let y=o.apply(this,a);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)});}e.__evalkit_mysql2=true;}}var Mt=b(()=>{});function Tr(n){if(!n||typeof n!="object")return false;let t=n.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function et(n,t,e){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let a=o[0];if(!Tr(a))return r.apply(this,o);let i=a.input,c=i?.modelId??"unknown",s=c.split(".")[0]??"bedrock",p=i?.system?.map(v=>v.text).join(`
5
- `)??"",u=i?.messages?.map(v=>`${v.role}: ${v.content.map(_=>_.text??"").join("")}`)??[],m=[p?`system: ${p}`:"",...u].filter(Boolean).join(`
6
- `),l=i?.inferenceConfig??{},d=context.active(),f=n.tracer.startSpan("converse",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":s,"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":m}},d),g=trace.setSpan(d,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;}var qt=b(()=>{});function nt(n,t,e){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let a=o[0];if(a?.stream)return r.apply(this,o);let i=a?.chatHistory?.map(l=>`${l.role}: ${l.message??""}`)??[],c=[a?.preamble?`system: ${a.preamble}`:"",...i,`user: ${a?.message??""}`].filter(Boolean).join(`
7
- `),s=context.active(),p=n.tracer.startSpan("chat",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":a?.model??"unknown",...a?.temperature!=null&&{"gen_ai.request.temperature":a.temperature},...a?.maxTokens!=null&&{"gen_ai.request.max_tokens":a.maxTokens},"evalkit.prompt":c}},s),u=trace.setSpan(s,p),m;try{m=await context.with(u,()=>r.apply(this,o));}catch(l){let d=l instanceof Error?l:new Error(String(l));throw p.recordException(d),p.setStatus({code:SpanStatusCode.ERROR,message:d.message}),p.end(),l}return p.setAttributes({"gen_ai.response.model":a?.model??"unknown","gen_ai.response.id":m.generationId??"","gen_ai.usage.input_tokens":m.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":m.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":m.finishReason?[m.finishReason]:[],"evalkit.completion":m.text??""}),p.setStatus({code:SpanStatusCode.OK}),p.end(),m},t.chat.__evalkit=true;}var jt=b(()=>{});function rt(n,t,e){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...a){let i=a[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(_=>_.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
- `);}let s=context.active(),p=n.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}},s),u=trace.setSpan(s,p),m;try{m=await context.with(u,()=>r.apply(this,a));}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=m?.response,d=l?.candidates?.[0],f=d?.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":d?.finishReason?[d.finishReason]:[],"evalkit.completion":f}),p.setStatus({code:SpanStatusCode.OK}),p.end(),m},t.generateContent.__evalkit=true;}var Nt=b(()=>{});function ye(n){return n?.text??""}function Mr(n){if(typeof n=="string")return n;if(Array.isArray(n))return n.map(t=>{if(typeof t=="string")return t;let e=t,r=e.role??"user",o=(e.parts??[]).map(ye).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
- `);if(n&&typeof n=="object"){let t=n;if(t.parts)return (t.parts??[]).map(ye).join("")}return n!=null?String(n):""}function qr(n){let t=n?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(e=>e?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function he(n){let t=qr(n?.config),e=Mr(n?.contents);return [t?`system: ${t}`:"",e].filter(Boolean).join(`
10
- `)}function ve(n){let t=[];for(let e of n?.candidates??[])for(let r of e.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):n?.text??""}function xe(n,t,e){$t&&k($t,t,j(n));}function st(n,t,e){if($t=n,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let a=o[0]??{},i=a.model??"unknown",c=context.active(),s=n.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"evalkit.prompt":he(a)}},c),p=trace.setSpan(c,s),u;try{u=await context.with(p,()=>r.apply(this,o));}catch(m){let l=m instanceof Error?m:new Error(String(m));throw s.recordException(l),s.setStatus({code:SpanStatusCode.ERROR,message:l.message}),s.end(),m}s.setAttributes({"gen_ai.response.model":i,"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,"evalkit.completion":ve(u)});try{xe(u,s,s.spanContext().traceId);}catch{}return s.setStatus({code:SpanStatusCode.OK}),s.end(),u},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let a=o[0]??{},i=a.model??"unknown",c=context.active(),s=n.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":he(a)}},c),p=trace.setSpan(c,s),u;try{u=await context.with(p,()=>r.apply(this,o));}catch(l){let d=l instanceof Error?l:new Error(String(l));throw s.recordException(d),s.setStatus({code:SpanStatusCode.ERROR,message:d.message}),s.end(),l}async function*m(){let l=[],d=0,f=0;try{for await(let g of u){try{let y=ve(g);y&&l.push(y),g?.usageMetadata&&(d=g.usageMetadata.promptTokenCount??d,f=g.usageMetadata.candidatesTokenCount??f),xe(g,s,s.spanContext().traceId);}catch{}yield g;}s.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":d,"gen_ai.usage.output_tokens":f,"evalkit.completion":l.join("")}),s.setStatus({code:SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw s.recordException(y),s.setStatus({code:SpanStatusCode.ERROR,message:y.message}),g}finally{s.end();}}return m()},t.generateContentStream.__evalkit=true;}}var $t,Gt=b(()=>{l();$t=null;});function at(n,t,e){q(n,t,e);}function it(n,t,e){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...a){let i=a[0],c=i?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",s=i?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],p=[c?`system: ${c}`:"",...s].filter(Boolean).join(`
11
- `),u=context.active(),m=n.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}},u),l=trace.setSpan(u,m),d;try{d=await context.with(l,()=>r.apply(this,a));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw m.recordException(v),m.setStatus({code:SpanStatusCode.ERROR,message:v.message}),m.end(),h}let f=d?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return m.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}),m.setStatus({code:SpanStatusCode.OK}),m.end(),d},t.generateContent.__evalkit=true;}var Bt=b(()=>{mt();});function Re(n,t={},e){function r(o,a,i){let c={...t,...a};o.addHook("onRequest",(s,p,u)=>{let m=s.routerPath??s.routeOptions?.url??s.url??"/",l=typeof c.name=="function"?c.name(s):c.name??`${String(s.method??"GET")} ${String(m)}`,d=s.headers?.traceparent,f=e?e(d):context.active(),{traceId:g,end:y,ctx:h}=context.with(f,()=>n.startHttpTrace(l,{method:String(s.method??"GET"),url:String(s.url??"/"),headers:s.headers,requestBody:void 0}));s._evalkitCtx=h,s._evalkitTraceId=g,s._evalkitEnd=y,s._evalkitEnded=false,context.with(h,u);}),o.addHook("preHandler",(s,p,u)=>{if(s._evalkitCtx&&s.body!==void 0){let m=trace.getActiveSpan();if(m?.isRecording())try{m.setAttribute("http.request.body",typeof s.body=="string"?s.body.slice(0,4096):JSON.stringify(s.body).slice(0,4096));}catch{}}context.with(s._evalkitCtx??context.active(),u);}),o.addHook("onSend",(s,p,u,m)=>{try{if(u!=null){let l=(typeof u=="string"?u:JSON.stringify(u)).slice(0,4096);s._evalkitRespBody=l;}}catch{}m(null,u);}),o.addHook("onResponse",(s,p,u)=>{if(typeof s._evalkitEnd=="function"&&!s._evalkitEnded){s._evalkitEnded=true;let m=p.statusCode??200;s._evalkitEnd(m>=400?"ERROR":"OK",{statusCode:m,body:s._evalkitRespBody});}u();}),o.addHook("onError",(s,p,u,m)=>{typeof s._evalkitEnd=="function"&&!s._evalkitEnded&&(s._evalkitEnded=true,s._evalkitEnd("ERROR",{statusCode:p.statusCode??500})),m();}),i();}return r[Symbol.for("skip-override")]=true,r}var ke=b(()=>{});function Ee(n,t){return (e,r,o)=>{let a=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method)} ${String(e.route?.path??e.path??e.url)}`,i=I(e.headers?.traceparent),{end:c,ctx:s,traceId:p}=context.with(i,()=>n.startHttpTrace(a,{method:String(e.method??"GET"),url:String(e.originalUrl??e.url??"/"),headers:e.headers,requestBody:e.body}));e._evalkitCtx=s,e._evalkitTraceId=p;let u=trace.getSpan(s)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",p),r.setHeader?.("traceparent",`00-${p}-${u}-01`);let m=4096,l=[],d=0,f=h=>{if(!(!h||d>=m))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(l.push(v),d+=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,m).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(s,()=>o());}}var be=b(()=>{L();});function Oe(n,t){return async(e,r)=>{let o=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method??"GET")} ${String(e.path??"/")}`,a=I(e.request?.headers?.traceparent),{end:i,ctx:c}=context.with(a,()=>n.startHttpTrace(o,{method:String(e.method??"GET"),url:String(e.href??e.url??"/"),headers:e.request?.headers,requestBody:e.request?.body}));e._evalkitCtx=c;try{await context.with(c,r);let s=e.status??200,p;try{let u=e.body;u!=null&&(p=(typeof u=="string"?u:JSON.stringify(u)).slice(0,4096));}catch{}i(s>=400?"ERROR":"OK",{statusCode:s,body:p});}catch(s){throw i("ERROR",{statusCode:e.status??500}),s}}}var Te=b(()=>{L();});function Ie(n,t){return async(e,r)=>{let o=e.req,a=o.url??"/",i=a;try{i=new URL(a).pathname;}catch{}let c=typeof t?.name=="function"?t.name(e):t?.name??`${String(o.method??"GET")} ${i}`,s=I(o.header("traceparent")),{end:p,ctx:u}=context.with(s,()=>n.startHttpTrace(c,{method:String(o.method??"GET"),url:a,headers:Object.fromEntries(o.raw?.headers??[])}));try{await context.with(u,r);let m=e.res?.status??200,l;try{if(e.res&&typeof e.res.clone=="function"){let d=await e.res.clone().text();d&&(l=d.slice(0,4096));}}catch{}p(m>=400?"ERROR":"OK",{statusCode:m,body:l});}catch(m){throw p("ERROR",{statusCode:500}),m}}}var Ke=b(()=>{L();});function Pe(n,t){return {name:"@evalkit/hapi",register(e){let r=new WeakMap;e.ext("onRequest",(o,a)=>{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:s,ctx:p}=context.with(c,()=>n.startHttpTrace(i,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:s,ctx:p}),a.continue}),e.ext("onPreResponse",(o,a)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,s;try{let p=o.response?.source??o.response?.result;p!=null&&(s=(typeof p=="string"?p:JSON.stringify(p)).slice(0,4096));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:s}),r.delete(o);}return a.continue});}}}var Me=b(()=>{L();});var F,Ht=b(()=>{F=class{constructor(t){this.client=t;}intercept(t,e){let r=t.switchToHttp?.();if(!r)return e.handle();let o=r.getRequest(),a=r.getResponse(),i=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:s}=this.client.startHttpTrace(i,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),p=4096,u=[],m=0,l=f=>{if(!(!f||m>=p))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(u.push(g),m+=g.length);}catch{}};if(a&&typeof a.write=="function"){let f=a.write.bind(a);a.write=function(g,...y){return l(g),f(g,...y)};}if(a&&typeof a.end=="function"){let f=a.end.bind(a);a.end=function(g,...y){return l(g),f(g,...y)};}let d=context.with(c,()=>e.handle());return {subscribe(f){return d.subscribe({next:g=>f.next?.(g),error:g=>{s("ERROR"),f.error?.(g);},complete:()=>{let g=a?.statusCode??200,y;if(u.length)try{y=Buffer.concat(u).subarray(0,p).toString("utf-8");}catch{}s(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return d.pipe(...f)}}}};});function Ut(n){return Ur.some(t=>t.test(n))}function Lr(n,t,e){let r="",o="GET";if(typeof n=="string")r=n,o=(t?.method??"GET").toUpperCase();else if(n instanceof URL)r=n.href,o=(t?.method??"GET").toUpperCase();else {let i=n.hostname??n.host??"localhost",c=n.port?`:${n.port}`:"",s=n.path??"/";r=`${e}://${i}${c}${s}`,o=(n.method??t?.method??"GET").toUpperCase();}let a=r;try{a=new URL(r.startsWith("http")?r:`${e}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:a}}function Ne(n){let t,e;try{let a$1=typeof a<"u"?a:createRequire(import.meta.url);t=a$1("http"),e=a$1("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:e,scheme:"https"}];for(let{mod:a,scheme:i}of r){let s=function(p,u,m){let l=typeof u=="function"?void 0:u,{url:d,method:f,pathname:g}=Lr(p,l,i);if(Ut(d)||!trace.getActiveSpan()?.isRecording())return c.call(a,p,u,m);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 S=V.get(String(v));if(S){let x=T({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&S.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(a,p,u,m)}let _=T(h),k=n.tracer.startSpan(`${f} ${g}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":d,...Object.keys(_).length?{"http.request.headers":JSON.stringify(_)}:{}}},context.active()),A=c.call(a,p,u,m),O=k.spanContext();return A.setHeader("traceparent",`00-${O.traceId}-${O.spanId}-01`),A.on("response",S=>{let x=S.statusCode??0;k.setAttributes({"http.status_code":x,...S.headers?{"http.response.headers":JSON.stringify(T(S.headers))}:{}}),k.setStatus({code:x>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),k.end();}),A.on("error",S=>{k.setAttributes({"http.status_code":0,"error.message":S.message}),k.recordException(S instanceof Error?S:new Error(String(S))),k.setStatus({code:SpanStatusCode.ERROR,message:S.message}),k.end();}),A};let c=a.request;c.__evalkit||(s.__evalkit=true,Object.defineProperty(a,"request",{value:s,writable:true,configurable:true}));}}function $e(n){let t;try{t=(typeof a<"u"?a:createRequire(import.meta.url))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let e=t.Server.prototype.emit;function r(o,...a){if(o!=="request")return e.call(this,o,...a);let i=a[0],c=a[1],s=i.url??"/";if(Ut(s))return e.call(this,o,...a);if(trace.getActiveSpan()?.isRecording())return e.call(this,o,...a);let p=(i.method??"GET").toUpperCase(),u=s;try{u=new URL(s,"http://localhost").pathname;}catch{}let m=i.headers.traceparent,l=m?Vr(Array.isArray(m)?m[0]:m):context.active(),d=n.tracer.startSpan(`${p} ${u}`,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":p,"http.url":s,"http.request.headers":JSON.stringify(T(i.headers))}},l),f=trace.setSpan(l,d),g=d.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=8192,h=[],v=0;i.on("data",x=>{try{if(x&&v<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(h.push(E),v+=E.length);}}catch{}}),i.on("end",()=>{if(h.length)try{let x=Buffer.concat(h).subarray(0,y).toString("utf-8");x&&d.setAttribute("http.request.body",x);}catch{}});let _=[],k=0,A=x=>{try{if(x&&typeof x!="function"&&k<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(_.push(E),k+=E.length);}}catch{}},O=c.write.bind(c),S=c.end.bind(c);return c.write=function(x,...E){return A(x),O(x,...E)},c.end=function(x,...E){return A(x),S(x,...E)},c.on("finish",()=>{d.setAttribute("http.status_code",c.statusCode);try{let x=c.getHeaders();x&&Object.keys(x).length&&d.setAttribute("http.response.headers",JSON.stringify(T(x)));}catch{}if(_.length)try{let x=Buffer.concat(_).subarray(0,y).toString("utf-8");x&&d.setAttribute("http.response.body",x);}catch{}d.setStatus({code:c.statusCode>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),d.end();}),c.on("error",x=>{d.setAttribute("error.message",x.message),d.recordException(x instanceof Error?x:new Error(String(x))),d.setStatus({code:SpanStatusCode.ERROR,message:x.message}),d.end();}),context.with(f,()=>e.call(this,o,...a))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function Vr(n){let t=n.split("-");if(t.length<4)return context.active();let[,e,r,o]=t;if(!e||!r)return context.active();try{let a={traceId:e,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return trace.setSpanContext(context.active(),a)}catch{return context.active()}}function Ge(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let n=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(e,r){let o=typeof e=="string"?e:e instanceof URL?e.href:e.url;if(Ut(o))return n(e,r);let a=trace.getActiveSpan();if(!a?.isRecording())return n(e,r);let i=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let s={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{s[y]=g;});let p=T(s),u=a.spanContext(),m=`00-${u.traceId}-${u.spanId}-01`,l=new Headers(r?.headers);l.set("traceparent",m);let d={...r,headers:l};Object.keys(p).length&&a.addEvent("http.fetch.request",{"http.method":i,"http.url":o,"http.request.headers":JSON.stringify(p)});try{let f=await n(e,d),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),a.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(T(g))}),f}catch(f){throw a.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var Ur,Be=b(()=>{At();It();Ur=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function Ue(n){if(console.__evalkit)return;let t=console.log.bind(console),e=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),a=(i,c)=>{let s=trace.getActiveSpan();if(s?.isRecording())s.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let p=n.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),a("INFO",o(i));},console.warn=(...i)=>{e(...i),a("WARN",o(i));},console.error=(...i)=>{r(...i),a("ERROR",o(i));},console.__evalkit=true;}var Le=b(()=>{});function Fe(n,t,e){let r=trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":e.message,"error.stack":e.stack??"","log.level":"ERROR","log.message":`${t}: ${e.message}`}),r.recordException(e),r.setStatus({code:SpanStatusCode.ERROR,message:e.message});else {let o=n.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${e.message}`,"error.message":e.message,"error.stack":e.stack??""}},context.active());o.recordException(e),o.setStatus({code:SpanStatusCode.ERROR,message:e.message}),o.end();}}function De(n){typeof process>"u"||(process.on("unhandledRejection",t=>{let e=t instanceof Error?t:new Error(String(t));Fe(n,"error.unhandled_rejection",e);}),process.on("uncaughtException",t=>{Fe(n,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var Je=b(()=>{});function Qr(n$1){let t=n("mongoose");t&&ft(n$1,t);}function Yr(n$1){let t=n("axios");t&&Y(n$1,t.default??t);}async function Zr(n){try{let e=o()("pg"),r=e.Client??e.default?.Client;if(r){Z(n,r);return}}catch{}try{let t=await m("pg"),e=t.Client??t.default?.Client;e&&Z(n,e);}catch{}}async function to(n){try{let t=o(),e=t("mysql2"),r=e.Connection??e.default?.Connection??t("mysql2/lib/connection");if(r){tt(n,r);return}}catch{}try{let t=await m("mysql2"),e=t.Connection??t.default?.Connection;e&&tt(n,e);}catch{}}async function eo(n){try{let e=o()("ioredis"),r=e.default??e.Redis??e;if(r?.prototype){Q(n,r);return}}catch{}try{let t=await m("ioredis"),e=t.default??t.Redis??t;e?.prototype&&Q(n,e);}catch{}}async function no(n){try{let e=o()("openai"),o$1=(e.default??e.OpenAI??e)?.Chat?.Completions?.prototype;if(o$1){M(n,o$1);return}}catch{}try{let t=await m("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&M(n,r);}catch{}}async function ro(n){try{let e=o()("@anthropic-ai/sdk"),o$1=(e.default??e.Anthropic??e)?.Messages?.prototype;if(o$1){q(n,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&q(n,r);}catch{}}async function oo(n){try{let e=o()("@aws-sdk/client-bedrock-runtime"),o$1=(e.BedrockRuntimeClient??e.default?.BedrockRuntimeClient)?.prototype;if(o$1){et(n,o$1);return}}catch{}try{let t=await m("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&et(n,r);}catch{}}async function so(n){try{let e=o()("@anthropic-ai/sdk"),o$1=(e.AnthropicVertex??e.default?.AnthropicVertex)?.Messages?.prototype;if(o$1){at(n,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&at(n,r);}catch{}}async function ao(n){try{let e=o()("@google-cloud/vertexai"),o$1=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o$1){it(n,o$1);return}}catch{}try{let t=await m("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&it(n,r);}catch{}}async function io(n){try{let e=o()("cohere-ai"),o$1=(e.CohereClient??e.default?.CohereClient??e.default)?.prototype;if(o$1){nt(n,o$1);return}}catch{}try{let t=await m("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&nt(n,r);}catch{}}async function co(n){try{let e=o()("@google/generative-ai"),o$1=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o$1){rt(n,o$1);return}}catch{}try{let t=await m("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&rt(n,r);}catch{}}async function po(n){try{let e=o()("@google/genai"),r=e.Models??e.default?.Models;if(r?.prototype){st(n,r.prototype);return}}catch{}try{let t=await m("@google/genai"),e=t.Models??t.default?.Models;e?.prototype&&st(n,e.prototype);}catch{}}async function lo(n){try{let e=o()("groq-sdk"),o$1=(e.default??e.Groq??e)?.Chat?.Completions?.prototype;if(o$1){M(n,o$1,void 0,"groq");return}}catch{}try{let t=await m("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&M(n,r,void 0,"groq");}catch{}}async function uo(n){try{let{patchLangChain:t}=await import('./langchain-NETB77PP.mjs');await t(n);}catch{}}function ze(n){try{$e(n);}catch{}try{Ne(n);}catch{}Ge(),Ue(n),De(n),Qr(n),Yr(n),Promise.all([no(n),ro(n),oo(n),so(n),ao(n),io(n),co(n),po(n),lo(n),uo(n),Zr(n),to(n),eo(n)]).catch(()=>{});}var We=b(()=>{p();bt();mt();qt();Bt();jt();Nt();Gt();Ot();Pt();Mt();Tt();Kt();Be();Le();Je();});var zt={};c(zt,{EvalKitClient:()=>U,EvalKitInterceptor:()=>F,TraceMethod:()=>kn,Traced:()=>Sn,createNestjsInterceptor:()=>hn,currentTraceId:()=>bn,default:()=>yo,evaluate:()=>G,expressMiddleware:()=>dn,fastifyPlugin:()=>mn,flush:()=>xn,generateScenarios:()=>wn,hapiPlugin:()=>yn,honoMiddleware:()=>gn,init:()=>Xe,koaMiddleware:()=>fn,langchainHandler:()=>sn,patchAnthropicClient:()=>Ye,patchAnthropicVertexClient:()=>tn,patchAxiosClient:()=>pn,patchBedrockClient:()=>Ze,patchCohereClient:()=>nn,patchGoogleAIModel:()=>rn,patchGoogleGenAIModels:()=>on,patchMongooseClient:()=>an,patchMysql2Client:()=>un,patchOpenAIClient:()=>Qe,patchPgClient:()=>ln,patchRedisClient:()=>cn,patchVertexGenerativeModel:()=>en,simulateUser:()=>On,startHttpTrace:()=>Cn,startSpan:()=>_n,startTrace:()=>vn,traceFunction:()=>Rn,withTrace:()=>En});function R(){if(!N)throw new Error("[evalkit] call evalkit.init() before using the SDK");return N}function Xe(n){return N&&N.destroy(),N=new U(n),ze(N),N}function Qe(n,t){M(R(),n.chat.completions,t);}function Ye(n,t){q(R(),n.messages,t);}function Ze(n){et(R(),n);}function tn(n){at(R(),n.messages);}function en(n){it(R(),n);}function nn(n){nt(R(),n);}function rn(n){rt(R(),n);}function on(n){st(R(),n);}function sn(){return r(R())}function an(n){ft(R(),n);}function cn(n){Q(R(),n);}function pn(n){Y(R(),n);}function ln(n){Z(R(),n);}function un(n){tt(R(),n);}function dn(n){return Ee(R(),n)}function mn(n){return Re(R(),n,go)}function fn(n){return Oe(R(),n)}function gn(n){return Ie(R(),n)}function yn(n){return Pe(R(),n)}function hn(){return new F(R())}function vn(n,t){return R().startTrace(n,t)}async function xn(){return R().flush()}function Cn(n,t,e){return R().startHttpTrace(n,t,e)}function _n(n,t,e){return R().startSpan(n,t,e)}function Rn(n,t,e,r=true){return R().traceFunction(n,t,e,r)}function kn(n){return (t,e,r)=>{let o=r.value,a=n??`${t.constructor?.name??"unknown"}.${String(e)}`,i;return r.value=function(...c){return i||(i=R().traceFunction(a,o)),i.apply(this,c)},r}}function Sn(n){return t=>{let e=t.prototype,r=n?.prefix??t.name;for(let o of Object.getOwnPropertyNames(e)){if(o==="constructor")continue;let a=Object.getOwnPropertyDescriptor(e,o);if(!a||typeof a.value!="function")continue;let i=a.value,c=`${r}.${o}`,s=null;Object.defineProperty(e,o,{...a,value:function(...p){return s||(s=R().traceFunction(c,i)),s.apply(this,p)}});}return t}}function En(n,t){return context.with(n,t)}function bn(){let n=trace.getActiveSpan();return n?.isRecording()?n.spanContext().traceId:void 0}function wn(n){return Qt(R(),n)}function On(n){return Yt(R(),n)}function go(n){return I(n)}var N,yo,Wt=b(()=>{lt();Zt();St();L();bt();mt();Ot();Tt();Kt();Pt();Mt();qt();jt();Nt();Gt();t();Bt();ke();be();Te();Ke();Me();Ht();We();St();Ht();lt();N=null;yo={init:Xe,evaluate:G,generateScenarios:wn,simulateUser:On,patchOpenAIClient:Qe,patchAnthropicClient:Ye,patchBedrockClient:Ze,patchAnthropicVertexClient:tn,patchVertexGenerativeModel:en,patchCohereClient:nn,patchGoogleAIModel:rn,patchGoogleGenAIModels:on,langchainHandler:sn,patchMongooseClient:an,patchRedisClient:cn,patchAxiosClient:pn,patchPgClient:ln,patchMysql2Client:un,expressMiddleware:dn,fastifyPlugin:mn,koaMiddleware:fn,honoMiddleware:gn,hapiPlugin:yn,createNestjsInterceptor:hn,startTrace:vn,startHttpTrace:Cn,startSpan:_n,traceFunction:Rn,TraceMethod:kn,Traced:Sn,withTrace:En,currentTraceId:bn,flush:xn};});Wt();export{U as EvalKitClient,F as EvalKitInterceptor,kn as TraceMethod,Sn as Traced,hn as createNestjsInterceptor,bn as currentTraceId,yo as default,G as evaluate,dn as expressMiddleware,mn as fastifyPlugin,xn as flush,wn as generateScenarios,yn as hapiPlugin,gn as honoMiddleware,Xe as init,fn as koaMiddleware,sn as langchainHandler,Ye as patchAnthropicClient,tn as patchAnthropicVertexClient,pn as patchAxiosClient,Ze as patchBedrockClient,nn as patchCohereClient,rn as patchGoogleAIModel,on as patchGoogleGenAIModels,an as patchMongooseClient,un as patchMysql2Client,Qe as patchOpenAIClient,ln as patchPgClient,cn as patchRedisClient,en as patchVertexGenerativeModel,On as simulateUser,Cn as startHttpTrace,_n as startSpan,vn as startTrace,Rn as traceFunction,En as withTrace};
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 $n(n,t){if(t.length===0)return {score:1,lcsLength:0};let e=n.length,r=t.length,o=Array.from({length:e+1},()=>new Array(r+1).fill(0));for(let i=1;i<=e;i++)for(let c=1;c<=r;c++)n[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 a=o[e][r];return {score:a/t.length,lcsLength:a}}function Gn(n,t){if(n.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(n.length===0||t.length===0)return {score:0,precision:0,recall:0};let e=new Set(n),r=new Set(t),o=new Set([...e].filter(s=>r.has(s))),a=o.size/e.size,i=o.size/r.size;return {score:a+i===0?0:2*a*i/(a+i),precision:a,recall:i}}function Hn(n,t){if(t.length===0)return {score:1,called:0,total:0};let e=new Set(n),r=t.filter(o=>e.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function Ln(n,t){if(t.length===0)return {score:1,matched:[],missing:[]};let e=n.toLowerCase(),r=t.filter(a=>e.includes(a.toLowerCase())),o=t.filter(a=>!e.includes(a.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function Un(n,t){let e={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let a=n.toLowerCase(),i=t.requiredTerms.every(c=>a.includes(c.toLowerCase()));e.requiredTerms=i,r.push(i);}if(t.hasCitations!==void 0){let a=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(n);e.hasCitations=t.hasCitations?a:!a,r.push(e.hasCitations);}if(t.slideCount!==void 0){let a=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(n.match(a)??[]).length===t.slideCount;e.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:e}:{score:r.filter(Boolean).length/r.length,checks:e}}function Vn(n,t){if(n.length===0)return {score:1,relevant:0,total:0};let e=new Set(t),r=n.filter(o=>e.has(o)).length;return {score:r/n.length,relevant:r,total:n.length}}function Fn(n,t){if(t.length===0)return {score:1,covered:0,total:0};let e=new Set(n),r=t.filter(o=>e.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function G(n){let t=new Set(n.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),e=(n.toolCalls??[]).map(s=>s.name),r=n.expectedTools??[],o={},a={};if(t.has("tool_trajectory")&&r.length>0){let s=$n(e,r);o.tool_trajectory=s.score,a.tool_trajectory={lcsLength:s.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(e.length>0||r.length>0)){let s=Gn(e,r);o.tool_f1=s.score,a.tool_f1={precision:s.precision,recall:s.recall};}if(t.has("tool_correctness")&&r.length>0){let s=Hn(e,r);o.tool_correctness=s.score,a.tool_correctness={called:s.called,total:s.total};}let i=n.constraints?.requiredTerms??[];if(t.has("response_match")&&i.length>0){let s=Ln(n.output,i);o.response_match=s.score,a.response_match={matched:s.matched,missing:s.missing};}if(t.has("constraint_compliance")&&n.constraints){let s=Un(n.output,n.constraints);o.constraint_compliance=s.score,a.constraint_compliance={checks:s.checks};}if(t.has("contextual_precision")&&n.retrievedContext!==void 0&&n.expectedContext!==void 0){let s=Vn(n.retrievedContext,n.expectedContext);o.contextual_precision=s.score,a.contextual_precision={relevant:s.relevant,total:s.total};}if(t.has("contextual_recall")&&n.retrievedContext!==void 0&&n.expectedContext!==void 0){let s=Fn(n.retrievedContext,n.expectedContext);o.contextual_recall=s.score,a.contextual_recall={covered:s.covered,total:s.total};}let c={scores:o,details:a};try{let s=(Wt(),d(zt)),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}=s.startSpan("evaluation",p);d$1("OK");}catch{}return c}var ut=b(()=>{});function dt(n){return randomBytes(n).toString("hex")}function Xt(n){return typeof n=="function"?{name:n.name||"tool"}:typeof n=="string"||n&&typeof n=="object"?n:String(n)}async function Qt(n,t){let e=(t.apiUrl??process.env.EVALKIT_API_URL??n.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(Xt)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(Xt)),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);let o=await fetch(e+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":n.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(n){let t=n.turns??n.messages??[],e=[];for(let r of t)typeof r=="string"?e.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&e.push(String(r.content));return e.length===0&&n.starting_prompt&&e.push(String(n.starting_prompt)),e}function Wn(n,t,e,r){let o=Array.from(new Set([...n.constraints?.required_terms??[],...n.target_keywords??[]])),a={};o.length&&(a.requiredTerms=o),n.constraints?.has_citations!==void 0&&(a.hasCitations=n.constraints.has_citations);try{return G({output:t,toolCalls:e,expectedTools:n.expected_tools??[],constraints:a,metrics:r}).scores}catch{return {}}}async function Xn(n,t,e$1,r){let o=e$1.name??"scenario",a=e$1.scenario_id??"scn_"+dt(6),i="sess_"+dt(6),c=zn(e$1).slice(0,r.maxTurns),s={...e$1.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:p,end:d,ctx:u}=n.startTrace(`scenario:${o}`,{"evalkit.session_id":i});e.set(p,{simulationId:r.simulationId,runId:r.runId,scenarioId:a});let l="OK",m,f$1=[],g=[],y=0,h={};try{await context.with(u,async()=>{for(let R=0;R<c.length;R++){let A={message:c[R],sessionId:i,state:s,turn:R+1},O=await t.entrypoint(A);O&&typeof O=="object"&&"text"in O?(f$1.push(O.text),O.toolCalls&&g.push(...O.toolCalls)):f$1.push(String(O)),y++;}let k=g.length?g:f.get(p)??[];h=Wn(e$1,f$1.join(`
2
+ `),k,t.metrics);});}catch(k){l="ERROR",m=k?.message??String(k);}finally{d(l);}let v={scenarioId:a,name:o,status:l,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:p}}async function Yt(n,t){let e$1="sim_"+dt(8),r="run_"+dt(8),o=t.maxTurns??12,a=[],i=[];for(let c of t.scenarios){let{result:s,traceId:p}=await Xn(n,t,c,{simulationId:e$1,runId:r,maxTurns:o});a.push(s),i.push(p);}await n.flush();for(let c of i)e.delete(c),f.delete(c);return {simulationId:e$1,runId:r,results:a}}var Zt=b(()=>{g();ut();});var K,te=b(()=>{(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.FAILED=1]="FAILED";})(K||(K={}));});var ee=b(()=>{te();});function kt(n){return n[0]*1e3+n[1]/1e6}function Qn(n){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[n]??"INTERNAL"}function Yn(n){return n===1?"OK":n===2?"ERROR":"UNSET"}function Zn(n){let t={};for(let[e,r]of Object.entries(n))e.startsWith("evalkit.")||e==="gen_ai.system"||r!=null&&(t[e]=r);return t}function re(n){return new Promise(t=>setTimeout(t,n))}var ne,mt,oe=b(()=>{ee();g();ne=3,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,e){if(this.disabled){e({code:K.FAILED});return}let r=t.map(a=>this.toEnvelope(a)),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 a=>{if(!a.ok){let i=await a.text().catch(()=>"(no body)");a.status===401||a.status===403?(this.authFailures++,this.authFailures>=ne?(this.disabled=true,console.error(`[evalkit] export rejected ${a.status}: ${i} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${a.status} (auth failure ${this.authFailures}/${ne})`)):console.error(`[evalkit] export failed ${a.status}: ${i}`),e({code:K.FAILED});return}if(this.authFailures=0,this.debug){let i=await a.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${i.status}`);}e({code:K.SUCCESS});}).catch(a=>{console.error("[evalkit] export network error:",a),e({code:K.FAILED});});}async fetchWithRetry(t,e,r=3){let o=[200,600,1800],a;for(let i=0;i<=r;i++)try{let c=await fetch(t,e);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 re(o[i]??1800);else return c}catch(c){a=c,i<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${i+1}/${r}:`,c),await re(o[i]??1800));}throw a}shutdown(){return Promise.resolve()}toEnvelope(t){let e$1=t.spanContext(),r=t.attributes,o=kt(t.startTime),a=kt(t.endTime),i=t.events.map(p=>({name:p.name,timestamp:new Date(kt(p.time)).toISOString(),attributes:p.attributes})),c={traceId:e$1.traceId,spanId:e$1.spanId,parentSpanId:t.parentSpanId,spanKind:Qn(t.kind),spanType:r["evalkit.span_type"]??"log",status:Yn(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(a-o),startTime:new Date(o).toISOString(),endTime:new Date(a).toISOString(),events:i.length>0?i:void 0,attributes:Zn(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"]},s=e.get(e$1.traceId);return s&&(c.isSimulation=true,c.simulationId=s.simulationId,c.scenarioId=s.scenarioId,c.runId=s.runId),c}};});function L(n,t=sr){let e;try{e=JSON.stringify(n);}catch{}if(e===void 0)try{e=String(n);}catch{e="<unserializable>";}return e.length>t?e.slice(0,t)+"\u2026":e}var or,sr,U,St=b(()=>{oe();or="0.1.26",sr=4096;U=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 e=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(e,{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":or};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,e){let r=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...e}},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,e,r){let o=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":e.method,"http.url":e.url,...e.headers?{"http.request.headers":JSON.stringify(e.headers)}:{},...e.requestBody!==void 0?{"http.request.body":JSON.stringify(e.requestBody)}:{},...this.metaAttributes(),...r}},context.active()),a=trace.setSpan(context.active(),o);return {traceId:o.spanContext().traceId,ctx:a,end:(c="OK",s)=>{s?.statusCode!==void 0&&o.setAttribute("http.status_code",s.statusCode),s?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(s.body)),s?.headers&&o.setAttribute("http.response.headers",JSON.stringify(s.headers)),o.setStatus({code:c==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}startSpan(t,e,r){let o=this.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...e}},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,e,r,o=true){let a=this;return function(...i){let c={"evalkit.span_type":"function_call",...r};o&&i.length&&(c["function.args"]=L(i));let{ctx:s,end:p}=a.startSpan(t,c),d;try{d=context.with(s,()=>e.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(s)?.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(s)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"function.result":L(d)}:void 0),d)}}traceTool(t,e,r,o=true){let a=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"]=L(i.length===1?i[0]:i));let{ctx:s,end:p}=a.startSpan(t,c),d;try{d=context.with(s,()=>e.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(s)?.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(s)?.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 I(n){if(!n)return context.active();let t=n.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 V=b(()=>{});function lr(n,t){let e="",r=0,o=0,a=false;function i(c){a||(a=true,c?(t.recordException(c),t.setStatus({code:SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":e,"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(n,{get(c,s,p){if(s===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&&(e+=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,s,p);return typeof d=="function"?d.bind(c):d}})}function q(n,t,e,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...a){let i=a[0],c=e??context.active(),s=n.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":ur(i.messages??[])}},c),p=trace.setSpan(c,s);if(i?.stream){let m;try{m=await context.with(p,()=>o.apply(this,a));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw s.recordException(g),s.setStatus({code:SpanStatusCode.ERROR,message:g.message}),s.end(),f}return lr(m,s)}let d;try{d=await context.with(p,()=>o.apply(this,a));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw s.recordException(f),s.setStatus({code:SpanStatusCode.ERROR,message:f.message}),s.end(),m}let u=d.choices?.[0],l=u?.message.content??"";return s.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(n,s,h(d)),s.setStatus({code:SpanStatusCode.OK}),s.end(),d},t.create.__evalkit=true;}function ur(n){return n.map(t=>`${t.role}: ${t.content??""}`).join(`
3
+ `)}var bt=b(()=>{l();});function fr(n,t){let e="",r=0,o=0,a=false;function i(s){let p=s?.type;if(p==="content_block_delta"){let d=s.delta;d?.type==="text_delta"&&d.text&&(e+=d.text);}else p==="message_start"?r=s.message?.usage?.input_tokens??0:p==="message_delta"&&(o=s.usage?.output_tokens??0);}function c(s){a||(a=true,s?(t.recordException(s),t.setStatus({code:SpanStatusCode.ERROR,message:s.message})):(t.setAttributes({"evalkit.completion":e,"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(n,{get(s,p,d){if(p===Symbol.asyncIterator)return function(){let l=s[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(s,p,d);return typeof u=="function"?u.bind(s):u}})}function j(n,t,e){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let a=o[0],i$1=e??context.active(),c=gr(a.system,a.messages??[]),s=n.tracer.startSpan("messages.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","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":c}},i$1),p=trace.setSpan(i$1,s);if(a?.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 s.recordException(f),s.setStatus({code:SpanStatusCode.ERROR,message:f.message}),s.end(),m}return fr(l,s)}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 s.recordException(m),s.setStatus({code:SpanStatusCode.ERROR,message:m.message}),s.end(),l}let u=d.content.filter(l=>l.type==="text").map(l=>l.text??"").join("");return s.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(n,s,i(d.content)),s.setStatus({code:SpanStatusCode.OK}),s.end(),d},t.create.__evalkit=true;}function gr(n,t){let e=[];return n&&e.push(`system: ${n}`),e.push(...t.map(r=>`${r.role}: ${r.content}`)),e.join(`
4
+ `)}var ft=b(()=>{l();});function gt(n,t){let e=t.Query?.prototype;if(!e||e.__evalkit)return;let r=e.exec;e.exec=async function(){if(!trace.getActiveSpan()?.isRecording())return r.call(this);let a=this.op??"query",i=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=n.tracer.startSpan(`${a} ${i}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":a,"db.collection":i,"db.query":JSON.stringify(this._conditions??{})}},context.active());try{let s=await r.call(this);return c.setStatus({code:SpanStatusCode.OK}),c.end(),s}catch(s){let p=s instanceof Error?s:new Error(String(s));throw c.recordException(p),c.setStatus({code:SpanStatusCode.ERROR,message:p.message}),c.end(),s}},e.__evalkit=true;}var Ot=b(()=>{});function Y(n,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 a=r[o];r[o]=async function(i,...c){if(!trace.getActiveSpan()?.isRecording())return a.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=n.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 a.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 Tt=b(()=>{});function T(n){let t={};for(let[e,r]of Object.entries(n))kr.test(e)||r!==void 0&&(t[e]=Array.isArray(r)?r.join(", "):String(r));return t}var kr,At=b(()=>{kr=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var F,It=b(()=>{F=new Map;});function Z(n,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let e=t.create.bind(t);t.create=function(...r){let o=e(...r);return Z(n,o),o};}t.interceptors.request.use(e=>{let r=(e.baseURL?e.baseURL.replace(/\/$/,""):"")+(e.url??"");if(br.some(d=>d.test(r))||!trace.getActiveSpan()?.isRecording())return e;let a=e.url??"";try{a=new URL(r,e.baseURL??"http://localhost").pathname;}catch{}let i=(e.method??"get").toUpperCase(),c=T(e.headers??{}),s=n.tracer.startSpan(`${i} ${a}`,{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)}:{},...e.data!==void 0?{"http.request.body":typeof e.data=="string"?e.data.slice(0,n.options.maxBodyBytes):JSON.stringify(e.data).slice(0,n.options.maxBodyBytes)}:{}}},context.active()),p=s.spanContext();return e.headers=e.headers??{},e.headers.traceparent=`00-${p.traceId}-${p.spanId}-01`,e.headers["x-evalkit-span-id"]=p.spanId,F.set(p.spanId,s),e.__evalkitSpan=s,e.__evalkitSpanId=p.spanId,e}),t.interceptors.response.use(e=>{let r=e.config?.__evalkitSpan;if(e.config?.__evalkitSpanId&&F.delete(e.config.__evalkitSpanId),r){let o=T(e.headers??{}),a=e.data,i;a!=null&&(i=(typeof a=="string"?a:JSON.stringify(a)).slice(0,n.options.maxBodyBytes)),r.setAttributes({"http.status_code":e.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 e},e=>{let r=e.config?.__evalkitSpan;if(e.config?.__evalkitSpanId&&F.delete(e.config.__evalkitSpanId),r){let o=e.response?.status??0,a=T(e.response?.headers??{}),i=e.response?.data,c;i!=null&&(c=(typeof i=="string"?i:JSON.stringify(i)).slice(0,n.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":e.message,...Object.keys(a).length?{"http.response.headers":JSON.stringify(a)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(e instanceof Error?e:new Error(String(e))),r.setStatus({code:SpanStatusCode.ERROR,message:e.message}),r.end();}throw e});}}var br,Kt=b(()=>{At();It();br=[/\/v1\/ingest/,/\/health(z)?$/];});function tt(n,t){let e=t?.prototype??Object.getPrototypeOf(t);if(!e||e.__evalkit_pg)return;let r=e.query;typeof r=="function"&&(e.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=n.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,k)=>{v?(m.recordException(v),m.setStatus({code:SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",k?.rowCount??0),m.setStatus({code: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: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})},e.__evalkit_pg=true);}var Pt=b(()=>{});function et(n,t){let e=t?.prototype??Object.getPrototypeOf(t);if(!(!e||e.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=e[r];typeof o=="function"&&(e[r]=function(...a){if(!trace.getActiveSpan()?.isRecording())return o.apply(this,a);let c=typeof a[0]=="string"?a[0]:a[0]?.sql??"query",s=Array.isArray(a[1])?a[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=n.tracer.startSpan(m,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...s!==void 0?{"db.params":JSON.stringify(s).slice(0,1024)}:{},...l?{"db.sql.table":l}:{}}},context.active()),g=a[a.length-1];if(typeof g=="function"){let h=g,v=a.slice(0,-1).concat([(k,R,A)=>{k?(f.recordException(k),f.setStatus({code:SpanStatusCode.ERROR,message:k.message}),f.setAttribute("error.message",k.message)):(f.setAttribute("db.rows_affected",Array.isArray(R)?R.length:R?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK})),f.end(),h(k,R,A);}]);return o.apply(this,v)}let y=o.apply(this,a);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)});}e.__evalkit_mysql2=true;}}var Mt=b(()=>{});function qr(n){if(!n||typeof n!="object")return false;let t=n.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function nt(n,t,e){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let a=o[0];if(!qr(a))return r.apply(this,o);let i=a.input,c=i?.modelId??"unknown",s=c.split(".")[0]??"bedrock",p=i?.system?.map(v=>v.text).join(`
5
+ `)??"",d=i?.messages?.map(v=>`${v.role}: ${v.content.map(k=>k.text??"").join("")}`)??[],u=[p?`system: ${p}`:"",...d].filter(Boolean).join(`
6
+ `),l=i?.inferenceConfig??{},m=context.active(),f=n.tracer.startSpan("converse",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":s,"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 k=v instanceof Error?v:new Error(String(v));throw f.recordException(k),f.setStatus({code: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:SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}var qt=b(()=>{});function rt(n,t,e){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let a=o[0];if(a?.stream)return r.apply(this,o);let i=a?.chatHistory?.map(l=>`${l.role}: ${l.message??""}`)??[],c=[a?.preamble?`system: ${a.preamble}`:"",...i,`user: ${a?.message??""}`].filter(Boolean).join(`
7
+ `),s=context.active(),p=n.tracer.startSpan("chat",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":a?.model??"unknown",...a?.temperature!=null&&{"gen_ai.request.temperature":a.temperature},...a?.maxTokens!=null&&{"gen_ai.request.max_tokens":a.maxTokens},"evalkit.prompt":c}},s),d=trace.setSpan(s,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":a?.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 jt=b(()=>{});function ot(n,t,e){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...a){let i=a[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(k=>k.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
+ `);}let s=context.active(),p=n.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}},s),d=trace.setSpan(s,p),u;try{u=await context.with(d,()=>r.apply(this,a));}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 Nt=b(()=>{});function he(n){return n?.text??""}function Gr(n){if(typeof n=="string")return n;if(Array.isArray(n))return n.map(t=>{if(typeof t=="string")return t;let e=t,r=e.role??"user",o=(e.parts??[]).map(he).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
+ `);if(n&&typeof n=="object"){let t=n;if(t.parts)return (t.parts??[]).map(he).join("")}return n!=null?String(n):""}function Hr(n){let t=n?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(e=>e?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function ve(n){let t=Hr(n?.config),e=Gr(n?.contents);return [t?`system: ${t}`:"",e].filter(Boolean).join(`
10
+ `)}function xe(n){let t=[];for(let e of n?.candidates??[])for(let r of e.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):n?.text??""}function Ce(n,t,e){Bt&&k(Bt,t,j$1(n));}function at(n,t,e){if(Bt=n,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let a=o[0]??{},i=a.model??"unknown",c=context.active(),s=n.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"evalkit.prompt":ve(a)}},c),p=trace.setSpan(c,s),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw s.recordException(l),s.setStatus({code:SpanStatusCode.ERROR,message:l.message}),s.end(),u}s.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":xe(d)});try{Ce(d,s,s.spanContext().traceId);}catch{}return s.setStatus({code:SpanStatusCode.OK}),s.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let a=o[0]??{},i=a.model??"unknown",c=context.active(),s=n.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":ve(a)}},c),p=trace.setSpan(c,s),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw s.recordException(m),s.setStatus({code:SpanStatusCode.ERROR,message:m.message}),s.end(),l}async function*u(){let l=[],m=0,f=0;try{for await(let g of d){try{let y=xe(g);y&&l.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Ce(g,s,s.spanContext().traceId);}catch{}yield g;}s.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":l.join("")}),s.setStatus({code:SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw s.recordException(y),s.setStatus({code:SpanStatusCode.ERROR,message:y.message}),g}finally{s.end();}}return u()},t.generateContentStream.__evalkit=true;}}var Bt,$t=b(()=>{l();Bt=null;});function it(n,t,e){j(n,t,e);}function ct(n,t,e){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...a){let i=a[0],c=i?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",s=i?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],p=[c?`system: ${c}`:"",...s].filter(Boolean).join(`
11
+ `),d=context.active(),u=n.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,a));}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 Gt=b(()=>{ft();});function Re(n,t={},e){function r(o,a,i){let c={...t,...a};o.addHook("onRequest",(s,p,d)=>{let u=s.routerPath??s.routeOptions?.url??s.url??"/",l=typeof c.name=="function"?c.name(s):c.name??`${String(s.method??"GET")} ${String(u)}`,m=s.headers?.traceparent,f=e?e(m):context.active(),{traceId:g,end:y,ctx:h}=context.with(f,()=>n.startHttpTrace(l,{method:String(s.method??"GET"),url:String(s.url??"/"),headers:s.headers,requestBody:void 0}));s._evalkitCtx=h,s._evalkitTraceId=g,s._evalkitEnd=y,s._evalkitEnded=false,context.with(h,d);}),o.addHook("preHandler",(s,p,d)=>{if(s._evalkitCtx&&s.body!==void 0){let u=trace.getActiveSpan();if(u?.isRecording())try{u.setAttribute("http.request.body",typeof s.body=="string"?s.body.slice(0,n.options.maxBodyBytes):JSON.stringify(s.body).slice(0,n.options.maxBodyBytes));}catch{}}context.with(s._evalkitCtx??context.active(),d);}),o.addHook("onSend",(s,p,d,u)=>{try{if(d!=null){let l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,n.options.maxBodyBytes);s._evalkitRespBody=l;}}catch{}u(null,d);}),o.addHook("onResponse",(s,p,d)=>{if(typeof s._evalkitEnd=="function"&&!s._evalkitEnded){s._evalkitEnded=true;let u=p.statusCode??200;s._evalkitEnd(u>=400?"ERROR":"OK",{statusCode:u,body:s._evalkitRespBody});}d();}),o.addHook("onError",(s,p,d,u)=>{typeof s._evalkitEnd=="function"&&!s._evalkitEnded&&(s._evalkitEnded=true,s._evalkitEnd("ERROR",{statusCode:p.statusCode??500})),u();}),i();}return r[Symbol.for("skip-override")]=true,r}var Se=b(()=>{});function be(n,t){return (e,r,o)=>{let a=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method)} ${String(e.route?.path??e.path??e.url)}`,i=I(e.headers?.traceparent),{end:c,ctx:s,traceId:p}=context.with(i,()=>n.startHttpTrace(a,{method:String(e.method??"GET"),url:String(e.originalUrl??e.url??"/"),headers:e.headers,requestBody:e.body}));e._evalkitCtx=s,e._evalkitTraceId=p;let d=trace.getSpan(s)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",p),r.setHeader?.("traceparent",`00-${p}-${d}-01`);let u=n.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,k;if(l.length)try{k=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:k}),y.apply(r,h)},context.with(s,()=>o());}}var we=b(()=>{V();});function Te(n,t){return async(e,r)=>{let o=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method??"GET")} ${String(e.path??"/")}`,a=I(e.request?.headers?.traceparent),{end:i,ctx:c}=context.with(a,()=>n.startHttpTrace(o,{method:String(e.method??"GET"),url:String(e.href??e.url??"/"),headers:e.request?.headers,requestBody:e.request?.body}));e._evalkitCtx=c;try{await context.with(c,r);let s=e.status??200,p;try{let d=e.body;d!=null&&(p=(typeof d=="string"?d:JSON.stringify(d)).slice(0,n.options.maxBodyBytes));}catch{}i(s>=400?"ERROR":"OK",{statusCode:s,body:p});}catch(s){throw i("ERROR",{statusCode:e.status??500}),s}}}var Ae=b(()=>{V();});function Ke(n,t){return async(e,r)=>{let o=e.req,a=o.url??"/",i=a;try{i=new URL(a).pathname;}catch{}let c=typeof t?.name=="function"?t.name(e):t?.name??`${String(o.method??"GET")} ${i}`,s=I(o.header("traceparent")),{end:p,ctx:d}=context.with(s,()=>n.startHttpTrace(c,{method:String(o.method??"GET"),url:a,headers:Object.fromEntries(o.raw?.headers??[])}));try{await context.with(d,r);let u=e.res?.status??200,l;try{if(e.res&&typeof e.res.clone=="function"){let m=await e.res.clone().text();m&&(l=m.slice(0,n.options.maxBodyBytes));}}catch{}p(u>=400?"ERROR":"OK",{statusCode:u,body:l});}catch(u){throw p("ERROR",{statusCode:500}),u}}}var Pe=b(()=>{V();});function Me(n,t){return {name:"@evalkit/hapi",register(e){let r=new WeakMap;e.ext("onRequest",(o,a)=>{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:s,ctx:p}=context.with(c,()=>n.startHttpTrace(i,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:s,ctx:p}),a.continue}),e.ext("onPreResponse",(o,a)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,s;try{let p=o.response?.source??o.response?.result;p!=null&&(s=(typeof p=="string"?p:JSON.stringify(p)).slice(0,n.options.maxBodyBytes));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:s}),r.delete(o);}return a.continue});}}}var qe=b(()=>{V();});var D,Ht=b(()=>{D=class{constructor(t){this.client=t;}intercept(t,e){let r=t.switchToHttp?.();if(!r)return e.handle();let o=r.getRequest(),a=r.getResponse(),i=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:s}=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(a&&typeof a.write=="function"){let f=a.write.bind(a);a.write=function(g,...y){return l(g),f(g,...y)};}if(a&&typeof a.end=="function"){let f=a.end.bind(a);a.end=function(g,...y){return l(g),f(g,...y)};}let m=context.with(c,()=>e.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{s("ERROR"),f.error?.(g);},complete:()=>{let g=a?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,p).toString("utf-8");}catch{}s(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function Xr(n,t){let e=globalThis.Reflect;if(!e||typeof e.defineMetadata!="function")return;let r=typeof e.getOwnMetadataKeys=="function"?e.getOwnMetadataKeys:e.getMetadataKeys,o=typeof e.getOwnMetadata=="function"?e.getOwnMetadata:e.getMetadata;if(typeof r!="function"||typeof o!="function")return;let a=[];try{a=r.call(e,n)||[];}catch{return}for(let i of a)try{e.defineMetadata(i,o.call(e,i,n),t);}catch{}}function je(n,t,e){let r=e?.include??Wr,o=e?.captureIO??true,a=new Set,i=0,c=[...t.getProviders(),...t.getControllers()];for(let s of c){let p=s?.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||a.has(u))){a.add(u);for(let l of Object.getOwnPropertyNames(u)){if(zr.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=n.traceFunction(`${d}.${l}`,f,void 0,o);Xr(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 zr,Wr,Ne=b(()=>{zr=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),Wr=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function Lt(n){return Qr.some(t=>t.test(n))}function Yr(n,t,e){let r="",o="GET";if(typeof n=="string")r=n,o=(t?.method??"GET").toUpperCase();else if(n instanceof URL)r=n.href,o=(t?.method??"GET").toUpperCase();else {let i=n.hostname??n.host??"localhost",c=n.port?`:${n.port}`:"",s=n.path??"/";r=`${e}://${i}${c}${s}`,o=(n.method??t?.method??"GET").toUpperCase();}let a=r;try{a=new URL(r.startsWith("http")?r:`${e}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:a}}function Ge(n){let t,e;try{let a$1=typeof a<"u"?a:createRequire(import.meta.url);t=a$1("http"),e=a$1("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:e,scheme:"https"}];for(let{mod:a,scheme:i}of r){let s=function(p,d,u){let l=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=Yr(p,l,i);if(Lt(m)||!trace.getActiveSpan()?.isRecording())return c.call(a,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 S=F.get(String(v));if(S){let x=T({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&S.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(a,p,d,u)}let k=T(h),R=n.tracer.startSpan(`${f} ${g}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},context.active()),A=c.call(a,p,d,u),O=R.spanContext();return A.setHeader("traceparent",`00-${O.traceId}-${O.spanId}-01`),A.on("response",S=>{let x=S.statusCode??0;R.setAttributes({"http.status_code":x,...S.headers?{"http.response.headers":JSON.stringify(T(S.headers))}:{}}),R.setStatus({code:x>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),R.end();}),A.on("error",S=>{R.setAttributes({"http.status_code":0,"error.message":S.message}),R.recordException(S instanceof Error?S:new Error(String(S))),R.setStatus({code:SpanStatusCode.ERROR,message:S.message}),R.end();}),A};let c=a.request;c.__evalkit||(s.__evalkit=true,Object.defineProperty(a,"request",{value:s,writable:true,configurable:true}));}}function He(n){let t;try{t=(typeof a<"u"?a:createRequire(import.meta.url))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let e=t.Server.prototype.emit;function r(o,...a){if(o!=="request")return e.call(this,o,...a);let i=a[0],c=a[1],s=i.url??"/";if(Lt(s))return e.call(this,o,...a);if(trace.getActiveSpan()?.isRecording())return e.call(this,o,...a);let p=(i.method??"GET").toUpperCase(),d=s;try{d=new URL(s,"http://localhost").pathname;}catch{}let u=i.headers.traceparent,l=u?Zr(Array.isArray(u)?u[0]:u):context.active(),m=n.tracer.startSpan(`${p} ${d}`,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":p,"http.url":s,"http.request.headers":JSON.stringify(T(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=n.options.maxBodyBytes,h=[],v=0;i.on("data",x=>{try{if(x&&v<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(h.push(E),v+=E.length);}}catch{}}),i.on("end",()=>{if(h.length)try{let x=Buffer.concat(h).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.request.body",x);}catch{}});let k=[],R=0,A=x=>{try{if(x&&typeof x!="function"&&R<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(k.push(E),R+=E.length);}}catch{}},O=c.write.bind(c),S=c.end.bind(c);return c.write=function(x,...E){return A(x),O(x,...E)},c.end=function(x,...E){return A(x),S(x,...E)},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(T(x)));}catch{}if(k.length)try{let x=Buffer.concat(k).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,()=>e.call(this,o,...a))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function Zr(n){let t=n.split("-");if(t.length<4)return context.active();let[,e,r,o]=t;if(!e||!r)return context.active();try{let a={traceId:e,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return trace.setSpanContext(context.active(),a)}catch{return context.active()}}function Le(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let n=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(e,r){let o=typeof e=="string"?e:e instanceof URL?e.href:e.url;if(Lt(o))return n(e,r);let a=trace.getActiveSpan();if(!a?.isRecording())return n(e,r);let i=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let s={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{s[y]=g;});let p=T(s),d=a.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&&a.addEvent("http.fetch.request",{"http.method":i,"http.url":o,"http.request.headers":JSON.stringify(p)});try{let f=await n(e,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),a.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(T(g))}),f}catch(f){throw a.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var Qr,Ue=b(()=>{At();It();Qr=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function Fe(n){if(console.__evalkit)return;let t=console.log.bind(console),e=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),a=(i,c)=>{let s=trace.getActiveSpan();if(s?.isRecording())s.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let p=n.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),a("INFO",o(i));},console.warn=(...i)=>{e(...i),a("WARN",o(i));},console.error=(...i)=>{r(...i),a("ERROR",o(i));},console.__evalkit=true;}var De=b(()=>{});function ze(n,t,e){let r=trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":e.message,"error.stack":e.stack??"","log.level":"ERROR","log.message":`${t}: ${e.message}`}),r.recordException(e),r.setStatus({code:SpanStatusCode.ERROR,message:e.message});else {let o=n.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${e.message}`,"error.message":e.message,"error.stack":e.stack??""}},context.active());o.recordException(e),o.setStatus({code:SpanStatusCode.ERROR,message:e.message}),o.end();}}function We(n){typeof process>"u"||(process.on("unhandledRejection",t=>{let e=t instanceof Error?t:new Error(String(t));ze(n,"error.unhandled_rejection",e);}),process.on("uncaughtException",t=>{ze(n,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var Xe=b(()=>{});function ao(n$1){let t=n("mongoose");t&&gt(n$1,t);}function io(n$1){let t=n("axios");t&&Z(n$1,t.default??t);}async function co(n){try{let e=o()("pg"),r=e.Client??e.default?.Client;if(r){tt(n,r);return}}catch{}try{let t=await m("pg"),e=t.Client??t.default?.Client;e&&tt(n,e);}catch{}}async function po(n){try{let t=o(),e=t("mysql2"),r=e.Connection??e.default?.Connection??t("mysql2/lib/connection");if(r){et(n,r);return}}catch{}try{let t=await m("mysql2"),e=t.Connection??t.default?.Connection;e&&et(n,e);}catch{}}async function lo(n){try{let e=o()("ioredis"),r=e.default??e.Redis??e;if(r?.prototype){Y(n,r);return}}catch{}try{let t=await m("ioredis"),e=t.default??t.Redis??t;e?.prototype&&Y(n,e);}catch{}}async function uo(n){try{let e=o()("openai"),o$1=(e.default??e.OpenAI??e)?.Chat?.Completions?.prototype;if(o$1){q(n,o$1);return}}catch{}try{let t=await m("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&q(n,r);}catch{}}async function mo(n){try{let e=o()("@anthropic-ai/sdk"),o$1=(e.default??e.Anthropic??e)?.Messages?.prototype;if(o$1){j(n,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&j(n,r);}catch{}}async function fo(n){try{let e=o()("@aws-sdk/client-bedrock-runtime"),o$1=(e.BedrockRuntimeClient??e.default?.BedrockRuntimeClient)?.prototype;if(o$1){nt(n,o$1);return}}catch{}try{let t=await m("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&nt(n,r);}catch{}}async function go(n){try{let e=o()("@anthropic-ai/sdk"),o$1=(e.AnthropicVertex??e.default?.AnthropicVertex)?.Messages?.prototype;if(o$1){it(n,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&it(n,r);}catch{}}async function yo(n){try{let e=o()("@google-cloud/vertexai"),o$1=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o$1){ct(n,o$1);return}}catch{}try{let t=await m("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ct(n,r);}catch{}}async function ho(n){try{let e=o()("cohere-ai"),o$1=(e.CohereClient??e.default?.CohereClient??e.default)?.prototype;if(o$1){rt(n,o$1);return}}catch{}try{let t=await m("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&rt(n,r);}catch{}}async function vo(n){try{let e=o()("@google/generative-ai"),o$1=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o$1){ot(n,o$1);return}}catch{}try{let t=await m("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ot(n,r);}catch{}}async function xo(n){try{let e=o()("@google/genai"),r=e.Models??e.default?.Models;if(r?.prototype){at(n,r.prototype);return}}catch{}try{let t=await m("@google/genai"),e=t.Models??t.default?.Models;e?.prototype&&at(n,e.prototype);}catch{}}async function Co(n){try{let e=o()("groq-sdk"),o$1=(e.default??e.Groq??e)?.Chat?.Completions?.prototype;if(o$1){q(n,o$1,void 0,"groq");return}}catch{}try{let t=await m("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&q(n,r,void 0,"groq");}catch{}}async function _o(n){try{let{patchLangChain:t}=await import('./langchain-CL5EBCAT.mjs');await t(n);}catch{}}function Qe(n){try{He(n);}catch{}try{Ge(n);}catch{}Le(),Fe(n),We(n),ao(n),io(n),Promise.all([uo(n),mo(n),fo(n),go(n),yo(n),ho(n),vo(n),xo(n),Co(n),_o(n),co(n),po(n),lo(n)]).catch(()=>{});}var Ye=b(()=>{p();bt();ft();qt();Gt();jt();Nt();$t();Ot();Pt();Mt();Tt();Kt();Ue();De();Xe();});var zt={};c(zt,{EvalKitClient:()=>U,EvalKitInterceptor:()=>D,TraceMethod:()=>wn,Traced:()=>On,createNestjsInterceptor:()=>Cn,currentTraceId:()=>Kn,default:()=>Eo,enableNestjsAutoTrace:()=>An,evaluate:()=>G,expressMiddleware:()=>gn,fastifyPlugin:()=>yn,flush:()=>kn,generateScenarios:()=>Pn,hapiPlugin:()=>xn,honoMiddleware:()=>vn,init:()=>Ze,koaMiddleware:()=>hn,langchainHandler:()=>pn,patchAnthropicClient:()=>en,patchAnthropicVertexClient:()=>rn,patchAxiosClient:()=>dn,patchBedrockClient:()=>nn,patchCohereClient:()=>sn,patchGoogleAIModel:()=>an,patchGoogleGenAIModels:()=>cn,patchMongooseClient:()=>ln,patchMysql2Client:()=>fn,patchOpenAIClient:()=>tn,patchPgClient:()=>mn,patchRedisClient:()=>un,patchVertexGenerativeModel:()=>on,simulateUser:()=>Mn,startHttpTrace:()=>Rn,startSpan:()=>Sn,startTrace:()=>_n,traceFunction:()=>En,traceObject:()=>Tn,traceTool:()=>bn,withTrace:()=>In});function _(){if(!B)throw new Error("[evalkit] call evalkit.init() before using the SDK");return B}function Ze(n){return B&&B.destroy(),B=new U(n),Qe(B),B}function tn(n,t){q(_(),n.chat.completions,t);}function en(n,t){j(_(),n.messages,t);}function nn(n){nt(_(),n);}function rn(n){it(_(),n.messages);}function on(n){ct(_(),n);}function sn(n){rt(_(),n);}function an(n){ot(_(),n);}function cn(n){at(_(),n);}function pn(){return r(_())}function ln(n){gt(_(),n);}function un(n){Y(_(),n);}function dn(n){Z(_(),n);}function mn(n){tt(_(),n);}function fn(n){et(_(),n);}function gn(n){return be(_(),n)}function yn(n){return Re(_(),n,So)}function hn(n){return Te(_(),n)}function vn(n){return Ke(_(),n)}function xn(n){return Me(_(),n)}function Cn(){return new D(_())}function _n(n,t){return _().startTrace(n,t)}async function kn(){return _().flush()}function Rn(n,t,e){return _().startHttpTrace(n,t,e)}function Sn(n,t,e){return _().startSpan(n,t,e)}function En(n,t,e,r=true){return _().traceFunction(n,t,e,r)}function bn(n,t,e,r=true){return _().traceTool(n,t,e,r)}function wn(n){return (t,e,r)=>{let o=r.value,a=n??`${t.constructor?.name??"unknown"}.${String(e)}`,i;return r.value=function(...c){return i||(i=_().traceFunction(a,o)),i.apply(this,c)},r}}function On(n){return t=>{let e=t.prototype,r=n?.prefix??t.name;for(let o of Object.getOwnPropertyNames(e)){if(o==="constructor")continue;let a=Object.getOwnPropertyDescriptor(e,o);if(!a||typeof a.value!="function")continue;let i=a.value,c=`${r}.${o}`,s=null;Object.defineProperty(e,o,{...a,value:function(...p){return s||(s=_().traceFunction(c,i)),s.apply(this,p)}});}return t}}function Tn(n,t){let e=_(),r=t?.prefix,o=t?.captureIO??true;for(let a of Object.keys(n)){let i=n[a];if(typeof i=="function"&&!i.__evalkitTraced){let c=r?`${r}.${a}`:a,s=e.traceFunction(c,i,void 0,o);s.__evalkitTraced=true,n[a]=s;}}return n}function An(n,t){return je(_(),n,t)}function In(n,t){return context.with(n,t)}function Kn(){let n=trace.getActiveSpan();return n?.isRecording()?n.spanContext().traceId:void 0}function Pn(n){return Qt(_(),n)}function Mn(n){return Yt(_(),n)}function So(n){return I(n)}var B,Eo,Wt=b(()=>{ut();Zt();St();V();bt();ft();Ot();Tt();Kt();Pt();Mt();qt();jt();Nt();$t();t();Gt();Se();we();Ae();Pe();qe();Ht();Ne();Ye();St();Ht();ut();B=null;Eo={init:Ze,evaluate:G,generateScenarios:Pn,simulateUser:Mn,patchOpenAIClient:tn,patchAnthropicClient:en,patchBedrockClient:nn,patchAnthropicVertexClient:rn,patchVertexGenerativeModel:on,patchCohereClient:sn,patchGoogleAIModel:an,patchGoogleGenAIModels:cn,langchainHandler:pn,patchMongooseClient:ln,patchRedisClient:un,patchAxiosClient:dn,patchPgClient:mn,patchMysql2Client:fn,expressMiddleware:gn,fastifyPlugin:yn,koaMiddleware:hn,honoMiddleware:vn,hapiPlugin:xn,createNestjsInterceptor:Cn,startTrace:_n,startHttpTrace:Rn,startSpan:Sn,traceFunction:En,traceTool:bn,traceObject:Tn,TraceMethod:wn,Traced:On,enableNestjsAutoTrace:An,withTrace:In,currentTraceId:Kn,flush:kn};});Wt();export{U as EvalKitClient,D as EvalKitInterceptor,wn as TraceMethod,On as Traced,Cn as createNestjsInterceptor,Kn as currentTraceId,Eo as default,An as enableNestjsAutoTrace,G as evaluate,gn as expressMiddleware,yn as fastifyPlugin,kn as flush,Pn as generateScenarios,xn as hapiPlugin,vn as honoMiddleware,Ze as init,hn as koaMiddleware,pn as langchainHandler,en as patchAnthropicClient,rn as patchAnthropicVertexClient,dn as patchAxiosClient,nn as patchBedrockClient,sn as patchCohereClient,an as patchGoogleAIModel,cn as patchGoogleGenAIModels,ln as patchMongooseClient,fn as patchMysql2Client,tn as patchOpenAIClient,mn as patchPgClient,un as patchRedisClient,on as patchVertexGenerativeModel,Mn as simulateUser,Rn as startHttpTrace,Sn as startSpan,_n as startTrace,En as traceFunction,Tn as traceObject,bn as traceTool,In as withTrace};
@@ -0,0 +1 @@
1
+ import {t}from'./chunk-S5ISUJPR.mjs';export{r as langchainCallbackHandler,q as langchainHandlerMethods,s as patchLangChain}from'./chunk-S5ISUJPR.mjs';t();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "syntropylabs-evalkit",
3
- "version": "0.1.24",
3
+ "version": "0.1.26",
4
4
  "description": "EvalKit TypeScript SDK — OpenTelemetry-based LLM observability and tracing",
5
5
  "license": "LicenseRef-Proprietary",
6
6
  "author": "Syntropy Labs",
@@ -49,6 +49,7 @@
49
49
  "build": "tsup src/index.ts --format cjs,esm --dts --clean --minify --treeshake --no-sourcemap",
50
50
  "dev": "tsup src/index.ts --format cjs,esm --dts --watch",
51
51
  "typecheck": "tsc --noEmit",
52
+ "test": "npm run build && node test/autotrace.e2e.mjs",
52
53
  "prepublishOnly": "npm run build"
53
54
  },
54
55
  "dependencies": {
@@ -1 +0,0 @@
1
- import {t}from'./chunk-XWAPTMKS.mjs';export{r as langchainCallbackHandler,q as langchainHandlerMethods,s as patchLangChain}from'./chunk-XWAPTMKS.mjs';t();