evlog 2.19.2 → 2.21.0
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 +30 -1
- package/dist/adapters/axiom.d.mts +1 -1
- package/dist/adapters/axiom.mjs +2 -2
- package/dist/adapters/better-stack.d.mts +1 -1
- package/dist/adapters/better-stack.mjs +2 -2
- package/dist/adapters/datadog.d.mts +1 -1
- package/dist/adapters/datadog.mjs +2 -2
- package/dist/adapters/fs.d.mts +1 -1
- package/dist/adapters/fs.mjs +1 -1
- package/dist/adapters/hyperdx.d.mts +1 -1
- package/dist/adapters/hyperdx.mjs +1 -1
- package/dist/adapters/memory.d.mts +1 -1
- package/dist/adapters/memory.mjs +1 -1
- package/dist/adapters/otlp.d.mts +1 -1
- package/dist/adapters/otlp.mjs +2 -2
- package/dist/adapters/posthog.d.mts +1 -1
- package/dist/adapters/posthog.mjs +2 -2
- package/dist/adapters/sentry.d.mts +1 -1
- package/dist/adapters/sentry.mjs +2 -2
- package/dist/ai/index.d.mts +39 -16
- package/dist/ai/index.d.mts.map +1 -1
- package/dist/ai/index.mjs +81 -16
- package/dist/ai/index.mjs.map +1 -1
- package/dist/asyncStorageScope-DnF7Xk8l.mjs +81 -0
- package/dist/asyncStorageScope-DnF7Xk8l.mjs.map +1 -0
- package/dist/{audit-CL0q7GJU.mjs → audit-BXCYMjcC.mjs} +21 -6
- package/dist/audit-BXCYMjcC.mjs.map +1 -0
- package/dist/{audit-CBfv3rl1.d.mts → audit-BZrUvjfW.d.mts} +2 -1
- package/dist/{audit-CBfv3rl1.d.mts.map → audit-BZrUvjfW.d.mts.map} +1 -1
- package/dist/audit-action.d.mts +1 -1
- package/dist/audit.d.mts +1 -1
- package/dist/audit.mjs +1 -1
- package/dist/better-auth/index.d.mts +1 -1
- package/dist/browser.d.mts +1 -1
- package/dist/{catalog-CyemiLYG.d.mts → catalog-1cQnNxR2.d.mts} +3 -3
- package/dist/{catalog-CyemiLYG.d.mts.map → catalog-1cQnNxR2.d.mts.map} +1 -1
- package/dist/catalog.d.mts +1 -1
- package/dist/{define-BuDJpV2b.d.mts → define-Ct2QyrE9.d.mts} +3 -3
- package/dist/{define-BuDJpV2b.d.mts.map → define-Ct2QyrE9.d.mts.map} +1 -1
- package/dist/{drain-6lV-g7JB.mjs → drain-AD7Mn_5_.mjs} +3 -3
- package/dist/{drain-6lV-g7JB.mjs.map → drain-AD7Mn_5_.mjs.map} +1 -1
- package/dist/elysia/index.d.mts +6 -5
- package/dist/elysia/index.d.mts.map +1 -1
- package/dist/elysia/index.mjs +11 -8
- package/dist/elysia/index.mjs.map +1 -1
- package/dist/{enrich-error-stack-next.node-BecxSKUc.mjs → enrich-error-stack-next.node-KB0Oap7R.mjs} +1 -1
- package/dist/{enrich-error-stack-next.node-BecxSKUc.mjs.map → enrich-error-stack-next.node-KB0Oap7R.mjs.map} +1 -1
- package/dist/{enricher-VdBVX4oT.d.mts → enricher-BOzt2FCi.d.mts} +2 -2
- package/dist/{enricher-VdBVX4oT.d.mts.map → enricher-BOzt2FCi.d.mts.map} +1 -1
- package/dist/enrichers.d.mts +2 -2
- package/dist/{error-CPCM5a1D.d.mts → error-BRymuv8U.d.mts} +2 -2
- package/dist/{error-CPCM5a1D.d.mts.map → error-BRymuv8U.d.mts.map} +1 -1
- package/dist/error.d.mts +1 -1
- package/dist/{errors-ZdY6Ohi6.d.mts → errors-C7qA6CAi.d.mts} +2 -2
- package/dist/{errors-ZdY6Ohi6.d.mts.map → errors-C7qA6CAi.d.mts.map} +1 -1
- package/dist/eve/index.d.mts +72 -0
- package/dist/eve/index.d.mts.map +1 -0
- package/dist/eve/index.mjs +593 -0
- package/dist/eve/index.mjs.map +1 -0
- package/dist/express/index.d.mts +2 -2
- package/dist/express/index.mjs +3 -3
- package/dist/fastify/index.d.mts +2 -2
- package/dist/fastify/index.mjs +3 -3
- package/dist/fork-S9gpZmF8.mjs +72 -0
- package/dist/fork-S9gpZmF8.mjs.map +1 -0
- package/dist/hono/index.d.mts +2 -2
- package/dist/hono/index.mjs +1 -1
- package/dist/{http-DA3RWQrm.mjs → http-CuZ6Cm2M.mjs} +2 -2
- package/dist/{http-DA3RWQrm.mjs.map → http-CuZ6Cm2M.mjs.map} +1 -1
- package/dist/http.d.mts +1 -1
- package/dist/index.d.mts +8 -8
- package/dist/index.mjs +1 -1
- package/dist/{instrumentation-create-STGmQGQt.d.mts → instrumentation-create-gSDk0leX.d.mts} +2 -2
- package/dist/{instrumentation-create-STGmQGQt.d.mts.map → instrumentation-create-gSDk0leX.d.mts.map} +1 -1
- package/dist/{integration-2PpI-bCm.mjs → integration-CeL90DtN.mjs} +3 -2
- package/dist/{integration-2PpI-bCm.mjs.map → integration-CeL90DtN.mjs.map} +1 -1
- package/dist/{logger-DWTPZ0c1.d.mts → logger-CxWz7QJ3.d.mts} +7 -3
- package/dist/logger-CxWz7QJ3.d.mts.map +1 -0
- package/dist/logger.d.mts +2 -2
- package/dist/logger.mjs +2 -2
- package/dist/{fork-Di44utlp.mjs → middleware-Cdebyfdt.mjs} +3 -69
- package/dist/middleware-Cdebyfdt.mjs.map +1 -0
- package/dist/{middleware-CjVyGyrG.d.mts → middleware-fbtEs6bq.d.mts} +2 -2
- package/dist/{middleware-CjVyGyrG.d.mts.map → middleware-fbtEs6bq.d.mts.map} +1 -1
- package/dist/nestjs/index.d.mts +2 -2
- package/dist/nestjs/index.mjs +4 -3
- package/dist/nestjs/index.mjs.map +1 -1
- package/dist/next/client.d.mts +1 -1
- package/dist/next/index.d.mts +4 -4
- package/dist/next/index.d.mts.map +1 -1
- package/dist/next/index.mjs +4 -3
- package/dist/next/index.mjs.map +1 -1
- package/dist/next/instrumentation/create.d.mts +1 -1
- package/dist/next/instrumentation/create.mjs +1 -1
- package/dist/next/instrumentation.d.mts +1 -1
- package/dist/next/stream.d.mts +1 -1
- package/dist/nitro/errorHandler.mjs +1 -1
- package/dist/nitro/module.d.mts +2 -2
- package/dist/nitro/module.mjs +1 -1
- package/dist/nitro/plugin.mjs +2 -2
- package/dist/nitro/v3/errorHandler.mjs +1 -1
- package/dist/nitro/v3/index.d.mts +2 -2
- package/dist/nitro/v3/module.d.mts +1 -1
- package/dist/nitro/v3/module.mjs +1 -1
- package/dist/nitro/v3/plugin.mjs +2 -2
- package/dist/nitro/v3/useLogger.d.mts +1 -1
- package/dist/{nitro--E4op34w.d.mts → nitro-CcN7HDnr.d.mts} +2 -2
- package/dist/{nitro--E4op34w.d.mts.map → nitro-CcN7HDnr.d.mts.map} +1 -1
- package/dist/{nitro-ClHmVj1H.mjs → nitro-DYFCSlho.mjs} +2 -2
- package/dist/{nitro-ClHmVj1H.mjs.map → nitro-DYFCSlho.mjs.map} +1 -1
- package/dist/{nitroConfigBridge-BkVWnSV3.mjs → nitroConfigBridge-lHPsE5zG.mjs} +8 -6
- package/dist/nitroConfigBridge-lHPsE5zG.mjs.map +1 -0
- package/dist/{nodeResponse-DKrYWrxk.mjs → nodeResponse-Dsl7gZUf.mjs} +1 -1
- package/dist/{nodeResponse-DKrYWrxk.mjs.map → nodeResponse-Dsl7gZUf.mjs.map} +1 -1
- package/dist/nuxt/module.d.mts +1 -1
- package/dist/nuxt/module.d.mts.map +1 -1
- package/dist/nuxt/module.mjs +44 -12
- package/dist/nuxt/module.mjs.map +1 -1
- package/dist/orpc/index.d.mts +2 -2
- package/dist/orpc/index.mjs +2 -2
- package/dist/{package-Bgs0VSDF.mjs → package-DtGhNwVN.mjs} +2 -2
- package/dist/package-DtGhNwVN.mjs.map +1 -0
- package/dist/{parseError-BwBg-iW4.d.mts → parseError-BmoJ7XeF.d.mts} +2 -2
- package/dist/parseError-BmoJ7XeF.d.mts.map +1 -0
- package/dist/react-router/index.d.mts +2 -2
- package/dist/react-router/index.mjs +3 -2
- package/dist/react-router/index.mjs.map +1 -1
- package/dist/{register-disk-snippet-B_JyhodL.mjs → register-disk-snippet-B5svlT8-.mjs} +1 -1
- package/dist/{register-disk-snippet-B_JyhodL.mjs.map → register-disk-snippet-B5svlT8-.mjs.map} +1 -1
- package/dist/runtime/client/log.d.mts +1 -1
- package/dist/runtime/server/routes/_evlog/ingest.post.mjs +1 -1
- package/dist/runtime/server/useLogger.d.mts +1 -1
- package/dist/runtime/utils/parseError.d.mts +2 -2
- package/dist/{storage-D4sBVffQ.mjs → storage-BeFdoGTI.mjs} +1 -1
- package/dist/{storage-D4sBVffQ.mjs.map → storage-BeFdoGTI.mjs.map} +1 -1
- package/dist/stream.d.mts +1 -1
- package/dist/stream.d.mts.map +1 -1
- package/dist/stream.mjs +7 -1
- package/dist/stream.mjs.map +1 -1
- package/dist/sveltekit/index.d.mts +2 -2
- package/dist/sveltekit/index.mjs +5 -4
- package/dist/sveltekit/index.mjs.map +1 -1
- package/dist/toolkit.d.mts +5 -5
- package/dist/toolkit.mjs +7 -6
- package/dist/types.d.mts +1 -1
- package/dist/{useLogger-DiRWGD33.d.mts → useLogger-BupVLO9_.d.mts} +2 -2
- package/dist/{useLogger-DiRWGD33.d.mts.map → useLogger-BupVLO9_.d.mts.map} +1 -1
- package/dist/{utils-XPMPENUK.d.mts → utils-D_LY-J1k.d.mts} +2 -2
- package/dist/{utils-XPMPENUK.d.mts.map → utils-D_LY-J1k.d.mts.map} +1 -1
- package/dist/utils.d.mts +1 -1
- package/dist/vite/index.d.mts +1 -1
- package/dist/workers.d.mts +1 -1
- package/dist/workers.mjs +1 -1
- package/package.json +17 -2
- package/dist/audit-CL0q7GJU.mjs.map +0 -1
- package/dist/fork-Di44utlp.mjs.map +0 -1
- package/dist/logger-DWTPZ0c1.d.mts.map +0 -1
- package/dist/nitroConfigBridge-BkVWnSV3.mjs.map +0 -1
- package/dist/package-Bgs0VSDF.mjs.map +0 -1
- package/dist/parseError-BwBg-iW4.d.mts.map +0 -1
package/README.md
CHANGED
|
@@ -560,6 +560,32 @@ export default async function fetch(request: Request) {
|
|
|
560
560
|
|
|
561
561
|
See the full [orpc example](https://github.com/HugoRCD/evlog/tree/main/examples/orpc) for a complete working project.
|
|
562
562
|
|
|
563
|
+
## eve
|
|
564
|
+
|
|
565
|
+
```typescript
|
|
566
|
+
// agent/hooks/evlog.ts
|
|
567
|
+
import { defineEvlogHook } from 'evlog/eve'
|
|
568
|
+
import { createAxiomDrain } from 'evlog/axiom'
|
|
569
|
+
|
|
570
|
+
export default defineEvlogHook({
|
|
571
|
+
init: { env: { service: 'my-agent' } },
|
|
572
|
+
drain: createAxiomDrain(),
|
|
573
|
+
maxSessions: 256,
|
|
574
|
+
})
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
```typescript
|
|
578
|
+
// agent/tools/my_tool.ts — inside execute()
|
|
579
|
+
import { useLogger } from 'evlog/eve'
|
|
580
|
+
|
|
581
|
+
const log = useLogger()
|
|
582
|
+
log.set({ order: { id: input.orderId } })
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
`defineEvlogHook()` maps eve turn lifecycle events to one wide event per turn. Call `useLogger()` in tools — the logger is bound via AsyncLocalStorage on `turn.started`. Pass `ctx` only when ALS is unavailable (`useLogger(ctx)`). Pretty-printing follows `isDev()` by default (tree locally, JSON in production); set `init.pretty: false` explicitly if you need to override. Complements eve Agent Runs and OpenTelemetry — see the [eve use case](https://evlog.dev/use-cases/eve).
|
|
586
|
+
|
|
587
|
+
See the full [eve example](https://github.com/HugoRCD/evlog/tree/main/examples/eve) for a complete agent layout.
|
|
588
|
+
|
|
563
589
|
## Browser
|
|
564
590
|
|
|
565
591
|
Use the `log` API on the client side for structured browser logging:
|
|
@@ -794,7 +820,9 @@ See [the Audit Logs guide](https://evlog.dev/use-cases/audit/overview) for compl
|
|
|
794
820
|
|
|
795
821
|
## AI SDK Integration
|
|
796
822
|
|
|
797
|
-
Capture token usage, tool calls, model info, and streaming metrics from the [Vercel AI SDK](https://ai-sdk.dev) into wide events.
|
|
823
|
+
Capture token usage, tool calls, model info, and streaming metrics from the [Vercel AI SDK](https://ai-sdk.dev) into wide events. Compatible with AI SDK v6 and v7 (`ai >= 6.0.168`). AI SDK v7 requires Node.js 22+.
|
|
824
|
+
|
|
825
|
+
For tool execution timing, abort tracking, and auto embed capture, pass `createEvlogIntegration(ai)` to `telemetry.integrations` (v7) or `experimental_telemetry.integrations` (v6).
|
|
798
826
|
|
|
799
827
|
```typescript
|
|
800
828
|
import { streamText } from 'ai'
|
|
@@ -1388,6 +1416,7 @@ try {
|
|
|
1388
1416
|
| **Fastify** | `app.register(evlog)` with `import { evlog } from 'evlog/fastify'` ([example](./examples/fastify)) |
|
|
1389
1417
|
| **Elysia** | `.use(evlog())` with `import { evlog } from 'evlog/elysia'` ([example](./examples/elysia)) |
|
|
1390
1418
|
| **oRPC** | `withEvlog(handler)` + `os.use(evlog())` with `import { evlog, withEvlog } from 'evlog/orpc'` ([example](./examples/orpc)) |
|
|
1419
|
+
| **eve** | `defineEvlogHook()` in `agent/hooks/evlog.ts` with `import { defineEvlogHook, useLogger } from 'evlog/eve'` ([example](./examples/eve)) |
|
|
1391
1420
|
| **Cloudflare Workers** | Manual setup with `import { initWorkersLogger, createWorkersLogger } from 'evlog/workers'` ([example](./examples/workers)) |
|
|
1392
1421
|
| **Custom** | Build your own with `import { createMiddlewareLogger } from 'evlog/toolkit'` ([guide](https://evlog.dev/extend/custom-framework)) |
|
|
1393
1422
|
| **Analog** | Nitro v2 module setup |
|
package/dist/adapters/axiom.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as httpPost } from "../http-
|
|
2
|
-
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, r as applyDeprecatedAlias } from "../drain-
|
|
1
|
+
import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
|
|
2
|
+
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, r as applyDeprecatedAlias } from "../drain-AD7Mn_5_.mjs";
|
|
3
3
|
//#region src/adapters/axiom.ts
|
|
4
4
|
const AXIOM_FIELDS = [
|
|
5
5
|
{
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { U as DrainContext, ht as WideEvent } from "../audit-
|
|
1
|
+
import { U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
|
|
2
2
|
//#region src/adapters/better-stack.d.ts
|
|
3
3
|
interface BetterStackConfig {
|
|
4
4
|
/** Better Stack API key (replaces deprecated `sourceToken`). */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as httpPost } from "../http-
|
|
2
|
-
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, r as applyDeprecatedAlias } from "../drain-
|
|
1
|
+
import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
|
|
2
|
+
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, r as applyDeprecatedAlias } from "../drain-AD7Mn_5_.mjs";
|
|
3
3
|
//#region src/adapters/better-stack.ts
|
|
4
4
|
const BETTER_STACK_FIELDS = [
|
|
5
5
|
{
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { U as DrainContext, ht as WideEvent } from "../audit-
|
|
1
|
+
import { U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
|
|
2
2
|
//#region src/adapters/datadog.d.ts
|
|
3
3
|
interface DatadogConfig {
|
|
4
4
|
/** Datadog API key with Logs intake permission */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as httpPost } from "../http-
|
|
2
|
-
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-
|
|
1
|
+
import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
|
|
2
|
+
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-AD7Mn_5_.mjs";
|
|
3
3
|
//#region src/adapters/datadog.ts
|
|
4
4
|
const DATADOG_FIELDS = [
|
|
5
5
|
{
|
package/dist/adapters/fs.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as LogLevel, U as DrainContext, ht as WideEvent } from "../audit-
|
|
1
|
+
import { $ as LogLevel, U as DrainContext, ht as WideEvent } from "../audit-BZrUvjfW.mjs";
|
|
2
2
|
//#region src/adapters/fs.d.ts
|
|
3
3
|
interface FsConfig {
|
|
4
4
|
/** Directory for log files. Default: `.evlog/logs` */
|
package/dist/adapters/fs.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as resolveAdapterConfig, t as defineDrain } from "../drain-
|
|
1
|
+
import { o as resolveAdapterConfig, t as defineDrain } from "../drain-AD7Mn_5_.mjs";
|
|
2
2
|
import { join, sep } from "node:path";
|
|
3
3
|
import { createReadStream } from "node:fs";
|
|
4
4
|
import { appendFile, mkdir, open, readdir, stat, unlink, writeFile } from "node:fs/promises";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as formatPublicEnvKeys, o as resolveAdapterConfig, t as defineDrain } from "../drain-
|
|
1
|
+
import { i as formatPublicEnvKeys, o as resolveAdapterConfig, t as defineDrain } from "../drain-AD7Mn_5_.mjs";
|
|
2
2
|
import { sendBatchToOTLP } from "./otlp.mjs";
|
|
3
3
|
//#region src/adapters/hyperdx.ts
|
|
4
4
|
/**
|
package/dist/adapters/memory.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as resolveAdapterConfig, t as defineDrain } from "../drain-
|
|
1
|
+
import { o as resolveAdapterConfig, t as defineDrain } from "../drain-AD7Mn_5_.mjs";
|
|
2
2
|
//#region src/adapters/memory.ts
|
|
3
3
|
const DEFAULT_STORE = "default";
|
|
4
4
|
const DEFAULT_MAX_EVENTS = 1e3;
|
package/dist/adapters/otlp.d.mts
CHANGED
package/dist/adapters/otlp.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as httpPost } from "../http-
|
|
2
|
-
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-
|
|
1
|
+
import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
|
|
2
|
+
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-AD7Mn_5_.mjs";
|
|
3
3
|
import { n as toOtlpAttributeValue } from "../event-qwAv-7AZ.mjs";
|
|
4
4
|
import { n as OTEL_SEVERITY_TEXT, t as OTEL_SEVERITY_NUMBER } from "../severity-CwXUSHt3.mjs";
|
|
5
5
|
//#region src/adapters/otlp.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as httpPost } from "../http-
|
|
2
|
-
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, t as defineDrain } from "../drain-
|
|
1
|
+
import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
|
|
2
|
+
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig, t as defineDrain } from "../drain-AD7Mn_5_.mjs";
|
|
3
3
|
import { sendBatchToOTLP } from "./otlp.mjs";
|
|
4
4
|
//#region src/adapters/posthog.ts
|
|
5
5
|
const POSTHOG_FIELDS = [
|
package/dist/adapters/sentry.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as httpPost } from "../http-
|
|
2
|
-
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-
|
|
1
|
+
import { r as httpPost } from "../http-CuZ6Cm2M.mjs";
|
|
2
|
+
import { i as formatPublicEnvKeys, n as defineHttpDrain, o as resolveAdapterConfig } from "../drain-AD7Mn_5_.mjs";
|
|
3
3
|
import { t as OTEL_SEVERITY_NUMBER } from "../severity-CwXUSHt3.mjs";
|
|
4
4
|
//#region src/adapters/sentry.ts
|
|
5
5
|
const SENTRY_FIELDS = [
|
package/dist/ai/index.d.mts
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
|
-
import { ot as RequestLogger } from "../audit-
|
|
2
|
-
import {
|
|
3
|
-
import { LanguageModelV3, LanguageModelV3Middleware } from "@ai-sdk/provider";
|
|
1
|
+
import { ot as RequestLogger } from "../audit-BZrUvjfW.mjs";
|
|
2
|
+
import { LanguageModel, LanguageModelMiddleware } from "ai";
|
|
4
3
|
|
|
5
4
|
//#region src/ai/index.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Telemetry integration returned by {@link createEvlogIntegration}.
|
|
7
|
+
* Implements hooks for AI SDK v6 (`onToolCallFinish`, `onFinish`) and v7
|
|
8
|
+
* (`onToolExecutionEnd`, `onEnd`, `onEmbedEnd`, `onAbort`, `onError`).
|
|
9
|
+
*/
|
|
10
|
+
type EvlogTelemetry = {
|
|
11
|
+
onStart?: (event: unknown) => void | PromiseLike<void>; /** AI SDK v6 — superseded by `onToolExecutionEnd` in v7. */
|
|
12
|
+
onToolCallFinish?: (event: unknown) => void | PromiseLike<void>;
|
|
13
|
+
onToolExecutionEnd?: (event: unknown) => void | PromiseLike<void>; /** AI SDK v6 — superseded by `onEnd` in v7. */
|
|
14
|
+
onFinish?: (event: unknown) => void | PromiseLike<void>;
|
|
15
|
+
onEnd?: (event: unknown) => void | PromiseLike<void>;
|
|
16
|
+
onEmbedEnd?: (event: unknown) => void | PromiseLike<void>;
|
|
17
|
+
onAbort?: (event: unknown) => void | PromiseLike<void>;
|
|
18
|
+
onError?: (event: unknown) => void | PromiseLike<void>;
|
|
19
|
+
};
|
|
6
20
|
/**
|
|
7
21
|
* Fine-grained control over tool call input capture.
|
|
8
22
|
*/
|
|
@@ -68,7 +82,7 @@ interface AIStepUsage {
|
|
|
68
82
|
toolCalls?: string[];
|
|
69
83
|
}
|
|
70
84
|
/**
|
|
71
|
-
* Tool execution detail captured via
|
|
85
|
+
* Tool execution detail captured via telemetry integration hooks.
|
|
72
86
|
*/
|
|
73
87
|
interface AIToolExecution {
|
|
74
88
|
name: string;
|
|
@@ -139,22 +153,29 @@ interface AILogger {
|
|
|
139
153
|
* All `generateText` and `streamText` calls using the wrapped model
|
|
140
154
|
* are captured automatically into the wide event.
|
|
141
155
|
*
|
|
142
|
-
* Accepts a `LanguageModelV3`
|
|
156
|
+
* Accepts a language model object (`LanguageModelV3` or `LanguageModelV4`)
|
|
157
|
+
* or a model string (e.g. `'anthropic/claude-sonnet-4.6'`).
|
|
143
158
|
* Strings are resolved via the AI SDK gateway.
|
|
144
159
|
*
|
|
160
|
+
* On AI SDK v7, the wrapped model is a `LanguageModelV4`. On v6 it remains
|
|
161
|
+
* a `LanguageModelV3`. Both are accepted as input.
|
|
162
|
+
*
|
|
145
163
|
* Also works with pre-wrapped models (e.g. from supermemory, guardrails):
|
|
146
164
|
* `ai.wrap(withSupermemory(base, orgId))` composes correctly.
|
|
147
165
|
*
|
|
148
|
-
* @example
|
|
166
|
+
* @example Gateway model string
|
|
149
167
|
* ```ts
|
|
150
168
|
* const ai = createAILogger(log)
|
|
151
169
|
* const model = ai.wrap('anthropic/claude-sonnet-4.6')
|
|
170
|
+
* ```
|
|
152
171
|
*
|
|
153
|
-
*
|
|
172
|
+
* @example Provider model object (V3 or V4)
|
|
173
|
+
* ```ts
|
|
174
|
+
* const ai = createAILogger(log)
|
|
154
175
|
* const model = ai.wrap(anthropic('claude-sonnet-4.6'))
|
|
155
176
|
* ```
|
|
156
177
|
*/
|
|
157
|
-
wrap: (model:
|
|
178
|
+
wrap: (model: LanguageModel) => LanguageModel;
|
|
158
179
|
/**
|
|
159
180
|
* Manually capture token usage from an `embed()` or `embedMany()` result.
|
|
160
181
|
* Embedding models use a different type than language models, so they
|
|
@@ -300,7 +321,7 @@ interface UsageAccumulator {
|
|
|
300
321
|
* })
|
|
301
322
|
* ```
|
|
302
323
|
*/
|
|
303
|
-
declare function createAIMiddleware(log: RequestLogger, options?: AILoggerOptions):
|
|
324
|
+
declare function createAIMiddleware(log: RequestLogger, options?: AILoggerOptions): LanguageModelMiddleware;
|
|
304
325
|
/**
|
|
305
326
|
* Create an AI logger that captures AI SDK data into the wide event.
|
|
306
327
|
*
|
|
@@ -371,9 +392,13 @@ interface AccumulatorState {
|
|
|
371
392
|
_log?: RequestLogger;
|
|
372
393
|
}
|
|
373
394
|
/**
|
|
374
|
-
* Create an AI SDK
|
|
395
|
+
* Create an AI SDK telemetry integration that captures tool execution
|
|
375
396
|
* timing, errors, and total generation wall time into the wide event.
|
|
376
397
|
*
|
|
398
|
+
* Compatible with AI SDK v6 (`TelemetryIntegration`) and v7 (`Telemetry`).
|
|
399
|
+
* On v7, also captures embeddings via `onEmbedEnd`, aborts via `onAbort`,
|
|
400
|
+
* and unrecoverable errors via `onError`.
|
|
401
|
+
*
|
|
377
402
|
* Complements the middleware-based `createAILogger`: the middleware captures
|
|
378
403
|
* token usage and streaming metrics at the model level, while the integration
|
|
379
404
|
* captures application-level lifecycle events (tool execution, total duration).
|
|
@@ -391,8 +416,7 @@ interface AccumulatorState {
|
|
|
391
416
|
* const result = await generateText({
|
|
392
417
|
* model: ai.wrap('anthropic/claude-sonnet-4.6'),
|
|
393
418
|
* tools: { getWeather },
|
|
394
|
-
*
|
|
395
|
-
* isEnabled: true,
|
|
419
|
+
* telemetry: {
|
|
396
420
|
* integrations: [createEvlogIntegration(ai)],
|
|
397
421
|
* },
|
|
398
422
|
* })
|
|
@@ -406,14 +430,13 @@ interface AccumulatorState {
|
|
|
406
430
|
*
|
|
407
431
|
* const result = await generateText({
|
|
408
432
|
* model: openai('gpt-4o'),
|
|
409
|
-
*
|
|
410
|
-
* isEnabled: true,
|
|
433
|
+
* telemetry: {
|
|
411
434
|
* integrations: [integration],
|
|
412
435
|
* },
|
|
413
436
|
* })
|
|
414
437
|
* ```
|
|
415
438
|
*/
|
|
416
|
-
declare function createEvlogIntegration(logOrAi: RequestLogger | AILogger, options?: AILoggerOptions):
|
|
439
|
+
declare function createEvlogIntegration(logOrAi: RequestLogger | AILogger, options?: AILoggerOptions): EvlogTelemetry;
|
|
417
440
|
//#endregion
|
|
418
|
-
export { AIEmbeddingData, AIEventData, AILogger, AILoggerOptions, AIMetadata, AIMetadataListener, AIStepUsage, AIToolExecution, ModelCost, ToolInputsOptions, createAILogger, createAIMiddleware, createEvlogIntegration };
|
|
441
|
+
export { AIEmbeddingData, AIEventData, AILogger, AILoggerOptions, AIMetadata, AIMetadataListener, AIStepUsage, AIToolExecution, EvlogTelemetry, ModelCost, ToolInputsOptions, createAILogger, createAIMiddleware, createEvlogIntegration };
|
|
419
442
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/ai/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/ai/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/ai/index.ts"],"mappings":"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"}
|
package/dist/ai/index.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as aiModule from "ai";
|
|
2
|
+
import { gateway, wrapLanguageModel } from "ai";
|
|
2
3
|
//#region src/ai/index.ts
|
|
4
|
+
const { bindTelemetryIntegration } = aiModule;
|
|
3
5
|
function addUsage(acc, usage) {
|
|
4
6
|
acc.inputTokens += usage.inputTokens.total ?? 0;
|
|
5
7
|
acc.outputTokens += usage.outputTokens.total ?? 0;
|
|
@@ -288,7 +290,7 @@ function buildMiddleware(log, options) {
|
|
|
288
290
|
}
|
|
289
291
|
function buildMiddlewareFromState(log, state) {
|
|
290
292
|
return {
|
|
291
|
-
specificationVersion: "
|
|
293
|
+
specificationVersion: "v4",
|
|
292
294
|
wrapGenerate: async ({ doGenerate, model }) => {
|
|
293
295
|
try {
|
|
294
296
|
const result = await doGenerate();
|
|
@@ -418,10 +420,63 @@ function buildMiddlewareFromState(log, state) {
|
|
|
418
420
|
}
|
|
419
421
|
};
|
|
420
422
|
}
|
|
423
|
+
function formatTelemetryError(error) {
|
|
424
|
+
return error instanceof Error ? error.message : String(error);
|
|
425
|
+
}
|
|
426
|
+
function recordToolExecution(state, input) {
|
|
427
|
+
const execution = {
|
|
428
|
+
name: input.name,
|
|
429
|
+
durationMs: input.durationMs,
|
|
430
|
+
success: input.success
|
|
431
|
+
};
|
|
432
|
+
if (input.error) execution.error = input.error;
|
|
433
|
+
state.toolExecutions.push(execution);
|
|
434
|
+
}
|
|
435
|
+
function adaptV6ToolEvent(event) {
|
|
436
|
+
return {
|
|
437
|
+
name: event.toolCall.toolName,
|
|
438
|
+
durationMs: event.durationMs,
|
|
439
|
+
success: event.success,
|
|
440
|
+
error: !event.success && event.error !== void 0 ? formatTelemetryError(event.error) : void 0
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
function adaptV7ToolEvent(event) {
|
|
444
|
+
const success = event.toolOutput.type === "tool-result";
|
|
445
|
+
return {
|
|
446
|
+
name: event.toolCall.toolName,
|
|
447
|
+
durationMs: event.toolExecutionMs,
|
|
448
|
+
success,
|
|
449
|
+
error: !success && event.toolOutput.type === "tool-error" ? formatTelemetryError(event.toolOutput.error) : void 0
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
function recordGenerationEnd(state, log) {
|
|
453
|
+
if (state.generationStartTime !== void 0) state.totalDurationMs = Date.now() - state.generationStartTime;
|
|
454
|
+
flushState(log, state);
|
|
455
|
+
}
|
|
456
|
+
function recordEmbedEnd(state, log, event) {
|
|
457
|
+
state.calls++;
|
|
458
|
+
state.usage.inputTokens += event.usage.tokens;
|
|
459
|
+
const dimensions = event.embeddings[0]?.length;
|
|
460
|
+
state.embedding = {
|
|
461
|
+
tokens: (state.embedding?.tokens ?? 0) + event.usage.tokens,
|
|
462
|
+
model: event.modelId,
|
|
463
|
+
...dimensions !== void 0 ? { dimensions } : state.embedding?.dimensions ? { dimensions: state.embedding.dimensions } : {},
|
|
464
|
+
count: (state.embedding?.count ?? 0) + event.values.length
|
|
465
|
+
};
|
|
466
|
+
flushState(log, state);
|
|
467
|
+
}
|
|
468
|
+
function finalizeIntegration(integration) {
|
|
469
|
+
if (typeof bindTelemetryIntegration === "function") return bindTelemetryIntegration(integration);
|
|
470
|
+
return integration;
|
|
471
|
+
}
|
|
421
472
|
/**
|
|
422
|
-
* Create an AI SDK
|
|
473
|
+
* Create an AI SDK telemetry integration that captures tool execution
|
|
423
474
|
* timing, errors, and total generation wall time into the wide event.
|
|
424
475
|
*
|
|
476
|
+
* Compatible with AI SDK v6 (`TelemetryIntegration`) and v7 (`Telemetry`).
|
|
477
|
+
* On v7, also captures embeddings via `onEmbedEnd`, aborts via `onAbort`,
|
|
478
|
+
* and unrecoverable errors via `onError`.
|
|
479
|
+
*
|
|
425
480
|
* Complements the middleware-based `createAILogger`: the middleware captures
|
|
426
481
|
* token usage and streaming metrics at the model level, while the integration
|
|
427
482
|
* captures application-level lifecycle events (tool execution, total duration).
|
|
@@ -439,8 +494,7 @@ function buildMiddlewareFromState(log, state) {
|
|
|
439
494
|
* const result = await generateText({
|
|
440
495
|
* model: ai.wrap('anthropic/claude-sonnet-4.6'),
|
|
441
496
|
* tools: { getWeather },
|
|
442
|
-
*
|
|
443
|
-
* isEnabled: true,
|
|
497
|
+
* telemetry: {
|
|
444
498
|
* integrations: [createEvlogIntegration(ai)],
|
|
445
499
|
* },
|
|
446
500
|
* })
|
|
@@ -454,8 +508,7 @@ function buildMiddlewareFromState(log, state) {
|
|
|
454
508
|
*
|
|
455
509
|
* const result = await generateText({
|
|
456
510
|
* model: openai('gpt-4o'),
|
|
457
|
-
*
|
|
458
|
-
* isEnabled: true,
|
|
511
|
+
* telemetry: {
|
|
459
512
|
* integrations: [integration],
|
|
460
513
|
* },
|
|
461
514
|
* })
|
|
@@ -477,20 +530,32 @@ function createEvlogIntegration(logOrAi, options) {
|
|
|
477
530
|
state.generationStartTime = Date.now();
|
|
478
531
|
}
|
|
479
532
|
onToolCallFinish(event) {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
};
|
|
485
|
-
if (!event.success && event.error) execution.error = event.error instanceof Error ? event.error.message : String(event.error);
|
|
486
|
-
state.toolExecutions.push(execution);
|
|
533
|
+
recordToolExecution(state, adaptV6ToolEvent(event));
|
|
534
|
+
}
|
|
535
|
+
onToolExecutionEnd(event) {
|
|
536
|
+
recordToolExecution(state, adaptV7ToolEvent(event));
|
|
487
537
|
}
|
|
488
538
|
onFinish(_event) {
|
|
489
|
-
|
|
539
|
+
recordGenerationEnd(state, log);
|
|
540
|
+
}
|
|
541
|
+
onEnd(_event) {
|
|
542
|
+
recordGenerationEnd(state, log);
|
|
543
|
+
}
|
|
544
|
+
onEmbedEnd(event) {
|
|
545
|
+
recordEmbedEnd(state, log, event);
|
|
546
|
+
}
|
|
547
|
+
onAbort(event) {
|
|
548
|
+
state.lastFinishReason = "abort";
|
|
549
|
+
const { reason } = event;
|
|
550
|
+
if (reason !== void 0) state.lastError = formatTelemetryError(reason);
|
|
551
|
+
recordGenerationEnd(state, log);
|
|
552
|
+
}
|
|
553
|
+
onError(error) {
|
|
554
|
+
state.lastError = formatTelemetryError(error);
|
|
490
555
|
flushState(log, state);
|
|
491
556
|
}
|
|
492
557
|
}
|
|
493
|
-
return
|
|
558
|
+
return finalizeIntegration(new EvlogIntegration());
|
|
494
559
|
}
|
|
495
560
|
//#endregion
|
|
496
561
|
export { createAILogger, createAIMiddleware, createEvlogIntegration };
|