@aui-x/prism 0.0.2 → 0.0.3

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.
Files changed (48) hide show
  1. package/README.md +8 -10
  2. package/dist/{client-9E6ncwtH.d.ts → client-CTcnqw0Y.d.ts} +11 -11
  3. package/dist/client-CTcnqw0Y.d.ts.map +1 -0
  4. package/dist/{client-B49Ds9fR.js → client-CkxOaNy0.js} +5 -5
  5. package/dist/{client-B49Ds9fR.js.map → client-CkxOaNy0.js.map} +1 -1
  6. package/dist/{client--PC-VXip.cjs → client-DWaiEqR5.cjs} +5 -5
  7. package/dist/{client--PC-VXip.cjs.map → client-DWaiEqR5.cjs.map} +1 -1
  8. package/dist/{client-BhQrlPEQ.d.cts → client-DgiofMcL.d.cts} +11 -11
  9. package/dist/client-DgiofMcL.d.cts.map +1 -0
  10. package/dist/core.cjs +1 -1
  11. package/dist/core.d.cts +1 -1
  12. package/dist/core.d.ts +1 -1
  13. package/dist/core.js +1 -1
  14. package/dist/index.cjs +1 -1
  15. package/dist/index.d.cts +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/integrations/ai-sdk.cjs +16 -3
  19. package/dist/integrations/ai-sdk.cjs.map +1 -1
  20. package/dist/integrations/ai-sdk.d.cts +1 -1
  21. package/dist/integrations/ai-sdk.d.cts.map +1 -1
  22. package/dist/integrations/ai-sdk.d.ts +1 -1
  23. package/dist/integrations/ai-sdk.d.ts.map +1 -1
  24. package/dist/integrations/ai-sdk.js +16 -3
  25. package/dist/integrations/ai-sdk.js.map +1 -1
  26. package/dist/integrations/anthropic.cjs +1 -1
  27. package/dist/integrations/anthropic.d.cts +1 -1
  28. package/dist/integrations/anthropic.d.ts +1 -1
  29. package/dist/integrations/anthropic.js +1 -1
  30. package/dist/integrations/openai.cjs +1 -1
  31. package/dist/integrations/openai.d.cts +1 -1
  32. package/dist/integrations/openai.d.ts +1 -1
  33. package/dist/integrations/openai.js +1 -1
  34. package/dist/{shared-BsY3-hy4.js → shared-CcAuQvBc.js} +10 -4
  35. package/dist/shared-CcAuQvBc.js.map +1 -0
  36. package/dist/{shared-Ch80RlSv.cjs → shared-Do8YbTDV.cjs} +10 -4
  37. package/dist/shared-Do8YbTDV.cjs.map +1 -0
  38. package/dist/{wrapper-C9LHP_r5.cjs → wrapper-3UjPvXBN.cjs} +4 -4
  39. package/dist/wrapper-3UjPvXBN.cjs.map +1 -0
  40. package/dist/{wrapper-R8mpaNge.js → wrapper-Czc4CgC-.js} +4 -4
  41. package/dist/wrapper-Czc4CgC-.js.map +1 -0
  42. package/package.json +1 -1
  43. package/dist/client-9E6ncwtH.d.ts.map +0 -1
  44. package/dist/client-BhQrlPEQ.d.cts.map +0 -1
  45. package/dist/shared-BsY3-hy4.js.map +0 -1
  46. package/dist/shared-Ch80RlSv.cjs.map +0 -1
  47. package/dist/wrapper-C9LHP_r5.cjs.map +0 -1
  48. package/dist/wrapper-R8mpaNge.js.map +0 -1
package/README.md CHANGED
@@ -41,15 +41,19 @@ const { text, usage } = await generateText({
41
41
  prompt: "Hello!",
42
42
  });
43
43
 
44
+ // Token usage is captured automatically from spans — just call end():
45
+ await traced.end();
46
+
47
+ // Or pass explicit values to override:
44
48
  await traced.end({
45
49
  output: text,
46
50
  totalTokens: usage.totalTokens,
47
- promptTokens: usage.inputTokens,
48
- completionTokens: usage.outputTokens,
51
+ inputTokens: usage.inputTokens,
52
+ outputTokens: usage.outputTokens,
49
53
  });
50
54
  ```
51
55
 
52
- Multi-step tool use is handled correctly — each LLM call becomes a child span under the root trace:
56
+ Multi-step tool use is handled correctly — each LLM call becomes a child span under the root trace, and token usage is automatically aggregated:
53
57
 
54
58
  ```ts
55
59
  import { streamText, stepCountIs } from "ai";
@@ -70,13 +74,7 @@ for await (const chunk of result.textStream) {
70
74
  process.stdout.write(chunk);
71
75
  }
72
76
 
