@sriinnu/kosha-discovery 1.0.0 → 1.1.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 +50 -3
- package/dist/discovery/index.d.ts +3 -6
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +36 -55
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/promo-overrides.js +3 -3
- package/dist/discovery/promo-overrides.js.map +1 -1
- package/dist/mcp-server.d.ts +18 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +293 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/provider-catalog.d.ts +2 -0
- package/dist/provider-catalog.d.ts.map +1 -1
- package/dist/provider-catalog.js +18 -0
- package/dist/provider-catalog.js.map +1 -1
- package/dist/proxy.d.ts +31 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +193 -0
- package/dist/proxy.js.map +1 -0
- package/dist/registry-discovery.js +1 -1
- package/dist/registry-discovery.js.map +1 -1
- package/dist/registry-runtime.d.ts +20 -0
- package/dist/registry-runtime.d.ts.map +1 -1
- package/dist/registry-runtime.js +223 -39
- package/dist/registry-runtime.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -0
- package/dist/server.js.map +1 -1
- package/logo.png +0 -0
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="logo
|
|
2
|
+
<img src="logo.png" alt="Kosha — AI Model Discovery" width="140" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<h1 align="center">kosha-discovery — कोश</h1>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<a href="https://www.npmjs.com/package/@sriinnu/kosha-discovery"><img src="https://img.shields.io/node/v/%40sriinnu%2Fkosha-discovery?color=5B21B6" alt="node version" /></a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
|
-
Kosha (कोश — *treasury*) discovers AI models across providers, resolves credentials, enriches with pricing, and exposes the catalog through a library, CLI, and
|
|
16
|
+
Kosha (कोश — *treasury*) discovers AI models across providers, resolves credentials, enriches with pricing, and exposes the catalog through a library, CLI, HTTP API, and a built-in OpenAI-compatible proxy. One source of truth for model identity, pricing, and routing — so your app doesn't break when providers ship new SKUs or change rates.
|
|
17
17
|
|
|
18
18
|
## Install
|
|
19
19
|
|
|
@@ -63,6 +63,53 @@ GET /api/providers GET /api/roles
|
|
|
63
63
|
POST /api/refresh GET /health
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
+
### Proxy
|
|
67
|
+
|
|
68
|
+
Kosha runs as an OpenAI-compatible proxy. Point your SDK at `http://localhost:3000/proxy/v1` and it resolves the model, picks the right provider, injects credentials, and forwards — streaming included.
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
kosha serve # start on :3000
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import OpenAI from "openai";
|
|
76
|
+
|
|
77
|
+
const client = new OpenAI({
|
|
78
|
+
baseURL: "http://localhost:3000/proxy/v1",
|
|
79
|
+
apiKey: "not-used", // kosha resolves credentials from env
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Use any canonical model ID or alias
|
|
83
|
+
const res = await client.chat.completions.create({
|
|
84
|
+
model: "sonnet",
|
|
85
|
+
messages: [{ role: "user", content: "hello" }],
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// Let kosha pick the cheapest model you have a key for
|
|
89
|
+
const cheap = await client.chat.completions.create({
|
|
90
|
+
model: "kosha:cheapest",
|
|
91
|
+
messages: [{ role: "user", content: "hello" }],
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Cheapest model with tool_use and at least 128k context
|
|
95
|
+
const routed = await client.chat.completions.create({
|
|
96
|
+
model: "kosha:cheapest[tool_use,128k]",
|
|
97
|
+
messages: [{ role: "user", content: "hello" }],
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**`kosha:cheapest` filter syntax** (comma-separated, combinable):
|
|
102
|
+
|
|
103
|
+
| Filter | Example | Meaning |
|
|
104
|
+
|--------|---------|---------|
|
|
105
|
+
| capability | `tool_use`, `vision` | model must have this tag |
|
|
106
|
+
| `<N>k` | `128k`, `200k` | minimum context window |
|
|
107
|
+
| `provider:<id>` | `provider:groq` | pin to a specific provider |
|
|
108
|
+
|
|
109
|
+
The response always includes `x-kosha-model`, `x-kosha-provider`, and `x-kosha-requested` headers so the caller knows exactly what ran.
|
|
110
|
+
|
|
111
|
+
Supported transports: `openai`, `openai-compatible-http`, `ollama`. Anthropic, Google, Bedrock, and Vertex require wire-format translation — not yet proxied.
|
|
112
|
+
|
|
66
113
|
## Supported providers
|
|
67
114
|
|
|
68
115
|
| Provider | Discovery | Credential sources |
|
|
@@ -85,7 +132,7 @@ Full credential setup: [docs/credentials.md](docs/credentials.md).
|
|
|
85
132
|
<img src="architecture.svg" alt="Kosha Architecture" width="720" />
|
|
86
133
|
</p>
|
|
87
134
|
|
|
88
|
-
Discovery layer talks to provider APIs and local catalogs. Enrichment layer fills pricing and context windows from the LiteLLM catalog and models.dev. Resilience layer (circuit breaker + stale-cache fallback + health tracker) keeps a flaky provider a degraded read, never a crash. Manifest layer writes a v1-stable JSON snapshot so downstream consumers — `tokmeter`, `chitragupta`, `ayuh` — read prices from one source instead of inventing their own.
|
|
135
|
+
Discovery layer talks to provider APIs and local catalogs. Enrichment layer fills pricing and context windows from the LiteLLM catalog and models.dev. Resilience layer (circuit breaker + stale-cache fallback + health tracker) keeps a flaky provider a degraded read, never a crash. Manifest layer writes a v1-stable JSON snapshot so downstream consumers — `tokmeter`, `chitragupta`, `ayuh` — read prices from one source instead of inventing their own. Proxy layer exposes an OpenAI-compatible endpoint that resolves `kosha:cheapest[…]` hints at request time, injects credentials, and forwards to the winning provider.
|
|
89
136
|
|
|
90
137
|
## Docs
|
|
91
138
|
|
|
@@ -34,13 +34,10 @@ export declare function getAllDiscoverers(options?: {
|
|
|
34
34
|
llamaCppBaseUrl?: string;
|
|
35
35
|
}): ProviderDiscoverer[];
|
|
36
36
|
/**
|
|
37
|
-
* Returns a single discoverer by provider ID, or undefined if not found.
|
|
37
|
+
* Returns a single discoverer by canonical provider ID, or undefined if not found.
|
|
38
38
|
*
|
|
39
|
-
* Supported IDs
|
|
40
|
-
*
|
|
41
|
-
* `"fireworks"`, `"groq"`, `"mistral"`, `"deepinfra"`, `"cohere"`,
|
|
42
|
-
* `"cerebras"`, `"perplexity"`, `"deepseek"`, `"moonshot"`,
|
|
43
|
-
* `"glm"`, `"zai"`, `"minimax"`.
|
|
39
|
+
* Supported IDs are the keys of {@link DISCOVERER_REGISTRY} — every provider
|
|
40
|
+
* in the canonical catalog.
|
|
44
41
|
*/
|
|
45
42
|
export declare function getDiscoverer(providerId: string, options?: {
|
|
46
43
|
baseUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA2DtD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,EAAE,CAMtH;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,GAAG,SAAS,CAGhH"}
|
package/dist/discovery/index.js
CHANGED
|
@@ -45,6 +45,30 @@ import { GLMDiscoverer } from "./glm.js";
|
|
|
45
45
|
import { ZAIDiscoverer } from "./zai.js";
|
|
46
46
|
import { MiniMaxDiscoverer } from "./minimax.js";
|
|
47
47
|
import { normalizeProviderId } from "../provider-catalog.js";
|
|
48
|
+
const DISCOVERER_REGISTRY = {
|
|
49
|
+
anthropic: () => new AnthropicDiscoverer(),
|
|
50
|
+
openai: () => new OpenAIDiscoverer(),
|
|
51
|
+
google: () => new GoogleDiscoverer(),
|
|
52
|
+
ollama: (baseUrl) => new OllamaDiscoverer(baseUrl),
|
|
53
|
+
"llama.cpp": (baseUrl) => new LlamaCppDiscoverer(baseUrl),
|
|
54
|
+
openrouter: () => new OpenRouterDiscoverer(),
|
|
55
|
+
bedrock: () => new BedrockDiscoverer(),
|
|
56
|
+
vertex: () => new VertexDiscoverer(),
|
|
57
|
+
nvidia: () => new NvidiaDiscoverer(),
|
|
58
|
+
together: () => new TogetherDiscoverer(),
|
|
59
|
+
fireworks: () => new FireworksDiscoverer(),
|
|
60
|
+
groq: () => new GroqDiscoverer(),
|
|
61
|
+
mistral: () => new MistralDiscoverer(),
|
|
62
|
+
deepinfra: () => new DeepInfraDiscoverer(),
|
|
63
|
+
cohere: () => new CohereDiscoverer(),
|
|
64
|
+
cerebras: () => new CerebrasDiscoverer(),
|
|
65
|
+
perplexity: () => new PerplexityDiscoverer(),
|
|
66
|
+
deepseek: () => new DeepSeekDiscoverer(),
|
|
67
|
+
moonshot: () => new MoonshotDiscoverer(),
|
|
68
|
+
glm: () => new GLMDiscoverer(),
|
|
69
|
+
zai: () => new ZAIDiscoverer(),
|
|
70
|
+
minimax: () => new MiniMaxDiscoverer(),
|
|
71
|
+
};
|
|
48
72
|
/**
|
|
49
73
|
* Returns all built-in provider discoverers.
|
|
50
74
|
*
|
|
@@ -52,65 +76,22 @@ import { normalizeProviderId } from "../provider-catalog.js";
|
|
|
52
76
|
* as well as managed-service proxies (AWS Bedrock, Google Vertex AI).
|
|
53
77
|
*/
|
|
54
78
|
export function getAllDiscoverers(options) {
|
|
55
|
-
return [
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
new BedrockDiscoverer(),
|
|
63
|
-
new VertexDiscoverer(),
|
|
64
|
-
new NvidiaDiscoverer(),
|
|
65
|
-
new TogetherDiscoverer(),
|
|
66
|
-
new FireworksDiscoverer(),
|
|
67
|
-
new GroqDiscoverer(),
|
|
68
|
-
new MistralDiscoverer(),
|
|
69
|
-
new DeepInfraDiscoverer(),
|
|
70
|
-
new CohereDiscoverer(),
|
|
71
|
-
new CerebrasDiscoverer(),
|
|
72
|
-
new PerplexityDiscoverer(),
|
|
73
|
-
new DeepSeekDiscoverer(),
|
|
74
|
-
new MoonshotDiscoverer(),
|
|
75
|
-
new GLMDiscoverer(),
|
|
76
|
-
new ZAIDiscoverer(),
|
|
77
|
-
new MiniMaxDiscoverer(),
|
|
78
|
-
];
|
|
79
|
+
return Object.entries(DISCOVERER_REGISTRY).map(([id, factory]) => {
|
|
80
|
+
if (id === "ollama")
|
|
81
|
+
return factory(options?.ollamaBaseUrl);
|
|
82
|
+
if (id === "llama.cpp")
|
|
83
|
+
return factory(options?.llamaCppBaseUrl);
|
|
84
|
+
return factory();
|
|
85
|
+
});
|
|
79
86
|
}
|
|
80
87
|
/**
|
|
81
|
-
* Returns a single discoverer by provider ID, or undefined if not found.
|
|
88
|
+
* Returns a single discoverer by canonical provider ID, or undefined if not found.
|
|
82
89
|
*
|
|
83
|
-
* Supported IDs
|
|
84
|
-
*
|
|
85
|
-
* `"fireworks"`, `"groq"`, `"mistral"`, `"deepinfra"`, `"cohere"`,
|
|
86
|
-
* `"cerebras"`, `"perplexity"`, `"deepseek"`, `"moonshot"`,
|
|
87
|
-
* `"glm"`, `"zai"`, `"minimax"`.
|
|
90
|
+
* Supported IDs are the keys of {@link DISCOVERER_REGISTRY} — every provider
|
|
91
|
+
* in the canonical catalog.
|
|
88
92
|
*/
|
|
89
93
|
export function getDiscoverer(providerId, options) {
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
openai: () => new OpenAIDiscoverer(),
|
|
93
|
-
google: () => new GoogleDiscoverer(),
|
|
94
|
-
ollama: () => new OllamaDiscoverer(options?.baseUrl),
|
|
95
|
-
"llama.cpp": () => new LlamaCppDiscoverer(options?.baseUrl),
|
|
96
|
-
openrouter: () => new OpenRouterDiscoverer(),
|
|
97
|
-
bedrock: () => new BedrockDiscoverer(),
|
|
98
|
-
vertex: () => new VertexDiscoverer(),
|
|
99
|
-
nvidia: () => new NvidiaDiscoverer(),
|
|
100
|
-
together: () => new TogetherDiscoverer(),
|
|
101
|
-
fireworks: () => new FireworksDiscoverer(),
|
|
102
|
-
groq: () => new GroqDiscoverer(),
|
|
103
|
-
mistral: () => new MistralDiscoverer(),
|
|
104
|
-
deepinfra: () => new DeepInfraDiscoverer(),
|
|
105
|
-
cohere: () => new CohereDiscoverer(),
|
|
106
|
-
cerebras: () => new CerebrasDiscoverer(),
|
|
107
|
-
perplexity: () => new PerplexityDiscoverer(),
|
|
108
|
-
deepseek: () => new DeepSeekDiscoverer(),
|
|
109
|
-
moonshot: () => new MoonshotDiscoverer(),
|
|
110
|
-
glm: () => new GLMDiscoverer(),
|
|
111
|
-
zai: () => new ZAIDiscoverer(),
|
|
112
|
-
minimax: () => new MiniMaxDiscoverer(),
|
|
113
|
-
};
|
|
114
|
-
return map[normalizeProviderId(providerId) ?? providerId]?.();
|
|
94
|
+
const id = normalizeProviderId(providerId) ?? providerId;
|
|
95
|
+
return DISCOVERER_REGISTRY[id]?.(options?.baseUrl);
|
|
115
96
|
}
|
|
116
97
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,8 +36,8 @@ export const PROMO_OVERRIDES = [
|
|
|
36
36
|
outputPerMillion: 0.87,
|
|
37
37
|
cacheReadPerMillion: 0.003625,
|
|
38
38
|
},
|
|
39
|
-
endsAt: new Date("2026-05-
|
|
40
|
-
reason: "DeepSeek
|
|
39
|
+
endsAt: new Date("2026-05-31T15:59:00Z"),
|
|
40
|
+
reason: "DeepSeek 75% off promo on deepseek-v4-pro, extended to 2026-05-31 — https://api-docs.deepseek.com/quick_start/pricing/",
|
|
41
41
|
},
|
|
42
42
|
];
|
|
43
43
|
/**
|
|
@@ -60,7 +60,7 @@ export function applyPromoOverrides(cards, now = new Date()) {
|
|
|
60
60
|
continue;
|
|
61
61
|
cards[i] = {
|
|
62
62
|
...card,
|
|
63
|
-
pricing: { ...match.pricing },
|
|
63
|
+
pricing: { ...card.pricing, ...match.pricing },
|
|
64
64
|
// Preserve a record of why this row diverges from the public catalog
|
|
65
65
|
// rate so consumers can trace the override.
|
|
66
66
|
rawCapabilities: dedupe([...(card.rawCapabilities ?? card.capabilities), "promo_override"]),
|
|
@@ -1 +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,
|
|
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,wHAAwH;KACzH;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,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;YAC9C,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,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* kosha-discovery — MCP server (stdio transport, protocol 2024-11-05).
|
|
4
|
+
*
|
|
5
|
+
* Exposes the local kosha registry as MCP tools so AI agents can query
|
|
6
|
+
* model pricing, routing, and health without HTTP.
|
|
7
|
+
*
|
|
8
|
+
* Tools:
|
|
9
|
+
* kosha_query_models — list / filter models
|
|
10
|
+
* kosha_cheapest_model — cheapest model meeting requirements
|
|
11
|
+
* kosha_model_detail — full detail for one model
|
|
12
|
+
* kosha_model_routes — all provider routes for a model
|
|
13
|
+
* kosha_resolve_alias — alias → canonical ID
|
|
14
|
+
* kosha_provider_health — provider auth + error status
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* kosha-discovery — MCP server (stdio transport, protocol 2024-11-05).
|
|
4
|
+
*
|
|
5
|
+
* Exposes the local kosha registry as MCP tools so AI agents can query
|
|
6
|
+
* model pricing, routing, and health without HTTP.
|
|
7
|
+
*
|
|
8
|
+
* Tools:
|
|
9
|
+
* kosha_query_models — list / filter models
|
|
10
|
+
* kosha_cheapest_model — cheapest model meeting requirements
|
|
11
|
+
* kosha_model_detail — full detail for one model
|
|
12
|
+
* kosha_model_routes — all provider routes for a model
|
|
13
|
+
* kosha_resolve_alias — alias → canonical ID
|
|
14
|
+
* kosha_provider_health — provider auth + error status
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { ModelRegistry } from "./registry.js";
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Tool definitions (MCP schema)
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
const TOOLS = [
|
|
22
|
+
{
|
|
23
|
+
name: "kosha_query_models",
|
|
24
|
+
description: "List AI models from the local kosha registry. Optionally filter by provider, mode, or capability tag. Returns id, provider, name, mode, context window, capabilities, and pricing.",
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: "object",
|
|
27
|
+
properties: {
|
|
28
|
+
provider: { type: "string", description: "Provider ID (e.g. anthropic, openai, groq, openrouter)" },
|
|
29
|
+
mode: {
|
|
30
|
+
type: "string",
|
|
31
|
+
enum: ["chat", "embedding", "image", "audio"],
|
|
32
|
+
description: "Primary model mode",
|
|
33
|
+
},
|
|
34
|
+
capability: {
|
|
35
|
+
type: "string",
|
|
36
|
+
description: "Capability tag (e.g. vision, tool_use, code, reasoning)",
|
|
37
|
+
},
|
|
38
|
+
limit: { type: "number", description: "Max results to return (default 20)" },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "kosha_cheapest_model",
|
|
44
|
+
description: "Find the cheapest AI model that meets your requirements. Returns ranked matches with per-million token pricing. Use this before routing a request to pick the most cost-effective option.",
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: "object",
|
|
47
|
+
properties: {
|
|
48
|
+
capability: {
|
|
49
|
+
type: "string",
|
|
50
|
+
description: "Required capability (e.g. tool_use, vision, code, reasoning)",
|
|
51
|
+
},
|
|
52
|
+
min_context_k: {
|
|
53
|
+
type: "number",
|
|
54
|
+
description: "Minimum context window in thousands of tokens (e.g. 128 means 128k)",
|
|
55
|
+
},
|
|
56
|
+
provider: { type: "string", description: "Pin to a specific provider" },
|
|
57
|
+
limit: { type: "number", description: "Number of ranked results (default 5)" },
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "kosha_model_detail",
|
|
63
|
+
description: "Get full details for a specific model — pricing, capabilities, context window, tool dialect, structured output modes, status, and deprecation info.",
|
|
64
|
+
inputSchema: {
|
|
65
|
+
type: "object",
|
|
66
|
+
properties: {
|
|
67
|
+
model: {
|
|
68
|
+
type: "string",
|
|
69
|
+
description: "Model ID or alias (e.g. sonnet, claude-sonnet-4-6, gpt-4o, deepseek-v3)",
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
required: ["model"],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: "kosha_model_routes",
|
|
77
|
+
description: "List all serving-layer routes for a model (direct provider, OpenRouter, Bedrock, Vertex, etc.) with pricing per route. Useful for finding the cheapest or most available path to a specific model.",
|
|
78
|
+
inputSchema: {
|
|
79
|
+
type: "object",
|
|
80
|
+
properties: {
|
|
81
|
+
model: { type: "string", description: "Model ID or alias" },
|
|
82
|
+
},
|
|
83
|
+
required: ["model"],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "kosha_resolve_alias",
|
|
88
|
+
description: "Resolve a model alias or short name to its canonical ID and provider.",
|
|
89
|
+
inputSchema: {
|
|
90
|
+
type: "object",
|
|
91
|
+
properties: {
|
|
92
|
+
alias: {
|
|
93
|
+
type: "string",
|
|
94
|
+
description: "Short name or alias (e.g. sonnet, opus, haiku, gpt-4o-mini, gemini-flash)",
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
required: ["alias"],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: "kosha_provider_health",
|
|
102
|
+
description: "Get authentication and health status for all discovered providers. Shows which providers are active, which need credentials, and any recent discovery errors.",
|
|
103
|
+
inputSchema: {
|
|
104
|
+
type: "object",
|
|
105
|
+
properties: {
|
|
106
|
+
provider: { type: "string", description: "Filter to a specific provider ID" },
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// Registry — load in background on startup so first tool call is fast
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
let registryInstance = null;
|
|
115
|
+
const registryReady = (async () => {
|
|
116
|
+
const reg = new ModelRegistry();
|
|
117
|
+
await reg.discover();
|
|
118
|
+
registryInstance = reg;
|
|
119
|
+
return reg;
|
|
120
|
+
})();
|
|
121
|
+
async function getRegistry() {
|
|
122
|
+
return registryInstance ?? registryReady;
|
|
123
|
+
}
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
// Tool handlers
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
async function callTool(name, args) {
|
|
128
|
+
const reg = await getRegistry();
|
|
129
|
+
switch (name) {
|
|
130
|
+
case "kosha_query_models": {
|
|
131
|
+
const models = reg.models({
|
|
132
|
+
provider: args.provider,
|
|
133
|
+
mode: args.mode,
|
|
134
|
+
capability: args.capability,
|
|
135
|
+
});
|
|
136
|
+
const limit = typeof args.limit === "number" ? args.limit : 20;
|
|
137
|
+
return models.slice(0, limit).map((m) => ({
|
|
138
|
+
id: m.id,
|
|
139
|
+
provider: m.provider,
|
|
140
|
+
name: m.name,
|
|
141
|
+
mode: m.mode,
|
|
142
|
+
contextWindow: m.contextWindow,
|
|
143
|
+
capabilities: m.capabilities,
|
|
144
|
+
pricing: m.pricing ?? null,
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
case "kosha_cheapest_model": {
|
|
148
|
+
const minContext = typeof args.min_context_k === "number" ? args.min_context_k * 1_000 : undefined;
|
|
149
|
+
const result = reg.cheapestModels({
|
|
150
|
+
mode: "chat",
|
|
151
|
+
capability: args.capability,
|
|
152
|
+
provider: args.provider,
|
|
153
|
+
limit: typeof args.limit === "number" ? args.limit : 5,
|
|
154
|
+
});
|
|
155
|
+
const matches = minContext
|
|
156
|
+
? result.matches.filter((m) => m.model.contextWindow >= minContext)
|
|
157
|
+
: result.matches;
|
|
158
|
+
return {
|
|
159
|
+
matches: matches.map((m) => ({
|
|
160
|
+
id: m.model.id,
|
|
161
|
+
provider: m.model.provider,
|
|
162
|
+
name: m.model.name,
|
|
163
|
+
contextWindow: m.model.contextWindow,
|
|
164
|
+
pricing: m.model.pricing ?? null,
|
|
165
|
+
score: m.score,
|
|
166
|
+
priceMetric: m.priceMetric,
|
|
167
|
+
})),
|
|
168
|
+
missingCredentials: result.missingCredentials.map((c) => c.providerId),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
case "kosha_model_detail": {
|
|
172
|
+
const model = reg.model(args.model);
|
|
173
|
+
if (!model)
|
|
174
|
+
return { error: `model '${args.model}' not found` };
|
|
175
|
+
const provider = reg.provider(model.provider);
|
|
176
|
+
return {
|
|
177
|
+
...model,
|
|
178
|
+
baseUrl: provider?.baseUrl,
|
|
179
|
+
authenticated: provider?.authenticated ?? false,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
case "kosha_model_routes": {
|
|
183
|
+
const routes = reg.modelRouteInfo(args.model);
|
|
184
|
+
if (routes.length === 0)
|
|
185
|
+
return { error: `model '${args.model}' not found` };
|
|
186
|
+
return routes.map((r) => ({
|
|
187
|
+
provider: r.provider,
|
|
188
|
+
modelId: r.model.id,
|
|
189
|
+
baseUrl: r.baseUrl,
|
|
190
|
+
isDirect: r.isDirect,
|
|
191
|
+
isPreferred: r.isPreferred,
|
|
192
|
+
pricing: r.model.pricing ?? null,
|
|
193
|
+
originPricing: r.model.originPricing ?? null,
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
case "kosha_resolve_alias": {
|
|
197
|
+
const resolved = reg.resolve(args.alias);
|
|
198
|
+
const model = reg.model(resolved);
|
|
199
|
+
return {
|
|
200
|
+
alias: args.alias,
|
|
201
|
+
resolved,
|
|
202
|
+
isAlias: resolved !== args.alias,
|
|
203
|
+
provider: model?.provider ?? null,
|
|
204
|
+
name: model?.name ?? null,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
case "kosha_provider_health": {
|
|
208
|
+
const providers = reg.providers_list();
|
|
209
|
+
const errors = reg.discoveryErrors();
|
|
210
|
+
const errorByProvider = new Map(errors.map((e) => [e.providerId, e.error]));
|
|
211
|
+
const list = args.provider
|
|
212
|
+
? providers.filter((p) => p.id === args.provider)
|
|
213
|
+
: providers;
|
|
214
|
+
return list.map((p) => ({
|
|
215
|
+
id: p.id,
|
|
216
|
+
name: p.name,
|
|
217
|
+
authenticated: p.authenticated,
|
|
218
|
+
credentialSource: p.credentialSource ?? null,
|
|
219
|
+
modelCount: p.models.length,
|
|
220
|
+
lastRefreshed: p.lastRefreshed ?? null,
|
|
221
|
+
lastError: errorByProvider.get(p.id) ?? null,
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
default:
|
|
225
|
+
throw new Error(`unknown tool: ${name}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// ---------------------------------------------------------------------------
|
|
229
|
+
// Stdio JSON-RPC loop
|
|
230
|
+
// ---------------------------------------------------------------------------
|
|
231
|
+
function send(msg) {
|
|
232
|
+
process.stdout.write(JSON.stringify(msg) + "\n");
|
|
233
|
+
}
|
|
234
|
+
function respond(id, result) {
|
|
235
|
+
send({ jsonrpc: "2.0", id: id ?? null, result });
|
|
236
|
+
}
|
|
237
|
+
function respondError(id, code, message) {
|
|
238
|
+
send({ jsonrpc: "2.0", id: id ?? null, error: { code, message } });
|
|
239
|
+
}
|
|
240
|
+
async function handleMessage(msg) {
|
|
241
|
+
const { id, method, params } = msg;
|
|
242
|
+
// Notifications carry no id — no response expected.
|
|
243
|
+
if (!method || method.startsWith("notifications/"))
|
|
244
|
+
return;
|
|
245
|
+
switch (method) {
|
|
246
|
+
case "initialize":
|
|
247
|
+
respond(id, {
|
|
248
|
+
protocolVersion: "2024-11-05",
|
|
249
|
+
capabilities: { tools: {} },
|
|
250
|
+
serverInfo: { name: "kosha", version: "1.0.0" },
|
|
251
|
+
});
|
|
252
|
+
return;
|
|
253
|
+
case "tools/list":
|
|
254
|
+
respond(id, { tools: TOOLS });
|
|
255
|
+
return;
|
|
256
|
+
case "tools/call": {
|
|
257
|
+
const { name, arguments: args = {} } = params;
|
|
258
|
+
try {
|
|
259
|
+
const result = await callTool(name, args);
|
|
260
|
+
respond(id, { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] });
|
|
261
|
+
}
|
|
262
|
+
catch (err) {
|
|
263
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
264
|
+
respondError(id, -32603, message);
|
|
265
|
+
}
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
default:
|
|
269
|
+
respondError(id, -32601, `method not found: ${method}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
let buffer = "";
|
|
273
|
+
process.stdin.setEncoding("utf-8");
|
|
274
|
+
process.stdin.on("data", (chunk) => {
|
|
275
|
+
buffer += chunk;
|
|
276
|
+
const lines = buffer.split("\n");
|
|
277
|
+
buffer = lines.pop() ?? "";
|
|
278
|
+
for (const line of lines) {
|
|
279
|
+
const trimmed = line.trim();
|
|
280
|
+
if (!trimmed)
|
|
281
|
+
continue;
|
|
282
|
+
try {
|
|
283
|
+
handleMessage(JSON.parse(trimmed)).catch((err) => {
|
|
284
|
+
process.stderr.write(`[kosha-mcp] ${err}\n`);
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
// malformed JSON — ignore
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
process.stdin.on("end", () => process.exit(0));
|
|
293
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,8 @@ export interface ProviderDescriptor {
|
|
|
31
31
|
credentialRequired: boolean;
|
|
32
32
|
/** Environment variables that satisfy the provider credential requirement. */
|
|
33
33
|
credentialEnvVars: string[];
|
|
34
|
+
/** The single env var that `fallbackRegistryCredential` reads for this provider. */
|
|
35
|
+
primaryCredentialEnvVar?: string;
|
|
34
36
|
/**
|
|
35
37
|
* Minimum prompt-prefix size (in tokens) required for the provider's prompt
|
|
36
38
|
* cache to engage. Only set when the provider publishes a documented floor.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-catalog.d.ts","sourceRoot":"","sources":["../src/provider-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,MAAM,EAAE,cAAc,CAAC;IACvB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,kBAAkB,
|
|
1
|
+
{"version":3,"file":"provider-catalog.d.ts","sourceRoot":"","sources":["../src/provider-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,MAAM,EAAE,cAAc,CAAC;IACvB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oFAAoF;IACpF,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,kBAAkB,EA+RhD,CAAC;AAWX;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,kBAAkB,GAAG,SAAS,CAGpG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,kBAAkB,EAAE,CAE9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC5B,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAW3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvE"}
|