@musnows/scriverse 0.8.6 → 0.8.8
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.en.md +3 -1
- package/README.md +3 -1
- package/dist/ai-model-pricing.js +297 -62
- package/dist/ai-model-pricing.js.map +1 -1
- package/dist/ai.js +543 -133
- package/dist/ai.js.map +1 -1
- package/dist/app.js +77 -11
- package/dist/app.js.map +1 -1
- package/dist/database.js +151 -3
- package/dist/database.js.map +1 -1
- package/dist/public/ai-connectivity-test.js +5 -2
- package/dist/public/app.js +601 -74
- package/dist/public/index.html +23 -10
- package/dist/public/model-config.d.ts +3 -3
- package/dist/public/model-config.js +2 -1
- package/dist/public/roleplay-turn.js +100 -0
- package/dist/public/styles.css +109 -12
- package/dist/public/toast-layer.d.ts +4 -0
- package/dist/public/toast-layer.js +5 -0
- package/dist/roleplay-turn.js +98 -0
- package/dist/roleplay-turn.js.map +1 -0
- package/dist/security.js +33 -7
- package/dist/security.js.map +1 -1
- package/dist/server-runtime.js +2 -1
- package/dist/server-runtime.js.map +1 -1
- package/dist/store.js +95 -12
- package/dist/store.js.map +1 -1
- package/dist/user-auth.js +36 -6
- package/dist/user-auth.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -112,10 +112,12 @@ Run `scriverse --help` for all local server, default server, authentication, wor
|
|
|
112
112
|
| `APP_AUTH_USERNAME` | Empty | Optional deployment gateway username; the in-app user system is always enabled |
|
|
113
113
|
| `APP_AUTH_PASSWORD` | Empty | Optional deployment gateway password, at least 12 characters; must be transported over HTTPS |
|
|
114
114
|
| `APP_TRUST_PROXY` | `false` | Set to the trusted proxy hop count (usually `1`) or `true` behind a trusted reverse proxy |
|
|
115
|
-
| `APP_ALLOW_PRIVATE_AI_ENDPOINTS` | `true` in development, `false` in production |
|
|
115
|
+
| `APP_ALLOW_PRIVATE_AI_ENDPOINTS` | `true` in development, `false` in production | Loopback and private-network AI provider URLs are blocked by default. Setting `true`/`1` allows them with a warning toast and a startup warning log; link-local and cloud metadata addresses stay blocked |
|
|
116
116
|
| `APP_ALLOW_REGISTRATION` | `false` | Registration is enabled only when explicitly set to `true`; unset and all other values stay closed, including first-admin setup |
|
|
117
117
|
| `APP_SETUP_TOKEN` | Empty | Required when registration is enabled and must contain at least 32 characters; only the first administrator must enter it |
|
|
118
118
|
|
|
119
|
+
`APP_ALLOW_PRIVATE_AI_ENDPOINTS` weakens SSRF protection and should be enabled only when you must reach a trusted local or private-network model. Unset production deployments keep blocking these addresses; when enabled, connection tests no longer fail for that reason, the UI shows a warning, and startup writes a warning log. Link-local and cloud metadata addresses remain blocked.
|
|
120
|
+
|
|
119
121
|
`SCRIVERSE_AI_STREAM_IDLE_TIMEOUT_SECONDS` is read when the service starts and only controls how long an interactive AI stream may remain without a new event. Every valid stream event restarts the timer, so generation may continue beyond 60 seconds; this setting does not impose a total-duration limit or change timeout behavior for analysis tasks and other AI requests. Restart the service after changing it.
|
|
120
122
|
|
|
121
123
|
The AI upstream HTTP retry settings are read when the service starts. `403` is never retried. `429` and `502` use exponential backoff starting at 500 milliseconds and capped at 5 seconds, honoring a numeric `Retry-After` within the same cap; other HTTP errors use a linear delay. Invalid values fall back to their defaults. Restart the service after changing either setting.
|
package/README.md
CHANGED
|
@@ -121,7 +121,7 @@ CLI 会按服务器保存登录凭据。所有连接服务的数据命令都可
|
|
|
121
121
|
| `APP_AUTH_USERNAME` | 空 | 可选的部署网关账号;应用内用户系统始终启用 |
|
|
122
122
|
| `APP_AUTH_PASSWORD` | 空 | 可选的部署网关密码,至少 12 个字符;必须通过 HTTPS 传输 |
|
|
123
123
|
| `APP_TRUST_PROXY` | `false` | 位于可信反向代理后时设为代理跳数(通常为 `1`)或 `true` |
|
|
124
|
-
| `APP_ALLOW_PRIVATE_AI_ENDPOINTS` | 开发环境 `true`,生产环境 `false` |
|
|
124
|
+
| `APP_ALLOW_PRIVATE_AI_ENDPOINTS` | 开发环境 `true`,生产环境 `false` | 默认拦截指向本机或内网的 AI 供应商地址。显式设为 `true`/`1` 后改为允许连接并仅提示风险,启动时会打印警告;链路本地与云元数据地址始终禁止 |
|
|
125
125
|
| `APP_ALLOW_REGISTRATION` | `false` | 仅明确设为 `true` 或 `1` 时开放注册;未设置或其他值均关闭,首次初始化创建管理员也必须显式开启 |
|
|
126
126
|
| `APP_SETUP_TOKEN` | 空 | 开放注册时必填且至少 32 个字符;仅首位管理员注册需要在页面输入 |
|
|
127
127
|
| `SCRIVERSE_AVATAR_IMAGE_MAX_BYTES` | `2097152` | 头像图片上传大小上限,单位为字节 |
|
|
@@ -133,6 +133,8 @@ CLI 会按服务器保存登录凭据。所有连接服务的数据命令都可
|
|
|
133
133
|
|
|
134
134
|
上述三个图片大小限制均使用字节配置;非法、小于 1 或超过 1 GiB 的值会回退到默认值或按 1 GiB 处理。
|
|
135
135
|
|
|
136
|
+
`APP_ALLOW_PRIVATE_AI_ENDPOINTS` 会削弱 SSRF 防护,只应在必须连接本机或内网模型时显式开启。未设置时生产环境继续拦截这类地址;开启后连接测试不再因此失败,但会弹出提示,服务启动时也会写入警告日志。链路本地地址和云元数据地址即使开启也仍然禁止。
|
|
137
|
+
|
|
136
138
|
`SCRIVERSE_AI_STREAM_IDLE_TIMEOUT_SECONDS` 在服务启动时读取,只控制交互式 AI 流连续没有新事件的等待时间。每收到一个有效流事件都会重新计时,持续生成超过 60 秒不会因此中断;该配置不设置总时长上限,也不改变分析任务等其他 AI 请求的超时策略。修改后需重启服务生效。
|
|
137
139
|
|
|
138
140
|
AI 上游 HTTP 重试配置在服务启动时读取。`403` 始终不重试;`429` 和 `502` 使用指数退避,等待从 500 毫秒开始并在 5 秒封顶,同时遵循秒数格式的 `Retry-After`(同样最多等待 5 秒);其余 HTTP 错误使用线性等待。非法配置回退到对应默认值,修改后需重启服务生效。
|
package/dist/ai-model-pricing.js
CHANGED
|
@@ -3,17 +3,33 @@ import { chmodSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSy
|
|
|
3
3
|
import { dirname } from "node:path";
|
|
4
4
|
import { logger, sanitizeError } from "./logger.js";
|
|
5
5
|
export const LITELLM_MODEL_PRICES_URL = "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json";
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
6
|
+
export const OPENROUTER_MODEL_PRICES_URL = "https://openrouter.ai/api/v1/models";
|
|
7
|
+
export const MODELS_DEV_MODEL_PRICES_URL = "https://models.dev/api.json";
|
|
8
|
+
export const PUBLIC_PROVIDER_CONF_PRICES_URL = "https://raw.githubusercontent.com/ThinkInAIXYZ/PublicProviderConf/refs/heads/dev/dist/all.json";
|
|
9
|
+
export const MODEL_PRICE_SOURCE_ORDER = ["litellm", "openrouter", "models.dev", "public-provider-conf"];
|
|
10
|
+
const MODEL_PRICE_CACHE_VERSION = 2;
|
|
11
|
+
const MODEL_PRICE_RESPONSE_MAX_BYTES = 16 * 1024 * 1024;
|
|
12
|
+
const MODEL_PRICE_ENTRY_LIMIT = 100_000;
|
|
13
|
+
const DEFAULT_MODEL_PRICE_REFRESH_TIMEOUT_MS = 30_000;
|
|
14
|
+
const PER_MILLION_TOKENS = 1_000_000;
|
|
15
|
+
const MODEL_PRICE_SOURCE_DEFINITIONS = [
|
|
16
|
+
{ source: "litellm", url: LITELLM_MODEL_PRICES_URL },
|
|
17
|
+
{ source: "openrouter", url: OPENROUTER_MODEL_PRICES_URL },
|
|
18
|
+
{ source: "models.dev", url: MODELS_DEV_MODEL_PRICES_URL },
|
|
19
|
+
{ source: "public-provider-conf", url: PUBLIC_PROVIDER_CONF_PRICES_URL }
|
|
20
|
+
];
|
|
10
21
|
function recordValue(value) {
|
|
11
22
|
return value && typeof value === "object" && !Array.isArray(value)
|
|
12
23
|
? value
|
|
13
24
|
: null;
|
|
14
25
|
}
|
|
15
26
|
function finiteNonNegative(value) {
|
|
16
|
-
|
|
27
|
+
const number = typeof value === "number"
|
|
28
|
+
? value
|
|
29
|
+
: typeof value === "string" && value.trim() !== ""
|
|
30
|
+
? Number(value)
|
|
31
|
+
: NaN;
|
|
32
|
+
return Number.isFinite(number) && number >= 0 ? number : null;
|
|
17
33
|
}
|
|
18
34
|
function normalizedModelId(modelId) {
|
|
19
35
|
return modelId.trim().toLowerCase();
|
|
@@ -22,6 +38,35 @@ function optionalPrice(record, key) {
|
|
|
22
38
|
const value = finiteNonNegative(record[key]);
|
|
23
39
|
return value === null ? undefined : value;
|
|
24
40
|
}
|
|
41
|
+
function nonEmptyString(value) {
|
|
42
|
+
return typeof value === "string" && value.trim() !== "" ? value.trim() : null;
|
|
43
|
+
}
|
|
44
|
+
function addPrice(table, modelId, price) {
|
|
45
|
+
const normalized = normalizedModelId(modelId);
|
|
46
|
+
if (table.size >= MODEL_PRICE_ENTRY_LIMIT || !normalized || table.has(normalized))
|
|
47
|
+
return;
|
|
48
|
+
table.set(normalized, price);
|
|
49
|
+
}
|
|
50
|
+
function collectionEntries(value) {
|
|
51
|
+
if (Array.isArray(value))
|
|
52
|
+
return value.map((entry, index) => [String(index), entry]);
|
|
53
|
+
const record = recordValue(value);
|
|
54
|
+
return record ? Object.entries(record) : [];
|
|
55
|
+
}
|
|
56
|
+
function priceFromPerMillionCost(record) {
|
|
57
|
+
const inputCost = finiteNonNegative(record.input);
|
|
58
|
+
const outputCost = finiteNonNegative(record.output);
|
|
59
|
+
if (inputCost === null || outputCost === null)
|
|
60
|
+
return null;
|
|
61
|
+
const cacheReadCost = finiteNonNegative(record.cache_read);
|
|
62
|
+
const cacheWriteCost = finiteNonNegative(record.cache_write);
|
|
63
|
+
return {
|
|
64
|
+
input_cost_per_token: inputCost / PER_MILLION_TOKENS,
|
|
65
|
+
output_cost_per_token: outputCost / PER_MILLION_TOKENS,
|
|
66
|
+
...(cacheReadCost === null ? {} : { cache_read_input_token_cost: cacheReadCost / PER_MILLION_TOKENS }),
|
|
67
|
+
...(cacheWriteCost === null ? {} : { cache_creation_input_token_cost: cacheWriteCost / PER_MILLION_TOKENS })
|
|
68
|
+
};
|
|
69
|
+
}
|
|
25
70
|
export function parseLiteLlmPriceTable(payload) {
|
|
26
71
|
const record = recordValue(payload);
|
|
27
72
|
const entries = recordValue(record?.prices) ?? record;
|
|
@@ -29,7 +74,7 @@ export function parseLiteLlmPriceTable(payload) {
|
|
|
29
74
|
if (!entries)
|
|
30
75
|
return table;
|
|
31
76
|
for (const [rawModelId, rawPrice] of Object.entries(entries)) {
|
|
32
|
-
if (
|
|
77
|
+
if (rawModelId === "sample_spec")
|
|
33
78
|
continue;
|
|
34
79
|
const modelId = normalizedModelId(rawModelId);
|
|
35
80
|
const priceRecord = recordValue(rawPrice);
|
|
@@ -42,7 +87,7 @@ export function parseLiteLlmPriceTable(payload) {
|
|
|
42
87
|
const cacheReadCost = optionalPrice(priceRecord, "cache_read_input_token_cost");
|
|
43
88
|
const legacyCacheReadCost = optionalPrice(priceRecord, "input_cost_per_token_cache_hit");
|
|
44
89
|
const cacheCreationCost = optionalPrice(priceRecord, "cache_creation_input_token_cost");
|
|
45
|
-
table
|
|
90
|
+
addPrice(table, modelId, {
|
|
46
91
|
input_cost_per_token: inputCost,
|
|
47
92
|
output_cost_per_token: outputCost,
|
|
48
93
|
...(cacheReadCost === undefined ? {} : { cache_read_input_token_cost: cacheReadCost }),
|
|
@@ -52,8 +97,87 @@ export function parseLiteLlmPriceTable(payload) {
|
|
|
52
97
|
}
|
|
53
98
|
return table;
|
|
54
99
|
}
|
|
100
|
+
export function parseOpenRouterPriceTable(payload) {
|
|
101
|
+
const record = recordValue(payload);
|
|
102
|
+
const models = Array.isArray(record?.data) ? record.data : [];
|
|
103
|
+
const table = new Map();
|
|
104
|
+
for (const rawModel of models) {
|
|
105
|
+
const model = recordValue(rawModel);
|
|
106
|
+
const modelId = nonEmptyString(model?.id);
|
|
107
|
+
const pricing = recordValue(model?.pricing);
|
|
108
|
+
if (!modelId || !pricing)
|
|
109
|
+
continue;
|
|
110
|
+
const inputCost = finiteNonNegative(pricing.prompt);
|
|
111
|
+
const outputCost = finiteNonNegative(pricing.completion);
|
|
112
|
+
if (inputCost === null || outputCost === null)
|
|
113
|
+
continue;
|
|
114
|
+
const cacheReadCost = finiteNonNegative(pricing.input_cache_read);
|
|
115
|
+
const cacheWriteCost = finiteNonNegative(pricing.input_cache_write);
|
|
116
|
+
addPrice(table, modelId, {
|
|
117
|
+
input_cost_per_token: inputCost,
|
|
118
|
+
output_cost_per_token: outputCost,
|
|
119
|
+
...(cacheReadCost === null ? {} : { cache_read_input_token_cost: cacheReadCost }),
|
|
120
|
+
...(cacheWriteCost === null ? {} : { cache_creation_input_token_cost: cacheWriteCost })
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return table;
|
|
124
|
+
}
|
|
125
|
+
function parseProviderModelPriceTable(payload, providerField) {
|
|
126
|
+
const record = recordValue(payload);
|
|
127
|
+
const providers = providerField ? recordValue(record?.[providerField]) : record;
|
|
128
|
+
const table = new Map();
|
|
129
|
+
if (!providers)
|
|
130
|
+
return table;
|
|
131
|
+
for (const [rawProviderId, rawProvider] of Object.entries(providers)) {
|
|
132
|
+
const provider = recordValue(rawProvider);
|
|
133
|
+
const providerId = nonEmptyString(provider?.id) ?? rawProviderId;
|
|
134
|
+
for (const [rawModelId, rawModel] of collectionEntries(provider?.models)) {
|
|
135
|
+
const model = recordValue(rawModel);
|
|
136
|
+
const modelId = nonEmptyString(model?.id) ?? (rawModelId.match(/^\d+$/u) ? null : rawModelId);
|
|
137
|
+
const cost = recordValue(model?.cost);
|
|
138
|
+
if (!modelId || !cost)
|
|
139
|
+
continue;
|
|
140
|
+
const price = priceFromPerMillionCost(cost);
|
|
141
|
+
if (!price)
|
|
142
|
+
continue;
|
|
143
|
+
addPrice(table, `${providerId}/${modelId}`, price);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return table;
|
|
147
|
+
}
|
|
148
|
+
export function parseModelsDevPriceTable(payload) {
|
|
149
|
+
return parseProviderModelPriceTable(payload, null);
|
|
150
|
+
}
|
|
151
|
+
export function parsePublicProviderConfPriceTable(payload) {
|
|
152
|
+
return parseProviderModelPriceTable(payload, "providers");
|
|
153
|
+
}
|
|
154
|
+
function parsePriceTable(source, payload) {
|
|
155
|
+
if (source === "litellm")
|
|
156
|
+
return parseLiteLlmPriceTable(payload);
|
|
157
|
+
if (source === "openrouter")
|
|
158
|
+
return parseOpenRouterPriceTable(payload);
|
|
159
|
+
if (source === "models.dev")
|
|
160
|
+
return parseModelsDevPriceTable(payload);
|
|
161
|
+
return parsePublicProviderConfPriceTable(payload);
|
|
162
|
+
}
|
|
55
163
|
function serializeLiteLlmPriceTable(table) {
|
|
56
|
-
return Object.fromEntries(
|
|
164
|
+
return Object.fromEntries(table);
|
|
165
|
+
}
|
|
166
|
+
function serializeSourceTables(sourceDefinitions, sourceTables, sourceUpdatedAt) {
|
|
167
|
+
const sources = {};
|
|
168
|
+
for (const definition of sourceDefinitions) {
|
|
169
|
+
const table = sourceTables.get(definition.source);
|
|
170
|
+
const updatedAt = sourceUpdatedAt.get(definition.source);
|
|
171
|
+
if (!table || table.size === 0 || !updatedAt)
|
|
172
|
+
continue;
|
|
173
|
+
sources[definition.source] = {
|
|
174
|
+
source: definition.source,
|
|
175
|
+
url: definition.url,
|
|
176
|
+
updatedAt,
|
|
177
|
+
prices: serializeLiteLlmPriceTable(table)
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return sources;
|
|
57
181
|
}
|
|
58
182
|
export function nextLiteLlmPriceUpdate(now) {
|
|
59
183
|
const next = new Date(now.getTime());
|
|
@@ -63,26 +187,36 @@ export function nextLiteLlmPriceUpdate(now) {
|
|
|
63
187
|
export class LiteLlmPriceCache {
|
|
64
188
|
cachePath;
|
|
65
189
|
fetchImpl;
|
|
66
|
-
|
|
190
|
+
sourceDefinitions;
|
|
67
191
|
refreshTimeoutMs;
|
|
68
192
|
schedule;
|
|
69
193
|
now;
|
|
70
194
|
prices = new Map();
|
|
195
|
+
sourceTables = new Map();
|
|
196
|
+
sourceUpdatedAt = new Map();
|
|
197
|
+
sourceRefreshStatus = new Map();
|
|
71
198
|
lastSuccessfulUpdateAt = null;
|
|
72
199
|
refreshPromise = null;
|
|
73
200
|
refreshTimer = null;
|
|
74
|
-
|
|
201
|
+
activeControllers = new Set();
|
|
75
202
|
started = false;
|
|
76
203
|
disposed = false;
|
|
77
204
|
constructor(options = {}) {
|
|
78
205
|
this.cachePath = options.cachePath;
|
|
79
206
|
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
80
|
-
this.
|
|
207
|
+
this.sourceDefinitions = MODEL_PRICE_SOURCE_DEFINITIONS.map((definition) => ({
|
|
208
|
+
...definition,
|
|
209
|
+
url: options.sourceUrls?.[definition.source]
|
|
210
|
+
?? (definition.source === "litellm" ? options.sourceUrl : undefined)
|
|
211
|
+
?? definition.url
|
|
212
|
+
}));
|
|
81
213
|
this.refreshTimeoutMs = Number.isSafeInteger(options.refreshTimeoutMs) && Number(options.refreshTimeoutMs) > 0
|
|
82
214
|
? Number(options.refreshTimeoutMs)
|
|
83
|
-
:
|
|
215
|
+
: DEFAULT_MODEL_PRICE_REFRESH_TIMEOUT_MS;
|
|
84
216
|
this.schedule = options.schedule !== false;
|
|
85
217
|
this.now = options.now ?? (() => new Date());
|
|
218
|
+
for (const definition of this.sourceDefinitions)
|
|
219
|
+
this.sourceRefreshStatus.set(definition.source, null);
|
|
86
220
|
this.loadPersistedCache();
|
|
87
221
|
}
|
|
88
222
|
getPriceTable() {
|
|
@@ -91,6 +225,15 @@ export class LiteLlmPriceCache {
|
|
|
91
225
|
hasData() {
|
|
92
226
|
return this.prices.size > 0;
|
|
93
227
|
}
|
|
228
|
+
getSourceStatuses() {
|
|
229
|
+
return this.sourceDefinitions.map((definition) => ({
|
|
230
|
+
source: definition.source,
|
|
231
|
+
url: definition.url,
|
|
232
|
+
modelCount: this.sourceTables.get(definition.source)?.size ?? 0,
|
|
233
|
+
updatedAt: this.sourceUpdatedAt.get(definition.source) ?? null,
|
|
234
|
+
lastRefreshSucceeded: this.sourceRefreshStatus.get(definition.source) ?? null
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
94
237
|
start() {
|
|
95
238
|
if (this.started || this.disposed)
|
|
96
239
|
return;
|
|
@@ -120,8 +263,9 @@ export class LiteLlmPriceCache {
|
|
|
120
263
|
clearTimeout(this.refreshTimer);
|
|
121
264
|
this.refreshTimer = null;
|
|
122
265
|
}
|
|
123
|
-
this.
|
|
124
|
-
|
|
266
|
+
for (const controller of this.activeControllers)
|
|
267
|
+
controller.abort();
|
|
268
|
+
this.activeControllers.clear();
|
|
125
269
|
}
|
|
126
270
|
loadPersistedCache() {
|
|
127
271
|
if (!this.cachePath)
|
|
@@ -129,85 +273,167 @@ export class LiteLlmPriceCache {
|
|
|
129
273
|
try {
|
|
130
274
|
const parsed = JSON.parse(readFileSync(this.cachePath, "utf8"));
|
|
131
275
|
const cache = recordValue(parsed);
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
276
|
+
if (cache?.version === MODEL_PRICE_CACHE_VERSION) {
|
|
277
|
+
const sources = recordValue(cache.sources);
|
|
278
|
+
if (!sources || typeof cache.updatedAt !== "string")
|
|
279
|
+
throw new Error("Model price cache has an invalid schema");
|
|
280
|
+
for (const definition of this.sourceDefinitions) {
|
|
281
|
+
const sourceCache = recordValue(sources[definition.source]);
|
|
282
|
+
const table = parseLiteLlmPriceTable(sourceCache?.prices);
|
|
283
|
+
if (table.size === 0 || typeof sourceCache?.updatedAt !== "string")
|
|
284
|
+
continue;
|
|
285
|
+
this.sourceTables.set(definition.source, table);
|
|
286
|
+
this.sourceUpdatedAt.set(definition.source, sourceCache.updatedAt);
|
|
287
|
+
}
|
|
288
|
+
this.rebuildPriceTable(this.sourceTables);
|
|
289
|
+
if (!this.hasData())
|
|
290
|
+
throw new Error("Model price cache contains no valid prices");
|
|
291
|
+
this.lastSuccessfulUpdateAt = cache.updatedAt;
|
|
292
|
+
logger.info("ai.model_price_cache.loaded", {
|
|
293
|
+
cachePath: this.cachePath,
|
|
294
|
+
modelCount: this.prices.size,
|
|
295
|
+
updatedAt: cache.updatedAt
|
|
296
|
+
});
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const legacyCache = cache;
|
|
300
|
+
const legacyTable = parseLiteLlmPriceTable(legacyCache.prices);
|
|
301
|
+
if (legacyCache.version !== 1 || legacyTable.size === 0 || typeof legacyCache.updatedAt !== "string") {
|
|
302
|
+
throw new Error("Model price cache has an invalid schema");
|
|
135
303
|
}
|
|
136
|
-
this.
|
|
137
|
-
this.
|
|
138
|
-
|
|
304
|
+
this.sourceTables.set("litellm", legacyTable);
|
|
305
|
+
this.sourceUpdatedAt.set("litellm", legacyCache.updatedAt);
|
|
306
|
+
this.rebuildPriceTable(this.sourceTables);
|
|
307
|
+
this.lastSuccessfulUpdateAt = legacyCache.updatedAt;
|
|
308
|
+
logger.info("ai.model_price_cache.loaded_legacy", {
|
|
139
309
|
cachePath: this.cachePath,
|
|
140
|
-
modelCount:
|
|
141
|
-
updatedAt:
|
|
310
|
+
modelCount: this.prices.size,
|
|
311
|
+
updatedAt: legacyCache.updatedAt
|
|
142
312
|
});
|
|
143
313
|
}
|
|
144
314
|
catch (error) {
|
|
145
315
|
if (error && typeof error === "object" && "code" in error && error.code === "ENOENT")
|
|
146
316
|
return;
|
|
147
|
-
logger.warn("ai.
|
|
317
|
+
logger.warn("ai.model_price_cache.load_failed", {
|
|
148
318
|
cachePath: this.cachePath,
|
|
149
319
|
error: sanitizeError(error)
|
|
150
320
|
});
|
|
151
321
|
}
|
|
152
322
|
}
|
|
153
|
-
async
|
|
323
|
+
async fetchSource(definition) {
|
|
154
324
|
const controller = new AbortController();
|
|
155
325
|
const timeout = setTimeout(() => controller.abort(), this.refreshTimeoutMs);
|
|
156
|
-
this.
|
|
326
|
+
this.activeControllers.add(controller);
|
|
157
327
|
try {
|
|
158
|
-
const response = await this.fetchImpl(
|
|
328
|
+
const response = await this.fetchImpl(definition.url, {
|
|
159
329
|
headers: { accept: "application/json" },
|
|
160
330
|
signal: controller.signal
|
|
161
331
|
});
|
|
162
332
|
if (!response.ok)
|
|
163
|
-
throw new Error(
|
|
333
|
+
throw new Error(`${definition.source} price response returned HTTP ${response.status}`);
|
|
164
334
|
const body = await response.text();
|
|
165
|
-
if (Buffer.byteLength(body, "utf8") >
|
|
166
|
-
throw new Error(
|
|
335
|
+
if (Buffer.byteLength(body, "utf8") > MODEL_PRICE_RESPONSE_MAX_BYTES) {
|
|
336
|
+
throw new Error(`${definition.source} price response exceeded the size limit`);
|
|
167
337
|
}
|
|
168
338
|
let payload;
|
|
169
339
|
try {
|
|
170
340
|
payload = JSON.parse(body);
|
|
171
341
|
}
|
|
172
342
|
catch {
|
|
173
|
-
throw new Error(
|
|
343
|
+
throw new Error(`${definition.source} price response was not valid JSON`);
|
|
344
|
+
}
|
|
345
|
+
const table = parsePriceTable(definition.source, payload);
|
|
346
|
+
if (table.size === 0)
|
|
347
|
+
throw new Error(`${definition.source} price response contained no valid model prices`);
|
|
348
|
+
return { source: definition.source, table, updatedAt: this.now().toISOString() };
|
|
349
|
+
}
|
|
350
|
+
finally {
|
|
351
|
+
clearTimeout(timeout);
|
|
352
|
+
this.activeControllers.delete(controller);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
rebuildPriceTable(sourceTables) {
|
|
356
|
+
const merged = new Map();
|
|
357
|
+
for (const definition of this.sourceDefinitions) {
|
|
358
|
+
const table = sourceTables.get(definition.source);
|
|
359
|
+
if (!table)
|
|
360
|
+
continue;
|
|
361
|
+
for (const [modelId, price] of table) {
|
|
362
|
+
if (!merged.has(modelId))
|
|
363
|
+
merged.set(modelId, price);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
this.prices = merged;
|
|
367
|
+
return merged;
|
|
368
|
+
}
|
|
369
|
+
buildCache(updatedAt, sourceTables, sourceUpdatedAt) {
|
|
370
|
+
return {
|
|
371
|
+
version: MODEL_PRICE_CACHE_VERSION,
|
|
372
|
+
updatedAt,
|
|
373
|
+
sources: serializeSourceTables(this.sourceDefinitions, sourceTables, sourceUpdatedAt)
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
async fetchAndActivate() {
|
|
377
|
+
const results = await Promise.all(this.sourceDefinitions.map(async (definition) => {
|
|
378
|
+
try {
|
|
379
|
+
const result = await this.fetchSource(definition);
|
|
380
|
+
return { success: true, result };
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
this.sourceRefreshStatus.set(definition.source, false);
|
|
384
|
+
if (!this.disposed) {
|
|
385
|
+
logger.warn("ai.model_price_source.refresh_failed", {
|
|
386
|
+
source: definition.source,
|
|
387
|
+
url: definition.url,
|
|
388
|
+
hasHistoricalCache: (this.sourceTables.get(definition.source)?.size ?? 0) > 0,
|
|
389
|
+
lastSuccessfulUpdateAt: this.sourceUpdatedAt.get(definition.source) ?? null,
|
|
390
|
+
error: sanitizeError(error)
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
return { success: false, source: definition.source };
|
|
174
394
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const cache = {
|
|
180
|
-
version: LITELLM_PRICE_CACHE_VERSION,
|
|
181
|
-
source: this.sourceUrl,
|
|
182
|
-
updatedAt,
|
|
183
|
-
prices: serializeLiteLlmPriceTable(nextPrices)
|
|
184
|
-
};
|
|
185
|
-
this.persistCache(cache);
|
|
186
|
-
this.prices = nextPrices;
|
|
187
|
-
this.lastSuccessfulUpdateAt = updatedAt;
|
|
188
|
-
logger.info("ai.litellm_price_cache.updated", {
|
|
395
|
+
}));
|
|
396
|
+
const successfulResults = results.filter((result) => result.success);
|
|
397
|
+
if (successfulResults.length === 0) {
|
|
398
|
+
logger.warn("ai.model_price_cache.refresh_failed", {
|
|
189
399
|
cachePath: this.cachePath ?? "test-only-no-persistence",
|
|
190
|
-
|
|
191
|
-
|
|
400
|
+
hasHistoricalCache: this.hasData(),
|
|
401
|
+
lastSuccessfulUpdateAt: this.lastSuccessfulUpdateAt,
|
|
402
|
+
successfulSourceCount: 0
|
|
192
403
|
});
|
|
193
|
-
return
|
|
404
|
+
return false;
|
|
405
|
+
}
|
|
406
|
+
const nextSourceTables = new Map(this.sourceTables);
|
|
407
|
+
const nextSourceUpdatedAt = new Map(this.sourceUpdatedAt);
|
|
408
|
+
for (const { result } of successfulResults) {
|
|
409
|
+
nextSourceTables.set(result.source, result.table);
|
|
410
|
+
nextSourceUpdatedAt.set(result.source, result.updatedAt);
|
|
411
|
+
this.sourceRefreshStatus.set(result.source, true);
|
|
412
|
+
}
|
|
413
|
+
const updatedAt = this.now().toISOString();
|
|
414
|
+
const nextPrices = this.rebuildPriceTable(nextSourceTables);
|
|
415
|
+
try {
|
|
416
|
+
this.persistCache(this.buildCache(updatedAt, nextSourceTables, nextSourceUpdatedAt));
|
|
194
417
|
}
|
|
195
418
|
catch (error) {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
error: sanitizeError(error)
|
|
202
|
-
});
|
|
203
|
-
}
|
|
419
|
+
this.rebuildPriceTable(this.sourceTables);
|
|
420
|
+
logger.warn("ai.model_price_cache.persist_failed", {
|
|
421
|
+
cachePath: this.cachePath ?? "test-only-no-persistence",
|
|
422
|
+
error: sanitizeError(error)
|
|
423
|
+
});
|
|
204
424
|
return false;
|
|
205
425
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
426
|
+
this.sourceTables = nextSourceTables;
|
|
427
|
+
this.sourceUpdatedAt = nextSourceUpdatedAt;
|
|
428
|
+
this.prices = nextPrices;
|
|
429
|
+
this.lastSuccessfulUpdateAt = updatedAt;
|
|
430
|
+
logger.info("ai.model_price_cache.updated", {
|
|
431
|
+
cachePath: this.cachePath ?? "test-only-no-persistence",
|
|
432
|
+
modelCount: this.prices.size,
|
|
433
|
+
updatedAt,
|
|
434
|
+
successfulSources: successfulResults.map(({ result }) => result.source)
|
|
435
|
+
});
|
|
436
|
+
return true;
|
|
211
437
|
}
|
|
212
438
|
persistCache(cache) {
|
|
213
439
|
if (!this.cachePath)
|
|
@@ -242,7 +468,7 @@ export class LiteLlmPriceCache {
|
|
|
242
468
|
void this.refresh().finally(() => this.scheduleNextUpdate());
|
|
243
469
|
}, delayMs);
|
|
244
470
|
this.refreshTimer.unref?.();
|
|
245
|
-
logger.info("ai.
|
|
471
|
+
logger.info("ai.model_price_cache.scheduled", {
|
|
246
472
|
nextUpdateAt: next.toISOString(),
|
|
247
473
|
delayMs
|
|
248
474
|
});
|
|
@@ -254,7 +480,16 @@ function usageTokenCount(value) {
|
|
|
254
480
|
}
|
|
255
481
|
function modelPrice(modelId, priceTable) {
|
|
256
482
|
const normalized = normalizedModelId(modelId);
|
|
257
|
-
|
|
483
|
+
if (!normalized)
|
|
484
|
+
return null;
|
|
485
|
+
const exact = priceTable.get(normalized);
|
|
486
|
+
if (exact)
|
|
487
|
+
return exact;
|
|
488
|
+
for (const [candidateModelId, price] of priceTable) {
|
|
489
|
+
if (normalizedModelId(candidateModelId).includes(normalized))
|
|
490
|
+
return price;
|
|
491
|
+
}
|
|
492
|
+
return null;
|
|
258
493
|
}
|
|
259
494
|
function cacheReadInputTokenPrice(price) {
|
|
260
495
|
return price.cache_read_input_token_cost
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-model-pricing.js","sourceRoot":"","sources":["../src/ai-model-pricing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-model-pricing.js","sourceRoot":"","sources":["../src/ai-model-pricing.ts"],"names":[],"mappings":"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"}
|