73
- const usage = await result.usage;
74
- await traced.end({
75
- output: await result.text,
76
- totalTokens: usage.totalTokens,
77
- promptTokens: usage.inputTokens,
78
- completionTokens: usage.outputTokens,
79
- });
77
+ await traced.end();
80
78
  ```
81
79
 
82
80
  ### OpenAI
@@ -25,8 +25,8 @@ interface TraceEndOptions {
25
25
  output?: string;
26
26
  status?: "completed" | "error";
27
27
  totalTokens?: number;
28
- promptTokens?: number;
29
- completionTokens?: number;
28
+ inputTokens?: number;
29
+ outputTokens?: number;
30
30
  }
31
31
  type TraceEvent = {
32
32
  v: 1;
@@ -50,8 +50,8 @@ type TraceEvent = {
50
50
  status: "completed" | "error";
51
51
  error?: string;
52
52
  totalTokens?: number;
53
- promptTokens?: number;
54
- completionTokens?: number;
53
+ inputTokens?: number;
54
+ outputTokens?: number;
55
55
  ttftMs?: number;
56
56
  latencyMs?: number;
57
57
  endedAt: string;
@@ -77,8 +77,8 @@ type TraceEvent = {
77
77
  status: "completed" | "error";
78
78
  error?: string;
79
79
  totalTokens?: number;
80
- promptTokens?: number;
81
- completionTokens?: number;
80
+ inputTokens?: number;
81
+ outputTokens?: number;
82
82
  ttftMs?: number;
83
83
  latencyMs?: number;
84
84
  endedAt: string;
@@ -136,8 +136,8 @@ declare class TraceHandle {
136
136
  status?: "completed" | "error";
137
137
  error?: string;
138
138
  totalTokens?: number;
139
- promptTokens?: number;
140
- completionTokens?: number;
139
+ inputTokens?: number;
140
+ outputTokens?: number;
141
141
  ttftMs?: number;
142
142
  }): void;
143
143
  }
@@ -152,11 +152,11 @@ declare class SpanHandle {
152
152
  status?: "completed" | "error";
153
153
  error?: string;
154
154
  totalTokens?: number;
155
- promptTokens?: number;
156
- completionTokens?: number;
155
+ inputTokens?: number;
156
+ outputTokens?: number;
157
157
  ttftMs?: number;
158
158
  }): void;
159
159
  }
160
160
  //#endregion
161
161
  export { TraceEndOptions as a, TraceResult as c, AuixPrismConfig as i, SpanHandle as n, TraceEvent as o, TraceHandle as r, TraceOptions as s, AuixPrism as t };
162
- //# sourceMappingURL=client-9E6ncwtH.d.ts.map
162
+ //# sourceMappingURL=client-CTcnqw0Y.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-CTcnqw0Y.d.ts","names":[],"sources":["../src/types.ts","../src/client.ts"],"mappings":";UAAiB,eAAA;EACf,MAAA;EACA,OAAA;EACA,OAAA;EACA,SAAA;EAEsC;EAAtC,SAAA,IAAa,MAAA,EAAQ,UAAA,OAAiB,OAAA;EAEY;EAAlD,YAAA,IAAgB,KAAA,WAAgB,MAAA,EAAQ,UAAA;AAAA;AAAA,UAGzB,YAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,IAAA;EACA,QAAA,GAAW,MAAA;AAAA;AAAA,UAGI,WAAA;EACf,KAAA,EAD0B,WAAA;EAE1B,MAAA,GAAS,IAAA,GAAO,eAAA,KAAoB,OAAA;AAAA;AAAA,UAGrB,eAAA;EACf,MAAA;EACA,MAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;AAAA;AAAA,KAGU,UAAA;EAEN,CAAA;EACA,IAAA;EACA,OAAA;EACA,IAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,QAAA,GAAW,MAAA;EACX,IAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,YAAA;EACA,IAAA;EACA,QAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EACA,QAAA,GAAW,MAAA;EACX,SAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;AAAA;;;cCpEO,SAAA;EAAA,QACH,MAAA;EAAA,QACA,OAAA;EAAA,QACA,OAAA;EAAA,QACA,SAAA;EAAA,QACA,SAAA;EAAA,QACA,YAAA;EAAA,QACA,MAAA;EAAA,QACA,KAAA;EAAA,QACA,WAAA;EAAA,QACA,SAAA;cAEI,MAAA,EAAQ,eAAA;EAUpB,OAAA,CAAQ,KAAA,EAAO,UAAA;EAWf,KAAA,CAAA,GAAS,OAAA;EAmCT,UAAA,CAAW,IAAA;IACT,IAAA;IACA,KAAA;IACA,KAAA;IACA,QAAA;IACA,SAAA;IACA,QAAA,GAAW,MAAA;IACX,IAAA;EAAA,IACE,WAAA;EAuBJ,gBAAA,CACE,OAAA,UACA,IAAA;IACE,IAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;IACA,QAAA;IACA,YAAA;IACA,QAAA,GAAW,MAAA;EAAA,IAEZ,UAAA;EAsBH,KAAA,CAAM,IAAA,EAAM,YAAA,GAAe,WAAA;EAS3B,OAAA,CAAA,GAAW,OAAA;AAAA;AAAA,cAOA,WAAA;EAAA,QAID,MAAA;EAAA,SACC,OAAA;EAAA,QAJH,OAAA;cAGE,MAAA,EAAQ,SAAA,EACP,OAAA;EAGX,SAAA,CAAU,IAAA;IACR,IAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA,IACE,UAAA;EAmBJ,GAAA,CAAI,IAAA;IACF,MAAA;IACA,MAAA;IACA,KAAA;IACA,WAAA;IACA,WAAA;IACA,YAAA;IACA,MAAA;EAAA;AAAA;AAAA,cAsBS,UAAA;EAAA,QAID,MAAA;EAAA,QACA,OAAA;EAAA,SACC,MAAA;EAAA,QALH,OAAA;cAGE,MAAA,EAAQ,SAAA,EACR,OAAA,UACC,MAAA;EAGX,GAAA,CAAI,IAAA;IACF,MAAA;IACA,MAAA;IACA,KAAA;IACA,WAAA;IACA,WAAA;IACA,YAAA;IACA,MAAA;EAAA;AAAA"}
@@ -164,8 +164,8 @@ var TraceHandle = class {
164
164
  status: opts?.status ?? "completed",
165
165
  error: opts?.error,
166
166
  totalTokens: opts?.totalTokens,
167
- promptTokens: opts?.promptTokens,
168
- completionTokens: opts?.completionTokens,
167
+ inputTokens: opts?.inputTokens,
168
+ outputTokens: opts?.outputTokens,
169
169
  ttftMs: opts?.ttftMs,
170
170
  latencyMs,
171
171
  endedAt
@@ -191,8 +191,8 @@ var SpanHandle = class {
191
191
  status: opts?.status ?? "completed",
192
192
  error: opts?.error,
193
193
  totalTokens: opts?.totalTokens,
194
- promptTokens: opts?.promptTokens,
195
- completionTokens: opts?.completionTokens,
194
+ inputTokens: opts?.inputTokens,
195
+ outputTokens: opts?.outputTokens,
196
196
  ttftMs: opts?.ttftMs,
197
197
  latencyMs,
198
198
  endedAt
@@ -202,4 +202,4 @@ var SpanHandle = class {
202
202
 
203
203
  //#endregion
204
204
  export { SpanHandle as n, TraceHandle as r, AuixPrism as t };
205
- //# sourceMappingURL=client-B49Ds9fR.js.map
205
+ //# sourceMappingURL=client-CkxOaNy0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-B49Ds9fR.js","names":[],"sources":["../src/utils.ts","../src/client.ts"],"sourcesContent":["const CHARS = \"0123456789abcdefghjkmnpqrstvwxyz\";\n\nexport function generateId(): string {\n const ts = Date.now().toString(36);\n let rand = \"\";\n const bytes = new Uint8Array(16);\n try {\n crypto.getRandomValues(bytes);\n } catch {\n for (let i = 0; i < 16; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n for (let i = 0; i < 16; i++) {\n rand += CHARS[bytes[i] % CHARS.length];\n }\n return ts + rand;\n}\n\nexport function nowISO(): string {\n return new Date().toISOString();\n}\n","import type {\n AuixPrismConfig,\n TraceEndOptions,\n TraceEvent,\n TraceOptions,\n TraceResult,\n} from \"./types\";\nimport { generateId, nowISO } from \"./utils\";\n\nconst FLUSH_INTERVAL_MS = 1000;\nconst FLUSH_BATCH_SIZE = 10;\nconst MAX_BUFFER = 1000;\nconst SDK_VERSION = \"0.0.1\";\n\nfunction normalizeModel(model?: string): string | undefined {\n return model?.trim();\n}\n\nfunction normalizeProvider(provider?: string): string | undefined {\n return provider?.trim().toLowerCase();\n}\n\nexport class AuixPrism {\n private apiKey: string;\n private baseUrl: string;\n private project?: string;\n private sessionId?: string;\n private transport?: (events: TraceEvent[]) => Promise<void>;\n private onFlushError?: (error: unknown, events: TraceEvent[]) => void;\n private events: TraceEvent[] = [];\n private timer: ReturnType<typeof setInterval>;\n private _flushChain: Promise<void> = Promise.resolve();\n private destroyed = false;\n\n constructor(config: AuixPrismConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl ?? \"https://api.auix.dev\";\n this.project = config.project;\n this.sessionId = config.sessionId;\n this.transport = config.transport;\n this.onFlushError = config.onFlushError;\n this.timer = setInterval(() => this.flush(), FLUSH_INTERVAL_MS);\n }\n\n enqueue(event: TraceEvent): void {\n if (this.destroyed) {\n console.warn(\"[@auix/prism] enqueue called after destroy\");\n return;\n }\n this.events.push(event);\n if (this.events.length >= FLUSH_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): Promise<void> {\n if (this.events.length === 0) return this._flushChain;\n\n const batch = this.events.splice(0);\n const send = () => {\n if (this.transport) return this.transport(batch);\n return fetch(`${this.baseUrl}/v1/prism/ingest`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n v: 1,\n sdk: SDK_VERSION,\n events: batch,\n }),\n }).then(() => {});\n };\n\n this._flushChain = this._flushChain.then(() =>\n send().catch(() =>\n send().catch((err) => {\n console.warn(\"[@auix/prism] flush failed after retry\", err);\n this.events.unshift(...batch);\n if (this.events.length > MAX_BUFFER) {\n this.events.length = MAX_BUFFER;\n }\n this.onFlushError?.(err, batch);\n }),\n ),\n );\n return this._flushChain;\n }\n\n startTrace(opts: {\n name?: string;\n input?: unknown;\n model?: string;\n provider?: string;\n endUserId?: string;\n metadata?: Record<string, unknown>;\n tags?: string[];\n }): TraceHandle {\n const traceId = generateId();\n const startedAt = nowISO();\n\n this.enqueue({\n v: 1,\n type: \"trace.start\",\n traceId,\n name: opts.name,\n input: opts.input,\n model: normalizeModel(opts.model),\n provider: normalizeProvider(opts.provider),\n endUserId: opts.endUserId,\n metadata: opts.metadata,\n tags: opts.tags,\n project: this.project,\n sessionId: this.sessionId,\n startedAt,\n });\n\n return new TraceHandle(this, traceId);\n }\n\n startSpanOnTrace(\n traceId: string,\n opts: {\n name: string;\n type: \"llm\" | \"tool\" | \"retrieval\" | \"custom\";\n input?: unknown;\n model?: string;\n provider?: string;\n parentSpanId?: string;\n metadata?: Record<string, unknown>;\n },\n ): SpanHandle {\n const spanId = generateId();\n const startedAt = nowISO();\n\n this.enqueue({\n v: 1,\n type: \"span.start\",\n traceId,\n spanId,\n parentSpanId: opts.parentSpanId,\n name: opts.name,\n spanType: opts.type,\n input: opts.input,\n model: normalizeModel(opts.model),\n provider: normalizeProvider(opts.provider),\n metadata: opts.metadata,\n startedAt,\n });\n\n return new SpanHandle(this, traceId, spanId);\n }\n\n trace(opts: TraceOptions): TraceResult {\n const traceHandle = this.startTrace(opts);\n const finish = async (endOpts?: TraceEndOptions) => {\n traceHandle.end(endOpts);\n await this.destroy();\n };\n return { trace: traceHandle, finish };\n }\n\n destroy(): Promise<void> {\n this.destroyed = true;\n clearInterval(this.timer);\n return this.flush();\n }\n}\n\nexport class TraceHandle {\n private startMs = Date.now();\n\n constructor(\n private tracer: AuixPrism,\n readonly traceId: string,\n ) {}\n\n startSpan(opts: {\n name: string;\n type: \"llm\" | \"tool\" | \"retrieval\" | \"custom\";\n input?: unknown;\n model?: string;\n }): SpanHandle {\n const spanId = generateId();\n const startedAt = nowISO();\n\n this.tracer.enqueue({\n v: 1,\n type: \"span.start\",\n traceId: this.traceId,\n spanId,\n name: opts.name,\n spanType: opts.type,\n input: opts.input,\n model: opts.model,\n startedAt,\n });\n\n return new SpanHandle(this.tracer, this.traceId, spanId);\n }\n\n end(opts?: {\n output?: unknown;\n status?: \"completed\" | \"error\";\n error?: string;\n totalTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n ttftMs?: number;\n }): void {\n const endedAt = nowISO();\n const latencyMs = Date.now() - this.startMs;\n\n this.tracer.enqueue({\n v: 1,\n type: \"trace.end\",\n traceId: this.traceId,\n output: opts?.output,\n status: opts?.status ?? \"completed\",\n error: opts?.error,\n totalTokens: opts?.totalTokens,\n promptTokens: opts?.promptTokens,\n completionTokens: opts?.completionTokens,\n ttftMs: opts?.ttftMs,\n latencyMs,\n endedAt,\n });\n }\n}\n\nexport class SpanHandle {\n private startMs = Date.now();\n\n constructor(\n private tracer: AuixPrism,\n private traceId: string,\n readonly spanId: string,\n ) {}\n\n end(opts?: {\n output?: unknown;\n status?: \"completed\" | \"error\";\n error?: string;\n totalTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n ttftMs?: number;\n }): void {\n const endedAt = nowISO();\n const latencyMs = Date.now() - this.startMs;\n\n this.tracer.enqueue({\n v: 1,\n type: \"span.end\",\n traceId: this.traceId,\n spanId: this.spanId,\n output: opts?.output,\n status: opts?.status ?? \"completed\",\n error: opts?.error,\n totalTokens: opts?.totalTokens,\n promptTokens: opts?.promptTokens,\n completionTokens: opts?.completionTokens,\n ttftMs: opts?.ttftMs,\n latencyMs,\n endedAt,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client-CkxOaNy0.js","names":[],"sources":["../src/utils.ts","../src/client.ts"],"sourcesContent":["const CHARS = \"0123456789abcdefghjkmnpqrstvwxyz\";\n\nexport function generateId(): string {\n const ts = Date.now().toString(36);\n let rand = \"\";\n const bytes = new Uint8Array(16);\n try {\n crypto.getRandomValues(bytes);\n } catch {\n for (let i = 0; i < 16; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n for (let i = 0; i < 16; i++) {\n rand += CHARS[bytes[i] % CHARS.length];\n }\n return ts + rand;\n}\n\nexport function nowISO(): string {\n return new Date().toISOString();\n}\n","import type {\n AuixPrismConfig,\n TraceEndOptions,\n TraceEvent,\n TraceOptions,\n TraceResult,\n} from \"./types\";\nimport { generateId, nowISO } from \"./utils\";\n\nconst FLUSH_INTERVAL_MS = 1000;\nconst FLUSH_BATCH_SIZE = 10;\nconst MAX_BUFFER = 1000;\nconst SDK_VERSION = \"0.0.1\";\n\nfunction normalizeModel(model?: string): string | undefined {\n return model?.trim();\n}\n\nfunction normalizeProvider(provider?: string): string | undefined {\n return provider?.trim().toLowerCase();\n}\n\nexport class AuixPrism {\n private apiKey: string;\n private baseUrl: string;\n private project?: string;\n private sessionId?: string;\n private transport?: (events: TraceEvent[]) => Promise<void>;\n private onFlushError?: (error: unknown, events: TraceEvent[]) => void;\n private events: TraceEvent[] = [];\n private timer: ReturnType<typeof setInterval>;\n private _flushChain: Promise<void> = Promise.resolve();\n private destroyed = false;\n\n constructor(config: AuixPrismConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl ?? \"https://api.auix.dev\";\n this.project = config.project;\n this.sessionId = config.sessionId;\n this.transport = config.transport;\n this.onFlushError = config.onFlushError;\n this.timer = setInterval(() => this.flush(), FLUSH_INTERVAL_MS);\n }\n\n enqueue(event: TraceEvent): void {\n if (this.destroyed) {\n console.warn(\"[@auix/prism] enqueue called after destroy\");\n return;\n }\n this.events.push(event);\n if (this.events.length >= FLUSH_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): Promise<void> {\n if (this.events.length === 0) return this._flushChain;\n\n const batch = this.events.splice(0);\n const send = () => {\n if (this.transport) return this.transport(batch);\n return fetch(`${this.baseUrl}/v1/prism/ingest`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n v: 1,\n sdk: SDK_VERSION,\n events: batch,\n }),\n }).then(() => {});\n };\n\n this._flushChain = this._flushChain.then(() =>\n send().catch(() =>\n send().catch((err) => {\n console.warn(\"[@auix/prism] flush failed after retry\", err);\n this.events.unshift(...batch);\n if (this.events.length > MAX_BUFFER) {\n this.events.length = MAX_BUFFER;\n }\n this.onFlushError?.(err, batch);\n }),\n ),\n );\n return this._flushChain;\n }\n\n startTrace(opts: {\n name?: string;\n input?: unknown;\n model?: string;\n provider?: string;\n endUserId?: string;\n metadata?: Record<string, unknown>;\n tags?: string[];\n }): TraceHandle {\n const traceId = generateId();\n const startedAt = nowISO();\n\n this.enqueue({\n v: 1,\n type: \"trace.start\",\n traceId,\n name: opts.name,\n input: opts.input,\n model: normalizeModel(opts.model),\n provider: normalizeProvider(opts.provider),\n endUserId: opts.endUserId,\n metadata: opts.metadata,\n tags: opts.tags,\n project: this.project,\n sessionId: this.sessionId,\n startedAt,\n });\n\n return new TraceHandle(this, traceId);\n }\n\n startSpanOnTrace(\n traceId: string,\n opts: {\n name: string;\n type: \"llm\" | \"tool\" | \"retrieval\" | \"custom\";\n input?: unknown;\n model?: string;\n provider?: string;\n parentSpanId?: string;\n metadata?: Record<string, unknown>;\n },\n ): SpanHandle {\n const spanId = generateId();\n const startedAt = nowISO();\n\n this.enqueue({\n v: 1,\n type: \"span.start\",\n traceId,\n spanId,\n parentSpanId: opts.parentSpanId,\n name: opts.name,\n spanType: opts.type,\n input: opts.input,\n model: normalizeModel(opts.model),\n provider: normalizeProvider(opts.provider),\n metadata: opts.metadata,\n startedAt,\n });\n\n return new SpanHandle(this, traceId, spanId);\n }\n\n trace(opts: TraceOptions): TraceResult {\n const traceHandle = this.startTrace(opts);\n const finish = async (endOpts?: TraceEndOptions) => {\n traceHandle.end(endOpts);\n await this.destroy();\n };\n return { trace: traceHandle, finish };\n }\n\n destroy(): Promise<void> {\n this.destroyed = true;\n clearInterval(this.timer);\n return this.flush();\n }\n}\n\nexport class TraceHandle {\n private startMs = Date.now();\n\n constructor(\n private tracer: AuixPrism,\n readonly traceId: string,\n ) {}\n\n startSpan(opts: {\n name: string;\n type: \"llm\" | \"tool\" | \"retrieval\" | \"custom\";\n input?: unknown;\n model?: string;\n }): SpanHandle {\n const spanId = generateId();\n const startedAt = nowISO();\n\n this.tracer.enqueue({\n v: 1,\n type: \"span.start\",\n traceId: this.traceId,\n spanId,\n name: opts.name,\n spanType: opts.type,\n input: opts.input,\n model: opts.model,\n startedAt,\n });\n\n return new SpanHandle(this.tracer, this.traceId, spanId);\n }\n\n end(opts?: {\n output?: unknown;\n status?: \"completed\" | \"error\";\n error?: string;\n totalTokens?: number;\n inputTokens?: number;\n outputTokens?: number;\n ttftMs?: number;\n }): void {\n const endedAt = nowISO();\n const latencyMs = Date.now() - this.startMs;\n\n this.tracer.enqueue({\n v: 1,\n type: \"trace.end\",\n traceId: this.traceId,\n output: opts?.output,\n status: opts?.status ?? \"completed\",\n error: opts?.error,\n totalTokens: opts?.totalTokens,\n inputTokens: opts?.inputTokens,\n outputTokens: opts?.outputTokens,\n ttftMs: opts?.ttftMs,\n latencyMs,\n endedAt,\n });\n }\n}\n\nexport class SpanHandle {\n private startMs = Date.now();\n\n constructor(\n private tracer: AuixPrism,\n private traceId: string,\n readonly spanId: string,\n ) {}\n\n end(opts?: {\n output?: unknown;\n status?: \"completed\" | \"error\";\n error?: string;\n totalTokens?: number;\n inputTokens?: number;\n outputTokens?: number;\n ttftMs?: number;\n }): void {\n const endedAt = nowISO();\n const latencyMs = Date.now() - this.startMs;\n\n this.tracer.enqueue({\n v: 1,\n type: \"span.end\",\n traceId: this.traceId,\n spanId: this.spanId,\n output: opts?.output,\n status: opts?.status ?? \"completed\",\n error: opts?.error,\n totalTokens: opts?.totalTokens,\n inputTokens: opts?.inputTokens,\n outputTokens: opts?.outputTokens,\n ttftMs: opts?.ttftMs,\n latencyMs,\n endedAt,\n });\n }\n}\n"],"mappings":"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"}
@@ -165,8 +165,8 @@ var TraceHandle = class {
165
165
  status: opts?.status ?? "completed",
166
166
  error: opts?.error,
167
167
  totalTokens: opts?.totalTokens,
168
- promptTokens: opts?.promptTokens,
169
- completionTokens: opts?.completionTokens,
168
+ inputTokens: opts?.inputTokens,
169
+ outputTokens: opts?.outputTokens,
170
170
  ttftMs: opts?.ttftMs,
171
171
  latencyMs,
172
172
  endedAt
@@ -192,8 +192,8 @@ var SpanHandle = class {
192
192
  status: opts?.status ?? "completed",
193
193
  error: opts?.error,
194
194
  totalTokens: opts?.totalTokens,
195
- promptTokens: opts?.promptTokens,
196
- completionTokens: opts?.completionTokens,
195
+ inputTokens: opts?.inputTokens,
196
+ outputTokens: opts?.outputTokens,
197
197
  ttftMs: opts?.ttftMs,
198
198
  latencyMs,
199
199
  endedAt
@@ -220,4 +220,4 @@ Object.defineProperty(exports, 'TraceHandle', {
220
220
  return TraceHandle;
221
221
  }
222
222
  });
223
- //# sourceMappingURL=client--PC-VXip.cjs.map
223
+ //# sourceMappingURL=client-DWaiEqR5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"client--PC-VXip.cjs","names":[],"sources":["../src/utils.ts","../src/client.ts"],"sourcesContent":["const CHARS = \"0123456789abcdefghjkmnpqrstvwxyz\";\n\nexport function generateId(): string {\n const ts = Date.now().toString(36);\n let rand = \"\";\n const bytes = new Uint8Array(16);\n try {\n crypto.getRandomValues(bytes);\n } catch {\n for (let i = 0; i < 16; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n for (let i = 0; i < 16; i++) {\n rand += CHARS[bytes[i] % CHARS.length];\n }\n return ts + rand;\n}\n\nexport function nowISO(): string {\n return new Date().toISOString();\n}\n","import type {\n AuixPrismConfig,\n TraceEndOptions,\n TraceEvent,\n TraceOptions,\n TraceResult,\n} from \"./types\";\nimport { generateId, nowISO } from \"./utils\";\n\nconst FLUSH_INTERVAL_MS = 1000;\nconst FLUSH_BATCH_SIZE = 10;\nconst MAX_BUFFER = 1000;\nconst SDK_VERSION = \"0.0.1\";\n\nfunction normalizeModel(model?: string): string | undefined {\n return model?.trim();\n}\n\nfunction normalizeProvider(provider?: string): string | undefined {\n return provider?.trim().toLowerCase();\n}\n\nexport class AuixPrism {\n private apiKey: string;\n private baseUrl: string;\n private project?: string;\n private sessionId?: string;\n private transport?: (events: TraceEvent[]) => Promise<void>;\n private onFlushError?: (error: unknown, events: TraceEvent[]) => void;\n private events: TraceEvent[] = [];\n private timer: ReturnType<typeof setInterval>;\n private _flushChain: Promise<void> = Promise.resolve();\n private destroyed = false;\n\n constructor(config: AuixPrismConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl ?? \"https://api.auix.dev\";\n this.project = config.project;\n this.sessionId = config.sessionId;\n this.transport = config.transport;\n this.onFlushError = config.onFlushError;\n this.timer = setInterval(() => this.flush(), FLUSH_INTERVAL_MS);\n }\n\n enqueue(event: TraceEvent): void {\n if (this.destroyed) {\n console.warn(\"[@auix/prism] enqueue called after destroy\");\n return;\n }\n this.events.push(event);\n if (this.events.length >= FLUSH_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): Promise<void> {\n if (this.events.length === 0) return this._flushChain;\n\n const batch = this.events.splice(0);\n const send = () => {\n if (this.transport) return this.transport(batch);\n return fetch(`${this.baseUrl}/v1/prism/ingest`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n v: 1,\n sdk: SDK_VERSION,\n events: batch,\n }),\n }).then(() => {});\n };\n\n this._flushChain = this._flushChain.then(() =>\n send().catch(() =>\n send().catch((err) => {\n console.warn(\"[@auix/prism] flush failed after retry\", err);\n this.events.unshift(...batch);\n if (this.events.length > MAX_BUFFER) {\n this.events.length = MAX_BUFFER;\n }\n this.onFlushError?.(err, batch);\n }),\n ),\n );\n return this._flushChain;\n }\n\n startTrace(opts: {\n name?: string;\n input?: unknown;\n model?: string;\n provider?: string;\n endUserId?: string;\n metadata?: Record<string, unknown>;\n tags?: string[];\n }): TraceHandle {\n const traceId = generateId();\n const startedAt = nowISO();\n\n this.enqueue({\n v: 1,\n type: \"trace.start\",\n traceId,\n name: opts.name,\n input: opts.input,\n model: normalizeModel(opts.model),\n provider: normalizeProvider(opts.provider),\n endUserId: opts.endUserId,\n metadata: opts.metadata,\n tags: opts.tags,\n project: this.project,\n sessionId: this.sessionId,\n startedAt,\n });\n\n return new TraceHandle(this, traceId);\n }\n\n startSpanOnTrace(\n traceId: string,\n opts: {\n name: string;\n type: \"llm\" | \"tool\" | \"retrieval\" | \"custom\";\n input?: unknown;\n model?: string;\n provider?: string;\n parentSpanId?: string;\n metadata?: Record<string, unknown>;\n },\n ): SpanHandle {\n const spanId = generateId();\n const startedAt = nowISO();\n\n this.enqueue({\n v: 1,\n type: \"span.start\",\n traceId,\n spanId,\n parentSpanId: opts.parentSpanId,\n name: opts.name,\n spanType: opts.type,\n input: opts.input,\n model: normalizeModel(opts.model),\n provider: normalizeProvider(opts.provider),\n metadata: opts.metadata,\n startedAt,\n });\n\n return new SpanHandle(this, traceId, spanId);\n }\n\n trace(opts: TraceOptions): TraceResult {\n const traceHandle = this.startTrace(opts);\n const finish = async (endOpts?: TraceEndOptions) => {\n traceHandle.end(endOpts);\n await this.destroy();\n };\n return { trace: traceHandle, finish };\n }\n\n destroy(): Promise<void> {\n this.destroyed = true;\n clearInterval(this.timer);\n return this.flush();\n }\n}\n\nexport class TraceHandle {\n private startMs = Date.now();\n\n constructor(\n private tracer: AuixPrism,\n readonly traceId: string,\n ) {}\n\n startSpan(opts: {\n name: string;\n type: \"llm\" | \"tool\" | \"retrieval\" | \"custom\";\n input?: unknown;\n model?: string;\n }): SpanHandle {\n const spanId = generateId();\n const startedAt = nowISO();\n\n this.tracer.enqueue({\n v: 1,\n type: \"span.start\",\n traceId: this.traceId,\n spanId,\n name: opts.name,\n spanType: opts.type,\n input: opts.input,\n model: opts.model,\n startedAt,\n });\n\n return new SpanHandle(this.tracer, this.traceId, spanId);\n }\n\n end(opts?: {\n output?: unknown;\n status?: \"completed\" | \"error\";\n error?: string;\n totalTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n ttftMs?: number;\n }): void {\n const endedAt = nowISO();\n const latencyMs = Date.now() - this.startMs;\n\n this.tracer.enqueue({\n v: 1,\n type: \"trace.end\",\n traceId: this.traceId,\n output: opts?.output,\n status: opts?.status ?? \"completed\",\n error: opts?.error,\n totalTokens: opts?.totalTokens,\n promptTokens: opts?.promptTokens,\n completionTokens: opts?.completionTokens,\n ttftMs: opts?.ttftMs,\n latencyMs,\n endedAt,\n });\n }\n}\n\nexport class SpanHandle {\n private startMs = Date.now();\n\n constructor(\n private tracer: AuixPrism,\n private traceId: string,\n readonly spanId: string,\n ) {}\n\n end(opts?: {\n output?: unknown;\n status?: \"completed\" | \"error\";\n error?: string;\n totalTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n ttftMs?: number;\n }): void {\n const endedAt = nowISO();\n const latencyMs = Date.now() - this.startMs;\n\n this.tracer.enqueue({\n v: 1,\n type: \"span.end\",\n traceId: this.traceId,\n spanId: this.spanId,\n output: opts?.output,\n status: opts?.status ?? \"completed\",\n error: opts?.error,\n totalTokens: opts?.totalTokens,\n promptTokens: opts?.promptTokens,\n completionTokens: opts?.completionTokens,\n ttftMs: opts?.ttftMs,\n latencyMs,\n endedAt,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client-DWaiEqR5.cjs","names":[],"sources":["../src/utils.ts","../src/client.ts"],"sourcesContent":["const CHARS = \"0123456789abcdefghjkmnpqrstvwxyz\";\n\nexport function generateId(): string {\n const ts = Date.now().toString(36);\n let rand = \"\";\n const bytes = new Uint8Array(16);\n try {\n crypto.getRandomValues(bytes);\n } catch {\n for (let i = 0; i < 16; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n for (let i = 0; i < 16; i++) {\n rand += CHARS[bytes[i] % CHARS.length];\n }\n return ts + rand;\n}\n\nexport function nowISO(): string {\n return new Date().toISOString();\n}\n","import type {\n AuixPrismConfig,\n TraceEndOptions,\n TraceEvent,\n TraceOptions,\n TraceResult,\n} from \"./types\";\nimport { generateId, nowISO } from \"./utils\";\n\nconst FLUSH_INTERVAL_MS = 1000;\nconst FLUSH_BATCH_SIZE = 10;\nconst MAX_BUFFER = 1000;\nconst SDK_VERSION = \"0.0.1\";\n\nfunction normalizeModel(model?: string): string | undefined {\n return model?.trim();\n}\n\nfunction normalizeProvider(provider?: string): string | undefined {\n return provider?.trim().toLowerCase();\n}\n\nexport class AuixPrism {\n private apiKey: string;\n private baseUrl: string;\n private project?: string;\n private sessionId?: string;\n private transport?: (events: TraceEvent[]) => Promise<void>;\n private onFlushError?: (error: unknown, events: TraceEvent[]) => void;\n private events: TraceEvent[] = [];\n private timer: ReturnType<typeof setInterval>;\n private _flushChain: Promise<void> = Promise.resolve();\n private destroyed = false;\n\n constructor(config: AuixPrismConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl ?? \"https://api.auix.dev\";\n this.project = config.project;\n this.sessionId = config.sessionId;\n this.transport = config.transport;\n this.onFlushError = config.onFlushError;\n this.timer = setInterval(() => this.flush(), FLUSH_INTERVAL_MS);\n }\n\n enqueue(event: TraceEvent): void {\n if (this.destroyed) {\n console.warn(\"[@auix/prism] enqueue called after destroy\");\n return;\n }\n this.events.push(event);\n if (this.events.length >= FLUSH_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): Promise<void> {\n if (this.events.length === 0) return this._flushChain;\n\n const batch = this.events.splice(0);\n const send = () => {\n if (this.transport) return this.transport(batch);\n return fetch(`${this.baseUrl}/v1/prism/ingest`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n v: 1,\n sdk: SDK_VERSION,\n events: batch,\n }),\n }).then(() => {});\n };\n\n this._flushChain = this._flushChain.then(() =>\n send().catch(() =>\n send().catch((err) => {\n console.warn(\"[@auix/prism] flush failed after retry\", err);\n this.events.unshift(...batch);\n if (this.events.length > MAX_BUFFER) {\n this.events.length = MAX_BUFFER;\n }\n this.onFlushError?.(err, batch);\n }),\n ),\n );\n return this._flushChain;\n }\n\n startTrace(opts: {\n name?: string;\n input?: unknown;\n model?: string;\n provider?: string;\n endUserId?: string;\n metadata?: Record<string, unknown>;\n tags?: string[];\n }): TraceHandle {\n const traceId = generateId();\n const startedAt = nowISO();\n\n this.enqueue({\n v: 1,\n type: \"trace.start\",\n traceId,\n name: opts.name,\n input: opts.input,\n model: normalizeModel(opts.model),\n provider: normalizeProvider(opts.provider),\n endUserId: opts.endUserId,\n metadata: opts.metadata,\n tags: opts.tags,\n project: this.project,\n sessionId: this.sessionId,\n startedAt,\n });\n\n return new TraceHandle(this, traceId);\n }\n\n startSpanOnTrace(\n traceId: string,\n opts: {\n name: string;\n type: \"llm\" | \"tool\" | \"retrieval\" | \"custom\";\n input?: unknown;\n model?: string;\n provider?: string;\n parentSpanId?: string;\n metadata?: Record<string, unknown>;\n },\n ): SpanHandle {\n const spanId = generateId();\n const startedAt = nowISO();\n\n this.enqueue({\n v: 1,\n type: \"span.start\",\n traceId,\n spanId,\n parentSpanId: opts.parentSpanId,\n name: opts.name,\n spanType: opts.type,\n input: opts.input,\n model: normalizeModel(opts.model),\n provider: normalizeProvider(opts.provider),\n metadata: opts.metadata,\n startedAt,\n });\n\n return new SpanHandle(this, traceId, spanId);\n }\n\n trace(opts: TraceOptions): TraceResult {\n const traceHandle = this.startTrace(opts);\n const finish = async (endOpts?: TraceEndOptions) => {\n traceHandle.end(endOpts);\n await this.destroy();\n };\n return { trace: traceHandle, finish };\n }\n\n destroy(): Promise<void> {\n this.destroyed = true;\n clearInterval(this.timer);\n return this.flush();\n }\n}\n\nexport class TraceHandle {\n private startMs = Date.now();\n\n constructor(\n private tracer: AuixPrism,\n readonly traceId: string,\n ) {}\n\n startSpan(opts: {\n name: string;\n type: \"llm\" | \"tool\" | \"retrieval\" | \"custom\";\n input?: unknown;\n model?: string;\n }): SpanHandle {\n const spanId = generateId();\n const startedAt = nowISO();\n\n this.tracer.enqueue({\n v: 1,\n type: \"span.start\",\n traceId: this.traceId,\n spanId,\n name: opts.name,\n spanType: opts.type,\n input: opts.input,\n model: opts.model,\n startedAt,\n });\n\n return new SpanHandle(this.tracer, this.traceId, spanId);\n }\n\n end(opts?: {\n output?: unknown;\n status?: \"completed\" | \"error\";\n error?: string;\n totalTokens?: number;\n inputTokens?: number;\n outputTokens?: number;\n ttftMs?: number;\n }): void {\n const endedAt = nowISO();\n const latencyMs = Date.now() - this.startMs;\n\n this.tracer.enqueue({\n v: 1,\n type: \"trace.end\",\n traceId: this.traceId,\n output: opts?.output,\n status: opts?.status ?? \"completed\",\n error: opts?.error,\n totalTokens: opts?.totalTokens,\n inputTokens: opts?.inputTokens,\n outputTokens: opts?.outputTokens,\n ttftMs: opts?.ttftMs,\n latencyMs,\n endedAt,\n });\n }\n}\n\nexport class SpanHandle {\n private startMs = Date.now();\n\n constructor(\n private tracer: AuixPrism,\n private traceId: string,\n readonly spanId: string,\n ) {}\n\n end(opts?: {\n output?: unknown;\n status?: \"completed\" | \"error\";\n error?: string;\n totalTokens?: number;\n inputTokens?: number;\n outputTokens?: number;\n ttftMs?: number;\n }): void {\n const endedAt = nowISO();\n const latencyMs = Date.now() - this.startMs;\n\n this.tracer.enqueue({\n v: 1,\n type: \"span.end\",\n traceId: this.traceId,\n spanId: this.spanId,\n output: opts?.output,\n status: opts?.status ?? \"completed\",\n error: opts?.error,\n totalTokens: opts?.totalTokens,\n inputTokens: opts?.inputTokens,\n outputTokens: opts?.outputTokens,\n ttftMs: opts?.ttftMs,\n latencyMs,\n endedAt,\n });\n }\n}\n"],"mappings":"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"}
@@ -25,8 +25,8 @@ interface TraceEndOptions {
25
25
  output?: string;
26
26
  status?: "completed" | "error";
27
27
  totalTokens?: number;
28
- promptTokens?: number;
29
- completionTokens?: number;
28
+ inputTokens?: number;
29
+ outputTokens?: number;
30
30
  }
31
31
  type TraceEvent = {
32
32
  v: 1;
@@ -50,8 +50,8 @@ type TraceEvent = {
50
50
  status: "completed" | "error";
51
51
  error?: string;
52
52
  totalTokens?: number;
53
- promptTokens?: number;
54
- completionTokens?: number;
53
+ inputTokens?: number;
54
+ outputTokens?: number;
55
55
  ttftMs?: number;
56
56
  latencyMs?: number;
57
57
  endedAt: string;
@@ -77,8 +77,8 @@ type TraceEvent = {
77
77
  status: "completed" | "error";
78
78
  error?: string;
79
79
  totalTokens?: number;
80
- promptTokens?: number;
81
- completionTokens?: number;
80
+ inputTokens?: number;
81
+ outputTokens?: number;
82
82
  ttftMs?: number;
83
83
  latencyMs?: number;
84
84
  endedAt: string;
@@ -136,8 +136,8 @@ declare class TraceHandle {
136
136
  status?: "completed" | "error";
137
137
  error?: string;
138
138
  totalTokens?: number;
139
- promptTokens?: number;
140
- completionTokens?: number;
139
+ inputTokens?: number;
140
+ outputTokens?: number;
141
141
  ttftMs?: number;
142
142
  }): void;
143
143
  }
@@ -152,11 +152,11 @@ declare class SpanHandle {
152
152
  status?: "completed" | "error";
153
153
  error?: string;
154
154
  totalTokens?: number;
155
- promptTokens?: number;
156
- completionTokens?: number;
155
+ inputTokens?: number;
156
+ outputTokens?: number;
157
157
  ttftMs?: number;
158
158
  }): void;
159
159
  }
160
160
  //#endregion
161
161
  export { TraceEndOptions as a, TraceResult as c, AuixPrismConfig as i, SpanHandle as n, TraceEvent as o, TraceHandle as r, TraceOptions as s, AuixPrism as t };
162
- //# sourceMappingURL=client-BhQrlPEQ.d.cts.map
162
+ //# sourceMappingURL=client-DgiofMcL.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-DgiofMcL.d.cts","names":[],"sources":["../src/types.ts","../src/client.ts"],"mappings":";UAAiB,eAAA;EACf,MAAA;EACA,OAAA;EACA,OAAA;EACA,SAAA;EAEsC;EAAtC,SAAA,IAAa,MAAA,EAAQ,UAAA,OAAiB,OAAA;EAEY;EAAlD,YAAA,IAAgB,KAAA,WAAgB,MAAA,EAAQ,UAAA;AAAA;AAAA,UAGzB,YAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,IAAA;EACA,QAAA,GAAW,MAAA;AAAA;AAAA,UAGI,WAAA;EACf,KAAA,EAD0B,WAAA;EAE1B,MAAA,GAAS,IAAA,GAAO,eAAA,KAAoB,OAAA;AAAA;AAAA,UAGrB,eAAA;EACf,MAAA;EACA,MAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;AAAA;AAAA,KAGU,UAAA;EAEN,CAAA;EACA,IAAA;EACA,OAAA;EACA,IAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,QAAA,GAAW,MAAA;EACX,IAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,YAAA;EACA,IAAA;EACA,QAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EACA,QAAA,GAAW,MAAA;EACX,SAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;AAAA;;;cCpEO,SAAA;EAAA,QACH,MAAA;EAAA,QACA,OAAA;EAAA,QACA,OAAA;EAAA,QACA,SAAA;EAAA,QACA,SAAA;EAAA,QACA,YAAA;EAAA,QACA,MAAA;EAAA,QACA,KAAA;EAAA,QACA,WAAA;EAAA,QACA,SAAA;cAEI,MAAA,EAAQ,eAAA;EAUpB,OAAA,CAAQ,KAAA,EAAO,UAAA;EAWf,KAAA,CAAA,GAAS,OAAA;EAmCT,UAAA,CAAW,IAAA;IACT,IAAA;IACA,KAAA;IACA,KAAA;IACA,QAAA;IACA,SAAA;IACA,QAAA,GAAW,MAAA;IACX,IAAA;EAAA,IACE,WAAA;EAuBJ,gBAAA,CACE,OAAA,UACA,IAAA;IACE,IAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;IACA,QAAA;IACA,YAAA;IACA,QAAA,GAAW,MAAA;EAAA,IAEZ,UAAA;EAsBH,KAAA,CAAM,IAAA,EAAM,YAAA,GAAe,WAAA;EAS3B,OAAA,CAAA,GAAW,OAAA;AAAA;AAAA,cAOA,WAAA;EAAA,QAID,MAAA;EAAA,SACC,OAAA;EAAA,QAJH,OAAA;cAGE,MAAA,EAAQ,SAAA,EACP,OAAA;EAGX,SAAA,CAAU,IAAA;IACR,IAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA,IACE,UAAA;EAmBJ,GAAA,CAAI,IAAA;IACF,MAAA;IACA,MAAA;IACA,KAAA;IACA,WAAA;IACA,WAAA;IACA,YAAA;IACA,MAAA;EAAA;AAAA;AAAA,cAsBS,UAAA;EAAA,QAID,MAAA;EAAA,QACA,OAAA;EAAA,SACC,MAAA;EAAA,QALH,OAAA;cAGE,MAAA,EAAQ,SAAA,EACR,OAAA,UACC,MAAA;EAGX,GAAA,CAAI,IAAA;IACF,MAAA;IACA,MAAA;IACA,KAAA;IACA,WAAA;IACA,WAAA;IACA,YAAA;IACA,MAAA;EAAA;AAAA"}
package/dist/core.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_client = require('./client--PC-VXip.cjs');
2
+ const require_client = require('./client-DWaiEqR5.cjs');
3
3
 
4
4
  exports.AuixPrism = require_client.AuixPrism;
5
5
  exports.SpanHandle = require_client.SpanHandle;
package/dist/core.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as TraceEndOptions, c as TraceResult, i as AuixPrismConfig, n as SpanHandle, o as TraceEvent, r as TraceHandle, s as TraceOptions, t as AuixPrism } from "./client-BhQrlPEQ.cjs";
1
+ import { a as TraceEndOptions, c as TraceResult, i as AuixPrismConfig, n as SpanHandle, o as TraceEvent, r as TraceHandle, s as TraceOptions, t as AuixPrism } from "./client-DgiofMcL.cjs";
2
2
  export { AuixPrism, type AuixPrismConfig, SpanHandle, type TraceEndOptions, type TraceEvent, TraceHandle, type TraceOptions, type TraceResult };
package/dist/core.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as TraceEndOptions, c as TraceResult, i as AuixPrismConfig, n as SpanHandle, o as TraceEvent, r as TraceHandle, s as TraceOptions, t as AuixPrism } from "./client-9E6ncwtH.js";
1
+ import { a as TraceEndOptions, c as TraceResult, i as AuixPrismConfig, n as SpanHandle, o as TraceEvent, r as TraceHandle, s as TraceOptions, t as AuixPrism } from "./client-CTcnqw0Y.js";
2
2
  export { AuixPrism, type AuixPrismConfig, SpanHandle, type TraceEndOptions, type TraceEvent, TraceHandle, type TraceOptions, type TraceResult };
package/dist/core.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as SpanHandle, r as TraceHandle, t as AuixPrism } from "./client-B49Ds9fR.js";
1
+ import { n as SpanHandle, r as TraceHandle, t as AuixPrism } from "./client-CkxOaNy0.js";
2
2
 
3
3
  export { AuixPrism, SpanHandle, TraceHandle };
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_client = require('./client--PC-VXip.cjs');
2
+ const require_client = require('./client-DWaiEqR5.cjs');
3
3
  const require_integrations_ai_sdk = require('./integrations/ai-sdk.cjs');
4
4
  const require_integrations_anthropic = require('./integrations/anthropic.cjs');
5
5
  const require_integrations_openai = require('./integrations/openai.cjs');
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as TraceEndOptions, c as TraceResult, i as AuixPrismConfig, n as SpanHandle, o as TraceEvent, r as TraceHandle, s as TraceOptions, t as AuixPrism } from "./client-BhQrlPEQ.cjs";
1
+ import { a as TraceEndOptions, c as TraceResult, i as AuixPrismConfig, n as SpanHandle, o as TraceEvent, r as TraceHandle, s as TraceOptions, t as AuixPrism } from "./client-DgiofMcL.cjs";
2
2
  import { AISDKPrismOptions, AISDKPrismResult, prismAISDK } from "./integrations/ai-sdk.cjs";
3
3
  import { AnthropicPrismOptions, prismAnthropic } from "./integrations/anthropic.cjs";
4
4
  import { OpenAIPrismOptions, prismOpenAI } from "./integrations/openai.cjs";
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as TraceEndOptions, c as TraceResult, i as AuixPrismConfig, n as SpanHandle, o as TraceEvent, r as TraceHandle, s as TraceOptions, t as AuixPrism } from "./client-9E6ncwtH.js";
1
+ import { a as TraceEndOptions, c as TraceResult, i as AuixPrismConfig, n as SpanHandle, o as TraceEvent, r as TraceHandle, s as TraceOptions, t as AuixPrism } from "./client-CTcnqw0Y.js";
2
2
  import { AISDKPrismOptions, AISDKPrismResult, prismAISDK } from "./integrations/ai-sdk.js";
3
3
  import { AnthropicPrismOptions, prismAnthropic } from "./integrations/anthropic.js";
4
4
  import { OpenAIPrismOptions, prismOpenAI } from "./integrations/openai.js";
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as SpanHandle, r as TraceHandle, t as AuixPrism } from "./client-B49Ds9fR.js";
1
+ import { n as SpanHandle, r as TraceHandle, t as AuixPrism } from "./client-CkxOaNy0.js";
2
2
  import { prismAISDK } from "./integrations/ai-sdk.js";
3
3
  import { prismAnthropic } from "./integrations/anthropic.js";
4
4
  import { prismOpenAI } from "./integrations/openai.js";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_wrapper = require('../wrapper-C9LHP_r5.cjs');
2
+ const require_wrapper = require('../wrapper-3UjPvXBN.cjs');
3
3
 
4
4
  //#region src/integrations/ai-sdk.ts
5
5
  function prismAISDK(tracer, model, opts) {
@@ -9,13 +9,26 @@ function prismAISDK(tracer, model, opts) {
9
9
  tags: opts?.tags,
10
10
  metadata: opts?.metadata
11
11
  });
12
+ const usage = {
13
+ inputTokens: 0,
14
+ outputTokens: 0
15
+ };
12
16
  return {
13
17
  model: require_wrapper.wrapModelWithMiddleware(tracer, model, {
14
18
  name: opts?.name,
15
- parentTraceId: root.traceId
19
+ parentTraceId: root.traceId,
20
+ usage
16
21
  }),
17
22
  end: async (endOpts) => {
18
- root.end(endOpts);
23
+ const total = usage.inputTokens + usage.outputTokens;
24
+ root.end({
25
+ output: endOpts?.output ?? usage.output,
26
+ status: endOpts?.status,
27
+ totalTokens: endOpts?.totalTokens ?? (total || void 0),
28
+ inputTokens: endOpts?.inputTokens ?? (usage.inputTokens || void 0),
29
+ outputTokens: endOpts?.outputTokens ?? (usage.outputTokens || void 0),
30
+ ttftMs: usage.ttftMs
31
+ });
19
32
  await tracer.destroy();
20
33
  }
21
34
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk.cjs","names":["wrapModelWithMiddleware"],"sources":["../../src/integrations/ai-sdk.ts"],"sourcesContent":["import type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport type { AuixPrism } from \"../client\";\nimport type { TraceEndOptions } from \"../types\";\nimport { wrapModelWithMiddleware } from \"../wrapper\";\n\nexport interface AISDKPrismOptions {\n name?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n endUserId?: string;\n}\n\nexport interface AISDKPrismResult {\n model: LanguageModelV3;\n end: (opts?: TraceEndOptions) => Promise<void>;\n}\n\nexport function prismAISDK(\n tracer: AuixPrism,\n model: LanguageModelV3,\n opts?: AISDKPrismOptions,\n): AISDKPrismResult {\n const root = tracer.startTrace({\n name: opts?.name,\n endUserId: opts?.endUserId,\n tags: opts?.tags,\n metadata: opts?.metadata,\n });\n\n const wrappedModel = wrapModelWithMiddleware(tracer, model, {\n name: opts?.name,\n parentTraceId: root.traceId,\n });\n\n return {\n model: wrappedModel,\n end: async (endOpts?) => {\n root.end(endOpts);\n await tracer.destroy();\n },\n };\n}\n"],"mappings":";;;;AAiBA,SAAgB,WACd,QACA,OACA,MACkB;CAClB,MAAM,OAAO,OAAO,WAAW;EAC7B,MAAM,MAAM;EACZ,WAAW,MAAM;EACjB,MAAM,MAAM;EACZ,UAAU,MAAM;EACjB,CAAC;AAOF,QAAO;EACL,OANmBA,wCAAwB,QAAQ,OAAO;GAC1D,MAAM,MAAM;GACZ,eAAe,KAAK;GACrB,CAAC;EAIA,KAAK,OAAO,YAAa;AACvB,QAAK,IAAI,QAAQ;AACjB,SAAM,OAAO,SAAS;;EAEzB"}
1
+ {"version":3,"file":"ai-sdk.cjs","names":["wrapModelWithMiddleware"],"sources":["../../src/integrations/ai-sdk.ts"],"sourcesContent":["import type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport type { AuixPrism } from \"../client\";\nimport type { UsageAccumulator } from \"../shared\";\nimport type { TraceEndOptions } from \"../types\";\nimport { wrapModelWithMiddleware } from \"../wrapper\";\n\nexport interface AISDKPrismOptions {\n name?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n endUserId?: string;\n}\n\nexport interface AISDKPrismResult {\n model: LanguageModelV3;\n end: (opts?: TraceEndOptions) => Promise<void>;\n}\n\nexport function prismAISDK(\n tracer: AuixPrism,\n model: LanguageModelV3,\n opts?: AISDKPrismOptions,\n): AISDKPrismResult {\n const root = tracer.startTrace({\n name: opts?.name,\n endUserId: opts?.endUserId,\n tags: opts?.tags,\n metadata: opts?.metadata,\n });\n\n const usage: UsageAccumulator = {\n inputTokens: 0,\n outputTokens: 0,\n };\n\n const wrappedModel = wrapModelWithMiddleware(tracer, model, {\n name: opts?.name,\n parentTraceId: root.traceId,\n usage,\n });\n\n return {\n model: wrappedModel,\n end: async (endOpts?) => {\n const total = usage.inputTokens + usage.outputTokens;\n root.end({\n output: endOpts?.output ?? usage.output,\n status: endOpts?.status,\n totalTokens: endOpts?.totalTokens ?? (total || undefined),\n inputTokens: endOpts?.inputTokens ?? (usage.inputTokens || undefined),\n outputTokens:\n endOpts?.outputTokens ?? (usage.outputTokens || undefined),\n ttftMs: usage.ttftMs,\n });\n await tracer.destroy();\n },\n };\n}\n"],"mappings":";;;;AAkBA,SAAgB,WACd,QACA,OACA,MACkB;CAClB,MAAM,OAAO,OAAO,WAAW;EAC7B,MAAM,MAAM;EACZ,WAAW,MAAM;EACjB,MAAM,MAAM;EACZ,UAAU,MAAM;EACjB,CAAC;CAEF,MAAM,QAA0B;EAC9B,aAAa;EACb,cAAc;EACf;AAQD,QAAO;EACL,OAPmBA,wCAAwB,QAAQ,OAAO;GAC1D,MAAM,MAAM;GACZ,eAAe,KAAK;GACpB;GACD,CAAC;EAIA,KAAK,OAAO,YAAa;GACvB,MAAM,QAAQ,MAAM,cAAc,MAAM;AACxC,QAAK,IAAI;IACP,QAAQ,SAAS,UAAU,MAAM;IACjC,QAAQ,SAAS;IACjB,aAAa,SAAS,gBAAgB,SAAS;IAC/C,aAAa,SAAS,gBAAgB,MAAM,eAAe;IAC3D,cACE,SAAS,iBAAiB,MAAM,gBAAgB;IAClD,QAAQ,MAAM;IACf,CAAC;AACF,SAAM,OAAO,SAAS;;EAEzB"}
@@ -1,4 +1,4 @@
1
- import { a as TraceEndOptions, t as AuixPrism } from "../client-BhQrlPEQ.cjs";
1
+ import { a as TraceEndOptions, t as AuixPrism } from "../client-DgiofMcL.cjs";
2
2
  import { LanguageModelV3 } from "@ai-sdk/provider";
3
3
 
4
4
  //#region src/integrations/ai-sdk.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk.d.cts","names":[],"sources":["../../src/integrations/ai-sdk.ts"],"mappings":";;;;UAKiB,iBAAA;EACf,IAAA;EACA,IAAA;EACA,QAAA,GAAW,MAAA;EACX,SAAA;AAAA;AAAA,UAGe,gBAAA;EACf,KAAA,EAAO,eAAA;EACP,GAAA,GAAM,IAAA,GAAO,eAAA,KAAoB,OAAA;AAAA;AAAA,iBAGnB,UAAA,CACd,MAAA,EAAQ,SAAA,EACR,KAAA,EAAO,eAAA,EACP,IAAA,GAAO,iBAAA,GACN,gBAAA"}
1
+ {"version":3,"file":"ai-sdk.d.cts","names":[],"sources":["../../src/integrations/ai-sdk.ts"],"mappings":";;;;UAMiB,iBAAA;EACf,IAAA;EACA,IAAA;EACA,QAAA,GAAW,MAAA;EACX,SAAA;AAAA;AAAA,UAGe,gBAAA;EACf,KAAA,EAAO,eAAA;EACP,GAAA,GAAM,IAAA,GAAO,eAAA,KAAoB,OAAA;AAAA;AAAA,iBAGnB,UAAA,CACd,MAAA,EAAQ,SAAA,EACR,KAAA,EAAO,eAAA,EACP,IAAA,GAAO,iBAAA,GACN,gBAAA"}
@@ -1,4 +1,4 @@
1
- import { a as TraceEndOptions, t as AuixPrism } from "../client-9E6ncwtH.js";
1
+ import { a as TraceEndOptions, t as AuixPrism } from "../client-CTcnqw0Y.js";
2
2
  import { LanguageModelV3 } from "@ai-sdk/provider";
3
3
 
4
4
  //#region src/integrations/ai-sdk.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk.d.ts","names":[],"sources":["../../src/integrations/ai-sdk.ts"],"mappings":";;;;UAKiB,iBAAA;EACf,IAAA;EACA,IAAA;EACA,QAAA,GAAW,MAAA;EACX,SAAA;AAAA;AAAA,UAGe,gBAAA;EACf,KAAA,EAAO,eAAA;EACP,GAAA,GAAM,IAAA,GAAO,eAAA,KAAoB,OAAA;AAAA;AAAA,iBAGnB,UAAA,CACd,MAAA,EAAQ,SAAA,EACR,KAAA,EAAO,eAAA,EACP,IAAA,GAAO,iBAAA,GACN,gBAAA"}
1
+ {"version":3,"file":"ai-sdk.d.ts","names":[],"sources":["../../src/integrations/ai-sdk.ts"],"mappings":";;;;UAMiB,iBAAA;EACf,IAAA;EACA,IAAA;EACA,QAAA,GAAW,MAAA;EACX,SAAA;AAAA;AAAA,UAGe,gBAAA;EACf,KAAA,EAAO,eAAA;EACP,GAAA,GAAM,IAAA,GAAO,eAAA,KAAoB,OAAA;AAAA;AAAA,iBAGnB,UAAA,CACd,MAAA,EAAQ,SAAA,EACR,KAAA,EAAO,eAAA,EACP,IAAA,GAAO,iBAAA,GACN,gBAAA"}
@@ -1,4 +1,4 @@
1
- import { t as wrapModelWithMiddleware } from "../wrapper-R8mpaNge.js";
1
+ import { t as wrapModelWithMiddleware } from "../wrapper-Czc4CgC-.js";
2
2
 
3
3
  //#region src/integrations/ai-sdk.ts
4
4
  function prismAISDK(tracer, model, opts) {
@@ -8,13 +8,26 @@ function prismAISDK(tracer, model, opts) {
8
8
  tags: opts?.tags,
9
9
  metadata: opts?.metadata
10
10
  });
11
+ const usage = {
12
+ inputTokens: 0,
13
+ outputTokens: 0
14
+ };
11
15
  return {
12
16
  model: wrapModelWithMiddleware(tracer, model, {
13
17
  name: opts?.name,
14
- parentTraceId: root.traceId
18
+ parentTraceId: root.traceId,
19
+ usage
15
20
  }),
16
21
  end: async (endOpts) => {
17
- root.end(endOpts);
22
+ const total = usage.inputTokens + usage.outputTokens;
23
+ root.end({
24
+ output: endOpts?.output ?? usage.output,
25
+ status: endOpts?.status,
26
+ totalTokens: endOpts?.totalTokens ?? (total || void 0),
27
+ inputTokens: endOpts?.inputTokens ?? (usage.inputTokens || void 0),
28
+ outputTokens: endOpts?.outputTokens ?? (usage.outputTokens || void 0),
29
+ ttftMs: usage.ttftMs
30
+ });
18
31
  await tracer.destroy();
19
32
  }
20
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk.js","names":[],"sources":["../../src/integrations/ai-sdk.ts"],"sourcesContent":["import type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport type { AuixPrism } from \"../client\";\nimport type { TraceEndOptions } from \"../types\";\nimport { wrapModelWithMiddleware } from \"../wrapper\";\n\nexport interface AISDKPrismOptions {\n name?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n endUserId?: string;\n}\n\nexport interface AISDKPrismResult {\n model: LanguageModelV3;\n end: (opts?: TraceEndOptions) => Promise<void>;\n}\n\nexport function prismAISDK(\n tracer: AuixPrism,\n model: LanguageModelV3,\n opts?: AISDKPrismOptions,\n): AISDKPrismResult {\n const root = tracer.startTrace({\n name: opts?.name,\n endUserId: opts?.endUserId,\n tags: opts?.tags,\n metadata: opts?.metadata,\n });\n\n const wrappedModel = wrapModelWithMiddleware(tracer, model, {\n name: opts?.name,\n parentTraceId: root.traceId,\n });\n\n return {\n model: wrappedModel,\n end: async (endOpts?) => {\n root.end(endOpts);\n await tracer.destroy();\n },\n };\n}\n"],"mappings":";;;AAiBA,SAAgB,WACd,QACA,OACA,MACkB;CAClB,MAAM,OAAO,OAAO,WAAW;EAC7B,MAAM,MAAM;EACZ,WAAW,MAAM;EACjB,MAAM,MAAM;EACZ,UAAU,MAAM;EACjB,CAAC;AAOF,QAAO;EACL,OANmB,wBAAwB,QAAQ,OAAO;GAC1D,MAAM,MAAM;GACZ,eAAe,KAAK;GACrB,CAAC;EAIA,KAAK,OAAO,YAAa;AACvB,QAAK,IAAI,QAAQ;AACjB,SAAM,OAAO,SAAS;;EAEzB"}
1
+ {"version":3,"file":"ai-sdk.js","names":[],"sources":["../../src/integrations/ai-sdk.ts"],"sourcesContent":["import type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport type { AuixPrism } from \"../client\";\nimport type { UsageAccumulator } from \"../shared\";\nimport type { TraceEndOptions } from \"../types\";\nimport { wrapModelWithMiddleware } from \"../wrapper\";\n\nexport interface AISDKPrismOptions {\n name?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n endUserId?: string;\n}\n\nexport interface AISDKPrismResult {\n model: LanguageModelV3;\n end: (opts?: TraceEndOptions) => Promise<void>;\n}\n\nexport function prismAISDK(\n tracer: AuixPrism,\n model: LanguageModelV3,\n opts?: AISDKPrismOptions,\n): AISDKPrismResult {\n const root = tracer.startTrace({\n name: opts?.name,\n endUserId: opts?.endUserId,\n tags: opts?.tags,\n metadata: opts?.metadata,\n });\n\n const usage: UsageAccumulator = {\n inputTokens: 0,\n outputTokens: 0,\n };\n\n const wrappedModel = wrapModelWithMiddleware(tracer, model, {\n name: opts?.name,\n parentTraceId: root.traceId,\n usage,\n });\n\n return {\n model: wrappedModel,\n end: async (endOpts?) => {\n const total = usage.inputTokens + usage.outputTokens;\n root.end({\n output: endOpts?.output ?? usage.output,\n status: endOpts?.status,\n totalTokens: endOpts?.totalTokens ?? (total || undefined),\n inputTokens: endOpts?.inputTokens ?? (usage.inputTokens || undefined),\n outputTokens:\n endOpts?.outputTokens ?? (usage.outputTokens || undefined),\n ttftMs: usage.ttftMs,\n });\n await tracer.destroy();\n },\n };\n}\n"],"mappings":";;;AAkBA,SAAgB,WACd,QACA,OACA,MACkB;CAClB,MAAM,OAAO,OAAO,WAAW;EAC7B,MAAM,MAAM;EACZ,WAAW,MAAM;EACjB,MAAM,MAAM;EACZ,UAAU,MAAM;EACjB,CAAC;CAEF,MAAM,QAA0B;EAC9B,aAAa;EACb,cAAc;EACf;AAQD,QAAO;EACL,OAPmB,wBAAwB,QAAQ,OAAO;GAC1D,MAAM,MAAM;GACZ,eAAe,KAAK;GACpB;GACD,CAAC;EAIA,KAAK,OAAO,YAAa;GACvB,MAAM,QAAQ,MAAM,cAAc,MAAM;AACxC,QAAK,IAAI;IACP,QAAQ,SAAS,UAAU,MAAM;IACjC,QAAQ,SAAS;IACjB,aAAa,SAAS,gBAAgB,SAAS;IAC/C,aAAa,SAAS,gBAAgB,MAAM,eAAe;IAC3D,cACE,SAAS,iBAAiB,MAAM,gBAAgB;IAClD,QAAQ,MAAM;IACf,CAAC;AACF,SAAM,OAAO,SAAS;;EAEzB"}
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_shared = require('../shared-Ch80RlSv.cjs');
2
+ const require_shared = require('../shared-Do8YbTDV.cjs');
3
3
 
4
4
  //#region src/integrations/anthropic.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { t as AuixPrism } from "../client-BhQrlPEQ.cjs";
1
+ import { t as AuixPrism } from "../client-DgiofMcL.cjs";
2
2
 
3
3
  //#region src/integrations/anthropic.d.ts
4
4
  interface AnthropicPrismOptions {
@@ -1,4 +1,4 @@
1
- import { t as AuixPrism } from "../client-9E6ncwtH.js";
1
+ import { t as AuixPrism } from "../client-CTcnqw0Y.js";
2
2
 
3
3
  //#region src/integrations/anthropic.d.ts
4
4
  interface AnthropicPrismOptions {
@@ -1,4 +1,4 @@
1
- import { a as truncateInput, i as endRootHandle, n as createRootHandle, r as createToolSpan, t as cleanupOnError } from "../shared-BsY3-hy4.js";
1
+ import { a as truncateInput, i as endRootHandle, n as createRootHandle, r as createToolSpan, t as cleanupOnError } from "../shared-CcAuQvBc.js";
2
2
 
3
3
  //#region src/integrations/anthropic.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_shared = require('../shared-Ch80RlSv.cjs');
2
+ const require_shared = require('../shared-Do8YbTDV.cjs');
3
3
 
4
4
  //#region src/integrations/openai.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { t as AuixPrism } from "../client-BhQrlPEQ.cjs";
1
+ import { t as AuixPrism } from "../client-DgiofMcL.cjs";
2
2
 
3
3
  //#region src/integrations/openai.d.ts
4
4
  interface OpenAIPrismOptions {
@@ -1,4 +1,4 @@
1
- import { t as AuixPrism } from "../client-9E6ncwtH.js";
1
+ import { t as AuixPrism } from "../client-CTcnqw0Y.js";
2
2
 
3
3
  //#region src/integrations/openai.d.ts
4
4
  interface OpenAIPrismOptions {
@@ -1,4 +1,4 @@
1
- import { a as truncateInput, i as endRootHandle, n as createRootHandle, r as createToolSpan, t as cleanupOnError } from "../shared-BsY3-hy4.js";
1
+ import { a as truncateInput, i as endRootHandle, n as createRootHandle, r as createToolSpan, t as cleanupOnError } from "../shared-CcAuQvBc.js";
2
2
 
3
3
  //#region src/integrations/openai.ts
4
4
  /**
@@ -53,13 +53,19 @@ function createToolSpan(tracer, root, toolCall) {
53
53
  input: toolCall.input
54
54
  });
55
55
  }
56
- function endRootHandle(root, result) {
56
+ function endRootHandle(root, result, usage) {
57
+ if (usage) {
58
+ usage.inputTokens += result.inputTokens;
59
+ usage.outputTokens += result.outputTokens;
60
+ usage.ttftMs ??= result.ttftMs;
61
+ usage.output = result.output;
62
+ }
57
63
  root.handle.end({
58
64
  output: result.output,
59
65
  status: "completed",
60
66
  totalTokens: result.inputTokens + result.outputTokens,
61
- promptTokens: result.inputTokens,
62
- completionTokens: result.outputTokens,
67
+ inputTokens: result.inputTokens,
68
+ outputTokens: result.outputTokens,
63
69
  ttftMs: result.ttftMs
64
70
  });
65
71
  }
@@ -76,4 +82,4 @@ function cleanupOnError(root, error, pendingToolSpans) {
76
82
 
77
83
  //#endregion
78
84
  export { truncateInput as a, endRootHandle as i, createRootHandle as n, createToolSpan as r, cleanupOnError as t };
79
- //# sourceMappingURL=shared-BsY3-hy4.js.map
85
+ //# sourceMappingURL=shared-CcAuQvBc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-CcAuQvBc.js","names":[],"sources":["../src/shared.ts"],"sourcesContent":["import type { AuixPrism, SpanHandle, TraceHandle } from \"./client\";\n\nexport type RootHandle =\n | { isSpanMode: true; traceId: string; handle: SpanHandle }\n | { isSpanMode: false; traceId: string; handle: TraceHandle };\n\nexport interface RootHandleOptions {\n name?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n parentTraceId?: string;\n endUserId?: string;\n}\n\nexport interface ToolCallInput {\n id: string;\n name: string;\n input: string;\n}\n\nexport interface UsageAccumulator {\n inputTokens: number;\n outputTokens: number;\n ttftMs?: number;\n output?: string;\n}\n\nexport function truncateInput(messages: unknown, maxBytes = 32768): unknown {\n let json = JSON.stringify(messages);\n if (new TextEncoder().encode(json).length <= maxBytes) {\n return messages;\n }\n\n if (!Array.isArray(messages)) return messages;\n const arr = [...messages];\n while (arr.length > 1) {\n arr.shift();\n json = JSON.stringify(arr);\n if (new TextEncoder().encode(json).length <= maxBytes) {\n return arr;\n }\n }\n return arr;\n}\n\nexport function createRootHandle(\n tracer: AuixPrism,\n opts: RootHandleOptions | undefined,\n model: string,\n provider: string,\n input: unknown,\n metadata: Record<string, unknown> | undefined,\n): RootHandle {\n const parentTraceId = opts?.parentTraceId;\n\n if (parentTraceId) {\n const handle = tracer.startSpanOnTrace(parentTraceId, {\n name: opts?.name ?? model,\n type: \"llm\",\n input,\n model,\n provider,\n metadata,\n });\n return { isSpanMode: true, traceId: parentTraceId, handle };\n }\n\n const handle = tracer.startTrace({\n name: opts?.name ?? model,\n model,\n provider,\n input,\n metadata,\n tags: opts?.tags,\n endUserId: opts?.endUserId,\n });\n return { isSpanMode: false, traceId: handle.traceId, handle };\n}\n\nexport function createToolSpan(\n tracer: AuixPrism,\n root: RootHandle,\n toolCall: ToolCallInput,\n): SpanHandle {\n if (root.isSpanMode) {\n return tracer.startSpanOnTrace(root.traceId, {\n name: toolCall.name,\n type: \"tool\",\n input: toolCall.input,\n parentSpanId: root.handle.spanId,\n });\n }\n return root.handle.startSpan({\n name: toolCall.name,\n type: \"tool\",\n input: toolCall.input,\n });\n}\n\nexport function endRootHandle(\n root: RootHandle,\n result: {\n output: string;\n inputTokens: number;\n outputTokens: number;\n ttftMs?: number;\n },\n usage?: UsageAccumulator,\n): void {\n if (usage) {\n usage.inputTokens += result.inputTokens;\n usage.outputTokens += result.outputTokens;\n usage.ttftMs ??= result.ttftMs;\n usage.output = result.output;\n }\n\n root.handle.end({\n output: result.output,\n status: \"completed\",\n totalTokens: result.inputTokens + result.outputTokens,\n inputTokens: result.inputTokens,\n outputTokens: result.outputTokens,\n ttftMs: result.ttftMs,\n });\n}\n\nexport function cleanupOnError(\n root: RootHandle,\n error: unknown,\n pendingToolSpans?: Map<string, SpanHandle>,\n): void {\n if (pendingToolSpans) {\n for (const span of pendingToolSpans.values()) {\n span.end({ status: \"error\" });\n }\n pendingToolSpans.clear();\n }\n\n root.handle.end({\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n });\n}\n"],"mappings":";AA2BA,SAAgB,cAAc,UAAmB,WAAW,OAAgB;CAC1E,IAAI,OAAO,KAAK,UAAU,SAAS;AACnC,KAAI,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC,UAAU,SAC3C,QAAO;AAGT,KAAI,CAAC,MAAM,QAAQ,SAAS,CAAE,QAAO;CACrC,MAAM,MAAM,CAAC,GAAG,SAAS;AACzB,QAAO,IAAI,SAAS,GAAG;AACrB,MAAI,OAAO;AACX,SAAO,KAAK,UAAU,IAAI;AAC1B,MAAI,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC,UAAU,SAC3C,QAAO;;AAGX,QAAO;;AAGT,SAAgB,iBACd,QACA,MACA,OACA,UACA,OACA,UACY;CACZ,MAAM,gBAAgB,MAAM;AAE5B,KAAI,cASF,QAAO;EAAE,YAAY;EAAM,SAAS;EAAe,QARpC,OAAO,iBAAiB,eAAe;GACpD,MAAM,MAAM,QAAQ;GACpB,MAAM;GACN;GACA;GACA;GACA;GACD,CAAC;EACyD;CAG7D,MAAM,SAAS,OAAO,WAAW;EAC/B,MAAM,MAAM,QAAQ;EACpB;EACA;EACA;EACA;EACA,MAAM,MAAM;EACZ,WAAW,MAAM;EAClB,CAAC;AACF,QAAO;EAAE,YAAY;EAAO,SAAS,OAAO;EAAS;EAAQ;;AAG/D,SAAgB,eACd,QACA,MACA,UACY;AACZ,KAAI,KAAK,WACP,QAAO,OAAO,iBAAiB,KAAK,SAAS;EAC3C,MAAM,SAAS;EACf,MAAM;EACN,OAAO,SAAS;EAChB,cAAc,KAAK,OAAO;EAC3B,CAAC;AAEJ,QAAO,KAAK,OAAO,UAAU;EAC3B,MAAM,SAAS;EACf,MAAM;EACN,OAAO,SAAS;EACjB,CAAC;;AAGJ,SAAgB,cACd,MACA,QAMA,OACM;AACN,KAAI,OAAO;AACT,QAAM,eAAe,OAAO;AAC5B,QAAM,gBAAgB,OAAO;AAC7B,QAAM,WAAW,OAAO;AACxB,QAAM,SAAS,OAAO;;AAGxB,MAAK,OAAO,IAAI;EACd,QAAQ,OAAO;EACf,QAAQ;EACR,aAAa,OAAO,cAAc,OAAO;EACzC,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,QAAQ,OAAO;EAChB,CAAC;;AAGJ,SAAgB,eACd,MACA,OACA,kBACM;AACN,KAAI,kBAAkB;AACpB,OAAK,MAAM,QAAQ,iBAAiB,QAAQ,CAC1C,MAAK,IAAI,EAAE,QAAQ,SAAS,CAAC;AAE/B,mBAAiB,OAAO;;AAG1B,MAAK,OAAO,IAAI;EACd,QAAQ;EACR,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;EAC9D,CAAC"}
@@ -54,13 +54,19 @@ function createToolSpan(tracer, root, toolCall) {
54
54
  input: toolCall.input
55
55
  });
56
56
  }
57
- function endRootHandle(root, result) {
57
+ function endRootHandle(root, result, usage) {
58
+ if (usage) {
59
+ usage.inputTokens += result.inputTokens;
60
+ usage.outputTokens += result.outputTokens;
61
+ usage.ttftMs ??= result.ttftMs;
62
+ usage.output = result.output;
63
+ }
58
64
  root.handle.end({
59
65
  output: result.output,
60
66
  status: "completed",
61
67
  totalTokens: result.inputTokens + result.outputTokens,
62
- promptTokens: result.inputTokens,
63
- completionTokens: result.outputTokens,
68
+ inputTokens: result.inputTokens,
69
+ outputTokens: result.outputTokens,
64
70
  ttftMs: result.ttftMs
65
71
  });
66
72
  }
@@ -106,4 +112,4 @@ Object.defineProperty(exports, 'truncateInput', {
106
112
  return truncateInput;
107
113
  }
108
114
  });
109
- //# sourceMappingURL=shared-Ch80RlSv.cjs.map
115
+ //# sourceMappingURL=shared-Do8YbTDV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-Do8YbTDV.cjs","names":[],"sources":["../src/shared.ts"],"sourcesContent":["import type { AuixPrism, SpanHandle, TraceHandle } from \"./client\";\n\nexport type RootHandle =\n | { isSpanMode: true; traceId: string; handle: SpanHandle }\n | { isSpanMode: false; traceId: string; handle: TraceHandle };\n\nexport interface RootHandleOptions {\n name?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n parentTraceId?: string;\n endUserId?: string;\n}\n\nexport interface ToolCallInput {\n id: string;\n name: string;\n input: string;\n}\n\nexport interface UsageAccumulator {\n inputTokens: number;\n outputTokens: number;\n ttftMs?: number;\n output?: string;\n}\n\nexport function truncateInput(messages: unknown, maxBytes = 32768): unknown {\n let json = JSON.stringify(messages);\n if (new TextEncoder().encode(json).length <= maxBytes) {\n return messages;\n }\n\n if (!Array.isArray(messages)) return messages;\n const arr = [...messages];\n while (arr.length > 1) {\n arr.shift();\n json = JSON.stringify(arr);\n if (new TextEncoder().encode(json).length <= maxBytes) {\n return arr;\n }\n }\n return arr;\n}\n\nexport function createRootHandle(\n tracer: AuixPrism,\n opts: RootHandleOptions | undefined,\n model: string,\n provider: string,\n input: unknown,\n metadata: Record<string, unknown> | undefined,\n): RootHandle {\n const parentTraceId = opts?.parentTraceId;\n\n if (parentTraceId) {\n const handle = tracer.startSpanOnTrace(parentTraceId, {\n name: opts?.name ?? model,\n type: \"llm\",\n input,\n model,\n provider,\n metadata,\n });\n return { isSpanMode: true, traceId: parentTraceId, handle };\n }\n\n const handle = tracer.startTrace({\n name: opts?.name ?? model,\n model,\n provider,\n input,\n metadata,\n tags: opts?.tags,\n endUserId: opts?.endUserId,\n });\n return { isSpanMode: false, traceId: handle.traceId, handle };\n}\n\nexport function createToolSpan(\n tracer: AuixPrism,\n root: RootHandle,\n toolCall: ToolCallInput,\n): SpanHandle {\n if (root.isSpanMode) {\n return tracer.startSpanOnTrace(root.traceId, {\n name: toolCall.name,\n type: \"tool\",\n input: toolCall.input,\n parentSpanId: root.handle.spanId,\n });\n }\n return root.handle.startSpan({\n name: toolCall.name,\n type: \"tool\",\n input: toolCall.input,\n });\n}\n\nexport function endRootHandle(\n root: RootHandle,\n result: {\n output: string;\n inputTokens: number;\n outputTokens: number;\n ttftMs?: number;\n },\n usage?: UsageAccumulator,\n): void {\n if (usage) {\n usage.inputTokens += result.inputTokens;\n usage.outputTokens += result.outputTokens;\n usage.ttftMs ??= result.ttftMs;\n usage.output = result.output;\n }\n\n root.handle.end({\n output: result.output,\n status: \"completed\",\n totalTokens: result.inputTokens + result.outputTokens,\n inputTokens: result.inputTokens,\n outputTokens: result.outputTokens,\n ttftMs: result.ttftMs,\n });\n}\n\nexport function cleanupOnError(\n root: RootHandle,\n error: unknown,\n pendingToolSpans?: Map<string, SpanHandle>,\n): void {\n if (pendingToolSpans) {\n for (const span of pendingToolSpans.values()) {\n span.end({ status: \"error\" });\n }\n pendingToolSpans.clear();\n }\n\n root.handle.end({\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n });\n}\n"],"mappings":";;AA2BA,SAAgB,cAAc,UAAmB,WAAW,OAAgB;CAC1E,IAAI,OAAO,KAAK,UAAU,SAAS;AACnC,KAAI,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC,UAAU,SAC3C,QAAO;AAGT,KAAI,CAAC,MAAM,QAAQ,SAAS,CAAE,QAAO;CACrC,MAAM,MAAM,CAAC,GAAG,SAAS;AACzB,QAAO,IAAI,SAAS,GAAG;AACrB,MAAI,OAAO;AACX,SAAO,KAAK,UAAU,IAAI;AAC1B,MAAI,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC,UAAU,SAC3C,QAAO;;AAGX,QAAO;;AAGT,SAAgB,iBACd,QACA,MACA,OACA,UACA,OACA,UACY;CACZ,MAAM,gBAAgB,MAAM;AAE5B,KAAI,cASF,QAAO;EAAE,YAAY;EAAM,SAAS;EAAe,QARpC,OAAO,iBAAiB,eAAe;GACpD,MAAM,MAAM,QAAQ;GACpB,MAAM;GACN;GACA;GACA;GACA;GACD,CAAC;EACyD;CAG7D,MAAM,SAAS,OAAO,WAAW;EAC/B,MAAM,MAAM,QAAQ;EACpB;EACA;EACA;EACA;EACA,MAAM,MAAM;EACZ,WAAW,MAAM;EAClB,CAAC;AACF,QAAO;EAAE,YAAY;EAAO,SAAS,OAAO;EAAS;EAAQ;;AAG/D,SAAgB,eACd,QACA,MACA,UACY;AACZ,KAAI,KAAK,WACP,QAAO,OAAO,iBAAiB,KAAK,SAAS;EAC3C,MAAM,SAAS;EACf,MAAM;EACN,OAAO,SAAS;EAChB,cAAc,KAAK,OAAO;EAC3B,CAAC;AAEJ,QAAO,KAAK,OAAO,UAAU;EAC3B,MAAM,SAAS;EACf,MAAM;EACN,OAAO,SAAS;EACjB,CAAC;;AAGJ,SAAgB,cACd,MACA,QAMA,OACM;AACN,KAAI,OAAO;AACT,QAAM,eAAe,OAAO;AAC5B,QAAM,gBAAgB,OAAO;AAC7B,QAAM,WAAW,OAAO;AACxB,QAAM,SAAS,OAAO;;AAGxB,MAAK,OAAO,IAAI;EACd,QAAQ,OAAO;EACf,QAAQ;EACR,aAAa,OAAO,cAAc,OAAO;EACzC,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,QAAQ,OAAO;EAChB,CAAC;;AAGJ,SAAgB,eACd,MACA,OACA,kBACM;AACN,KAAI,kBAAkB;AACpB,OAAK,MAAM,QAAQ,iBAAiB,QAAQ,CAC1C,MAAK,IAAI,EAAE,QAAQ,SAAS,CAAC;AAE/B,mBAAiB,OAAO;;AAG1B,MAAK,OAAO,IAAI;EACd,QAAQ;EACR,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;EAC9D,CAAC"}
@@ -1,4 +1,4 @@
1
- const require_shared = require('./shared-Ch80RlSv.cjs');
1
+ const require_shared = require('./shared-Do8YbTDV.cjs');
2
2
  let ai = require("ai");
3
3
 
4
4
  //#region src/wrapper.ts
@@ -86,7 +86,7 @@ function createPrismMiddleware(tracer, opts) {
86
86
  output,
87
87
  inputTokens,
88
88
  outputTokens
89
- });
89
+ }, opts?.usage);
90
90
  return result;
91
91
  } catch (error) {
92
92
  require_shared.cleanupOnError(root, error, pendingToolSpans);
@@ -152,7 +152,7 @@ function createPrismMiddleware(tracer, opts) {
152
152
  inputTokens,
153
153
  outputTokens,
154
154
  ttftMs
155
- });
155
+ }, opts?.usage);
156
156
  }
157
157
  });
158
158
  return {
@@ -174,4 +174,4 @@ Object.defineProperty(exports, 'wrapModelWithMiddleware', {
174
174
  return wrapModelWithMiddleware;
175
175
  }
176
176
  });
177
- //# sourceMappingURL=wrapper-C9LHP_r5.cjs.map
177
+ //# sourceMappingURL=wrapper-3UjPvXBN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper-3UjPvXBN.cjs","names":["truncateInput","createRootHandle","createToolSpan"],"sources":["../src/wrapper.ts"],"sourcesContent":["import type {\n LanguageModelV3,\n LanguageModelV3Middleware,\n LanguageModelV3Prompt,\n} from \"@ai-sdk/provider\";\nimport { wrapLanguageModel } from \"ai\";\nimport type { AuixPrism, SpanHandle } from \"./client\";\nimport type { AISDKPrismOptions } from \"./integrations/ai-sdk\";\nimport type { ToolCallInput, UsageAccumulator } from \"./shared\";\nimport {\n cleanupOnError,\n createRootHandle,\n createToolSpan,\n endRootHandle,\n truncateInput,\n} from \"./shared\";\n\ntype MiddlewareOptions = AISDKPrismOptions & {\n parentTraceId?: string;\n usage?: UsageAccumulator;\n};\n\nexport function wrapModelWithMiddleware(\n tracer: AuixPrism,\n model: LanguageModelV3,\n opts?: MiddlewareOptions,\n): LanguageModelV3 {\n return wrapLanguageModel({\n model,\n middleware: createPrismMiddleware(tracer, opts),\n });\n}\n\ntype ContentPart = {\n type: string;\n text?: string;\n toolName?: string;\n toolCallId?: string;\n input?: string;\n [key: string]: unknown;\n};\n\nfunction extractTextFromContent(content: ContentPart[]): string {\n return content\n .filter((c) => c.type === \"text\" && typeof c.text === \"string\")\n .map((c) => c.text)\n .join(\"\");\n}\n\nfunction extractModelConfig(params: Record<string, unknown>) {\n const keys = [\n \"temperature\",\n \"maxOutputTokens\",\n \"topP\",\n \"topK\",\n \"frequencyPenalty\",\n \"presencePenalty\",\n \"stopSequences\",\n ] as const;\n\n const config: Record<string, unknown> = {};\n for (const key of keys) {\n if (params[key] !== undefined) {\n config[key] = params[key];\n }\n }\n return Object.keys(config).length > 0 ? config : undefined;\n}\n\nfunction extractToolOutput(output: unknown): unknown {\n if (output && typeof output === \"object\" && \"type\" in output) {\n const o = output as {\n type: string;\n value?: unknown;\n reason?: string;\n };\n if (o.type === \"text\" || o.type === \"json\") return o.value;\n if (o.type === \"denied\") return `[denied] ${o.reason ?? \"\"}`;\n }\n return output;\n}\n\nfunction resolveToolResults(\n prompt: LanguageModelV3Prompt,\n pendingToolSpans: Map<string, SpanHandle>,\n): void {\n if (pendingToolSpans.size === 0) return;\n\n for (const msg of prompt) {\n if (msg.role !== \"tool\") continue;\n for (const part of msg.content) {\n if (part.type !== \"tool-result\") continue;\n const span = pendingToolSpans.get(part.toolCallId);\n if (span) {\n span.end({\n output: extractToolOutput(part.output),\n status: \"completed\",\n });\n pendingToolSpans.delete(part.toolCallId);\n }\n }\n }\n}\n\nfunction buildMetadata(\n opts: MiddlewareOptions | undefined,\n params: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const modelConfig = extractModelConfig(params);\n if (modelConfig) return { ...opts?.metadata, modelConfig };\n return opts?.metadata;\n}\n\nfunction createPrismMiddleware(\n tracer: AuixPrism,\n opts?: MiddlewareOptions,\n): LanguageModelV3Middleware {\n const pendingToolSpans = new Map<string, SpanHandle>();\n\n return {\n specificationVersion: \"v3\",\n\n wrapGenerate: async ({ doGenerate, params, model }) => {\n const input = truncateInput(params.prompt);\n const metadata = buildMetadata(opts, params);\n\n resolveToolResults(params.prompt, pendingToolSpans);\n\n const root = createRootHandle(\n tracer,\n opts,\n model.modelId,\n model.provider,\n input,\n metadata,\n );\n\n try {\n const result = await doGenerate();\n const content = result.content as ContentPart[];\n const output = extractTextFromContent(content);\n const inputTokens = result.usage.inputTokens.total ?? 0;\n const outputTokens = result.usage.outputTokens.total ?? 0;\n\n for (const part of content) {\n if (part.type === \"tool-call\" && part.toolCallId) {\n const span = createToolSpan(tracer, root, {\n id: part.toolCallId,\n name: part.toolName ?? \"tool\",\n input: part.input ?? \"\",\n });\n if (root.isSpanMode) {\n pendingToolSpans.set(part.toolCallId, span);\n } else {\n span.end({ status: \"completed\" });\n }\n }\n }\n\n endRootHandle(root, { output, inputTokens, outputTokens }, opts?.usage);\n return result;\n } catch (error) {\n cleanupOnError(root, error, pendingToolSpans);\n throw error;\n }\n },\n\n wrapStream: async ({ doStream, params, model }) => {\n const input = truncateInput(params.prompt);\n const metadata = buildMetadata(opts, params);\n\n resolveToolResults(params.prompt, pendingToolSpans);\n\n const root = createRootHandle(\n tracer,\n opts,\n model.modelId,\n model.provider,\n input,\n metadata,\n );\n\n try {\n const streamStart = Date.now();\n const { stream, ...rest } = await doStream();\n\n let output = \"\";\n let inputTokens = 0;\n let outputTokens = 0;\n let ttftMs: number | undefined;\n let firstChunk = true;\n const toolCalls: ToolCallInput[] = [];\n let currentToolInput: ToolCallInput | null = null;\n\n const transformStream = new TransformStream({\n transform(chunk, controller) {\n switch (chunk.type) {\n case \"text-delta\":\n if (firstChunk) {\n ttftMs = Date.now() - streamStart;\n firstChunk = false;\n }\n output += chunk.delta;\n break;\n case \"tool-input-start\":\n currentToolInput = {\n id: chunk.id,\n name: chunk.toolName,\n input: \"\",\n };\n break;\n case \"tool-input-delta\":\n if (currentToolInput && currentToolInput.id === chunk.id) {\n currentToolInput.input += chunk.delta;\n }\n break;\n case \"tool-input-end\":\n if (currentToolInput && currentToolInput.id === chunk.id) {\n toolCalls.push(currentToolInput);\n currentToolInput = null;\n }\n break;\n case \"finish\":\n inputTokens = chunk.usage.inputTokens.total ?? 0;\n outputTokens = chunk.usage.outputTokens.total ?? 0;\n break;\n }\n controller.enqueue(chunk);\n },\n flush() {\n for (const tc of toolCalls) {\n const span = createToolSpan(tracer, root, tc);\n if (root.isSpanMode) {\n pendingToolSpans.set(tc.id, span);\n } else {\n span.end({ status: \"completed\" });\n }\n }\n\n endRootHandle(\n root,\n { output, inputTokens, outputTokens, ttftMs },\n opts?.usage,\n );\n },\n });\n\n return {\n stream: stream.pipeThrough(transformStream),\n ...rest,\n };\n } catch (error) {\n cleanupOnError(root, error, pendingToolSpans);\n throw error;\n }\n },\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a as truncateInput, i as endRootHandle, n as createRootHandle, r as createToolSpan, t as cleanupOnError } from "./shared-BsY3-hy4.js";
1
+ import { a as truncateInput, i as endRootHandle, n as createRootHandle, r as createToolSpan, t as cleanupOnError } from "./shared-CcAuQvBc.js";
2
2
  import { wrapLanguageModel } from "ai";
3
3
 
4
4
  //#region src/wrapper.ts
@@ -86,7 +86,7 @@ function createPrismMiddleware(tracer, opts) {
86
86
  output,
87
87
  inputTokens,
88
88
  outputTokens
89
- });
89
+ }, opts?.usage);
90
90
  return result;
