@sriinnu/kosha-discovery 1.9.1 → 1.11.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 +9 -1
- package/dist/catalog-source.d.ts +99 -0
- package/dist/catalog-source.d.ts.map +1 -0
- package/dist/catalog-source.js +203 -0
- package/dist/catalog-source.js.map +1 -0
- package/dist/cli-cmd-doctor.d.ts +7 -0
- package/dist/cli-cmd-doctor.d.ts.map +1 -1
- package/dist/cli-cmd-doctor.js +38 -17
- package/dist/cli-cmd-doctor.js.map +1 -1
- package/dist/cli-cmd-query.d.ts +5 -0
- package/dist/cli-cmd-query.d.ts.map +1 -1
- package/dist/cli-cmd-query.js +64 -12
- package/dist/cli-cmd-query.js.map +1 -1
- package/dist/cli-cmd-registry.d.ts +12 -0
- package/dist/cli-cmd-registry.d.ts.map +1 -0
- package/dist/cli-cmd-registry.js +39 -0
- package/dist/cli-cmd-registry.js.map +1 -0
- package/dist/cli-cmd-spend.d.ts +6 -0
- package/dist/cli-cmd-spend.d.ts.map +1 -1
- package/dist/cli-cmd-spend.js +22 -6
- package/dist/cli-cmd-spend.js.map +1 -1
- package/dist/cli-commands.d.ts +4 -4
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +14 -12
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +15 -2
- package/dist/cli-help.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +11 -4
- package/dist/cli.js.map +1 -1
- package/dist/cost.d.ts +4 -0
- package/dist/cost.d.ts.map +1 -1
- package/dist/cost.js +27 -18
- package/dist/cost.js.map +1 -1
- package/dist/discovery/public-seed.d.ts.map +1 -1
- package/dist/discovery/public-seed.js +9 -0
- package/dist/discovery/public-seed.js.map +1 -1
- package/dist/discovery/snapshot-catalog.d.ts +13 -1
- package/dist/discovery/snapshot-catalog.d.ts.map +1 -1
- package/dist/discovery/snapshot-catalog.js +25 -7
- package/dist/discovery/snapshot-catalog.js.map +1 -1
- package/dist/enrichment/catalog.d.ts +19 -0
- package/dist/enrichment/catalog.d.ts.map +1 -0
- package/dist/enrichment/catalog.js +60 -0
- package/dist/enrichment/catalog.js.map +1 -0
- package/dist/enrichment/index.d.ts +1 -0
- package/dist/enrichment/index.d.ts.map +1 -1
- package/dist/enrichment/index.js +1 -0
- package/dist/enrichment/index.js.map +1 -1
- package/dist/index.d.ts +17 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +12 -14
- package/dist/mcp-server.js.map +1 -1
- package/dist/price-trust.d.ts +29 -0
- package/dist/price-trust.d.ts.map +1 -0
- package/dist/price-trust.js +36 -0
- package/dist/price-trust.js.map +1 -0
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +170 -32
- package/dist/proxy.js.map +1 -1
- package/dist/registry-query.d.ts +1 -1
- package/dist/registry-query.d.ts.map +1 -1
- package/dist/registry-query.js +90 -25
- package/dist/registry-query.js.map +1 -1
- package/dist/registry-routing.d.ts +3 -1
- package/dist/registry-routing.d.ts.map +1 -1
- package/dist/registry-routing.js +7 -8
- package/dist/registry-routing.js.map +1 -1
- package/dist/registry-runtime.d.ts.map +1 -1
- package/dist/registry-runtime.js +26 -21
- package/dist/registry-runtime.js.map +1 -1
- package/dist/registry.d.ts +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +82 -32
- package/dist/registry.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +25 -15
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +30 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
package/dist/index.js
CHANGED
|
@@ -5,19 +5,20 @@
|
|
|
5
5
|
* consumers can import from a single `"kosha-discovery"` entry point.
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
|
-
export { ModelRegistry } from "./registry.js";
|
|
9
8
|
export { AliasResolver, DEFAULT_ALIASES } from "./aliases.js";
|
|
10
9
|
export { KoshaCache } from "./cache.js";
|
|
10
|
+
export { buildCatalogEnvelope, CATALOG_FILE_ENV, CATALOG_KIND, CATALOG_SCHEMA_VERSION, CATALOG_SOURCE_ENV, CATALOG_SOURCES, describeCatalog, resolveCatalogSource, } from "./catalog-source.js";
|
|
11
|
+
export { claudeEffortLadder, claudeSamplingSupport, claudeSupportsForcedToolChoice, claudeSupportsNativeJsonSchema, claudeSupportsPrefill, parseClaudeGeneration, } from "./claude-generation.js";
|
|
12
|
+
export { actualCostFromUsage, appendLedgerEntry, currentLedgerPath, DEFAULT_LEDGER_PATH, estimateRequestCost, isRequestRow, LEDGER_PATH_ENV, ledgerRowUsd, readMonthlyBudgetUsd, readSpendForMonth, readTenantBudgetUsd, } from "./cost.js";
|
|
11
13
|
export { DISCOVERY_SCHEMA_VERSION, discoveryRoles, makeModelKey, rawCapabilitiesForModel, trustedCapabilitiesForModel, } from "./discovery-contract.js";
|
|
14
|
+
export { inferParallelToolCalls, inferStructuredOutputModes, inferToolDialect } from "./model-features.js";
|
|
15
|
+
export { extractModelVersion, extractOriginProvider, normalizeModelId } from "./normalize.js";
|
|
16
|
+
export { getProviderDescriptor, isLocalProvider, listProviderDescriptors, normalizeProviderId, PROVIDER_CATALOG, } from "./provider-catalog.js";
|
|
17
|
+
export { ModelRegistry } from "./registry.js";
|
|
12
18
|
export { parseRouteStrategy, ROUTE_STRATEGIES, } from "./registry-routing.js";
|
|
13
|
-
export { actualCostFromUsage, appendLedgerEntry, DEFAULT_LEDGER_PATH, estimateRequestCost, isRequestRow, ledgerRowUsd, readMonthlyBudgetUsd, readSpendForMonth, readTenantBudgetUsd, } from "./cost.js";
|
|
14
19
|
export { estimateUsdCost, normalizeTokenUsage, tallyCosts } from "./tally.js";
|
|
15
|
-
export { claudeEffortLadder, claudeSamplingSupport, claudeSupportsForcedToolChoice, claudeSupportsNativeJsonSchema, claudeSupportsPrefill, parseClaudeGeneration, } from "./claude-generation.js";
|
|
16
|
-
export { coerceOpenAIChatRequest, toOpenAIUsage, translateAnthropicStreamToOpenAI, translateAnthropicToOpenAI, translateOpenAIToAnthropic, translateOpenAIToAnthropicWithNotes, UnsupportedWireContentError, } from "./wire-anthropic.js";
|
|
17
|
-
export { extractModelVersion, extractOriginProvider, normalizeModelId } from "./normalize.js";
|
|
18
20
|
export { inferTokenizerFamily } from "./tokenizer-family.js";
|
|
19
|
-
export {
|
|
20
|
-
export { getProviderDescriptor, isLocalProvider, listProviderDescriptors, normalizeProviderId, PROVIDER_CATALOG, } from "./provider-catalog.js";
|
|
21
|
+
export { coerceOpenAIChatRequest, toOpenAIUsage, translateAnthropicStreamToOpenAI, translateAnthropicToOpenAI, translateOpenAIToAnthropic, translateOpenAIToAnthropicWithNotes, UnsupportedWireContentError, } from "./wire-anthropic.js";
|
|
21
22
|
/**
|
|
22
23
|
* Convenience factory: creates a ModelRegistry and runs discovery in one call.
|
|
23
24
|
*
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EACN,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,oBAAoB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,EAC9B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACN,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GACnB,MAAM,WAAW,CAAC;AAgBnB,OAAO,EACN,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,2BAA2B,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE9F,OAAO,EACN,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EACN,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AA4C7D,OAAO,EACN,uBAAuB,EACvB,aAAa,EACb,gCAAgC,EAChC,0BAA0B,EAC1B,0BAA0B,EAC1B,mCAAmC,EACnC,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,MAAyC;IAEzC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC1B,OAAO,QAAQ,CAAC;AACjB,CAAC"}
|
package/dist/mcp-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -197,7 +197,7 @@ export const TOOLS = [
|
|
|
197
197
|
let registryInstance = null;
|
|
198
198
|
let registryReady = null;
|
|
199
199
|
async function loadRegistry() {
|
|
200
|
-
const reg = new ModelRegistry();
|
|
200
|
+
const reg = new ModelRegistry(await ModelRegistry.loadConfigFile());
|
|
201
201
|
await reg.discover();
|
|
202
202
|
registryInstance = reg;
|
|
203
203
|
return reg;
|
|
@@ -242,13 +242,11 @@ export async function callTool(name, args, deps = defaultDeps) {
|
|
|
242
242
|
mode: "chat",
|
|
243
243
|
capability: args.capability,
|
|
244
244
|
provider: args.provider,
|
|
245
|
+
minContextWindow: minContext,
|
|
245
246
|
limit: typeof args.limit === "number" ? args.limit : 5,
|
|
246
247
|
});
|
|
247
|
-
const matches = minContext
|
|
248
|
-
? result.matches.filter((m) => m.model.contextWindow >= minContext)
|
|
249
|
-
: result.matches;
|
|
250
248
|
return {
|
|
251
|
-
matches: matches.map((m) => ({
|
|
249
|
+
matches: result.matches.map((m) => ({
|
|
252
250
|
id: m.model.id,
|
|
253
251
|
provider: m.model.provider,
|
|
254
252
|
name: m.model.name,
|
|
@@ -256,6 +254,7 @@ export async function callTool(name, args, deps = defaultDeps) {
|
|
|
256
254
|
pricing: m.model.pricing ?? null,
|
|
257
255
|
score: m.score,
|
|
258
256
|
priceMetric: m.priceMetric,
|
|
257
|
+
...(m.priceUnverified ? { priceUnverified: true } : {}),
|
|
259
258
|
})),
|
|
260
259
|
missingCredentials: result.missingCredentials.map((c) => c.providerId),
|
|
261
260
|
};
|
|
@@ -271,20 +270,19 @@ export async function callTool(name, args, deps = defaultDeps) {
|
|
|
271
270
|
mode: "chat",
|
|
272
271
|
capability: args.capability,
|
|
273
272
|
provider: args.provider,
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
limit: Math.max(limit * 4, 20),
|
|
273
|
+
minContextWindow: minContext,
|
|
274
|
+
limit,
|
|
277
275
|
}, strategy);
|
|
278
|
-
const filtered = minContext ? ranked.filter((r) => r.model.contextWindow >= minContext) : ranked;
|
|
279
276
|
return {
|
|
280
277
|
strategy,
|
|
281
|
-
routes:
|
|
278
|
+
routes: ranked.map((r) => ({
|
|
282
279
|
id: r.model.id,
|
|
283
280
|
provider: r.providerId,
|
|
284
281
|
name: r.model.name,
|
|
285
282
|
contextWindow: r.model.contextWindow,
|
|
286
283
|
pricing: r.model.pricing ?? null,
|
|
287
284
|
price: r.price,
|
|
285
|
+
...(r.priceUnverified ? { priceUnverified: true } : {}),
|
|
288
286
|
compositeScore: r.compositeScore,
|
|
289
287
|
health: {
|
|
290
288
|
available: r.health.available,
|
|
@@ -337,9 +335,7 @@ export async function callTool(name, args, deps = defaultDeps) {
|
|
|
337
335
|
const providers = reg.providers_list();
|
|
338
336
|
const errors = reg.discoveryErrors();
|
|
339
337
|
const errorByProvider = new Map(errors.map((e) => [e.providerId, e.error]));
|
|
340
|
-
const list = args.provider
|
|
341
|
-
? providers.filter((p) => p.id === args.provider)
|
|
342
|
-
: providers;
|
|
338
|
+
const list = args.provider ? providers.filter((p) => p.id === args.provider) : providers;
|
|
343
339
|
return list.map((p) => ({
|
|
344
340
|
id: p.id,
|
|
345
341
|
name: p.name,
|
|
@@ -361,8 +357,10 @@ export async function callTool(name, args, deps = defaultDeps) {
|
|
|
361
357
|
const model = reg.model(modelId);
|
|
362
358
|
if (!model)
|
|
363
359
|
return { error: `model '${modelId}' not found` };
|
|
360
|
+
// Alternatives must hold the conversation, so that filter goes into
|
|
361
|
+
// the query; filtering the 20 cheapest after the fact found none.
|
|
364
362
|
const candidates = reg
|
|
365
|
-
.cheapestModels({ mode: "chat", limit: 20 })
|
|
363
|
+
.cheapestModels({ mode: "chat", minContextWindow: currentTokens, limit: 20 })
|
|
366
364
|
.matches.map((m) => m.model);
|
|
367
365
|
return computeContextStrategy({
|
|
368
366
|
model,
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Which prices kosha can trust.
|
|
3
|
+
*
|
|
4
|
+
* Most prices come from community catalogs. A $0 token price there is either
|
|
5
|
+
* a genuinely free model or a mistake (or a poisoned entry), and nothing in
|
|
6
|
+
* the card tells the two apart. The proxy, which costs chat by tokens,
|
|
7
|
+
* refuses such a route under a budget, and every ranking puts a $0 score
|
|
8
|
+
* built on it after the priced ones, so it can never come out "cheapest".
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import type { ModelCard } from "./types.js";
|
|
12
|
+
/**
|
|
13
|
+
* True when input and output tokens are both $0 and nothing other than a
|
|
14
|
+
* catalog vouches for it. Two exceptions are real $0: local runtimes (you run
|
|
15
|
+
* them), and OpenRouter `:free` ids (the provider bills by id, so a `:free`
|
|
16
|
+
* route costs nothing whatever the catalog says).
|
|
17
|
+
*
|
|
18
|
+
* A provider's own API doesn't vouch for $0 either: some adapters fill a
|
|
19
|
+
* token rate the API left out with 0 (Vercel's does), so a live $0 can be
|
|
20
|
+
* an unknown too.
|
|
21
|
+
*
|
|
22
|
+
* Only token rates count. The proxy estimates and records chat spend from
|
|
23
|
+
* them alone, so an image or cache rate beside $0 tokens (a cache rate like
|
|
24
|
+
* that was seen live on gemini-exp-1206) would still pass a budget as free.
|
|
25
|
+
* Rankings judge per-image or per-second models by the score for the
|
|
26
|
+
* query instead (see registryCheapestModels).
|
|
27
|
+
*/
|
|
28
|
+
export declare function isUnverifiedZeroPrice(model: ModelCard): boolean;
|
|
29
|
+
//# sourceMappingURL=price-trust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"price-trust.d.ts","sourceRoot":"","sources":["../src/price-trust.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAK/D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Which prices kosha can trust.
|
|
3
|
+
*
|
|
4
|
+
* Most prices come from community catalogs. A $0 token price there is either
|
|
5
|
+
* a genuinely free model or a mistake (or a poisoned entry), and nothing in
|
|
6
|
+
* the card tells the two apart. The proxy, which costs chat by tokens,
|
|
7
|
+
* refuses such a route under a budget, and every ranking puts a $0 score
|
|
8
|
+
* built on it after the priced ones, so it can never come out "cheapest".
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { getProviderDescriptor } from "./provider-catalog.js";
|
|
12
|
+
/**
|
|
13
|
+
* True when input and output tokens are both $0 and nothing other than a
|
|
14
|
+
* catalog vouches for it. Two exceptions are real $0: local runtimes (you run
|
|
15
|
+
* them), and OpenRouter `:free` ids (the provider bills by id, so a `:free`
|
|
16
|
+
* route costs nothing whatever the catalog says).
|
|
17
|
+
*
|
|
18
|
+
* A provider's own API doesn't vouch for $0 either: some adapters fill a
|
|
19
|
+
* token rate the API left out with 0 (Vercel's does), so a live $0 can be
|
|
20
|
+
* an unknown too.
|
|
21
|
+
*
|
|
22
|
+
* Only token rates count. The proxy estimates and records chat spend from
|
|
23
|
+
* them alone, so an image or cache rate beside $0 tokens (a cache rate like
|
|
24
|
+
* that was seen live on gemini-exp-1206) would still pass a budget as free.
|
|
25
|
+
* Rankings judge per-image or per-second models by the score for the
|
|
26
|
+
* query instead (see registryCheapestModels).
|
|
27
|
+
*/
|
|
28
|
+
export function isUnverifiedZeroPrice(model) {
|
|
29
|
+
const pricing = model.pricing;
|
|
30
|
+
if (pricing?.inputPerMillion !== 0 || pricing.outputPerMillion !== 0)
|
|
31
|
+
return false;
|
|
32
|
+
if (model.provider === "openrouter" && model.id.endsWith(":free"))
|
|
33
|
+
return false;
|
|
34
|
+
return getProviderDescriptor(model.provider)?.isLocal !== true;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=price-trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"price-trust.js","sourceRoot":"","sources":["../src/price-trust.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAgB;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,OAAO,EAAE,eAAe,KAAK,CAAC,IAAI,OAAO,CAAC,gBAAgB,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnF,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAChF,OAAO,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAChE,CAAC"}
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AAiB1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAgDnD,+EAA+E;AAC/E,MAAM,WAAW,oBAAoB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,oBAAoB,CAU3D;AA2MD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAM/G;AAuID,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,CA8oB1G"}
|
package/dist/proxy.js
CHANGED
|
@@ -38,11 +38,12 @@
|
|
|
38
38
|
* @module
|
|
39
39
|
*/
|
|
40
40
|
import { randomUUID } from "node:crypto";
|
|
41
|
-
import { getProviderDescriptor, listProviderDescriptors, providerExecutionCredentialRequired } from "./provider-catalog.js";
|
|
42
|
-
import { fallbackRegistryCredential, getRegistryCredentialResolver } from "./registry-runtime.js";
|
|
43
|
-
import { parseRouteStrategy } from "./registry-routing.js";
|
|
44
41
|
import { actualCostFromUsage, appendLedgerEntry, estimateRequestCost, readMonthlyBudgetUsd, readSpendForMonth, readTenantBudgetUsd, } from "./cost.js";
|
|
45
|
-
import {
|
|
42
|
+
import { isUnverifiedZeroPrice } from "./price-trust.js";
|
|
43
|
+
import { getProviderDescriptor, listProviderDescriptors, providerExecutionCredentialRequired, } from "./provider-catalog.js";
|
|
44
|
+
import { parseRouteStrategy } from "./registry-routing.js";
|
|
45
|
+
import { fallbackRegistryCredential, getRegistryCredentialResolver } from "./registry-runtime.js";
|
|
46
|
+
import { coerceOpenAIChatRequest, translateAnthropicStreamToOpenAI, translateAnthropicToOpenAI, translateOpenAIToAnthropicWithNotes, UnsupportedWireContentError, } from "./wire-anthropic.js";
|
|
46
47
|
const proxyCounters = {
|
|
47
48
|
requestsTotal: 0,
|
|
48
49
|
errorsTotal: 0,
|
|
@@ -174,7 +175,10 @@ function parseKoshaHint(model) {
|
|
|
174
175
|
const hint = { strategy };
|
|
175
176
|
if (filters === null)
|
|
176
177
|
return hint;
|
|
177
|
-
for (const part of filters
|
|
178
|
+
for (const part of filters
|
|
179
|
+
.split(",")
|
|
180
|
+
.map((s) => s.trim())
|
|
181
|
+
.filter(Boolean)) {
|
|
178
182
|
if (part.startsWith("provider:")) {
|
|
179
183
|
hint.provider = part.slice("provider:".length);
|
|
180
184
|
}
|
|
@@ -224,20 +228,30 @@ function isExecutableRoute(registry, model) {
|
|
|
224
228
|
function resolveProxyCandidates(registry, requested) {
|
|
225
229
|
const hint = parseKoshaHint(requested);
|
|
226
230
|
if (hint !== null) {
|
|
227
|
-
|
|
231
|
+
// Context and forwardability filter the candidates before the cut to 20.
|
|
232
|
+
// Filtering after it left nothing whenever the 20 cheapest failed them,
|
|
233
|
+
// and in 1.10.0 those were all catalog $0 routes.
|
|
234
|
+
// Routes with credentials and routes without get their own cut, so 20
|
|
235
|
+
// cheaper routes we can't call never push out one we can.
|
|
236
|
+
const query = {
|
|
228
237
|
mode: "chat",
|
|
229
238
|
capability: hint.capability,
|
|
230
239
|
provider: hint.provider,
|
|
240
|
+
minContextWindow: hint.minContext ?? undefined,
|
|
231
241
|
limit: 20,
|
|
232
|
-
}
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
: ranked;
|
|
236
|
-
const exec = filtered.filter((r) => isExecutableRoute(registry, r.model)).map((r) => r.model);
|
|
237
|
-
const fwd = filtered
|
|
238
|
-
.filter((r) => isForwardable(r.model) && !isExecutableRoute(registry, r.model))
|
|
242
|
+
};
|
|
243
|
+
const exec = registry
|
|
244
|
+
.rankedRoutes({ ...query, where: (model) => isExecutableRoute(registry, model) }, hint.strategy)
|
|
239
245
|
.map((r) => r.model);
|
|
240
|
-
|
|
246
|
+
const fwd = registry
|
|
247
|
+
.rankedRoutes({ ...query, where: (model) => isForwardable(model) && !isExecutableRoute(registry, model) }, hint.strategy)
|
|
248
|
+
.map((r) => r.model);
|
|
249
|
+
// A catalog-only $0 would otherwise top every price ranking; the real
|
|
250
|
+
// bill would be whatever the provider charges. Try those routes last.
|
|
251
|
+
const ordered = dedupeModels([...exec, ...fwd]);
|
|
252
|
+
const trusted = ordered.filter((m) => !isUnverifiedZeroPrice(m));
|
|
253
|
+
const unverified = ordered.filter((m) => !trusted.includes(m));
|
|
254
|
+
return [...trusted, ...unverified];
|
|
241
255
|
}
|
|
242
256
|
// For a specific model ID or alias, prefer the canonical card but fall back
|
|
243
257
|
// to any forwardable route if the primary provider isn't proxiable (e.g.
|
|
@@ -313,9 +327,6 @@ function dedupeModels(models) {
|
|
|
313
327
|
}
|
|
314
328
|
return out;
|
|
315
329
|
}
|
|
316
|
-
function resolveProxyModel(registry, requested) {
|
|
317
|
-
return resolveProxyCandidates(registry, requested)[0] ?? null;
|
|
318
|
-
}
|
|
319
330
|
// ---------------------------------------------------------------------------
|
|
320
331
|
// URL builder
|
|
321
332
|
// ---------------------------------------------------------------------------
|
|
@@ -337,7 +348,8 @@ function buildUpstreamUrl(model, registry) {
|
|
|
337
348
|
base = (descriptor?.defaultBaseUrl ?? "").replace(/\/$/, "");
|
|
338
349
|
}
|
|
339
350
|
// Some native/local roots expose the OpenAI-compatible layer under /v1.
|
|
340
|
-
if ((model.provider === "openai" || model.provider === "ollama" || model.provider === "llama.cpp") &&
|
|
351
|
+
if ((model.provider === "openai" || model.provider === "ollama" || model.provider === "llama.cpp") &&
|
|
352
|
+
!base.endsWith("/v1")) {
|
|
341
353
|
return `${base}/v1/chat/completions`;
|
|
342
354
|
}
|
|
343
355
|
return `${base}/chat/completions`;
|
|
@@ -412,6 +424,65 @@ function observeOpenAIStreamUsage(upstream) {
|
|
|
412
424
|
// Route registration
|
|
413
425
|
// ---------------------------------------------------------------------------
|
|
414
426
|
export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
427
|
+
// Spend rows that didn't reach the ledger. Budgets are enforced against
|
|
428
|
+
// the ledger, so while any are held, budgeted requests are refused, like a
|
|
429
|
+
// failed read. Each budgeted request first writes the held rows again, in
|
|
430
|
+
// order, to their real partition files; only when all of them land does it
|
|
431
|
+
// go ahead. A probe file beside the ledger can't prove that (a read-only
|
|
432
|
+
// partition in a writable directory passes it), and the lost spend would
|
|
433
|
+
// never be counted.
|
|
434
|
+
const unwrittenRows = [];
|
|
435
|
+
let replaying = null;
|
|
436
|
+
const writeLedgerRow = (entry) => appendLedgerEntry(entry).catch((err) => {
|
|
437
|
+
unwrittenRows.push(entry);
|
|
438
|
+
console.error("kosha: ledger write failed:", err instanceof Error ? err.message : String(err));
|
|
439
|
+
});
|
|
440
|
+
const ledgerCaughtUp = () => {
|
|
441
|
+
if (unwrittenRows.length === 0)
|
|
442
|
+
return Promise.resolve(true);
|
|
443
|
+
// One replay at a time, so concurrent requests don't write a row twice.
|
|
444
|
+
replaying ??= (async () => {
|
|
445
|
+
try {
|
|
446
|
+
while (unwrittenRows.length > 0) {
|
|
447
|
+
await appendLedgerEntry(unwrittenRows[0]);
|
|
448
|
+
unwrittenRows.shift();
|
|
449
|
+
}
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
return false;
|
|
454
|
+
}
|
|
455
|
+
finally {
|
|
456
|
+
replaying = null;
|
|
457
|
+
}
|
|
458
|
+
})();
|
|
459
|
+
return replaying;
|
|
460
|
+
};
|
|
461
|
+
// Estimates of requests cleared to go upstream whose ledger rows haven't
|
|
462
|
+
// landed yet. The budget check counts them, so concurrent requests can't
|
|
463
|
+
// all pass against the same committed spend. In-process only: two proxy
|
|
464
|
+
// processes sharing one ledger can still overshoot by their in-flight work.
|
|
465
|
+
let reservedUsd = 0;
|
|
466
|
+
const reservedByTenant = new Map();
|
|
467
|
+
const reserve = (usd, tenant) => {
|
|
468
|
+
reservedUsd += usd;
|
|
469
|
+
if (tenant)
|
|
470
|
+
reservedByTenant.set(tenant, (reservedByTenant.get(tenant) ?? 0) + usd);
|
|
471
|
+
let released = false;
|
|
472
|
+
return () => {
|
|
473
|
+
if (released)
|
|
474
|
+
return;
|
|
475
|
+
released = true;
|
|
476
|
+
reservedUsd = Math.max(0, reservedUsd - usd);
|
|
477
|
+
if (!tenant)
|
|
478
|
+
return;
|
|
479
|
+
const left = (reservedByTenant.get(tenant) ?? 0) - usd;
|
|
480
|
+
if (left > 1e-12)
|
|
481
|
+
reservedByTenant.set(tenant, left);
|
|
482
|
+
else
|
|
483
|
+
reservedByTenant.delete(tenant);
|
|
484
|
+
};
|
|
485
|
+
};
|
|
415
486
|
// OpenAI-compatible model list — returns all models the proxy can forward.
|
|
416
487
|
// Required for SDK compatibility: OpenAI clients call this before chat requests.
|
|
417
488
|
app.get("/proxy/v1/models", (ctx) => {
|
|
@@ -426,7 +497,7 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
426
497
|
})),
|
|
427
498
|
});
|
|
428
499
|
});
|
|
429
|
-
|
|
500
|
+
const handleChat = async (ctx, hold) => {
|
|
430
501
|
// ── Parse request ──────────────────────────────────────────────
|
|
431
502
|
let body;
|
|
432
503
|
try {
|
|
@@ -478,9 +549,15 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
478
549
|
// tenant tag per request. A per-tenant cap is an additional gate.
|
|
479
550
|
const budget = readMonthlyBudgetUsd();
|
|
480
551
|
const tenantBudget = tenant ? readTenantBudgetUsd() : null;
|
|
552
|
+
let spent = 0;
|
|
553
|
+
let tenantSpent = 0;
|
|
481
554
|
if (budget !== null || tenantBudget !== null) {
|
|
482
|
-
|
|
483
|
-
|
|
555
|
+
if (!(await ledgerCaughtUp())) {
|
|
556
|
+
return ctx.json({
|
|
557
|
+
error: "budget enforcement unavailable — spend could not be written to the ledger",
|
|
558
|
+
budgetUsd: budget ?? tenantBudget,
|
|
559
|
+
}, 503);
|
|
560
|
+
}
|
|
484
561
|
try {
|
|
485
562
|
if (budget !== null)
|
|
486
563
|
spent = await readSpendForMonth(Date.now());
|
|
@@ -527,12 +604,11 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
527
604
|
let sawCredentialedRoute = false;
|
|
528
605
|
let lastUnsupportedWire = null;
|
|
529
606
|
let skippedUnpriced = false;
|
|
607
|
+
let overBudgetCap = null;
|
|
530
608
|
const wantsStream = body.stream === true;
|
|
531
609
|
const includeUsage = wantsStream && body.stream_options?.include_usage === true;
|
|
532
610
|
for (const model of candidates) {
|
|
533
|
-
const credential = resolver
|
|
534
|
-
? await resolver.resolve(model.provider)
|
|
535
|
-
: fallbackRegistryCredential(model.provider);
|
|
611
|
+
const credential = resolver ? await resolver.resolve(model.provider) : fallbackRegistryCredential(model.provider);
|
|
536
612
|
const bearerToken = credential.apiKey ?? credential.accessToken;
|
|
537
613
|
const descriptor = getProviderDescriptor(model.provider);
|
|
538
614
|
if (descriptor && providerExecutionCredentialRequired(descriptor) && !bearerToken) {
|
|
@@ -559,11 +635,31 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
559
635
|
}
|
|
560
636
|
// With no price kosha writes no ledger row, so a budget would never
|
|
561
637
|
// see this spend. Local runtimes cost nothing and stay allowed.
|
|
562
|
-
|
|
638
|
+
// A remote $0/$0 price counts as no price: the catalogs are the only
|
|
639
|
+
// source for it, and a poisoned $0 would otherwise win kosha:cheapest
|
|
640
|
+
// and land in the ledger as free.
|
|
641
|
+
if ((budget !== null || tenantBudget !== null) &&
|
|
642
|
+
descriptor?.isLocal !== true &&
|
|
643
|
+
(!estimateRequestCost(model, body) || isUnverifiedZeroPrice(model))) {
|
|
563
644
|
attemptChain.push(`${model.provider}:unpriced`);
|
|
564
645
|
skippedUnpriced = true;
|
|
565
646
|
continue;
|
|
566
647
|
}
|
|
648
|
+
// The gate above only knows the cap isn't reached yet. A request
|
|
649
|
+
// whose own estimate would cross it is refused here, per route, so a
|
|
650
|
+
// cheaper route can still take it.
|
|
651
|
+
const routeEstimate = estimateRequestCost(model, body)?.estimatedUsd ?? 0;
|
|
652
|
+
const tenantReserved = tenant ? (reservedByTenant.get(tenant) ?? 0) : 0;
|
|
653
|
+
const overGlobal = budget !== null && spent + reservedUsd + routeEstimate > budget;
|
|
654
|
+
const overTenant = tenantBudget !== null && tenantSpent + tenantReserved + routeEstimate > tenantBudget;
|
|
655
|
+
if (overGlobal || overTenant) {
|
|
656
|
+
attemptChain.push(`${model.provider}:over-budget`);
|
|
657
|
+
overBudgetCap ??= overGlobal ? "global" : "tenant";
|
|
658
|
+
continue;
|
|
659
|
+
}
|
|
660
|
+
// Held until this request's ledger row lands; a failover swaps it.
|
|
661
|
+
hold.release?.();
|
|
662
|
+
hold.release = reserve(routeEstimate, tenant);
|
|
567
663
|
const usesAnthropicWire = model.provider === "anthropic";
|
|
568
664
|
const upstreamHeaders = { "content-type": "application/json" };
|
|
569
665
|
let upstreamBody;
|
|
@@ -716,7 +812,7 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
716
812
|
const recordSpend = (actual) => {
|
|
717
813
|
if (!estimate || !upstreamOk)
|
|
718
814
|
return;
|
|
719
|
-
|
|
815
|
+
hold.write = writeLedgerRow({
|
|
720
816
|
ts: Date.now(),
|
|
721
817
|
provider: model.provider,
|
|
722
818
|
modelId: model.id,
|
|
@@ -738,12 +834,12 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
738
834
|
usageSource: "upstream",
|
|
739
835
|
}
|
|
740
836
|
: { usageSource: "estimate" }),
|
|
741
|
-
})
|
|
837
|
+
});
|
|
742
838
|
};
|
|
743
839
|
const recordAdjustment = (actual) => {
|
|
744
840
|
if (!estimate || !upstreamOk || !actual)
|
|
745
841
|
return;
|
|
746
|
-
|
|
842
|
+
void writeLedgerRow({
|
|
747
843
|
ts: Date.now(),
|
|
748
844
|
provider: model.provider,
|
|
749
845
|
modelId: model.id,
|
|
@@ -764,7 +860,7 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
764
860
|
cacheReadTokens: actual.cacheReadTokens,
|
|
765
861
|
cacheWriteTokens: actual.cacheWriteTokens,
|
|
766
862
|
usageSource: "upstream",
|
|
767
|
-
})
|
|
863
|
+
});
|
|
768
864
|
};
|
|
769
865
|
const reflectActual = (actual) => {
|
|
770
866
|
if (actual) {
|
|
@@ -792,13 +888,18 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
792
888
|
}
|
|
793
889
|
releaseTimer();
|
|
794
890
|
const aErr = extractAnthropicError(raw);
|
|
795
|
-
return new Response(JSON.stringify({ error: { ...aErr, code: String(upstream.status) } }), {
|
|
891
|
+
return new Response(JSON.stringify({ error: { ...aErr, code: String(upstream.status) } }), {
|
|
892
|
+
status: upstream.status,
|
|
893
|
+
headers: responseHeaders,
|
|
894
|
+
});
|
|
796
895
|
}
|
|
797
896
|
if (wantsStream) {
|
|
798
897
|
if (!upstream.body) {
|
|
799
898
|
releaseTimer();
|
|
800
899
|
recordSpend(null);
|
|
801
|
-
return new Response(JSON.stringify({
|
|
900
|
+
return new Response(JSON.stringify({
|
|
901
|
+
error: { message: "anthropic upstream returned no stream body", type: "upstream_error" },
|
|
902
|
+
}), { status: 502, headers: responseHeaders });
|
|
802
903
|
}
|
|
803
904
|
// Estimate now; reconcile when (if) the stream reports usage.
|
|
804
905
|
recordSpend(null);
|
|
@@ -816,7 +917,9 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
816
917
|
catch {
|
|
817
918
|
releaseTimer();
|
|
818
919
|
recordSpend(null);
|
|
819
|
-
return new Response(JSON.stringify({
|
|
920
|
+
return new Response(JSON.stringify({
|
|
921
|
+
error: { message: "anthropic upstream returned unparseable JSON", type: "upstream_error" },
|
|
922
|
+
}), { status: 502, headers: responseHeaders });
|
|
820
923
|
}
|
|
821
924
|
releaseTimer();
|
|
822
925
|
const anthropicResponse = raw;
|
|
@@ -893,6 +996,24 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
893
996
|
attemptChain,
|
|
894
997
|
}, 422);
|
|
895
998
|
}
|
|
999
|
+
if (overBudgetCap !== null && fetchAttempts === 0) {
|
|
1000
|
+
// Report the cap that refused it, with the same headers as the other 429s.
|
|
1001
|
+
const tenantCap = overBudgetCap === "tenant";
|
|
1002
|
+
const capUsd = (tenantCap ? tenantBudget : budget);
|
|
1003
|
+
const capSpent = tenantCap ? tenantSpent : spent;
|
|
1004
|
+
return ctx.json({
|
|
1005
|
+
error: tenantCap
|
|
1006
|
+
? "this request would exceed the tenant monthly budget"
|
|
1007
|
+
: "this request would exceed the monthly budget",
|
|
1008
|
+
...(tenantCap ? { tenant } : {}),
|
|
1009
|
+
spentUsd: capSpent,
|
|
1010
|
+
budgetUsd: capUsd,
|
|
1011
|
+
attemptChain,
|
|
1012
|
+
}, 429, {
|
|
1013
|
+
"x-kosha-budget-remaining-usd": Math.max(0, capUsd - capSpent).toFixed(4),
|
|
1014
|
+
"x-kosha-budget-usd": capUsd.toFixed(2),
|
|
1015
|
+
});
|
|
1016
|
+
}
|
|
896
1017
|
if (skippedUnpriced && fetchAttempts === 0) {
|
|
897
1018
|
return ctx.json({
|
|
898
1019
|
error: "no priced route for this model; with a spend budget set, kosha only forwards models it can charge to the ledger",
|
|
@@ -900,6 +1021,23 @@ export function registerProxyRoutes(app, registry, shutdownSignal) {
|
|
|
900
1021
|
}, 422);
|
|
901
1022
|
}
|
|
902
1023
|
return ctx.json({ error: "all upstream providers failed", attemptChain }, 502);
|
|
1024
|
+
};
|
|
1025
|
+
app.post("/proxy/v1/chat/completions", async (ctx) => {
|
|
1026
|
+
const hold = { release: null, write: null };
|
|
1027
|
+
try {
|
|
1028
|
+
return await handleChat(ctx, hold);
|
|
1029
|
+
}
|
|
1030
|
+
finally {
|
|
1031
|
+
// Release the budget hold once the spend it stood for is in the
|
|
1032
|
+
// ledger (or held for replay, which blocks budgeted requests anyway).
|
|
1033
|
+
const release = hold.release;
|
|
1034
|
+
if (release) {
|
|
1035
|
+
if (hold.write)
|
|
1036
|
+
void hold.write.finally(release);
|
|
1037
|
+
else
|
|
1038
|
+
release();
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
903
1041
|
});
|
|
904
1042
|
}
|
|
905
1043
|
//# sourceMappingURL=proxy.js.map
|