syntropylabs-evalkit 0.1.28 → 0.1.29

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
@@ -1,22 +1,25 @@
1
- # EvalKit TypeScript SDK
1
+ # EvalKit TypeScript SDK
2
2
 
3
- OpenTelemetry-based LLM observability, tracing, and evaluation for Node.js by [Syntropy Labs](https://syntropylabs.ai).
4
-
5
- One `init()` call auto-instruments your LLM providers (OpenAI, Anthropic, Bedrock, Cohere, Google, Vertex, LangChain), databases (Postgres, MySQL, MongoDB, Redis), and HTTP clients then ships traces to the EvalKit platform.
6
-
7
- > The Python SDK is published as [`syntropylabs-evalkit`](https://pypi.org/project/syntropylabs-evalkit/) on PyPI.
8
-
9
- ## Install
3
+ OpenTelemetry-based tracing and evaluation for Node.js LLM apps, by
4
+ [Syntropy Labs](https://syntropylabs.ai). A single `init()` call auto-instruments
5
+ your LLM providers, databases, and HTTP clients, then ships traces to the platform.
10
6
 
11
7
  ```bash
12
8
  npm install syntropylabs-evalkit
13
9
  ```
14
10
 
15
- Provider SDKs are **optional peer dependencies** install only what you use:
11
+ > The Python SDK ships as [`syntropylabs-evalkit`](https://pypi.org/project/syntropylabs-evalkit/) on PyPI.
16
12
 
17
- ```bash
18
- npm install openai @anthropic-ai/sdk
19
- ```
13
+ ## Contents
14
+
15
+ - [Quick start](#quick-start)
16
+ - [What gets traced](#what-gets-traced)
17
+ - [Framework middleware](#framework-middleware)
18
+ - [Trace your own code](#trace-your-own-code)
19
+ - [Manual spans](#manual-spans)
20
+ - [Offline evaluation](#offline-evaluation)
21
+ - [Scenario simulation](#scenario-simulation)
22
+ - [Configuration](#configuration)
20
23
 
21
24
  ## Quick start
22
25
 
@@ -24,18 +27,36 @@ npm install openai @anthropic-ai/sdk
24
27
  import evalkit from "syntropylabs-evalkit";
25
28
 
26
29
  evalkit.init({
27
- subscriptionKey: process.env.EVALKIT_SUBSCRIPTION_KEY!,
30
+ subscriptionKey: process.env.EVALKIT_SUBSCRIPTION_KEY!, // Dashboard → Settings → Tracing
28
31
  serviceName: "my-service",
29
32
  });
30
33
 
31
- // That's it — any OpenAI / Anthropic / DB / HTTP call from here is traced.
34
+ // Every OpenAI / Anthropic / DB / HTTP call from here on is traced automatically.
32
35
  ```
33
36
 
34
- > Call `init()` as early as possible (top of your entrypoint, before other imports run requests) so auto-instrumentation can hook the libraries.
37
+ Call `init()` as early as possible — at the top of your entrypoint, before other
38
+ modules run requests — so auto-instrumentation can hook the libraries.
39
+
40
+ ## What gets traced
41
+
42
+ | Category | Captured automatically |
43
+ | ----------- | ------------------------------------------------------------------- |
44
+ | LLM clients | OpenAI, Anthropic, Bedrock, Cohere, Google, Vertex, LangChain |
45
+ | HTTP | `fetch`, `axios`, `node:http` — method, URL, status, latency |
46
+ | Databases | Postgres, MySQL, MongoDB, Redis — query text + latency |
47
+ | Inbound | Every incoming HTTP request becomes a root trace |
48
+ | Your code | Opt-in per function / tool / class, or whole-app on NestJS |
49
+
50
+ Provider SDKs are **optional peer dependencies** — install only what you use:
51
+
52
+ ```bash
53
+ npm install openai @anthropic-ai/sdk
54
+ ```
35
55
 
36
56
  ## Framework middleware
37
57
 
38
- Each incoming request becomes a root trace, with downstream LLM/DB/HTTP calls nested underneath.
58
+ Each incoming request becomes a root trace, with downstream LLM/DB/HTTP calls nested
59
+ underneath.
39
60
 
40
61
  ```ts
41
62
  import express from "express";
@@ -47,118 +68,150 @@ const app = express();
47
68
  app.use(evalkit.expressMiddleware());
48
69
  ```
49
70
 
50
- Supported adapters: `expressMiddleware()`, `fastifyPlugin()`, `koaMiddleware()`, `honoMiddleware()`, `hapiPlugin()`, and `createNestjsInterceptor()`.
71
+ Adapters: `expressMiddleware()`, `fastifyPlugin()`, `koaMiddleware()`,
72
+ `honoMiddleware()`, `hapiPlugin()`, `createNestjsInterceptor()`.
51
73
 
52
- ## Manual tracing helpers
74
+ ### NestJS trace the whole app
53
75
 
54
- ```ts
55
- import evalkit from "syntropylabs-evalkit";
76
+ NestJS exposes a DI registry, so the SDK can wrap **every** provider/controller method
77
+ for you. One line in `main.ts` — pass the app; the SDK resolves `DiscoveryService`
78
+ itself (no `@nestjs/core` import needed):
56
79
 
57
- // Open a span by hand
58
- const { end } = evalkit.startSpan("embed-documents", { count: 42 });
59
- try {
60
- await embed(docs);
61
- end("OK", { "result.count": docs.length });
62
- } catch (e) {
63
- end("ERROR", { "error.message": String(e) });
64
- throw e;
65
- }
80
+ ```ts
81
+ evalkit.init({ subscriptionKey: "tk_live_...", serviceName: "orchestrator" });
66
82
 
67
- await evalkit.flush(); // force-flush before process exit
83
+ const app = await NestFactory.create(AppModule);
84
+ await evalkit.enableNestjsAutoTrace(app); // ← the only line you add
85
+ await app.listen(5000);
68
86
  ```
69
87
 
70
- ## Tracing your own functions & tools (APM)
88
+ Route metadata (`@Get`, `@Body`, guards) is preserved, and the call never throws.
89
+
90
+ ## Trace your own code
71
91
 
72
- Auto-instrumentation covers libraries (LLM / HTTP / DB). For **your** code, opt in —
73
- a function, a tool, a class, or a whole service object:
92
+ Auto-instrumentation covers libraries. For **your** code, opt in — a function, a tool,
93
+ a class, or a whole service object:
74
94
 
75
95
  ```ts
76
96
  import evalkit, { Traced } from "syntropylabs-evalkit";
77
97
 
78
- // One function -> function_call span (input / output / latency)
79
- const rankResults = evalkit.traceFunction("rank-results", rank);
98
+ const rankResults = evalkit.traceFunction("rank-results", rank); // function_call span
99
+ const searchWeb = evalkit.traceTool("search_web", (q: string) => runSearch(q)); // → tool_call span
80
100
 
81
- // One tool -> tool_call span (Input/Output panels + tool metrics)
82
- const searchWeb = evalkit.traceTool("search_web", (q: string) => runSearch(q));
83
-
84
- // Every method of a class, APM-style
85
- @Traced()
101
+ @Traced() // every method of the class
86
102
  class OrderService {
87
103
  place(order: Order) { /* ... */ }
88
104
  cancel(id: string) { /* ... */ }
89
105
  }
90
106
 
91
- // Or one method
92
- class Service {
93
- @evalkit.TraceMethod()
94
- async compute() { /* ... */ }
95
- }
96
-
97
107
  // Every function of a service object (parity with Python's trace_module)
98
108
  export const orders = evalkit.traceObject({ place, cancel }, { prefix: "orders" });
99
109
  ```
100
110
 
101
- ### NestJS trace the whole app automatically
111
+ > A client-side tool the model calls only shows its **output** if you wrap it with
112
+ > `traceTool` — the SDK sees the model's request, not your function's return value.
113
+ > Server-side tools (e.g. OpenAI `web_search`) and LangChain tools are automatic.
102
114
 
103
- NestJS exposes a DI registry, so the SDK can wrap **every** provider/controller
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):
115
+ ## Manual spans
106
116
 
107
117
  ```ts
108
- const app = await NestFactory.create(AppModule);
109
- evalkit.init({ subscriptionKey: "tk_live_…", serviceName: "orchestrator" });
110
- await evalkit.enableNestjsAutoTrace(app); // ← the only line you add
111
- await app.listen(5000);
112
- ```
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.
118
+ import { startSpan } from "syntropylabs-evalkit";
117
119
 
118
- > Auto-discovery is only possible where the framework has a registry (NestJS). For
119
- > Express / Fastify / Koa / Hono / Hapi, use `traceObject` / `traceFunction` on your
120
- > own modules — incoming HTTP and LLM/DB/HTTP calls are already auto-traced.
120
+ const { end } = startSpan("embed-documents", { count: 42 });
121
+ try {
122
+ await embed(docs);
123
+ end("OK", { "result.count": docs.length });
124
+ } catch (e) {
125
+ end("ERROR", { "error.message": String(e) });
126
+ throw e;
127
+ }
121
128
 
122
- > **Client-side tools you run yourself** only show their output if you wrap them with
123
- > `traceTool` — the SDK sees the model's *request* but never your function's return
124
- > value. Server-side tools (OpenAI `web_search`, …) and LangChain tools are captured
125
- > automatically.
129
+ await evalkit.flush(); // force-flush before process exit
130
+ ```
126
131
 
127
132
  ## Offline evaluation
128
133
 
134
+ Deterministic, local scoring — runs synchronously, pushed as an `eval_result` span.
135
+
129
136
  ```ts
130
137
  import { evaluate } from "syntropylabs-evalkit";
131
138
 
132
- // Deterministic, local scoring — runs synchronously, pushed as an eval_result span
133
139
  const { scores } = evaluate({
134
140
  output: "The answer is AWS and Azure.",
135
141
  expectedTools: ["search", "summarize"],
136
142
  toolCalls: [{ name: "search" }, { name: "summarize" }],
137
143
  constraints: { requiredTerms: ["AWS", "Azure"] },
138
144
  });
145
+ // → { tool_trajectory: 1, tool_f1: 1, tool_correctness: 1, response_match: 1, constraint_compliance: 1 }
139
146
  ```
140
147
 
141
- ## Scenario generation & simulation
148
+ ## Scenario simulation
149
+
150
+ Generate synthetic-user scenarios from your agent's prompt and tools, replay each one
151
+ against your real agent, then grade the run with LLM-as-judge evaluators.
142
152
 
143
153
  ```ts
144
154
  import evalkit from "syntropylabs-evalkit";
145
155
 
146
- const scenarios = await evalkit.generateScenarios({ /* ... */ });
147
- const { simulationId, results } = await evalkit.simulateUser({ /* ... */ });
156
+ evalkit.init({ subscriptionKey: process.env.EVALKIT_SUBSCRIPTION_KEY!, serviceName: "support-bot" });
157
+
158
+ // 1 — generate scenarios (bring your own key for the generation call)
159
+ const scenarios = await evalkit.generateScenarios({
160
+ agentInstructions: SYSTEM_PROMPT,
161
+ tools: ["search_kb", "lookup_order", "create_ticket"],
162
+ count: 5,
163
+ provider: "anthropic",
164
+ apiKey: process.env.ANTHROPIC_API_KEY,
165
+ });
166
+
167
+ // 2 — replay each scenario against your real agent
168
+ const { simulationId, runId, results } = await evalkit.simulateUser({
169
+ scenarios,
170
+ entrypoint: async (ctx) => {
171
+ const { text, toolCalls } = await runAgent(ctx.sessionId, ctx.message);
172
+ return { text, toolCalls };
173
+ },
174
+ tags: ["ci"],
175
+ });
176
+
177
+ // 3 — grade the run against an evaluator collection (LLM-as-judge, BYOK)
178
+ const result = await evalkit.evaluateSimulation({
179
+ simulationId,
180
+ collectionId: "665f0c...", // Dashboard → Evaluators → Collections
181
+ provider: "openai",
182
+ model: "gpt-4o",
183
+ apiKey: process.env.OPENAI_API_KEY!,
184
+ maxTokens: 1024, // optional judge output cap
185
+ });
186
+
187
+ console.log(result.aggregate); // { averageScore, passRate, ... }
188
+ for (const scn of result.scenarios) {
189
+ console.log(scn.name, scn.overallScore, scn.passed);
190
+ for (const m of scn.metrics) console.log(" -", m.ruleName, m.score, m.reason);
191
+ }
148
192
  ```
149
193
 
194
+ `evaluateSimulation` returns per-scenario, per-criterion scores with reasons, which
195
+ also appear in the Tracing dashboard.
196
+
150
197
  ## Configuration
151
198
 
152
- | Option | Description |
153
- | ------------------ | ------------------------------------------------------------- |
154
- | `subscriptionKey` | EvalKit trace-project subscription key (**required**). |
155
- | `serviceName` | Logical service name attached to every trace. |
156
- | `environment` | `"development"` \| `"staging"` \| `"production"`. |
157
- | `baseUrl` | Override the trace ingest endpoint (defaults to hosted). |
158
- | `apiUrl` | Override the control-plane endpoint (scenario generation). |
159
- | `maxBodyBytes` | Max captured HTTP request/response body size (default 10 MB). |
199
+ | Option | Description |
200
+ | ----------------- | ------------------------------------------------------------- |
201
+ | `subscriptionKey` | Trace-project subscription key (**required**). |
202
+ | `serviceName` | Logical service name attached to every trace. |
203
+ | `environment` | `"development"` \| `"staging"` \| `"production"`. |
204
+ | `baseUrl` | Override the trace ingest endpoint (defaults to hosted). |
205
+ | `apiUrl` | Override the control-plane endpoint (scenario / simulation). |
206
+ | `maxBodyBytes` | Max captured HTTP body size (default 10 MB). |
207
+
208
+ See the exported `EvalKitOptions` type for the full set (`appVersion`, `deviceId`,
209
+ `debug`, batch tuning).
210
+
211
+ ## Links
160
212
 
161
- See the exported `EvalKitOptions` type for the full set (`appVersion`, `deviceId`, `debug`, batch tuning).
213
+ - Website: https://syntropylabs.ai
214
+ - Documentation: https://syntropylabs.ai/docs
162
215
 
163
216
  ## License
164
217
 
package/dist/index.d.mts CHANGED
@@ -146,6 +146,9 @@ interface GenerateScenariosOptions {
146
146
  provider?: string;
147
147
  apiKey?: string;
148
148
  temperature?: number;
149
+ reasoningEffort?: string;
150
+ maxCompletionTokens?: number;
151
+ maxTokens?: number;
149
152
  apiUrl?: string;
150
153
  }
151
154
  interface SimulateUserOptions {
@@ -159,6 +162,53 @@ interface SimulateUserOptions {
159
162
  provider?: string;
160
163
  apiKey?: string;
161
164
  }
165
+ interface EvaluateSimulationOptions {
166
+ /** The simulationId returned by simulateUser. */
167
+ simulationId: string;
168
+ /** Mongo id of the evaluator collection whose rules to run. */
169
+ collectionId: string;
170
+ /** Judge provider, e.g. "openai", "anthropic", "google". */
171
+ provider: string;
172
+ /** Judge model id, e.g. "gpt-4o". */
173
+ model: string;
174
+ /** BYOK judge key — used for the judge call only, never stored. */
175
+ apiKey: string;
176
+ /** A specific run of the simulation. Defaults to the most recent run. */
177
+ runId?: string;
178
+ /** Judge output token cap (defaults to the backend's value). */
179
+ maxTokens?: number;
180
+ /** Override the control-plane URL (default: the value from init). */
181
+ apiUrl?: string;
182
+ }
183
+ interface SimEvalMetric {
184
+ ruleId: string;
185
+ ruleName: string;
186
+ category: string;
187
+ score: number;
188
+ passed: boolean;
189
+ reason: string;
190
+ }
191
+ interface SimEvalScenario {
192
+ scenarioId: string;
193
+ name: string;
194
+ traceId: string;
195
+ status: string;
196
+ overallScore: number;
197
+ passed: boolean;
198
+ metrics: SimEvalMetric[];
199
+ error?: string;
200
+ }
201
+ interface EvaluateSimulationResult {
202
+ simulationId: string;
203
+ runId: string;
204
+ scenarios: SimEvalScenario[];
205
+ aggregate: {
206
+ averageScore: number;
207
+ passRate: number;
208
+ totalScenarios: number;
209
+ evaluatedScenarios: number;
210
+ };
211
+ }
162
212
 
163
213
  interface HapiPluginOptions {
164
214
  name?: string | ((request: any) => string);
@@ -366,11 +416,13 @@ declare function simulateUser(opts: SimulateUserOptions): Promise<{
366
416
  runId: string;
367
417
  results: any[];
368
418
  }>;
419
+ declare function evaluateSimulation(opts: EvaluateSimulationOptions): Promise<EvaluateSimulationResult>;
369
420
  declare const _default: {
370
421
  init: typeof init;
371
422
  evaluate: typeof evaluate;
372
423
  generateScenarios: typeof generateScenarios;
373
424
  simulateUser: typeof simulateUser;
425
+ evaluateSimulation: typeof evaluateSimulation;
374
426
  patchOpenAIClient: typeof patchOpenAIClient;
375
427
  patchAnthropicClient: typeof patchAnthropicClient;
376
428
  patchBedrockClient: typeof patchBedrockClient;
@@ -405,4 +457,4 @@ declare const _default: {
405
457
  flush: typeof flush;
406
458
  };
407
459
 
408
- export { type AgentTurnResult, EvalKitClient, EvalKitInterceptor, type EvalKitOptions, type ExpressMiddlewareOptions, type FastifyPluginOptions, type GenerateScenariosOptions, type HapiPluginOptions, type HonoMiddlewareOptions, type KoaMiddlewareOptions, type OfflineEvalInput, type OfflineEvalResult, type OfflineMetric, type SimContext, type SimulateUserOptions, type SpanEvent, type TraceEnvelope, TraceMethod, Traced, createNestjsInterceptor, currentTraceId, _default as default, enableNestjsAutoTrace, evaluate, expressMiddleware, fastifyPlugin, flush, generateScenarios, hapiPlugin, honoMiddleware, init, koaMiddleware, langchainHandler, patchAnthropicClient, patchAnthropicVertexClient, patchAxiosClient, patchBedrockClient, patchCohereClient, patchGoogleAIModel, patchGoogleGenAIModels, patchMongooseClient, patchMysql2Client, patchOpenAIClient, patchPgClient, patchRedisClient, patchVertexGenerativeModel, simulateUser, startHttpTrace, startSpan, startTrace, traceFunction, traceObject, traceTool, withTrace };
460
+ export { type AgentTurnResult, EvalKitClient, EvalKitInterceptor, type EvalKitOptions, type EvaluateSimulationOptions, type EvaluateSimulationResult, type ExpressMiddlewareOptions, type FastifyPluginOptions, type GenerateScenariosOptions, type HapiPluginOptions, type HonoMiddlewareOptions, type KoaMiddlewareOptions, type OfflineEvalInput, type OfflineEvalResult, type OfflineMetric, type SimContext, type SimEvalMetric, type SimEvalScenario, type SimulateUserOptions, type SpanEvent, type TraceEnvelope, TraceMethod, Traced, createNestjsInterceptor, currentTraceId, _default as default, enableNestjsAutoTrace, evaluate, evaluateSimulation, expressMiddleware, fastifyPlugin, flush, generateScenarios, hapiPlugin, honoMiddleware, init, koaMiddleware, langchainHandler, patchAnthropicClient, patchAnthropicVertexClient, patchAxiosClient, patchBedrockClient, patchCohereClient, patchGoogleAIModel, patchGoogleGenAIModels, patchMongooseClient, patchMysql2Client, patchOpenAIClient, patchPgClient, patchRedisClient, patchVertexGenerativeModel, simulateUser, startHttpTrace, startSpan, startTrace, traceFunction, traceObject, traceTool, withTrace };
package/dist/index.d.ts CHANGED
@@ -146,6 +146,9 @@ interface GenerateScenariosOptions {
146
146
  provider?: string;
147
147
  apiKey?: string;
148
148
  temperature?: number;
149
+ reasoningEffort?: string;
150
+ maxCompletionTokens?: number;
151
+ maxTokens?: number;
149
152
  apiUrl?: string;
150
153
  }
151
154
  interface SimulateUserOptions {
@@ -159,6 +162,53 @@ interface SimulateUserOptions {
159
162
  provider?: string;
160
163
  apiKey?: string;
161
164
  }
165
+ interface EvaluateSimulationOptions {
166
+ /** The simulationId returned by simulateUser. */
167
+ simulationId: string;
168
+ /** Mongo id of the evaluator collection whose rules to run. */
169
+ collectionId: string;
170
+ /** Judge provider, e.g. "openai", "anthropic", "google". */
171
+ provider: string;
172
+ /** Judge model id, e.g. "gpt-4o". */
173
+ model: string;
174
+ /** BYOK judge key — used for the judge call only, never stored. */
175
+ apiKey: string;
176
+ /** A specific run of the simulation. Defaults to the most recent run. */
177
+ runId?: string;
178
+ /** Judge output token cap (defaults to the backend's value). */
179
+ maxTokens?: number;
180
+ /** Override the control-plane URL (default: the value from init). */
181
+ apiUrl?: string;
182
+ }
183
+ interface SimEvalMetric {
184
+ ruleId: string;
185
+ ruleName: string;
186
+ category: string;
187
+ score: number;
188
+ passed: boolean;
189
+ reason: string;
190
+ }
191
+ interface SimEvalScenario {
192
+ scenarioId: string;
193
+ name: string;
194
+ traceId: string;
195
+ status: string;
196
+ overallScore: number;
197
+ passed: boolean;
198
+ metrics: SimEvalMetric[];
199
+ error?: string;
200
+ }
201
+ interface EvaluateSimulationResult {
202
+ simulationId: string;
203
+ runId: string;
204
+ scenarios: SimEvalScenario[];
205
+ aggregate: {
206
+ averageScore: number;
207
+ passRate: number;
208
+ totalScenarios: number;
209
+ evaluatedScenarios: number;
210
+ };
211
+ }
162
212
 
163
213
  interface HapiPluginOptions {
164
214
  name?: string | ((request: any) => string);
@@ -366,11 +416,13 @@ declare function simulateUser(opts: SimulateUserOptions): Promise<{
366
416
  runId: string;
367
417
  results: any[];
368
418
  }>;
419
+ declare function evaluateSimulation(opts: EvaluateSimulationOptions): Promise<EvaluateSimulationResult>;
369
420
  declare const _default: {
370
421
  init: typeof init;
371
422
  evaluate: typeof evaluate;
372
423
  generateScenarios: typeof generateScenarios;
373
424
  simulateUser: typeof simulateUser;
425
+ evaluateSimulation: typeof evaluateSimulation;
374
426
  patchOpenAIClient: typeof patchOpenAIClient;
375
427
  patchAnthropicClient: typeof patchAnthropicClient;
376
428
  patchBedrockClient: typeof patchBedrockClient;
@@ -405,4 +457,4 @@ declare const _default: {
405
457
  flush: typeof flush;
406
458
  };
407
459
 
408
- export { type AgentTurnResult, EvalKitClient, EvalKitInterceptor, type EvalKitOptions, type ExpressMiddlewareOptions, type FastifyPluginOptions, type GenerateScenariosOptions, type HapiPluginOptions, type HonoMiddlewareOptions, type KoaMiddlewareOptions, type OfflineEvalInput, type OfflineEvalResult, type OfflineMetric, type SimContext, type SimulateUserOptions, type SpanEvent, type TraceEnvelope, TraceMethod, Traced, createNestjsInterceptor, currentTraceId, _default as default, enableNestjsAutoTrace, evaluate, expressMiddleware, fastifyPlugin, flush, generateScenarios, hapiPlugin, honoMiddleware, init, koaMiddleware, langchainHandler, patchAnthropicClient, patchAnthropicVertexClient, patchAxiosClient, patchBedrockClient, patchCohereClient, patchGoogleAIModel, patchGoogleGenAIModels, patchMongooseClient, patchMysql2Client, patchOpenAIClient, patchPgClient, patchRedisClient, patchVertexGenerativeModel, simulateUser, startHttpTrace, startSpan, startTrace, traceFunction, traceObject, traceTool, withTrace };
460
+ export { type AgentTurnResult, EvalKitClient, EvalKitInterceptor, type EvalKitOptions, type EvaluateSimulationOptions, type EvaluateSimulationResult, type ExpressMiddlewareOptions, type FastifyPluginOptions, type GenerateScenariosOptions, type HapiPluginOptions, type HonoMiddlewareOptions, type KoaMiddlewareOptions, type OfflineEvalInput, type OfflineEvalResult, type OfflineMetric, type SimContext, type SimEvalMetric, type SimEvalScenario, type SimulateUserOptions, type SpanEvent, type TraceEnvelope, TraceMethod, Traced, createNestjsInterceptor, currentTraceId, _default as default, enableNestjsAutoTrace, evaluate, evaluateSimulation, expressMiddleware, fastifyPlugin, flush, generateScenarios, hapiPlugin, honoMiddleware, init, koaMiddleware, langchainHandler, patchAnthropicClient, patchAnthropicVertexClient, patchAxiosClient, patchBedrockClient, patchCohereClient, patchGoogleAIModel, patchGoogleGenAIModels, patchMongooseClient, patchMysql2Client, patchOpenAIClient, patchPgClient, patchRedisClient, patchVertexGenerativeModel, simulateUser, startHttpTrace, startSpan, startTrace, traceFunction, traceObject, traceTool, withTrace };
package/dist/index.js CHANGED
@@ -1,15 +1,15 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var api=require('@opentelemetry/api'),crypto=require('crypto'),sdkTraceNode=require('@opentelemetry/sdk-trace-node'),sdkTraceBase=require('@opentelemetry/sdk-trace-base'),resources=require('@opentelemetry/resources'),semanticConventions=require('@opentelemetry/semantic-conventions'),module$1=require('module');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var At=Object.defineProperty;var tr=Object.getOwnPropertyDescriptor;var er=Object.getOwnPropertyNames;var nr=Object.prototype.hasOwnProperty;var I=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var ee=(e,t)=>{for(var n in t)At(e,n,{get:t[n],enumerable:true});},rr=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of er(t))!nr.call(e,o)&&o!==n&&At(e,o,{get:()=>t[o],enumerable:!(r=tr(t,o))||r.enumerable});return e};var or=e=>rr(At({},"__esModule",{value:true}),e);function sr(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let a=1;a<=n;a++)for(let c=1;c<=r;c++)e[a-1]===t[c-1]?o[a][c]=o[a-1][c-1]+1:o[a][c]=Math.max(o[a-1][c],o[a][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function ar(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(i=>r.has(i))),s=o.size/n.size,a=o.size/r.size;return {score:s+a===0?0:2*s*a/(s+a),precision:s,recall:a}}function ir(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function cr(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function lr(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),a=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=a,r.push(a);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function pr(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function ur(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function U(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(i=>i.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let i=sr(n,r);o.tool_trajectory=i.score,s.tool_trajectory={lcsLength:i.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let i=ar(n,r);o.tool_f1=i.score,s.tool_f1={precision:i.precision,recall:i.recall};}if(t.has("tool_correctness")&&r.length>0){let i=ir(n,r);o.tool_correctness=i.score,s.tool_correctness={called:i.called,total:i.total};}let a=e.constraints?.requiredTerms??[];if(t.has("response_match")&&a.length>0){let i=cr(e.output,a);o.response_match=i.score,s.response_match={matched:i.matched,missing:i.missing};}if(t.has("constraint_compliance")&&e.constraints){let i=lr(e.output,e.constraints);o.constraint_compliance=i.score,s.constraint_compliance={checks:i.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let i=pr(e.retrievedContext,e.expectedContext);o.contextual_precision=i.score,s.contextual_precision={relevant:i.relevant,total:i.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let i=ur(e.retrievedContext,e.expectedContext);o.contextual_recall=i.score,s.contextual_recall={covered:i.covered,total:i.total};}let c={scores:o,details:s};try{let i=(re(),or(ne)),l={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[p,u]of Object.entries(o))l[`evalkit.metric.${p}`]=u;let{end:d}=i.startSpan("evaluation",l);d("OK");}catch{}return c}var vt=x(()=>{});function xt(e,t,n){if(!e||!t||!F.has(e))return;let r=Z.get(e)??[];r.push({name:t,args:n}),Z.set(e,r);}var F,Z,tt=x(()=>{F=new Map,Z=new Map;});function _t(e){return crypto.randomBytes(e).toString("hex")}function oe(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}async function se(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(oe)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(oe)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${a}`)}return (await o.json()).scenarios??[]}function fr(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function gr(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return U({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function yr(e,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+_t(6),a="sess_"+_t(6),c=fr(n).slice(0,r.maxTurns),i={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:l,end:d,ctx:p}=e.startTrace(`scenario:${o}`,{"evalkit.session_id":a});F.set(l,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let u="OK",m,f=[],g=[],y=0,h={};try{await api.context.with(p,async()=>{for(let R=0;R<c.length;R++){let T={message:c[R],sessionId:a,state:i,turn:R+1},w=await t.entrypoint(T);w&&typeof w=="object"&&"text"in w?(f.push(w.text),w.toolCalls&&g.push(...w.toolCalls)):f.push(String(w)),y++;}let k=g.length?g:Z.get(l)??[];h=gr(n,f.join(`
2
- `),k,t.metrics);});}catch(k){u="ERROR",m=k?.message??String(k);}finally{d(u);}let v={scenarioId:s,name:o,status:u,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:l}}async function ae(e,t){let n="sim_"+_t(8),r="run_"+_t(8),o=t.maxTurns??12,s=[],a=[];for(let c of t.scenarios){let{result:i,traceId:l}=await yr(e,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(i),a.push(l);}await e.flush();for(let c of a)F.delete(c),Z.delete(c);return {simulationId:n,runId:r,results:s}}var ie=x(()=>{tt();vt();});var M,ce=x(()=>{(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(M||(M={}));});var le=x(()=>{ce();});function hr(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=V)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let a=o[s];typeof a=="string"&&a.length>1024&&(o[s]=r(a.length));}if(n(e)<=V||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=V))return e;if(o)for(let[s,a]of Object.entries(o))typeof a=="string"&&a.length>512&&(o[s]=a.slice(0,512)+"\u2026");return n(e)<=V||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=V)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${V}B)`),null)}function It(e){return e[0]*1e3+e[1]/1e6}function vr(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function xr(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function _r(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function ue(e){return new Promise(t=>setTimeout(t,e))}var pe,V,Ct,de=x(()=>{le();tt();pe=3,V=900*1024,Ct=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:M.FAILED});return}let r=t.map(s=>hr(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:M.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let a=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=pe?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${a} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${pe})`)):console.error(`[evalkit] export failed ${s.status}: ${a}`),n({code:M.FAILED});return}if(this.authFailures=0,this.debug){let a=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${a.status}`);}n({code:M.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:M.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let a=0;a<=r;a++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(a<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${a+1}/${r}`),await ue(o[a]??1800);else return c}catch(c){s=c,a<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${a+1}/${r}:`,c),await ue(o[a]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=It(t.startTime),s=It(t.endTime),a=t.events.map(l=>({name:l.name,timestamp:new Date(It(l.time)).toISOString(),attributes:l.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:vr(t.kind),spanType:r["evalkit.span_type"]??"log",status:xr(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:a.length>0?a:void 0,attributes:_r(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},i=F.get(n.traceId);return i&&(c.isSimulation=true,c.simulationId=i.simulationId,c.scenarioId=i.scenarioId,c.runId=i.runId),c}};});function J(e,t=Er){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var br,Er;exports.EvalKitClient=void 0;var Mt=x(()=>{de();br="0.1.27",Er=4096;exports.EvalKitClient=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new Ct({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new sdkTraceNode.NodeTracerProvider({resource:new resources.Resource({[semanticConventions.ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new sdkTraceBase.BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=api.trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":br};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,n){let r=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},api.context.active()),o=api.trace.setSpan(api.context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(a="OK")=>{r.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},api.context.active()),s=api.trace.setSpan(api.context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",i)=>{i?.statusCode!==void 0&&o.setAttribute("http.status_code",i.statusCode),i?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(i.body)),i?.headers&&o.setAttribute("http.response.headers",JSON.stringify(i.headers)),o.setStatus({code:c==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??api.context.active());return {ctx:api.trace.setSpan(api.context.active(),o),end:(a="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"function_call",...r};o&&a.length&&(c["function.args"]=J(a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"function.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"function.result":J(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&a.length&&(c["tool.arguments"]=J(a.length===1?a[0]:a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"tool.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"tool.result":J(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function K(e){if(!e)return api.context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?api.trace.setSpanContext(api.ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):api.context.active()}var W=x(()=>{});function kt(e){return e.length<=fe?e:e.slice(0,fe)+"\u2026"}function Rt(e){if(typeof e=="string")return e;try{return JSON.stringify(e??{})}catch{return String(e)}}function Kr(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:void 0}catch{return}}function ge(e,t){let n=[];try{for(let r of e?.choices??[])for(let o of r?.message?.tool_calls??[]){let s=o?.function?.name??"";s&&n.push({name:s,argsJson:kt(Rt(o?.function?.arguments??"")),id:o?.id??""});}}catch{}return n}function ye(e,t){let n=[];try{for(let r of e??[]){if(r?.type!=="tool_use")continue;let o=r?.name??"";o&&n.push({name:o,argsJson:kt(Rt(r?.input??{})),id:r?.id??""});}}catch{}return n}function he(e,t){let n=[];try{let r=[];if(Array.isArray(e?.functionCalls))r.push(...e.functionCalls);else for(let s of e?.candidates??[])for(let a of s?.content?.parts??[])a?.functionCall?.name&&r.push(a.functionCall);let o=0;for(let s of r){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(Rt(s?.args??{})),id:s?.id??`call_${o++}`});}}catch{}return n}function ve(e,t){let n=[];try{for(let r of e?.generations??[])for(let o of r??[])for(let s of o?.message?.tool_calls??[]){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(Rt(s?.args??{})),id:s?.id??""});}}catch{}return n}function B(e,t,n){if(!n.length)return;let r=t.spanContext().traceId,o=api.trace.setSpan(api.context.active(),t);for(let s of n){if(!s.name)continue;let a={"gen_ai.tool.name":s.name,"gen_ai.tool.call.id":s.id,"gen_ai.tool.call.arguments":s.argsJson};s.result!=null&&(a["gen_ai.tool.call.result"]=s.result);try{t.addEvent("gen_ai.tool.call",a);}catch{}try{xt(r,s.name,Kr(s.argsJson));}catch{}if(s.result!=null)try{e.tracer.startSpan(s.name,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...a,"tool.name":s.name,"tool.arguments":s.argsJson,"tool.result":s.result}},o).end();}catch{}}}var fe,et=x(()=>{tt();fe=32768;});function qr(e,t){let n="",r=0,o=0,s=false;function a(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:api.SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,i,l){if(i===Symbol.asyncIterator)return function(){let p=c[Symbol.asyncIterator]();return {async next(){try{let u=await p.next();if(!u.done&&u.value){let m=u.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return u.done&&a(),u}catch(u){throw a(u instanceof Error?u:new Error(String(u))),u}},return(){return a(),p.return?.()??Promise.resolve({done:true,value:void 0})},throw(u){return a(u instanceof Error?u:new Error(String(u))),p.throw?.(u)??Promise.reject(u)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,i,l);return typeof d=="function"?d.bind(c):d}})}function $(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let a=s[0],c=n??api.context.active(),i=e.tracer.startSpan("chat.completions.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":a.model??"unknown",...a.temperature!=null&&{"gen_ai.request.temperature":a.temperature},...a.max_tokens!=null&&{"gen_ai.request.max_tokens":a.max_tokens},...a.top_p!=null&&{"gen_ai.request.top_p":a.top_p},"evalkit.prompt":Nr(a.messages??[])}},c),l=api.trace.setSpan(c,i);if(a?.stream){let m;try{m=await api.context.with(l,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw i.recordException(g),i.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),i.end(),f}return qr(m,i)}let d;try{d=await api.context.with(l,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}let p=d.choices?.[0],u=p?.message.content??"";return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":p?.finish_reason?[p.finish_reason]:[],"evalkit.completion":u}),B(e,i,ge(d)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function Nr(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
3
- `)}var qt=x(()=>{et();});function $r(e,t){let n="",r=0,o=0,s=false;function a(i){let l=i?.type;if(l==="content_block_delta"){let d=i.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else l==="message_start"?r=i.message?.usage?.input_tokens??0:l==="message_delta"&&(o=i.usage?.output_tokens??0);}function c(i){s||(s=true,i?(t.recordException(i),t.setStatus({code:api.SpanStatusCode.ERROR,message:i.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(i,l,d){if(l===Symbol.asyncIterator)return function(){let u=i[Symbol.asyncIterator]();return {async next(){try{let m=await u.next();return !m.done&&m.value&&a(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),u.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let p=Reflect.get(i,l,d);return typeof p=="function"?p.bind(i):p}})}function G(e,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],a=n??api.context.active(),c=Gr(s.system,s.messages??[]),i=e.tracer.startSpan("messages.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},a),l=api.trace.setSpan(a,i);if(s?.stream){let u;try{u=await api.context.with(l,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}return $r(u,i)}let d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}let p=d.content.filter(u=>u.type==="text").map(u=>u.text??"").join("");return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":p}),B(e,i,ye(d.content)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function Gr(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
4
- `)}var St=x(()=>{et();});function bt(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!api.trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",a=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${a}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":a,"db.query":JSON.stringify(this._conditions??{})}},api.context.active());try{let i=await r.call(this);return c.setStatus({code:api.SpanStatusCode.OK}),c.end(),i}catch(i){let l=i instanceof Error?i:new Error(String(i));throw c.recordException(l),c.setStatus({code:api.SpanStatusCode.ERROR,message:l.message}),c.end(),i}},n.__evalkit=true;}var jt=x(()=>{});function ot(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(a,...c){if(!api.trace.getActiveSpan()?.isRecording())return s.call(this,a,...c);let l=Array.isArray(a)?a[0]:a?.name??a?.args?.[0]??"cmd",d=(typeof l=="string"?l:String(l)).toUpperCase(),p=e.tracer.startSpan(`redis ${d}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},api.context.active());try{let u=await s.call(this,a,...c);return p.setStatus({code:api.SpanStatusCode.OK}),p.end(),u}catch(u){let m=u instanceof Error?u:new Error(String(u));throw p.recordException(m),p.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),p.end(),u}},r.__evalkit_redis=true;}var Bt=x(()=>{});function O(e){let t={};for(let[n,r]of Object.entries(e))Jr.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var Jr,$t=x(()=>{Jr=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var X,Gt=x(()=>{X=new Map;});function st(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return st(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(Yr.some(d=>d.test(r))||!api.trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let a=(n.method??"get").toUpperCase(),c=O(n.headers??{}),i=e.tracer.startSpan(`${a} ${s}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":a,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},api.context.active()),l=i.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${l.traceId}-${l.spanId}-01`,n.headers["x-evalkit-span-id"]=l.spanId,X.set(l.spanId,i),n.__evalkitSpan=i,n.__evalkitSpanId=l.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=O(n.headers??{}),s=n.data,a;s!=null&&(a=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...a!==void 0?{"http.response.body":a}:{}}),r.setStatus({code:api.SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=O(n.response?.headers??{}),a=n.response?.data,c;a!=null&&(c=(typeof a=="string"?a:JSON.stringify(a)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}var Yr,Lt=x(()=>{$t();Gt();Yr=[/\/v1\/ingest/,/\/health(z)?$/];});function at(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!api.trace.getActiveSpan()?.isRecording())return r.apply(this,o);let a=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,l=a.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",p=a.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",u=p?`${l} ${p}`:`pg ${l}`,m=e.tracer.startSpan(u,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":l,"db.statement":a.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...p?{"db.sql.table":p}:{}}},api.context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,k)=>{v?(m.recordException(v),m.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",k?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK})),m.end(),y(v,k);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:api.SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},n.__evalkit_pg=true);}var Ht=x(()=>{});function it(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!api.trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",i=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=u?`${d} ${u}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...i!==void 0?{"db.params":JSON.stringify(i).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},api.context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(k,R,T)=>{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,T);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}var Ut=x(()=>{});function ao(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function ct(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!ao(s))return r.apply(this,o);let a=s.input,c=a?.modelId??"unknown",i=c.split(".")[0]??"bedrock",l=a?.system?.map(v=>v.text).join(`
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var api=require('@opentelemetry/api'),crypto=require('crypto'),sdkTraceNode=require('@opentelemetry/sdk-trace-node'),sdkTraceBase=require('@opentelemetry/sdk-trace-base'),resources=require('@opentelemetry/resources'),semanticConventions=require('@opentelemetry/semantic-conventions'),module$1=require('module');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var At=Object.defineProperty;var nr=Object.getOwnPropertyDescriptor;var rr=Object.getOwnPropertyNames;var or=Object.prototype.hasOwnProperty;var I=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var ee=(e,t)=>{for(var n in t)At(e,n,{get:t[n],enumerable:true});},sr=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of rr(t))!or.call(e,o)&&o!==n&&At(e,o,{get:()=>t[o],enumerable:!(r=nr(t,o))||r.enumerable});return e};var ar=e=>sr(At({},"__esModule",{value:true}),e);function ir(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let a=1;a<=n;a++)for(let c=1;c<=r;c++)e[a-1]===t[c-1]?o[a][c]=o[a-1][c-1]+1:o[a][c]=Math.max(o[a-1][c],o[a][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function cr(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(i=>r.has(i))),s=o.size/n.size,a=o.size/r.size;return {score:s+a===0?0:2*s*a/(s+a),precision:s,recall:a}}function lr(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function pr(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function ur(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),a=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=a,r.push(a);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function dr(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function mr(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function U(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(i=>i.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let i=ir(n,r);o.tool_trajectory=i.score,s.tool_trajectory={lcsLength:i.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let i=cr(n,r);o.tool_f1=i.score,s.tool_f1={precision:i.precision,recall:i.recall};}if(t.has("tool_correctness")&&r.length>0){let i=lr(n,r);o.tool_correctness=i.score,s.tool_correctness={called:i.called,total:i.total};}let a=e.constraints?.requiredTerms??[];if(t.has("response_match")&&a.length>0){let i=pr(e.output,a);o.response_match=i.score,s.response_match={matched:i.matched,missing:i.missing};}if(t.has("constraint_compliance")&&e.constraints){let i=ur(e.output,e.constraints);o.constraint_compliance=i.score,s.constraint_compliance={checks:i.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let i=dr(e.retrievedContext,e.expectedContext);o.contextual_precision=i.score,s.contextual_precision={relevant:i.relevant,total:i.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let i=mr(e.retrievedContext,e.expectedContext);o.contextual_recall=i.score,s.contextual_recall={covered:i.covered,total:i.total};}let c={scores:o,details:s};try{let i=(re(),ar(ne)),l={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[p,u]of Object.entries(o))l[`evalkit.metric.${p}`]=u;let{end:d}=i.startSpan("evaluation",l);d("OK");}catch{}return c}var vt=x(()=>{});function xt(e,t,n){if(!e||!t||!F.has(e))return;let r=Z.get(e)??[];r.push({name:t,args:n}),Z.set(e,r);}var F,Z,tt=x(()=>{F=new Map,Z=new Map;});function _t(e){return crypto.randomBytes(e).toString("hex")}function oe(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}async function se(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(oe)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(oe)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature),t.reasoningEffort!==void 0&&(r.reasoningEffort=t.reasoningEffort),t.maxCompletionTokens!==void 0&&(r.maxCompletionTokens=t.maxCompletionTokens),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${a}`)}return (await o.json()).scenarios??[]}function yr(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function hr(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return U({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function vr(e,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+_t(6),a="sess_"+_t(6),c=yr(n).slice(0,r.maxTurns),i={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:l,end:d,ctx:p}=e.startTrace(`scenario:${o}`,{"evalkit.session_id":a});F.set(l,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let u="OK",m,f=[],g=[],y=0,h={};try{await api.context.with(p,async()=>{for(let S=0;S<c.length;S++){let O={message:c[S],sessionId:a,state:i,turn:S+1},w=await t.entrypoint(O);w&&typeof w=="object"&&"text"in w?(f.push(w.text),w.toolCalls&&g.push(...w.toolCalls)):f.push(String(w)),y++;}let k=g.length?g:Z.get(l)??[];h=hr(n,f.join(`
2
+ `),k,t.metrics);});}catch(k){u="ERROR",m=k?.message??String(k);}finally{d(u);}let v={scenarioId:s,name:o,status:u,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:l}}async function ae(e,t){let n="sim_"+_t(8),r="run_"+_t(8),o=t.maxTurns??12,s=[],a=[];for(let c of t.scenarios){let{result:i,traceId:l}=await vr(e,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(i),a.push(l);}await e.flush();for(let c of a)F.delete(c),Z.delete(c);return {simulationId:n,runId:r,results:s}}async function ie(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={simulationId:t.simulationId,collectionId:t.collectionId,provider:t.provider,model:t.model,apiKey:t.apiKey};t.runId!==void 0&&(r.runId=t.runId),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/simulations/evaluate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r),signal:AbortSignal.timeout(3e5)});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`evaluateSimulation failed ${o.status}: ${s}`)}return await o.json()}var ce=x(()=>{tt();vt();});var M,le=x(()=>{(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(M||(M={}));});var pe=x(()=>{le();});function xr(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=V)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let a=o[s];typeof a=="string"&&a.length>1024&&(o[s]=r(a.length));}if(n(e)<=V||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=V))return e;if(o)for(let[s,a]of Object.entries(o))typeof a=="string"&&a.length>512&&(o[s]=a.slice(0,512)+"\u2026");return n(e)<=V||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=V)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${V}B)`),null)}function It(e){return e[0]*1e3+e[1]/1e6}function _r(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function Cr(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function kr(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function de(e){return new Promise(t=>setTimeout(t,e))}var ue,V,Ct,me=x(()=>{pe();tt();ue=3,V=900*1024,Ct=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:M.FAILED});return}let r=t.map(s=>xr(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:M.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let a=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=ue?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${a} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${ue})`)):console.error(`[evalkit] export failed ${s.status}: ${a}`),n({code:M.FAILED});return}if(this.authFailures=0,this.debug){let a=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${a.status}`);}n({code:M.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:M.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let a=0;a<=r;a++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(a<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${a+1}/${r}`),await de(o[a]??1800);else return c}catch(c){s=c,a<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${a+1}/${r}:`,c),await de(o[a]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=It(t.startTime),s=It(t.endTime),a=t.events.map(l=>({name:l.name,timestamp:new Date(It(l.time)).toISOString(),attributes:l.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:_r(t.kind),spanType:r["evalkit.span_type"]??"log",status:Cr(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:a.length>0?a:void 0,attributes:kr(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},i=F.get(n.traceId);return i&&(c.isSimulation=true,c.simulationId=i.simulationId,c.scenarioId=i.scenarioId,c.runId=i.runId),c}};});function J(e,t=Tr){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var wr,Tr;exports.EvalKitClient=void 0;var Mt=x(()=>{me();wr="0.1.29",Tr=4096;exports.EvalKitClient=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new Ct({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new sdkTraceNode.NodeTracerProvider({resource:new resources.Resource({[semanticConventions.ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new sdkTraceBase.BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=api.trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":wr};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,n){let r=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},api.context.active()),o=api.trace.setSpan(api.context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(a="OK")=>{r.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},api.context.active()),s=api.trace.setSpan(api.context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",i)=>{i?.statusCode!==void 0&&o.setAttribute("http.status_code",i.statusCode),i?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(i.body)),i?.headers&&o.setAttribute("http.response.headers",JSON.stringify(i.headers)),o.setStatus({code:c==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??api.context.active());return {ctx:api.trace.setSpan(api.context.active(),o),end:(a="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"function_call",...r};o&&a.length&&(c["function.args"]=J(a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"function.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"function.result":J(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&a.length&&(c["tool.arguments"]=J(a.length===1?a[0]:a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"tool.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"tool.result":J(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function K(e){if(!e)return api.context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?api.trace.setSpanContext(api.ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):api.context.active()}var W=x(()=>{});function kt(e){return e.length<=ge?e:e.slice(0,ge)+"\u2026"}function St(e){if(typeof e=="string")return e;try{return JSON.stringify(e??{})}catch{return String(e)}}function Pr(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:void 0}catch{return}}function ye(e,t){let n=[];try{for(let r of e?.choices??[])for(let o of r?.message?.tool_calls??[]){let s=o?.function?.name??"";s&&n.push({name:s,argsJson:kt(St(o?.function?.arguments??"")),id:o?.id??""});}}catch{}return n}function he(e,t){let n=[];try{for(let r of e??[]){if(r?.type!=="tool_use")continue;let o=r?.name??"";o&&n.push({name:o,argsJson:kt(St(r?.input??{})),id:r?.id??""});}}catch{}return n}function ve(e,t){let n=[];try{let r=[];if(Array.isArray(e?.functionCalls))r.push(...e.functionCalls);else for(let s of e?.candidates??[])for(let a of s?.content?.parts??[])a?.functionCall?.name&&r.push(a.functionCall);let o=0;for(let s of r){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(St(s?.args??{})),id:s?.id??`call_${o++}`});}}catch{}return n}function xe(e,t){let n=[];try{for(let r of e?.generations??[])for(let o of r??[])for(let s of o?.message?.tool_calls??[]){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(St(s?.args??{})),id:s?.id??""});}}catch{}return n}function $(e,t,n){if(!n.length)return;let r=t.spanContext().traceId,o=api.trace.setSpan(api.context.active(),t);for(let s of n){if(!s.name)continue;let a={"gen_ai.tool.name":s.name,"gen_ai.tool.call.id":s.id,"gen_ai.tool.call.arguments":s.argsJson};s.result!=null&&(a["gen_ai.tool.call.result"]=s.result);try{t.addEvent("gen_ai.tool.call",a);}catch{}try{xt(r,s.name,Pr(s.argsJson));}catch{}if(s.result!=null)try{e.tracer.startSpan(s.name,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...a,"tool.name":s.name,"tool.arguments":s.argsJson,"tool.result":s.result}},o).end();}catch{}}}var ge,et=x(()=>{tt();ge=32768;});function jr(e,t){let n="",r=0,o=0,s=false;function a(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:api.SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,i,l){if(i===Symbol.asyncIterator)return function(){let p=c[Symbol.asyncIterator]();return {async next(){try{let u=await p.next();if(!u.done&&u.value){let m=u.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return u.done&&a(),u}catch(u){throw a(u instanceof Error?u:new Error(String(u))),u}},return(){return a(),p.return?.()??Promise.resolve({done:true,value:void 0})},throw(u){return a(u instanceof Error?u:new Error(String(u))),p.throw?.(u)??Promise.reject(u)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,i,l);return typeof d=="function"?d.bind(c):d}})}function B(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let a=s[0],c=n??api.context.active(),i=e.tracer.startSpan("chat.completions.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":a.model??"unknown",...a.temperature!=null&&{"gen_ai.request.temperature":a.temperature},...a.max_tokens!=null&&{"gen_ai.request.max_tokens":a.max_tokens},...a.top_p!=null&&{"gen_ai.request.top_p":a.top_p},"evalkit.prompt":$r(a.messages??[])}},c),l=api.trace.setSpan(c,i);if(a?.stream){let m;try{m=await api.context.with(l,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw i.recordException(g),i.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),i.end(),f}return jr(m,i)}let d;try{d=await api.context.with(l,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}let p=d.choices?.[0],u=p?.message.content??"";return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":p?.finish_reason?[p.finish_reason]:[],"evalkit.completion":u}),$(e,i,ye(d)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function $r(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
3
+ `)}var qt=x(()=>{et();});function Lr(e,t){let n="",r=0,o=0,s=false;function a(i){let l=i?.type;if(l==="content_block_delta"){let d=i.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else l==="message_start"?r=i.message?.usage?.input_tokens??0:l==="message_delta"&&(o=i.usage?.output_tokens??0);}function c(i){s||(s=true,i?(t.recordException(i),t.setStatus({code:api.SpanStatusCode.ERROR,message:i.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(i,l,d){if(l===Symbol.asyncIterator)return function(){let u=i[Symbol.asyncIterator]();return {async next(){try{let m=await u.next();return !m.done&&m.value&&a(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),u.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let p=Reflect.get(i,l,d);return typeof p=="function"?p.bind(i):p}})}function G(e,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],a=n??api.context.active(),c=Hr(s.system,s.messages??[]),i=e.tracer.startSpan("messages.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},a),l=api.trace.setSpan(a,i);if(s?.stream){let u;try{u=await api.context.with(l,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}return Lr(u,i)}let d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}let p=d.content.filter(u=>u.type==="text").map(u=>u.text??"").join("");return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":p}),$(e,i,he(d.content)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function Hr(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
4
+ `)}var Rt=x(()=>{et();});function bt(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!api.trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",a=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${a}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":a,"db.query":JSON.stringify(this._conditions??{})}},api.context.active());try{let i=await r.call(this);return c.setStatus({code:api.SpanStatusCode.OK}),c.end(),i}catch(i){let l=i instanceof Error?i:new Error(String(i));throw c.recordException(l),c.setStatus({code:api.SpanStatusCode.ERROR,message:l.message}),c.end(),i}},n.__evalkit=true;}var jt=x(()=>{});function ot(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(a,...c){if(!api.trace.getActiveSpan()?.isRecording())return s.call(this,a,...c);let l=Array.isArray(a)?a[0]:a?.name??a?.args?.[0]??"cmd",d=(typeof l=="string"?l:String(l)).toUpperCase(),p=e.tracer.startSpan(`redis ${d}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},api.context.active());try{let u=await s.call(this,a,...c);return p.setStatus({code:api.SpanStatusCode.OK}),p.end(),u}catch(u){let m=u instanceof Error?u:new Error(String(u));throw p.recordException(m),p.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),p.end(),u}},r.__evalkit_redis=true;}var $t=x(()=>{});function T(e){let t={};for(let[n,r]of Object.entries(e))Wr.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var Wr,Bt=x(()=>{Wr=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var X,Gt=x(()=>{X=new Map;});function st(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return st(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(Zr.some(d=>d.test(r))||!api.trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let a=(n.method??"get").toUpperCase(),c=T(n.headers??{}),i=e.tracer.startSpan(`${a} ${s}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":a,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},api.context.active()),l=i.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${l.traceId}-${l.spanId}-01`,n.headers["x-evalkit-span-id"]=l.spanId,X.set(l.spanId,i),n.__evalkitSpan=i,n.__evalkitSpanId=l.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=T(n.headers??{}),s=n.data,a;s!=null&&(a=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...a!==void 0?{"http.response.body":a}:{}}),r.setStatus({code:api.SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=T(n.response?.headers??{}),a=n.response?.data,c;a!=null&&(c=(typeof a=="string"?a:JSON.stringify(a)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}var Zr,Lt=x(()=>{Bt();Gt();Zr=[/\/v1\/ingest/,/\/health(z)?$/];});function at(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!api.trace.getActiveSpan()?.isRecording())return r.apply(this,o);let a=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,l=a.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",p=a.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",u=p?`${l} ${p}`:`pg ${l}`,m=e.tracer.startSpan(u,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":l,"db.statement":a.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...p?{"db.sql.table":p}:{}}},api.context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,k)=>{v?(m.recordException(v),m.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",k?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK})),m.end(),y(v,k);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:api.SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},n.__evalkit_pg=true);}var Ht=x(()=>{});function it(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!api.trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",i=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=u?`${d} ${u}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...i!==void 0?{"db.params":JSON.stringify(i).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},api.context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(k,S,O)=>{k?(f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.setAttribute("error.message",k.message)):(f.setAttribute("db.rows_affected",Array.isArray(S)?S.length:S?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK})),f.end(),h(k,S,O);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}var Ut=x(()=>{});function co(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function ct(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!co(s))return r.apply(this,o);let a=s.input,c=a?.modelId??"unknown",i=c.split(".")[0]??"bedrock",l=a?.system?.map(v=>v.text).join(`
5
5
  `)??"",d=a?.messages?.map(v=>`${v.role}: ${v.content.map(k=>k.text??"").join("")}`)??[],p=[l?`system: ${l}`:"",...d].filter(Boolean).join(`
6
6
  `),u=a?.inferenceConfig??{},m=api.context.active(),f=e.tracer.startSpan("converse",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":i,"gen_ai.request.model":c,...u.temperature!=null&&{"gen_ai.request.temperature":u.temperature},...u.maxTokens!=null&&{"gen_ai.request.max_tokens":u.maxTokens},...u.topP!=null&&{"gen_ai.request.top_p":u.topP},"evalkit.prompt":p}},m),g=api.trace.setSpan(m,f),y;try{y=await api.context.with(g,()=>r.apply(this,o));}catch(v){let k=v instanceof Error?v:new Error(String(v));throw f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return f.setAttributes({"gen_ai.response.model":c,"gen_ai.usage.input_tokens":y.usage?.inputTokens??0,"gen_ai.usage.output_tokens":y.usage?.outputTokens??0,"gen_ai.usage.total_tokens":y.usage?.totalTokens??0,"gen_ai.response.finish_reasons":y.stopReason?[y.stopReason]:[],"evalkit.completion":h}),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}var Ft=x(()=>{});function lt(e,t,n){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let s=o[0];if(s?.stream)return r.apply(this,o);let a=s?.chatHistory?.map(u=>`${u.role}: ${u.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...a,`user: ${s?.message??""}`].filter(Boolean).join(`
7
7
  `),i=api.context.active(),l=e.tracer.startSpan("chat",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":s?.model??"unknown",...s?.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s?.maxTokens!=null&&{"gen_ai.request.max_tokens":s.maxTokens},"evalkit.prompt":c}},i),d=api.trace.setSpan(i,l),p;try{p=await api.context.with(d,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw l.recordException(m),l.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),l.end(),u}return l.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":p.generationId??"","gen_ai.usage.input_tokens":p.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":p.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":p.finishReason?[p.finishReason]:[],"evalkit.completion":p.text??""}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.chat.__evalkit=true;}var Vt=x(()=>{});function pt(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c="";if(typeof a=="string")c=`user: ${a}`;else {let g=a,y=g?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=g?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(k=>k.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
- `);}let i=api.context.active(),l=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},i),d=api.trace.setSpan(i,l),p;try{p=await api.context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw l.recordException(y),l.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),l.end(),g}let u=p?.response,m=u?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return l.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":u?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":u?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":u?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.generateContent.__evalkit=true;}var Dt=x(()=>{});function Ae(e){return e?.text??""}function uo(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(Ae).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
- `);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(Ae).join("")}return e!=null?String(e):""}function mo(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function Ie(e){let t=mo(e?.config),n=uo(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
10
- `)}function Ke(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}function Me(e,t,n){Jt&&B(Jt,t,he(e));}function dt(e,t,n){if(Jt=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"evalkit.prompt":Ie(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw i.recordException(u),i.setStatus({code:api.SpanStatusCode.ERROR,message:u.message}),i.end(),p}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":Ke(d)});try{Me(d,i,i.spanContext().traceId);}catch{}return i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContentStream",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"gen_ai.streaming":true,"evalkit.prompt":Ie(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}async function*p(){let u=[],m=0,f=0;try{for await(let g of d){try{let y=Ke(g);y&&u.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Me(g,i,i.spanContext().traceId);}catch{}yield g;}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":u.join("")}),i.setStatus({code:api.SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw i.recordException(y),i.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),g}finally{i.end();}}return p()},t.generateContentStream.__evalkit=true;}}var Jt,zt=x(()=>{et();Jt=null;});function Wt(e){if(typeof I>"u")return null;let t=I.cache;if(!t)return null;let n=Object.keys(t).find(r=>{let o=r.split("/node_modules/");return o.length>1&&o[o.length-1].startsWith(e+"/")});return n?t[n]?.exports??null:null}function E(){return typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)))}var S,Xt=x(()=>{S=new Function("s","return import(s)");});var $e={};ee($e,{langchainCallbackHandler:()=>Tt,langchainHandlerMethods:()=>Be,patchLangChain:()=>Co});function P(e,t=ho){let n;try{n=typeof e=="string"?e:JSON.stringify(e);}catch{n=String(e);}return n==null?"":n.length>t?n.slice(0,t)+"\u2026":n}function Ne(e){let t=e?.id;if(Array.isArray(t)){for(let n of ["openai","anthropic","google","vertexai","cohere","mistral","bedrock","ollama","groq"])if(t.includes(n))return n==="vertexai"?"vertex-ai":n;return t[t.length-1]}}function je(e,t){let n=t?.invocation_params??{};for(let o of ["model","model_name","modelName","model_id","deployment_name"])if(n[o])return String(n[o]);let r=e?.kwargs??{};for(let o of ["model","model_name","modelName","model_id"])if(r[o])return String(r[o]);return "unknown"}function vo(e){try{let n=((Array.isArray(e?.[0])?e[0]:e)??[]).map(r=>{let o=(typeof r?._getType=="function"?r._getType():void 0)??r?.role??r?.type??"message",s=typeof r?.content=="string"?r.content:P(r?.content);return `${o}: ${s}`});return P(n.join(`
11
- `))}catch{return P(e)}}function xo(e){try{let t=[];for(let n of e?.generations??[])for(let r of n??[])r?.text?t.push(String(r.text)):r?.message?.content&&t.push(typeof r.message.content=="string"?r.message.content:P(r.message.content));return P(t.filter(Boolean).join(`
12
- `))}catch{return ""}}function _o(e){let t=0,n=0;try{let r=e?.llmOutput?.tokenUsage??e?.llmOutput?.usage??{};if(t=r.promptTokens??r.prompt_tokens??r.input_tokens??0,n=r.completionTokens??r.completion_tokens??r.output_tokens??0,!t&&!n)for(let o of e?.generations??[])for(let s of o??[]){let a=s?.message?.usage_metadata;a&&(t=a.input_tokens??t,n=a.output_tokens??n);}}catch{}return {tin:t||0,tout:n||0}}function Be(e){let t=new Map;function n(o,s,a,c,i){try{let l=s?t.get(s):void 0,d=l?l.ctx:api.context.active(),p=e.tracer.startSpan(c,{kind:a==="llm_call"?api.SpanKind.CLIENT:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":a,"evalkit.framework":"langchain",...i}},d);t.set(o,{span:p,ctx:api.trace.setSpan(d,p)});}catch{}}function r(o,s,a,c){try{let i=t.get(o);if(!i)return;t.delete(o),a&&i.span.setAttributes(a),i.span.setStatus({code:s==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR,message:c}),i.span.end();}catch{}}return {handleChainStart(o,s,a,c,i,l,d,p){let u=p??o?.id?.[o.id.length-1]??"chain";n(a,c,"function_call",String(u),i?.length?{"langchain.tags":i.join(",")}:{});},handleChainEnd(o,s){r(s,"OK");},handleChainError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleLLMStart(o,s,a,c,i){let l=je(o,i);n(a,c,"llm_call","llm.generate",{"gen_ai.request.model":l,"gen_ai.system":Ne(o)??"","evalkit.prompt":P((s??[]).join(`
13
- `))});},handleChatModelStart(o,s,a,c,i){let l=je(o,i);n(a,c,"llm_call","chat.generate",{"gen_ai.request.model":l,"gen_ai.system":Ne(o)??"","evalkit.prompt":vo(s)});},handleLLMEnd(o,s){let{tin:a,tout:c}=_o(o),i=t.get(s);try{i&&B(e,i.span,ve(o));}catch{}r(s,"OK",{"evalkit.completion":xo(o),"gen_ai.usage.input_tokens":a,"gen_ai.usage.output_tokens":c,"gen_ai.usage.total_tokens":a+c});},handleLLMError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleToolStart(o,s,a,c,i,l,d){let p=d??o?.id?.[o.id.length-1]??"tool",u=t.get(c??"");xt(u?.span.spanContext().traceId,String(p)),n(a,c,"tool_call",String(p),{"tool.name":String(p),"tool.arguments":P(s)});},handleToolEnd(o,s){r(s,"OK",{"tool.result":P(o)});},handleToolError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleRetrieverStart(o,s,a,c){let i=o?.id?.[o.id.length-1]??"retriever";n(a,c,"db_query",String(i),{"retriever.query":P(s)});},handleRetrieverEnd(o,s){let a=Array.isArray(o)?o.length:0;r(s,"OK",{"retriever.document_count":a});},handleRetrieverError(o,s){r(s,"ERROR",void 0,String(o?.message??o));}}}async function Tt(e){try{let n=(await S("@langchain/core/callbacks/base")).BaseCallbackHandler.fromMethods(Be(e));return n.name="evalkit",n.__evalkit=!0,n}catch{return null}}async function Co(e){let t=await Tt(e);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 a=o(...s);try{a&&![...a.handlers??[],...a.inheritableHandlers??[]].some(l=>l?.__evalkit)&&typeof a.addHandler=="function"&&a.addHandler(t,!0);}catch{}return a},r.__evalkitPatched=!0;}}catch{}return t}var ho,Yt=x(()=>{tt();et();Xt();ho=4096;});function mt(e,t,n){G(e,t,n);}function ft(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c=a?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",i=a?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],l=[c?`system: ${c}`:"",...i].filter(Boolean).join(`
14
- `),d=api.context.active(),p=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":l}},d),u=api.trace.setSpan(d,p),m;try{m=await api.context.with(u,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw p.recordException(v),p.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),p.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),p.setStatus({code:api.SpanStatusCode.OK}),p.end(),m},t.generateContent.__evalkit=true;}var Qt=x(()=>{St();});function He(e,t={},n){function r(o,s,a){let c={...t,...s};o.addHook("onRequest",(i,l,d)=>{let p=i.routerPath??i.routeOptions?.url??i.url??"/",u=typeof c.name=="function"?c.name(i):c.name??`${String(i.method??"GET")} ${String(p)}`,m=i.headers?.traceparent,f=n?n(m):api.context.active(),{traceId:g,end:y,ctx:h}=api.context.with(f,()=>e.startHttpTrace(u,{method:String(i.method??"GET"),url:String(i.url??"/"),headers:i.headers,requestBody:void 0}));i._evalkitCtx=h,i._evalkitTraceId=g,i._evalkitEnd=y,i._evalkitEnded=false,api.context.with(h,d);}),o.addHook("preHandler",(i,l,d)=>{if(i._evalkitCtx&&i.body!==void 0){let p=api.trace.getActiveSpan();if(p?.isRecording())try{p.setAttribute("http.request.body",typeof i.body=="string"?i.body.slice(0,e.options.maxBodyBytes):JSON.stringify(i.body).slice(0,e.options.maxBodyBytes));}catch{}}api.context.with(i._evalkitCtx??api.context.active(),d);}),o.addHook("onSend",(i,l,d,p)=>{try{if(d!=null){let u=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);i._evalkitRespBody=u;}}catch{}p(null,d);}),o.addHook("onResponse",(i,l,d)=>{if(typeof i._evalkitEnd=="function"&&!i._evalkitEnded){i._evalkitEnded=true;let p=l.statusCode??200;i._evalkitEnd(p>=400?"ERROR":"OK",{statusCode:p,body:i._evalkitRespBody});}d();}),o.addHook("onError",(i,l,d,p)=>{typeof i._evalkitEnd=="function"&&!i._evalkitEnded&&(i._evalkitEnded=true,i._evalkitEnd("ERROR",{statusCode:l.statusCode??500})),p();}),a();}return r[Symbol.for("skip-override")]=true,r}var Ue=x(()=>{});function Ve(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,a=K(n.headers?.traceparent),{end:c,ctx:i,traceId:l}=api.context.with(a,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=i,n._evalkitTraceId=l;let d=api.trace.getSpan(i)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",l),r.setHeader?.("traceparent",`00-${l}-${d}-01`);let p=e.options.maxBodyBytes,u=[],m=0,f=h=>{if(!(!h||m>=p))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(u.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,k;if(u.length)try{k=Buffer.concat(u).subarray(0,p).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:k}),y.apply(r,h)},api.context.with(i,()=>o());}}var De=x(()=>{W();});function ze(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=K(n.request?.headers?.traceparent),{end:a,ctx:c}=api.context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await api.context.with(c,r);let i=n.status??200,l;try{let d=n.body;d!=null&&(l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}a(i>=400?"ERROR":"OK",{statusCode:i,body:l});}catch(i){throw a("ERROR",{statusCode:n.status??500}),i}}}var We=x(()=>{W();});function Ye(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",a=s;try{a=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${a}`,i=K(o.header("traceparent")),{end:l,ctx:d}=api.context.with(i,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await api.context.with(d,r);let p=n.res?.status??200,u;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(u=m.slice(0,e.options.maxBodyBytes));}}catch{}l(p>=400?"ERROR":"OK",{statusCode:p,body:u});}catch(p){throw l("ERROR",{statusCode:500}),p}}}var Qe=x(()=>{W();});function Ze(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let a=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=K(o.headers?.traceparent),{end:i,ctx:l}=api.context.with(c,()=>e.startHttpTrace(a,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:i,ctx:l}),s.continue}),n.ext("onPreResponse",(o,s)=>{let a=r.get(o);if(a){let c=o.response?.output?.statusCode??o.response?.statusCode??200,i;try{let l=o.response?.source??o.response?.result;l!=null&&(i=(typeof l=="string"?l:JSON.stringify(l)).slice(0,e.options.maxBodyBytes));}catch{}a.end(c>=400?"ERROR":"OK",{statusCode:c,body:i}),r.delete(o);}return s.continue});}}}var tn=x(()=>{W();});exports.EvalKitInterceptor=void 0;var Zt=x(()=>{exports.EvalKitInterceptor=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),a=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:i}=this.client.startHttpTrace(a,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),l=this.client.options.maxBodyBytes,d=[],p=0,u=f=>{if(!(!f||p>=l))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),p+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return u(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return u(g),f(g,...y)};}let m=api.context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{i("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,l).toString("utf-8");}catch{}i(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function Ao(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let a of s)try{n.defineMetadata(a,o.call(n,a,e),t);}catch{}}function en(e,t,n){let r=n?.include??To,o=n?.captureIO??true,s=new Set,a=0,c=[...t.getProviders(),...t.getControllers()];for(let i of c){let l=i?.instance;if(!l||typeof l!="object")continue;let d=l.constructor?.name??"";if(!r.test(d))continue;let p=Object.getPrototypeOf(l);if(!(!p||p===Object.prototype||s.has(p))){s.add(p);for(let u of Object.getOwnPropertyNames(p)){if(Oo.has(u))continue;let m=Object.getOwnPropertyDescriptor(p,u);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${u}`,f,void 0,o);Ao(f,g);try{Object.defineProperty(g,"name",{value:u,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(p,u,{...m,value:g}),a++;}}}return a}var Oo,To,nn=x(()=>{Oo=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),To=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function te(e){return Io.some(t=>t.test(e))}function Ko(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let a=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",i=e.path??"/";r=`${n}://${a}${c}${i}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function sn(e){let t,n;try{let s=typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)));t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:a}of r){let i=function(l,d,p){let u=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=Ko(l,u,a);if(te(m)||!api.trace.getActiveSpan()?.isRecording())return c.call(s,l,d,p);let h={...typeof l=="object"&&!(l instanceof URL)?l.headers??{}:{},...u?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof l=="object"&&!(l instanceof URL)&&l.headers&&delete l.headers["x-evalkit-span-id"],u?.headers&&delete u.headers["x-evalkit-span-id"];let b=X.get(String(v));if(b){let _=O({...h});delete _["x-evalkit-span-id"],Object.keys(_).length&&b.setAttributes({"http.request.headers":JSON.stringify(_)});}return c.call(s,l,d,p)}let k=O(h),R=e.tracer.startSpan(`${f} ${g}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},api.context.active()),T=c.call(s,l,d,p),w=R.spanContext();return T.setHeader("traceparent",`00-${w.traceId}-${w.spanId}-01`),T.on("response",b=>{let _=b.statusCode??0;R.setAttributes({"http.status_code":_,...b.headers?{"http.response.headers":JSON.stringify(O(b.headers))}:{}}),R.setStatus({code:_>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),R.end();}),T.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();}),T};let c=s.request;c.__evalkit||(i.__evalkit=true,Object.defineProperty(s,"request",{value:i,writable:true,configurable:true}));}}function an(e){let t;try{t=(typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href))))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let a=s[0],c=s[1],i=a.url??"/";if(te(i))return n.call(this,o,...s);if(api.trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let l=(a.method??"GET").toUpperCase(),d=i;try{d=new URL(i,"http://localhost").pathname;}catch{}let p=a.headers.traceparent,u=p?Mo(Array.isArray(p)?p[0]:p):api.context.active(),m=e.tracer.startSpan(`${l} ${d}`,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":l,"http.url":i,"http.request.headers":JSON.stringify(O(a.headers))}},u),f=api.trace.setSpan(u,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(a.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let _=[],A=0;a.on("data",q=>{try{if(q&&A<y){let ht=Buffer.isBuffer(q)?q:typeof q=="string"?Buffer.from(q):null;ht&&ht.length&&(_.push(ht),A+=ht.length);}}catch{}}),a.on("end",()=>{if(_.length)try{let q=Buffer.concat(_).subarray(0,y).toString("utf-8");q&&m.setAttribute("http.request.body",q);}catch{}});}let k=[],R=0,T=_=>{try{if(_&&typeof _!="function"&&R<y){let A=Buffer.isBuffer(_)?_:typeof _=="string"?Buffer.from(_):null;A&&A.length&&(k.push(A),R+=A.length);}}catch{}},w=c.write.bind(c),b=c.end.bind(c);return c.write=function(_,...A){return T(_),w(_,...A)},c.end=function(_,...A){return T(_),b(_,...A)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let _=c.getHeaders();_&&Object.keys(_).length&&m.setAttribute("http.response.headers",JSON.stringify(O(_)));}catch{}if(k.length)try{let _=Buffer.concat(k).subarray(0,y).toString("utf-8");_&&m.setAttribute("http.response.body",_);}catch{}m.setStatus({code:c.statusCode>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),m.end();}),c.on("error",_=>{m.setAttribute("error.message",_.message),m.recordException(_ instanceof Error?_:new Error(String(_))),m.setStatus({code:api.SpanStatusCode.ERROR,message:_.message}),m.end();}),api.context.with(f,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function Mo(e){let t=e.split("-");if(t.length<4)return api.context.active();let[,n,r,o]=t;if(!n||!r)return api.context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return api.trace.setSpanContext(api.context.active(),s)}catch{return api.context.active()}}function cn(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(te(o))return e(n,r);let s=api.trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let a=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let i={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{i[y]=g;});let l=O(i),d=s.spanContext(),p=`00-${d.traceId}-${d.spanId}-01`,u=new Headers(r?.headers);u.set("traceparent",p);let m={...r,headers:u};Object.keys(l).length&&s.addEvent("http.fetch.request",{"http.method":a,"http.url":o,"http.request.headers":JSON.stringify(l)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(O(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var Io,ln=x(()=>{$t();Gt();Io=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function un(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=a=>a.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
15
- ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(a,c)=>{let i=api.trace.getActiveSpan();if(i?.isRecording())i.addEvent(`log.${a}`,{"log.level":a,"log.message":c});else {let l=e.tracer.startSpan(`log.${a}`,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":a,"log.message":c}},api.context.active());l.setStatus({code:a==="ERROR"?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),l.end();}};console.log=(...a)=>{t(...a),s("INFO",o(a));},console.warn=(...a)=>{n(...a),s("WARN",o(a));},console.error=(...a)=>{r(...a),s("ERROR",o(a));},console.__evalkit=true;}var dn=x(()=>{});function fn(e,t,n){let r=api.trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},api.context.active());o.recordException(n),o.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),o.end();}}function gn(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));fn(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{fn(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var yn=x(()=>{});function Go(e){let t=Wt("mongoose");t&&bt(e,t);}function Lo(e){let t=Wt("axios");t&&st(e,t.default??t);}async function Ho(e){try{let n=E()("pg"),r=n.Client??n.default?.Client;if(r){at(e,r);return}}catch{}try{let t=await S("pg"),n=t.Client??t.default?.Client;n&&at(e,n);}catch{}}async function Uo(e){try{let t=E(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){it(e,r);return}}catch{}try{let t=await S("mysql2"),n=t.Connection??t.default?.Connection;n&&it(e,n);}catch{}}async function Fo(e){try{let n=E()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){ot(e,r);return}}catch{}try{let t=await S("ioredis"),n=t.default??t.Redis??t;n?.prototype&&ot(e,n);}catch{}}async function Vo(e){try{let n=E()("openai"),o=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o){$(e,o);return}}catch{}try{let t=await S("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&$(e,r);}catch{}}async function Do(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o){G(e,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&G(e,r);}catch{}}async function Jo(e){try{let n=E()("@aws-sdk/client-bedrock-runtime"),o=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o){ct(e,o);return}}catch{}try{let t=await S("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&ct(e,r);}catch{}}async function zo(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o){mt(e,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&mt(e,r);}catch{}}async function Wo(e){try{let n=E()("@google-cloud/vertexai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){ft(e,o);return}}catch{}try{let t=await S("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ft(e,r);}catch{}}async function Xo(e){try{let n=E()("cohere-ai"),o=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o){lt(e,o);return}}catch{}try{let t=await S("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&lt(e,r);}catch{}}async function Yo(e){try{let n=E()("@google/generative-ai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){pt(e,o);return}}catch{}try{let t=await S("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&pt(e,r);}catch{}}async function Qo(e){try{let n=E()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){dt(e,r.prototype);return}}catch{}try{let t=await S("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&dt(e,n.prototype);}catch{}}async function Zo(e){try{let n=E()("groq-sdk"),o=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o){$(e,o,void 0,"groq");return}}catch{}try{let t=await S("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&$(e,r,void 0,"groq");}catch{}}async function ts(e){try{let{patchLangChain:t}=await Promise.resolve().then(()=>(Yt(),$e));await t(e);}catch{}}function hn(e){try{an(e);}catch{}try{sn(e);}catch{}cn(),un(e),gn(e),Go(e),Lo(e),Promise.all([Vo(e),Do(e),Jo(e),zo(e),Wo(e),Xo(e),Yo(e),Qo(e),Zo(e),ts(e),Ho(e),Uo(e),Fo(e)]).catch(()=>{});}var vn=x(()=>{Xt();qt();St();Ft();Qt();Vt();Dt();zt();jt();Ht();Ut();Bt();Lt();ln();dn();yn();});var ne={};ee(ne,{EvalKitClient:()=>exports.EvalKitClient,EvalKitInterceptor:()=>exports.EvalKitInterceptor,TraceMethod:()=>Dn,Traced:()=>Jn,createNestjsInterceptor:()=>$n,currentTraceId:()=>Yn,default:()=>exports.default,enableNestjsAutoTrace:()=>Wn,evaluate:()=>U,expressMiddleware:()=>Pn,fastifyPlugin:()=>qn,flush:()=>Ln,generateScenarios:()=>Qn,hapiPlugin:()=>Bn,honoMiddleware:()=>jn,init:()=>xn,koaMiddleware:()=>Nn,langchainHandler:()=>On,patchAnthropicClient:()=>Cn,patchAnthropicVertexClient:()=>Rn,patchAxiosClient:()=>In,patchBedrockClient:()=>kn,patchCohereClient:()=>bn,patchGoogleAIModel:()=>En,patchGoogleGenAIModels:()=>wn,patchMongooseClient:()=>Tn,patchMysql2Client:()=>Mn,patchOpenAIClient:()=>_n,patchPgClient:()=>Kn,patchRedisClient:()=>An,patchVertexGenerativeModel:()=>Sn,simulateUser:()=>Zn,startHttpTrace:()=>Hn,startSpan:()=>Un,startTrace:()=>Gn,traceFunction:()=>Fn,traceObject:()=>zn,traceTool:()=>Vn,withTrace:()=>Xn});function C(){if(!H)throw new Error("[evalkit] call evalkit.init() before using the SDK");return H}function xn(e){return H&&H.destroy(),H=new exports.EvalKitClient(e),hn(H),H}function _n(e,t){$(C(),e.chat.completions,t);}function Cn(e,t){G(C(),e.messages,t);}function kn(e){ct(C(),e);}function Rn(e){mt(C(),e.messages);}function Sn(e){ft(C(),e);}function bn(e){lt(C(),e);}function En(e){pt(C(),e);}function wn(e){dt(C(),e);}function On(){return Tt(C())}function Tn(e){bt(C(),e);}function An(e){ot(C(),e);}function In(e){st(C(),e);}function Kn(e){at(C(),e);}function Mn(e){it(C(),e);}function Pn(e){return Ve(C(),e)}function qn(e){return He(C(),e,rs)}function Nn(e){return ze(C(),e)}function jn(e){return Ye(C(),e)}function Bn(e){return Ze(C(),e)}function $n(){return new exports.EvalKitInterceptor(C())}function Gn(e,t){return C().startTrace(e,t)}async function Ln(){return C().flush()}function Hn(e,t,n){return C().startHttpTrace(e,t,n)}function Un(e,t,n){return C().startSpan(e,t,n)}function Fn(e,t,n,r=true){return C().traceFunction(e,t,n,r)}function Vn(e,t,n,r=true){return C().traceTool(e,t,n,r)}function Dn(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,a;return r.value=function(...c){return a||(a=C().traceFunction(s,o)),a.apply(this,c)},r}}function Jn(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let a=s.value,c=`${r}.${o}`,i=null;Object.defineProperty(n,o,{...s,value:function(...l){return i||(i=C().traceFunction(c,a)),i.apply(this,l)}});}return t}}function zn(e,t){let n=C(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let a=e[s];if(typeof a=="function"&&!a.__evalkitTraced){let c=r?`${r}.${s}`:s,i=n.traceFunction(c,a,void 0,o);i.__evalkitTraced=true,e[s]=i;}}return e}async function Wn(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?en(C(),n,t):0}function Xn(e,t){return api.context.with(e,t)}function Yn(){let e=api.trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function Qn(e){return se(C(),e)}function Zn(e){return ae(C(),e)}function rs(e){return K(e)}var H;exports.default=void 0;var re=x(()=>{vt();ie();Mt();W();qt();St();jt();Bt();Lt();Ht();Ut();Ft();Vt();Dt();zt();Yt();Qt();Ue();De();We();Qe();tn();Zt();nn();vn();Mt();Zt();vt();H=null;exports.default={init:xn,evaluate:U,generateScenarios:Qn,simulateUser:Zn,patchOpenAIClient:_n,patchAnthropicClient:Cn,patchBedrockClient:kn,patchAnthropicVertexClient:Rn,patchVertexGenerativeModel:Sn,patchCohereClient:bn,patchGoogleAIModel:En,patchGoogleGenAIModels:wn,langchainHandler:On,patchMongooseClient:Tn,patchRedisClient:An,patchAxiosClient:In,patchPgClient:Kn,patchMysql2Client:Mn,expressMiddleware:Pn,fastifyPlugin:qn,koaMiddleware:Nn,honoMiddleware:jn,hapiPlugin:Bn,createNestjsInterceptor:$n,startTrace:Gn,startHttpTrace:Hn,startSpan:Un,traceFunction:Fn,traceTool:Vn,traceObject:zn,TraceMethod:Dn,Traced:Jn,enableNestjsAutoTrace:Wn,withTrace:Xn,currentTraceId:Yn,flush:Ln};});re();exports.TraceMethod=Dn;exports.Traced=Jn;exports.createNestjsInterceptor=$n;exports.currentTraceId=Yn;exports.enableNestjsAutoTrace=Wn;exports.evaluate=U;exports.expressMiddleware=Pn;exports.fastifyPlugin=qn;exports.flush=Ln;exports.generateScenarios=Qn;exports.hapiPlugin=Bn;exports.honoMiddleware=jn;exports.init=xn;exports.koaMiddleware=Nn;exports.langchainHandler=On;exports.patchAnthropicClient=Cn;exports.patchAnthropicVertexClient=Rn;exports.patchAxiosClient=In;exports.patchBedrockClient=kn;exports.patchCohereClient=bn;exports.patchGoogleAIModel=En;exports.patchGoogleGenAIModels=wn;exports.patchMongooseClient=Tn;exports.patchMysql2Client=Mn;exports.patchOpenAIClient=_n;exports.patchPgClient=Kn;exports.patchRedisClient=An;exports.patchVertexGenerativeModel=Sn;exports.simulateUser=Zn;exports.startHttpTrace=Hn;exports.startSpan=Un;exports.startTrace=Gn;exports.traceFunction=Fn;exports.traceObject=zn;exports.traceTool=Vn;exports.withTrace=Xn;
8
+ `);}let i=api.context.active(),l=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},i),d=api.trace.setSpan(i,l),p;try{p=await api.context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw l.recordException(y),l.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),l.end(),g}let u=p?.response,m=u?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return l.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":u?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":u?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":u?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.generateContent.__evalkit=true;}var Dt=x(()=>{});function Ie(e){return e?.text??""}function fo(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(Ie).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
+ `);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(Ie).join("")}return e!=null?String(e):""}function go(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function Ke(e){let t=go(e?.config),n=fo(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
10
+ `)}function Me(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}function Pe(e,t,n){Jt&&$(Jt,t,ve(e));}function dt(e,t,n){if(Jt=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"evalkit.prompt":Ke(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw i.recordException(u),i.setStatus({code:api.SpanStatusCode.ERROR,message:u.message}),i.end(),p}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":Me(d)});try{Pe(d,i,i.spanContext().traceId);}catch{}return i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContentStream",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"gen_ai.streaming":true,"evalkit.prompt":Ke(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}async function*p(){let u=[],m=0,f=0;try{for await(let g of d){try{let y=Me(g);y&&u.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Pe(g,i,i.spanContext().traceId);}catch{}yield g;}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":u.join("")}),i.setStatus({code:api.SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw i.recordException(y),i.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),g}finally{i.end();}}return p()},t.generateContentStream.__evalkit=true;}}var Jt,zt=x(()=>{et();Jt=null;});function Wt(e){if(typeof I>"u")return null;let t=I.cache;if(!t)return null;let n=Object.keys(t).find(r=>{let o=r.split("/node_modules/");return o.length>1&&o[o.length-1].startsWith(e+"/")});return n?t[n]?.exports??null:null}function E(){return typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)))}var R,Xt=x(()=>{R=new Function("s","return import(s)");});var Ge={};ee(Ge,{langchainCallbackHandler:()=>Ot,langchainHandlerMethods:()=>Be,patchLangChain:()=>So});function P(e,t=xo){let n;try{n=typeof e=="string"?e:JSON.stringify(e);}catch{n=String(e);}return n==null?"":n.length>t?n.slice(0,t)+"\u2026":n}function je(e){let t=e?.id;if(Array.isArray(t)){for(let n of ["openai","anthropic","google","vertexai","cohere","mistral","bedrock","ollama","groq"])if(t.includes(n))return n==="vertexai"?"vertex-ai":n;return t[t.length-1]}}function $e(e,t){let n=t?.invocation_params??{};for(let o of ["model","model_name","modelName","model_id","deployment_name"])if(n[o])return String(n[o]);let r=e?.kwargs??{};for(let o of ["model","model_name","modelName","model_id"])if(r[o])return String(r[o]);return "unknown"}function _o(e){try{let n=((Array.isArray(e?.[0])?e[0]:e)??[]).map(r=>{let o=(typeof r?._getType=="function"?r._getType():void 0)??r?.role??r?.type??"message",s=typeof r?.content=="string"?r.content:P(r?.content);return `${o}: ${s}`});return P(n.join(`
11
+ `))}catch{return P(e)}}function Co(e){try{let t=[];for(let n of e?.generations??[])for(let r of n??[])r?.text?t.push(String(r.text)):r?.message?.content&&t.push(typeof r.message.content=="string"?r.message.content:P(r.message.content));return P(t.filter(Boolean).join(`
12
+ `))}catch{return ""}}function ko(e){let t=0,n=0;try{let r=e?.llmOutput?.tokenUsage??e?.llmOutput?.usage??{};if(t=r.promptTokens??r.prompt_tokens??r.input_tokens??0,n=r.completionTokens??r.completion_tokens??r.output_tokens??0,!t&&!n)for(let o of e?.generations??[])for(let s of o??[]){let a=s?.message?.usage_metadata;a&&(t=a.input_tokens??t,n=a.output_tokens??n);}}catch{}return {tin:t||0,tout:n||0}}function Be(e){let t=new Map;function n(o,s,a,c,i){try{let l=s?t.get(s):void 0,d=l?l.ctx:api.context.active(),p=e.tracer.startSpan(c,{kind:a==="llm_call"?api.SpanKind.CLIENT:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":a,"evalkit.framework":"langchain",...i}},d);t.set(o,{span:p,ctx:api.trace.setSpan(d,p)});}catch{}}function r(o,s,a,c){try{let i=t.get(o);if(!i)return;t.delete(o),a&&i.span.setAttributes(a),i.span.setStatus({code:s==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR,message:c}),i.span.end();}catch{}}return {handleChainStart(o,s,a,c,i,l,d,p){let u=p??o?.id?.[o.id.length-1]??"chain";n(a,c,"function_call",String(u),i?.length?{"langchain.tags":i.join(",")}:{});},handleChainEnd(o,s){r(s,"OK");},handleChainError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleLLMStart(o,s,a,c,i){let l=$e(o,i);n(a,c,"llm_call","llm.generate",{"gen_ai.request.model":l,"gen_ai.system":je(o)??"","evalkit.prompt":P((s??[]).join(`
13
+ `))});},handleChatModelStart(o,s,a,c,i){let l=$e(o,i);n(a,c,"llm_call","chat.generate",{"gen_ai.request.model":l,"gen_ai.system":je(o)??"","evalkit.prompt":_o(s)});},handleLLMEnd(o,s){let{tin:a,tout:c}=ko(o),i=t.get(s);try{i&&$(e,i.span,xe(o));}catch{}r(s,"OK",{"evalkit.completion":Co(o),"gen_ai.usage.input_tokens":a,"gen_ai.usage.output_tokens":c,"gen_ai.usage.total_tokens":a+c});},handleLLMError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleToolStart(o,s,a,c,i,l,d){let p=d??o?.id?.[o.id.length-1]??"tool",u=t.get(c??"");xt(u?.span.spanContext().traceId,String(p)),n(a,c,"tool_call",String(p),{"tool.name":String(p),"tool.arguments":P(s)});},handleToolEnd(o,s){r(s,"OK",{"tool.result":P(o)});},handleToolError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleRetrieverStart(o,s,a,c){let i=o?.id?.[o.id.length-1]??"retriever";n(a,c,"db_query",String(i),{"retriever.query":P(s)});},handleRetrieverEnd(o,s){let a=Array.isArray(o)?o.length:0;r(s,"OK",{"retriever.document_count":a});},handleRetrieverError(o,s){r(s,"ERROR",void 0,String(o?.message??o));}}}async function Ot(e){try{let n=(await R("@langchain/core/callbacks/base")).BaseCallbackHandler.fromMethods(Be(e));return n.name="evalkit",n.__evalkit=!0,n}catch{return null}}async function So(e){let t=await Ot(e);if(!t)return null;try{let r=(await R("@langchain/core/callbacks/manager")).CallbackManager;if(r&&typeof r.configure=="function"&&!r.__evalkitPatched){let o=r.configure.bind(r);r.configure=(...s)=>{let a=o(...s);try{a&&![...a.handlers??[],...a.inheritableHandlers??[]].some(l=>l?.__evalkit)&&typeof a.addHandler=="function"&&a.addHandler(t,!0);}catch{}return a},r.__evalkitPatched=!0;}}catch{}return t}var xo,Yt=x(()=>{tt();et();Xt();xo=4096;});function mt(e,t,n){G(e,t,n);}function ft(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c=a?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",i=a?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],l=[c?`system: ${c}`:"",...i].filter(Boolean).join(`
14
+ `),d=api.context.active(),p=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":l}},d),u=api.trace.setSpan(d,p),m;try{m=await api.context.with(u,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw p.recordException(v),p.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),p.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),p.setStatus({code:api.SpanStatusCode.OK}),p.end(),m},t.generateContent.__evalkit=true;}var Qt=x(()=>{Rt();});function Ue(e,t={},n){function r(o,s,a){let c={...t,...s};o.addHook("onRequest",(i,l,d)=>{let p=i.routerPath??i.routeOptions?.url??i.url??"/",u=typeof c.name=="function"?c.name(i):c.name??`${String(i.method??"GET")} ${String(p)}`,m=i.headers?.traceparent,f=n?n(m):api.context.active(),{traceId:g,end:y,ctx:h}=api.context.with(f,()=>e.startHttpTrace(u,{method:String(i.method??"GET"),url:String(i.url??"/"),headers:i.headers,requestBody:void 0}));i._evalkitCtx=h,i._evalkitTraceId=g,i._evalkitEnd=y,i._evalkitEnded=false,api.context.with(h,d);}),o.addHook("preHandler",(i,l,d)=>{if(i._evalkitCtx&&i.body!==void 0){let p=api.trace.getActiveSpan();if(p?.isRecording())try{p.setAttribute("http.request.body",typeof i.body=="string"?i.body.slice(0,e.options.maxBodyBytes):JSON.stringify(i.body).slice(0,e.options.maxBodyBytes));}catch{}}api.context.with(i._evalkitCtx??api.context.active(),d);}),o.addHook("onSend",(i,l,d,p)=>{try{if(d!=null){let u=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);i._evalkitRespBody=u;}}catch{}p(null,d);}),o.addHook("onResponse",(i,l,d)=>{if(typeof i._evalkitEnd=="function"&&!i._evalkitEnded){i._evalkitEnded=true;let p=l.statusCode??200;i._evalkitEnd(p>=400?"ERROR":"OK",{statusCode:p,body:i._evalkitRespBody});}d();}),o.addHook("onError",(i,l,d,p)=>{typeof i._evalkitEnd=="function"&&!i._evalkitEnded&&(i._evalkitEnded=true,i._evalkitEnd("ERROR",{statusCode:l.statusCode??500})),p();}),a();}return r[Symbol.for("skip-override")]=true,r}var Fe=x(()=>{});function De(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,a=K(n.headers?.traceparent),{end:c,ctx:i,traceId:l}=api.context.with(a,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=i,n._evalkitTraceId=l;let d=api.trace.getSpan(i)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",l),r.setHeader?.("traceparent",`00-${l}-${d}-01`);let p=e.options.maxBodyBytes,u=[],m=0,f=h=>{if(!(!h||m>=p))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(u.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,k;if(u.length)try{k=Buffer.concat(u).subarray(0,p).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:k}),y.apply(r,h)},api.context.with(i,()=>o());}}var Je=x(()=>{W();});function We(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=K(n.request?.headers?.traceparent),{end:a,ctx:c}=api.context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await api.context.with(c,r);let i=n.status??200,l;try{let d=n.body;d!=null&&(l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}a(i>=400?"ERROR":"OK",{statusCode:i,body:l});}catch(i){throw a("ERROR",{statusCode:n.status??500}),i}}}var Xe=x(()=>{W();});function Qe(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",a=s;try{a=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${a}`,i=K(o.header("traceparent")),{end:l,ctx:d}=api.context.with(i,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await api.context.with(d,r);let p=n.res?.status??200,u;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(u=m.slice(0,e.options.maxBodyBytes));}}catch{}l(p>=400?"ERROR":"OK",{statusCode:p,body:u});}catch(p){throw l("ERROR",{statusCode:500}),p}}}var Ze=x(()=>{W();});function tn(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let a=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=K(o.headers?.traceparent),{end:i,ctx:l}=api.context.with(c,()=>e.startHttpTrace(a,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:i,ctx:l}),s.continue}),n.ext("onPreResponse",(o,s)=>{let a=r.get(o);if(a){let c=o.response?.output?.statusCode??o.response?.statusCode??200,i;try{let l=o.response?.source??o.response?.result;l!=null&&(i=(typeof l=="string"?l:JSON.stringify(l)).slice(0,e.options.maxBodyBytes));}catch{}a.end(c>=400?"ERROR":"OK",{statusCode:c,body:i}),r.delete(o);}return s.continue});}}}var en=x(()=>{W();});exports.EvalKitInterceptor=void 0;var Zt=x(()=>{exports.EvalKitInterceptor=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),a=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:i}=this.client.startHttpTrace(a,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),l=this.client.options.maxBodyBytes,d=[],p=0,u=f=>{if(!(!f||p>=l))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),p+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return u(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return u(g),f(g,...y)};}let m=api.context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{i("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,l).toString("utf-8");}catch{}i(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function Ko(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let a of s)try{n.defineMetadata(a,o.call(n,a,e),t);}catch{}}function nn(e,t,n){let r=n?.include??Io,o=n?.captureIO??true,s=new Set,a=0,c=[...t.getProviders(),...t.getControllers()];for(let i of c){let l=i?.instance;if(!l||typeof l!="object")continue;let d=l.constructor?.name??"";if(!r.test(d))continue;let p=Object.getPrototypeOf(l);if(!(!p||p===Object.prototype||s.has(p))){s.add(p);for(let u of Object.getOwnPropertyNames(p)){if(Ao.has(u))continue;let m=Object.getOwnPropertyDescriptor(p,u);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${u}`,f,void 0,o);Ko(f,g);try{Object.defineProperty(g,"name",{value:u,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(p,u,{...m,value:g}),a++;}}}return a}var Ao,Io,rn=x(()=>{Ao=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),Io=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function te(e){return Mo.some(t=>t.test(e))}function Po(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let a=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",i=e.path??"/";r=`${n}://${a}${c}${i}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function an(e){let t,n;try{let s=typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)));t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:a}of r){let i=function(l,d,p){let u=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=Po(l,u,a);if(te(m)||!api.trace.getActiveSpan()?.isRecording())return c.call(s,l,d,p);let h={...typeof l=="object"&&!(l instanceof URL)?l.headers??{}:{},...u?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof l=="object"&&!(l instanceof URL)&&l.headers&&delete l.headers["x-evalkit-span-id"],u?.headers&&delete u.headers["x-evalkit-span-id"];let b=X.get(String(v));if(b){let _=T({...h});delete _["x-evalkit-span-id"],Object.keys(_).length&&b.setAttributes({"http.request.headers":JSON.stringify(_)});}return c.call(s,l,d,p)}let k=T(h),S=e.tracer.startSpan(`${f} ${g}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},api.context.active()),O=c.call(s,l,d,p),w=S.spanContext();return O.setHeader("traceparent",`00-${w.traceId}-${w.spanId}-01`),O.on("response",b=>{let _=b.statusCode??0;S.setAttributes({"http.status_code":_,...b.headers?{"http.response.headers":JSON.stringify(T(b.headers))}:{}}),S.setStatus({code:_>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),S.end();}),O.on("error",b=>{S.setAttributes({"http.status_code":0,"error.message":b.message}),S.recordException(b instanceof Error?b:new Error(String(b))),S.setStatus({code:api.SpanStatusCode.ERROR,message:b.message}),S.end();}),O};let c=s.request;c.__evalkit||(i.__evalkit=true,Object.defineProperty(s,"request",{value:i,writable:true,configurable:true}));}}function cn(e){let t;try{t=(typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href))))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let a=s[0],c=s[1],i=a.url??"/";if(te(i))return n.call(this,o,...s);if(api.trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let l=(a.method??"GET").toUpperCase(),d=i;try{d=new URL(i,"http://localhost").pathname;}catch{}let p=a.headers.traceparent,u=p?qo(Array.isArray(p)?p[0]:p):api.context.active(),m=e.tracer.startSpan(`${l} ${d}`,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":l,"http.url":i,"http.request.headers":JSON.stringify(T(a.headers))}},u),f=api.trace.setSpan(u,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(a.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let _=[],A=0;a.on("data",q=>{try{if(q&&A<y){let ht=Buffer.isBuffer(q)?q:typeof q=="string"?Buffer.from(q):null;ht&&ht.length&&(_.push(ht),A+=ht.length);}}catch{}}),a.on("end",()=>{if(_.length)try{let q=Buffer.concat(_).subarray(0,y).toString("utf-8");q&&m.setAttribute("http.request.body",q);}catch{}});}let k=[],S=0,O=_=>{try{if(_&&typeof _!="function"&&S<y){let A=Buffer.isBuffer(_)?_:typeof _=="string"?Buffer.from(_):null;A&&A.length&&(k.push(A),S+=A.length);}}catch{}},w=c.write.bind(c),b=c.end.bind(c);return c.write=function(_,...A){return O(_),w(_,...A)},c.end=function(_,...A){return O(_),b(_,...A)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let _=c.getHeaders();_&&Object.keys(_).length&&m.setAttribute("http.response.headers",JSON.stringify(T(_)));}catch{}if(k.length)try{let _=Buffer.concat(k).subarray(0,y).toString("utf-8");_&&m.setAttribute("http.response.body",_);}catch{}m.setStatus({code:c.statusCode>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),m.end();}),c.on("error",_=>{m.setAttribute("error.message",_.message),m.recordException(_ instanceof Error?_:new Error(String(_))),m.setStatus({code:api.SpanStatusCode.ERROR,message:_.message}),m.end();}),api.context.with(f,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function qo(e){let t=e.split("-");if(t.length<4)return api.context.active();let[,n,r,o]=t;if(!n||!r)return api.context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return api.trace.setSpanContext(api.context.active(),s)}catch{return api.context.active()}}function ln(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(te(o))return e(n,r);let s=api.trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let a=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let i={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{i[y]=g;});let l=T(i),d=s.spanContext(),p=`00-${d.traceId}-${d.spanId}-01`,u=new Headers(r?.headers);u.set("traceparent",p);let m={...r,headers:u};Object.keys(l).length&&s.addEvent("http.fetch.request",{"http.method":a,"http.url":o,"http.request.headers":JSON.stringify(l)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(T(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var Mo,pn=x(()=>{Bt();Gt();Mo=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function dn(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=a=>a.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
15
+ ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(a,c)=>{let i=api.trace.getActiveSpan();if(i?.isRecording())i.addEvent(`log.${a}`,{"log.level":a,"log.message":c});else {let l=e.tracer.startSpan(`log.${a}`,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":a,"log.message":c}},api.context.active());l.setStatus({code:a==="ERROR"?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),l.end();}};console.log=(...a)=>{t(...a),s("INFO",o(a));},console.warn=(...a)=>{n(...a),s("WARN",o(a));},console.error=(...a)=>{r(...a),s("ERROR",o(a));},console.__evalkit=true;}var mn=x(()=>{});function gn(e,t,n){let r=api.trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},api.context.active());o.recordException(n),o.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),o.end();}}function yn(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));gn(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{gn(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var hn=x(()=>{});function Ho(e){let t=Wt("mongoose");t&&bt(e,t);}function Uo(e){let t=Wt("axios");t&&st(e,t.default??t);}async function Fo(e){try{let n=E()("pg"),r=n.Client??n.default?.Client;if(r){at(e,r);return}}catch{}try{let t=await R("pg"),n=t.Client??t.default?.Client;n&&at(e,n);}catch{}}async function Vo(e){try{let t=E(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){it(e,r);return}}catch{}try{let t=await R("mysql2"),n=t.Connection??t.default?.Connection;n&&it(e,n);}catch{}}async function Do(e){try{let n=E()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){ot(e,r);return}}catch{}try{let t=await R("ioredis"),n=t.default??t.Redis??t;n?.prototype&&ot(e,n);}catch{}}async function Jo(e){try{let n=E()("openai"),o=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o){B(e,o);return}}catch{}try{let t=await R("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&B(e,r);}catch{}}async function zo(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o){G(e,o);return}}catch{}try{let t=await R("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&G(e,r);}catch{}}async function Wo(e){try{let n=E()("@aws-sdk/client-bedrock-runtime"),o=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o){ct(e,o);return}}catch{}try{let t=await R("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&ct(e,r);}catch{}}async function Xo(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o){mt(e,o);return}}catch{}try{let t=await R("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&mt(e,r);}catch{}}async function Yo(e){try{let n=E()("@google-cloud/vertexai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){ft(e,o);return}}catch{}try{let t=await R("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ft(e,r);}catch{}}async function Qo(e){try{let n=E()("cohere-ai"),o=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o){lt(e,o);return}}catch{}try{let t=await R("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&lt(e,r);}catch{}}async function Zo(e){try{let n=E()("@google/generative-ai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){pt(e,o);return}}catch{}try{let t=await R("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&pt(e,r);}catch{}}async function ts(e){try{let n=E()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){dt(e,r.prototype);return}}catch{}try{let t=await R("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&dt(e,n.prototype);}catch{}}async function es(e){try{let n=E()("groq-sdk"),o=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o){B(e,o,void 0,"groq");return}}catch{}try{let t=await R("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&B(e,r,void 0,"groq");}catch{}}async function ns(e){try{let{patchLangChain:t}=await Promise.resolve().then(()=>(Yt(),Ge));await t(e);}catch{}}function vn(e){try{cn(e);}catch{}try{an(e);}catch{}ln(),dn(e),yn(e),Ho(e),Uo(e),Promise.all([Jo(e),zo(e),Wo(e),Xo(e),Yo(e),Qo(e),Zo(e),ts(e),es(e),ns(e),Fo(e),Vo(e),Do(e)]).catch(()=>{});}var xn=x(()=>{Xt();qt();Rt();Ft();Qt();Vt();Dt();zt();jt();Ht();Ut();$t();Lt();pn();mn();hn();});var ne={};ee(ne,{EvalKitClient:()=>exports.EvalKitClient,EvalKitInterceptor:()=>exports.EvalKitInterceptor,TraceMethod:()=>Jn,Traced:()=>zn,createNestjsInterceptor:()=>Gn,currentTraceId:()=>Qn,default:()=>exports.default,enableNestjsAutoTrace:()=>Xn,evaluate:()=>U,evaluateSimulation:()=>er,expressMiddleware:()=>qn,fastifyPlugin:()=>Nn,flush:()=>Hn,generateScenarios:()=>Zn,hapiPlugin:()=>Bn,honoMiddleware:()=>$n,init:()=>_n,koaMiddleware:()=>jn,langchainHandler:()=>On,patchAnthropicClient:()=>kn,patchAnthropicVertexClient:()=>Rn,patchAxiosClient:()=>Kn,patchBedrockClient:()=>Sn,patchCohereClient:()=>En,patchGoogleAIModel:()=>wn,patchGoogleGenAIModels:()=>Tn,patchMongooseClient:()=>An,patchMysql2Client:()=>Pn,patchOpenAIClient:()=>Cn,patchPgClient:()=>Mn,patchRedisClient:()=>In,patchVertexGenerativeModel:()=>bn,simulateUser:()=>tr,startHttpTrace:()=>Un,startSpan:()=>Fn,startTrace:()=>Ln,traceFunction:()=>Vn,traceObject:()=>Wn,traceTool:()=>Dn,withTrace:()=>Yn});function C(){if(!H)throw new Error("[evalkit] call evalkit.init() before using the SDK");return H}function _n(e){return H&&H.destroy(),H=new exports.EvalKitClient(e),vn(H),H}function Cn(e,t){B(C(),e.chat.completions,t);}function kn(e,t){G(C(),e.messages,t);}function Sn(e){ct(C(),e);}function Rn(e){mt(C(),e.messages);}function bn(e){ft(C(),e);}function En(e){lt(C(),e);}function wn(e){pt(C(),e);}function Tn(e){dt(C(),e);}function On(){return Ot(C())}function An(e){bt(C(),e);}function In(e){ot(C(),e);}function Kn(e){st(C(),e);}function Mn(e){at(C(),e);}function Pn(e){it(C(),e);}function qn(e){return De(C(),e)}function Nn(e){return Ue(C(),e,ss)}function jn(e){return We(C(),e)}function $n(e){return Qe(C(),e)}function Bn(e){return tn(C(),e)}function Gn(){return new exports.EvalKitInterceptor(C())}function Ln(e,t){return C().startTrace(e,t)}async function Hn(){return C().flush()}function Un(e,t,n){return C().startHttpTrace(e,t,n)}function Fn(e,t,n){return C().startSpan(e,t,n)}function Vn(e,t,n,r=true){return C().traceFunction(e,t,n,r)}function Dn(e,t,n,r=true){return C().traceTool(e,t,n,r)}function Jn(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,a;return r.value=function(...c){return a||(a=C().traceFunction(s,o)),a.apply(this,c)},r}}function zn(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let a=s.value,c=`${r}.${o}`,i=null;Object.defineProperty(n,o,{...s,value:function(...l){return i||(i=C().traceFunction(c,a)),i.apply(this,l)}});}return t}}function Wn(e,t){let n=C(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let a=e[s];if(typeof a=="function"&&!a.__evalkitTraced){let c=r?`${r}.${s}`:s,i=n.traceFunction(c,a,void 0,o);i.__evalkitTraced=true,e[s]=i;}}return e}async function Xn(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?nn(C(),n,t):0}function Yn(e,t){return api.context.with(e,t)}function Qn(){let e=api.trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function Zn(e){return se(C(),e)}function tr(e){return ae(C(),e)}function er(e){return ie(C(),e)}function ss(e){return K(e)}var H;exports.default=void 0;var re=x(()=>{vt();ce();Mt();W();qt();Rt();jt();$t();Lt();Ht();Ut();Ft();Vt();Dt();zt();Yt();Qt();Fe();Je();Xe();Ze();en();Zt();rn();xn();Mt();Zt();vt();H=null;exports.default={init:_n,evaluate:U,generateScenarios:Zn,simulateUser:tr,evaluateSimulation:er,patchOpenAIClient:Cn,patchAnthropicClient:kn,patchBedrockClient:Sn,patchAnthropicVertexClient:Rn,patchVertexGenerativeModel:bn,patchCohereClient:En,patchGoogleAIModel:wn,patchGoogleGenAIModels:Tn,langchainHandler:On,patchMongooseClient:An,patchRedisClient:In,patchAxiosClient:Kn,patchPgClient:Mn,patchMysql2Client:Pn,expressMiddleware:qn,fastifyPlugin:Nn,koaMiddleware:jn,honoMiddleware:$n,hapiPlugin:Bn,createNestjsInterceptor:Gn,startTrace:Ln,startHttpTrace:Un,startSpan:Fn,traceFunction:Vn,traceTool:Dn,traceObject:Wn,TraceMethod:Jn,Traced:zn,enableNestjsAutoTrace:Xn,withTrace:Yn,currentTraceId:Qn,flush:Hn};});re();exports.TraceMethod=Jn;exports.Traced=zn;exports.createNestjsInterceptor=Gn;exports.currentTraceId=Qn;exports.enableNestjsAutoTrace=Xn;exports.evaluate=U;exports.evaluateSimulation=er;exports.expressMiddleware=qn;exports.fastifyPlugin=Nn;exports.flush=Hn;exports.generateScenarios=Zn;exports.hapiPlugin=Bn;exports.honoMiddleware=$n;exports.init=_n;exports.koaMiddleware=jn;exports.langchainHandler=On;exports.patchAnthropicClient=kn;exports.patchAnthropicVertexClient=Rn;exports.patchAxiosClient=Kn;exports.patchBedrockClient=Sn;exports.patchCohereClient=En;exports.patchGoogleAIModel=wn;exports.patchGoogleGenAIModels=Tn;exports.patchMongooseClient=An;exports.patchMysql2Client=Pn;exports.patchOpenAIClient=Cn;exports.patchPgClient=Mn;exports.patchRedisClient=In;exports.patchVertexGenerativeModel=bn;exports.simulateUser=tr;exports.startHttpTrace=Un;exports.startSpan=Fn;exports.startTrace=Ln;exports.traceFunction=Vn;exports.traceObject=Wn;exports.traceTool=Dn;exports.withTrace=Yn;
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 Un(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let i=1;i<=n;i++)for(let c=1;c<=r;c++)e[i-1]===t[c-1]?o[i][c]=o[i-1][c-1]+1:o[i][c]=Math.max(o[i-1][c],o[i][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function Hn(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(a=>r.has(a))),s=o.size/n.size,i=o.size/r.size;return {score:s+i===0?0:2*s*i/(s+i),precision:s,recall:i}}function Vn(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function Dn(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function Fn(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),i=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=i,r.push(i);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function Jn(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function zn(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function L(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(a=>a.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let a=Un(n,r);o.tool_trajectory=a.score,s.tool_trajectory={lcsLength:a.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let a=Hn(n,r);o.tool_f1=a.score,s.tool_f1={precision:a.precision,recall:a.recall};}if(t.has("tool_correctness")&&r.length>0){let a=Vn(n,r);o.tool_correctness=a.score,s.tool_correctness={called:a.called,total:a.total};}let i=e.constraints?.requiredTerms??[];if(t.has("response_match")&&i.length>0){let a=Dn(e.output,i);o.response_match=a.score,s.response_match={matched:a.matched,missing:a.missing};}if(t.has("constraint_compliance")&&e.constraints){let a=Fn(e.output,e.constraints);o.constraint_compliance=a.score,s.constraint_compliance={checks:a.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let a=Jn(e.retrievedContext,e.expectedContext);o.contextual_precision=a.score,s.contextual_precision={relevant:a.relevant,total:a.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let a=zn(e.retrievedContext,e.expectedContext);o.contextual_recall=a.score,s.contextual_recall={covered:a.covered,total:a.total};}let c={scores:o,details:s};try{let a=(Qt(),d(Yt)),p={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[u,l]of Object.entries(o))p[`evalkit.metric.${u}`]=l;let{end:d$1}=a.startSpan("evaluation",p);d$1("OK");}catch{}return c}var ft=b(()=>{});function gt(e){return randomBytes(e).toString("hex")}function Zt(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}async function te(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(Zt)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(Zt)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let i=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${i}`)}return (await o.json()).scenarios??[]}function Yn(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function Qn(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return L({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function Zn(e$1,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+gt(6),i="sess_"+gt(6),c=Yn(n).slice(0,r.maxTurns),a={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:p,end:d,ctx:u}=e$1.startTrace(`scenario:${o}`,{"evalkit.session_id":i});e.set(p,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let l="OK",m,f$1=[],g=[],y=0,h={};try{await context.with(u,async()=>{for(let R=0;R<c.length;R++){let T={message:c[R],sessionId:i,state:a,turn:R+1},w=await t.entrypoint(T);w&&typeof w=="object"&&"text"in w?(f$1.push(w.text),w.toolCalls&&g.push(...w.toolCalls)):f$1.push(String(w)),y++;}let k=g.length?g:f.get(p)??[];h=Qn(n,f$1.join(`
2
- `),k,t.metrics);});}catch(k){l="ERROR",m=k?.message??String(k);}finally{d(l);}let v={scenarioId:s,name:o,status:l,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:p}}async function ee(e$1,t){let n="sim_"+gt(8),r="run_"+gt(8),o=t.maxTurns??12,s=[],i=[];for(let c of t.scenarios){let{result:a,traceId:p}=await Zn(e$1,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(a),i.push(p);}await e$1.flush();for(let c of i)e.delete(c),f.delete(c);return {simulationId:n,runId:r,results:s}}var ne=b(()=>{g();ft();});var K,re=b(()=>{(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(K||(K={}));});var oe=b(()=>{re();});function tr(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=U)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let i=o[s];typeof i=="string"&&i.length>1024&&(o[s]=r(i.length));}if(n(e)<=U||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=U))return e;if(o)for(let[s,i]of Object.entries(o))typeof i=="string"&&i.length>512&&(o[s]=i.slice(0,512)+"\u2026");return n(e)<=U||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=U)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${U}B)`),null)}function bt(e){return e[0]*1e3+e[1]/1e6}function er(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function nr(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function rr(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function ae(e){return new Promise(t=>setTimeout(t,e))}var se,U,yt,ie=b(()=>{oe();g();se=3,U=900*1024,yt=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:K.FAILED});return}let r=t.map(s=>tr(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:K.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let i=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=se?(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}/${se})`)):console.error(`[evalkit] export failed ${s.status}: ${i}`),n({code:K.FAILED});return}if(this.authFailures=0,this.debug){let i=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${i.status}`);}n({code:K.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:K.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let i=0;i<=r;i++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(i<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${i+1}/${r}`),await ae(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 ae(o[i]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=bt(t.startTime),s=bt(t.endTime),i=t.events.map(p=>({name:p.name,timestamp:new Date(bt(p.time)).toISOString(),attributes:p.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:er(t.kind),spanType:r["evalkit.span_type"]??"log",status:nr(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:rr(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},a=e.get(n.traceId);return a&&(c.isSimulation=true,c.simulationId=a.simulationId,c.scenarioId=a.scenarioId,c.runId=a.runId),c}};});function V(e,t=pr){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var cr,pr,D,wt=b(()=>{ie();cr="0.1.27",pr=4096;D=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new yt({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new NodeTracerProvider({resource:new Resource({[ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":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,n){let r=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},context.active()),o=trace.setSpan(context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(i="OK")=>{r.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},context.active()),s=trace.setSpan(context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",a)=>{a?.statusCode!==void 0&&o.setAttribute("http.status_code",a.statusCode),a?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(a.body)),a?.headers&&o.setAttribute("http.response.headers",JSON.stringify(a.headers)),o.setStatus({code:c==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??context.active());return {ctx:trace.setSpan(context.active(),o),end:(i="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"function_call",...r};o&&i.length&&(c["function.args"]=V(i));let{ctx:a,end:p}=s.startSpan(t,c),d;try{d=context.with(a,()=>n.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"function.result":V(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"function.result":V(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&i.length&&(c["tool.arguments"]=V(i.length===1?i[0]:i));let{ctx:a,end:p}=s.startSpan(t,c),d;try{d=context.with(a,()=>n.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"tool.result":V(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"tool.result":V(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function I(e){if(!e)return context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?trace.setSpanContext(ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):context.active()}var F=b(()=>{});function fr(e,t){let n="",r=0,o=0,s=false;function i(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,a,p){if(a===Symbol.asyncIterator)return function(){let u=c[Symbol.asyncIterator]();return {async next(){try{let l=await u.next();if(!l.done&&l.value){let m=l.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return l.done&&i(),l}catch(l){throw i(l instanceof Error?l:new Error(String(l))),l}},return(){return i(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(l){return i(l instanceof Error?l:new Error(String(l))),u.throw?.(l)??Promise.reject(l)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,a,p);return typeof d=="function"?d.bind(c):d}})}function j(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let i=s[0],c=n??context.active(),a=e.tracer.startSpan("chat.completions.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":i.model??"unknown",...i.temperature!=null&&{"gen_ai.request.temperature":i.temperature},...i.max_tokens!=null&&{"gen_ai.request.max_tokens":i.max_tokens},...i.top_p!=null&&{"gen_ai.request.top_p":i.top_p},"evalkit.prompt":gr(i.messages??[])}},c),p=trace.setSpan(c,a);if(i?.stream){let m;try{m=await context.with(p,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw a.recordException(g),a.setStatus({code:SpanStatusCode.ERROR,message:g.message}),a.end(),f}return fr(m,a)}let d;try{d=await context.with(p,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:SpanStatusCode.ERROR,message:f.message}),a.end(),m}let u=d.choices?.[0],l=u?.message.content??"";return a.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":u?.finish_reason?[u.finish_reason]:[],"evalkit.completion":l}),k(e,a,h(d)),a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function gr(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
3
- `)}var Tt=b(()=>{l();});function vr(e,t){let n="",r=0,o=0,s=false;function i(a){let p=a?.type;if(p==="content_block_delta"){let d=a.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else p==="message_start"?r=a.message?.usage?.input_tokens??0:p==="message_delta"&&(o=a.usage?.output_tokens??0);}function c(a){s||(s=true,a?(t.recordException(a),t.setStatus({code:SpanStatusCode.ERROR,message:a.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(a,p,d){if(p===Symbol.asyncIterator)return function(){let l=a[Symbol.asyncIterator]();return {async next(){try{let m=await l.next();return !m.done&&m.value&&i(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),l.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),l.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let u=Reflect.get(a,p,d);return typeof u=="function"?u.bind(a):u}})}function N(e,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],i$1=n??context.active(),c=xr(s.system,s.messages??[]),a=e.tracer.startSpan("messages.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},i$1),p=trace.setSpan(i$1,a);if(s?.stream){let l;try{l=await context.with(p,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:SpanStatusCode.ERROR,message:f.message}),a.end(),m}return vr(l,a)}let d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw a.recordException(m),a.setStatus({code:SpanStatusCode.ERROR,message:m.message}),a.end(),l}let u=d.content.filter(l=>l.type==="text").map(l=>l.text??"").join("");return a.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":u}),k(e,a,i(d.content)),a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function xr(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
4
- `)}var ht=b(()=>{l();});function vt(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",i=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${i}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":i,"db.query":JSON.stringify(this._conditions??{})}},context.active());try{let a=await r.call(this);return c.setStatus({code:SpanStatusCode.OK}),c.end(),a}catch(a){let p=a instanceof Error?a:new Error(String(a));throw c.recordException(p),c.setStatus({code:SpanStatusCode.ERROR,message:p.message}),c.end(),a}},n.__evalkit=true;}var It=b(()=>{});function tt(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(i,...c){if(!trace.getActiveSpan()?.isRecording())return s.call(this,i,...c);let p=Array.isArray(i)?i[0]:i?.name??i?.args?.[0]??"cmd",d=(typeof p=="string"?p:String(p)).toUpperCase(),u=e.tracer.startSpan(`redis ${d}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},context.active());try{let l=await s.call(this,i,...c);return u.setStatus({code:SpanStatusCode.OK}),u.end(),l}catch(l){let m=l instanceof Error?l:new Error(String(l));throw u.recordException(m),u.setStatus({code:SpanStatusCode.ERROR,message:m.message}),u.end(),l}},r.__evalkit_redis=true;}var Kt=b(()=>{});function O(e){let t={};for(let[n,r]of Object.entries(e))Er.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var Er,Pt=b(()=>{Er=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var J,Mt=b(()=>{J=new Map;});function et(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return et(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(Ar.some(d=>d.test(r))||!trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let i=(n.method??"get").toUpperCase(),c=O(n.headers??{}),a=e.tracer.startSpan(`${i} ${s}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":i,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},context.active()),p=a.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${p.traceId}-${p.spanId}-01`,n.headers["x-evalkit-span-id"]=p.spanId,J.set(p.spanId,a),n.__evalkitSpan=a,n.__evalkitSpanId=p.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&J.delete(n.config.__evalkitSpanId),r){let o=O(n.headers??{}),s=n.data,i;s!=null&&(i=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...i!==void 0?{"http.response.body":i}:{}}),r.setStatus({code:SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&J.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=O(n.response?.headers??{}),i=n.response?.data,c;i!=null&&(c=(typeof i=="string"?i:JSON.stringify(i)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}var Ar,qt=b(()=>{Pt();Mt();Ar=[/\/v1\/ingest/,/\/health(z)?$/];});function nt(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!trace.getActiveSpan()?.isRecording())return r.apply(this,o);let i=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,p=i.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=i.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",l=u?`${p} ${u}`:`pg ${p}`,m=e.tracer.startSpan(l,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":p,"db.statement":i.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,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})},n.__evalkit_pg=true);}var jt=b(()=>{});function rt(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",a=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",l=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=l?`${d} ${l}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...a!==void 0?{"db.params":JSON.stringify(a).slice(0,1024)}:{},...l?{"db.sql.table":l}:{}}},context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(k,R,T)=>{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,T);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}var Nt=b(()=>{});function $r(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function ot(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!$r(s))return r.apply(this,o);let i=s.input,c=i?.modelId??"unknown",a=c.split(".")[0]??"bedrock",p=i?.system?.map(v=>v.text).join(`
5
- `)??"",d=i?.messages?.map(v=>`${v.role}: ${v.content.map(k=>k.text??"").join("")}`)??[],u=[p?`system: ${p}`:"",...d].filter(Boolean).join(`
6
- `),l=i?.inferenceConfig??{},m=context.active(),f=e.tracer.startSpan("converse",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":a,"gen_ai.request.model":c,...l.temperature!=null&&{"gen_ai.request.temperature":l.temperature},...l.maxTokens!=null&&{"gen_ai.request.max_tokens":l.maxTokens},...l.topP!=null&&{"gen_ai.request.top_p":l.topP},"evalkit.prompt":u}},m),g=trace.setSpan(m,f),y;try{y=await context.with(g,()=>r.apply(this,o));}catch(v){let 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 Bt=b(()=>{});function st(e,t,n){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let s=o[0];if(s?.stream)return r.apply(this,o);let i=s?.chatHistory?.map(l=>`${l.role}: ${l.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...i,`user: ${s?.message??""}`].filter(Boolean).join(`
7
- `),a=context.active(),p=e.tracer.startSpan("chat",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":s?.model??"unknown",...s?.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s?.maxTokens!=null&&{"gen_ai.request.max_tokens":s.maxTokens},"evalkit.prompt":c}},a),d=trace.setSpan(a,p),u;try{u=await context.with(d,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw p.recordException(m),p.setStatus({code:SpanStatusCode.ERROR,message:m.message}),p.end(),l}return p.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":u.generationId??"","gen_ai.usage.input_tokens":u.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":u.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":u.finishReason?[u.finishReason]:[],"evalkit.completion":u.text??""}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.chat.__evalkit=true;}var $t=b(()=>{});function at(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let i=s[0],c="";if(typeof i=="string")c=`user: ${i}`;else {let g=i,y=g?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=g?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(k=>k.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
- `);}let a=context.active(),p=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},a),d=trace.setSpan(a,p),u;try{u=await context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw p.recordException(y),p.setStatus({code:SpanStatusCode.ERROR,message:y.message}),p.end(),g}let l=u?.response,m=l?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":l?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":l?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":l?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.generateContent.__evalkit=true;}var Gt=b(()=>{});function Ce(e){return e?.text??""}function Vr(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(Ce).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
- `);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(Ce).join("")}return e!=null?String(e):""}function Dr(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function _e(e){let t=Dr(e?.config),n=Vr(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
10
- `)}function ke(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}function Re(e,t,n){Lt&&k(Lt,t,j$1(e));}function ct(e,t,n){if(Lt=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=context.active(),a=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"evalkit.prompt":_e(s)}},c),p=trace.setSpan(c,a),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw a.recordException(l),a.setStatus({code:SpanStatusCode.ERROR,message:l.message}),a.end(),u}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":ke(d)});try{Re(d,a,a.spanContext().traceId);}catch{}return a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=context.active(),a=e.tracer.startSpan("generateContentStream",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"gen_ai.streaming":true,"evalkit.prompt":_e(s)}},c),p=trace.setSpan(c,a),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw a.recordException(m),a.setStatus({code:SpanStatusCode.ERROR,message:m.message}),a.end(),l}async function*u(){let l=[],m=0,f=0;try{for await(let g of d){try{let y=ke(g);y&&l.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Re(g,a,a.spanContext().traceId);}catch{}yield g;}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":l.join("")}),a.setStatus({code:SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw a.recordException(y),a.setStatus({code:SpanStatusCode.ERROR,message:y.message}),g}finally{a.end();}}return u()},t.generateContentStream.__evalkit=true;}}var Lt,Ut=b(()=>{l();Lt=null;});function pt(e,t,n){N(e,t,n);}function lt(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let i=s[0],c=i?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",a=i?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],p=[c?`system: ${c}`:"",...a].filter(Boolean).join(`
11
- `),d=context.active(),u=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":p}},d),l=trace.setSpan(d,u),m;try{m=await context.with(l,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw u.recordException(v),u.setStatus({code:SpanStatusCode.ERROR,message:v.message}),u.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return u.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),u.setStatus({code:SpanStatusCode.OK}),u.end(),m},t.generateContent.__evalkit=true;}var Ht=b(()=>{ht();});function Ee(e,t={},n){function r(o,s,i){let c={...t,...s};o.addHook("onRequest",(a,p,d)=>{let u=a.routerPath??a.routeOptions?.url??a.url??"/",l=typeof c.name=="function"?c.name(a):c.name??`${String(a.method??"GET")} ${String(u)}`,m=a.headers?.traceparent,f=n?n(m):context.active(),{traceId:g,end:y,ctx:h}=context.with(f,()=>e.startHttpTrace(l,{method:String(a.method??"GET"),url:String(a.url??"/"),headers:a.headers,requestBody:void 0}));a._evalkitCtx=h,a._evalkitTraceId=g,a._evalkitEnd=y,a._evalkitEnded=false,context.with(h,d);}),o.addHook("preHandler",(a,p,d)=>{if(a._evalkitCtx&&a.body!==void 0){let u=trace.getActiveSpan();if(u?.isRecording())try{u.setAttribute("http.request.body",typeof a.body=="string"?a.body.slice(0,e.options.maxBodyBytes):JSON.stringify(a.body).slice(0,e.options.maxBodyBytes));}catch{}}context.with(a._evalkitCtx??context.active(),d);}),o.addHook("onSend",(a,p,d,u)=>{try{if(d!=null){let l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);a._evalkitRespBody=l;}}catch{}u(null,d);}),o.addHook("onResponse",(a,p,d)=>{if(typeof a._evalkitEnd=="function"&&!a._evalkitEnded){a._evalkitEnded=true;let u=p.statusCode??200;a._evalkitEnd(u>=400?"ERROR":"OK",{statusCode:u,body:a._evalkitRespBody});}d();}),o.addHook("onError",(a,p,d,u)=>{typeof a._evalkitEnd=="function"&&!a._evalkitEnded&&(a._evalkitEnded=true,a._evalkitEnd("ERROR",{statusCode:p.statusCode??500})),u();}),i();}return r[Symbol.for("skip-override")]=true,r}var we=b(()=>{});function Te(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,i=I(n.headers?.traceparent),{end:c,ctx:a,traceId:p}=context.with(i,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=a,n._evalkitTraceId=p;let d=trace.getSpan(a)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",p),r.setHeader?.("traceparent",`00-${p}-${d}-01`);let u=e.options.maxBodyBytes,l=[],m=0,f=h=>{if(!(!h||m>=u))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(l.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,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(a,()=>o());}}var Ae=b(()=>{F();});function Ke(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=I(n.request?.headers?.traceparent),{end:i,ctx:c}=context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await context.with(c,r);let a=n.status??200,p;try{let d=n.body;d!=null&&(p=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}i(a>=400?"ERROR":"OK",{statusCode:a,body:p});}catch(a){throw i("ERROR",{statusCode:n.status??500}),a}}}var Pe=b(()=>{F();});function qe(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",i=s;try{i=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${i}`,a=I(o.header("traceparent")),{end:p,ctx:d}=context.with(a,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await context.with(d,r);let u=n.res?.status??200,l;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(l=m.slice(0,e.options.maxBodyBytes));}}catch{}p(u>=400?"ERROR":"OK",{statusCode:u,body:l});}catch(u){throw p("ERROR",{statusCode:500}),u}}}var je=b(()=>{F();});function Ne(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let i=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=I(o.headers?.traceparent),{end:a,ctx:p}=context.with(c,()=>e.startHttpTrace(i,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:a,ctx:p}),s.continue}),n.ext("onPreResponse",(o,s)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,a;try{let p=o.response?.source??o.response?.result;p!=null&&(a=(typeof p=="string"?p:JSON.stringify(p)).slice(0,e.options.maxBodyBytes));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:a}),r.delete(o);}return s.continue});}}}var Be=b(()=>{F();});var z,Vt=b(()=>{z=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),i=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:a}=this.client.startHttpTrace(i,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),p=this.client.options.maxBodyBytes,d=[],u=0,l=f=>{if(!(!f||u>=p))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),u+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return l(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return l(g),f(g,...y)};}let m=context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{a("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,p).toString("utf-8");}catch{}a(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function to(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let i of s)try{n.defineMetadata(i,o.call(n,i,e),t);}catch{}}function $e(e,t,n){let r=n?.include??Zr,o=n?.captureIO??true,s=new Set,i=0,c=[...t.getProviders(),...t.getControllers()];for(let a of c){let p=a?.instance;if(!p||typeof p!="object")continue;let d=p.constructor?.name??"";if(!r.test(d))continue;let u=Object.getPrototypeOf(p);if(!(!u||u===Object.prototype||s.has(u))){s.add(u);for(let l of Object.getOwnPropertyNames(u)){if(Qr.has(l))continue;let m=Object.getOwnPropertyDescriptor(u,l);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${l}`,f,void 0,o);to(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 Qr,Zr,Ge=b(()=>{Qr=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),Zr=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function Dt(e){return eo.some(t=>t.test(e))}function no(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let i=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",a=e.path??"/";r=`${n}://${i}${c}${a}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function He(e){let t,n;try{let s=typeof a<"u"?a:createRequire(import.meta.url);t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:i}of r){let a=function(p,d,u){let l=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=no(p,l,i);if(Dt(m)||!trace.getActiveSpan()?.isRecording())return c.call(s,p,d,u);let h={...typeof p=="object"&&!(p instanceof URL)?p.headers??{}:{},...l?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof p=="object"&&!(p instanceof URL)&&p.headers&&delete p.headers["x-evalkit-span-id"],l?.headers&&delete l.headers["x-evalkit-span-id"];let S=J.get(String(v));if(S){let x=O({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&S.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(s,p,d,u)}let k=O(h),R=e.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()),T=c.call(s,p,d,u),w=R.spanContext();return T.setHeader("traceparent",`00-${w.traceId}-${w.spanId}-01`),T.on("response",S=>{let x=S.statusCode??0;R.setAttributes({"http.status_code":x,...S.headers?{"http.response.headers":JSON.stringify(O(S.headers))}:{}}),R.setStatus({code:x>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),R.end();}),T.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();}),T};let c=s.request;c.__evalkit||(a.__evalkit=true,Object.defineProperty(s,"request",{value:a,writable:true,configurable:true}));}}function Ve(e){let t;try{t=(typeof a<"u"?a:createRequire(import.meta.url))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let i=s[0],c=s[1],a=i.url??"/";if(Dt(a))return n.call(this,o,...s);if(trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let p=(i.method??"GET").toUpperCase(),d=a;try{d=new URL(a,"http://localhost").pathname;}catch{}let u=i.headers.traceparent,l=u?ro(Array.isArray(u)?u[0]:u):context.active(),m=e.tracer.startSpan(`${p} ${d}`,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":p,"http.url":a,"http.request.headers":JSON.stringify(O(i.headers))}},l),f=trace.setSpan(l,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(i.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let x=[],A=0;i.on("data",P=>{try{if(P&&A<y){let mt=Buffer.isBuffer(P)?P:typeof P=="string"?Buffer.from(P):null;mt&&mt.length&&(x.push(mt),A+=mt.length);}}catch{}}),i.on("end",()=>{if(x.length)try{let P=Buffer.concat(x).subarray(0,y).toString("utf-8");P&&m.setAttribute("http.request.body",P);}catch{}});}let k=[],R=0,T=x=>{try{if(x&&typeof x!="function"&&R<y){let A=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;A&&A.length&&(k.push(A),R+=A.length);}}catch{}},w=c.write.bind(c),S=c.end.bind(c);return c.write=function(x,...A){return T(x),w(x,...A)},c.end=function(x,...A){return T(x),S(x,...A)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let x=c.getHeaders();x&&Object.keys(x).length&&m.setAttribute("http.response.headers",JSON.stringify(O(x)));}catch{}if(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,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function ro(e){let t=e.split("-");if(t.length<4)return context.active();let[,n,r,o]=t;if(!n||!r)return context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return trace.setSpanContext(context.active(),s)}catch{return context.active()}}function De(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(Dt(o))return e(n,r);let s=trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let i=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let a={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{a[y]=g;});let p=O(a),d=s.spanContext(),u=`00-${d.traceId}-${d.spanId}-01`,l=new Headers(r?.headers);l.set("traceparent",u);let m={...r,headers:l};Object.keys(p).length&&s.addEvent("http.fetch.request",{"http.method":i,"http.url":o,"http.request.headers":JSON.stringify(p)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(O(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var eo,Fe=b(()=>{Pt();Mt();eo=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function ze(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=i=>i.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
12
- ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(i,c)=>{let a=trace.getActiveSpan();if(a?.isRecording())a.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let p=e.tracer.startSpan(`log.${i}`,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":i,"log.message":c}},context.active());p.setStatus({code:i==="ERROR"?SpanStatusCode.ERROR:SpanStatusCode.OK}),p.end();}};console.log=(...i)=>{t(...i),s("INFO",o(i));},console.warn=(...i)=>{n(...i),s("WARN",o(i));},console.error=(...i)=>{r(...i),s("ERROR",o(i));},console.__evalkit=true;}var We=b(()=>{});function Ye(e,t,n){let r=trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},context.active());o.recordException(n),o.setStatus({code:SpanStatusCode.ERROR,message:n.message}),o.end();}}function Qe(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));Ye(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{Ye(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var Ze=b(()=>{});function lo(e){let t=n("mongoose");t&&vt(e,t);}function uo(e){let t=n("axios");t&&et(e,t.default??t);}async function mo(e){try{let n=o()("pg"),r=n.Client??n.default?.Client;if(r){nt(e,r);return}}catch{}try{let t=await m("pg"),n=t.Client??t.default?.Client;n&&nt(e,n);}catch{}}async function fo(e){try{let t=o(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){rt(e,r);return}}catch{}try{let t=await m("mysql2"),n=t.Connection??t.default?.Connection;n&&rt(e,n);}catch{}}async function go(e){try{let n=o()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){tt(e,r);return}}catch{}try{let t=await m("ioredis"),n=t.default??t.Redis??t;n?.prototype&&tt(e,n);}catch{}}async function yo(e){try{let n=o()("openai"),o$1=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o$1){j(e,o$1);return}}catch{}try{let t=await m("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&j(e,r);}catch{}}async function ho(e){try{let n=o()("@anthropic-ai/sdk"),o$1=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o$1){N(e,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&N(e,r);}catch{}}async function vo(e){try{let n=o()("@aws-sdk/client-bedrock-runtime"),o$1=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o$1){ot(e,o$1);return}}catch{}try{let t=await m("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&ot(e,r);}catch{}}async function xo(e){try{let n=o()("@anthropic-ai/sdk"),o$1=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o$1){pt(e,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&pt(e,r);}catch{}}async function Co(e){try{let n=o()("@google-cloud/vertexai"),o$1=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o$1){lt(e,o$1);return}}catch{}try{let t=await m("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&lt(e,r);}catch{}}async function _o(e){try{let n=o()("cohere-ai"),o$1=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o$1){st(e,o$1);return}}catch{}try{let t=await m("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&st(e,r);}catch{}}async function ko(e){try{let n=o()("@google/generative-ai"),o$1=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o$1){at(e,o$1);return}}catch{}try{let t=await m("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&at(e,r);}catch{}}async function Ro(e){try{let n=o()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){ct(e,r.prototype);return}}catch{}try{let t=await m("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&ct(e,n.prototype);}catch{}}async function So(e){try{let n=o()("groq-sdk"),o$1=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o$1){j(e,o$1,void 0,"groq");return}}catch{}try{let t=await m("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&j(e,r,void 0,"groq");}catch{}}async function bo(e){try{let{patchLangChain:t}=await import('./langchain-CL5EBCAT.mjs');await t(e);}catch{}}function tn(e){try{Ve(e);}catch{}try{He(e);}catch{}De(),ze(e),Qe(e),lo(e),uo(e),Promise.all([yo(e),ho(e),vo(e),xo(e),Co(e),_o(e),ko(e),Ro(e),So(e),bo(e),mo(e),fo(e),go(e)]).catch(()=>{});}var en=b(()=>{p();Tt();ht();Bt();Ht();$t();Gt();Ut();It();jt();Nt();Kt();qt();Fe();We();Ze();});var Yt={};c(Yt,{EvalKitClient:()=>D,EvalKitInterceptor:()=>z,TraceMethod:()=>An,Traced:()=>In,createNestjsInterceptor:()=>Rn,currentTraceId:()=>qn,default:()=>To,enableNestjsAutoTrace:()=>Pn,evaluate:()=>L,expressMiddleware:()=>vn,fastifyPlugin:()=>xn,flush:()=>bn,generateScenarios:()=>jn,hapiPlugin:()=>kn,honoMiddleware:()=>_n,init:()=>nn,koaMiddleware:()=>Cn,langchainHandler:()=>dn,patchAnthropicClient:()=>on,patchAnthropicVertexClient:()=>an,patchAxiosClient:()=>gn,patchBedrockClient:()=>sn,patchCohereClient:()=>pn,patchGoogleAIModel:()=>ln,patchGoogleGenAIModels:()=>un,patchMongooseClient:()=>mn,patchMysql2Client:()=>hn,patchOpenAIClient:()=>rn,patchPgClient:()=>yn,patchRedisClient:()=>fn,patchVertexGenerativeModel:()=>cn,simulateUser:()=>Nn,startHttpTrace:()=>En,startSpan:()=>wn,startTrace:()=>Sn,traceFunction:()=>On,traceObject:()=>Kn,traceTool:()=>Tn,withTrace:()=>Mn});function _(){if(!$)throw new Error("[evalkit] call evalkit.init() before using the SDK");return $}function nn(e){return $&&$.destroy(),$=new D(e),tn($),$}function rn(e,t){j(_(),e.chat.completions,t);}function on(e,t){N(_(),e.messages,t);}function sn(e){ot(_(),e);}function an(e){pt(_(),e.messages);}function cn(e){lt(_(),e);}function pn(e){st(_(),e);}function ln(e){at(_(),e);}function un(e){ct(_(),e);}function dn(){return r(_())}function mn(e){vt(_(),e);}function fn(e){tt(_(),e);}function gn(e){et(_(),e);}function yn(e){nt(_(),e);}function hn(e){rt(_(),e);}function vn(e){return Te(_(),e)}function xn(e){return Ee(_(),e,Oo)}function Cn(e){return Ke(_(),e)}function _n(e){return qe(_(),e)}function kn(e){return Ne(_(),e)}function Rn(){return new z(_())}function Sn(e,t){return _().startTrace(e,t)}async function bn(){return _().flush()}function En(e,t,n){return _().startHttpTrace(e,t,n)}function wn(e,t,n){return _().startSpan(e,t,n)}function On(e,t,n,r=true){return _().traceFunction(e,t,n,r)}function Tn(e,t,n,r=true){return _().traceTool(e,t,n,r)}function An(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,i;return r.value=function(...c){return i||(i=_().traceFunction(s,o)),i.apply(this,c)},r}}function In(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let i=s.value,c=`${r}.${o}`,a=null;Object.defineProperty(n,o,{...s,value:function(...p){return a||(a=_().traceFunction(c,i)),a.apply(this,p)}});}return t}}function Kn(e,t){let n=_(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let i=e[s];if(typeof i=="function"&&!i.__evalkitTraced){let c=r?`${r}.${s}`:s,a=n.traceFunction(c,i,void 0,o);a.__evalkitTraced=true,e[s]=a;}}return e}async function Pn(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?$e(_(),n,t):0}function Mn(e,t){return context.with(e,t)}function qn(){let e=trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function jn(e){return te(_(),e)}function Nn(e){return ee(_(),e)}function Oo(e){return I(e)}var $,To,Qt=b(()=>{ft();ne();wt();F();Tt();ht();It();Kt();qt();jt();Nt();Bt();$t();Gt();Ut();t();Ht();we();Ae();Pe();je();Be();Vt();Ge();en();wt();Vt();ft();$=null;To={init:nn,evaluate:L,generateScenarios:jn,simulateUser:Nn,patchOpenAIClient:rn,patchAnthropicClient:on,patchBedrockClient:sn,patchAnthropicVertexClient:an,patchVertexGenerativeModel:cn,patchCohereClient:pn,patchGoogleAIModel:ln,patchGoogleGenAIModels:un,langchainHandler:dn,patchMongooseClient:mn,patchRedisClient:fn,patchAxiosClient:gn,patchPgClient:yn,patchMysql2Client:hn,expressMiddleware:vn,fastifyPlugin:xn,koaMiddleware:Cn,honoMiddleware:_n,hapiPlugin:kn,createNestjsInterceptor:Rn,startTrace:Sn,startHttpTrace:En,startSpan:wn,traceFunction:On,traceTool:Tn,traceObject:Kn,TraceMethod:An,Traced:In,enableNestjsAutoTrace:Pn,withTrace:Mn,currentTraceId:qn,flush:bn};});Qt();export{D as EvalKitClient,z as EvalKitInterceptor,An as TraceMethod,In as Traced,Rn as createNestjsInterceptor,qn as currentTraceId,To as default,Pn as enableNestjsAutoTrace,L as evaluate,vn as expressMiddleware,xn as fastifyPlugin,bn as flush,jn as generateScenarios,kn as hapiPlugin,_n as honoMiddleware,nn as init,Cn as koaMiddleware,dn as langchainHandler,on as patchAnthropicClient,an as patchAnthropicVertexClient,gn as patchAxiosClient,sn as patchBedrockClient,pn as patchCohereClient,ln as patchGoogleAIModel,un as patchGoogleGenAIModels,mn as patchMongooseClient,hn as patchMysql2Client,rn as patchOpenAIClient,yn as patchPgClient,fn as patchRedisClient,cn as patchVertexGenerativeModel,Nn as simulateUser,En as startHttpTrace,wn as startSpan,Sn as startTrace,On as traceFunction,Kn as traceObject,Tn as traceTool,Mn as withTrace};
1
+ import {b,g,l,p,c,r,t,d,k,h,i,e,f,a,n,o,m,j as j$1}from'./chunk-S5ISUJPR.mjs';import {context,trace,SpanKind,SpanStatusCode,ROOT_CONTEXT}from'@opentelemetry/api';import {randomBytes}from'crypto';import {NodeTracerProvider}from'@opentelemetry/sdk-trace-node';import {BatchSpanProcessor}from'@opentelemetry/sdk-trace-base';import {Resource}from'@opentelemetry/resources';import {ATTR_SERVICE_NAME}from'@opentelemetry/semantic-conventions';import {createRequire}from'module';function Vn(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let i=1;i<=n;i++)for(let c=1;c<=r;c++)e[i-1]===t[c-1]?o[i][c]=o[i-1][c-1]+1:o[i][c]=Math.max(o[i-1][c],o[i][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function Dn(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(a=>r.has(a))),s=o.size/n.size,i=o.size/r.size;return {score:s+i===0?0:2*s*i/(s+i),precision:s,recall:i}}function Fn(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function Jn(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function zn(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),i=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=i,r.push(i);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function Wn(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function Xn(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function U(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(a=>a.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let a=Vn(n,r);o.tool_trajectory=a.score,s.tool_trajectory={lcsLength:a.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let a=Dn(n,r);o.tool_f1=a.score,s.tool_f1={precision:a.precision,recall:a.recall};}if(t.has("tool_correctness")&&r.length>0){let a=Fn(n,r);o.tool_correctness=a.score,s.tool_correctness={called:a.called,total:a.total};}let i=e.constraints?.requiredTerms??[];if(t.has("response_match")&&i.length>0){let a=Jn(e.output,i);o.response_match=a.score,s.response_match={matched:a.matched,missing:a.missing};}if(t.has("constraint_compliance")&&e.constraints){let a=zn(e.output,e.constraints);o.constraint_compliance=a.score,s.constraint_compliance={checks:a.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let a=Wn(e.retrievedContext,e.expectedContext);o.contextual_precision=a.score,s.contextual_precision={relevant:a.relevant,total:a.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let a=Xn(e.retrievedContext,e.expectedContext);o.contextual_recall=a.score,s.contextual_recall={covered:a.covered,total:a.total};}let c={scores:o,details:s};try{let a=(Qt(),d(Yt)),p={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[u,l]of Object.entries(o))p[`evalkit.metric.${u}`]=l;let{end:d$1}=a.startSpan("evaluation",p);d$1("OK");}catch{}return c}var ft=b(()=>{});function gt(e){return randomBytes(e).toString("hex")}function Zt(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}async function te(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(Zt)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(Zt)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature),t.reasoningEffort!==void 0&&(r.reasoningEffort=t.reasoningEffort),t.maxCompletionTokens!==void 0&&(r.maxCompletionTokens=t.maxCompletionTokens),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let i=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${i}`)}return (await o.json()).scenarios??[]}function Zn(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function tr(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return U({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function er(e$1,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+gt(6),i="sess_"+gt(6),c=Zn(n).slice(0,r.maxTurns),a={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:p,end:d,ctx:u}=e$1.startTrace(`scenario:${o}`,{"evalkit.session_id":i});e.set(p,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let l="OK",m,f$1=[],g=[],y=0,h={};try{await context.with(u,async()=>{for(let k=0;k<c.length;k++){let T={message:c[k],sessionId:i,state:a,turn:k+1},w=await t.entrypoint(T);w&&typeof w=="object"&&"text"in w?(f$1.push(w.text),w.toolCalls&&g.push(...w.toolCalls)):f$1.push(String(w)),y++;}let S=g.length?g:f.get(p)??[];h=tr(n,f$1.join(`
2
+ `),S,t.metrics);});}catch(S){l="ERROR",m=S?.message??String(S);}finally{d(l);}let v={scenarioId:s,name:o,status:l,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:p}}async function ee(e$1,t){let n="sim_"+gt(8),r="run_"+gt(8),o=t.maxTurns??12,s=[],i=[];for(let c of t.scenarios){let{result:a,traceId:p}=await er(e$1,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(a),i.push(p);}await e$1.flush();for(let c of i)e.delete(c),f.delete(c);return {simulationId:n,runId:r,results:s}}async function ne(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={simulationId:t.simulationId,collectionId:t.collectionId,provider:t.provider,model:t.model,apiKey:t.apiKey};t.runId!==void 0&&(r.runId=t.runId),t.maxTokens!==void 0&&(r.maxTokens=t.maxTokens);let o=await fetch(n+"/simulations/evaluate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r),signal:AbortSignal.timeout(3e5)});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(`evaluateSimulation failed ${o.status}: ${s}`)}return await o.json()}var re=b(()=>{g();ft();});var K,oe=b(()=>{(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(K||(K={}));});var se=b(()=>{oe();});function nr(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=L)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let i=o[s];typeof i=="string"&&i.length>1024&&(o[s]=r(i.length));}if(n(e)<=L||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=L))return e;if(o)for(let[s,i]of Object.entries(o))typeof i=="string"&&i.length>512&&(o[s]=i.slice(0,512)+"\u2026");return n(e)<=L||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=L)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${L}B)`),null)}function Et(e){return e[0]*1e3+e[1]/1e6}function rr(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function or(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function sr(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function ie(e){return new Promise(t=>setTimeout(t,e))}var ae,L,yt,ce=b(()=>{se();g();ae=3,L=900*1024,yt=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:K.FAILED});return}let r=t.map(s=>nr(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:K.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let i=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=ae?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${i} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${ae})`)):console.error(`[evalkit] export failed ${s.status}: ${i}`),n({code:K.FAILED});return}if(this.authFailures=0,this.debug){let i=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${i.status}`);}n({code:K.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:K.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let i=0;i<=r;i++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(i<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${i+1}/${r}`),await ie(o[i]??1800);else return c}catch(c){s=c,i<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${i+1}/${r}:`,c),await ie(o[i]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=Et(t.startTime),s=Et(t.endTime),i=t.events.map(p=>({name:p.name,timestamp:new Date(Et(p.time)).toISOString(),attributes:p.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:rr(t.kind),spanType:r["evalkit.span_type"]??"log",status:or(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:i.length>0?i:void 0,attributes:sr(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},a=e.get(n.traceId);return a&&(c.isSimulation=true,c.simulationId=a.simulationId,c.scenarioId=a.scenarioId,c.runId=a.runId),c}};});function V(e,t=ur){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var lr,ur,D,wt=b(()=>{ce();lr="0.1.29",ur=4096;D=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new yt({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new NodeTracerProvider({resource:new Resource({[ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":lr};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,n){let r=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},context.active()),o=trace.setSpan(context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(i="OK")=>{r.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},context.active()),s=trace.setSpan(context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",a)=>{a?.statusCode!==void 0&&o.setAttribute("http.status_code",a.statusCode),a?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(a.body)),a?.headers&&o.setAttribute("http.response.headers",JSON.stringify(a.headers)),o.setStatus({code:c==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??context.active());return {ctx:trace.setSpan(context.active(),o),end:(i="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"function_call",...r};o&&i.length&&(c["function.args"]=V(i));let{ctx:a,end:p}=s.startSpan(t,c),d;try{d=context.with(a,()=>n.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"function.result":V(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"function.result":V(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&i.length&&(c["tool.arguments"]=V(i.length===1?i[0]:i));let{ctx:a,end:p}=s.startSpan(t,c),d;try{d=context.with(a,()=>n.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"tool.result":V(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"tool.result":V(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function I(e){if(!e)return context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?trace.setSpanContext(ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):context.active()}var F=b(()=>{});function yr(e,t){let n="",r=0,o=0,s=false;function i(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,a,p){if(a===Symbol.asyncIterator)return function(){let u=c[Symbol.asyncIterator]();return {async next(){try{let l=await u.next();if(!l.done&&l.value){let m=l.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return l.done&&i(),l}catch(l){throw i(l instanceof Error?l:new Error(String(l))),l}},return(){return i(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(l){return i(l instanceof Error?l:new Error(String(l))),u.throw?.(l)??Promise.reject(l)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,a,p);return typeof d=="function"?d.bind(c):d}})}function j(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let i=s[0],c=n??context.active(),a=e.tracer.startSpan("chat.completions.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":i.model??"unknown",...i.temperature!=null&&{"gen_ai.request.temperature":i.temperature},...i.max_tokens!=null&&{"gen_ai.request.max_tokens":i.max_tokens},...i.top_p!=null&&{"gen_ai.request.top_p":i.top_p},"evalkit.prompt":hr(i.messages??[])}},c),p=trace.setSpan(c,a);if(i?.stream){let m;try{m=await context.with(p,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw a.recordException(g),a.setStatus({code:SpanStatusCode.ERROR,message:g.message}),a.end(),f}return yr(m,a)}let d;try{d=await context.with(p,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:SpanStatusCode.ERROR,message:f.message}),a.end(),m}let u=d.choices?.[0],l=u?.message.content??"";return a.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":u?.finish_reason?[u.finish_reason]:[],"evalkit.completion":l}),k(e,a,h(d)),a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function hr(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
3
+ `)}var Tt=b(()=>{l();});function Cr(e,t){let n="",r=0,o=0,s=false;function i(a){let p=a?.type;if(p==="content_block_delta"){let d=a.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else p==="message_start"?r=a.message?.usage?.input_tokens??0:p==="message_delta"&&(o=a.usage?.output_tokens??0);}function c(a){s||(s=true,a?(t.recordException(a),t.setStatus({code:SpanStatusCode.ERROR,message:a.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(a,p,d){if(p===Symbol.asyncIterator)return function(){let l=a[Symbol.asyncIterator]();return {async next(){try{let m=await l.next();return !m.done&&m.value&&i(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),l.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),l.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let u=Reflect.get(a,p,d);return typeof u=="function"?u.bind(a):u}})}function N(e,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],i$1=n??context.active(),c=_r(s.system,s.messages??[]),a=e.tracer.startSpan("messages.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},i$1),p=trace.setSpan(i$1,a);if(s?.stream){let l;try{l=await context.with(p,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:SpanStatusCode.ERROR,message:f.message}),a.end(),m}return Cr(l,a)}let d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw a.recordException(m),a.setStatus({code:SpanStatusCode.ERROR,message:m.message}),a.end(),l}let u=d.content.filter(l=>l.type==="text").map(l=>l.text??"").join("");return a.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":u}),k(e,a,i(d.content)),a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function _r(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
4
+ `)}var ht=b(()=>{l();});function vt(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",i=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${i}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":i,"db.query":JSON.stringify(this._conditions??{})}},context.active());try{let a=await r.call(this);return c.setStatus({code:SpanStatusCode.OK}),c.end(),a}catch(a){let p=a instanceof Error?a:new Error(String(a));throw c.recordException(p),c.setStatus({code:SpanStatusCode.ERROR,message:p.message}),c.end(),a}},n.__evalkit=true;}var It=b(()=>{});function tt(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(i,...c){if(!trace.getActiveSpan()?.isRecording())return s.call(this,i,...c);let p=Array.isArray(i)?i[0]:i?.name??i?.args?.[0]??"cmd",d=(typeof p=="string"?p:String(p)).toUpperCase(),u=e.tracer.startSpan(`redis ${d}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},context.active());try{let l=await s.call(this,i,...c);return u.setStatus({code:SpanStatusCode.OK}),u.end(),l}catch(l){let m=l instanceof Error?l:new Error(String(l));throw u.recordException(m),u.setStatus({code:SpanStatusCode.ERROR,message:m.message}),u.end(),l}},r.__evalkit_redis=true;}var Kt=b(()=>{});function O(e){let t={};for(let[n,r]of Object.entries(e))Or.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var Or,Pt=b(()=>{Or=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var J,Mt=b(()=>{J=new Map;});function et(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return et(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(Kr.some(d=>d.test(r))||!trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let i=(n.method??"get").toUpperCase(),c=O(n.headers??{}),a=e.tracer.startSpan(`${i} ${s}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":i,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},context.active()),p=a.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${p.traceId}-${p.spanId}-01`,n.headers["x-evalkit-span-id"]=p.spanId,J.set(p.spanId,a),n.__evalkitSpan=a,n.__evalkitSpanId=p.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&J.delete(n.config.__evalkitSpanId),r){let o=O(n.headers??{}),s=n.data,i;s!=null&&(i=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...i!==void 0?{"http.response.body":i}:{}}),r.setStatus({code:SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&J.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=O(n.response?.headers??{}),i=n.response?.data,c;i!=null&&(c=(typeof i=="string"?i:JSON.stringify(i)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}var Kr,qt=b(()=>{Pt();Mt();Kr=[/\/v1\/ingest/,/\/health(z)?$/];});function nt(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!trace.getActiveSpan()?.isRecording())return r.apply(this,o);let i=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,p=i.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=i.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",l=u?`${p} ${u}`:`pg ${p}`,m=e.tracer.startSpan(l,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":p,"db.statement":i.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,S)=>{v?(m.recordException(v),m.setStatus({code:SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",S?.rowCount??0),m.setStatus({code:SpanStatusCode.OK})),m.end(),y(v,S);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},n.__evalkit_pg=true);}var jt=b(()=>{});function rt(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",a=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",l=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=l?`${d} ${l}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...a!==void 0?{"db.params":JSON.stringify(a).slice(0,1024)}:{},...l?{"db.sql.table":l}:{}}},context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(S,k,T)=>{S?(f.recordException(S),f.setStatus({code:SpanStatusCode.ERROR,message:S.message}),f.setAttribute("error.message",S.message)):(f.setAttribute("db.rows_affected",Array.isArray(k)?k.length:k?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK})),f.end(),h(S,k,T);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}var Nt=b(()=>{});function Ur(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function ot(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!Ur(s))return r.apply(this,o);let i=s.input,c=i?.modelId??"unknown",a=c.split(".")[0]??"bedrock",p=i?.system?.map(v=>v.text).join(`
5
+ `)??"",d=i?.messages?.map(v=>`${v.role}: ${v.content.map(S=>S.text??"").join("")}`)??[],u=[p?`system: ${p}`:"",...d].filter(Boolean).join(`
6
+ `),l=i?.inferenceConfig??{},m=context.active(),f=e.tracer.startSpan("converse",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":a,"gen_ai.request.model":c,...l.temperature!=null&&{"gen_ai.request.temperature":l.temperature},...l.maxTokens!=null&&{"gen_ai.request.max_tokens":l.maxTokens},...l.topP!=null&&{"gen_ai.request.top_p":l.topP},"evalkit.prompt":u}},m),g=trace.setSpan(m,f),y;try{y=await context.with(g,()=>r.apply(this,o));}catch(v){let S=v instanceof Error?v:new Error(String(v));throw f.recordException(S),f.setStatus({code:SpanStatusCode.ERROR,message:S.message}),f.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return f.setAttributes({"gen_ai.response.model":c,"gen_ai.usage.input_tokens":y.usage?.inputTokens??0,"gen_ai.usage.output_tokens":y.usage?.outputTokens??0,"gen_ai.usage.total_tokens":y.usage?.totalTokens??0,"gen_ai.response.finish_reasons":y.stopReason?[y.stopReason]:[],"evalkit.completion":h}),f.setStatus({code:SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}var $t=b(()=>{});function st(e,t,n){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let s=o[0];if(s?.stream)return r.apply(this,o);let i=s?.chatHistory?.map(l=>`${l.role}: ${l.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...i,`user: ${s?.message??""}`].filter(Boolean).join(`
7
+ `),a=context.active(),p=e.tracer.startSpan("chat",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":s?.model??"unknown",...s?.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s?.maxTokens!=null&&{"gen_ai.request.max_tokens":s.maxTokens},"evalkit.prompt":c}},a),d=trace.setSpan(a,p),u;try{u=await context.with(d,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw p.recordException(m),p.setStatus({code:SpanStatusCode.ERROR,message:m.message}),p.end(),l}return p.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":u.generationId??"","gen_ai.usage.input_tokens":u.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":u.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":u.finishReason?[u.finishReason]:[],"evalkit.completion":u.text??""}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.chat.__evalkit=true;}var Bt=b(()=>{});function at(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let i=s[0],c="";if(typeof i=="string")c=`user: ${i}`;else {let g=i,y=g?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=g?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(S=>S.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
8
+ `);}let a=context.active(),p=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},a),d=trace.setSpan(a,p),u;try{u=await context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw p.recordException(y),p.setStatus({code:SpanStatusCode.ERROR,message:y.message}),p.end(),g}let l=u?.response,m=l?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":l?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":l?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":l?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.generateContent.__evalkit=true;}var Gt=b(()=>{});function _e(e){return e?.text??""}function Fr(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(_e).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
9
+ `);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(_e).join("")}return e!=null?String(e):""}function Jr(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function Se(e){let t=Jr(e?.config),n=Fr(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
10
+ `)}function ke(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}function Re(e,t,n){Ut&&k(Ut,t,j$1(e));}function ct(e,t,n){if(Ut=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=context.active(),a=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"evalkit.prompt":Se(s)}},c),p=trace.setSpan(c,a),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw a.recordException(l),a.setStatus({code:SpanStatusCode.ERROR,message:l.message}),a.end(),u}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":ke(d)});try{Re(d,a,a.spanContext().traceId);}catch{}return a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=context.active(),a=e.tracer.startSpan("generateContentStream",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"gen_ai.streaming":true,"evalkit.prompt":Se(s)}},c),p=trace.setSpan(c,a),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw a.recordException(m),a.setStatus({code:SpanStatusCode.ERROR,message:m.message}),a.end(),l}async function*u(){let l=[],m=0,f=0;try{for await(let g of d){try{let y=ke(g);y&&l.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Re(g,a,a.spanContext().traceId);}catch{}yield g;}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":l.join("")}),a.setStatus({code:SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw a.recordException(y),a.setStatus({code:SpanStatusCode.ERROR,message:y.message}),g}finally{a.end();}}return u()},t.generateContentStream.__evalkit=true;}}var Ut,Lt=b(()=>{l();Ut=null;});function pt(e,t,n){N(e,t,n);}function lt(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let i=s[0],c=i?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",a=i?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],p=[c?`system: ${c}`:"",...a].filter(Boolean).join(`
11
+ `),d=context.active(),u=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":p}},d),l=trace.setSpan(d,u),m;try{m=await context.with(l,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw u.recordException(v),u.setStatus({code:SpanStatusCode.ERROR,message:v.message}),u.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return u.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),u.setStatus({code:SpanStatusCode.OK}),u.end(),m},t.generateContent.__evalkit=true;}var Ht=b(()=>{ht();});function we(e,t={},n){function r(o,s,i){let c={...t,...s};o.addHook("onRequest",(a,p,d)=>{let u=a.routerPath??a.routeOptions?.url??a.url??"/",l=typeof c.name=="function"?c.name(a):c.name??`${String(a.method??"GET")} ${String(u)}`,m=a.headers?.traceparent,f=n?n(m):context.active(),{traceId:g,end:y,ctx:h}=context.with(f,()=>e.startHttpTrace(l,{method:String(a.method??"GET"),url:String(a.url??"/"),headers:a.headers,requestBody:void 0}));a._evalkitCtx=h,a._evalkitTraceId=g,a._evalkitEnd=y,a._evalkitEnded=false,context.with(h,d);}),o.addHook("preHandler",(a,p,d)=>{if(a._evalkitCtx&&a.body!==void 0){let u=trace.getActiveSpan();if(u?.isRecording())try{u.setAttribute("http.request.body",typeof a.body=="string"?a.body.slice(0,e.options.maxBodyBytes):JSON.stringify(a.body).slice(0,e.options.maxBodyBytes));}catch{}}context.with(a._evalkitCtx??context.active(),d);}),o.addHook("onSend",(a,p,d,u)=>{try{if(d!=null){let l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);a._evalkitRespBody=l;}}catch{}u(null,d);}),o.addHook("onResponse",(a,p,d)=>{if(typeof a._evalkitEnd=="function"&&!a._evalkitEnded){a._evalkitEnded=true;let u=p.statusCode??200;a._evalkitEnd(u>=400?"ERROR":"OK",{statusCode:u,body:a._evalkitRespBody});}d();}),o.addHook("onError",(a,p,d,u)=>{typeof a._evalkitEnd=="function"&&!a._evalkitEnded&&(a._evalkitEnded=true,a._evalkitEnd("ERROR",{statusCode:p.statusCode??500})),u();}),i();}return r[Symbol.for("skip-override")]=true,r}var Oe=b(()=>{});function Ae(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,i=I(n.headers?.traceparent),{end:c,ctx:a,traceId:p}=context.with(i,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=a,n._evalkitTraceId=p;let d=trace.getSpan(a)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",p),r.setHeader?.("traceparent",`00-${p}-${d}-01`);let u=e.options.maxBodyBytes,l=[],m=0,f=h=>{if(!(!h||m>=u))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(l.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,S;if(l.length)try{S=Buffer.concat(l).subarray(0,u).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:S}),y.apply(r,h)},context.with(a,()=>o());}}var Ie=b(()=>{F();});function Pe(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=I(n.request?.headers?.traceparent),{end:i,ctx:c}=context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await context.with(c,r);let a=n.status??200,p;try{let d=n.body;d!=null&&(p=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}i(a>=400?"ERROR":"OK",{statusCode:a,body:p});}catch(a){throw i("ERROR",{statusCode:n.status??500}),a}}}var Me=b(()=>{F();});function je(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",i=s;try{i=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${i}`,a=I(o.header("traceparent")),{end:p,ctx:d}=context.with(a,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await context.with(d,r);let u=n.res?.status??200,l;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(l=m.slice(0,e.options.maxBodyBytes));}}catch{}p(u>=400?"ERROR":"OK",{statusCode:u,body:l});}catch(u){throw p("ERROR",{statusCode:500}),u}}}var Ne=b(()=>{F();});function $e(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let i=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=I(o.headers?.traceparent),{end:a,ctx:p}=context.with(c,()=>e.startHttpTrace(i,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:a,ctx:p}),s.continue}),n.ext("onPreResponse",(o,s)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,a;try{let p=o.response?.source??o.response?.result;p!=null&&(a=(typeof p=="string"?p:JSON.stringify(p)).slice(0,e.options.maxBodyBytes));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:a}),r.delete(o);}return s.continue});}}}var Be=b(()=>{F();});var z,Vt=b(()=>{z=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),i=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:a}=this.client.startHttpTrace(i,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),p=this.client.options.maxBodyBytes,d=[],u=0,l=f=>{if(!(!f||u>=p))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),u+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return l(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return l(g),f(g,...y)};}let m=context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{a("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,p).toString("utf-8");}catch{}a(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function no(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let i of s)try{n.defineMetadata(i,o.call(n,i,e),t);}catch{}}function Ge(e,t,n){let r=n?.include??eo,o=n?.captureIO??true,s=new Set,i=0,c=[...t.getProviders(),...t.getControllers()];for(let a of c){let p=a?.instance;if(!p||typeof p!="object")continue;let d=p.constructor?.name??"";if(!r.test(d))continue;let u=Object.getPrototypeOf(p);if(!(!u||u===Object.prototype||s.has(u))){s.add(u);for(let l of Object.getOwnPropertyNames(u)){if(to.has(l))continue;let m=Object.getOwnPropertyDescriptor(u,l);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${l}`,f,void 0,o);no(f,g);try{Object.defineProperty(g,"name",{value:l,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(u,l,{...m,value:g}),i++;}}}return i}var to,eo,Ue=b(()=>{to=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),eo=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function Dt(e){return ro.some(t=>t.test(e))}function oo(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let i=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",a=e.path??"/";r=`${n}://${i}${c}${a}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function Ve(e){let t,n;try{let s=typeof a<"u"?a:createRequire(import.meta.url);t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:i}of r){let a=function(p,d,u){let l=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=oo(p,l,i);if(Dt(m)||!trace.getActiveSpan()?.isRecording())return c.call(s,p,d,u);let h={...typeof p=="object"&&!(p instanceof URL)?p.headers??{}:{},...l?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof p=="object"&&!(p instanceof URL)&&p.headers&&delete p.headers["x-evalkit-span-id"],l?.headers&&delete l.headers["x-evalkit-span-id"];let R=J.get(String(v));if(R){let x=O({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&R.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(s,p,d,u)}let S=O(h),k=e.tracer.startSpan(`${f} ${g}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(S).length?{"http.request.headers":JSON.stringify(S)}:{}}},context.active()),T=c.call(s,p,d,u),w=k.spanContext();return T.setHeader("traceparent",`00-${w.traceId}-${w.spanId}-01`),T.on("response",R=>{let x=R.statusCode??0;k.setAttributes({"http.status_code":x,...R.headers?{"http.response.headers":JSON.stringify(O(R.headers))}:{}}),k.setStatus({code:x>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),k.end();}),T.on("error",R=>{k.setAttributes({"http.status_code":0,"error.message":R.message}),k.recordException(R instanceof Error?R:new Error(String(R))),k.setStatus({code:SpanStatusCode.ERROR,message:R.message}),k.end();}),T};let c=s.request;c.__evalkit||(a.__evalkit=true,Object.defineProperty(s,"request",{value:a,writable:true,configurable:true}));}}function De(e){let t;try{t=(typeof a<"u"?a:createRequire(import.meta.url))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let i=s[0],c=s[1],a=i.url??"/";if(Dt(a))return n.call(this,o,...s);if(trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let p=(i.method??"GET").toUpperCase(),d=a;try{d=new URL(a,"http://localhost").pathname;}catch{}let u=i.headers.traceparent,l=u?so(Array.isArray(u)?u[0]:u):context.active(),m=e.tracer.startSpan(`${p} ${d}`,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":p,"http.url":a,"http.request.headers":JSON.stringify(O(i.headers))}},l),f=trace.setSpan(l,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(i.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let x=[],A=0;i.on("data",P=>{try{if(P&&A<y){let mt=Buffer.isBuffer(P)?P:typeof P=="string"?Buffer.from(P):null;mt&&mt.length&&(x.push(mt),A+=mt.length);}}catch{}}),i.on("end",()=>{if(x.length)try{let P=Buffer.concat(x).subarray(0,y).toString("utf-8");P&&m.setAttribute("http.request.body",P);}catch{}});}let S=[],k=0,T=x=>{try{if(x&&typeof x!="function"&&k<y){let A=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;A&&A.length&&(S.push(A),k+=A.length);}}catch{}},w=c.write.bind(c),R=c.end.bind(c);return c.write=function(x,...A){return T(x),w(x,...A)},c.end=function(x,...A){return T(x),R(x,...A)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let x=c.getHeaders();x&&Object.keys(x).length&&m.setAttribute("http.response.headers",JSON.stringify(O(x)));}catch{}if(S.length)try{let x=Buffer.concat(S).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.response.body",x);}catch{}m.setStatus({code:c.statusCode>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),m.end();}),c.on("error",x=>{m.setAttribute("error.message",x.message),m.recordException(x instanceof Error?x:new Error(String(x))),m.setStatus({code:SpanStatusCode.ERROR,message:x.message}),m.end();}),context.with(f,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function so(e){let t=e.split("-");if(t.length<4)return context.active();let[,n,r,o]=t;if(!n||!r)return context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return trace.setSpanContext(context.active(),s)}catch{return context.active()}}function Fe(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(Dt(o))return e(n,r);let s=trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let i=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let a={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{a[y]=g;});let p=O(a),d=s.spanContext(),u=`00-${d.traceId}-${d.spanId}-01`,l=new Headers(r?.headers);l.set("traceparent",u);let m={...r,headers:l};Object.keys(p).length&&s.addEvent("http.fetch.request",{"http.method":i,"http.url":o,"http.request.headers":JSON.stringify(p)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(O(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var ro,Je=b(()=>{Pt();Mt();ro=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function We(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=i=>i.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
12
+ ${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(i,c)=>{let a=trace.getActiveSpan();if(a?.isRecording())a.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let p=e.tracer.startSpan(`log.${i}`,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":i,"log.message":c}},context.active());p.setStatus({code:i==="ERROR"?SpanStatusCode.ERROR:SpanStatusCode.OK}),p.end();}};console.log=(...i)=>{t(...i),s("INFO",o(i));},console.warn=(...i)=>{n(...i),s("WARN",o(i));},console.error=(...i)=>{r(...i),s("ERROR",o(i));},console.__evalkit=true;}var Xe=b(()=>{});function Qe(e,t,n){let r=trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},context.active());o.recordException(n),o.setStatus({code:SpanStatusCode.ERROR,message:n.message}),o.end();}}function Ze(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));Qe(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{Qe(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var tn=b(()=>{});function mo(e){let t=n("mongoose");t&&vt(e,t);}function fo(e){let t=n("axios");t&&et(e,t.default??t);}async function go(e){try{let n=o()("pg"),r=n.Client??n.default?.Client;if(r){nt(e,r);return}}catch{}try{let t=await m("pg"),n=t.Client??t.default?.Client;n&&nt(e,n);}catch{}}async function yo(e){try{let t=o(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){rt(e,r);return}}catch{}try{let t=await m("mysql2"),n=t.Connection??t.default?.Connection;n&&rt(e,n);}catch{}}async function ho(e){try{let n=o()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){tt(e,r);return}}catch{}try{let t=await m("ioredis"),n=t.default??t.Redis??t;n?.prototype&&tt(e,n);}catch{}}async function vo(e){try{let n=o()("openai"),o$1=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o$1){j(e,o$1);return}}catch{}try{let t=await m("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&j(e,r);}catch{}}async function xo(e){try{let n=o()("@anthropic-ai/sdk"),o$1=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o$1){N(e,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&N(e,r);}catch{}}async function Co(e){try{let n=o()("@aws-sdk/client-bedrock-runtime"),o$1=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o$1){ot(e,o$1);return}}catch{}try{let t=await m("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&ot(e,r);}catch{}}async function _o(e){try{let n=o()("@anthropic-ai/sdk"),o$1=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o$1){pt(e,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&pt(e,r);}catch{}}async function So(e){try{let n=o()("@google-cloud/vertexai"),o$1=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o$1){lt(e,o$1);return}}catch{}try{let t=await m("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&lt(e,r);}catch{}}async function ko(e){try{let n=o()("cohere-ai"),o$1=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o$1){st(e,o$1);return}}catch{}try{let t=await m("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&st(e,r);}catch{}}async function Ro(e){try{let n=o()("@google/generative-ai"),o$1=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o$1){at(e,o$1);return}}catch{}try{let t=await m("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&at(e,r);}catch{}}async function Eo(e){try{let n=o()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){ct(e,r.prototype);return}}catch{}try{let t=await m("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&ct(e,n.prototype);}catch{}}async function bo(e){try{let n=o()("groq-sdk"),o$1=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o$1){j(e,o$1,void 0,"groq");return}}catch{}try{let t=await m("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&j(e,r,void 0,"groq");}catch{}}async function wo(e){try{let{patchLangChain:t}=await import('./langchain-CL5EBCAT.mjs');await t(e);}catch{}}function en(e){try{De(e);}catch{}try{Ve(e);}catch{}Fe(),We(e),Ze(e),mo(e),fo(e),Promise.all([vo(e),xo(e),Co(e),_o(e),So(e),ko(e),Ro(e),Eo(e),bo(e),wo(e),go(e),yo(e),ho(e)]).catch(()=>{});}var nn=b(()=>{p();Tt();ht();$t();Ht();Bt();Gt();Lt();It();jt();Nt();Kt();qt();Je();Xe();tn();});var Yt={};c(Yt,{EvalKitClient:()=>D,EvalKitInterceptor:()=>z,TraceMethod:()=>In,Traced:()=>Kn,createNestjsInterceptor:()=>Rn,currentTraceId:()=>jn,default:()=>Io,enableNestjsAutoTrace:()=>Mn,evaluate:()=>U,evaluateSimulation:()=>Bn,expressMiddleware:()=>xn,fastifyPlugin:()=>Cn,flush:()=>bn,generateScenarios:()=>Nn,hapiPlugin:()=>kn,honoMiddleware:()=>Sn,init:()=>rn,koaMiddleware:()=>_n,langchainHandler:()=>mn,patchAnthropicClient:()=>sn,patchAnthropicVertexClient:()=>cn,patchAxiosClient:()=>yn,patchBedrockClient:()=>an,patchCohereClient:()=>ln,patchGoogleAIModel:()=>un,patchGoogleGenAIModels:()=>dn,patchMongooseClient:()=>fn,patchMysql2Client:()=>vn,patchOpenAIClient:()=>on,patchPgClient:()=>hn,patchRedisClient:()=>gn,patchVertexGenerativeModel:()=>pn,simulateUser:()=>$n,startHttpTrace:()=>wn,startSpan:()=>On,startTrace:()=>En,traceFunction:()=>Tn,traceObject:()=>Pn,traceTool:()=>An,withTrace:()=>qn});function _(){if(!B)throw new Error("[evalkit] call evalkit.init() before using the SDK");return B}function rn(e){return B&&B.destroy(),B=new D(e),en(B),B}function on(e,t){j(_(),e.chat.completions,t);}function sn(e,t){N(_(),e.messages,t);}function an(e){ot(_(),e);}function cn(e){pt(_(),e.messages);}function pn(e){lt(_(),e);}function ln(e){st(_(),e);}function un(e){at(_(),e);}function dn(e){ct(_(),e);}function mn(){return r(_())}function fn(e){vt(_(),e);}function gn(e){tt(_(),e);}function yn(e){et(_(),e);}function hn(e){nt(_(),e);}function vn(e){rt(_(),e);}function xn(e){return Ae(_(),e)}function Cn(e){return we(_(),e,Ao)}function _n(e){return Pe(_(),e)}function Sn(e){return je(_(),e)}function kn(e){return $e(_(),e)}function Rn(){return new z(_())}function En(e,t){return _().startTrace(e,t)}async function bn(){return _().flush()}function wn(e,t,n){return _().startHttpTrace(e,t,n)}function On(e,t,n){return _().startSpan(e,t,n)}function Tn(e,t,n,r=true){return _().traceFunction(e,t,n,r)}function An(e,t,n,r=true){return _().traceTool(e,t,n,r)}function In(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,i;return r.value=function(...c){return i||(i=_().traceFunction(s,o)),i.apply(this,c)},r}}function Kn(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let i=s.value,c=`${r}.${o}`,a=null;Object.defineProperty(n,o,{...s,value:function(...p){return a||(a=_().traceFunction(c,i)),a.apply(this,p)}});}return t}}function Pn(e,t){let n=_(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let i=e[s];if(typeof i=="function"&&!i.__evalkitTraced){let c=r?`${r}.${s}`:s,a=n.traceFunction(c,i,void 0,o);a.__evalkitTraced=true,e[s]=a;}}return e}async function Mn(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?Ge(_(),n,t):0}function qn(e,t){return context.with(e,t)}function jn(){let e=trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function Nn(e){return te(_(),e)}function $n(e){return ee(_(),e)}function Bn(e){return ne(_(),e)}function Ao(e){return I(e)}var B,Io,Qt=b(()=>{ft();re();wt();F();Tt();ht();It();Kt();qt();jt();Nt();$t();Bt();Gt();Lt();t();Ht();Oe();Ie();Me();Ne();Be();Vt();Ue();nn();wt();Vt();ft();B=null;Io={init:rn,evaluate:U,generateScenarios:Nn,simulateUser:$n,evaluateSimulation:Bn,patchOpenAIClient:on,patchAnthropicClient:sn,patchBedrockClient:an,patchAnthropicVertexClient:cn,patchVertexGenerativeModel:pn,patchCohereClient:ln,patchGoogleAIModel:un,patchGoogleGenAIModels:dn,langchainHandler:mn,patchMongooseClient:fn,patchRedisClient:gn,patchAxiosClient:yn,patchPgClient:hn,patchMysql2Client:vn,expressMiddleware:xn,fastifyPlugin:Cn,koaMiddleware:_n,honoMiddleware:Sn,hapiPlugin:kn,createNestjsInterceptor:Rn,startTrace:En,startHttpTrace:wn,startSpan:On,traceFunction:Tn,traceTool:An,traceObject:Pn,TraceMethod:In,Traced:Kn,enableNestjsAutoTrace:Mn,withTrace:qn,currentTraceId:jn,flush:bn};});Qt();export{D as EvalKitClient,z as EvalKitInterceptor,In as TraceMethod,Kn as Traced,Rn as createNestjsInterceptor,jn as currentTraceId,Io as default,Mn as enableNestjsAutoTrace,U as evaluate,Bn as evaluateSimulation,xn as expressMiddleware,Cn as fastifyPlugin,bn as flush,Nn as generateScenarios,kn as hapiPlugin,Sn as honoMiddleware,rn as init,_n as koaMiddleware,mn as langchainHandler,sn as patchAnthropicClient,cn as patchAnthropicVertexClient,yn as patchAxiosClient,an as patchBedrockClient,ln as patchCohereClient,un as patchGoogleAIModel,dn as patchGoogleGenAIModels,fn as patchMongooseClient,vn as patchMysql2Client,on as patchOpenAIClient,hn as patchPgClient,gn as patchRedisClient,pn as patchVertexGenerativeModel,$n as simulateUser,wn as startHttpTrace,On as startSpan,En as startTrace,Tn as traceFunction,Pn as traceObject,An as traceTool,qn as withTrace};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "syntropylabs-evalkit",
3
- "version": "0.1.28",
3
+ "version": "0.1.29",
4
4
  "description": "EvalKit TypeScript SDK — OpenTelemetry-based LLM observability and tracing",
5
5
  "license": "LicenseRef-Proprietary",
6
6
  "author": "Syntropy Labs",