91
91
  } catch (error) {
92
92
  cleanupOnError(root, error, pendingToolSpans);
@@ -152,7 +152,7 @@ function createPrismMiddleware(tracer, opts) {
152
152
  inputTokens,
153
153
  outputTokens,
154
154
  ttftMs
155
- });
155
+ }, opts?.usage);
156
156
  }
157
157
  });
158
158
  return {
@@ -169,4 +169,4 @@ function createPrismMiddleware(tracer, opts) {
169
169
 
170
170
  //#endregion
171
171
  export { wrapModelWithMiddleware as t };
172
- //# sourceMappingURL=wrapper-R8mpaNge.js.map
172
+ //# sourceMappingURL=wrapper-Czc4CgC-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper-Czc4CgC-.js","names":[],"sources":["../src/wrapper.ts"],"sourcesContent":["import type {\n LanguageModelV3,\n LanguageModelV3Middleware,\n LanguageModelV3Prompt,\n} from \"@ai-sdk/provider\";\nimport { wrapLanguageModel } from \"ai\";\nimport type { AuixPrism, SpanHandle } from \"./client\";\nimport type { AISDKPrismOptions } from \"./integrations/ai-sdk\";\nimport type { ToolCallInput, UsageAccumulator } from \"./shared\";\nimport {\n cleanupOnError,\n createRootHandle,\n createToolSpan,\n endRootHandle,\n truncateInput,\n} from \"./shared\";\n\ntype MiddlewareOptions = AISDKPrismOptions & {\n parentTraceId?: string;\n usage?: UsageAccumulator;\n};\n\nexport function wrapModelWithMiddleware(\n tracer: AuixPrism,\n model: LanguageModelV3,\n opts?: MiddlewareOptions,\n): LanguageModelV3 {\n return wrapLanguageModel({\n model,\n middleware: createPrismMiddleware(tracer, opts),\n });\n}\n\ntype ContentPart = {\n type: string;\n text?: string;\n toolName?: string;\n toolCallId?: string;\n input?: string;\n [key: string]: unknown;\n};\n\nfunction extractTextFromContent(content: ContentPart[]): string {\n return content\n .filter((c) => c.type === \"text\" && typeof c.text === \"string\")\n .map((c) => c.text)\n .join(\"\");\n}\n\nfunction extractModelConfig(params: Record<string, unknown>) {\n const keys = [\n \"temperature\",\n \"maxOutputTokens\",\n \"topP\",\n \"topK\",\n \"frequencyPenalty\",\n \"presencePenalty\",\n \"stopSequences\",\n ] as const;\n\n const config: Record<string, unknown> = {};\n for (const key of keys) {\n if (params[key] !== undefined) {\n config[key] = params[key];\n }\n }\n return Object.keys(config).length > 0 ? config : undefined;\n}\n\nfunction extractToolOutput(output: unknown): unknown {\n if (output && typeof output === \"object\" && \"type\" in output) {\n const o = output as {\n type: string;\n value?: unknown;\n reason?: string;\n };\n if (o.type === \"text\" || o.type === \"json\") return o.value;\n if (o.type === \"denied\") return `[denied] ${o.reason ?? \"\"}`;\n }\n return output;\n}\n\nfunction resolveToolResults(\n prompt: LanguageModelV3Prompt,\n pendingToolSpans: Map<string, SpanHandle>,\n): void {\n if (pendingToolSpans.size === 0) return;\n\n for (const msg of prompt) {\n if (msg.role !== \"tool\") continue;\n for (const part of msg.content) {\n if (part.type !== \"tool-result\") continue;\n const span = pendingToolSpans.get(part.toolCallId);\n if (span) {\n span.end({\n output: extractToolOutput(part.output),\n status: \"completed\",\n });\n pendingToolSpans.delete(part.toolCallId);\n }\n }\n }\n}\n\nfunction buildMetadata(\n opts: MiddlewareOptions | undefined,\n params: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const modelConfig = extractModelConfig(params);\n if (modelConfig) return { ...opts?.metadata, modelConfig };\n return opts?.metadata;\n}\n\nfunction createPrismMiddleware(\n tracer: AuixPrism,\n opts?: MiddlewareOptions,\n): LanguageModelV3Middleware {\n const pendingToolSpans = new Map<string, SpanHandle>();\n\n return {\n specificationVersion: \"v3\",\n\n wrapGenerate: async ({ doGenerate, params, model }) => {\n const input = truncateInput(params.prompt);\n const metadata = buildMetadata(opts, params);\n\n resolveToolResults(params.prompt, pendingToolSpans);\n\n const root = createRootHandle(\n tracer,\n opts,\n model.modelId,\n model.provider,\n input,\n metadata,\n );\n\n try {\n const result = await doGenerate();\n const content = result.content as ContentPart[];\n const output = extractTextFromContent(content);\n const inputTokens = result.usage.inputTokens.total ?? 0;\n const outputTokens = result.usage.outputTokens.total ?? 0;\n\n for (const part of content) {\n if (part.type === \"tool-call\" && part.toolCallId) {\n const span = createToolSpan(tracer, root, {\n id: part.toolCallId,\n name: part.toolName ?? \"tool\",\n input: part.input ?? \"\",\n });\n if (root.isSpanMode) {\n pendingToolSpans.set(part.toolCallId, span);\n } else {\n span.end({ status: \"completed\" });\n }\n }\n }\n\n endRootHandle(root, { output, inputTokens, outputTokens }, opts?.usage);\n return result;\n } catch (error) {\n cleanupOnError(root, error, pendingToolSpans);\n throw error;\n }\n },\n\n wrapStream: async ({ doStream, params, model }) => {\n const input = truncateInput(params.prompt);\n const metadata = buildMetadata(opts, params);\n\n resolveToolResults(params.prompt, pendingToolSpans);\n\n const root = createRootHandle(\n tracer,\n opts,\n model.modelId,\n model.provider,\n input,\n metadata,\n );\n\n try {\n const streamStart = Date.now();\n const { stream, ...rest } = await doStream();\n\n let output = \"\";\n let inputTokens = 0;\n let outputTokens = 0;\n let ttftMs: number | undefined;\n let firstChunk = true;\n const toolCalls: ToolCallInput[] = [];\n let currentToolInput: ToolCallInput | null = null;\n\n const transformStream = new TransformStream({\n transform(chunk, controller) {\n switch (chunk.type) {\n case \"text-delta\":\n if (firstChunk) {\n ttftMs = Date.now() - streamStart;\n firstChunk = false;\n }\n output += chunk.delta;\n break;\n case \"tool-input-start\":\n currentToolInput = {\n id: chunk.id,\n name: chunk.toolName,\n input: \"\",\n };\n break;\n case \"tool-input-delta\":\n if (currentToolInput && currentToolInput.id === chunk.id) {\n currentToolInput.input += chunk.delta;\n }\n break;\n case \"tool-input-end\":\n if (currentToolInput && currentToolInput.id === chunk.id) {\n toolCalls.push(currentToolInput);\n currentToolInput = null;\n }\n break;\n case \"finish\":\n inputTokens = chunk.usage.inputTokens.total ?? 0;\n outputTokens = chunk.usage.outputTokens.total ?? 0;\n break;\n }\n controller.enqueue(chunk);\n },\n flush() {\n for (const tc of toolCalls) {\n const span = createToolSpan(tracer, root, tc);\n if (root.isSpanMode) {\n pendingToolSpans.set(tc.id, span);\n } else {\n span.end({ status: \"completed\" });\n }\n }\n\n endRootHandle(\n root,\n { output, inputTokens, outputTokens, ttftMs },\n opts?.usage,\n );\n },\n });\n\n return {\n stream: stream.pipeThrough(transformStream),\n ...rest,\n };\n } catch (error) {\n cleanupOnError(root, error, pendingToolSpans);\n throw error;\n }\n },\n };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aui-x/prism",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "LLM tracing SDK for auix — AI SDK middleware + manual tracing",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-9E6ncwtH.d.ts","names":[],"sources":["../src/types.ts","../src/client.ts"],"mappings":";UAAiB,eAAA;EACf,MAAA;EACA,OAAA;EACA,OAAA;EACA,SAAA;EAEsC;EAAtC,SAAA,IAAa,MAAA,EAAQ,UAAA,OAAiB,OAAA;EAEY;EAAlD,YAAA,IAAgB,KAAA,WAAgB,MAAA,EAAQ,UAAA;AAAA;AAAA,UAGzB,YAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,IAAA;EACA,QAAA,GAAW,MAAA;AAAA;AAAA,UAGI,WAAA;EACf,KAAA,EAD0B,WAAA;EAE1B,MAAA,GAAS,IAAA,GAAO,eAAA,KAAoB,OAAA;AAAA;AAAA,UAGrB,eAAA;EACf,MAAA;EACA,MAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;AAAA;AAAA,KAGU,UAAA;EAEN,CAAA;EACA,IAAA;EACA,OAAA;EACA,IAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,QAAA,GAAW,MAAA;EACX,IAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,YAAA;EACA,IAAA;EACA,QAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EACA,QAAA,GAAW,MAAA;EACX,SAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;AAAA;;;cCpEO,SAAA;EAAA,QACH,MAAA;EAAA,QACA,OAAA;EAAA,QACA,OAAA;EAAA,QACA,SAAA;EAAA,QACA,SAAA;EAAA,QACA,YAAA;EAAA,QACA,MAAA;EAAA,QACA,KAAA;EAAA,QACA,WAAA;EAAA,QACA,SAAA;cAEI,MAAA,EAAQ,eAAA;EAUpB,OAAA,CAAQ,KAAA,EAAO,UAAA;EAWf,KAAA,CAAA,GAAS,OAAA;EAmCT,UAAA,CAAW,IAAA;IACT,IAAA;IACA,KAAA;IACA,KAAA;IACA,QAAA;IACA,SAAA;IACA,QAAA,GAAW,MAAA;IACX,IAAA;EAAA,IACE,WAAA;EAuBJ,gBAAA,CACE,OAAA,UACA,IAAA;IACE,IAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;IACA,QAAA;IACA,YAAA;IACA,QAAA,GAAW,MAAA;EAAA,IAEZ,UAAA;EAsBH,KAAA,CAAM,IAAA,EAAM,YAAA,GAAe,WAAA;EAS3B,OAAA,CAAA,GAAW,OAAA;AAAA;AAAA,cAOA,WAAA;EAAA,QAID,MAAA;EAAA,SACC,OAAA;EAAA,QAJH,OAAA;cAGE,MAAA,EAAQ,SAAA,EACP,OAAA;EAGX,SAAA,CAAU,IAAA;IACR,IAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA,IACE,UAAA;EAmBJ,GAAA,CAAI,IAAA;IACF,MAAA;IACA,MAAA;IACA,KAAA;IACA,WAAA;IACA,YAAA;IACA,gBAAA;IACA,MAAA;EAAA;AAAA;AAAA,cAsBS,UAAA;EAAA,QAID,MAAA;EAAA,QACA,OAAA;EAAA,SACC,MAAA;EAAA,QALH,OAAA;cAGE,MAAA,EAAQ,SAAA,EACR,OAAA,UACC,MAAA;EAGX,GAAA,CAAI,IAAA;IACF,MAAA;IACA,MAAA;IACA,KAAA;IACA,WAAA;IACA,YAAA;IACA,gBAAA;IACA,MAAA;EAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-BhQrlPEQ.d.cts","names":[],"sources":["../src/types.ts","../src/client.ts"],"mappings":";UAAiB,eAAA;EACf,MAAA;EACA,OAAA;EACA,OAAA;EACA,SAAA;EAEsC;EAAtC,SAAA,IAAa,MAAA,EAAQ,UAAA,OAAiB,OAAA;EAEY;EAAlD,YAAA,IAAgB,KAAA,WAAgB,MAAA,EAAQ,UAAA;AAAA;AAAA,UAGzB,YAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,IAAA;EACA,QAAA,GAAW,MAAA;AAAA;AAAA,UAGI,WAAA;EACf,KAAA,EAD0B,WAAA;EAE1B,MAAA,GAAS,IAAA,GAAO,eAAA,KAAoB,OAAA;AAAA;AAAA,UAGrB,eAAA;EACf,MAAA;EACA,MAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;AAAA;AAAA,KAGU,UAAA;EAEN,CAAA;EACA,IAAA;EACA,OAAA;EACA,IAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,QAAA,GAAW,MAAA;EACX,IAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,YAAA;EACA,IAAA;EACA,QAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EACA,QAAA,GAAW,MAAA;EACX,SAAA;AAAA;EAGA,CAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;AAAA;;;cCpEO,SAAA;EAAA,QACH,MAAA;EAAA,QACA,OAAA;EAAA,QACA,OAAA;EAAA,QACA,SAAA;EAAA,QACA,SAAA;EAAA,QACA,YAAA;EAAA,QACA,MAAA;EAAA,QACA,KAAA;EAAA,QACA,WAAA;EAAA,QACA,SAAA;cAEI,MAAA,EAAQ,eAAA;EAUpB,OAAA,CAAQ,KAAA,EAAO,UAAA;EAWf,KAAA,CAAA,GAAS,OAAA;EAmCT,UAAA,CAAW,IAAA;IACT,IAAA;IACA,KAAA;IACA,KAAA;IACA,QAAA;IACA,SAAA;IACA,QAAA,GAAW,MAAA;IACX,IAAA;EAAA,IACE,WAAA;EAuBJ,gBAAA,CACE,OAAA,UACA,IAAA;IACE,IAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;IACA,QAAA;IACA,YAAA;IACA,QAAA,GAAW,MAAA;EAAA,IAEZ,UAAA;EAsBH,KAAA,CAAM,IAAA,EAAM,YAAA,GAAe,WAAA;EAS3B,OAAA,CAAA,GAAW,OAAA;AAAA;AAAA,cAOA,WAAA;EAAA,QAID,MAAA;EAAA,SACC,OAAA;EAAA,QAJH,OAAA;cAGE,MAAA,EAAQ,SAAA,EACP,OAAA;EAGX,SAAA,CAAU,IAAA;IACR,IAAA;IACA,IAAA;IACA,KAAA;IACA,KAAA;EAAA,IACE,UAAA;EAmBJ,GAAA,CAAI,IAAA;IACF,MAAA;IACA,MAAA;IACA,KAAA;IACA,WAAA;IACA,YAAA;IACA,gBAAA;IACA,MAAA;EAAA;AAAA;AAAA,cAsBS,UAAA;EAAA,QAID,MAAA;EAAA,QACA,OAAA;EAAA,SACC,MAAA;EAAA,QALH,OAAA;cAGE,MAAA,EAAQ,SAAA,EACR,OAAA,UACC,MAAA;EAGX,GAAA,CAAI,IAAA;IACF,MAAA;IACA,MAAA;IACA,KAAA;IACA,WAAA;IACA,YAAA;IACA,gBAAA;IACA,MAAA;EAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared-BsY3-hy4.js","names":[],"sources":["../src/shared.ts"],"sourcesContent":["import type { AuixPrism, SpanHandle, TraceHandle } from \"./client\";\n\nexport type RootHandle =\n | { isSpanMode: true; traceId: string; handle: SpanHandle }\n | { isSpanMode: false; traceId: string; handle: TraceHandle };\n\nexport interface RootHandleOptions {\n name?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n parentTraceId?: string;\n endUserId?: string;\n}\n\nexport interface ToolCallInput {\n id: string;\n name: string;\n input: string;\n}\n\nexport function truncateInput(messages: unknown, maxBytes = 32768): unknown {\n let json = JSON.stringify(messages);\n if (new TextEncoder().encode(json).length <= maxBytes) {\n return messages;\n }\n\n if (!Array.isArray(messages)) return messages;\n const arr = [...messages];\n while (arr.length > 1) {\n arr.shift();\n json = JSON.stringify(arr);\n if (new TextEncoder().encode(json).length <= maxBytes) {\n return arr;\n }\n }\n return arr;\n}\n\nexport function createRootHandle(\n tracer: AuixPrism,\n opts: RootHandleOptions | undefined,\n model: string,\n provider: string,\n input: unknown,\n metadata: Record<string, unknown> | undefined,\n): RootHandle {\n const parentTraceId = opts?.parentTraceId;\n\n if (parentTraceId) {\n const handle = tracer.startSpanOnTrace(parentTraceId, {\n name: opts?.name ?? model,\n type: \"llm\",\n input,\n model,\n provider,\n metadata,\n });\n return { isSpanMode: true, traceId: parentTraceId, handle };\n }\n\n const handle = tracer.startTrace({\n name: opts?.name ?? model,\n model,\n provider,\n input,\n metadata,\n tags: opts?.tags,\n endUserId: opts?.endUserId,\n });\n return { isSpanMode: false, traceId: handle.traceId, handle };\n}\n\nexport function createToolSpan(\n tracer: AuixPrism,\n root: RootHandle,\n toolCall: ToolCallInput,\n): SpanHandle {\n if (root.isSpanMode) {\n return tracer.startSpanOnTrace(root.traceId, {\n name: toolCall.name,\n type: \"tool\",\n input: toolCall.input,\n parentSpanId: root.handle.spanId,\n });\n }\n return root.handle.startSpan({\n name: toolCall.name,\n type: \"tool\",\n input: toolCall.input,\n });\n}\n\nexport function endRootHandle(\n root: RootHandle,\n result: {\n output: string;\n inputTokens: number;\n outputTokens: number;\n ttftMs?: number;\n },\n): void {\n root.handle.end({\n output: result.output,\n status: \"completed\",\n totalTokens: result.inputTokens + result.outputTokens,\n promptTokens: result.inputTokens,\n completionTokens: result.outputTokens,\n ttftMs: result.ttftMs,\n });\n}\n\nexport function cleanupOnError(\n root: RootHandle,\n error: unknown,\n pendingToolSpans?: Map<string, SpanHandle>,\n): void {\n if (pendingToolSpans) {\n for (const span of pendingToolSpans.values()) {\n span.end({ status: \"error\" });\n }\n pendingToolSpans.clear();\n }\n\n root.handle.end({\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n });\n}\n"],"mappings":";AAoBA,SAAgB,cAAc,UAAmB,WAAW,OAAgB;CAC1E,IAAI,OAAO,KAAK,UAAU,SAAS;AACnC,KAAI,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC,UAAU,SAC3C,QAAO;AAGT,KAAI,CAAC,MAAM,QAAQ,SAAS,CAAE,QAAO;CACrC,MAAM,MAAM,CAAC,GAAG,SAAS;AACzB,QAAO,IAAI,SAAS,GAAG;AACrB,MAAI,OAAO;AACX,SAAO,KAAK,UAAU,IAAI;AAC1B,MAAI,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC,UAAU,SAC3C,QAAO;;AAGX,QAAO;;AAGT,SAAgB,iBACd,QACA,MACA,OACA,UACA,OACA,UACY;CACZ,MAAM,gBAAgB,MAAM;AAE5B,KAAI,cASF,QAAO;EAAE,YAAY;EAAM,SAAS;EAAe,QARpC,OAAO,iBAAiB,eAAe;GACpD,MAAM,MAAM,QAAQ;GACpB,MAAM;GACN;GACA;GACA;GACA;GACD,CAAC;EACyD;CAG7D,MAAM,SAAS,OAAO,WAAW;EAC/B,MAAM,MAAM,QAAQ;EACpB;EACA;EACA;EACA;EACA,MAAM,MAAM;EACZ,WAAW,MAAM;EAClB,CAAC;AACF,QAAO;EAAE,YAAY;EAAO,SAAS,OAAO;EAAS;EAAQ;;AAG/D,SAAgB,eACd,QACA,MACA,UACY;AACZ,KAAI,KAAK,WACP,QAAO,OAAO,iBAAiB,KAAK,SAAS;EAC3C,MAAM,SAAS;EACf,MAAM;EACN,OAAO,SAAS;EAChB,cAAc,KAAK,OAAO;EAC3B,CAAC;AAEJ,QAAO,KAAK,OAAO,UAAU;EAC3B,MAAM,SAAS;EACf,MAAM;EACN,OAAO,SAAS;EACjB,CAAC;;AAGJ,SAAgB,cACd,MACA,QAMM;AACN,MAAK,OAAO,IAAI;EACd,QAAQ,OAAO;EACf,QAAQ;EACR,aAAa,OAAO,cAAc,OAAO;EACzC,cAAc,OAAO;EACrB,kBAAkB,OAAO;EACzB,QAAQ,OAAO;EAChB,CAAC;;AAGJ,SAAgB,eACd,MACA,OACA,kBACM;AACN,KAAI,kBAAkB;AACpB,OAAK,MAAM,QAAQ,iBAAiB,QAAQ,CAC1C,MAAK,IAAI,EAAE,QAAQ,SAAS,CAAC;AAE/B,mBAAiB,OAAO;;AAG1B,MAAK,OAAO,IAAI;EACd,QAAQ;EACR,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;EAC9D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared-Ch80RlSv.cjs","names":[],"sources":["../src/shared.ts"],"sourcesContent":["import type { AuixPrism, SpanHandle, TraceHandle } from \"./client\";\n\nexport type RootHandle =\n | { isSpanMode: true; traceId: string; handle: SpanHandle }\n | { isSpanMode: false; traceId: string; handle: TraceHandle };\n\nexport interface RootHandleOptions {\n name?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n parentTraceId?: string;\n endUserId?: string;\n}\n\nexport interface ToolCallInput {\n id: string;\n name: string;\n input: string;\n}\n\nexport function truncateInput(messages: unknown, maxBytes = 32768): unknown {\n let json = JSON.stringify(messages);\n if (new TextEncoder().encode(json).length <= maxBytes) {\n return messages;\n }\n\n if (!Array.isArray(messages)) return messages;\n const arr = [...messages];\n while (arr.length > 1) {\n arr.shift();\n json = JSON.stringify(arr);\n if (new TextEncoder().encode(json).length <= maxBytes) {\n return arr;\n }\n }\n return arr;\n}\n\nexport function createRootHandle(\n tracer: AuixPrism,\n opts: RootHandleOptions | undefined,\n model: string,\n provider: string,\n input: unknown,\n metadata: Record<string, unknown> | undefined,\n): RootHandle {\n const parentTraceId = opts?.parentTraceId;\n\n if (parentTraceId) {\n const handle = tracer.startSpanOnTrace(parentTraceId, {\n name: opts?.name ?? model,\n type: \"llm\",\n input,\n model,\n provider,\n metadata,\n });\n return { isSpanMode: true, traceId: parentTraceId, handle };\n }\n\n const handle = tracer.startTrace({\n name: opts?.name ?? model,\n model,\n provider,\n input,\n metadata,\n tags: opts?.tags,\n endUserId: opts?.endUserId,\n });\n return { isSpanMode: false, traceId: handle.traceId, handle };\n}\n\nexport function createToolSpan(\n tracer: AuixPrism,\n root: RootHandle,\n toolCall: ToolCallInput,\n): SpanHandle {\n if (root.isSpanMode) {\n return tracer.startSpanOnTrace(root.traceId, {\n name: toolCall.name,\n type: \"tool\",\n input: toolCall.input,\n parentSpanId: root.handle.spanId,\n });\n }\n return root.handle.startSpan({\n name: toolCall.name,\n type: \"tool\",\n input: toolCall.input,\n });\n}\n\nexport function endRootHandle(\n root: RootHandle,\n result: {\n output: string;\n inputTokens: number;\n outputTokens: number;\n ttftMs?: number;\n },\n): void {\n root.handle.end({\n output: result.output,\n status: \"completed\",\n totalTokens: result.inputTokens + result.outputTokens,\n promptTokens: result.inputTokens,\n completionTokens: result.outputTokens,\n ttftMs: result.ttftMs,\n });\n}\n\nexport function cleanupOnError(\n root: RootHandle,\n error: unknown,\n pendingToolSpans?: Map<string, SpanHandle>,\n): void {\n if (pendingToolSpans) {\n for (const span of pendingToolSpans.values()) {\n span.end({ status: \"error\" });\n }\n pendingToolSpans.clear();\n }\n\n root.handle.end({\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n });\n}\n"],"mappings":";;AAoBA,SAAgB,cAAc,UAAmB,WAAW,OAAgB;CAC1E,IAAI,OAAO,KAAK,UAAU,SAAS;AACnC,KAAI,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC,UAAU,SAC3C,QAAO;AAGT,KAAI,CAAC,MAAM,QAAQ,SAAS,CAAE,QAAO;CACrC,MAAM,MAAM,CAAC,GAAG,SAAS;AACzB,QAAO,IAAI,SAAS,GAAG;AACrB,MAAI,OAAO;AACX,SAAO,KAAK,UAAU,IAAI;AAC1B,MAAI,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC,UAAU,SAC3C,QAAO;;AAGX,QAAO;;AAGT,SAAgB,iBACd,QACA,MACA,OACA,UACA,OACA,UACY;CACZ,MAAM,gBAAgB,MAAM;AAE5B,KAAI,cASF,QAAO;EAAE,YAAY;EAAM,SAAS;EAAe,QARpC,OAAO,iBAAiB,eAAe;GACpD,MAAM,MAAM,QAAQ;GACpB,MAAM;GACN;GACA;GACA;GACA;GACD,CAAC;EACyD;CAG7D,MAAM,SAAS,OAAO,WAAW;EAC/B,MAAM,MAAM,QAAQ;EACpB;EACA;EACA;EACA;EACA,MAAM,MAAM;EACZ,WAAW,MAAM;EAClB,CAAC;AACF,QAAO;EAAE,YAAY;EAAO,SAAS,OAAO;EAAS;EAAQ;;AAG/D,SAAgB,eACd,QACA,MACA,UACY;AACZ,KAAI,KAAK,WACP,QAAO,OAAO,iBAAiB,KAAK,SAAS;EAC3C,MAAM,SAAS;EACf,MAAM;EACN,OAAO,SAAS;EAChB,cAAc,KAAK,OAAO;EAC3B,CAAC;AAEJ,QAAO,KAAK,OAAO,UAAU;EAC3B,MAAM,SAAS;EACf,MAAM;EACN,OAAO,SAAS;EACjB,CAAC;;AAGJ,SAAgB,cACd,MACA,QAMM;AACN,MAAK,OAAO,IAAI;EACd,QAAQ,OAAO;EACf,QAAQ;EACR,aAAa,OAAO,cAAc,OAAO;EACzC,cAAc,OAAO;EACrB,kBAAkB,OAAO;EACzB,QAAQ,OAAO;EAChB,CAAC;;AAGJ,SAAgB,eACd,MACA,OACA,kBACM;AACN,KAAI,kBAAkB;AACpB,OAAK,MAAM,QAAQ,iBAAiB,QAAQ,CAC1C,MAAK,IAAI,EAAE,QAAQ,SAAS,CAAC;AAE/B,mBAAiB,OAAO;;AAG1B,MAAK,OAAO,IAAI;EACd,QAAQ;EACR,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;EAC9D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapper-C9LHP_r5.cjs","names":["truncateInput","createRootHandle","createToolSpan"],"sources":["../src/wrapper.ts"],"sourcesContent":["import type {\n LanguageModelV3,\n LanguageModelV3Middleware,\n LanguageModelV3Prompt,\n} from \"@ai-sdk/provider\";\nimport { wrapLanguageModel } from \"ai\";\nimport type { AuixPrism, SpanHandle } from \"./client\";\nimport type { AISDKPrismOptions } from \"./integrations/ai-sdk\";\nimport type { ToolCallInput } from \"./shared\";\nimport {\n cleanupOnError,\n createRootHandle,\n createToolSpan,\n endRootHandle,\n truncateInput,\n} from \"./shared\";\n\ntype MiddlewareOptions = AISDKPrismOptions & {\n parentTraceId?: string;\n};\n\nexport function wrapModelWithMiddleware(\n tracer: AuixPrism,\n model: LanguageModelV3,\n opts?: MiddlewareOptions,\n): LanguageModelV3 {\n return wrapLanguageModel({\n model,\n middleware: createPrismMiddleware(tracer, opts),\n });\n}\n\ntype ContentPart = {\n type: string;\n text?: string;\n toolName?: string;\n toolCallId?: string;\n input?: string;\n [key: string]: unknown;\n};\n\nfunction extractTextFromContent(content: ContentPart[]): string {\n return content\n .filter((c) => c.type === \"text\" && typeof c.text === \"string\")\n .map((c) => c.text)\n .join(\"\");\n}\n\nfunction extractModelConfig(params: Record<string, unknown>) {\n const keys = [\n \"temperature\",\n \"maxOutputTokens\",\n \"topP\",\n \"topK\",\n \"frequencyPenalty\",\n \"presencePenalty\",\n \"stopSequences\",\n ] as const;\n\n const config: Record<string, unknown> = {};\n for (const key of keys) {\n if (params[key] !== undefined) {\n config[key] = params[key];\n }\n }\n return Object.keys(config).length > 0 ? config : undefined;\n}\n\nfunction extractToolOutput(output: unknown): unknown {\n if (output && typeof output === \"object\" && \"type\" in output) {\n const o = output as {\n type: string;\n value?: unknown;\n reason?: string;\n };\n if (o.type === \"text\" || o.type === \"json\") return o.value;\n if (o.type === \"denied\") return `[denied] ${o.reason ?? \"\"}`;\n }\n return output;\n}\n\nfunction resolveToolResults(\n prompt: LanguageModelV3Prompt,\n pendingToolSpans: Map<string, SpanHandle>,\n): void {\n if (pendingToolSpans.size === 0) return;\n\n for (const msg of prompt) {\n if (msg.role !== \"tool\") continue;\n for (const part of msg.content) {\n if (part.type !== \"tool-result\") continue;\n const span = pendingToolSpans.get(part.toolCallId);\n if (span) {\n span.end({\n output: extractToolOutput(part.output),\n status: \"completed\",\n });\n pendingToolSpans.delete(part.toolCallId);\n }\n }\n }\n}\n\nfunction buildMetadata(\n opts: MiddlewareOptions | undefined,\n params: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const modelConfig = extractModelConfig(params);\n if (modelConfig) return { ...opts?.metadata, modelConfig };\n return opts?.metadata;\n}\n\nfunction createPrismMiddleware(\n tracer: AuixPrism,\n opts?: MiddlewareOptions,\n): LanguageModelV3Middleware {\n const pendingToolSpans = new Map<string, SpanHandle>();\n\n return {\n specificationVersion: \"v3\",\n\n wrapGenerate: async ({ doGenerate, params, model }) => {\n const input = truncateInput(params.prompt);\n const metadata = buildMetadata(opts, params);\n\n resolveToolResults(params.prompt, pendingToolSpans);\n\n const root = createRootHandle(\n tracer,\n opts,\n model.modelId,\n model.provider,\n input,\n metadata,\n );\n\n try {\n const result = await doGenerate();\n const content = result.content as ContentPart[];\n const output = extractTextFromContent(content);\n const inputTokens = result.usage.inputTokens.total ?? 0;\n const outputTokens = result.usage.outputTokens.total ?? 0;\n\n for (const part of content) {\n if (part.type === \"tool-call\" && part.toolCallId) {\n const span = createToolSpan(tracer, root, {\n id: part.toolCallId,\n name: part.toolName ?? \"tool\",\n input: part.input ?? \"\",\n });\n if (root.isSpanMode) {\n pendingToolSpans.set(part.toolCallId, span);\n } else {\n span.end({ status: \"completed\" });\n }\n }\n }\n\n endRootHandle(root, {\n output,\n inputTokens,\n outputTokens,\n });\n return result;\n } catch (error) {\n cleanupOnError(root, error, pendingToolSpans);\n throw error;\n }\n },\n\n wrapStream: async ({ doStream, params, model }) => {\n const input = truncateInput(params.prompt);\n const metadata = buildMetadata(opts, params);\n\n resolveToolResults(params.prompt, pendingToolSpans);\n\n const root = createRootHandle(\n tracer,\n opts,\n model.modelId,\n model.provider,\n input,\n metadata,\n );\n\n try {\n const streamStart = Date.now();\n const { stream, ...rest } = await doStream();\n\n let output = \"\";\n let inputTokens = 0;\n let outputTokens = 0;\n let ttftMs: number | undefined;\n let firstChunk = true;\n const toolCalls: ToolCallInput[] = [];\n let currentToolInput: ToolCallInput | null = null;\n\n const transformStream = new TransformStream({\n transform(chunk, controller) {\n switch (chunk.type) {\n case \"text-delta\":\n if (firstChunk) {\n ttftMs = Date.now() - streamStart;\n firstChunk = false;\n }\n output += chunk.delta;\n break;\n case \"tool-input-start\":\n currentToolInput = {\n id: chunk.id,\n name: chunk.toolName,\n input: \"\",\n };\n break;\n case \"tool-input-delta\":\n if (currentToolInput && currentToolInput.id === chunk.id) {\n currentToolInput.input += chunk.delta;\n }\n break;\n case \"tool-input-end\":\n if (currentToolInput && currentToolInput.id === chunk.id) {\n toolCalls.push(currentToolInput);\n currentToolInput = null;\n }\n break;\n case \"finish\":\n inputTokens = chunk.usage.inputTokens.total ?? 0;\n outputTokens = chunk.usage.outputTokens.total ?? 0;\n break;\n }\n controller.enqueue(chunk);\n },\n flush() {\n for (const tc of toolCalls) {\n const span = createToolSpan(tracer, root, tc);\n if (root.isSpanMode) {\n pendingToolSpans.set(tc.id, span);\n } else {\n span.end({ status: \"completed\" });\n }\n }\n\n endRootHandle(root, {\n output,\n inputTokens,\n outputTokens,\n ttftMs,\n });\n },\n });\n\n return {\n stream: stream.pipeThrough(transformStream),\n ...rest,\n };\n } catch (error) {\n cleanupOnError(root, error, pendingToolSpans);\n throw error;\n }\n },\n };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapper-R8mpaNge.js","names":[],"sources":["../src/wrapper.ts"],"sourcesContent":["import type {\n LanguageModelV3,\n LanguageModelV3Middleware,\n LanguageModelV3Prompt,\n} from \"@ai-sdk/provider\";\nimport { wrapLanguageModel } from \"ai\";\nimport type { AuixPrism, SpanHandle } from \"./client\";\nimport type { AISDKPrismOptions } from \"./integrations/ai-sdk\";\nimport type { ToolCallInput } from \"./shared\";\nimport {\n cleanupOnError,\n createRootHandle,\n createToolSpan,\n endRootHandle,\n truncateInput,\n} from \"./shared\";\n\ntype MiddlewareOptions = AISDKPrismOptions & {\n parentTraceId?: string;\n};\n\nexport function wrapModelWithMiddleware(\n tracer: AuixPrism,\n model: LanguageModelV3,\n opts?: MiddlewareOptions,\n): LanguageModelV3 {\n return wrapLanguageModel({\n model,\n middleware: createPrismMiddleware(tracer, opts),\n });\n}\n\ntype ContentPart = {\n type: string;\n text?: string;\n toolName?: string;\n toolCallId?: string;\n input?: string;\n [key: string]: unknown;\n};\n\nfunction extractTextFromContent(content: ContentPart[]): string {\n return content\n .filter((c) => c.type === \"text\" && typeof c.text === \"string\")\n .map((c) => c.text)\n .join(\"\");\n}\n\nfunction extractModelConfig(params: Record<string, unknown>) {\n const keys = [\n \"temperature\",\n \"maxOutputTokens\",\n \"topP\",\n \"topK\",\n \"frequencyPenalty\",\n \"presencePenalty\",\n \"stopSequences\",\n ] as const;\n\n const config: Record<string, unknown> = {};\n for (const key of keys) {\n if (params[key] !== undefined) {\n config[key] = params[key];\n }\n }\n return Object.keys(config).length > 0 ? config : undefined;\n}\n\nfunction extractToolOutput(output: unknown): unknown {\n if (output && typeof output === \"object\" && \"type\" in output) {\n const o = output as {\n type: string;\n value?: unknown;\n reason?: string;\n };\n if (o.type === \"text\" || o.type === \"json\") return o.value;\n if (o.type === \"denied\") return `[denied] ${o.reason ?? \"\"}`;\n }\n return output;\n}\n\nfunction resolveToolResults(\n prompt: LanguageModelV3Prompt,\n pendingToolSpans: Map<string, SpanHandle>,\n): void {\n if (pendingToolSpans.size === 0) return;\n\n for (const msg of prompt) {\n if (msg.role !== \"tool\") continue;\n for (const part of msg.content) {\n if (part.type !== \"tool-result\") continue;\n const span = pendingToolSpans.get(part.toolCallId);\n if (span) {\n span.end({\n output: extractToolOutput(part.output),\n status: \"completed\",\n });\n pendingToolSpans.delete(part.toolCallId);\n }\n }\n }\n}\n\nfunction buildMetadata(\n opts: MiddlewareOptions | undefined,\n params: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const modelConfig = extractModelConfig(params);\n if (modelConfig) return { ...opts?.metadata, modelConfig };\n return opts?.metadata;\n}\n\nfunction createPrismMiddleware(\n tracer: AuixPrism,\n opts?: MiddlewareOptions,\n): LanguageModelV3Middleware {\n const pendingToolSpans = new Map<string, SpanHandle>();\n\n return {\n specificationVersion: \"v3\",\n\n wrapGenerate: async ({ doGenerate, params, model }) => {\n const input = truncateInput(params.prompt);\n const metadata = buildMetadata(opts, params);\n\n resolveToolResults(params.prompt, pendingToolSpans);\n\n const root = createRootHandle(\n tracer,\n opts,\n model.modelId,\n model.provider,\n input,\n metadata,\n );\n\n try {\n const result = await doGenerate();\n const content = result.content as ContentPart[];\n const output = extractTextFromContent(content);\n const inputTokens = result.usage.inputTokens.total ?? 0;\n const outputTokens = result.usage.outputTokens.total ?? 0;\n\n for (const part of content) {\n if (part.type === \"tool-call\" && part.toolCallId) {\n const span = createToolSpan(tracer, root, {\n id: part.toolCallId,\n name: part.toolName ?? \"tool\",\n input: part.input ?? \"\",\n });\n if (root.isSpanMode) {\n pendingToolSpans.set(part.toolCallId, span);\n } else {\n span.end({ status: \"completed\" });\n }\n }\n }\n\n endRootHandle(root, {\n output,\n inputTokens,\n outputTokens,\n });\n return result;\n } catch (error) {\n cleanupOnError(root, error, pendingToolSpans);\n throw error;\n }\n },\n\n wrapStream: async ({ doStream, params, model }) => {\n const input = truncateInput(params.prompt);\n const metadata = buildMetadata(opts, params);\n\n resolveToolResults(params.prompt, pendingToolSpans);\n\n const root = createRootHandle(\n tracer,\n opts,\n model.modelId,\n model.provider,\n input,\n metadata,\n );\n\n try {\n const streamStart = Date.now();\n const { stream, ...rest } = await doStream();\n\n let output = \"\";\n let inputTokens = 0;\n let outputTokens = 0;\n let ttftMs: number | undefined;\n let firstChunk = true;\n const toolCalls: ToolCallInput[] = [];\n let currentToolInput: ToolCallInput | null = null;\n\n const transformStream = new TransformStream({\n transform(chunk, controller) {\n switch (chunk.type) {\n case \"text-delta\":\n if (firstChunk) {\n ttftMs = Date.now() - streamStart;\n firstChunk = false;\n }\n output += chunk.delta;\n break;\n case \"tool-input-start\":\n currentToolInput = {\n id: chunk.id,\n name: chunk.toolName,\n input: \"\",\n };\n break;\n case \"tool-input-delta\":\n if (currentToolInput && currentToolInput.id === chunk.id) {\n currentToolInput.input += chunk.delta;\n }\n break;\n case \"tool-input-end\":\n if (currentToolInput && currentToolInput.id === chunk.id) {\n toolCalls.push(currentToolInput);\n currentToolInput = null;\n }\n break;\n case \"finish\":\n inputTokens = chunk.usage.inputTokens.total ?? 0;\n outputTokens = chunk.usage.outputTokens.total ?? 0;\n break;\n }\n controller.enqueue(chunk);\n },\n flush() {\n for (const tc of toolCalls) {\n const span = createToolSpan(tracer, root, tc);\n if (root.isSpanMode) {\n pendingToolSpans.set(tc.id, span);\n } else {\n span.end({ status: \"completed\" });\n }\n }\n\n endRootHandle(root, {\n output,\n inputTokens,\n outputTokens,\n ttftMs,\n });\n },\n });\n\n return {\n stream: stream.pipeThrough(transformStream),\n ...rest,\n };\n } catch (error) {\n cleanupOnError(root, error, pendingToolSpans);\n throw error;\n }\n },\n };\n}\n"],"mappings":"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"}