@llmtracer/sdk 2.1.0 → 2.4.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.
Files changed (88) hide show
  1. package/README.md +59 -113
  2. package/dist/cjs/config.d.ts +2 -0
  3. package/dist/cjs/config.d.ts.map +1 -1
  4. package/dist/cjs/config.js +2 -0
  5. package/dist/cjs/config.js.map +1 -1
  6. package/dist/cjs/index.d.ts +2 -1
  7. package/dist/cjs/index.d.ts.map +1 -1
  8. package/dist/cjs/index.js +12 -1
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/patcher.d.ts +1 -0
  11. package/dist/cjs/patcher.d.ts.map +1 -1
  12. package/dist/cjs/patcher.js +106 -1
  13. package/dist/cjs/patcher.js.map +1 -1
  14. package/dist/cjs/providers/anthropic.d.ts.map +1 -1
  15. package/dist/cjs/providers/anthropic.js +28 -3
  16. package/dist/cjs/providers/anthropic.js.map +1 -1
  17. package/dist/cjs/providers/google.d.ts +4 -0
  18. package/dist/cjs/providers/google.d.ts.map +1 -0
  19. package/dist/cjs/providers/google.js +138 -0
  20. package/dist/cjs/providers/google.js.map +1 -0
  21. package/dist/cjs/providers/index.d.ts +1 -0
  22. package/dist/cjs/providers/index.d.ts.map +1 -1
  23. package/dist/cjs/providers/index.js +4 -1
  24. package/dist/cjs/providers/index.js.map +1 -1
  25. package/dist/cjs/providers/openai.d.ts +6 -1
  26. package/dist/cjs/providers/openai.d.ts.map +1 -1
  27. package/dist/cjs/providers/openai.js +127 -5
  28. package/dist/cjs/providers/openai.js.map +1 -1
  29. package/dist/cjs/schema.d.ts +3 -0
  30. package/dist/cjs/schema.d.ts.map +1 -1
  31. package/dist/cjs/schema.js +17 -2
  32. package/dist/cjs/schema.js.map +1 -1
  33. package/dist/cjs/transport.d.ts +9 -0
  34. package/dist/cjs/transport.d.ts.map +1 -1
  35. package/dist/cjs/transport.js +68 -3
  36. package/dist/cjs/transport.js.map +1 -1
  37. package/dist/cjs/wrapper.d.ts +1 -1
  38. package/dist/cjs/wrapper.d.ts.map +1 -1
  39. package/dist/cjs/wrapper.js +13 -2
  40. package/dist/cjs/wrapper.js.map +1 -1
  41. package/dist/esm/config.d.ts +2 -0
  42. package/dist/esm/config.d.ts.map +1 -1
  43. package/dist/esm/config.js +2 -0
  44. package/dist/esm/config.js.map +1 -1
  45. package/dist/esm/index.d.ts +2 -1
  46. package/dist/esm/index.d.ts.map +1 -1
  47. package/dist/esm/index.js +12 -1
  48. package/dist/esm/index.js.map +1 -1
  49. package/dist/esm/patcher.d.ts +1 -0
  50. package/dist/esm/patcher.d.ts.map +1 -1
  51. package/dist/esm/patcher.js +106 -2
  52. package/dist/esm/patcher.js.map +1 -1
  53. package/dist/esm/providers/anthropic.d.ts.map +1 -1
  54. package/dist/esm/providers/anthropic.js +28 -3
  55. package/dist/esm/providers/anthropic.js.map +1 -1
  56. package/dist/esm/providers/google.d.ts +4 -0
  57. package/dist/esm/providers/google.d.ts.map +1 -0
  58. package/dist/esm/providers/google.js +101 -0
  59. package/dist/esm/providers/google.js.map +1 -0
  60. package/dist/esm/providers/index.d.ts +1 -0
  61. package/dist/esm/providers/index.d.ts.map +1 -1
  62. package/dist/esm/providers/index.js +1 -0
  63. package/dist/esm/providers/index.js.map +1 -1
  64. package/dist/esm/providers/openai.d.ts +6 -1
  65. package/dist/esm/providers/openai.d.ts.map +1 -1
  66. package/dist/esm/providers/openai.js +122 -5
  67. package/dist/esm/providers/openai.js.map +1 -1
  68. package/dist/esm/schema.d.ts +3 -0
  69. package/dist/esm/schema.d.ts.map +1 -1
  70. package/dist/esm/schema.js +17 -2
  71. package/dist/esm/schema.js.map +1 -1
  72. package/dist/esm/transport.d.ts +9 -0
  73. package/dist/esm/transport.d.ts.map +1 -1
  74. package/dist/esm/transport.js +67 -3
  75. package/dist/esm/transport.js.map +1 -1
  76. package/dist/esm/wrapper.d.ts +1 -1
  77. package/dist/esm/wrapper.d.ts.map +1 -1
  78. package/dist/esm/wrapper.js +13 -2
  79. package/dist/esm/wrapper.js.map +1 -1
  80. package/package.json +10 -14
  81. package/dist/cjs/auto.d.ts +0 -2
  82. package/dist/cjs/auto.d.ts.map +0 -1
  83. package/dist/cjs/auto.js +0 -5
  84. package/dist/cjs/auto.js.map +0 -1
  85. package/dist/esm/auto.d.ts +0 -2
  86. package/dist/esm/auto.d.ts.map +0 -1
  87. package/dist/esm/auto.js +0 -3
  88. package/dist/esm/auto.js.map +0 -1
