@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.
- package/README.md +8 -10
- package/dist/{client-9E6ncwtH.d.ts → client-CTcnqw0Y.d.ts} +11 -11
- package/dist/client-CTcnqw0Y.d.ts.map +1 -0
- package/dist/{client-B49Ds9fR.js → client-CkxOaNy0.js} +5 -5
- package/dist/{client-B49Ds9fR.js.map → client-CkxOaNy0.js.map} +1 -1
- package/dist/{client--PC-VXip.cjs → client-DWaiEqR5.cjs} +5 -5
- package/dist/{client--PC-VXip.cjs.map → client-DWaiEqR5.cjs.map} +1 -1
- package/dist/{client-BhQrlPEQ.d.cts → client-DgiofMcL.d.cts} +11 -11
- package/dist/client-DgiofMcL.d.cts.map +1 -0
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/integrations/ai-sdk.cjs +16 -3
- package/dist/integrations/ai-sdk.cjs.map +1 -1
- package/dist/integrations/ai-sdk.d.cts +1 -1
- package/dist/integrations/ai-sdk.d.cts.map +1 -1
- package/dist/integrations/ai-sdk.d.ts +1 -1
- package/dist/integrations/ai-sdk.d.ts.map +1 -1
- package/dist/integrations/ai-sdk.js +16 -3
- package/dist/integrations/ai-sdk.js.map +1 -1
- package/dist/integrations/anthropic.cjs +1 -1
- package/dist/integrations/anthropic.d.cts +1 -1
- package/dist/integrations/anthropic.d.ts +1 -1
- package/dist/integrations/anthropic.js +1 -1
- package/dist/integrations/openai.cjs +1 -1
- package/dist/integrations/openai.d.cts +1 -1
- package/dist/integrations/openai.d.ts +1 -1
- package/dist/integrations/openai.js +1 -1
- package/dist/{shared-BsY3-hy4.js → shared-CcAuQvBc.js} +10 -4
- package/dist/shared-CcAuQvBc.js.map +1 -0
- package/dist/{shared-Ch80RlSv.cjs → shared-Do8YbTDV.cjs} +10 -4
- package/dist/shared-Do8YbTDV.cjs.map +1 -0
- package/dist/{wrapper-C9LHP_r5.cjs → wrapper-3UjPvXBN.cjs} +4 -4
- package/dist/wrapper-3UjPvXBN.cjs.map +1 -0
- package/dist/{wrapper-R8mpaNge.js → wrapper-Czc4CgC-.js} +4 -4
- package/dist/wrapper-Czc4CgC-.js.map +1 -0
- package/package.json +1 -1
- package/dist/client-9E6ncwtH.d.ts.map +0 -1
- package/dist/client-BhQrlPEQ.d.cts.map +0 -1
- package/dist/shared-BsY3-hy4.js.map +0 -1
- package/dist/shared-Ch80RlSv.cjs.map +0 -1
- package/dist/wrapper-C9LHP_r5.cjs.map +0 -1
- 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
|
-
|
|
48
|
-
|
|
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
|
-
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
54
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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
|
-
|
|
140
|
-
|
|
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
|
-
|
|
156
|
-
|
|
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-
|
|
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
|
-
|
|
168
|
-
|
|
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
|
-
|
|
195
|
-
|
|
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-
|
|
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
|
-
|
|
169
|
-
|
|
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
|
-
|
|
196
|
-
|
|
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
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
54
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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
|
-
|
|
140
|
-
|
|
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
|
-
|
|
156
|
-
|
|
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-
|
|
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
|
|
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-
|
|
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-
|
|
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
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_client = require('./client
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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":";;;;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-sdk.d.cts","names":[],"sources":["../../src/integrations/ai-sdk.ts"],"mappings":";;;;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-sdk.d.ts","names":[],"sources":["../../src/integrations/ai-sdk.ts"],"mappings":";;;;
|
|
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-
|
|
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
|
-
|
|
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":";;;
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import { a as truncateInput, i as endRootHandle, n as createRootHandle, r as createToolSpan, t as cleanupOnError } from "../shared-
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import { a as truncateInput, i as endRootHandle, n as createRootHandle, r as createToolSpan, t as cleanupOnError } from "../shared-
|
|
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
|
-
|
|
62
|
-
|
|
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-
|
|
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
|
-
|
|
63
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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 +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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"}
|