@sriinnu/kosha-discovery 0.6.0 → 1.0.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 +53 -221
- package/dist/cli-cmd-model.d.ts +48 -0
- package/dist/cli-cmd-model.d.ts.map +1 -0
- package/dist/cli-cmd-model.js +231 -0
- package/dist/cli-cmd-model.js.map +1 -0
- package/dist/cli-cmd-query.d.ts +40 -0
- package/dist/cli-cmd-query.d.ts.map +1 -0
- package/dist/cli-cmd-query.js +303 -0
- package/dist/cli-cmd-query.js.map +1 -0
- package/dist/cli-commands.d.ts +65 -75
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +122 -504
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli-format.d.ts +40 -0
- package/dist/cli-format.d.ts.map +1 -1
- package/dist/cli-format.js +74 -0
- package/dist/cli-format.js.map +1 -1
- package/dist/cli-help.d.ts +19 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +150 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/discovery/anthropic.d.ts +8 -1
- package/dist/discovery/anthropic.d.ts.map +1 -1
- package/dist/discovery/anthropic.js +26 -3
- package/dist/discovery/anthropic.js.map +1 -1
- package/dist/discovery/base.d.ts +26 -0
- package/dist/discovery/base.d.ts.map +1 -1
- package/dist/discovery/base.js +55 -2
- package/dist/discovery/base.js.map +1 -1
- package/dist/discovery/free-tier.d.ts +31 -0
- package/dist/discovery/free-tier.d.ts.map +1 -0
- package/dist/discovery/free-tier.js +47 -0
- package/dist/discovery/free-tier.js.map +1 -0
- package/dist/discovery/google.d.ts +8 -1
- package/dist/discovery/google.d.ts.map +1 -1
- package/dist/discovery/google.js +25 -3
- package/dist/discovery/google.js.map +1 -1
- package/dist/discovery/litellm-seed.d.ts +32 -0
- package/dist/discovery/litellm-seed.d.ts.map +1 -0
- package/dist/discovery/litellm-seed.js +252 -0
- package/dist/discovery/litellm-seed.js.map +1 -0
- package/dist/discovery/modelsdev-catalog.d.ts +95 -0
- package/dist/discovery/modelsdev-catalog.d.ts.map +1 -0
- package/dist/discovery/modelsdev-catalog.js +131 -0
- package/dist/discovery/modelsdev-catalog.js.map +1 -0
- package/dist/discovery/modelsdev-seed.d.ts +19 -0
- package/dist/discovery/modelsdev-seed.d.ts.map +1 -0
- package/dist/discovery/modelsdev-seed.js +203 -0
- package/dist/discovery/modelsdev-seed.js.map +1 -0
- package/dist/discovery/openai-compatible.d.ts.map +1 -1
- package/dist/discovery/openai-compatible.js +12 -1
- package/dist/discovery/openai-compatible.js.map +1 -1
- package/dist/discovery/openai.d.ts +9 -1
- package/dist/discovery/openai.d.ts.map +1 -1
- package/dist/discovery/openai.js +31 -8
- package/dist/discovery/openai.js.map +1 -1
- package/dist/discovery/openrouter.d.ts.map +1 -1
- package/dist/discovery/openrouter.js +18 -1
- package/dist/discovery/openrouter.js.map +1 -1
- package/dist/discovery/promo-overrides.d.ts +54 -0
- package/dist/discovery/promo-overrides.d.ts.map +1 -0
- package/dist/discovery/promo-overrides.js +74 -0
- package/dist/discovery/promo-overrides.js.map +1 -0
- package/dist/discovery/public-seed.d.ts +30 -0
- package/dist/discovery/public-seed.d.ts.map +1 -0
- package/dist/discovery/public-seed.js +51 -0
- package/dist/discovery/public-seed.js.map +1 -0
- package/dist/discovery-contract.d.ts +14 -2
- package/dist/discovery-contract.d.ts.map +1 -1
- package/dist/discovery-contract.js +28 -0
- package/dist/discovery-contract.js.map +1 -1
- package/dist/enrichment/litellm-catalog.d.ts +81 -0
- package/dist/enrichment/litellm-catalog.d.ts.map +1 -0
- package/dist/enrichment/litellm-catalog.js +129 -0
- package/dist/enrichment/litellm-catalog.js.map +1 -0
- package/dist/enrichment/litellm.d.ts +9 -2
- package/dist/enrichment/litellm.d.ts.map +1 -1
- package/dist/enrichment/litellm.js +192 -23
- package/dist/enrichment/litellm.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/model-features.d.ts +77 -0
- package/dist/model-features.d.ts.map +1 -0
- package/dist/model-features.js +245 -0
- package/dist/model-features.js.map +1 -0
- package/dist/normalize.d.ts +13 -0
- package/dist/normalize.d.ts.map +1 -1
- package/dist/normalize.js +15 -0
- package/dist/normalize.js.map +1 -1
- package/dist/provider-catalog.d.ts +7 -0
- package/dist/provider-catalog.d.ts.map +1 -1
- package/dist/provider-catalog.js +4 -0
- package/dist/provider-catalog.js.map +1 -1
- package/dist/registry-discovery.d.ts.map +1 -1
- package/dist/registry-discovery.js +11 -1
- package/dist/registry-discovery.js.map +1 -1
- package/dist/registry-query.d.ts.map +1 -1
- package/dist/registry-query.js +6 -3
- package/dist/registry-query.js.map +1 -1
- package/dist/registry-runtime.d.ts +39 -1
- package/dist/registry-runtime.d.ts.map +1 -1
- package/dist/registry-runtime.js +332 -1
- package/dist/registry-runtime.js.map +1 -1
- package/dist/registry-selection.js +2 -0
- package/dist/registry-selection.js.map +1 -1
- package/dist/registry.d.ts +9 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +11 -1
- package/dist/registry.js.map +1 -1
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +32 -4
- package/dist/security.js.map +1 -1
- package/dist/tokenizer-family.d.ts +39 -0
- package/dist/tokenizer-family.d.ts.map +1 -0
- package/dist/tokenizer-family.js +92 -0
- package/dist/tokenizer-family.js.map +1 -0
- package/dist/types.d.ts +186 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/discovery/openai.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAgB1D;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAC1C,UAAU,GAAG,QAAQ,CAAC;IACtB,YAAY,GAAG,QAAQ,CAAC;IACxB,OAAO,GAAG,wBAAwB,CAAC;IAE5C;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,UAA4B,EAAE,OAA8B;QAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,WAAW,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/discovery/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/discovery/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAA2B,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/discovery/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAA2B,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA4C3C;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IACvD,QAAQ,CAAC,UAAU,gBAAgB;IACnC,QAAQ,CAAC,YAAY,gBAAgB;IACrC,QAAQ,CAAC,OAAO,2BAA2B;IAE3C;;;;;;;OAOG;IACG,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAsBlG;;;OAGG;IACH,OAAO,CAAC,WAAW;IAInB,8EAA8E;IAC9E,OAAO,CAAC,WAAW;IAmBnB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,qBAAqB;IAyB7B,6EAA6E;IAC7E,OAAO,CAAC,SAAS;IAkBjB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;CAoCpB"}
|
|
@@ -174,11 +174,28 @@ export class OpenRouterDiscoverer extends BaseDiscoverer {
|
|
|
174
174
|
if (Number.isNaN(promptCost) || Number.isNaN(completionCost)) {
|
|
175
175
|
return undefined;
|
|
176
176
|
}
|
|
177
|
-
|
|
177
|
+
// I parse cache pricing optionally because most providers don't expose it.
|
|
178
|
+
// Anthropic models (and a growing list of others) support prompt caching
|
|
179
|
+
// and OpenRouter forwards the rates as `input_cache_read` / `input_cache_write`.
|
|
180
|
+
// Both are stringified per-token costs that need the same /1e6 conversion.
|
|
181
|
+
const result = {
|
|
178
182
|
// Convert per-token cost to per-million-token cost
|
|
179
183
|
inputPerMillion: promptCost * 1_000_000,
|
|
180
184
|
outputPerMillion: completionCost * 1_000_000,
|
|
181
185
|
};
|
|
186
|
+
const cacheReadCost = pricing.input_cache_read !== undefined
|
|
187
|
+
? Number.parseFloat(pricing.input_cache_read)
|
|
188
|
+
: NaN;
|
|
189
|
+
if (Number.isFinite(cacheReadCost)) {
|
|
190
|
+
result.cacheReadPerMillion = cacheReadCost * 1_000_000;
|
|
191
|
+
}
|
|
192
|
+
const cacheWriteCost = pricing.input_cache_write !== undefined
|
|
193
|
+
? Number.parseFloat(pricing.input_cache_write)
|
|
194
|
+
: NaN;
|
|
195
|
+
if (Number.isFinite(cacheWriteCost)) {
|
|
196
|
+
result.cacheWritePerMillion = cacheWriteCost * 1_000_000;
|
|
197
|
+
}
|
|
198
|
+
return result;
|
|
182
199
|
}
|
|
183
200
|
}
|
|
184
201
|
//# sourceMappingURL=openrouter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/discovery/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/discovery/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA4C3C;;;;;;GAMG;AACH,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IAC9C,UAAU,GAAG,YAAY,CAAC;IAC1B,YAAY,GAAG,YAAY,CAAC;IAC5B,OAAO,GAAG,uBAAuB,CAAC;IAE3C;;;;;;;OAOG;IACH,KAAK,CAAC,QAAQ,CAAC,UAA4B,EAAE,OAA8B;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,gEAAgE;QAChE,oDAAoD;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,WAAW,CAAC;QAC3D,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,aAAa,GAAG,UAAU,MAAM,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CACpC,GAAG,IAAI,CAAC,OAAO,gBAAgB,EAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACrD,SAAS,CACT,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI;aAClB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,KAAsB;QACzC,OAAO,KAAK,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,CAAC;IAED,8EAA8E;IACtE,WAAW,CAAC,KAAsB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAE5D,OAAO,IAAI,CAAC,QAAQ,CAAC;YACpB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,UAAU;YACzB,cAAc;YACd,IAAI;YACJ,YAAY;YACZ,aAAa,EAAE,KAAK,CAAC,cAAc,IAAI,CAAC;YACxC,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAqB,IAAI,CAAC;YAC/D,OAAO;SACP,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACK,qBAAqB,CAAC,OAAe;QAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,oDAAoD;YACpD,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAE5C,gEAAgE;QAChE,wDAAwD;QACxD,MAAM,SAAS,GAA2B;YACzC,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,MAAM;SACZ,CAAC;QAEF,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IACpC,CAAC;IAED,6EAA6E;IACrE,SAAS,CAAC,KAAsB;QACvC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACpE,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9C,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACxD,OAAO,WAAW,CAAC;QACpB,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,KAAsB;QAC/C,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACpE,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,WAAW,CAAC,CAAC;QACtB,CAAC;QAED,kEAAkE;QAClE,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC7B,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1B,4DAA4D;QAC5D,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7D,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAED,qEAAqE;QACrE,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,YAAY,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACK,iBAAiB,CAAC,EAAU;QACnC,OAAO,CACN,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YACpB,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACvB,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC5B,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC1B,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACrB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACxB,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC5B,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtB,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CACvB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,YAAY,CAAC,OAAsC;QAC1D,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE7D,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9D,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,2EAA2E;QAC3E,yEAAyE;QACzE,iFAAiF;QACjF,2EAA2E;QAC3E,MAAM,MAAM,GAAiB;YAC5B,mDAAmD;YACnD,eAAe,EAAE,UAAU,GAAG,SAAS;YACvC,gBAAgB,EAAE,cAAc,GAAG,SAAS;SAC5C,CAAC;QAEF,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,KAAK,SAAS;YAC3D,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC7C,CAAC,CAAC,GAAG,CAAC;QACP,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,mBAAmB,GAAG,aAAa,GAAG,SAAS,CAAC;QACxD,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,KAAK,SAAS;YAC7D,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAC9C,CAAC,CAAC,GAAG,CAAC;QACP,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,oBAAoB,GAAG,cAAc,GAAG,SAAS,CAAC;QAC1D,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Public promotional pricing overrides.
|
|
3
|
+
*
|
|
4
|
+
* Hand-curated list of known active promotional discounts that the public
|
|
5
|
+
* catalogs (models.dev, LiteLLM) have not yet picked up. Each entry has a
|
|
6
|
+
* hard expiry date and is automatically ignored once `Date.now() > endsAt`,
|
|
7
|
+
* so this file does not need cleanup after a promo ends — stale entries
|
|
8
|
+
* become no-ops.
|
|
9
|
+
*
|
|
10
|
+
* This is a deliberate, narrow seam. The default discovery flow stays
|
|
11
|
+
* keyless-first via the public catalogs; overrides only step in when a
|
|
12
|
+
* provider has publicly announced a discount that the upstream catalogs
|
|
13
|
+
* are slower to reflect.
|
|
14
|
+
*
|
|
15
|
+
* Adding an entry:
|
|
16
|
+
* 1. Confirm the promo is publicly announced on the provider's site.
|
|
17
|
+
* 2. Find the canonical model id used in kosha (e.g. `deepseek-v4-pro`).
|
|
18
|
+
* 3. Add an entry below with the explicit end timestamp.
|
|
19
|
+
* 4. Cite the source URL in `reason` so a future reader can verify it.
|
|
20
|
+
*
|
|
21
|
+
* Removing or letting an entry expire requires no action — the override
|
|
22
|
+
* silently goes inert once the clock passes `endsAt`.
|
|
23
|
+
* @module
|
|
24
|
+
*/
|
|
25
|
+
import type { ModelCard, ModelPricing } from "../types.js";
|
|
26
|
+
/**
|
|
27
|
+
* A single promotional override. Matches by `(providerId, modelId)` and
|
|
28
|
+
* applies the given pricing when `Date.now() < endsAt.getTime()`.
|
|
29
|
+
*/
|
|
30
|
+
export interface PromoOverride {
|
|
31
|
+
/** kosha provider id (e.g. "deepseek"). */
|
|
32
|
+
providerId: string;
|
|
33
|
+
/** Exact model id as it appears in kosha (e.g. "deepseek-v4-pro"). */
|
|
34
|
+
modelId: string;
|
|
35
|
+
/** Replacement pricing applied while the promo is active. */
|
|
36
|
+
pricing: ModelPricing;
|
|
37
|
+
/** Hard expiry. The override has no effect once this passes. */
|
|
38
|
+
endsAt: Date;
|
|
39
|
+
/** Free-form note for humans — should cite the source URL. */
|
|
40
|
+
reason: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Built-in promo overrides. Keep small and well-cited.
|
|
44
|
+
*/
|
|
45
|
+
export declare const PROMO_OVERRIDES: readonly PromoOverride[];
|
|
46
|
+
/**
|
|
47
|
+
* Apply any active promo overrides to the given cards in place. Returns the
|
|
48
|
+
* same array (with patched cards) so callers can chain. Cards without a
|
|
49
|
+
* matching active override are unchanged.
|
|
50
|
+
*
|
|
51
|
+
* Idempotent — re-running on already-overridden cards yields the same result.
|
|
52
|
+
*/
|
|
53
|
+
export declare function applyPromoOverrides(cards: ModelCard[], now?: Date): ModelCard[];
|
|
54
|
+
//# sourceMappingURL=promo-overrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promo-overrides.d.ts","sourceRoot":"","sources":["../../src/discovery/promo-overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,OAAO,EAAE,YAAY,CAAC;IACtB,gEAAgE;IAChE,MAAM,EAAE,IAAI,CAAC;IACb,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAenD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,GAAE,IAAiB,GAAG,SAAS,EAAE,CAoB3F"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Public promotional pricing overrides.
|
|
3
|
+
*
|
|
4
|
+
* Hand-curated list of known active promotional discounts that the public
|
|
5
|
+
* catalogs (models.dev, LiteLLM) have not yet picked up. Each entry has a
|
|
6
|
+
* hard expiry date and is automatically ignored once `Date.now() > endsAt`,
|
|
7
|
+
* so this file does not need cleanup after a promo ends — stale entries
|
|
8
|
+
* become no-ops.
|
|
9
|
+
*
|
|
10
|
+
* This is a deliberate, narrow seam. The default discovery flow stays
|
|
11
|
+
* keyless-first via the public catalogs; overrides only step in when a
|
|
12
|
+
* provider has publicly announced a discount that the upstream catalogs
|
|
13
|
+
* are slower to reflect.
|
|
14
|
+
*
|
|
15
|
+
* Adding an entry:
|
|
16
|
+
* 1. Confirm the promo is publicly announced on the provider's site.
|
|
17
|
+
* 2. Find the canonical model id used in kosha (e.g. `deepseek-v4-pro`).
|
|
18
|
+
* 3. Add an entry below with the explicit end timestamp.
|
|
19
|
+
* 4. Cite the source URL in `reason` so a future reader can verify it.
|
|
20
|
+
*
|
|
21
|
+
* Removing or letting an entry expire requires no action — the override
|
|
22
|
+
* silently goes inert once the clock passes `endsAt`.
|
|
23
|
+
* @module
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Built-in promo overrides. Keep small and well-cited.
|
|
27
|
+
*/
|
|
28
|
+
export const PROMO_OVERRIDES = [
|
|
29
|
+
{
|
|
30
|
+
providerId: "deepseek",
|
|
31
|
+
modelId: "deepseek-v4-pro",
|
|
32
|
+
// 75% off the standard $1.74/$3.48 input/output rates.
|
|
33
|
+
// Cache hit also discounted 75% from $0.0145/M to $0.003625/M.
|
|
34
|
+
pricing: {
|
|
35
|
+
inputPerMillion: 0.435,
|
|
36
|
+
outputPerMillion: 0.87,
|
|
37
|
+
cacheReadPerMillion: 0.003625,
|
|
38
|
+
},
|
|
39
|
+
endsAt: new Date("2026-05-05T15:59:00Z"),
|
|
40
|
+
reason: "DeepSeek limited-time 75% off promo on deepseek-v4-pro — https://api-docs.deepseek.com/quick_start/pricing/",
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* Apply any active promo overrides to the given cards in place. Returns the
|
|
45
|
+
* same array (with patched cards) so callers can chain. Cards without a
|
|
46
|
+
* matching active override are unchanged.
|
|
47
|
+
*
|
|
48
|
+
* Idempotent — re-running on already-overridden cards yields the same result.
|
|
49
|
+
*/
|
|
50
|
+
export function applyPromoOverrides(cards, now = new Date()) {
|
|
51
|
+
if (cards.length === 0)
|
|
52
|
+
return cards;
|
|
53
|
+
const active = PROMO_OVERRIDES.filter((promo) => promo.endsAt.getTime() > now.getTime());
|
|
54
|
+
if (active.length === 0)
|
|
55
|
+
return cards;
|
|
56
|
+
for (let i = 0; i < cards.length; i += 1) {
|
|
57
|
+
const card = cards[i];
|
|
58
|
+
const match = active.find((promo) => promo.providerId === card.provider && promo.modelId === card.id);
|
|
59
|
+
if (!match)
|
|
60
|
+
continue;
|
|
61
|
+
cards[i] = {
|
|
62
|
+
...card,
|
|
63
|
+
pricing: { ...match.pricing },
|
|
64
|
+
// Preserve a record of why this row diverges from the public catalog
|
|
65
|
+
// rate so consumers can trace the override.
|
|
66
|
+
rawCapabilities: dedupe([...(card.rawCapabilities ?? card.capabilities), "promo_override"]),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return cards;
|
|
70
|
+
}
|
|
71
|
+
function dedupe(values) {
|
|
72
|
+
return Array.from(new Set(values));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=promo-overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promo-overrides.js","sourceRoot":"","sources":["../../src/discovery/promo-overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAqBH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACxD;QACC,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,iBAAiB;QAC1B,uDAAuD;QACvD,+DAA+D;QAC/D,OAAO,EAAE;YACR,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,IAAI;YACtB,mBAAmB,EAAE,QAAQ;SAC7B;QACD,MAAM,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;QACxC,MAAM,EACL,6GAA6G;KAC9G;CACD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB,EAAE,MAAY,IAAI,IAAI,EAAE;IAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACzF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACxB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,CAC1E,CAAC;QACF,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,KAAK,CAAC,CAAC,CAAC,GAAG;YACV,GAAG,IAAI;YACP,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;YAC7B,qEAAqE;YACrE,4CAA4C;YAC5C,eAAe,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,CAAC;SAC3F,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,MAAgB;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Merged public-catalog seed.
|
|
3
|
+
*
|
|
4
|
+
* Combines the models.dev and LiteLLM keyless catalogs into a single seed
|
|
5
|
+
* per kosha provider. Priorities:
|
|
6
|
+
*
|
|
7
|
+
* 1. **models.dev = primary.** Fresher, structured `release_date`/`last_updated`
|
|
8
|
+
* metadata, tiered pricing, structured modalities. Most up-to-date for the
|
|
9
|
+
* models we actively track.
|
|
10
|
+
* 2. **LiteLLM = filler.** Backfills providers and models that models.dev does
|
|
11
|
+
* not yet cover (e.g. moonshot-cn variants, niche bedrock entries).
|
|
12
|
+
*
|
|
13
|
+
* Merge rules per (providerId, modelId):
|
|
14
|
+
* - models.dev entry wins when it exists.
|
|
15
|
+
* - LiteLLM-only entries are added to the seed (filler behaviour).
|
|
16
|
+
* - When both exist, models.dev metadata is kept; LiteLLM is *not* used to
|
|
17
|
+
* overwrite individual fields. The post-discovery LiteLLM enricher still
|
|
18
|
+
* runs and can fill any genuinely missing fields downstream.
|
|
19
|
+
*
|
|
20
|
+
* Failures in either source are non-fatal: a network blip on one feed
|
|
21
|
+
* silently degrades to the other so kosha never fails closed.
|
|
22
|
+
* @module
|
|
23
|
+
*/
|
|
24
|
+
import type { ModelCard } from "../types.js";
|
|
25
|
+
/**
|
|
26
|
+
* Return a merged, deduplicated array of seed {@link ModelCard}s for the
|
|
27
|
+
* given kosha provider, sourced from both public catalogs.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getPublicSeed(providerId: string): Promise<ModelCard[]>;
|
|
30
|
+
//# sourceMappingURL=public-seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-seed.d.ts","sourceRoot":"","sources":["../../src/discovery/public-seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C;;;GAGG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAoB5E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Merged public-catalog seed.
|
|
3
|
+
*
|
|
4
|
+
* Combines the models.dev and LiteLLM keyless catalogs into a single seed
|
|
5
|
+
* per kosha provider. Priorities:
|
|
6
|
+
*
|
|
7
|
+
* 1. **models.dev = primary.** Fresher, structured `release_date`/`last_updated`
|
|
8
|
+
* metadata, tiered pricing, structured modalities. Most up-to-date for the
|
|
9
|
+
* models we actively track.
|
|
10
|
+
* 2. **LiteLLM = filler.** Backfills providers and models that models.dev does
|
|
11
|
+
* not yet cover (e.g. moonshot-cn variants, niche bedrock entries).
|
|
12
|
+
*
|
|
13
|
+
* Merge rules per (providerId, modelId):
|
|
14
|
+
* - models.dev entry wins when it exists.
|
|
15
|
+
* - LiteLLM-only entries are added to the seed (filler behaviour).
|
|
16
|
+
* - When both exist, models.dev metadata is kept; LiteLLM is *not* used to
|
|
17
|
+
* overwrite individual fields. The post-discovery LiteLLM enricher still
|
|
18
|
+
* runs and can fill any genuinely missing fields downstream.
|
|
19
|
+
*
|
|
20
|
+
* Failures in either source are non-fatal: a network blip on one feed
|
|
21
|
+
* silently degrades to the other so kosha never fails closed.
|
|
22
|
+
* @module
|
|
23
|
+
*/
|
|
24
|
+
import { getLiteLLMSeed } from "./litellm-seed.js";
|
|
25
|
+
import { getModelsDevSeed } from "./modelsdev-seed.js";
|
|
26
|
+
import { applyPromoOverrides } from "./promo-overrides.js";
|
|
27
|
+
/**
|
|
28
|
+
* Return a merged, deduplicated array of seed {@link ModelCard}s for the
|
|
29
|
+
* given kosha provider, sourced from both public catalogs.
|
|
30
|
+
*/
|
|
31
|
+
export async function getPublicSeed(providerId) {
|
|
32
|
+
const [modelsDev, litellm] = await Promise.all([
|
|
33
|
+
getModelsDevSeed(providerId).catch(() => []),
|
|
34
|
+
getLiteLLMSeed(providerId).catch(() => []),
|
|
35
|
+
]);
|
|
36
|
+
if (modelsDev.length === 0 && litellm.length === 0)
|
|
37
|
+
return [];
|
|
38
|
+
// Index models.dev by id so duplicate ids from LiteLLM are dropped.
|
|
39
|
+
const seen = new Set(modelsDev.map((card) => card.id));
|
|
40
|
+
const merged = [...modelsDev];
|
|
41
|
+
for (const card of litellm) {
|
|
42
|
+
if (seen.has(card.id))
|
|
43
|
+
continue;
|
|
44
|
+
seen.add(card.id);
|
|
45
|
+
merged.push(card);
|
|
46
|
+
}
|
|
47
|
+
// Final pass: apply any active promotional overrides for cases where the
|
|
48
|
+
// public catalogs haven't yet picked up a publicly-announced discount.
|
|
49
|
+
return applyPromoOverrides(merged);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=public-seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-seed.js","sourceRoot":"","sources":["../../src/discovery/public-seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACrD,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,gBAAgB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAiB,CAAC;QAC3D,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAiB,CAAC;KACzD,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9D,oEAAoE;IACpE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAgB,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,yEAAyE;IACzE,uEAAuE;IACvE,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* heuristics here so the registry can stay focused on orchestration.
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
|
-
import type { ModelCard, ModelPricing } from "./types.js";
|
|
8
|
+
import type { ModelCard, ModelPricing, StructuredOutputMode, ToolDialect } from "./types.js";
|
|
9
9
|
import type { ProviderDescriptor } from "./provider-catalog.js";
|
|
10
10
|
/** Stable schema version exposed to Chitragupta and other daemon consumers. */
|
|
11
11
|
export declare const DISCOVERY_SCHEMA_VERSION = 1;
|
|
12
12
|
/** Trusted capability taxonomy surfaced by the v1 discovery contract. */
|
|
13
|
-
export type TrustedCapability = "chat" | "function_calling" | "embeddings" | "vision" | "rerank" | "structured_output" | "streaming" | "long_context" | "local_exec" | "code_generation" | "reasoning" | "low_latency" | "cheap_inference";
|
|
13
|
+
export type TrustedCapability = "chat" | "function_calling" | "embeddings" | "vision" | "rerank" | "structured_output" | "streaming" | "long_context" | "local_exec" | "code_generation" | "reasoning" | "low_latency" | "cheap_inference" | "free_tier";
|
|
14
14
|
/** Normalized role hints exposed by the v1 schema. */
|
|
15
15
|
export interface DiscoveryRoleDefinition {
|
|
16
16
|
/** Stable role identifier. */
|
|
@@ -77,6 +77,18 @@ export interface DiscoveryModelV1 {
|
|
|
77
77
|
computeTarget: string | null;
|
|
78
78
|
supportsStructuredOutput: boolean | null;
|
|
79
79
|
supportsStreaming: boolean | null;
|
|
80
|
+
/** Tool-calling dialect family (e.g. `"anthropic-tools"`). */
|
|
81
|
+
toolDialect: ToolDialect | null;
|
|
82
|
+
/** Structured-output production modes surfaced for bindings. */
|
|
83
|
+
structuredOutputModes: StructuredOutputMode[];
|
|
84
|
+
/** Whether the model supports multiple tool calls per turn. */
|
|
85
|
+
supportsParallelToolCalls: boolean | null;
|
|
86
|
+
/** Lifecycle status used by routing and deprecation warnings. */
|
|
87
|
+
status: "active" | "preview" | "deprecated" | "retired" | null;
|
|
88
|
+
/** ISO-8601 deprecation/sunset date when announced by the provider. */
|
|
89
|
+
deprecationDate: string | null;
|
|
90
|
+
/** Canonical successor model ID when the provider has published one. */
|
|
91
|
+
replacedBy: string | null;
|
|
80
92
|
}
|
|
81
93
|
/** Normalized provider health exposed by the v1 discovery snapshot. */
|
|
82
94
|
export interface DiscoveryHealthRecord {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-contract.d.ts","sourceRoot":"","sources":["../src/discovery-contract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery-contract.d.ts","sourceRoot":"","sources":["../src/discovery-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -99,6 +99,12 @@ export function trustedCapabilitiesForModel(model, descriptor) {
|
|
|
99
99
|
caps.add("low_latency");
|
|
100
100
|
if (descriptor.isLocal || isCheapPricing(model.pricing))
|
|
101
101
|
caps.add("cheap_inference");
|
|
102
|
+
// Free tier is a strict subset of cheap — set both so consumers filtering on
|
|
103
|
+
// either get a coherent answer. Distinct from "cheap" because $0 is a real
|
|
104
|
+
// signal (free dev tiers, promo windows) that downstream cost classifiers
|
|
105
|
+
// should be able to single out.
|
|
106
|
+
if (rawCaps.includes("free_tier") || isFreeTierPricing(model))
|
|
107
|
+
caps.add("free_tier");
|
|
102
108
|
return [...caps].sort();
|
|
103
109
|
}
|
|
104
110
|
/**
|
|
@@ -112,4 +118,26 @@ function isCheapPricing(pricing) {
|
|
|
112
118
|
return false;
|
|
113
119
|
return pricing.inputPerMillion <= 1 && pricing.outputPerMillion <= 4;
|
|
114
120
|
}
|
|
121
|
+
function isFreeTierPricing(model) {
|
|
122
|
+
const pricing = model.pricing;
|
|
123
|
+
if (!pricing)
|
|
124
|
+
return false;
|
|
125
|
+
// `free_tier` is a token-billed concept (NVIDIA dev tier, Gemma/open-weight free,
|
|
126
|
+
// OpenAI moderation). Multimodal-only models — TTS billed per second, image gen
|
|
127
|
+
// billed per image, character-billed Vertex models — legitimately publish 0/0
|
|
128
|
+
// base token pricing because they are not token-billed; flagging them as
|
|
129
|
+
// free_tier would be misleading.
|
|
130
|
+
if (model.mode !== "chat" && model.mode !== "embedding")
|
|
131
|
+
return false;
|
|
132
|
+
if (pricing.imageOutputPerImage !== undefined ||
|
|
133
|
+
pricing.imageInputPerImage !== undefined ||
|
|
134
|
+
pricing.audioInputPerSecond !== undefined ||
|
|
135
|
+
pricing.audioOutputPerSecond !== undefined ||
|
|
136
|
+
pricing.videoInputPerSecond !== undefined ||
|
|
137
|
+
pricing.inputPerMillionCharacters !== undefined ||
|
|
138
|
+
pricing.outputPerMillionCharacters !== undefined) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
return pricing.inputPerMillion === 0 && pricing.outputPerMillion === 0;
|
|
142
|
+
}
|
|
115
143
|
//# sourceMappingURL=discovery-contract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-contract.js","sourceRoot":"","sources":["../src/discovery-contract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery-contract.js","sourceRoot":"","sources":["../src/discovery-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Shared LiteLLM catalog loader.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for the community-maintained LiteLLM model catalog
|
|
5
|
+
* used by both the discovery seed (origin providers without an API key) and
|
|
6
|
+
* the post-discovery pricing enricher.
|
|
7
|
+
*
|
|
8
|
+
* Hardening:
|
|
9
|
+
* - HTTPS-only, fixed source URL — no caller-supplied URLs.
|
|
10
|
+
* - Promise-deduplicated singleton load — concurrent callers share one fetch.
|
|
11
|
+
* - AbortController-bounded fetch with explicit timeout.
|
|
12
|
+
* - Response size cap before parsing to prevent memory bombs.
|
|
13
|
+
* - {@link assertCleanPayload} runs before any field is read.
|
|
14
|
+
* - Entry-count cap after parse to bound downstream work.
|
|
15
|
+
*
|
|
16
|
+
* The catalog source is the same one already trusted by the existing
|
|
17
|
+
* enricher; this module just centralises the load.
|
|
18
|
+
* @module
|
|
19
|
+
*/
|
|
20
|
+
/** Pinned upstream catalog URL — HTTPS only, no user override. */
|
|
21
|
+
export declare const LITELLM_CATALOG_URL = "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json";
|
|
22
|
+
/**
|
|
23
|
+
* Shape of a single entry in the LiteLLM pricing JSON.
|
|
24
|
+
* Fields are all optional because the upstream schema evolves over time;
|
|
25
|
+
* consumers must defensively handle missing fields.
|
|
26
|
+
*/
|
|
27
|
+
export interface LiteLLMModelEntry {
|
|
28
|
+
max_tokens?: number;
|
|
29
|
+
max_input_tokens?: number;
|
|
30
|
+
max_output_tokens?: number;
|
|
31
|
+
input_cost_per_token?: number;
|
|
32
|
+
output_cost_per_token?: number;
|
|
33
|
+
input_cost_per_reasoning_token?: number;
|
|
34
|
+
output_cost_per_reasoning_token?: number;
|
|
35
|
+
reasoning_input_cost_per_token?: number;
|
|
36
|
+
reasoning_output_cost_per_token?: number;
|
|
37
|
+
cache_read_input_token_cost?: number;
|
|
38
|
+
cache_creation_input_token_cost?: number;
|
|
39
|
+
input_cost_per_token_batches?: number;
|
|
40
|
+
output_cost_per_token_batches?: number;
|
|
41
|
+
input_cost_per_image?: number;
|
|
42
|
+
output_cost_per_image?: number;
|
|
43
|
+
input_cost_per_audio_token?: number;
|
|
44
|
+
output_cost_per_audio_token?: number;
|
|
45
|
+
input_cost_per_audio_per_second?: number;
|
|
46
|
+
output_cost_per_audio_per_second?: number;
|
|
47
|
+
input_cost_per_video_per_second?: number;
|
|
48
|
+
input_cost_per_video_token?: number;
|
|
49
|
+
input_cost_per_character?: number;
|
|
50
|
+
output_cost_per_character?: number;
|
|
51
|
+
input_cost_per_token_above_128k_tokens?: number;
|
|
52
|
+
output_cost_per_token_above_128k_tokens?: number;
|
|
53
|
+
input_cost_per_token_above_200k_tokens?: number;
|
|
54
|
+
output_cost_per_token_above_200k_tokens?: number;
|
|
55
|
+
deprecation_date?: string;
|
|
56
|
+
litellm_provider?: string;
|
|
57
|
+
mode?: string;
|
|
58
|
+
supports_function_calling?: boolean;
|
|
59
|
+
supports_parallel_function_calling?: boolean;
|
|
60
|
+
supports_tool_choice?: boolean;
|
|
61
|
+
supports_response_schema?: boolean;
|
|
62
|
+
supports_system_messages?: boolean;
|
|
63
|
+
supports_vision?: boolean;
|
|
64
|
+
supports_audio_input?: boolean;
|
|
65
|
+
supports_audio_output?: boolean;
|
|
66
|
+
supports_video_input?: boolean;
|
|
67
|
+
supports_prompt_caching?: boolean;
|
|
68
|
+
supports_reasoning?: boolean;
|
|
69
|
+
output_vector_size?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Fetch the LiteLLM catalog with full hardening, returning a defensively
|
|
73
|
+
* filtered map. Concurrent callers share the same in-flight promise.
|
|
74
|
+
*/
|
|
75
|
+
export declare function loadLiteLLMCatalog(): Promise<Record<string, LiteLLMModelEntry>>;
|
|
76
|
+
/**
|
|
77
|
+
* Reset the cached catalog. Test-only helper — callers in production code
|
|
78
|
+
* should rely on the process-lifetime cache.
|
|
79
|
+
*/
|
|
80
|
+
export declare function resetLiteLLMCatalogCache(): void;
|
|
81
|
+
//# sourceMappingURL=litellm-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"litellm-catalog.d.ts","sourceRoot":"","sources":["../../src/enrichment/litellm-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,gGAC8D,CAAC;AAW/F;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,uCAAuC,CAAC,EAAE,MAAM,CAAC;IACjD,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,uCAAuC,CAAC,EAAE,MAAM,CAAC;IAEjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAKD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAQ/E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
|