package/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # @llmtracer/sdk
2
2
 
3
- See where your AI budget goes. Lightweight LLM cost tracking SDK for OpenAI.
4
-
5
- Wrap your OpenAI client in two lines and get automatic tracking of every API call -- tokens, latency, cost, and model usage -- with zero changes to your application code.
3
+ Track cost, latency, and token usage across OpenAI, Anthropic, and Google Gemini — in one line of code.
6
4
 
7
5
  ## Install
8
6
 
@@ -10,117 +8,94 @@ Wrap your OpenAI client in two lines and get automatic tracking of every API cal
10
8
  npm install @llmtracer/sdk
11
9
  ```
12
10
 
13
- ## Quickstart
11
+ ## Quick Start
14
12
 
15
13
  ```typescript
16
- import { LLMTracer } from "@llmtracer/sdk";
17
- import OpenAI from "openai";
18
-
19
- const tracer = new LLMTracer({
20
- apiKey: process.env.LLMTRACER_KEY,
21
- });
14
+ import llmtracer from '@llmtracer/sdk';
22
15
 
23
- const openai = new OpenAI();
24
-
25
- // 2 lines -- that's it
26
- tracer.instrumentOpenAI(openai, {
27
- tags: { feature: "customer-support-bot", env: "production" },
28
- });
16
+ llmtracer.init({ apiKey: 'lt_...' });
29
17
 
30
- // Every OpenAI call is now automatically tracked
31
- const response = await openai.chat.completions.create({
32
- model: "gpt-4o",
33
- messages: [{ role: "user", content: "Hello" }],
34
- });
35
-
36
- // In serverless (Lambda, Cloud Functions), flush before returning
37
- await tracer.flush();
18
+ // All OpenAI, Anthropic, and Google Gemini calls are now tracked automatically.
38
19
  ```
39
20
 
40
- ## Tagging Guide
21
+ No wrappers, no manual instrumentation, no code changes. The SDK auto-patches your provider clients at import time.
41
22
 
42
- Tags let you slice costs by any dimension in the dashboard. Global tags (set in the constructor) apply to all calls. Per-call tags (set via the `llmtracer` property) override globals for that specific call.
23
+ View your dashboard at [llmtracer.dev](https://llmtracer.dev).
43
24
 
44
- ### Track cost by feature
25
+ ## What Gets Captured
45
26
 
46
- ```javascript
47
- await openai.chat.completions.create({
48
- model: "gpt-4o",
49
- messages: [...],
50
- llmtracer: { tags: { feature: "chat" } }
51
- });
52
- ```
27
+ Every LLM call is automatically tracked with:
53
28
 
54
- ### Track cost by user (for B2B apps)
29
+ - **Provider, model, tokens** (input + output), latency, cost
30
+ - **Google Gemini**: thinking tokens (2.5 models), tool tokens, cached tokens
31
+ - **Anthropic**: cache creation + read tokens
32
+ - **OpenAI**: reasoning tokens (o1/o3/o4), cached tokens
33
+ - **Caller file, function, and line number**
34
+ - **Auto-flush on process exit** via `process.on('beforeExit')`, `SIGINT`, and `SIGTERM`
55
35
 
56
- ```javascript
57
- await openai.chat.completions.create({
58
- model: "gpt-4o",
59
- messages: [...],
60
- llmtracer: { tags: { feature: "chat", user_id: req.user.id } }
61
- });
62
- ```
36
+ ## Environment Variable Pattern
63
37
 
64
- ### Track cost by customer/tenant
38
+ ```typescript
39
+ import llmtracer from '@llmtracer/sdk';
65
40
 
66
- ```javascript
67
- await openai.chat.completions.create({
68
- model: "gpt-4o",
69
- messages: [...],
70
- llmtracer: { tags: { customer: req.tenant.name, feature: "search" } }
41
+ llmtracer.init({
42
+ apiKey: process.env.LLMTRACER_API_KEY,
43
+ debug: true, // prints token counts to console
71
44
  });
72
45
  ```
