syntropylabs-evalkit 0.1.26 → 0.1.27

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
@@ -101,16 +101,20 @@ export const orders = evalkit.traceObject({ place, cancel }, { prefix: "orders"
101
101
  ### NestJS — trace the whole app automatically
102
102
 
103
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`:
104
+ method for you — no per-class decorators. One line in `main.ts`: pass the app and
105
+ the SDK resolves `DiscoveryService` itself (no `@nestjs/core` import needed):
105
106
 
106
107
  ```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
108
  const app = await NestFactory.create(AppModule);
111
- evalkit.enableNestjsAutoTrace(app.get(DiscoveryService));
109
+ evalkit.init({ subscriptionKey: "tk_live_…", serviceName: "orchestrator" });
110
+ await evalkit.enableNestjsAutoTrace(app); // ← the only line you add
111
+ await app.listen(5000);
112
112
  ```
113
113
 
114
+ Route metadata (`@Get`, `@Body`, guards) is preserved, so routing and auth are
115
+ unaffected. The call never throws — if discovery can't be resolved it's a no-op.
116
+ You can still pass a `DiscoveryService` directly if you prefer.
117
+
114
118
  > Auto-discovery is only possible where the framework has a registry (NestJS). For
115
119
  > Express / Fastify / Koa / Hono / Hapi, use `traceObject` / `traceFunction` on your
116
120
  > own modules — incoming HTTP and LLM/DB/HTTP calls are already auto-traced.
package/dist/index.d.mts CHANGED
@@ -335,23 +335,28 @@ declare function traceObject<T extends Record<string, any>>(obj: T, options?: {
335
335
  * NestJS is the one framework with a DI registry the SDK can enumerate; for
336
336
  * other frameworks use `traceObject` / `traceFunction` on your modules.
337
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));
338
+ * Usage (main.ts), after `const app = await NestFactory.create(...)` — one line,
339
+ * pass the app and the SDK resolves DiscoveryService itself (requires
340
+ * DiscoveryModule in AppModule, which Nest provides by default):
341
+ * await evalkit.enableNestjsAutoTrace(app);
341
342
  *
342
- * Returns the number of methods wrapped.
343
+ * You may also pass a DiscoveryService directly. Returns the number of methods
344
+ * wrapped (0 if discovery couldn't be resolved — never throws).
343
345
  */
344
- declare function enableNestjsAutoTrace(discovery: {
346
+ type DiscoveryService = {
345
347
  getProviders: () => Array<{
346
348
  instance?: unknown;
347
349
  }>;
348
350
  getControllers: () => Array<{
349
351
  instance?: unknown;
350
352
  }>;
353
+ };
354
+ declare function enableNestjsAutoTrace(appOrDiscovery: DiscoveryService | {
355
+ get: (token: unknown) => unknown;
351
356
  }, options?: {
352
357
  include?: RegExp;
353
358
  captureIO?: boolean;
354
- }): number;
359
+ }): Promise<number>;
355
360
  declare function withTrace<T>(ctx: Context, fn: () => Promise<T>): Promise<T>;
356
361
  /** Return the trace ID of the currently active span, or undefined if no span is active. */
357
362
  declare function currentTraceId(): string | undefined;
package/dist/index.d.ts CHANGED
@@ -335,23 +335,28 @@ declare function traceObject<T extends Record<string, any>>(obj: T, options?: {
335
335
  * NestJS is the one framework with a DI registry the SDK can enumerate; for
336
336
  * other frameworks use `traceObject` / `traceFunction` on your modules.
337
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));
338
+ * Usage (main.ts), after `const app = await NestFactory.create(...)` — one line,
339
+ * pass the app and the SDK resolves DiscoveryService itself (requires
340
+ * DiscoveryModule in AppModule, which Nest provides by default):
341
+ * await evalkit.enableNestjsAutoTrace(app);
341
342
  *
342
- * Returns the number of methods wrapped.
343
+ * You may also pass a DiscoveryService directly. Returns the number of methods
344
+ * wrapped (0 if discovery couldn't be resolved — never throws).
343
345
  */
344
- declare function enableNestjsAutoTrace(discovery: {
346
+ type DiscoveryService = {
345
347
  getProviders: () => Array<{
346
348
  instance?: unknown;
347
349
  }>;
348
350
  getControllers: () => Array<{
349
351
  instance?: unknown;
350
352
  }>;
353
+ };
354
+ declare function enableNestjsAutoTrace(appOrDiscovery: DiscoveryService | {
355
+ get: (token: unknown) => unknown;
351
356
  }, options?: {
352
357
  include?: RegExp;
353
358
  captureIO?: boolean;
354
- }): number;
359
+ }): Promise<number>;
355
360
  declare function withTrace<T>(ctx: Context, fn: () => Promise<T>): Promise<T>;
356
361
  /** Return the trace ID of the currently active span, or undefined if no span is active. */
357
362
  declare function currentTraceId(): string | undefined;
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 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(`
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 gt=_(()=>{});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,f=[],g=[],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?(f.push(O.text),O.toolCalls&&g.push(...O.toolCalls)):f.push(String(O)),y++;}let k=g.length?g:Q.get(l)??[];h=dr(e,f.join(`
2
+ `),k,t.metrics);});}catch(k){u="ERROR",m=k?.message??String(k);}finally{d(u);}let v={scenarioId:s,name:o,status:u,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:l}}async function 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();gt();});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 fr(n){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[n]??"INTERNAL"}function gr(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:fr(t.kind),spanType:r["evalkit.span_type"]??"log",status:gr(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.27",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 J=_(()=>{});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 fe(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 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: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,f=m.choices?.[0]?.delta?.content;f&&(e+=f),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(f){let g=f instanceof Error?f:new Error(String(f));throw a.recordException(g),a.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),a.end(),f}return Ir(m,a)}let d;try{d=await api.context.with(l,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:api.SpanStatusCode.ERROR,message:f.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 f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:api.SpanStatusCode.ERROR,message:f.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(Jr.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 Jr,Bt=_(()=>{Nt();jt();Jr=[/\/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()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,k)=>{v?(m.recordException(v),m.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",k?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK})),m.end(),y(v,k);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:api.SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},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}`,f=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()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(k,R,A)=>{k?(f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.setAttribute("error.message",k.message)):(f.setAttribute("db.rows_affected",Array.isArray(R)?R.length:R?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK})),f.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])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}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
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(`
6
+ `),u=i?.inferenceConfig??{},m=api.context.active(),f=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),g=api.trace.setSpan(m,f),y;try{y=await api.context.with(g,()=>r.apply(this,o));}catch(v){let k=v instanceof Error?v:new Error(String(v));throw f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return f.setAttributes({"gen_ai.response.model":c,"gen_ai.usage.input_tokens":y.usage?.inputTokens??0,"gen_ai.usage.output_tokens":y.usage?.outputTokens??0,"gen_ai.usage.total_tokens":y.usage?.totalTokens??0,"gen_ai.response.finish_reasons":y.stopReason?[y.stopReason]:[],"evalkit.completion":h}),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}var 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 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 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(g){let y=g instanceof Error?g:new Error(String(g));throw l.recordException(y),l.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),l.end(),g}let u=p?.response,m=u?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return l.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":u?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":u?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":u?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.generateContent.__evalkit=true;}var 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
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(`
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,fe(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,f=0;try{for await(let g of d){try{let y=Te(g);y&&u.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Ae(g,a,a.spanContext().traceId);}catch{}yield g;}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":u.join("")}),a.setStatus({code:api.SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw a.recordException(y),a.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),g}finally{a.end();}}return p()},t.generateContentStream.__evalkit=true;}}var Ft,Vt=_(()=>{Z();Ft=null;});function Dt(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,Jt=_(()=>{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 fo(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 go(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
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;
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":fo(s)});},handleLLMEnd(o,s){let{tin:i,tout:c}=yo(o),a=t.get(s);try{a&&j(n,a.span,ge(o));}catch{}r(s,"OK",{"evalkit.completion":go(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();Jt();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 f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),p.setStatus({code:api.SpanStatusCode.OK}),p.end(),m},t.generateContent.__evalkit=true;}var 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,f=e?e(m):api.context.active(),{traceId:g,end:y,ctx:h}=api.context.with(f,()=>n.startHttpTrace(u,{method:String(a.method??"GET"),url:String(a.url??"/"),headers:a.headers,requestBody:void 0}));a._evalkitCtx=h,a._evalkitTraceId=g,a._evalkitEnd=y,a._evalkitEnded=false,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,f=h=>{if(!(!h||m>=p))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(u.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,k;if(u.length)try{k=Buffer.concat(u).subarray(0,p).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:k}),y.apply(r,h)},api.context.with(a,()=>o());}}var Ue=_(()=>{J();});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 De=_(()=>{J();});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=_(()=>{J();});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=_(()=>{J();});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=f=>{if(!(!f||p>=l))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),p+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return u(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return u(g),f(g,...y)};}let m=api.context.with(c,()=>e.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{a("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,l).toString("utf-8");}catch{}a(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});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 f=m.value,g=n.traceFunction(`${d}.${u}`,f,void 0,o);Eo(f,g);try{Object.defineProperty(g,"name",{value:u,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(p,u,{...m,value:g}),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:f,pathname:g}=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(`${f} ${g}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},api.context.active()),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),f=api.trace.setSpan(u,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=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(f,()=>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((g,y)=>{a[y]=g;});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 f=await n(e,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(T(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var 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=Dt("mongoose");t&&kt(n,t);}function jo(n){let t=Dt("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 Do(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 Jo(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 fn(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),Do(n),Jo(n),zo(n),Wo(n),Xo(n),Bo(n),$o(n),Go(n)]).catch(()=>{});}var gn=_(()=>{Jt();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:()=>Dn,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:()=>Jn});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),fn(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}async function Dn(n,t){let e,r=n;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")e=n;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(e=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return e?Ye(C(),e,t):0}function Jn(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=_(()=>{gt();oe();At();J();Kt();Ct();Mt();qt();Bt();$t();Gt();Lt();Ht();Ut();Vt();zt();Wt();Ge();Ue();De();We();Qe();Xt();Ze();gn();At();Xt();gt();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:Dn,withTrace:Jn,currentTraceId:zn,flush:Bn};});te();exports.TraceMethod=Un;exports.Traced=Fn;exports.createNestjsInterceptor=Nn;exports.currentTraceId=zn;exports.enableNestjsAutoTrace=Dn;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=Jn;
package/dist/index.mjs CHANGED
@@ -1,12 +1,12 @@
1
- import {b,g,l,p,c,r,t,d,k,h,i,e,f,a,n,o,m,j as j$1}from'./chunk-S5ISUJPR.mjs';import {context,trace,SpanKind,SpanStatusCode,ROOT_CONTEXT}from'@opentelemetry/api';import {randomBytes}from'crypto';import {NodeTracerProvider}from'@opentelemetry/sdk-trace-node';import {BatchSpanProcessor}from'@opentelemetry/sdk-trace-base';import {Resource}from'@opentelemetry/resources';import {ATTR_SERVICE_NAME}from'@opentelemetry/semantic-conventions';import {createRequire}from'module';function $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(`
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 Dn(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=Dn(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.27",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
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(`
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 D,It=b(()=>{D=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,D.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&&D.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&&D.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
5
  `)??"",d=i?.messages?.map(v=>`${v.role}: ${v.content.map(k=>k.text??"").join("")}`)??[],u=[p?`system: ${p}`:"",...d].filter(Boolean).join(`
6
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
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
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
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
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};
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 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=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=D.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 De(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 Fe=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(),De(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();Fe();Xe();});var zt={};c(zt,{EvalKitClient:()=>U,EvalKitInterceptor:()=>F,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 F(_())}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}async function An(n,t){let e,r=n;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")e=n;else if(typeof r.get=="function")try{let a=await import('@nestjs/core');a.DiscoveryService&&(e=r.get(a.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return e?je(_(),e,t):0}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,F 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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "syntropylabs-evalkit",
3
- "version": "0.1.26",
3
+ "version": "0.1.27",
4
4
  "description": "EvalKit TypeScript SDK — OpenTelemetry-based LLM observability and tracing",
5
5
  "license": "LicenseRef-Proprietary",
6
6
  "author": "Syntropy Labs",