@slkiser/opencode-quota 2.3.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.
- package/README.md +35 -3
- package/dist/data/modelsdev-pricing.min.json +462 -281
- package/dist/lib/modelsdev-pricing.d.ts +57 -3
- package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
- package/dist/lib/modelsdev-pricing.js +510 -4
- package/dist/lib/modelsdev-pricing.js.map +1 -1
- package/dist/lib/quota-stats.d.ts.map +1 -1
- package/dist/lib/quota-stats.js +89 -26
- package/dist/lib/quota-stats.js.map +1 -1
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +22 -1
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +42 -1
- package/dist/plugin.js.map +1 -1
- package/package.json +3 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type OpencodeRuntimeDirs } from "./opencode-runtime-paths.js";
|
|
1
2
|
export type CostBuckets = {
|
|
2
3
|
input?: number;
|
|
3
4
|
output?: number;
|
|
@@ -5,7 +6,7 @@ export type CostBuckets = {
|
|
|
5
6
|
cache_write?: number;
|
|
6
7
|
reasoning?: number;
|
|
7
8
|
};
|
|
8
|
-
type
|
|
9
|
+
export type PricingSnapshot = {
|
|
9
10
|
_meta: {
|
|
10
11
|
source: string;
|
|
11
12
|
generatedAt: number;
|
|
@@ -14,7 +15,60 @@ type Snapshot = {
|
|
|
14
15
|
};
|
|
15
16
|
providers: Record<string, Record<string, CostBuckets>>;
|
|
16
17
|
};
|
|
17
|
-
export declare
|
|
18
|
+
export declare const DEFAULT_PRICING_SNAPSHOT_MAX_AGE_MS: number;
|
|
19
|
+
export type PricingSnapshotHealth = {
|
|
20
|
+
generatedAt: number;
|
|
21
|
+
ageMs: number;
|
|
22
|
+
maxAgeMs: number;
|
|
23
|
+
stale: boolean;
|
|
24
|
+
};
|
|
25
|
+
export interface PricingRefreshStateV1 {
|
|
26
|
+
version: 1;
|
|
27
|
+
updatedAt: number;
|
|
28
|
+
lastAttemptAt?: number;
|
|
29
|
+
lastSuccessAt?: number;
|
|
30
|
+
lastFailureAt?: number;
|
|
31
|
+
lastResult?: "success" | "not_modified" | "skipped_fresh" | "skipped_throttled" | "failed";
|
|
32
|
+
lastError?: string;
|
|
33
|
+
etag?: string;
|
|
34
|
+
lastModified?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface PricingRefreshPolicy {
|
|
37
|
+
enabled: boolean;
|
|
38
|
+
maxAgeMs: number;
|
|
39
|
+
minAttemptIntervalMs: number;
|
|
40
|
+
timeoutMs: number;
|
|
41
|
+
}
|
|
42
|
+
export interface PricingRefreshOptions {
|
|
43
|
+
reason?: "init" | "tokens" | "status";
|
|
44
|
+
force?: boolean;
|
|
45
|
+
nowMs?: number;
|
|
46
|
+
maxAgeMs?: number;
|
|
47
|
+
minAttemptIntervalMs?: number;
|
|
48
|
+
timeoutMs?: number;
|
|
49
|
+
runtimeDirs?: OpencodeRuntimeDirs;
|
|
50
|
+
fetchFn?: typeof fetch;
|
|
51
|
+
bootstrapSnapshotOverride?: PricingSnapshot;
|
|
52
|
+
providerAllowlist?: string[];
|
|
53
|
+
}
|
|
54
|
+
export interface PricingRefreshResult {
|
|
55
|
+
attempted: boolean;
|
|
56
|
+
updated: boolean;
|
|
57
|
+
state: PricingRefreshStateV1;
|
|
58
|
+
error?: string;
|
|
59
|
+
reason?: string;
|
|
60
|
+
}
|
|
61
|
+
export declare function getPricingRefreshPolicy(env?: NodeJS.ProcessEnv): PricingRefreshPolicy;
|
|
62
|
+
export declare function getRuntimePricingSnapshotPath(runtimeDirs?: OpencodeRuntimeDirs): string;
|
|
63
|
+
export declare function getRuntimePricingRefreshStatePath(runtimeDirs?: OpencodeRuntimeDirs): string;
|
|
64
|
+
export declare function readPricingRefreshState(runtimeDirs?: OpencodeRuntimeDirs): Promise<PricingRefreshStateV1 | null>;
|
|
65
|
+
export declare function maybeRefreshPricingSnapshot(opts?: PricingRefreshOptions): Promise<PricingRefreshResult>;
|
|
66
|
+
export declare function getPricingSnapshotMeta(): PricingSnapshot["_meta"];
|
|
67
|
+
export declare function getPricingSnapshotSource(): "runtime" | "bundled" | "empty";
|
|
68
|
+
export declare function getPricingSnapshotHealth(opts?: {
|
|
69
|
+
nowMs?: number;
|
|
70
|
+
maxAgeMs?: number;
|
|
71
|
+
}): PricingSnapshotHealth;
|
|
18
72
|
export declare function hasProvider(providerId: string): boolean;
|
|
19
73
|
export declare function isModelsDevProviderId(providerId: string): boolean;
|
|
20
74
|
export declare function hasModel(providerId: string, modelId: string): boolean;
|
|
@@ -29,5 +83,5 @@ export declare function listModelsForProvider(providerId: string): string[];
|
|
|
29
83
|
export declare function listProvidersForModelId(modelId: string): string[];
|
|
30
84
|
export declare function lookupCost(providerId: string, modelId: string): CostBuckets | null;
|
|
31
85
|
export declare function hasCost(providerId: string, modelId: string): boolean;
|
|
32
|
-
export
|
|
86
|
+
export declare function __resetPricingSnapshotForTests(): void;
|
|
33
87
|
//# sourceMappingURL=modelsdev-pricing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelsdev-pricing.d.ts","sourceRoot":"","sources":["../../src/lib/modelsdev-pricing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"modelsdev-pricing.d.ts","sourceRoot":"","sources":["../../src/lib/modelsdev-pricing.ts"],"names":[],"mappings":"AAKA,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAU/F,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;CACxD,CAAC;AAEF,eAAO,MAAM,mCAAmC,QAA0B,CAAC;AAE3E,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,GAAG,cAAc,GAAG,eAAe,GAAG,mBAAmB,GAAG,QAAQ,CAAC;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,yBAAyB,CAAC,EAAE,eAAe,CAAC;IAC5C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA2CD,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,oBAAoB,CAOlG;AA6ED,wBAAgB,6BAA6B,CAAC,WAAW,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAGvF;AAED,wBAAgB,iCAAiC,CAAC,WAAW,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAG3F;AA4ID,wBAAsB,uBAAuB,CAC3C,WAAW,CAAC,EAAE,mBAAmB,GAChC,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAEvC;AAsGD,wBAAsB,2BAA2B,CAC/C,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CA4L/B;AAED,wBAAgB,sBAAsB,IAAI,eAAe,CAAC,OAAO,CAAC,CAEjE;AAED,wBAAgB,wBAAwB,IAAI,SAAS,GAAG,SAAS,GAAG,OAAO,CAG1E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,qBAAqB,CAWxB;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAItE;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAElE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAGjE;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAMlF;AAED,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,8BAA8B,IAAI,IAAI,CAMrD"}
|
|
@@ -1,13 +1,172 @@
|
|
|
1
1
|
import { readFileSync } from "fs";
|
|
2
|
+
import { mkdir, readFile, rename, rm, writeFile } from "fs/promises";
|
|
3
|
+
import { dirname, join } from "path";
|
|
4
|
+
import { fetchWithTimeout } from "./http.js";
|
|
5
|
+
import { getOpencodeRuntimeDirs } from "./opencode-runtime-paths.js";
|
|
6
|
+
const SOURCE_URL = "https://models.dev/api.json";
|
|
7
|
+
const DEFAULT_MODELSDEV_PROVIDERS = ["anthropic", "google", "moonshotai", "openai", "xai", "zai"];
|
|
8
|
+
const COST_KEYS = ["input", "output", "cache_read", "cache_write"];
|
|
9
|
+
const RUNTIME_SNAPSHOT_FILENAME = "modelsdev-pricing.runtime.min.json";
|
|
10
|
+
const RUNTIME_REFRESH_STATE_FILENAME = "modelsdev-pricing.refresh-state.json";
|
|
11
|
+
const DEFAULT_REFRESH_MIN_ATTEMPT_INTERVAL_MS = 6 * 60 * 60 * 1000;
|
|
12
|
+
const DEFAULT_REFRESH_TIMEOUT_MS = 6_000;
|
|
13
|
+
export const DEFAULT_PRICING_SNAPSHOT_MAX_AGE_MS = 3 * 24 * 60 * 60 * 1000;
|
|
14
|
+
const EMPTY_SNAPSHOT = {
|
|
15
|
+
_meta: {
|
|
16
|
+
source: "none",
|
|
17
|
+
generatedAt: 0,
|
|
18
|
+
providers: [],
|
|
19
|
+
units: "USD per 1M tokens",
|
|
20
|
+
},
|
|
21
|
+
providers: {},
|
|
22
|
+
};
|
|
2
23
|
let SNAPSHOT = null;
|
|
24
|
+
let SNAPSHOT_SOURCE = "bundled";
|
|
3
25
|
let MODEL_INDEX = null;
|
|
26
|
+
let REFRESH_IN_FLIGHT = null;
|
|
27
|
+
let PROCESS_REFRESH_CHECKED = false;
|
|
28
|
+
function asRecord(value) {
|
|
29
|
+
return value && typeof value === "object" ? value : null;
|
|
30
|
+
}
|
|
31
|
+
function sortRecordByKeys(obj) {
|
|
32
|
+
const out = {};
|
|
33
|
+
for (const key of Object.keys(obj).sort((a, b) => a.localeCompare(b))) {
|
|
34
|
+
out[key] = obj[key];
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
function parseEnabled(value) {
|
|
39
|
+
if (!value)
|
|
40
|
+
return true;
|
|
41
|
+
const normalized = value.trim().toLowerCase();
|
|
42
|
+
return !["0", "false", "no", "off"].includes(normalized);
|
|
43
|
+
}
|
|
44
|
+
function parseMaxAgeMs(value) {
|
|
45
|
+
if (!value)
|
|
46
|
+
return DEFAULT_PRICING_SNAPSHOT_MAX_AGE_MS;
|
|
47
|
+
const days = Number(value);
|
|
48
|
+
if (!Number.isFinite(days) || days <= 0)
|
|
49
|
+
return DEFAULT_PRICING_SNAPSHOT_MAX_AGE_MS;
|
|
50
|
+
return Math.floor(days * 24 * 60 * 60 * 1000);
|
|
51
|
+
}
|
|
52
|
+
export function getPricingRefreshPolicy(env = process.env) {
|
|
53
|
+
return {
|
|
54
|
+
enabled: parseEnabled(env.OPENCODE_QUOTA_PRICING_AUTO_REFRESH),
|
|
55
|
+
maxAgeMs: parseMaxAgeMs(env.OPENCODE_QUOTA_PRICING_MAX_AGE_DAYS),
|
|
56
|
+
minAttemptIntervalMs: DEFAULT_REFRESH_MIN_ATTEMPT_INTERVAL_MS,
|
|
57
|
+
timeoutMs: DEFAULT_REFRESH_TIMEOUT_MS,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function normalizeSnapshot(raw) {
|
|
61
|
+
const root = asRecord(raw);
|
|
62
|
+
if (!root)
|
|
63
|
+
return null;
|
|
64
|
+
const metaRaw = asRecord(root._meta);
|
|
65
|
+
const providersRaw = asRecord(root.providers);
|
|
66
|
+
if (!metaRaw || !providersRaw)
|
|
67
|
+
return null;
|
|
68
|
+
const generatedAt = Number(metaRaw.generatedAt);
|
|
69
|
+
if (!Number.isFinite(generatedAt) || generatedAt <= 0)
|
|
70
|
+
return null;
|
|
71
|
+
const providers = {};
|
|
72
|
+
for (const providerId of Object.keys(providersRaw)) {
|
|
73
|
+
const modelsRaw = asRecord(providersRaw[providerId]);
|
|
74
|
+
if (!modelsRaw)
|
|
75
|
+
continue;
|
|
76
|
+
const models = {};
|
|
77
|
+
for (const modelId of Object.keys(modelsRaw)) {
|
|
78
|
+
const modelRaw = asRecord(modelsRaw[modelId]);
|
|
79
|
+
if (!modelRaw)
|
|
80
|
+
continue;
|
|
81
|
+
const buckets = {};
|
|
82
|
+
const input = modelRaw.input;
|
|
83
|
+
const output = modelRaw.output;
|
|
84
|
+
const cacheRead = modelRaw.cache_read;
|
|
85
|
+
const cacheWrite = modelRaw.cache_write;
|
|
86
|
+
const reasoning = modelRaw.reasoning;
|
|
87
|
+
if (typeof input === "number" && Number.isFinite(input))
|
|
88
|
+
buckets.input = input;
|
|
89
|
+
if (typeof output === "number" && Number.isFinite(output))
|
|
90
|
+
buckets.output = output;
|
|
91
|
+
if (typeof cacheRead === "number" && Number.isFinite(cacheRead))
|
|
92
|
+
buckets.cache_read = cacheRead;
|
|
93
|
+
if (typeof cacheWrite === "number" && Number.isFinite(cacheWrite)) {
|
|
94
|
+
buckets.cache_write = cacheWrite;
|
|
95
|
+
}
|
|
96
|
+
if (typeof reasoning === "number" && Number.isFinite(reasoning))
|
|
97
|
+
buckets.reasoning = reasoning;
|
|
98
|
+
if (Object.keys(buckets).length > 0) {
|
|
99
|
+
models[modelId] = buckets;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (Object.keys(models).length > 0) {
|
|
103
|
+
providers[providerId] = sortRecordByKeys(models);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const providerList = Object.keys(providers).sort((a, b) => a.localeCompare(b));
|
|
107
|
+
return {
|
|
108
|
+
_meta: {
|
|
109
|
+
source: typeof metaRaw.source === "string" && metaRaw.source ? metaRaw.source : SOURCE_URL,
|
|
110
|
+
generatedAt: Math.trunc(generatedAt),
|
|
111
|
+
providers: providerList,
|
|
112
|
+
units: typeof metaRaw.units === "string" && metaRaw.units ? metaRaw.units : "USD per 1M tokens",
|
|
113
|
+
},
|
|
114
|
+
providers: sortRecordByKeys(providers),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function loadBundledSnapshotSync(override) {
|
|
118
|
+
if (override) {
|
|
119
|
+
return normalizeSnapshot(override) ?? EMPTY_SNAPSHOT;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const url = new URL("../data/modelsdev-pricing.min.json", import.meta.url);
|
|
123
|
+
const raw = readFileSync(url, "utf-8");
|
|
124
|
+
return normalizeSnapshot(JSON.parse(raw)) ?? EMPTY_SNAPSHOT;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return EMPTY_SNAPSHOT;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export function getRuntimePricingSnapshotPath(runtimeDirs) {
|
|
131
|
+
const dirs = runtimeDirs ?? getOpencodeRuntimeDirs();
|
|
132
|
+
return join(dirs.cacheDir, "opencode-quota", RUNTIME_SNAPSHOT_FILENAME);
|
|
133
|
+
}
|
|
134
|
+
export function getRuntimePricingRefreshStatePath(runtimeDirs) {
|
|
135
|
+
const dirs = runtimeDirs ?? getOpencodeRuntimeDirs();
|
|
136
|
+
return join(dirs.cacheDir, "opencode-quota", RUNTIME_REFRESH_STATE_FILENAME);
|
|
137
|
+
}
|
|
138
|
+
function loadRuntimeSnapshotSync(runtimeDirs) {
|
|
139
|
+
const path = getRuntimePricingSnapshotPath(runtimeDirs);
|
|
140
|
+
try {
|
|
141
|
+
const raw = readFileSync(path, "utf-8");
|
|
142
|
+
return normalizeSnapshot(JSON.parse(raw));
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function chooseSnapshot(params) {
|
|
149
|
+
const bundled = loadBundledSnapshotSync(params?.bootstrapSnapshotOverride);
|
|
150
|
+
const runtime = loadRuntimeSnapshotSync(params?.runtimeDirs);
|
|
151
|
+
if (runtime && runtime._meta.generatedAt >= bundled._meta.generatedAt) {
|
|
152
|
+
return { snapshot: runtime, source: "runtime" };
|
|
153
|
+
}
|
|
154
|
+
if (bundled._meta.generatedAt > 0) {
|
|
155
|
+
return { snapshot: bundled, source: "bundled" };
|
|
156
|
+
}
|
|
157
|
+
return { snapshot: EMPTY_SNAPSHOT, source: "empty" };
|
|
158
|
+
}
|
|
159
|
+
function setSnapshot(snapshot, source) {
|
|
160
|
+
SNAPSHOT = snapshot;
|
|
161
|
+
SNAPSHOT_SOURCE = source;
|
|
162
|
+
MODEL_INDEX = null;
|
|
163
|
+
}
|
|
4
164
|
function ensureLoaded() {
|
|
5
165
|
if (SNAPSHOT)
|
|
6
166
|
return SNAPSHOT;
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return SNAPSHOT;
|
|
167
|
+
const selected = chooseSnapshot();
|
|
168
|
+
setSnapshot(selected.snapshot, selected.source);
|
|
169
|
+
return selected.snapshot;
|
|
11
170
|
}
|
|
12
171
|
function ensureModelIndex() {
|
|
13
172
|
if (MODEL_INDEX)
|
|
@@ -27,9 +186,349 @@ function ensureModelIndex() {
|
|
|
27
186
|
MODEL_INDEX = idx;
|
|
28
187
|
return idx;
|
|
29
188
|
}
|
|
189
|
+
function normalizeRefreshState(raw) {
|
|
190
|
+
const obj = asRecord(raw);
|
|
191
|
+
if (!obj)
|
|
192
|
+
return null;
|
|
193
|
+
const version = Number(obj.version);
|
|
194
|
+
const updatedAt = Number(obj.updatedAt);
|
|
195
|
+
if (version !== 1 || !Number.isFinite(updatedAt) || updatedAt <= 0)
|
|
196
|
+
return null;
|
|
197
|
+
const out = {
|
|
198
|
+
version: 1,
|
|
199
|
+
updatedAt: Math.trunc(updatedAt),
|
|
200
|
+
};
|
|
201
|
+
const lastAttemptAt = Number(obj.lastAttemptAt);
|
|
202
|
+
const lastSuccessAt = Number(obj.lastSuccessAt);
|
|
203
|
+
const lastFailureAt = Number(obj.lastFailureAt);
|
|
204
|
+
if (Number.isFinite(lastAttemptAt) && lastAttemptAt > 0)
|
|
205
|
+
out.lastAttemptAt = Math.trunc(lastAttemptAt);
|
|
206
|
+
if (Number.isFinite(lastSuccessAt) && lastSuccessAt > 0)
|
|
207
|
+
out.lastSuccessAt = Math.trunc(lastSuccessAt);
|
|
208
|
+
if (Number.isFinite(lastFailureAt) && lastFailureAt > 0)
|
|
209
|
+
out.lastFailureAt = Math.trunc(lastFailureAt);
|
|
210
|
+
if (typeof obj.lastResult === "string") {
|
|
211
|
+
const allowed = new Set(["success", "not_modified", "skipped_fresh", "skipped_throttled", "failed"]);
|
|
212
|
+
if (allowed.has(obj.lastResult)) {
|
|
213
|
+
out.lastResult = obj.lastResult;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (typeof obj.lastError === "string" && obj.lastError)
|
|
217
|
+
out.lastError = obj.lastError;
|
|
218
|
+
if (typeof obj.etag === "string" && obj.etag)
|
|
219
|
+
out.etag = obj.etag;
|
|
220
|
+
if (typeof obj.lastModified === "string" && obj.lastModified)
|
|
221
|
+
out.lastModified = obj.lastModified;
|
|
222
|
+
return out;
|
|
223
|
+
}
|
|
224
|
+
async function writeJsonAtomic(path, data) {
|
|
225
|
+
const dir = dirname(path);
|
|
226
|
+
const tmp = `${path}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
227
|
+
await mkdir(dir, { recursive: true });
|
|
228
|
+
await writeFile(tmp, `${JSON.stringify(data, null, 2)}\n`, "utf-8");
|
|
229
|
+
const safeRm = async (target) => {
|
|
230
|
+
try {
|
|
231
|
+
await rm(target, { force: true });
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// best-effort cleanup
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
try {
|
|
238
|
+
await rename(tmp, path);
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
const code = err && typeof err === "object" && "code" in err
|
|
242
|
+
? String(err.code)
|
|
243
|
+
: "";
|
|
244
|
+
const shouldRetryAsReplace = code === "EPERM" || code === "EEXIST" || code === "EACCES" || code === "ENOTEMPTY";
|
|
245
|
+
if (!shouldRetryAsReplace) {
|
|
246
|
+
await safeRm(tmp);
|
|
247
|
+
throw err;
|
|
248
|
+
}
|
|
249
|
+
await safeRm(path);
|
|
250
|
+
await rename(tmp, path);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
async function readRefreshState(path) {
|
|
254
|
+
try {
|
|
255
|
+
const raw = await readFile(path, "utf-8");
|
|
256
|
+
return normalizeRefreshState(JSON.parse(raw));
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
export async function readPricingRefreshState(runtimeDirs) {
|
|
263
|
+
return await readRefreshState(getRuntimePricingRefreshStatePath(runtimeDirs));
|
|
264
|
+
}
|
|
265
|
+
function makeDefaultRefreshState(nowMs) {
|
|
266
|
+
return {
|
|
267
|
+
version: 1,
|
|
268
|
+
updatedAt: nowMs,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
function pickCostBuckets(rawCost) {
|
|
272
|
+
const obj = asRecord(rawCost);
|
|
273
|
+
if (!obj)
|
|
274
|
+
return null;
|
|
275
|
+
const picked = {};
|
|
276
|
+
for (const key of COST_KEYS) {
|
|
277
|
+
const value = obj[key];
|
|
278
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
279
|
+
picked[key] = value;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return Object.keys(picked).length > 0 ? picked : null;
|
|
283
|
+
}
|
|
284
|
+
function buildSnapshotFromApi(apiRaw, providerIDs, generatedAt) {
|
|
285
|
+
const api = asRecord(apiRaw) ?? {};
|
|
286
|
+
const providers = {};
|
|
287
|
+
for (const providerID of providerIDs) {
|
|
288
|
+
const providerNode = asRecord(api[providerID]);
|
|
289
|
+
const models = asRecord(providerNode?.models);
|
|
290
|
+
if (!models)
|
|
291
|
+
continue;
|
|
292
|
+
const pricedModels = {};
|
|
293
|
+
for (const modelID of Object.keys(models)) {
|
|
294
|
+
const modelNode = asRecord(models[modelID]);
|
|
295
|
+
const cost = pickCostBuckets(modelNode?.cost);
|
|
296
|
+
if (cost) {
|
|
297
|
+
pricedModels[modelID] = cost;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (Object.keys(pricedModels).length > 0) {
|
|
301
|
+
providers[providerID] = sortRecordByKeys(pricedModels);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const providerList = Object.keys(providers).sort((a, b) => a.localeCompare(b));
|
|
305
|
+
return {
|
|
306
|
+
_meta: {
|
|
307
|
+
generatedAt,
|
|
308
|
+
providers: providerList,
|
|
309
|
+
source: SOURCE_URL,
|
|
310
|
+
units: "USD per 1M tokens",
|
|
311
|
+
},
|
|
312
|
+
providers: sortRecordByKeys(providers),
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
function countPricedModels(snapshot) {
|
|
316
|
+
let total = 0;
|
|
317
|
+
for (const models of Object.values(snapshot.providers)) {
|
|
318
|
+
total += Object.keys(models).length;
|
|
319
|
+
}
|
|
320
|
+
return total;
|
|
321
|
+
}
|
|
322
|
+
function getErrorMessage(error) {
|
|
323
|
+
return error instanceof Error ? error.message : String(error);
|
|
324
|
+
}
|
|
325
|
+
async function fetchModelsDevSnapshot(params) {
|
|
326
|
+
const headers = new Headers();
|
|
327
|
+
if (params.state.etag)
|
|
328
|
+
headers.set("If-None-Match", params.state.etag);
|
|
329
|
+
if (params.state.lastModified)
|
|
330
|
+
headers.set("If-Modified-Since", params.state.lastModified);
|
|
331
|
+
if (!params.fetchFn) {
|
|
332
|
+
return await fetchWithTimeout(SOURCE_URL, { headers }, params.timeoutMs);
|
|
333
|
+
}
|
|
334
|
+
const controller = new AbortController();
|
|
335
|
+
const timeoutId = setTimeout(() => controller.abort(), params.timeoutMs);
|
|
336
|
+
try {
|
|
337
|
+
return await params.fetchFn(SOURCE_URL, {
|
|
338
|
+
headers,
|
|
339
|
+
signal: controller.signal,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
finally {
|
|
343
|
+
clearTimeout(timeoutId);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
export async function maybeRefreshPricingSnapshot(opts = {}) {
|
|
347
|
+
if (REFRESH_IN_FLIGHT)
|
|
348
|
+
return REFRESH_IN_FLIGHT;
|
|
349
|
+
REFRESH_IN_FLIGHT = (async () => {
|
|
350
|
+
const nowMs = opts.nowMs ?? Date.now();
|
|
351
|
+
const policy = getPricingRefreshPolicy(process.env);
|
|
352
|
+
const maxAgeMs = opts.maxAgeMs ?? policy.maxAgeMs;
|
|
353
|
+
const minAttemptIntervalMs = opts.minAttemptIntervalMs ?? policy.minAttemptIntervalMs;
|
|
354
|
+
const timeoutMs = opts.timeoutMs ?? policy.timeoutMs;
|
|
355
|
+
const runtimeDirs = opts.runtimeDirs;
|
|
356
|
+
const snapshotPath = getRuntimePricingSnapshotPath(runtimeDirs);
|
|
357
|
+
const statePath = getRuntimePricingRefreshStatePath(runtimeDirs);
|
|
358
|
+
const force = opts.force === true;
|
|
359
|
+
const previousState = (await readRefreshState(statePath)) ?? makeDefaultRefreshState(nowMs);
|
|
360
|
+
if (!force && PROCESS_REFRESH_CHECKED) {
|
|
361
|
+
return {
|
|
362
|
+
attempted: false,
|
|
363
|
+
updated: false,
|
|
364
|
+
reason: "already_checked_this_process",
|
|
365
|
+
state: previousState,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
PROCESS_REFRESH_CHECKED = true;
|
|
369
|
+
const selected = chooseSnapshot({
|
|
370
|
+
runtimeDirs,
|
|
371
|
+
bootstrapSnapshotOverride: opts.bootstrapSnapshotOverride,
|
|
372
|
+
});
|
|
373
|
+
setSnapshot(selected.snapshot, selected.source);
|
|
374
|
+
const health = getPricingSnapshotHealth({ nowMs, maxAgeMs });
|
|
375
|
+
if (!force && !policy.enabled) {
|
|
376
|
+
return {
|
|
377
|
+
attempted: false,
|
|
378
|
+
updated: false,
|
|
379
|
+
reason: "disabled",
|
|
380
|
+
state: {
|
|
381
|
+
...previousState,
|
|
382
|
+
updatedAt: nowMs,
|
|
383
|
+
lastResult: "skipped_fresh",
|
|
384
|
+
},
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
if (!force && !health.stale) {
|
|
388
|
+
return {
|
|
389
|
+
attempted: false,
|
|
390
|
+
updated: false,
|
|
391
|
+
reason: "fresh",
|
|
392
|
+
state: {
|
|
393
|
+
...previousState,
|
|
394
|
+
updatedAt: nowMs,
|
|
395
|
+
lastResult: "skipped_fresh",
|
|
396
|
+
},
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
if (!force && previousState.lastAttemptAt && nowMs - previousState.lastAttemptAt < minAttemptIntervalMs) {
|
|
400
|
+
return {
|
|
401
|
+
attempted: false,
|
|
402
|
+
updated: false,
|
|
403
|
+
reason: "throttled",
|
|
404
|
+
state: {
|
|
405
|
+
...previousState,
|
|
406
|
+
updatedAt: nowMs,
|
|
407
|
+
lastResult: "skipped_throttled",
|
|
408
|
+
},
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
const attemptingState = {
|
|
412
|
+
...previousState,
|
|
413
|
+
version: 1,
|
|
414
|
+
updatedAt: nowMs,
|
|
415
|
+
lastAttemptAt: nowMs,
|
|
416
|
+
};
|
|
417
|
+
try {
|
|
418
|
+
const response = await fetchModelsDevSnapshot({
|
|
419
|
+
timeoutMs,
|
|
420
|
+
state: attemptingState,
|
|
421
|
+
fetchFn: opts.fetchFn,
|
|
422
|
+
});
|
|
423
|
+
if (response.status === 304) {
|
|
424
|
+
const activeSnapshot = ensureLoaded();
|
|
425
|
+
const refreshedSnapshot = {
|
|
426
|
+
_meta: {
|
|
427
|
+
...activeSnapshot._meta,
|
|
428
|
+
generatedAt: nowMs,
|
|
429
|
+
},
|
|
430
|
+
providers: activeSnapshot.providers,
|
|
431
|
+
};
|
|
432
|
+
await writeJsonAtomic(snapshotPath, refreshedSnapshot);
|
|
433
|
+
setSnapshot(refreshedSnapshot, "runtime");
|
|
434
|
+
const nextState = {
|
|
435
|
+
...attemptingState,
|
|
436
|
+
updatedAt: nowMs,
|
|
437
|
+
lastSuccessAt: nowMs,
|
|
438
|
+
lastResult: "not_modified",
|
|
439
|
+
lastError: undefined,
|
|
440
|
+
etag: response.headers.get("etag") ?? attemptingState.etag,
|
|
441
|
+
lastModified: response.headers.get("last-modified") ?? attemptingState.lastModified,
|
|
442
|
+
};
|
|
443
|
+
try {
|
|
444
|
+
await writeJsonAtomic(statePath, nextState);
|
|
445
|
+
}
|
|
446
|
+
catch {
|
|
447
|
+
// best effort; keep refreshed in-memory/runtime snapshot active
|
|
448
|
+
}
|
|
449
|
+
return {
|
|
450
|
+
attempted: true,
|
|
451
|
+
updated: true,
|
|
452
|
+
state: nextState,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
if (!response.ok) {
|
|
456
|
+
throw new Error(`Failed to fetch ${SOURCE_URL}: ${response.status} ${response.statusText}`);
|
|
457
|
+
}
|
|
458
|
+
const api = await response.json();
|
|
459
|
+
const snapshot = buildSnapshotFromApi(api, opts.providerAllowlist ?? DEFAULT_MODELSDEV_PROVIDERS, nowMs);
|
|
460
|
+
if (countPricedModels(snapshot) === 0) {
|
|
461
|
+
throw new Error("Refusing to persist empty pricing snapshot from models.dev");
|
|
462
|
+
}
|
|
463
|
+
await writeJsonAtomic(snapshotPath, snapshot);
|
|
464
|
+
setSnapshot(snapshot, "runtime");
|
|
465
|
+
const nextState = {
|
|
466
|
+
...attemptingState,
|
|
467
|
+
updatedAt: nowMs,
|
|
468
|
+
lastSuccessAt: nowMs,
|
|
469
|
+
lastResult: "success",
|
|
470
|
+
lastError: undefined,
|
|
471
|
+
etag: response.headers.get("etag") ?? attemptingState.etag,
|
|
472
|
+
lastModified: response.headers.get("last-modified") ?? attemptingState.lastModified,
|
|
473
|
+
};
|
|
474
|
+
try {
|
|
475
|
+
await writeJsonAtomic(statePath, nextState);
|
|
476
|
+
}
|
|
477
|
+
catch {
|
|
478
|
+
// best effort; snapshot has already been updated
|
|
479
|
+
}
|
|
480
|
+
return {
|
|
481
|
+
attempted: true,
|
|
482
|
+
updated: true,
|
|
483
|
+
state: nextState,
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
catch (error) {
|
|
487
|
+
const errorMessage = getErrorMessage(error);
|
|
488
|
+
const nextState = {
|
|
489
|
+
...attemptingState,
|
|
490
|
+
updatedAt: nowMs,
|
|
491
|
+
lastFailureAt: nowMs,
|
|
492
|
+
lastResult: "failed",
|
|
493
|
+
lastError: errorMessage,
|
|
494
|
+
};
|
|
495
|
+
try {
|
|
496
|
+
await writeJsonAtomic(statePath, nextState);
|
|
497
|
+
}
|
|
498
|
+
catch {
|
|
499
|
+
// best effort; report original fetch/refresh error
|
|
500
|
+
}
|
|
501
|
+
return {
|
|
502
|
+
attempted: true,
|
|
503
|
+
updated: false,
|
|
504
|
+
error: errorMessage,
|
|
505
|
+
state: nextState,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
})().finally(() => {
|
|
509
|
+
REFRESH_IN_FLIGHT = null;
|
|
510
|
+
});
|
|
511
|
+
return REFRESH_IN_FLIGHT;
|
|
512
|
+
}
|
|
30
513
|
export function getPricingSnapshotMeta() {
|
|
31
514
|
return ensureLoaded()._meta;
|
|
32
515
|
}
|
|
516
|
+
export function getPricingSnapshotSource() {
|
|
517
|
+
ensureLoaded();
|
|
518
|
+
return SNAPSHOT_SOURCE;
|
|
519
|
+
}
|
|
520
|
+
export function getPricingSnapshotHealth(opts) {
|
|
521
|
+
const generatedAt = getPricingSnapshotMeta().generatedAt;
|
|
522
|
+
const nowMs = opts?.nowMs ?? Date.now();
|
|
523
|
+
const maxAgeMs = opts?.maxAgeMs ?? DEFAULT_PRICING_SNAPSHOT_MAX_AGE_MS;
|
|
524
|
+
const ageMs = Math.max(0, nowMs - generatedAt);
|
|
525
|
+
return {
|
|
526
|
+
generatedAt,
|
|
527
|
+
ageMs,
|
|
528
|
+
maxAgeMs,
|
|
529
|
+
stale: ageMs > maxAgeMs,
|
|
530
|
+
};
|
|
531
|
+
}
|
|
33
532
|
export function hasProvider(providerId) {
|
|
34
533
|
return !!ensureLoaded().providers[providerId];
|
|
35
534
|
}
|
|
@@ -77,4 +576,11 @@ export function lookupCost(providerId, modelId) {
|
|
|
77
576
|
export function hasCost(providerId, modelId) {
|
|
78
577
|
return lookupCost(providerId, modelId) != null;
|
|
79
578
|
}
|
|
579
|
+
export function __resetPricingSnapshotForTests() {
|
|
580
|
+
SNAPSHOT = null;
|
|
581
|
+
SNAPSHOT_SOURCE = "bundled";
|
|
582
|
+
MODEL_INDEX = null;
|
|
583
|
+
REFRESH_IN_FLIGHT = null;
|
|
584
|
+
PROCESS_REFRESH_CHECKED = false;
|
|
585
|
+
}
|
|
80
586
|
//# sourceMappingURL=modelsdev-pricing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelsdev-pricing.js","sourceRoot":"","sources":["../../src/lib/modelsdev-pricing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"modelsdev-pricing.js","sourceRoot":"","sources":["../../src/lib/modelsdev-pricing.ts"],"names":[],"mappings":"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"}
|