73
46
 
74
- ### Track cost by conversation
47
+ ## Trace Context and Tags
75
48
 
76
- ```javascript
77
- await openai.chat.completions.create({
78
- model: "gpt-4o",
79
- messages: [...],
80
- llmtracer: { tags: { conversation_id: sessionId, feature: "chat" } }
49
+ ```typescript
50
+ await llmtracer.trace({ tags: { feature: 'chat', user_id: 'u_sarah' } }, async () => {
51
+ const response = await openai.chat.completions.create({ ... });
81
52
  });
82
53
  ```
83
54
 
84
- ### Track environment (global tag)
55
+ Tags appear in the dashboard's Breakdown page and Top Tags card. Use them to answer questions like "which user costs the most?" or "which feature should I optimize?"
85
56
 
86
- ```javascript
87
- const tracer = new LLMTracer({
88
- apiKey: "lt_...",
89
- });
57
+ ### Tagging Patterns
90
58
 
91
- tracer.instrumentOpenAI(openai, {
92
- tags: { env: process.env.NODE_ENV } // applies to all calls
93
- });
94
- ```
59
+ | Pattern | Tag | Example |
60
+ |---------|-----|---------|
61
+ | Track cost by feature | `feature` | `"chat"`, `"search"`, `"summarize"` |
62
+ | Track cost by user | `user_id` | `"u_sarah"`, `"u_mike"` |
63
+ | Track cost by customer (B2B) | `customer` | `"acme-corp"`, `"initech"` |
64
+ | Track cost by conversation | `conversation_id` | `"conv_abc123"` |
65
+ | Track environment | `env` | `"production"`, `"staging"` |
95
66
 
96
- Tags appear in the dashboard's Breakdown page and Top Tags card. Use them to answer questions like "which customer costs the most?" or "which feature should I optimize?"
67
+ ## Supported Providers
68
+
69
+ | Provider | Package | Auto-patched |
70
+ |----------|---------|-------------|
71
+ | OpenAI | `openai` | ✅ |
72
+ | Anthropic | `@anthropic-ai/sdk` | ✅ |
73
+ | Google Gemini | `@google/genai` | ✅ |
97
74
 
98
75
  ## Serverless Usage
99
76
 
100
- In environments like AWS Lambda or Google Cloud Functions, call `flush()` before your function returns to ensure all events are sent:
77
+ Auto-flush handles graceful shutdown in long-running processes. For serverless environments (Lambda, Cloud Functions, etc.), flush before returning:
101
78
 
102
79
  ```typescript
103
80
  export async function handler(event) {
104
81
  const response = await openai.chat.completions.create({ ... });
105
- await tracer.flush();
82
+ await llmtracer.flush();
106
83
  return response;
107
84
  }
108
85
  ```
109
86
 
110
- ## Agentic Workflow Tracking
87
+ ## Debug Mode
111
88
 
112
- Group related LLM calls into traces with named phases:
89
+ Enable `debug: true` to print token counts to the console:
113
90
 
114
91
  ```typescript
115
- await tracer.trace("user-request-123", async (t) => {
116
- await t.phase("planning", async () => {
117
- await openai.chat.completions.create({ ... });
118
- });
119
-
120
- await t.phase("execution", async () => {
121
- await openai.chat.completions.create({ ... });
122
- });
123
- });
92
+ llmtracer.init({ apiKey: 'lt_...', debug: true });
93
+ ```
94
+
95
+ ```
96
+ [llmtracer] openai gpt-4o | 1,247 in → 384 out | $0.0094 | 1.2s
97
+ [llmtracer] anthropic claude-sonnet-4-5 | 2,100 in → 512 out (cache_read: 1,800) | $0.0031 | 0.8s
98
+ [llmtracer] google gemini-2.5-pro | 900 in → 280 out (thinking: 1,420) | $0.0067 | 2.1s
124
99
  ```
125
100
 
126
101
  ## Streaming Support
@@ -129,8 +104,8 @@ Streaming calls are instrumented automatically. Token counts are captured from t
129
104
 
130
105
  ```typescript
131
106
  const stream = await openai.chat.completions.create({
132
- model: "gpt-4o",
133
- messages: [{ role: "user", content: "Hello" }],
107
+ model: 'gpt-4o',
108
+ messages: [{ role: 'user', content: 'Hello' }],
134
109
  stream: true,
135
110
  });
136
111
 
