@sriinnu/kosha-discovery 0.6.1 → 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 -268
- 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 +93 -543
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli-format.d.ts +32 -0
- package/dist/cli-format.d.ts.map +1 -1
- package/dist/cli-format.js +51 -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 +4 -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/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 +168 -20
- 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/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-runtime.d.ts +20 -1
- package/dist/registry-runtime.d.ts.map +1 -1
- package/dist/registry-runtime.js +296 -8
- 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/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
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cli-cmd-model.ts — Pricing-heavy model detail commands.
|
|
3
|
+
*
|
|
4
|
+
* Contains `cmdModel`, `cmdResolve`, and `cmdRoutes` — the three commands
|
|
5
|
+
* that display detailed per-model information including multi-tier pricing
|
|
6
|
+
* (cache, reasoning, batch, origin).
|
|
7
|
+
*
|
|
8
|
+
* Extracted from `cli-commands.ts` to keep each module under 450 LOC.
|
|
9
|
+
*
|
|
10
|
+
* @module cli-cmd-model
|
|
11
|
+
*/
|
|
12
|
+
import { BOLD, CYAN, DIM, GREEN, RED, YELLOW, c, formatBatchDiscount, formatNumber, formatPrice, formatTimestamp, renderTable, } from "./cli-format.js";
|
|
13
|
+
import { ensureDiscovered } from "./cli-commands.js";
|
|
14
|
+
// ── model (detail view) ─────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Show detailed information for a single model identified by id or alias.
|
|
17
|
+
*
|
|
18
|
+
* If an exact match is not found, falls back to fuzzy substring search.
|
|
19
|
+
* Single fuzzy match is shown automatically; multiple matches produce a
|
|
20
|
+
* disambiguation list (capped at 5 suggestions).
|
|
21
|
+
*
|
|
22
|
+
* @param registry The model registry to look up.
|
|
23
|
+
* @param idOrAlias A model id, display name, or alias.
|
|
24
|
+
* @param flags CLI flags (supports `--json`).
|
|
25
|
+
*/
|
|
26
|
+
export async function cmdModel(registry, idOrAlias, flags) {
|
|
27
|
+
if (!idOrAlias) {
|
|
28
|
+
console.error(c(RED, "Usage: kosha model <id|alias>"));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
await ensureDiscovered(registry);
|
|
32
|
+
const model = registry.model(idOrAlias);
|
|
33
|
+
if (!model) {
|
|
34
|
+
// Fuzzy fallback — substring match across id, name, and aliases so users
|
|
35
|
+
// can type fragments like "sonnet" without knowing the full canonical ID.
|
|
36
|
+
const needle = idOrAlias.toLowerCase();
|
|
37
|
+
const fuzzy = registry.models().filter((m) => m.id.toLowerCase().includes(needle) ||
|
|
38
|
+
m.name.toLowerCase().includes(needle) ||
|
|
39
|
+
m.aliases.some((a) => a.toLowerCase().includes(needle)));
|
|
40
|
+
if (fuzzy.length === 1)
|
|
41
|
+
return cmdModel(registry, fuzzy[0].id, flags);
|
|
42
|
+
if (fuzzy.length > 1) {
|
|
43
|
+
console.log(c(YELLOW, `No exact match for "${idOrAlias}". Did you mean:`));
|
|
44
|
+
for (const m of fuzzy.slice(0, 5))
|
|
45
|
+
console.log(` ${c(CYAN, m.id)} (${m.provider})`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
console.error(c(RED, `Model not found: "${idOrAlias}"`));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
if (flags.json) {
|
|
52
|
+
console.log(JSON.stringify(model, null, 2));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const providerName = registry.provider(model.provider)?.name ?? model.provider;
|
|
56
|
+
const pricingStr = model.pricing
|
|
57
|
+
? `${formatPrice(model.pricing.inputPerMillion)} / ${formatPrice(model.pricing.outputPerMillion)} per million tokens (in/out)`
|
|
58
|
+
: c(DIM, "unknown");
|
|
59
|
+
// Cache pricing is optional — only displayed when the model has it
|
|
60
|
+
const cacheStr = model.pricing?.cacheReadPerMillion !== undefined
|
|
61
|
+
? `\nCache Pricing: ${formatPrice(model.pricing.cacheReadPerMillion)} read / ${formatPrice(model.pricing.cacheWritePerMillion)} write per million tokens`
|
|
62
|
+
: "";
|
|
63
|
+
// Reasoning pricing is optional — shown when providers expose it.
|
|
64
|
+
const reasoningStr = model.pricing?.reasoningInputPerMillion !== undefined || model.pricing?.reasoningOutputPerMillion !== undefined
|
|
65
|
+
? `\nReasoning Pricing: ${formatPrice(model.pricing?.reasoningInputPerMillion)} in / ${formatPrice(model.pricing?.reasoningOutputPerMillion)} out per million tokens`
|
|
66
|
+
: "";
|
|
67
|
+
// Batch API pricing — shown when providers offer async batch discounts.
|
|
68
|
+
const batchDiscount = formatBatchDiscount(model.pricing);
|
|
69
|
+
const batchStr = model.pricing?.batchInputPerMillion !== undefined || model.pricing?.batchOutputPerMillion !== undefined
|
|
70
|
+
? `\nBatch Pricing: ${formatPrice(model.pricing?.batchInputPerMillion)} in / ${formatPrice(model.pricing?.batchOutputPerMillion)} out per million tokens${batchDiscount ? ` ${batchDiscount}` : ""}`
|
|
71
|
+
: "";
|
|
72
|
+
const originPricingStr = model.originPricing
|
|
73
|
+
? `\nOrigin Pricing: ${formatPrice(model.originPricing.inputPerMillion)} / ${formatPrice(model.originPricing.outputPerMillion)} per million tokens (in/out)` +
|
|
74
|
+
((model.originPricing.reasoningInputPerMillion !== undefined || model.originPricing.reasoningOutputPerMillion !== undefined)
|
|
75
|
+
? `\nOrigin Reasoning Pricing: ${formatPrice(model.originPricing.reasoningInputPerMillion)} in / ${formatPrice(model.originPricing.reasoningOutputPerMillion)} out per million tokens`
|
|
76
|
+
: "") +
|
|
77
|
+
((model.originPricing.batchInputPerMillion !== undefined || model.originPricing.batchOutputPerMillion !== undefined)
|
|
78
|
+
? `\nOrigin Batch Pricing: ${formatPrice(model.originPricing.batchInputPerMillion)} in / ${formatPrice(model.originPricing.batchOutputPerMillion)} out per million tokens`
|
|
79
|
+
: "")
|
|
80
|
+
: "";
|
|
81
|
+
// Origin provider line: only shown when distinct from the serving-layer provider
|
|
82
|
+
const originLine = model.originProvider && model.originProvider !== model.provider
|
|
83
|
+
? `\n${c(BOLD, "Origin Provider:")} ${c(CYAN, model.originProvider)}`
|
|
84
|
+
: "";
|
|
85
|
+
// Region and project ID are only shown when present (Bedrock / Vertex models)
|
|
86
|
+
const regionLine = model.region ? `\n${c(BOLD, "Region:")} ${model.region}` : "";
|
|
87
|
+
const projectLine = model.projectId ? `\n${c(BOLD, "Project ID:")} ${model.projectId}` : "";
|
|
88
|
+
console.log(`
|
|
89
|
+
${c(BOLD, "Model:")} ${model.id}
|
|
90
|
+
${c(BOLD, "Name:")} ${model.name}
|
|
91
|
+
${c(BOLD, "Provider:")} ${providerName}${originLine}${regionLine}${projectLine}
|
|
92
|
+
${c(BOLD, "Mode:")} ${model.mode}
|
|
93
|
+
${c(BOLD, "Aliases:")} ${model.aliases.length > 0 ? model.aliases.join(", ") : c(DIM, "none")}
|
|
94
|
+
${c(BOLD, "Context Window:")} ${model.contextWindow > 0 ? formatNumber(model.contextWindow) + " tokens" : c(DIM, "unknown")}
|
|
95
|
+
${c(BOLD, "Max Output:")} ${model.maxOutputTokens > 0 ? formatNumber(model.maxOutputTokens) + " tokens" : c(DIM, "unknown")}${model.dimensions ? `\n${c(BOLD, "Dimensions:")} ${formatNumber(model.dimensions)}` : ""}
|
|
96
|
+
${c(BOLD, "Capabilities:")} ${model.capabilities.join(", ")}
|
|
97
|
+
${c(BOLD, "Pricing:")} ${pricingStr}${cacheStr}${reasoningStr}${batchStr}${originPricingStr}
|
|
98
|
+
${c(BOLD, "Source:")} ${model.source}
|
|
99
|
+
${c(BOLD, "Discovered:")} ${formatTimestamp(model.discoveredAt)}
|
|
100
|
+
`.trim());
|
|
101
|
+
}
|
|
102
|
+
// ── resolve ──────────────────────────────────────────────────────────────
|
|
103
|
+
/**
|
|
104
|
+
* Resolve a model alias to its canonical provider ID.
|
|
105
|
+
* Unknown aliases are returned as-is with a yellow warning.
|
|
106
|
+
*
|
|
107
|
+
* @param registry The model registry containing alias mappings.
|
|
108
|
+
* @param alias The alias string to resolve.
|
|
109
|
+
* @param flags CLI flags (supports `--json`).
|
|
110
|
+
*/
|
|
111
|
+
export async function cmdResolve(registry, alias, flags) {
|
|
112
|
+
if (!alias) {
|
|
113
|
+
console.error(c(RED, "Usage: kosha resolve <alias>"));
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
await ensureDiscovered(registry);
|
|
117
|
+
const resolved = registry.resolve(alias);
|
|
118
|
+
// I look the model up after resolving so callers get pricing (incl. cache
|
|
119
|
+
// read/write rates), context window, and capabilities — not just an ID.
|
|
120
|
+
// Downstream tools that pipe `kosha resolve --json` were missing all of
|
|
121
|
+
// this and had to follow up with `kosha model`. Now one call is enough.
|
|
122
|
+
//
|
|
123
|
+
// Fallback: aliases like `sonnet → claude-sonnet-4-6` may resolve to
|
|
124
|
+
// canonical IDs that no provider serves directly (e.g. when Anthropic
|
|
125
|
+
// API discovery is unauthenticated and OpenRouter exposes the same
|
|
126
|
+
// model as `anthropic/claude-sonnet-4.6`). In that case I lean on
|
|
127
|
+
// modelRoutes(), which normalizes IDs and returns every provider route
|
|
128
|
+
// — picking the first as the representative for pricing display.
|
|
129
|
+
let model = registry.model(resolved);
|
|
130
|
+
if (!model) {
|
|
131
|
+
const routes = registry.modelRoutes(resolved);
|
|
132
|
+
if (routes.length > 0)
|
|
133
|
+
model = routes[0];
|
|
134
|
+
}
|
|
135
|
+
if (flags.json) {
|
|
136
|
+
console.log(JSON.stringify({ alias, resolved, model: model ?? null }, null, 2));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (resolved === alias && !model) {
|
|
140
|
+
// resolve() returns input unchanged when no alias mapping exists
|
|
141
|
+
console.log(c(YELLOW, `"${alias}" is not a known alias (returned as-is)`));
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (resolved !== alias) {
|
|
145
|
+
console.log(`${c(DIM, alias)} ${c(DIM, "\u2192")} ${c(CYAN, resolved)}`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
console.log(c(CYAN, resolved));
|
|
149
|
+
}
|
|
150
|
+
if (model?.pricing) {
|
|
151
|
+
const base = `${formatPrice(model.pricing.inputPerMillion)} / ${formatPrice(model.pricing.outputPerMillion)} per M tokens (in/out)`;
|
|
152
|
+
console.log(`${c(DIM, "Pricing:")} ${base}`);
|
|
153
|
+
if (model.pricing.cacheReadPerMillion !== undefined || model.pricing.cacheWritePerMillion !== undefined) {
|
|
154
|
+
const read = model.pricing.cacheReadPerMillion !== undefined
|
|
155
|
+
? formatPrice(model.pricing.cacheReadPerMillion)
|
|
156
|
+
: c(DIM, "\u2014");
|
|
157
|
+
const write = model.pricing.cacheWritePerMillion !== undefined
|
|
158
|
+
? formatPrice(model.pricing.cacheWritePerMillion)
|
|
159
|
+
: c(DIM, "\u2014");
|
|
160
|
+
console.log(`${c(DIM, "Cache: ")} ${read} read / ${write} write per M tokens`);
|
|
161
|
+
}
|
|
162
|
+
if (model.pricing.batchInputPerMillion !== undefined || model.pricing.batchOutputPerMillion !== undefined) {
|
|
163
|
+
const bIn = model.pricing.batchInputPerMillion !== undefined
|
|
164
|
+
? formatPrice(model.pricing.batchInputPerMillion)
|
|
165
|
+
: c(DIM, "\u2014");
|
|
166
|
+
const bOut = model.pricing.batchOutputPerMillion !== undefined
|
|
167
|
+
? formatPrice(model.pricing.batchOutputPerMillion)
|
|
168
|
+
: c(DIM, "\u2014");
|
|
169
|
+
console.log(`${c(DIM, "Batch: ")} ${bIn} in / ${bOut} out per M tokens`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// ── routes ───────────────────────────────────────────────────────────────
|
|
174
|
+
/**
|
|
175
|
+
* Show every provider route through which a model can be accessed.
|
|
176
|
+
*
|
|
177
|
+
* A "route" is a serving-layer entry whose normalized model ID matches the
|
|
178
|
+
* given identifier. Output includes direct/preferred markers, origin provider,
|
|
179
|
+
* model version hint, and serving base URL.
|
|
180
|
+
*
|
|
181
|
+
* Pricing columns show `—` when data is unavailable.
|
|
182
|
+
*
|
|
183
|
+
* @param registry The model registry to query.
|
|
184
|
+
* @param modelId Canonical model ID or alias to look up.
|
|
185
|
+
* @param flags CLI flags (supports `--json`).
|
|
186
|
+
*/
|
|
187
|
+
export async function cmdRoutes(registry, modelId, flags) {
|
|
188
|
+
if (!modelId) {
|
|
189
|
+
console.error(c(RED, "Usage: kosha routes <model-id|alias>"));
|
|
190
|
+
process.exit(1);
|
|
191
|
+
}
|
|
192
|
+
await ensureDiscovered(registry);
|
|
193
|
+
const routes = registry.modelRouteInfo(modelId);
|
|
194
|
+
if (flags.json) {
|
|
195
|
+
console.log(JSON.stringify(routes, null, 2));
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (routes.length === 0) {
|
|
199
|
+
console.error(c(RED, `No routes found for model: "${modelId}"`));
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
const columns = [
|
|
203
|
+
{ header: "Pref", width: 4 },
|
|
204
|
+
{ header: "Provider", width: 14 },
|
|
205
|
+
{ header: "Model ID", width: 42 },
|
|
206
|
+
{ header: "Region", width: 14 },
|
|
207
|
+
{ header: "Origin", width: 12 },
|
|
208
|
+
{ header: "Ver", width: 12 },
|
|
209
|
+
{ header: "Base URL", width: 34 },
|
|
210
|
+
{ header: "$/M in", width: 8, align: "right" },
|
|
211
|
+
{ header: "$/M out", width: 8, align: "right" },
|
|
212
|
+
];
|
|
213
|
+
const rows = routes.map((route) => [
|
|
214
|
+
route.isPreferred ? c(GREEN, "*") : route.isDirect ? c(CYAN, "\u00B7") : " ",
|
|
215
|
+
c(CYAN, route.provider),
|
|
216
|
+
route.model.id,
|
|
217
|
+
route.model.region ?? c(DIM, "\u2014"),
|
|
218
|
+
route.originProvider ?? c(DIM, "\u2014"),
|
|
219
|
+
route.version ?? c(DIM, "\u2014"),
|
|
220
|
+
route.baseUrl ?? c(DIM, "\u2014"),
|
|
221
|
+
formatPrice(route.model.pricing?.inputPerMillion),
|
|
222
|
+
formatPrice(route.model.pricing?.outputPerMillion),
|
|
223
|
+
]);
|
|
224
|
+
console.log(`\n${c(BOLD, routes[0].model.name)} ${c(DIM, `(${routes.length} route${routes.length !== 1 ? "s" : ""})`)}\n`);
|
|
225
|
+
console.log(renderTable(columns, rows));
|
|
226
|
+
const preferred = routes.find((route) => route.isPreferred);
|
|
227
|
+
if (preferred) {
|
|
228
|
+
console.log(c(DIM, `\nPreferred route: ${preferred.provider} (${preferred.baseUrl ?? "base URL unknown"})`));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=cli-cmd-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-cmd-model.js","sourceRoot":"","sources":["../src/cli-cmd-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cli-cmd-query.ts — Role, capability, and pricing query commands.
|
|
3
|
+
*
|
|
4
|
+
* Contains `cmdRoles`, `cmdCheapest`, `cmdCapabilities`, and `cmdCapable` —
|
|
5
|
+
* commands that query and filter models by roles, capabilities, and pricing.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from `cli-commands.ts` to keep each module under 450 LOC.
|
|
8
|
+
*
|
|
9
|
+
* @module cli-cmd-query
|
|
10
|
+
*/
|
|
11
|
+
import type { ModelRegistry } from "./registry.js";
|
|
12
|
+
/**
|
|
13
|
+
* Show a provider -> model -> roles matrix.
|
|
14
|
+
*
|
|
15
|
+
* Useful for assistants that need to answer: "which providers/models can do X?"
|
|
16
|
+
*/
|
|
17
|
+
export declare function cmdRoles(registry: ModelRegistry, flags: Record<string, string | boolean>): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Return cheapest model candidates for a requested role/capability.
|
|
20
|
+
*/
|
|
21
|
+
export declare function cmdCheapest(registry: ModelRegistry, flags: Record<string, string | boolean>): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Show an aggregated capability overview across all discovered models.
|
|
24
|
+
* Each row shows a capability, how many models/providers support it,
|
|
25
|
+
* and an example model ID for quick reference.
|
|
26
|
+
*
|
|
27
|
+
* @param registry The model registry to query.
|
|
28
|
+
* @param flags CLI flags (supports `--provider`, `--json`).
|
|
29
|
+
*/
|
|
30
|
+
export declare function cmdCapabilities(registry: ModelRegistry, flags: Record<string, string | boolean>): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Show models that support a given capability/role.
|
|
33
|
+
* Normalizes the query so aliases work: "embeddings", "stt", "tools", "vision".
|
|
34
|
+
*
|
|
35
|
+
* @param registry The model registry to query.
|
|
36
|
+
* @param query The capability query (e.g. "vision", "embeddings", "tools").
|
|
37
|
+
* @param flags CLI flags (supports `--provider`, `--origin`, `--pricing`, `--json`, `--limit`).
|
|
38
|
+
*/
|
|
39
|
+
export declare function cmdCapable(registry: ModelRegistry, query: string, flags: Record<string, string | boolean>): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=cli-cmd-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-cmd-query.d.ts","sourceRoot":"","sources":["../src/cli-cmd-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AA0GnD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD9G;AAID;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGjH;AAID;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BrH;AAID;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC/H"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cli-cmd-query.ts — Role, capability, and pricing query commands.
|
|
3
|
+
*
|
|
4
|
+
* Contains `cmdRoles`, `cmdCheapest`, `cmdCapabilities`, and `cmdCapable` —
|
|
5
|
+
* commands that query and filter models by roles, capabilities, and pricing.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from `cli-commands.ts` to keep each module under 450 LOC.
|
|
8
|
+
*
|
|
9
|
+
* @module cli-cmd-query
|
|
10
|
+
*/
|
|
11
|
+
import { BOLD, CYAN, DIM, RED, YELLOW, c, formatPrice, formatPricingTier, line, renderTable, } from "./cli-format.js";
|
|
12
|
+
async function ensureDiscovered(registry) {
|
|
13
|
+
const candidate = registry;
|
|
14
|
+
if (typeof candidate.ensureDiscovered === "function") {
|
|
15
|
+
await candidate.ensureDiscovered();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (typeof candidate.isDiscovered === "function" && candidate.isDiscovered()) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (typeof candidate.discover === "function") {
|
|
22
|
+
await candidate.discover();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function parseNumberFlag(flags, name, fallback) {
|
|
26
|
+
const raw = flags[name];
|
|
27
|
+
if (typeof raw !== "string" || raw.trim() === "") {
|
|
28
|
+
return fallback;
|
|
29
|
+
}
|
|
30
|
+
const value = Number(raw);
|
|
31
|
+
return Number.isFinite(value) ? value : fallback;
|
|
32
|
+
}
|
|
33
|
+
const MODEL_TABLE_COLUMNS = [
|
|
34
|
+
{ header: "Provider", width: 12 },
|
|
35
|
+
{ header: "Model", width: 40 },
|
|
36
|
+
{ header: "Mode", width: 10 },
|
|
37
|
+
{ header: "Input", width: 12 },
|
|
38
|
+
{ header: "Output", width: 12 },
|
|
39
|
+
];
|
|
40
|
+
const PRICING_TABLE_COLUMNS = [
|
|
41
|
+
{ header: "Provider", width: 12 },
|
|
42
|
+
{ header: "Model", width: 34 },
|
|
43
|
+
{ header: "Mode", width: 10 },
|
|
44
|
+
{ header: "Tier", width: 6 },
|
|
45
|
+
{ header: "$/M in", width: 8, align: "right" },
|
|
46
|
+
{ header: "$/M out", width: 8, align: "right" },
|
|
47
|
+
{ header: "Cache R", width: 8, align: "right" },
|
|
48
|
+
{ header: "Cache W", width: 8, align: "right" },
|
|
49
|
+
{ header: "Batch in", width: 8, align: "right" },
|
|
50
|
+
{ header: "Batch out", width: 9, align: "right" },
|
|
51
|
+
];
|
|
52
|
+
function modelRow(model) {
|
|
53
|
+
return [
|
|
54
|
+
c(CYAN, model.providerId ?? model.provider ?? ""),
|
|
55
|
+
model.id ?? "",
|
|
56
|
+
model.mode ?? "",
|
|
57
|
+
formatPrice(model.inputPrice ?? undefined),
|
|
58
|
+
formatPrice(model.outputPrice ?? undefined),
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
function pricingRow(model) {
|
|
62
|
+
return [
|
|
63
|
+
c(CYAN, model.provider ?? ""),
|
|
64
|
+
model.id ?? "",
|
|
65
|
+
model.mode ?? "",
|
|
66
|
+
formatPricingTier(model.pricing),
|
|
67
|
+
formatPrice(model.pricing?.inputPerMillion),
|
|
68
|
+
formatPrice(model.pricing?.outputPerMillion),
|
|
69
|
+
formatPrice(model.pricing?.cacheReadPerMillion),
|
|
70
|
+
formatPrice(model.pricing?.cacheWritePerMillion),
|
|
71
|
+
formatPrice(model.pricing?.batchInputPerMillion),
|
|
72
|
+
formatPrice(model.pricing?.batchOutputPerMillion),
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
// ── roles ────────────────────────────────────────────────────────────────
|
|
76
|
+
/**
|
|
77
|
+
* Show a provider -> model -> roles matrix.
|
|
78
|
+
*
|
|
79
|
+
* Useful for assistants that need to answer: "which providers/models can do X?"
|
|
80
|
+
*/
|
|
81
|
+
export async function cmdRoles(registry, flags) {
|
|
82
|
+
const provider = typeof flags.provider === "string" ? flags.provider : undefined;
|
|
83
|
+
const originProvider = typeof flags.origin === "string" ? flags.origin : undefined;
|
|
84
|
+
const mode = typeof flags.mode === "string" ? flags.mode : undefined;
|
|
85
|
+
const capability = typeof flags.capability === "string" ? flags.capability : undefined;
|
|
86
|
+
const role = typeof flags.role === "string" ? flags.role : undefined;
|
|
87
|
+
await ensureDiscovered(registry);
|
|
88
|
+
const providers = registry.providerRoles({ provider, originProvider, mode, capability, role });
|
|
89
|
+
if (flags.json) {
|
|
90
|
+
console.log(JSON.stringify({
|
|
91
|
+
providers,
|
|
92
|
+
count: providers.length,
|
|
93
|
+
modelCount: providers.reduce((sum, p) => sum + p.models.length, 0),
|
|
94
|
+
missingCredentials: registry.missingCredentialPrompts(providers.map((p) => p.id)),
|
|
95
|
+
}, null, 2));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (providers.length === 0) {
|
|
99
|
+
console.log(c(YELLOW, "No provider/model roles found for the given filters."));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const columns = [
|
|
103
|
+
{ header: "Provider", width: 12 },
|
|
104
|
+
{ header: "Model", width: 40 },
|
|
105
|
+
{ header: "Mode", width: 10 },
|
|
106
|
+
{ header: "Roles", width: 56 },
|
|
107
|
+
];
|
|
108
|
+
const rows = providers.flatMap((providerInfo) => providerInfo.models.map((model) => [
|
|
109
|
+
c(CYAN, providerInfo.id),
|
|
110
|
+
model.id,
|
|
111
|
+
model.mode,
|
|
112
|
+
model.roles.join(", "),
|
|
113
|
+
]));
|
|
114
|
+
console.log(renderTable(columns, rows));
|
|
115
|
+
const missing = registry.missingCredentialPrompts(providers.map((p) => p.id));
|
|
116
|
+
if (missing.length > 0) {
|
|
117
|
+
console.log(c(DIM, "\nMissing provider credentials:"));
|
|
118
|
+
for (const prompt of missing) {
|
|
119
|
+
console.log(` ${c(YELLOW, prompt.providerId)}: ${prompt.message}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// ── cheapest ─────────────────────────────────────────────────────────────
|
|
124
|
+
/**
|
|
125
|
+
* Return cheapest model candidates for a requested role/capability.
|
|
126
|
+
*/
|
|
127
|
+
export async function cmdCheapest(registry, flags) {
|
|
128
|
+
const provider = typeof flags.provider === "string" ? flags.provider : undefined;
|
|
129
|
+
const originProvider = typeof flags.origin === "string" ? flags.origin : undefined;
|
|
130
|
+
const mode = typeof flags.mode === "string" ? flags.mode : undefined;
|
|
131
|
+
const capability = typeof flags.capability === "string" ? flags.capability : undefined;
|
|
132
|
+
const role = typeof flags.role === "string" ? flags.role : undefined;
|
|
133
|
+
const showPricing = flags.pricing === true;
|
|
134
|
+
await ensureDiscovered(registry);
|
|
135
|
+
const result = registry.cheapestModels({
|
|
136
|
+
provider,
|
|
137
|
+
originProvider,
|
|
138
|
+
mode,
|
|
139
|
+
capability,
|
|
140
|
+
role,
|
|
141
|
+
limit: parseNumberFlag(flags, "limit"),
|
|
142
|
+
priceMetric: typeof flags["price-metric"] === "string"
|
|
143
|
+
? flags["price-metric"]
|
|
144
|
+
: undefined,
|
|
145
|
+
inputWeight: parseNumberFlag(flags, "input-weight"),
|
|
146
|
+
outputWeight: parseNumberFlag(flags, "output-weight"),
|
|
147
|
+
includeUnpriced: flags["include-unpriced"] === true,
|
|
148
|
+
});
|
|
149
|
+
if (flags.json) {
|
|
150
|
+
console.log(JSON.stringify(result, null, 2));
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (result.matches.length === 0) {
|
|
154
|
+
console.log(c(YELLOW, "No priced models found for the requested filters."));
|
|
155
|
+
if (result.missingCredentials.length > 0) {
|
|
156
|
+
console.log(c(DIM, "\nMissing provider credentials:"));
|
|
157
|
+
for (const prompt of result.missingCredentials) {
|
|
158
|
+
console.log(` ${c(YELLOW, prompt.providerId)}: ${prompt.message}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (showPricing) {
|
|
164
|
+
const columns = [
|
|
165
|
+
{ header: "Provider", width: 12 },
|
|
166
|
+
{ header: "Model", width: 30 },
|
|
167
|
+
{ header: "Metric", width: 8 },
|
|
168
|
+
{ header: "Tier", width: 6 },
|
|
169
|
+
{ header: "Score", width: 8, align: "right" },
|
|
170
|
+
{ header: "$/M in", width: 8, align: "right" },
|
|
171
|
+
{ header: "$/M out", width: 8, align: "right" },
|
|
172
|
+
{ header: "Cache R", width: 8, align: "right" },
|
|
173
|
+
{ header: "Cache W", width: 8, align: "right" },
|
|
174
|
+
{ header: "Batch in", width: 8, align: "right" },
|
|
175
|
+
{ header: "Batch out", width: 9, align: "right" },
|
|
176
|
+
];
|
|
177
|
+
const rows = result.matches.map((match) => [
|
|
178
|
+
c(CYAN, match.model.provider),
|
|
179
|
+
match.model.id,
|
|
180
|
+
match.priceMetric,
|
|
181
|
+
formatPricingTier(match.model.pricing),
|
|
182
|
+
match.score === undefined ? "\u2014" : formatPrice(match.score),
|
|
183
|
+
formatPrice(match.model.pricing?.inputPerMillion),
|
|
184
|
+
formatPrice(match.model.pricing?.outputPerMillion),
|
|
185
|
+
formatPrice(match.model.pricing?.cacheReadPerMillion),
|
|
186
|
+
formatPrice(match.model.pricing?.cacheWritePerMillion),
|
|
187
|
+
formatPrice(match.model.pricing?.batchInputPerMillion),
|
|
188
|
+
formatPrice(match.model.pricing?.batchOutputPerMillion),
|
|
189
|
+
]);
|
|
190
|
+
console.log(renderTable(columns, rows));
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
const columns = [
|
|
194
|
+
{ header: "Provider", width: 12 },
|
|
195
|
+
{ header: "Model", width: 38 },
|
|
196
|
+
{ header: "Mode", width: 10 },
|
|
197
|
+
{ header: "Metric", width: 8 },
|
|
198
|
+
{ header: "Score", width: 10, align: "right" },
|
|
199
|
+
{ header: "$/M in", width: 8, align: "right" },
|
|
200
|
+
{ header: "$/M out", width: 8, align: "right" },
|
|
201
|
+
];
|
|
202
|
+
const rows = result.matches.map((match) => [
|
|
203
|
+
c(CYAN, match.model.provider),
|
|
204
|
+
match.model.id,
|
|
205
|
+
match.model.mode,
|
|
206
|
+
match.priceMetric,
|
|
207
|
+
match.score === undefined ? "\u2014" : formatPrice(match.score),
|
|
208
|
+
formatPrice(match.model.pricing?.inputPerMillion),
|
|
209
|
+
formatPrice(match.model.pricing?.outputPerMillion),
|
|
210
|
+
]);
|
|
211
|
+
console.log(renderTable(columns, rows));
|
|
212
|
+
}
|
|
213
|
+
console.log(c(DIM, `\n${result.pricedCandidates}/${result.candidates} candidates had usable pricing.`));
|
|
214
|
+
if (result.missingCredentials.length > 0) {
|
|
215
|
+
console.log(c(DIM, "\nMissing provider credentials:"));
|
|
216
|
+
for (const prompt of result.missingCredentials) {
|
|
217
|
+
console.log(` ${c(YELLOW, prompt.providerId)}: ${prompt.message}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// ── capabilities ─────────────────────────────────────────────────────────
|
|
222
|
+
/**
|
|
223
|
+
* Show an aggregated capability overview across all discovered models.
|
|
224
|
+
* Each row shows a capability, how many models/providers support it,
|
|
225
|
+
* and an example model ID for quick reference.
|
|
226
|
+
*
|
|
227
|
+
* @param registry The model registry to query.
|
|
228
|
+
* @param flags CLI flags (supports `--provider`, `--json`).
|
|
229
|
+
*/
|
|
230
|
+
export async function cmdCapabilities(registry, flags) {
|
|
231
|
+
const provider = typeof flags.provider === "string" ? flags.provider : undefined;
|
|
232
|
+
await ensureDiscovered(registry);
|
|
233
|
+
const caps = registry.capabilities({ provider });
|
|
234
|
+
if (flags.json) {
|
|
235
|
+
console.log(JSON.stringify(caps, null, 2));
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (caps.length === 0) {
|
|
239
|
+
console.log(c(YELLOW, "No capabilities found."));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const columns = [
|
|
243
|
+
{ header: "Capability", width: 20 },
|
|
244
|
+
{ header: "Models", width: 8, align: "right" },
|
|
245
|
+
{ header: "Providers", width: 10, align: "right" },
|
|
246
|
+
{ header: "Example Model", width: 38 },
|
|
247
|
+
];
|
|
248
|
+
const rows = caps.map((cap) => [
|
|
249
|
+
c(CYAN, cap.capability),
|
|
250
|
+
String(cap.modelCount),
|
|
251
|
+
String(cap.providerCount),
|
|
252
|
+
cap.exampleModelId ?? c(DIM, "\u2014"),
|
|
253
|
+
]);
|
|
254
|
+
const totalModels = registry.models({ provider }).length;
|
|
255
|
+
console.log(renderTable(columns, rows));
|
|
256
|
+
console.log(c(DIM, `\n${caps.length} capabilities across ${totalModels} models`));
|
|
257
|
+
}
|
|
258
|
+
// ── capable ──────────────────────────────────────────────────────────────
|
|
259
|
+
/**
|
|
260
|
+
* Show models that support a given capability/role.
|
|
261
|
+
* Normalizes the query so aliases work: "embeddings", "stt", "tools", "vision".
|
|
262
|
+
*
|
|
263
|
+
* @param registry The model registry to query.
|
|
264
|
+
* @param query The capability query (e.g. "vision", "embeddings", "tools").
|
|
265
|
+
* @param flags CLI flags (supports `--provider`, `--origin`, `--pricing`, `--json`, `--limit`).
|
|
266
|
+
*/
|
|
267
|
+
export async function cmdCapable(registry, query, flags) {
|
|
268
|
+
if (!query) {
|
|
269
|
+
console.error(c(RED, "Usage: kosha capable <capability>"));
|
|
270
|
+
process.exit(1);
|
|
271
|
+
}
|
|
272
|
+
const provider = typeof flags.provider === "string" ? flags.provider : undefined;
|
|
273
|
+
const originProvider = typeof flags.origin === "string" ? flags.origin : undefined;
|
|
274
|
+
const mode = typeof flags.mode === "string" ? flags.mode : undefined;
|
|
275
|
+
const limit = parseNumberFlag(flags, "limit");
|
|
276
|
+
const showPricing = flags.pricing === true;
|
|
277
|
+
await ensureDiscovered(registry);
|
|
278
|
+
const normalized = registry.normalizeRoleToken(query);
|
|
279
|
+
const allModels = registry.models({ provider, originProvider, mode });
|
|
280
|
+
let models = allModels.filter((m) => registry.modelSupportsRole(m, normalized));
|
|
281
|
+
if (limit !== undefined && limit > 0) {
|
|
282
|
+
models = models.slice(0, limit);
|
|
283
|
+
}
|
|
284
|
+
if (flags.json) {
|
|
285
|
+
console.log(JSON.stringify(models, null, 2));
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (models.length === 0) {
|
|
289
|
+
console.log(c(YELLOW, `No models found with capability "${query}"${normalized !== query ? ` (normalized: "${normalized}")` : ""}`));
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
const header = normalized !== query
|
|
293
|
+
? `Models with capability ${c(CYAN, normalized)} ${c(DIM, `(from "${query}")`)}`
|
|
294
|
+
: `Models with capability ${c(CYAN, normalized)}`;
|
|
295
|
+
console.log(`\n${c(BOLD, header)}\n`);
|
|
296
|
+
const capableColumns = showPricing ? PRICING_TABLE_COLUMNS : MODEL_TABLE_COLUMNS;
|
|
297
|
+
const capableRowFn = showPricing ? pricingRow : modelRow;
|
|
298
|
+
console.log(renderTable(capableColumns, models.map(capableRowFn)));
|
|
299
|
+
const providerCount = new Set(models.map((m) => m.provider)).size;
|
|
300
|
+
console.log(c(DIM, line("\u2500", showPricing ? 110 : 90)));
|
|
301
|
+
console.log(`${c(BOLD, String(models.length))} models from ${c(BOLD, String(providerCount))} providers`);
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=cli-cmd-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-cmd-query.js","sourceRoot":"","sources":["../src/cli-cmd-query.ts"],"names":[],"mappings":"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"}
|