margin-meter 0.1.0 → 0.2.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 +61 -6
- package/dist/index.d.ts +124 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +313 -0
- package/dist/index.js.map +1 -1
- package/dist/instrument.d.ts +73 -0
- package/dist/instrument.d.ts.map +1 -0
- package/dist/instrument.js +152 -0
- package/dist/instrument.js.map +1 -0
- package/dist/providers.d.ts +158 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +397 -0
- package/dist/providers.js.map +1 -0
- package/dist/substrate.d.ts +51 -0
- package/dist/substrate.d.ts.map +1 -0
- package/dist/substrate.js +132 -0
- package/dist/substrate.js.map +1 -0
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-call auto-instrumentation of the common LLM JS clients.
|
|
3
|
+
*
|
|
4
|
+
* The TS twin of `margin_meter.instrument`. Unlike Python (where the SDKs expose
|
|
5
|
+
* patchable classes), JS agents construct client instances and call
|
|
6
|
+
* `client.chat.completions.create(...)` / `client.messages.create(...)` /
|
|
7
|
+
* `model.generateContent(...)`. So these helpers patch the METHOD ON THE
|
|
8
|
+
* INSTANCE the agent already holds — no import of the provider SDK, fully
|
|
9
|
+
* testable against a fake client object:
|
|
10
|
+
*
|
|
11
|
+
* import OpenAI from "openai";
|
|
12
|
+
* import { MarginMeter, instrumentOpenAI } from "margin-meter";
|
|
13
|
+
*
|
|
14
|
+
* const client = new OpenAI();
|
|
15
|
+
* const meter = new MarginMeter();
|
|
16
|
+
* const undo = instrumentOpenAI(client, meter, { workflowId: "aider-fix" });
|
|
17
|
+
* // ... client.chat.completions.create(...) calls are now metered ...
|
|
18
|
+
* undo();
|
|
19
|
+
*
|
|
20
|
+
* Honesty: the wrapper reads real tokens off the real response (`extractUsage`)
|
|
21
|
+
* — never fabricated — and a metering failure is fail-safe (the host's call
|
|
22
|
+
* still returns / still throws).
|
|
23
|
+
*/
|
|
24
|
+
import type { MarginMeter, WrapOptions } from "./index.ts";
|
|
25
|
+
/** A requested client could not be instrumented (method missing / shape moved). */
|
|
26
|
+
export declare class MarginInstrumentError extends Error {
|
|
27
|
+
constructor(message: string);
|
|
28
|
+
}
|
|
29
|
+
/** Undo a patch — restores the exact original method. */
|
|
30
|
+
export type Uninstrument = () => void;
|
|
31
|
+
type MethodOwner = Record<string, unknown>;
|
|
32
|
+
/**
|
|
33
|
+
* Replace `owner[methodName]` with an auto-metered wrapper; return the undo.
|
|
34
|
+
* Provider-agnostic and the single testable seam for every instrumenter: it
|
|
35
|
+
* binds the original to its owner (so `this` is preserved), wraps it with
|
|
36
|
+
* `meter.wrap`, sets the wrapper back, and returns a thunk restoring the
|
|
37
|
+
* original.
|
|
38
|
+
*/
|
|
39
|
+
export declare function patchMethod(owner: MethodOwner, methodName: string, meter: MarginMeter, opts: WrapOptions): Uninstrument;
|
|
40
|
+
type InstrumentOpts = Omit<WrapOptions, "provider" | "resolveModel" | "model">;
|
|
41
|
+
/** Instrument an OpenAI client's `chat.completions.create`. Returns the undo. */
|
|
42
|
+
export declare function instrumentOpenAI(client: unknown, meter: MarginMeter, opts: InstrumentOpts): Uninstrument;
|
|
43
|
+
/** Instrument an Anthropic client's `messages.create`. Returns the undo. */
|
|
44
|
+
export declare function instrumentAnthropic(client: unknown, meter: MarginMeter, opts: InstrumentOpts): Uninstrument;
|
|
45
|
+
/**
|
|
46
|
+
* Instrument a Gemini `GenerativeModel`'s `generateContent`. Returns the undo.
|
|
47
|
+
* The model name lives on the instance (`.model`), not the response, so it is
|
|
48
|
+
* resolved per call and the `models/` prefix stripped to match the pricing table.
|
|
49
|
+
*/
|
|
50
|
+
export declare function instrumentGemini(model: unknown, meter: MarginMeter, opts: InstrumentOpts): Uninstrument;
|
|
51
|
+
/**
|
|
52
|
+
* Instrument an AWS Bedrock runtime client's Converse call. Returns the undo.
|
|
53
|
+
*
|
|
54
|
+
* The JS AWS SDK v3 uses a command pattern — `client.send(new ConverseCommand({
|
|
55
|
+
* modelId, messages }))` — so the seam is the client's `send` method, not a
|
|
56
|
+
* per-op method as in Python (boto3's `client.converse(...)`). The Converse
|
|
57
|
+
* response omits the model id, so it is recovered per call off the command's
|
|
58
|
+
* `input.modelId`; its gateway form (`us.anthropic.claude-…-v1:0`) prices through
|
|
59
|
+
* the server. The camelCase `usage` block (`inputTokens` / `outputTokens` +
|
|
60
|
+
* additive `cacheReadInputTokens` / `cacheWriteInputTokens`) is read by the
|
|
61
|
+
* bedrock extractor.
|
|
62
|
+
*
|
|
63
|
+
* Scope note: this patches `send`, which every Bedrock command flows through. A
|
|
64
|
+
* non-Converse command (e.g. `InvokeModelCommand`, whose usage rides HTTP
|
|
65
|
+
* headers, or a streaming command, whose usage rides the event stream) carries no
|
|
66
|
+
* `usage` block on its return value, so `recordResponse` reads nothing and the
|
|
67
|
+
* call is metered as a shapeless response rather than fabricated — the fail-safe
|
|
68
|
+
* path. Direct capture of those forms is the follow-on (the Python SDK already
|
|
69
|
+
* meters them); Converse is the modern, uniform form and lands first here.
|
|
70
|
+
*/
|
|
71
|
+
export declare function instrumentBedrock(client: unknown, meter: MarginMeter, opts: InstrumentOpts): Uninstrument;
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=instrument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../src/instrument.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI3D,mFAAmF;AACnF,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,yDAAyD;AACzD,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC;AAEtC,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,WAAW,GAChB,YAAY,CAad;AAiBD,KAAK,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC,CAAC;AAE/E,iFAAiF;AACjF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,cAAc,GACnB,YAAY,CAad;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,cAAc,GACnB,YAAY,CAOd;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,cAAc,GACnB,YAAY,CAmBd;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,cAAc,GACnB,YAAY,CAsBd"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-call auto-instrumentation of the common LLM JS clients.
|
|
3
|
+
*
|
|
4
|
+
* The TS twin of `margin_meter.instrument`. Unlike Python (where the SDKs expose
|
|
5
|
+
* patchable classes), JS agents construct client instances and call
|
|
6
|
+
* `client.chat.completions.create(...)` / `client.messages.create(...)` /
|
|
7
|
+
* `model.generateContent(...)`. So these helpers patch the METHOD ON THE
|
|
8
|
+
* INSTANCE the agent already holds — no import of the provider SDK, fully
|
|
9
|
+
* testable against a fake client object:
|
|
10
|
+
*
|
|
11
|
+
* import OpenAI from "openai";
|
|
12
|
+
* import { MarginMeter, instrumentOpenAI } from "margin-meter";
|
|
13
|
+
*
|
|
14
|
+
* const client = new OpenAI();
|
|
15
|
+
* const meter = new MarginMeter();
|
|
16
|
+
* const undo = instrumentOpenAI(client, meter, { workflowId: "aider-fix" });
|
|
17
|
+
* // ... client.chat.completions.create(...) calls are now metered ...
|
|
18
|
+
* undo();
|
|
19
|
+
*
|
|
20
|
+
* Honesty: the wrapper reads real tokens off the real response (`extractUsage`)
|
|
21
|
+
* — never fabricated — and a metering failure is fail-safe (the host's call
|
|
22
|
+
* still returns / still throws).
|
|
23
|
+
*/
|
|
24
|
+
import { BEDROCK, fromClient } from "./substrate.js";
|
|
25
|
+
/** A requested client could not be instrumented (method missing / shape moved). */
|
|
26
|
+
export class MarginInstrumentError extends Error {
|
|
27
|
+
constructor(message) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = "MarginInstrumentError";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Replace `owner[methodName]` with an auto-metered wrapper; return the undo.
|
|
34
|
+
* Provider-agnostic and the single testable seam for every instrumenter: it
|
|
35
|
+
* binds the original to its owner (so `this` is preserved), wraps it with
|
|
36
|
+
* `meter.wrap`, sets the wrapper back, and returns a thunk restoring the
|
|
37
|
+
* original.
|
|
38
|
+
*/
|
|
39
|
+
export function patchMethod(owner, methodName, meter, opts) {
|
|
40
|
+
const original = owner[methodName];
|
|
41
|
+
if (typeof original !== "function") {
|
|
42
|
+
throw new MarginInstrumentError(`cannot instrument: '${methodName}' is not a function on the given object`);
|
|
43
|
+
}
|
|
44
|
+
const bound = original.bind(owner);
|
|
45
|
+
const wrapped = meter.wrap(bound, opts);
|
|
46
|
+
owner[methodName] = wrapped;
|
|
47
|
+
return () => {
|
|
48
|
+
owner[methodName] = original;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Navigate a dotted path to the object that directly owns the final method. */
|
|
52
|
+
function ownerOf(root, path) {
|
|
53
|
+
let cur = root;
|
|
54
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
55
|
+
cur = cur == null ? undefined : cur[path[i]];
|
|
56
|
+
if (cur == null) {
|
|
57
|
+
throw new MarginInstrumentError(`cannot instrument: '${path.slice(0, i + 1).join(".")}' is missing — ` +
|
|
58
|
+
"the client shape may have changed; wrap the call directly with meter.wrap().");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return { owner: cur, method: path[path.length - 1] };
|
|
62
|
+
}
|
|
63
|
+
/** Instrument an OpenAI client's `chat.completions.create`. Returns the undo. */
|
|
64
|
+
export function instrumentOpenAI(client, meter, opts) {
|
|
65
|
+
const { owner, method } = ownerOf(client, ["chat", "completions", "create"]);
|
|
66
|
+
return patchMethod(owner, method, meter, {
|
|
67
|
+
...opts,
|
|
68
|
+
provider: "openai",
|
|
69
|
+
// Read off THIS client's endpoint, so a client aimed at openrouter.ai is
|
|
70
|
+
// recorded as OpenRouter and one aimed at Azure as Azure. Undefined when the
|
|
71
|
+
// endpoint is unreadable — an unmeasured path, never an assumed one.
|
|
72
|
+
substrate: fromClient(client),
|
|
73
|
+
// A streamed OpenAI call omits usage unless asked; the wrapper injects
|
|
74
|
+
// stream_options.include_usage so its final chunk carries the count.
|
|
75
|
+
streamIncludeUsage: true,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/** Instrument an Anthropic client's `messages.create`. Returns the undo. */
|
|
79
|
+
export function instrumentAnthropic(client, meter, opts) {
|
|
80
|
+
const { owner, method } = ownerOf(client, ["messages", "create"]);
|
|
81
|
+
return patchMethod(owner, method, meter, {
|
|
82
|
+
...opts,
|
|
83
|
+
provider: "anthropic",
|
|
84
|
+
substrate: fromClient(client),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Instrument a Gemini `GenerativeModel`'s `generateContent`. Returns the undo.
|
|
89
|
+
* The model name lives on the instance (`.model`), not the response, so it is
|
|
90
|
+
* resolved per call and the `models/` prefix stripped to match the pricing table.
|
|
91
|
+
*/
|
|
92
|
+
export function instrumentGemini(model, meter, opts) {
|
|
93
|
+
const m = model;
|
|
94
|
+
if (typeof m?.generateContent !== "function") {
|
|
95
|
+
throw new MarginInstrumentError("cannot instrument: 'generateContent' is not a function on the given model — " +
|
|
96
|
+
"the SDK shape may have changed; wrap the call directly with meter.wrap().");
|
|
97
|
+
}
|
|
98
|
+
const resolveModel = () => {
|
|
99
|
+
const name = (m.model ?? m.modelName);
|
|
100
|
+
if (!name)
|
|
101
|
+
return undefined;
|
|
102
|
+
return String(name).split("/").pop();
|
|
103
|
+
};
|
|
104
|
+
return patchMethod(m, "generateContent", meter, {
|
|
105
|
+
...opts,
|
|
106
|
+
provider: "google",
|
|
107
|
+
resolveModel,
|
|
108
|
+
substrate: fromClient(model),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Instrument an AWS Bedrock runtime client's Converse call. Returns the undo.
|
|
113
|
+
*
|
|
114
|
+
* The JS AWS SDK v3 uses a command pattern — `client.send(new ConverseCommand({
|
|
115
|
+
* modelId, messages }))` — so the seam is the client's `send` method, not a
|
|
116
|
+
* per-op method as in Python (boto3's `client.converse(...)`). The Converse
|
|
117
|
+
* response omits the model id, so it is recovered per call off the command's
|
|
118
|
+
* `input.modelId`; its gateway form (`us.anthropic.claude-…-v1:0`) prices through
|
|
119
|
+
* the server. The camelCase `usage` block (`inputTokens` / `outputTokens` +
|
|
120
|
+
* additive `cacheReadInputTokens` / `cacheWriteInputTokens`) is read by the
|
|
121
|
+
* bedrock extractor.
|
|
122
|
+
*
|
|
123
|
+
* Scope note: this patches `send`, which every Bedrock command flows through. A
|
|
124
|
+
* non-Converse command (e.g. `InvokeModelCommand`, whose usage rides HTTP
|
|
125
|
+
* headers, or a streaming command, whose usage rides the event stream) carries no
|
|
126
|
+
* `usage` block on its return value, so `recordResponse` reads nothing and the
|
|
127
|
+
* call is metered as a shapeless response rather than fabricated — the fail-safe
|
|
128
|
+
* path. Direct capture of those forms is the follow-on (the Python SDK already
|
|
129
|
+
* meters them); Converse is the modern, uniform form and lands first here.
|
|
130
|
+
*/
|
|
131
|
+
export function instrumentBedrock(client, meter, opts) {
|
|
132
|
+
const c = client;
|
|
133
|
+
if (typeof c?.send !== "function") {
|
|
134
|
+
throw new MarginInstrumentError("cannot instrument: 'send' is not a function on the given client — " +
|
|
135
|
+
"pass an @aws-sdk/client-bedrock-runtime BedrockRuntimeClient.");
|
|
136
|
+
}
|
|
137
|
+
// The model rides the command's `input.modelId` (botocore's `modelId=` twin).
|
|
138
|
+
const resolveModel = (args) => {
|
|
139
|
+
const command = args[0];
|
|
140
|
+
const input = command?.input;
|
|
141
|
+
const mid = input?.modelId;
|
|
142
|
+
return typeof mid === "string" && mid ? mid : undefined;
|
|
143
|
+
};
|
|
144
|
+
return patchMethod(c, "send", meter, {
|
|
145
|
+
...opts,
|
|
146
|
+
provider: "bedrock",
|
|
147
|
+
resolveModel,
|
|
148
|
+
// Bedrock IS the path — the transport names itself, no endpoint to read.
|
|
149
|
+
substrate: BEDROCK,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=instrument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrument.js","sourceRoot":"","sources":["../src/instrument.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the measured economics of one LLM call straight off a provider response.
|
|
3
|
+
*
|
|
4
|
+
* The TS twin of `margin_meter.providers`: given the object an OpenAI /
|
|
5
|
+
* Anthropic / Gemini JS client returns, recover the `(provider, model, tokens)`
|
|
6
|
+
* a Margin call row needs — so auto-instrumentation is a few lines with no
|
|
7
|
+
* manual token bookkeeping.
|
|
8
|
+
*
|
|
9
|
+
* Dependency-free and duck-typed on purpose: it never imports the provider SDKs,
|
|
10
|
+
* reading fields by shape so it works on a real SDK object, a plain object (the
|
|
11
|
+
* shape a mocked provider returns in tests), or JSON. The three shapes, as the
|
|
12
|
+
* current JS SDKs publish them:
|
|
13
|
+
*
|
|
14
|
+
* - **OpenAI** — `model`; `usage.prompt_tokens` / `completion_tokens`; cached
|
|
15
|
+
* reads at `usage.prompt_tokens_details.cached_tokens` (Responses API:
|
|
16
|
+
* `usage.input_tokens` / `output_tokens` / `input_tokens_details.cached_tokens`).
|
|
17
|
+
* - **Anthropic** — `model`; `usage.input_tokens` / `output_tokens`; cached
|
|
18
|
+
* reads at `usage.cache_read_input_tokens`; cache WRITES at
|
|
19
|
+
* `usage.cache_creation_input_tokens` (a ~1.25x premium bucket).
|
|
20
|
+
* - **Gemini** (`@google/generative-ai`) — `response.usageMetadata` (the
|
|
21
|
+
* `generateContent` result nests it under `.response`), with
|
|
22
|
+
* `promptTokenCount` / `candidatesTokenCount` / `cachedContentTokenCount`, plus
|
|
23
|
+
* `thoughtsTokenCount` (thinking tokens, billed as output and folded in).
|
|
24
|
+
* The model does not ride the response, so the caller passes it.
|
|
25
|
+
* - **Cohere** (v2 `/chat`) — billed counts nest under `usage.billed_units`
|
|
26
|
+
* (what is charged; raw `usage.tokens` is the fallback), each with
|
|
27
|
+
* `input_tokens` / `output_tokens`. Cohere publishes no chat prompt-cache
|
|
28
|
+
* discount, so cache reads bill as ordinary input (`cacheReadTokens` stays 0);
|
|
29
|
+
* the model does not ride the response, so the caller passes it.
|
|
30
|
+
* - **AWS Bedrock** (`@aws-sdk/client-bedrock-runtime`, Converse) — usage rides
|
|
31
|
+
* `usage.inputTokens` / `outputTokens` in camelCase, with ADDITIVE cache
|
|
32
|
+
* buckets `cacheReadInputTokens` / `cacheWriteInputTokens` (AWS documents
|
|
33
|
+
* `totalTokens = inputTokens + outputTokens + cacheReadInputTokens +
|
|
34
|
+
* cacheWriteInputTokens`), so the three input-side buckets are disjoint and
|
|
35
|
+
* each reads verbatim, no subtraction. The Converse response omits the model
|
|
36
|
+
* id, so the caller passes it (`instrumentBedrock` reads it off the command's
|
|
37
|
+
* `input.modelId`); its gateway form (`us.anthropic.claude-…-v1:0`) prices
|
|
38
|
+
* through the server's `normalize_model`.
|
|
39
|
+
*
|
|
40
|
+
* Numbers are read verbatim — never inflated. A field the provider didn't report
|
|
41
|
+
* reads 0; an unrecognised shape throws `UsageExtractionError` rather than
|
|
42
|
+
* emitting a silently-zero (free-looking) call.
|
|
43
|
+
*/
|
|
44
|
+
export declare const OPENAI = "openai";
|
|
45
|
+
export declare const ANTHROPIC = "anthropic";
|
|
46
|
+
export declare const GOOGLE = "google";
|
|
47
|
+
export declare const COHERE = "cohere";
|
|
48
|
+
export declare const BEDROCK = "bedrock";
|
|
49
|
+
export type ProviderName = "openai" | "anthropic" | "google" | "cohere" | "bedrock";
|
|
50
|
+
/** The metered economics of one call, recovered from a provider response. */
|
|
51
|
+
export interface Usage {
|
|
52
|
+
provider: ProviderName;
|
|
53
|
+
/** May be undefined only when the provider omits it AND no override was passed. */
|
|
54
|
+
model?: string;
|
|
55
|
+
inputTokens: number;
|
|
56
|
+
outputTokens: number;
|
|
57
|
+
cacheReadTokens: number;
|
|
58
|
+
/**
|
|
59
|
+
* Cache-CREATION (write) tokens — a premium bucket (Anthropic bills ~1.25x
|
|
60
|
+
* input to write a prompt-cache entry). 0 for providers that report no
|
|
61
|
+
* distinct write bucket (OpenAI/Gemini bill the writing call as ordinary
|
|
62
|
+
* input). Kept separate so the server never drops the premium. When a request
|
|
63
|
+
* pins a 1-hour TTL this holds ONLY the 5-minute portion; the 1-hour portion
|
|
64
|
+
* moves to `cacheCreation1hTokens` below.
|
|
65
|
+
*/
|
|
66
|
+
cacheCreationTokens: number;
|
|
67
|
+
/**
|
|
68
|
+
* The portion of cache creation written with the LONGER 1-hour TTL, which
|
|
69
|
+
* Anthropic bills at a higher premium (~2x input vs the 5-minute ~1.25x).
|
|
70
|
+
* Disjoint from `cacheCreationTokens`. Optional/0 unless the provider reports a
|
|
71
|
+
* 1-hour breakdown, so a call using only the default cache is unchanged.
|
|
72
|
+
*/
|
|
73
|
+
cacheCreation1hTokens?: number;
|
|
74
|
+
/**
|
|
75
|
+
* The hidden-thinking share of `outputTokens` (Gemini `thoughtsTokenCount`,
|
|
76
|
+
* OpenAI `completion_tokens_details.reasoning_tokens`). A SUBSET of output, not
|
|
77
|
+
* an addition — already priced at the output rate, so it is NEVER priced
|
|
78
|
+
* separately (that would double-bill). Carried only for visibility: the
|
|
79
|
+
* thinking-token share is what isolates the reasoning-effort lever from
|
|
80
|
+
* ordinary verbose output. Optional/0 on a call with no reasoning breakdown.
|
|
81
|
+
*/
|
|
82
|
+
reasoningTokens?: number;
|
|
83
|
+
}
|
|
84
|
+
/** The response object matched no provider shape we can meter. */
|
|
85
|
+
export declare class UsageExtractionError extends Error {
|
|
86
|
+
constructor(message: string);
|
|
87
|
+
}
|
|
88
|
+
type Any = Record<string, unknown> | null | undefined | unknown;
|
|
89
|
+
/**
|
|
90
|
+
* Best-effort provider inference from a response's shape. Prefers unambiguous
|
|
91
|
+
* signals: Gemini exposes `usageMetadata`; Anthropic's usage carries
|
|
92
|
+
* `input_tokens` while OpenAI's carries `prompt_tokens`. Returns undefined when
|
|
93
|
+
* nothing distinguishes it — the caller must then name the provider (the
|
|
94
|
+
* instrumenter always does).
|
|
95
|
+
*/
|
|
96
|
+
export declare function detectProvider(response: Any): ProviderName | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Recover the metered `Usage` of one call from its provider response. `provider`
|
|
99
|
+
* forces the shape (the instrumenter always knows which client it patched);
|
|
100
|
+
* omit it and the provider is inferred from the response's shape. `model`
|
|
101
|
+
* overrides a response that omits its model (Gemini). Throws
|
|
102
|
+
* `UsageExtractionError` when the shape matches no known provider or carries no
|
|
103
|
+
* usage block, so a silently-free call is never emitted.
|
|
104
|
+
*/
|
|
105
|
+
export declare function extractUsage(response: Any, opts?: {
|
|
106
|
+
provider?: ProviderName;
|
|
107
|
+
model?: string;
|
|
108
|
+
}): Usage;
|
|
109
|
+
/**
|
|
110
|
+
* Read whatever usage ONE streaming chunk/event carries, or `undefined`.
|
|
111
|
+
*
|
|
112
|
+
* The three streamed shapes differ in WHERE (and whether) a chunk carries usage:
|
|
113
|
+
*
|
|
114
|
+
* - **OpenAI** (needs `stream_options: { include_usage: true }`): every content
|
|
115
|
+
* chunk has `usage: null`; only the FINAL chunk carries the full `.usage`.
|
|
116
|
+
* - **Gemini**: every chunk carries a CUMULATIVE `usageMetadata` — the last is
|
|
117
|
+
* authoritative, and the running max keeps it.
|
|
118
|
+
* - **Anthropic**: no single event is complete — `message_start` carries the
|
|
119
|
+
* input + cache counts nested under `event.message.usage`, while `message_delta`
|
|
120
|
+
* carries the final `event.usage.output_tokens`. This reads BOTH carriers so the
|
|
121
|
+
* merge can reunite them.
|
|
122
|
+
*
|
|
123
|
+
* Returns `undefined` (never throws) for a chunk with no usage, so an ordinary
|
|
124
|
+
* content chunk is skipped, not treated as an error.
|
|
125
|
+
*/
|
|
126
|
+
export declare function usageFromStreamChunk(chunk: Any, provider?: ProviderName, model?: string): Usage | undefined;
|
|
127
|
+
/**
|
|
128
|
+
* Merge two per-chunk usages, taking the MAX of each token bucket.
|
|
129
|
+
*
|
|
130
|
+
* Every streamed token count is monotonic within one call — cumulative (Gemini),
|
|
131
|
+
* or populated exactly once (OpenAI's final chunk; Anthropic's input-here /
|
|
132
|
+
* output-there split) — so the running max reconstructs the final total no matter
|
|
133
|
+
* which chunk carried which field. The max never invents a token; it only keeps
|
|
134
|
+
* the largest REAL count each field reached.
|
|
135
|
+
*/
|
|
136
|
+
export declare function mergeStreamUsage(a: Usage, b: Usage): Usage;
|
|
137
|
+
/**
|
|
138
|
+
* Accumulates the metered usage of one STREAMING call across its chunks.
|
|
139
|
+
*
|
|
140
|
+
* Feed every chunk to `observe` as the host iterates the stream, then call
|
|
141
|
+
* `finalize` once the stream is exhausted (or closed) to get the single `Usage`
|
|
142
|
+
* for the whole call — or `undefined` when the stream never carried a usage block
|
|
143
|
+
* (e.g. an OpenAI stream opened without `include_usage`, where there is genuinely
|
|
144
|
+
* no count to meter and inventing one would be a lie). Provider-agnostic: the
|
|
145
|
+
* per-chunk read + max-merge handles OpenAI, Anthropic and Gemini streams alike.
|
|
146
|
+
*/
|
|
147
|
+
export declare class StreamUsageAccumulator {
|
|
148
|
+
private provider?;
|
|
149
|
+
private model?;
|
|
150
|
+
private usage;
|
|
151
|
+
constructor(provider?: ProviderName, model?: string);
|
|
152
|
+
/** Fold one chunk's usage (if any) into the running total. Never throws. */
|
|
153
|
+
observe(chunk: Any): void;
|
|
154
|
+
/** The accumulated usage, or `undefined` if the stream carried no usage. */
|
|
155
|
+
finalize(): Usage | undefined;
|
|
156
|
+
}
|
|
157
|
+
export {};
|
|
158
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,eAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,eAAO,MAAM,SAAS,cAAc,CAAC;AACrC,eAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,eAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,eAAO,MAAM,OAAO,YAAY,CAAC;AAEjC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEpF,6EAA6E;AAC7E,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,kEAAkE;AAClE,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAmChE;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,YAAY,GAAG,SAAS,CAuBtE;AA0JD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,GAAG,EACb,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,KAAK,CAUP;AAeD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,GAAG,EACV,QAAQ,CAAC,EAAE,YAAY,EACvB,KAAK,CAAC,EAAE,MAAM,GACb,KAAK,GAAG,SAAS,CAoBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAc1D;AAED;;;;;;;;;GASG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,KAAK,CAAgC;gBAIjC,QAAQ,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM;IAKnD,4EAA4E;IAC5E,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAWzB,4EAA4E;IAC5E,QAAQ,IAAI,KAAK,GAAG,SAAS;CAG9B"}
|