@@ -149,47 +124,18 @@ for await (const chunk of stream) {
149
124
  | `flushIntervalMs` | `number` | `10000` | Auto-flush interval in milliseconds |
150
125
  | `maxQueueSize` | `number` | `10000` | Max events in queue before dropping oldest |
151
126
  | `maxRetries` | `number` | `3` | Max retry attempts for failed flushes |
152
- | `retryBaseMs` | `number` | `1000` | Base delay for exponential backoff |
153
127
  | `sampleRate` | `number` | `1.0` | Sampling rate (0.0-1.0). `1.0` captures everything |
154
- | `capturePrompt` | `boolean` | `false` | Whether to capture full prompt content |
155
128
  | `debug` | `boolean` | `false` | Enable debug logging to console |
156
- | `onFlush` | `function` | `null` | Callback after each flush with stats |
157
- | `onError` | `function` | `null` | Callback on transport errors |
158
-
159
- ## API Reference
160
-
161
- ### `new LLMTracer(config)`
162
-
163
- Create a new tracer instance. See [Configuration](#configuration) for options.
164
-
165
- ### `tracer.instrumentOpenAI(client, options?)`
166
-
167
- Instrument an OpenAI client instance. All subsequent `chat.completions.create` calls (streaming and non-streaming) will be tracked automatically.
168
-
169
- - `client` -- an OpenAI client instance
170
- - `options.tags` -- key-value pairs attached to every event (e.g. `{ env: "production" }`)
171
-
172
- ### `tracer.flush(): Promise<void>`
173
-
174
- Flush all buffered events to the backend. Call this in serverless environments before the function returns.
175
-
176
- ### `tracer.trace(traceId, fn): Promise<void>`
177
-
178
- Track an agentic workflow. All LLM calls within the callback are grouped under the given `traceId`. Use `t.phase(name, fn)` inside the callback to label phases.
179
-
180
- ### `tracer.shutdown(): Promise<void>`
181
-
182
- Flush remaining events and stop the auto-flush timer. Call this on graceful shutdown.
183
129
 
184
130
  ## Reliability
185
131
 
186
132
  The SDK is designed to never interfere with your application:
187
133
 
188
- - **Never throws** -- all internal errors are swallowed silently (enable `debug: true` for visibility)
189
- - **Batching** -- events are queued and sent in configurable batches
190
- - **Retry with backoff** -- failed flushes are retried with exponential backoff and jitter
191
- - **Circuit breaker** -- after 5 consecutive failures, stops attempting for 60 seconds
192
- - **Queue overflow** -- drops oldest events when the queue exceeds `maxQueueSize`
134
+ - **Never throws** all internal errors are swallowed silently (enable `debug: true` for visibility)
135
+ - **Batching** events are queued and sent in configurable batches
136
+ - **Retry with backoff** failed flushes are retried with exponential backoff and jitter
137
+ - **Circuit breaker** after 5 consecutive failures, stops attempting for 60 seconds
138
+ - **Queue overflow** drops oldest events when the queue exceeds `maxQueueSize`
193
139
 
194
140
  ## License
195
141
 
@@ -1,7 +1,9 @@
1
1
  export declare const config: {
2
2
  apiKey: string;
3
+ sessionId: string;
3
4
  endpoint: string;
4
5
  debug: boolean;
5
6
  enabled: boolean;
7
+ skipExitHandlers: boolean;
6
8
  };
7
9
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;CAKlB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;;;CAOlB,CAAC"}
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.config = void 0;
4
4
  exports.config = {
5
5
  apiKey: '',
6
+ sessionId: '',
6
7
  endpoint: 'https://us-central1-llmtracer-alt.cloudfunctions.net/v1Events',
7
8
  debug: false,
8
9
  enabled: false,
10
+ skipExitHandlers: false,
9
11
  };
10
12
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG;IACpB,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,+DAA+D;IACzE,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;CACf,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG;IACpB,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE,+DAA+D;IACzE,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,gBAAgB,EAAE,KAAK;CACxB,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { config } from './config';
2
2
  import * as transport from './transport';
3
3
  import * as patcher from './patcher';
4
- export declare const __version__ = "2.0.0";
4
+ export declare const __version__ = "2.4.0";
5
5
  export declare function init(options?: {
6
6
  apiKey?: string;
7
7
  debug?: boolean;
8
8
  endpoint?: string;
9
+ skipExitHandlers?: boolean;
9
10
  }): void;
10
11
  export declare function trace<T>(tags: Record<string, any>, fn: () => T | Promise<T>): T | Promise<T>;
11
12
  export declare function flush(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,wBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsB5F;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAS5F;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3C;AAGD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,SAAS,IAAI,UAAU,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC;AAG3E,QAAA,MAAM,SAAS;;;;;CAAsC,CAAC;AACtD,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAGrC,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,wBAAgB,IAAI,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA+BxH;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAS5F;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3C;AAGD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,SAAS,IAAI,UAAU,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC;AAG3E,QAAA,MAAM,SAAS;;;;;CAAsC,CAAC;AACtD,eAAe,SAAS,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -44,13 +44,21 @@ const transport = __importStar(require("./transport"));
44
44
  exports._transport = transport;
45
45
  const patcher = __importStar(require("./patcher"));
46
46
  exports._patcher = patcher;
47
- exports.__version__ = '2.0.0';
47
+ const crypto_1 = require("crypto");
48
+ exports.__version__ = '2.4.0';
48
49
  function init(options) {
49
50
  try {
50
51
  config_1.config.apiKey = options?.apiKey || process.env.LLMTRACER_API_KEY || '';
51
52
  config_1.config.debug = options?.debug || false;
52
53
  config_1.config.endpoint = options?.endpoint || 'https://us-central1-llmtracer-alt.cloudfunctions.net/v1Events';
54
+ config_1.config.skipExitHandlers = options?.skipExitHandlers || false;
53
55
  config_1.config.enabled = Boolean(config_1.config.apiKey);
56
+ try {
57
+ config_1.config.sessionId = (0, crypto_1.randomUUID)();
58
+ }
59
+ catch {
60
+ config_1.config.sessionId = '';
61
+ }
54
62
  if (!config_1.config.enabled) {
55
63
  if (config_1.config.debug)
56
64
  console.log('[llmtracer] No API key found. Tracing disabled.');
@@ -59,6 +67,9 @@ function init(options) {
59
67
  transport.start();
60
68
  patcher.patchOpenAI(config_1.config.debug);
61
69
  patcher.patchAnthropic(config_1.config.debug);
70
+ patcher.patchGoogle(config_1.config.debug);
71
+ if (config_1.config.debug)
72
+ console.log(`[llmtracer] Session: ${config_1.config.sessionId}`);
62
73
  if (config_1.config.debug)
63
74
  console.log('[llmtracer] Ready. Events \u2192 dashboard.llmtracer.com');
64
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,oBAsBC;AAED,sBASC;AAED,sBAMC;AAhDD,qCAAkC;AAmD+B,wFAnDxD,eAAM,OAmDyD;AAlDxE,mDAAqC;AACrC,uDAAyC;AAiDE,+BAAU;AAhDrD,mDAAqC;AAgDjB,2BAAQ;AA9Cf,QAAA,WAAW,GAAG,OAAO,CAAC;AAEnC,SAAgB,IAAI,CAAC,OAAiE;IACpF,IAAI,CAAC;QACH,eAAM,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACvE,eAAM,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;QACvC,eAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,+DAA+D,CAAC;QACvG,eAAM,CAAC,OAAO,GAAG,OAAO,CAAC,eAAM,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,eAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,eAAM,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,OAAO,CAAC,WAAW,CAAC,eAAM,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,cAAc,CAAC,eAAM,CAAC,KAAK,CAAC,CAAC;QAErC,IAAI,eAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,eAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,IAAI,eAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,qBAAqB,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,SAAgB,KAAK,CAAI,IAAyB,EAAE,EAAwB;IAC1E,IAAI,CAAC;QACH,IAAI,CAAC,eAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,KAAK;IACzB,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC;AAKD,4DAA4D;AAC5D,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAX,mBAAW,EAAE,CAAC;AACtD,kBAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,oBA+BC;AAED,sBASC;AAED,sBAMC;AA1DD,qCAAkC;AA6D+B,wFA7DxD,eAAM,OA6DyD;AA5DxE,mDAAqC;AACrC,uDAAyC;AA2DE,+BAAU;AA1DrD,mDAAqC;AA0DjB,2BAAQ;AAzD5B,mCAAoC;AAEvB,QAAA,WAAW,GAAG,OAAO,CAAC;AAEnC,SAAgB,IAAI,CAAC,OAA6F;IAChH,IAAI,CAAC;QACH,eAAM,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACvE,eAAM,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;QACvC,eAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,+DAA+D,CAAC;QACvG,eAAM,CAAC,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,IAAI,KAAK,CAAC;QAC7D,eAAM,CAAC,OAAO,GAAG,OAAO,CAAC,eAAM,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC;YACH,eAAM,CAAC,SAAS,GAAG,IAAA,mBAAU,GAAE,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,eAAM,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,eAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,eAAM,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,OAAO,CAAC,WAAW,CAAC,eAAM,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,cAAc,CAAC,eAAM,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,WAAW,CAAC,eAAM,CAAC,KAAK,CAAC,CAAC;QAElC,IAAI,eAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,eAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1E,IAAI,eAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,eAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,IAAI,eAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,qBAAqB,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,SAAgB,KAAK,CAAI,IAAyB,EAAE,EAAwB;IAC1E,IAAI,CAAC;QACH,IAAI,CAAC,eAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,KAAK;IACzB,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC;AAKD,4DAA4D;AAC5D,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAX,mBAAW,EAAE,CAAC;AACtD,kBAAe,SAAS,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export declare function patchOpenAI(debug: boolean): void;
2
2
  export declare function patchAnthropic(debug: boolean): void;
3
+ export declare function patchGoogle(debug: boolean): void;
3
4
  export declare function unpatchAll(): void;
4
5
  //# sourceMappingURL=patcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"patcher.d.ts","sourceRoot":"","sources":["../../src/patcher.ts"],"names":[],"mappings":"AA4BA,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAyBhD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAyBnD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAMjC"}
1
+ {"version":3,"file":"patcher.d.ts","sourceRoot":"","sources":["../../src/patcher.ts"],"names":[],"mappings":"AA6BA,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CA6FhD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAyBnD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAqChD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAMjC"}
@@ -2,10 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.patchOpenAI = patchOpenAI;
4
4
  exports.patchAnthropic = patchAnthropic;
5
+ exports.patchGoogle = patchGoogle;
5
6
  exports.unpatchAll = unpatchAll;
6
7
  const wrapper_1 = require("./wrapper");
7
8
  const openai_1 = require("./providers/openai");
8
9
  const anthropic_1 = require("./providers/anthropic");
10
+ const google_1 = require("./providers/google");
9
11
  const originals = new Map();
10
12
  function getPackageVersion(packageName) {
11
13
  try {
@@ -47,9 +49,76 @@ function patchOpenAI(debug) {
47
49
  methodName: 'create',
48
50
  original: originalCreate,
49
51
  });
52
+ // ── Multi-modal endpoints ──────────────────────────────────
53
+ const capabilities = ['chat'];
54
+ // STT (Whisper)
55
+ try {
56
+ const sttModule = require('openai/resources/audio/transcriptions');
57
+ const TranscriptionsProto = sttModule.Transcriptions?.prototype;
58
+ if (TranscriptionsProto && !TranscriptionsProto._llmtracer_patched) {
59
+ const orig = TranscriptionsProto.create;
60
+ TranscriptionsProto.create = (0, wrapper_1.makeAsyncWrapper)(orig, 'openai', openai_1.parseTranscriptionResponse, null);
61
+ TranscriptionsProto._llmtracer_patched = true;
62
+ originals.set('openai.Transcriptions.create', { target: TranscriptionsProto, methodName: 'create', original: orig });
63
+ capabilities.push('stt');
64
+ }
65
+ }
66
+ catch { /* module not available */ }
67
+ // TTS
68
+ try {
69
+ const ttsModule = require('openai/resources/audio/speech');
70
+ const SpeechProto = ttsModule.Speech?.prototype;
71
+ if (SpeechProto && !SpeechProto._llmtracer_patched) {
72
+ const orig = SpeechProto.create;
73
+ SpeechProto.create = (0, wrapper_1.makeAsyncWrapper)(orig, 'openai', openai_1.parseSpeechResponse, null);
74
+ SpeechProto._llmtracer_patched = true;
75
+ originals.set('openai.Speech.create', { target: SpeechProto, methodName: 'create', original: orig });
76
+ capabilities.push('tts');
77
+ }
78
+ }
79
+ catch { /* module not available */ }
80
+ // Embeddings
81
+ try {
82
+ const embedModule = require('openai/resources/embeddings');
83
+ const EmbeddingsProto = embedModule.Embeddings?.prototype;
84
+ if (EmbeddingsProto && !EmbeddingsProto._llmtracer_patched) {
85
+ const orig = EmbeddingsProto.create;
86
+ EmbeddingsProto.create = (0, wrapper_1.makeAsyncWrapper)(orig, 'openai', openai_1.parseEmbeddingResponse, null);
87
+ EmbeddingsProto._llmtracer_patched = true;
88
+ originals.set('openai.Embeddings.create', { target: EmbeddingsProto, methodName: 'create', original: orig });
89
+ capabilities.push('embeddings');
90
+ }
91
+ }
92
+ catch { /* module not available */ }
93
+ // Images (DALL-E)
94
+ try {
95
+ const imgModule = require('openai/resources/images');
96
+ const ImagesProto = imgModule.Images?.prototype;
97
+ if (ImagesProto && !ImagesProto._llmtracer_patched) {
98
+ const orig = ImagesProto.generate;
99
+ ImagesProto.generate = (0, wrapper_1.makeAsyncWrapper)(orig, 'openai', openai_1.parseImageResponse, null);
100
+ ImagesProto._llmtracer_patched = true;
101
+ originals.set('openai.Images.generate', { target: ImagesProto, methodName: 'generate', original: orig });
102
+ capabilities.push('images');
103
+ }
104
+ }
105
+ catch { /* module not available */ }
106
+ // Moderations
107
+ try {
108
+ const modModule = require('openai/resources/moderations');
109
+ const ModerationsProto = modModule.Moderations?.prototype;
110
+ if (ModerationsProto && !ModerationsProto._llmtracer_patched) {
111
+ const orig = ModerationsProto.create;
112
+ ModerationsProto.create = (0, wrapper_1.makeAsyncWrapper)(orig, 'openai', openai_1.parseModerationResponse, null);
113
+ ModerationsProto._llmtracer_patched = true;
114
+ originals.set('openai.Moderations.create', { target: ModerationsProto, methodName: 'create', original: orig });
115
+ capabilities.push('moderation');
116
+ }
117
+ }
118
+ catch { /* module not available */ }
50
119
  if (debug) {
51
120
  const version = getPackageVersion('openai');
52
- console.log(`[llmtracer] \u2713 Patched openai (v${version})`);
121
+ console.log(`[llmtracer] \u2713 Patched openai (v${version}) \u2014 ${capabilities.join(' + ')}`);
53
122
  }
54
123
  }
55
124
  catch (e) {
@@ -83,6 +152,42 @@ function patchAnthropic(debug) {
83
152
  console.log(`[llmtracer] \u2717 anthropic not found or patch failed: ${e}`);
84
153
  }
85
154
  }
155
+ function patchGoogle(debug) {
156
+ try {
157
+ const googleModule = require('@google/genai');
158
+ const GenModel = googleModule.GenerativeModel?.prototype;
159
+ if (!GenModel)
160
+ throw new Error('GenerativeModel prototype not found');
161
+ if (GenModel._llmtracer_patched)
162
+ return;
163
+ const originalGenerate = GenModel.generateContent;
164
+ GenModel.generateContent = (0, wrapper_1.makeAsyncWrapper)(originalGenerate, 'google', google_1.parseGoogleResponse, google_1.wrapGoogleStream);
165
+ GenModel._llmtracer_patched = true;
166
+ originals.set('google.GenerativeModel.generateContent', {
167
+ target: GenModel,
168
+ methodName: 'generateContent',
169
+ original: originalGenerate,
170
+ });
171
+ // Also patch generateContentStream if it exists
172
+ if (typeof GenModel.generateContentStream === 'function') {
173
+ const originalStream = GenModel.generateContentStream;
174
+ GenModel.generateContentStream = (0, wrapper_1.makeAsyncWrapper)(originalStream, 'google', google_1.parseGoogleResponse, google_1.wrapGoogleStream);
175
+ originals.set('google.GenerativeModel.generateContentStream', {
176
+ target: GenModel,
177
+ methodName: 'generateContentStream',
178
+ original: originalStream,
179
+ });
180
+ }
181
+ if (debug) {
182
+ const version = getPackageVersion('@google/genai');
183
+ console.log(`[llmtracer] \u2713 Patched google (v${version})`);
184
+ }
185
+ }
186
+ catch (e) {
187
+ if (debug)
188
+ console.log(`[llmtracer] \u2717 google not found or patch failed: ${e}`);
189
+ }
190
+ }
86
191
  function unpatchAll() {
87
192
  for (const [, entry] of originals) {
88
193
  entry.target[entry.methodName] = entry.original;
@@ -1 +1 @@
1
- {"version":3,"file":"patcher.js","sourceRoot":"","sources":["../../src/patcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"patcher.js","sourceRoot":"","sources":["../../src/patcher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGhF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CAQhE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CA4D1G"}
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGhF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CA0BhE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CA2E1G"}
@@ -39,25 +39,45 @@ const config_1 = require("../config");
39
39
  const schema_1 = require("../schema");
40
40
  const transport = __importStar(require("../transport"));
41
41
  function parseAnthropicResponse(result) {
42
+ const usage = result?.usage;
43
+ const baseInput = usage?.input_tokens || 0;
44
+ const baseOutput = usage?.output_tokens || 0;
45
+ const cacheCreation = usage?.cache_creation_input_tokens || 0;
46
+ const cacheRead = usage?.cache_read_input_tokens || 0;
47
+ if (config_1.config.debug) {
48
+ console.log(`[llmtracer] Anthropic tokens — in=${baseInput} out=${baseOutput} cache_create=${cacheCreation} cache_read=${cacheRead}`);
49
+ }
50
+ const toolsInvoked = (result?.content || [])
51
+ .filter((b) => b.type === 'tool_use')
52
+ .map((b) => b.name)
53
+ .filter(Boolean);
42
54
  return {
43
55
  provider: 'anthropic',
44
56
  model: result?.model || 'unknown',
45
- input_tokens: result?.usage?.input_tokens || 0,
46
- output_tokens: result?.usage?.output_tokens || 0,
57
+ input_tokens: baseInput + cacheCreation + cacheRead,
58
+ output_tokens: baseOutput,
47
59
  status: result?.stop_reason ? 'success' : 'error',
60
+ tools_invoked: toolsInvoked,
48
61
  };
49
62
  }
50
63
  function wrapAnthropicStream(result, context, elapsedMs, args) {
51
64
  let model = 'unknown';
52
65
  let inputTokens = 0;
53
66
  let outputTokens = 0;
67
+ let cacheCreation = 0;
68
+ let cacheRead = 0;
69
+ const toolsInvoked = [];
54
70
  function record() {
71
+ if (config_1.config.debug) {
72
+ console.log(`[llmtracer] Anthropic tokens — in=${inputTokens} out=${outputTokens} cache_create=${cacheCreation} cache_read=${cacheRead}`);
73
+ }
55
74
  const event = (0, schema_1.buildEvent)(context, {
56
75
  provider: 'anthropic',
57
76
  model,
58
- input_tokens: inputTokens,
77
+ input_tokens: inputTokens + cacheCreation + cacheRead,
59
78
  output_tokens: outputTokens,
60
79
  status: 'success',
80
+ tools_invoked: toolsInvoked,
61
81
  }, elapsedMs);
62
82
  transport.enqueue(event);
63
83
  if (config_1.config.debug)
@@ -80,6 +100,11 @@ function wrapAnthropicStream(result, context, elapsedMs, args) {
80
100
  if (event?.type === 'message_start' && event.message) {
81
101
  model = event.message.model || model;
82
102
  inputTokens = event.message.usage?.input_tokens || inputTokens;
103
+ cacheCreation = event.message.usage?.cache_creation_input_tokens || cacheCreation;
104
+ cacheRead = event.message.usage?.cache_read_input_tokens || cacheRead;
105
+ }
106
+ if (event?.type === 'content_block_start' && event.content_block?.type === 'tool_use') {
107
+ toolsInvoked.push(event.content_block.name);
83
108
  }
84
109
  if (event?.type === 'message_delta' && event.usage) {
85
110
  outputTokens = event.usage.output_tokens || outputTokens;
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wDAQC;AAED,kDA4DC;AA1ED,sCAAmC;AACnC,sCAAgF;AAChF,wDAA0C;AAE1C,SAAgB,sBAAsB,CAAC,MAAW;IAChD,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,SAAS;QACjC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC;QAC9C,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,IAAI,CAAC;QAChD,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;KAClD,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CAAC,MAAW,EAAE,OAAoB,EAAE,SAAiB,EAAE,IAAW;IACnG,IAAI,KAAK,GAAG,SAAS,CAAC;IACtB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,SAAS,MAAM;QACb,MAAM,KAAK,GAAG,IAAA,mBAAU,EAAC,OAAO,EAAE;YAChC,QAAQ,EAAE,WAAW;YACrB,KAAK;YACL,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,YAAY;YAC3B,MAAM,EAAE,SAAS;SAClB,EAAE,SAAS,CAAC,CAAC;QACd,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,eAAM,CAAC,KAAK;YAAE,IAAA,qBAAY,EAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,GAAG,CAAC,MAAM,EAAE,IAAI;YACd,IAAI,IAAI,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;gBAClC,OAAO;oBACL,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;oBACxD,OAAO;wBACL,KAAK,CAAC,IAAI;4BACR,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;4BACjD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gCACrB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;gCAC/B,2BAA2B;gCAC3B,wDAAwD;gCACxD,+CAA+C;gCAC/C,8CAA8C;gCAC9C,IAAI,KAAK,EAAE,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oCACrD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;oCACrC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,IAAI,WAAW,CAAC;gCACjE,CAAC;gCACD,IAAI,KAAK,EAAE,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oCACnD,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,YAAY,CAAC;gCAC3D,CAAC;4BACH,CAAC;4BACD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gCACpB,IAAI,CAAC;oCACH,MAAM,EAAE,CAAC;gCACX,CAAC;gCAAC,MAAM,CAAC;oCACP,UAAU;gCACZ,CAAC;4BACH,CAAC;4BACD,OAAO,UAAU,CAAC;wBACpB,CAAC;wBACD,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC;wBACvD,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC;qBACtD,CAAC;gBACJ,CAAC,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ContextData, ResponseData } from '../schema';
2
+ export declare function parseGoogleResponse(result: any): ResponseData;
3
+ export declare function wrapGoogleStream(result: any, context: ContextData, elapsedMs: number, args: any[]): any;
4
+ //# sourceMappingURL=google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/providers/google.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAiChF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CAyB7D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAkEvG"}