@plurnk/plurnk-providers 1.5.0 → 1.6.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/.env.defaults +36 -22
- package/SPEC.md +133 -59
- package/dist/AiSdkProvider.d.ts +19 -26
- package/dist/AiSdkProvider.d.ts.map +1 -1
- package/dist/AiSdkProvider.js +318 -106
- package/dist/AiSdkProvider.js.map +1 -1
- package/dist/Mock.d.ts +4 -9
- package/dist/Mock.d.ts.map +1 -1
- package/dist/Mock.js +36 -9
- package/dist/Mock.js.map +1 -1
- package/dist/Pool.d.ts +2 -21
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +19 -14
- package/dist/Pool.js.map +1 -1
- package/dist/accounting.d.ts +5 -2
- package/dist/accounting.d.ts.map +1 -1
- package/dist/accounting.js +100 -16
- package/dist/accounting.js.map +1 -1
- package/dist/aiSdkTransport.d.ts +9 -2
- package/dist/aiSdkTransport.d.ts.map +1 -1
- package/dist/aiSdkTransport.js +160 -62
- package/dist/aiSdkTransport.js.map +1 -1
- package/dist/catalogProvider.d.ts +7 -3
- package/dist/catalogProvider.d.ts.map +1 -1
- package/dist/catalogProvider.js +30 -24
- package/dist/catalogProvider.js.map +1 -1
- package/dist/compatibleProvider.d.ts.map +1 -1
- package/dist/compatibleProvider.js +18 -7
- package/dist/compatibleProvider.js.map +1 -1
- package/dist/cost.d.ts +10 -10
- package/dist/cost.d.ts.map +1 -1
- package/dist/cost.js +90 -42
- package/dist/cost.js.map +1 -1
- package/dist/env.d.ts +5 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +30 -10
- package/dist/env.js.map +1 -1
- package/dist/errors.d.ts +14 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +58 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/ollama.js +3 -3
- package/dist/ollama.js.map +1 -1
- package/dist/sdkModels.d.ts +6 -2
- package/dist/sdkModels.d.ts.map +1 -1
- package/dist/sdkModels.js +38 -5
- package/dist/sdkModels.js.map +1 -1
- package/dist/types.d.ts +33 -31
- package/dist/types.d.ts.map +1 -1
- package/dist/usage.d.ts +21 -5
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +164 -83
- package/dist/usage.js.map +1 -1
- package/package.json +7 -6
- package/src/AiSdkProvider.test.ts +788 -191
- package/src/AiSdkProvider.ts +381 -124
- package/src/Mock.test.ts +37 -12
- package/src/Mock.ts +45 -14
- package/src/Pool.test.ts +19 -6
- package/src/Pool.ts +20 -16
- package/src/ProviderRegistry.test.ts +16 -11
- package/src/accounting.test.ts +58 -22
- package/src/accounting.ts +120 -18
- package/src/aiSdkTransport.test.ts +42 -49
- package/src/aiSdkTransport.ts +174 -62
- package/src/boundaries.test.ts +1 -0
- package/src/catalogProvider.test.ts +258 -22
- package/src/catalogProvider.ts +42 -27
- package/src/compatibleProvider.test.ts +6 -3
- package/src/compatibleProvider.ts +20 -7
- package/src/cost.test.ts +55 -36
- package/src/cost.ts +111 -50
- package/src/defaults.test.ts +13 -3
- package/src/env.test.ts +54 -5
- package/src/env.ts +43 -18
- package/src/errors.test.ts +47 -2
- package/src/errors.ts +67 -3
- package/src/index.ts +21 -5
- package/src/ollama.test.ts +4 -1
- package/src/ollama.ts +3 -3
- package/src/sdkModels.test.ts +76 -4
- package/src/sdkModels.ts +45 -7
- package/src/types.ts +77 -38
- package/src/usage.test.ts +112 -116
- package/src/usage.ts +209 -93
package/dist/types.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { ProviderNotice } from "./notices.ts";
|
|
2
2
|
import type { LanguageModel } from "ai";
|
|
3
3
|
import type { PluginAttribution, PluginAttributionContext, PluginAttributionSource } from "@plurnk/plurnk-meta";
|
|
4
|
-
import type { ProviderCost } from "@plurnk/plurnk-contracts";
|
|
4
|
+
import type { ProviderCost, ProviderRequestAccounting } from "@plurnk/plurnk-contracts";
|
|
5
|
+
export type { ProviderAccounting, ProviderCost, ProviderRequestAccounting, ProviderUsage, } from "@plurnk/plurnk-contracts";
|
|
5
6
|
export interface ChatMessage {
|
|
6
7
|
role: "system" | "user" | "assistant";
|
|
7
8
|
content: string;
|
|
8
9
|
}
|
|
10
|
+
export type ProviderCallKind = "emission" | "bare";
|
|
9
11
|
export type PromptTokenMeasurement = {
|
|
10
12
|
readonly kind: "exact" | "upper_bound";
|
|
11
13
|
readonly tokens: number;
|
|
@@ -16,25 +18,25 @@ export type PromptTokenMeasurement = {
|
|
|
16
18
|
readonly source: string;
|
|
17
19
|
readonly detail: string;
|
|
18
20
|
};
|
|
19
|
-
export
|
|
20
|
-
|
|
21
|
-
readonly completion: number;
|
|
22
|
-
readonly reasoning: number;
|
|
23
|
-
readonly cached: number;
|
|
24
|
-
readonly total: number;
|
|
25
|
-
}
|
|
26
|
-
export type AuthoritativeCharge = Extract<ProviderCost, {
|
|
27
|
-
kind: "authoritative";
|
|
21
|
+
export type ChargedCost = Extract<ProviderCost, {
|
|
22
|
+
kind: "charged";
|
|
28
23
|
}>;
|
|
29
24
|
export interface ProviderChargeEvidence {
|
|
30
25
|
readonly providerMetadata?: unknown;
|
|
26
|
+
readonly charge?: unknown;
|
|
31
27
|
readonly usage?: unknown;
|
|
32
28
|
readonly response: {
|
|
33
|
-
readonly id
|
|
29
|
+
readonly id?: string;
|
|
34
30
|
readonly headers?: Readonly<Record<string, string>>;
|
|
35
31
|
};
|
|
36
32
|
}
|
|
37
|
-
export type
|
|
33
|
+
export type ProviderCostNormalizer = (evidence: ProviderChargeEvidence) => ProviderCost | undefined;
|
|
34
|
+
export interface ProviderRequestIdentity {
|
|
35
|
+
readonly provider: string;
|
|
36
|
+
readonly model: string;
|
|
37
|
+
}
|
|
38
|
+
export type ProviderRequestSettlement = (accounting: ProviderRequestAccounting) => Promise<void>;
|
|
39
|
+
export type ProviderRequestObserver = (identity: ProviderRequestIdentity) => Promise<ProviderRequestSettlement>;
|
|
38
40
|
export type FinishReason = "stop" | "length" | "tool_calls" | "content_filter" | null;
|
|
39
41
|
export type ProviderAttemptFinishReason = FinishReason | "resource_interrupted";
|
|
40
42
|
export interface TokenAlternative {
|
|
@@ -58,7 +60,6 @@ export interface ProviderAssistant<TFinish extends ProviderAttemptFinishReason =
|
|
|
58
60
|
readonly content: string;
|
|
59
61
|
readonly reasoning: string | null;
|
|
60
62
|
readonly reasoningEncrypted?: ReadonlyArray<ProviderEncryptedReasoningItem>;
|
|
61
|
-
readonly usage: ProviderUsage;
|
|
62
63
|
readonly finishReason: TFinish;
|
|
63
64
|
readonly model: string;
|
|
64
65
|
readonly logprobs?: readonly TokenLogprob[];
|
|
@@ -72,30 +73,33 @@ export interface GrammarEvidence {
|
|
|
72
73
|
export interface ProviderResponse<TFinish extends ProviderAttemptFinishReason = FinishReason> {
|
|
73
74
|
readonly assistant: ProviderAssistant<TFinish>;
|
|
74
75
|
readonly assistantRaw: unknown;
|
|
75
|
-
readonly
|
|
76
|
+
readonly accounting: readonly ProviderRequestAccounting[];
|
|
76
77
|
readonly grammarEvidence?: GrammarEvidence;
|
|
77
78
|
readonly meta?: Record<string, unknown>;
|
|
78
79
|
readonly rawBody?: unknown;
|
|
79
80
|
readonly notices?: readonly ProviderNotice[];
|
|
80
81
|
}
|
|
81
82
|
export type ProviderAttempt = ProviderResponse<ProviderAttemptFinishReason>;
|
|
83
|
+
export interface ProviderGenerateArgs {
|
|
84
|
+
readonly messages: ChatMessage[];
|
|
85
|
+
readonly workerId: string;
|
|
86
|
+
readonly primaryWorkerId?: string;
|
|
87
|
+
readonly signal?: AbortSignal;
|
|
88
|
+
readonly grammar?: string;
|
|
89
|
+
readonly maxTokens?: number;
|
|
90
|
+
readonly attributions?: string[];
|
|
91
|
+
readonly client?: string;
|
|
92
|
+
readonly strikes?: number;
|
|
93
|
+
readonly workspaceId?: string;
|
|
94
|
+
readonly loop?: number;
|
|
95
|
+
readonly turn?: number;
|
|
96
|
+
readonly sampling?: Record<string, unknown>;
|
|
97
|
+
readonly observeRequest?: ProviderRequestObserver;
|
|
98
|
+
readonly callKind?: ProviderCallKind;
|
|
99
|
+
}
|
|
82
100
|
export interface Provider {
|
|
83
101
|
attributions?(context: PluginAttributionContext): PluginAttribution;
|
|
84
|
-
generate(args:
|
|
85
|
-
messages: ChatMessage[];
|
|
86
|
-
workerId: string;
|
|
87
|
-
primaryWorkerId?: string;
|
|
88
|
-
signal?: AbortSignal;
|
|
89
|
-
grammar?: string;
|
|
90
|
-
maxTokens?: number;
|
|
91
|
-
attributions?: string[];
|
|
92
|
-
client?: string;
|
|
93
|
-
strikes?: number;
|
|
94
|
-
workspaceId?: string;
|
|
95
|
-
loop?: number;
|
|
96
|
-
turn?: number;
|
|
97
|
-
sampling?: Record<string, unknown>;
|
|
98
|
-
}): Promise<ProviderResponse>;
|
|
102
|
+
generate(args: ProviderGenerateArgs): Promise<ProviderResponse>;
|
|
99
103
|
readonly contextWindow: number | null;
|
|
100
104
|
readonly model: string;
|
|
101
105
|
readonly servedModel?: string;
|
|
@@ -105,8 +109,6 @@ export interface Provider {
|
|
|
105
109
|
readonly completionReserve?: number | null;
|
|
106
110
|
countPromptTokens(messages: readonly ChatMessage[], signal?: AbortSignal): Promise<PromptTokenMeasurement>;
|
|
107
111
|
tokenize?(text: string): Promise<number[]>;
|
|
108
|
-
calculateCost(usage: ProviderUsage): number;
|
|
109
|
-
calculateCharge?(usage: ProviderUsage): Exclude<ProviderCost, AuthoritativeCharge>;
|
|
110
112
|
}
|
|
111
113
|
export interface ProviderOptions {
|
|
112
114
|
readonly baseUrl?: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EACR,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/usage.d.ts
CHANGED
|
@@ -1,25 +1,41 @@
|
|
|
1
1
|
import type { ProviderUsage } from "./types.ts";
|
|
2
2
|
export type RawUsage = {
|
|
3
|
+
input_tokens?: number;
|
|
4
|
+
output_tokens?: number;
|
|
3
5
|
prompt_tokens?: number;
|
|
4
6
|
completion_tokens?: number;
|
|
5
7
|
total_tokens?: number;
|
|
6
8
|
cached_tokens?: number;
|
|
9
|
+
cache_creation_input_tokens?: number;
|
|
10
|
+
cache_read_input_tokens?: number;
|
|
7
11
|
prompt_cache_hit_tokens?: number;
|
|
8
12
|
prompt_cache_miss_tokens?: number;
|
|
9
13
|
prompt_tokens_details?: {
|
|
10
14
|
cached_tokens?: number;
|
|
15
|
+
cache_read_tokens?: number;
|
|
16
|
+
cache_write_tokens?: number;
|
|
17
|
+
};
|
|
18
|
+
input_tokens_details?: {
|
|
19
|
+
cached_tokens?: number;
|
|
20
|
+
cache_read_tokens?: number;
|
|
21
|
+
cache_write_tokens?: number;
|
|
11
22
|
};
|
|
12
23
|
completion_tokens_details?: {
|
|
13
24
|
reasoning_tokens?: number;
|
|
14
25
|
};
|
|
26
|
+
output_tokens_details?: {
|
|
27
|
+
reasoning_tokens?: number;
|
|
28
|
+
};
|
|
29
|
+
reasoning_tokens?: number;
|
|
15
30
|
};
|
|
16
|
-
export declare const
|
|
17
|
-
export declare const normalizeUsage: (raw: RawUsage | null | undefined
|
|
31
|
+
export declare const validateProviderUsage: (usage: ProviderUsage) => ProviderUsage;
|
|
32
|
+
export declare const normalizeUsage: (raw: RawUsage | null | undefined) => ProviderUsage | undefined;
|
|
18
33
|
export type TokenRates = {
|
|
19
34
|
input: number;
|
|
20
35
|
output: number;
|
|
21
|
-
|
|
36
|
+
cacheRead?: number;
|
|
37
|
+
cacheWrite?: number;
|
|
22
38
|
};
|
|
23
|
-
export declare const
|
|
24
|
-
export declare const
|
|
39
|
+
export declare const canonicalDecimal: (coefficient: bigint, scale: number) => string;
|
|
40
|
+
export declare const calculateCostUsdDecimal: (usage: ProviderUsage, rates: TokenRates) => string | null;
|
|
25
41
|
//# sourceMappingURL=usage.d.ts.map
|
package/dist/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,qBAAqB,CAAC,EAAE;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,oBAAoB,CAAC,EAAE;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,yBAAyB,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,qBAAqB,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAgBF,eAAO,MAAM,qBAAqB,UAAW,aAAa,KAAG,aAqD5D,CAAC;AAEF,eAAO,MAAM,cAAc,QAAS,QAAQ,GAAG,IAAI,GAAG,SAAS,KAAG,aAAa,GAAG,SA6FjF,CAAC;AAIF,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAiBF,eAAO,MAAM,gBAAgB,gBAAiB,MAAM,SAAS,MAAM,KAAG,MAMrE,CAAC;AAEF,eAAO,MAAM,uBAAuB,UACzB,aAAa,SACb,UAAU,KAClB,MAAM,GAAG,IAqBX,CAAC"}
|
package/dist/usage.js
CHANGED
|
@@ -1,71 +1,149 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
// output count. Attribute that count without disturbing an upstream split.
|
|
16
|
-
export const attributeUnitemizedReasoning = (usage, reasoningText, contentText) => {
|
|
17
|
-
if (usage.reasoning !== 0 || usage.completion === 0 || reasoningText.length === 0)
|
|
18
|
-
return usage;
|
|
19
|
-
const reasoning = contentText.length === 0
|
|
20
|
-
? usage.completion
|
|
21
|
-
: Math.round(usage.completion * reasoningText.length / (reasoningText.length + contentText.length));
|
|
22
|
-
return {
|
|
23
|
-
...usage,
|
|
24
|
-
completion: usage.completion - reasoning,
|
|
25
|
-
reasoning,
|
|
26
|
-
};
|
|
1
|
+
// Provider usage normalization. The public shape follows {§provider-usage}:
|
|
2
|
+
// input/output totals own their optional cache/reasoning details, absence is
|
|
3
|
+
// unknown, and no token category is inferred from text length.
|
|
4
|
+
const knownTokens = (value, name) => {
|
|
5
|
+
if (value === undefined)
|
|
6
|
+
return undefined;
|
|
7
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
8
|
+
throw new TypeError(`${name} must be a non-negative safe integer`);
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
};
|
|
12
|
+
const nonEmptyDetails = (details) => {
|
|
13
|
+
const entries = Object.entries(details).filter((entry) => entry[1] !== undefined);
|
|
14
|
+
return entries.length === 0 ? undefined : Object.fromEntries(entries);
|
|
27
15
|
};
|
|
28
|
-
export const
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const reasoningDetail = raw?.completion_tokens_details?.reasoning_tokens;
|
|
38
|
-
let completion;
|
|
39
|
-
let reasoning;
|
|
40
|
-
if (reasoningDetail !== undefined) {
|
|
41
|
-
reasoning = reasoningDetail;
|
|
42
|
-
// reasoning_tokens is reported two incompatible ways when detailed. OpenAI
|
|
43
|
-
// o-series folds it INTO completion_tokens (subset: total = prompt + completion,
|
|
44
|
-
// so completion must have reasoning subtracted out). xAI/Grok reports it
|
|
45
|
-
// ADDITIVE to a visible-only completion_tokens (total = prompt + completion +
|
|
46
|
-
// reasoning), where subtracting wrongly zeroes the visible output. Tell
|
|
47
|
-
// them apart by the total identity; with no total reported, fall back on the
|
|
48
|
-
// impossible-subset signal — reasoning can't exceed the completion it's a
|
|
49
|
-
// subset of.
|
|
50
|
-
const additive = reportedTotal > 0
|
|
51
|
-
? reportedTotal === prompt + completionRaw + reasoningDetail
|
|
52
|
-
: completionRaw < reasoningDetail;
|
|
53
|
-
completion = additive ? completionRaw : Math.max(0, completionRaw - reasoningDetail);
|
|
16
|
+
export const validateProviderUsage = (usage) => {
|
|
17
|
+
const input = knownTokens(usage.inputTokens, "provider usage.inputTokens");
|
|
18
|
+
const output = knownTokens(usage.outputTokens, "provider usage.outputTokens");
|
|
19
|
+
const total = knownTokens(usage.totalTokens, "provider usage.totalTokens");
|
|
20
|
+
const inputDetails = usage.inputTokenDetails;
|
|
21
|
+
const outputDetails = usage.outputTokenDetails;
|
|
22
|
+
if (input === undefined && output === undefined && total === undefined
|
|
23
|
+
&& inputDetails === undefined && outputDetails === undefined) {
|
|
24
|
+
throw new TypeError("provider usage must contain at least one known quantity");
|
|
54
25
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
reasoning = reportedTotal > 0 ? Math.max(0, reportedTotal - prompt - completionRaw) : 0;
|
|
59
|
-
completion = completionRaw;
|
|
26
|
+
if (input !== undefined && output !== undefined && total !== undefined
|
|
27
|
+
&& total !== input + output) {
|
|
28
|
+
throw new TypeError("provider usage.totalTokens must equal inputTokens + outputTokens");
|
|
60
29
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
30
|
+
if (inputDetails !== undefined) {
|
|
31
|
+
const values = [
|
|
32
|
+
knownTokens(inputDetails.noCacheTokens, "provider usage.inputTokenDetails.noCacheTokens"),
|
|
33
|
+
knownTokens(inputDetails.cacheReadTokens, "provider usage.inputTokenDetails.cacheReadTokens"),
|
|
34
|
+
knownTokens(inputDetails.cacheWriteTokens, "provider usage.inputTokenDetails.cacheWriteTokens"),
|
|
35
|
+
];
|
|
36
|
+
if (values.every((value) => value === undefined)) {
|
|
37
|
+
throw new TypeError("provider usage.inputTokenDetails must contain a known quantity");
|
|
38
|
+
}
|
|
39
|
+
const known = values.filter((value) => value !== undefined);
|
|
40
|
+
if (input !== undefined && known.some((value) => value > input)) {
|
|
41
|
+
throw new TypeError("provider input-token detail must not exceed inputTokens");
|
|
42
|
+
}
|
|
43
|
+
if (input !== undefined && values.every((value) => value !== undefined)
|
|
44
|
+
&& known.reduce((sum, value) => sum + value, 0) !== input) {
|
|
45
|
+
throw new TypeError("complete provider input-token details must sum to inputTokens");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (outputDetails !== undefined) {
|
|
49
|
+
const values = [
|
|
50
|
+
knownTokens(outputDetails.textTokens, "provider usage.outputTokenDetails.textTokens"),
|
|
51
|
+
knownTokens(outputDetails.reasoningTokens, "provider usage.outputTokenDetails.reasoningTokens"),
|
|
52
|
+
];
|
|
53
|
+
if (values.every((value) => value === undefined)) {
|
|
54
|
+
throw new TypeError("provider usage.outputTokenDetails must contain a known quantity");
|
|
55
|
+
}
|
|
56
|
+
const known = values.filter((value) => value !== undefined);
|
|
57
|
+
if (output !== undefined && known.some((value) => value > output)) {
|
|
58
|
+
throw new TypeError("provider output-token detail must not exceed outputTokens");
|
|
59
|
+
}
|
|
60
|
+
if (output !== undefined && values.every((value) => value !== undefined)
|
|
61
|
+
&& known.reduce((sum, value) => sum + value, 0) !== output) {
|
|
62
|
+
throw new TypeError("complete provider output-token details must sum to outputTokens");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return usage;
|
|
66
|
+
};
|
|
67
|
+
export const normalizeUsage = (raw) => {
|
|
68
|
+
if (raw === null || raw === undefined)
|
|
69
|
+
return undefined;
|
|
70
|
+
const inputTokens = knownTokens(raw.input_tokens ?? raw.prompt_tokens, "provider usage input tokens");
|
|
71
|
+
const rawOutputTokens = knownTokens(raw.output_tokens ?? raw.completion_tokens, "provider usage output tokens");
|
|
72
|
+
const reportedTotal = knownTokens(raw.total_tokens, "provider usage total tokens");
|
|
73
|
+
const reasoningTokens = knownTokens(raw.output_tokens_details?.reasoning_tokens
|
|
74
|
+
?? raw.completion_tokens_details?.reasoning_tokens
|
|
75
|
+
?? raw.reasoning_tokens, "provider usage reasoning tokens");
|
|
76
|
+
let outputTokens = rawOutputTokens;
|
|
77
|
+
let textTokens;
|
|
78
|
+
let normalizedReasoning = reasoningTokens;
|
|
79
|
+
if (inputTokens !== undefined && rawOutputTokens !== undefined && reportedTotal !== undefined) {
|
|
80
|
+
if (reportedTotal === inputTokens + rawOutputTokens) {
|
|
81
|
+
outputTokens = rawOutputTokens;
|
|
82
|
+
if (reasoningTokens !== undefined)
|
|
83
|
+
textTokens = rawOutputTokens - reasoningTokens;
|
|
84
|
+
}
|
|
85
|
+
else if (reasoningTokens !== undefined
|
|
86
|
+
&& reportedTotal === inputTokens + rawOutputTokens + reasoningTokens) {
|
|
87
|
+
outputTokens = rawOutputTokens + reasoningTokens;
|
|
88
|
+
textTokens = rawOutputTokens;
|
|
89
|
+
}
|
|
90
|
+
else if (reportedTotal >= inputTokens + rawOutputTokens) {
|
|
91
|
+
outputTokens = reportedTotal - inputTokens;
|
|
92
|
+
normalizedReasoning = outputTokens - rawOutputTokens;
|
|
93
|
+
textTokens = rawOutputTokens;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
throw new TypeError("provider usage total is inconsistent with input and output tokens");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if (rawOutputTokens !== undefined && reasoningTokens !== undefined) {
|
|
100
|
+
if (reasoningTokens > rawOutputTokens) {
|
|
101
|
+
outputTokens = rawOutputTokens + reasoningTokens;
|
|
102
|
+
textTokens = rawOutputTokens;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
textTokens = rawOutputTokens - reasoningTokens;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (outputTokens === undefined && inputTokens !== undefined && reportedTotal !== undefined) {
|
|
109
|
+
if (reportedTotal < inputTokens) {
|
|
110
|
+
throw new TypeError("provider usage total must not be less than input tokens");
|
|
111
|
+
}
|
|
112
|
+
outputTokens = reportedTotal - inputTokens;
|
|
113
|
+
}
|
|
114
|
+
const totalTokens = reportedTotal
|
|
115
|
+
?? (inputTokens !== undefined && outputTokens !== undefined
|
|
116
|
+
? inputTokens + outputTokens
|
|
117
|
+
: undefined);
|
|
118
|
+
const cacheReadTokens = knownTokens(raw.input_tokens_details?.cache_read_tokens
|
|
119
|
+
?? raw.input_tokens_details?.cached_tokens
|
|
120
|
+
?? raw.prompt_tokens_details?.cache_read_tokens
|
|
121
|
+
?? raw.prompt_tokens_details?.cached_tokens
|
|
122
|
+
?? raw.cache_read_input_tokens
|
|
123
|
+
?? raw.prompt_cache_hit_tokens
|
|
124
|
+
?? raw.cached_tokens, "provider usage cache-read tokens");
|
|
125
|
+
const cacheWriteTokens = knownTokens(raw.input_tokens_details?.cache_write_tokens
|
|
126
|
+
?? raw.prompt_tokens_details?.cache_write_tokens
|
|
127
|
+
?? raw.cache_creation_input_tokens, "provider usage cache-write tokens");
|
|
128
|
+
const explicitNoCacheTokens = knownTokens(raw.prompt_cache_miss_tokens, "provider usage non-cache tokens");
|
|
129
|
+
const noCacheTokens = explicitNoCacheTokens
|
|
130
|
+
?? (inputTokens !== undefined && cacheReadTokens !== undefined && cacheWriteTokens !== undefined
|
|
131
|
+
? inputTokens - cacheReadTokens - cacheWriteTokens
|
|
132
|
+
: undefined);
|
|
133
|
+
const usage = {
|
|
134
|
+
...(inputTokens === undefined ? {} : { inputTokens }),
|
|
135
|
+
...(outputTokens === undefined ? {} : { outputTokens }),
|
|
136
|
+
...(totalTokens === undefined ? {} : { totalTokens }),
|
|
137
|
+
...(nonEmptyDetails({ noCacheTokens, cacheReadTokens, cacheWriteTokens }) === undefined
|
|
138
|
+
? {}
|
|
139
|
+
: { inputTokenDetails: nonEmptyDetails({ noCacheTokens, cacheReadTokens, cacheWriteTokens }) }),
|
|
140
|
+
...(nonEmptyDetails({ textTokens, reasoningTokens: normalizedReasoning }) === undefined
|
|
141
|
+
? {}
|
|
142
|
+
: { outputTokenDetails: nonEmptyDetails({ textTokens, reasoningTokens: normalizedReasoning }) }),
|
|
143
|
+
};
|
|
144
|
+
if (Object.keys(usage).length === 0)
|
|
145
|
+
return undefined;
|
|
146
|
+
return validateProviderUsage(usage);
|
|
69
147
|
};
|
|
70
148
|
const decimalParts = (value) => {
|
|
71
149
|
if (!Number.isFinite(value) || value < 0) {
|
|
@@ -82,7 +160,7 @@ const decimalParts = (value) => {
|
|
|
82
160
|
? { coefficient: coefficient * 10n ** BigInt(-scale), scale: 0 }
|
|
83
161
|
: { coefficient, scale };
|
|
84
162
|
};
|
|
85
|
-
const
|
|
163
|
+
export const canonicalDecimal = (coefficient, scale) => {
|
|
86
164
|
const digits = String(coefficient).padStart(scale + 1, "0");
|
|
87
165
|
if (scale === 0)
|
|
88
166
|
return digits;
|
|
@@ -90,24 +168,27 @@ const decimalString = (coefficient, scale) => {
|
|
|
90
168
|
const fraction = digits.slice(-scale).replace(/0+$/, "");
|
|
91
169
|
return fraction.length === 0 ? integer : `${integer}.${fraction}`;
|
|
92
170
|
};
|
|
93
|
-
// Models.dev rates are decimal USD-per-million values. Calculate their
|
|
94
|
-
// projection as decimal arithmetic so ProviderCost preserves the table and
|
|
95
|
-
// exact response counts without binary floating-point artifacts.
|
|
96
171
|
export const calculateCostUsdDecimal = (usage, rates) => {
|
|
97
|
-
|
|
172
|
+
validateProviderUsage(usage);
|
|
173
|
+
if (usage.inputTokens === undefined || usage.outputTokens === undefined)
|
|
174
|
+
return null;
|
|
175
|
+
const cacheReadRate = rates.cacheRead ?? rates.input;
|
|
176
|
+
const cacheWriteRate = rates.cacheWrite ?? rates.input;
|
|
177
|
+
const cacheReadTokens = usage.inputTokenDetails?.cacheReadTokens;
|
|
178
|
+
const cacheWriteTokens = usage.inputTokenDetails?.cacheWriteTokens;
|
|
179
|
+
if (cacheReadRate !== rates.input && cacheReadTokens === undefined)
|
|
180
|
+
return null;
|
|
181
|
+
if (cacheWriteRate !== rates.input && cacheWriteTokens === undefined)
|
|
182
|
+
return null;
|
|
183
|
+
const parts = [rates.input, rates.output, cacheReadRate, cacheWriteRate].map(decimalParts);
|
|
98
184
|
const rateScale = Math.max(...parts.map(({ scale }) => scale));
|
|
99
|
-
const [input,
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
+ BigInt(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
// The one cost formula every provider uses: non-cached prompt at the input
|
|
108
|
-
// rate, cached prompt at the cache rate, and billable output (completion +
|
|
109
|
-
// reasoning) at the output rate.
|
|
110
|
-
export const calculateCostUsd = (usage, rates) => {
|
|
111
|
-
return Number(calculateCostUsdDecimal(usage, rates));
|
|
185
|
+
const [input, output, cacheRead, cacheWrite] = parts.map(({ coefficient, scale }) => coefficient * 10n ** BigInt(rateScale - scale));
|
|
186
|
+
const coefficient = BigInt(usage.inputTokens) * input
|
|
187
|
+
+ BigInt(usage.outputTokens) * output
|
|
188
|
+
+ BigInt(cacheReadTokens ?? 0) * (cacheRead - input)
|
|
189
|
+
+ BigInt(cacheWriteTokens ?? 0) * (cacheWrite - input);
|
|
190
|
+
if (coefficient < 0n)
|
|
191
|
+
throw new TypeError("provider token-rate details produced a negative estimate");
|
|
192
|
+
return canonicalDecimal(coefficient, rateScale + 6);
|
|
112
193
|
};
|
|
113
194
|
//# sourceMappingURL=usage.js.map
|
package/dist/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plurnk/plurnk-providers",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "PLURNK's stable model-provider contract and AI SDK adapter.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"plurnk",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"dependencies": {
|
|
62
62
|
"@ai-sdk/amazon-bedrock": "^5.0.0",
|
|
63
63
|
"@ai-sdk/anthropic": "^4.0.0",
|
|
64
|
+
"@ai-sdk/cerebras": "^3.0.0",
|
|
64
65
|
"@ai-sdk/deepinfra": "^3.0.0",
|
|
65
66
|
"@ai-sdk/google": "^4.0.0",
|
|
66
67
|
"@ai-sdk/groq": "^4.0.0",
|
|
@@ -70,11 +71,11 @@
|
|
|
70
71
|
"@ai-sdk/togetherai": "^3.0.0",
|
|
71
72
|
"@ai-sdk/xai": "^4.0.0",
|
|
72
73
|
"@openrouter/ai-sdk-provider": "^3.0.0",
|
|
73
|
-
"@plurnk/gbnf": "1.
|
|
74
|
-
"@plurnk/plurnk-aliases": "1.
|
|
75
|
-
"@plurnk/plurnk-contracts": "1.
|
|
76
|
-
"@plurnk/plurnk-meta": "1.
|
|
77
|
-
"@plurnk/plurnk-models": "1.
|
|
74
|
+
"@plurnk/gbnf": "1.6.0",
|
|
75
|
+
"@plurnk/plurnk-aliases": "1.6.0",
|
|
76
|
+
"@plurnk/plurnk-contracts": "1.6.0",
|
|
77
|
+
"@plurnk/plurnk-meta": "1.6.0",
|
|
78
|
+
"@plurnk/plurnk-models": "1.6.0",
|
|
78
79
|
"ai": "^7.0.37",
|
|
79
80
|
"zod": "^3.25.76"
|
|
80
81
|
}
|