@x12i/ai-tools 1.0.3 → 2.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/CHANGELOG.md +23 -0
- package/README.md +146 -204
- package/dist/AiModelsCatalogClient-B5FMI9gj.d.cts +58 -0
- package/dist/AiModelsCatalogClient-CPPNI6Ry.d.ts +58 -0
- package/dist/aliases/index.cjs +4 -3
- package/dist/aliases/index.cjs.map +1 -1
- package/dist/aliases/index.d.cts +3 -5
- package/dist/aliases/index.d.ts +3 -5
- package/dist/aliases/index.js +2 -2
- package/dist/catalog/index.cjs +18 -9
- package/dist/catalog/index.cjs.map +1 -1
- package/dist/catalog/index.d.cts +13 -100
- package/dist/catalog/index.d.ts +13 -100
- package/dist/catalog/index.js +31 -23
- package/dist/{chunk-AJEKEWWB.js → chunk-2PTCWPHV.js} +17 -3
- package/dist/chunk-2PTCWPHV.js.map +1 -0
- package/dist/chunk-56R4XA2S.js +1 -0
- package/dist/chunk-5GUKLOEK.cjs +1 -0
- package/dist/chunk-5GUKLOEK.cjs.map +1 -0
- package/dist/chunk-5XAAMBDO.cjs +1988 -0
- package/dist/chunk-5XAAMBDO.cjs.map +1 -0
- package/dist/chunk-6BQBKROR.js +95 -0
- package/dist/chunk-6BQBKROR.js.map +1 -0
- package/dist/chunk-AB5GNXJ4.js +46 -0
- package/dist/chunk-AB5GNXJ4.js.map +1 -0
- package/dist/{chunk-O2A6OVEH.js → chunk-ANVONYJF.js} +2 -2
- package/dist/{chunk-O2A6OVEH.js.map → chunk-ANVONYJF.js.map} +1 -1
- package/dist/chunk-B3V2EHRY.js +225 -0
- package/dist/chunk-B3V2EHRY.js.map +1 -0
- package/dist/{chunk-QWAX7VQO.cjs → chunk-BAHBDADJ.cjs} +11 -11
- package/dist/{chunk-QWAX7VQO.cjs.map → chunk-BAHBDADJ.cjs.map} +1 -1
- package/dist/{chunk-TF4L2NEC.cjs → chunk-DXZOL3VN.cjs} +62 -313
- package/dist/chunk-DXZOL3VN.cjs.map +1 -0
- package/dist/chunk-EDMCKHO6.cjs +225 -0
- package/dist/chunk-EDMCKHO6.cjs.map +1 -0
- package/dist/{chunk-DJ5SWJDY.js → chunk-EYHMQVAL.js} +48 -299
- package/dist/chunk-EYHMQVAL.js.map +1 -0
- package/dist/chunk-GS7T56RP.cjs +8 -0
- package/dist/chunk-GS7T56RP.cjs.map +1 -0
- package/dist/chunk-NF2SKQR7.cjs +973 -0
- package/dist/chunk-NF2SKQR7.cjs.map +1 -0
- package/dist/chunk-OPN6BGNH.js +1985 -0
- package/dist/chunk-OPN6BGNH.js.map +1 -0
- package/dist/{chunk-7Q742NI3.cjs → chunk-PADNCGZB.cjs} +17 -3
- package/dist/chunk-PADNCGZB.cjs.map +1 -0
- package/dist/chunk-PRCICORG.cjs +95 -0
- package/dist/chunk-PRCICORG.cjs.map +1 -0
- package/dist/{chunk-6QGDZTGH.js → chunk-SIH4GPV4.js} +4 -29
- package/dist/chunk-SIH4GPV4.js.map +1 -0
- package/dist/chunk-U2YDDUVP.js +970 -0
- package/dist/chunk-U2YDDUVP.js.map +1 -0
- package/dist/{chunk-4NAY6HRP.js → chunk-VJHLO2R3.js} +7 -58
- package/dist/chunk-VJHLO2R3.js.map +1 -0
- package/dist/chunk-XAWBTX3N.cjs +46 -0
- package/dist/chunk-XAWBTX3N.cjs.map +1 -0
- package/dist/{chunk-AV6OE2YQ.cjs → chunk-XOKUDUUI.cjs} +14 -39
- package/dist/chunk-XOKUDUUI.cjs.map +1 -0
- package/dist/chunk-YQDSN6R6.cjs +86 -0
- package/dist/chunk-YQDSN6R6.cjs.map +1 -0
- package/dist/cli/index.cjs +59 -201
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +53 -198
- package/dist/cli/index.js.map +1 -1
- package/dist/cost/index.cjs +19 -3
- package/dist/cost/index.cjs.map +1 -1
- package/dist/cost/index.d.cts +10 -50
- package/dist/cost/index.d.ts +10 -50
- package/dist/cost/index.js +18 -3
- package/dist/index.cjs +24 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -13
- package/dist/index.d.ts +13 -13
- package/dist/index.js +44 -37
- package/dist/modelCache-BzRn6t_C.d.ts +113 -0
- package/dist/modelCache-CJftI-Ko.d.cts +113 -0
- package/dist/{modelNameResolver-DqFt7g6W.d.ts → modelNameResolver-5XkBMctP.d.ts} +2 -6
- package/dist/{modelNameResolver-D9V_GfUK.d.cts → modelNameResolver-C5CSTGFF.d.cts} +2 -6
- package/dist/models/index.cjs +9 -6
- package/dist/models/index.cjs.map +1 -1
- package/dist/models/index.d.cts +9 -31
- package/dist/models/index.d.ts +9 -31
- package/dist/models/index.js +9 -7
- package/dist/resolveUsageModel-BFwf80Hz.d.ts +140 -0
- package/dist/resolveUsageModel-C_YmGR1M.d.cts +140 -0
- package/dist/sync/index.cjs +7 -9
- package/dist/sync/index.cjs.map +1 -1
- package/dist/sync/index.d.cts +3 -8
- package/dist/sync/index.d.ts +3 -8
- package/dist/sync/index.js +8 -11
- package/dist/toolbox/index.cjs +1 -0
- package/dist/toolbox/index.cjs.map +1 -1
- package/dist/types-BrzJWsTU.d.cts +277 -0
- package/dist/types-BrzJWsTU.d.ts +277 -0
- package/package.json +9 -20
- package/src/data/models-catalog.json +670 -0
- package/src/data/openrouter-models-catalog.json +857 -0
- package/dist/AiModelsCatalogClient-4RF5BCDL.cjs +0 -9
- package/dist/AiModelsCatalogClient-4RF5BCDL.cjs.map +0 -1
- package/dist/AiModelsCatalogClient-CNeqFiFs.d.cts +0 -30
- package/dist/AiModelsCatalogClient-NUF3CBLW.js +0 -9
- package/dist/AiModelsCatalogClient-nwFoEaqL.d.ts +0 -30
- package/dist/catalox/index.cjs +0 -21
- package/dist/catalox/index.cjs.map +0 -1
- package/dist/catalox/index.d.cts +0 -11
- package/dist/catalox/index.d.ts +0 -11
- package/dist/catalox/index.js +0 -21
- package/dist/catalox/index.js.map +0 -1
- package/dist/chunk-4NAY6HRP.js.map +0 -1
- package/dist/chunk-6QGDZTGH.js.map +0 -1
- package/dist/chunk-7Q742NI3.cjs.map +0 -1
- package/dist/chunk-AJEKEWWB.js.map +0 -1
- package/dist/chunk-AV6OE2YQ.cjs.map +0 -1
- package/dist/chunk-C3H7RTFR.cjs +0 -1
- package/dist/chunk-C3H7RTFR.cjs.map +0 -1
- package/dist/chunk-DJ5SWJDY.js.map +0 -1
- package/dist/chunk-DKHGWHXP.cjs +0 -169
- package/dist/chunk-DKHGWHXP.cjs.map +0 -1
- package/dist/chunk-F2F4UEFD.cjs +0 -75
- package/dist/chunk-F2F4UEFD.cjs.map +0 -1
- package/dist/chunk-FGP3QXWL.cjs +0 -163
- package/dist/chunk-FGP3QXWL.cjs.map +0 -1
- package/dist/chunk-G2G4KSC5.js +0 -30
- package/dist/chunk-G2G4KSC5.js.map +0 -1
- package/dist/chunk-HN6UAQAE.cjs +0 -83
- package/dist/chunk-HN6UAQAE.cjs.map +0 -1
- package/dist/chunk-HS74X2OJ.cjs +0 -172
- package/dist/chunk-HS74X2OJ.cjs.map +0 -1
- package/dist/chunk-HYGXZY25.js +0 -163
- package/dist/chunk-HYGXZY25.js.map +0 -1
- package/dist/chunk-KQOALKKX.js +0 -75
- package/dist/chunk-KQOALKKX.js.map +0 -1
- package/dist/chunk-LYOU7CA2.cjs +0 -30
- package/dist/chunk-LYOU7CA2.cjs.map +0 -1
- package/dist/chunk-M5TMA73F.js +0 -1
- package/dist/chunk-M5TMA73F.js.map +0 -1
- package/dist/chunk-MX3AMQFC.js +0 -172
- package/dist/chunk-MX3AMQFC.js.map +0 -1
- package/dist/chunk-QCRLKVB3.cjs +0 -137
- package/dist/chunk-QCRLKVB3.cjs.map +0 -1
- package/dist/chunk-TF4L2NEC.cjs.map +0 -1
- package/dist/chunk-VRFVF5RH.js +0 -169
- package/dist/chunk-VRFVF5RH.js.map +0 -1
- package/dist/chunk-YHO57D2V.js +0 -83
- package/dist/chunk-YHO57D2V.js.map +0 -1
- package/dist/syncAiModelsCatalog-CnXRLm2c.d.cts +0 -32
- package/dist/syncAiModelsCatalog-DpkN_w7S.d.ts +0 -32
- package/dist/types-BYXnCvKx.d.cts +0 -137
- package/dist/types-BYXnCvKx.d.ts +0 -137
- package/dist/types-CX6QFNNy.d.cts +0 -144
- package/dist/types-CuiPDcVs.d.ts +0 -144
- package/dist/upsertAiModelRecord-C831wOIF.d.ts +0 -35
- package/dist/upsertAiModelRecord-CjY-sny0.d.cts +0 -35
- /package/dist/{AiModelsCatalogClient-NUF3CBLW.js.map → chunk-56R4XA2S.js.map} +0 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// src/sync/modelNameResolver/constants.ts
|
|
2
|
+
var DEFAULT_CONFIDENCE_THRESHOLD = 0.6;
|
|
3
|
+
var PROVIDER_NORMALISATION_MAP = {
|
|
4
|
+
"open-router": "openrouter",
|
|
5
|
+
or: "openrouter",
|
|
6
|
+
oai: "openai",
|
|
7
|
+
"open-ai": "openai",
|
|
8
|
+
claude: "anthropic",
|
|
9
|
+
ant: "anthropic",
|
|
10
|
+
gemini: "google",
|
|
11
|
+
gcp: "google",
|
|
12
|
+
"google-ai": "google",
|
|
13
|
+
vertex: "google",
|
|
14
|
+
meta: "meta-llama",
|
|
15
|
+
llama: "meta-llama",
|
|
16
|
+
"mistral-ai": "mistral",
|
|
17
|
+
"cohere-ai": "cohere"
|
|
18
|
+
};
|
|
19
|
+
var LOCAL_PROVIDERS = /* @__PURE__ */ new Set([
|
|
20
|
+
"ollama",
|
|
21
|
+
"lmstudio",
|
|
22
|
+
"lm-studio",
|
|
23
|
+
"localai",
|
|
24
|
+
"local-ai",
|
|
25
|
+
"llamacpp",
|
|
26
|
+
"llama.cpp",
|
|
27
|
+
"llamafile",
|
|
28
|
+
"jan",
|
|
29
|
+
"koboldcpp"
|
|
30
|
+
]);
|
|
31
|
+
var PROVIDER_INFERENCE_MAP = [
|
|
32
|
+
{ pattern: /^gpt-/, provider: "openai" },
|
|
33
|
+
{ pattern: /^o1($|-)/, provider: "openai" },
|
|
34
|
+
{ pattern: /^o3($|-)/, provider: "openai" },
|
|
35
|
+
{ pattern: /^o4($|-)/, provider: "openai" },
|
|
36
|
+
{ pattern: /^chatgpt-/, provider: "openai" },
|
|
37
|
+
{ pattern: /^text-davinci/, provider: "openai" },
|
|
38
|
+
{ pattern: /^dall-e/, provider: "openai" },
|
|
39
|
+
{ pattern: /^whisper/, provider: "openai" },
|
|
40
|
+
{ pattern: /^tts-/, provider: "openai" },
|
|
41
|
+
{ pattern: /^claude-/, provider: "anthropic" },
|
|
42
|
+
{ pattern: /^gemini-/, provider: "google" },
|
|
43
|
+
{ pattern: /^palm-/, provider: "google" },
|
|
44
|
+
{ pattern: /^bison/, provider: "google" },
|
|
45
|
+
{ pattern: /^llama-?[23]/, provider: "meta-llama" },
|
|
46
|
+
{ pattern: /^llama/, provider: "meta-llama" },
|
|
47
|
+
{ pattern: /^codellama/, provider: "meta-llama" },
|
|
48
|
+
{ pattern: /^mistral-/, provider: "mistral" },
|
|
49
|
+
{ pattern: /^mixtral-/, provider: "mistral" },
|
|
50
|
+
{ pattern: /^codestral/, provider: "mistral" },
|
|
51
|
+
{ pattern: /^ministral/, provider: "mistral" },
|
|
52
|
+
{ pattern: /^command-/, provider: "cohere" },
|
|
53
|
+
{ pattern: /^c4ai-/, provider: "cohere" },
|
|
54
|
+
{ pattern: /^deepseek-/, provider: "deepseek" },
|
|
55
|
+
{ pattern: /^grok-/, provider: "x-ai" },
|
|
56
|
+
{ pattern: /^qwen/, provider: "qwen" },
|
|
57
|
+
{ pattern: /^yi-/, provider: "01-ai" },
|
|
58
|
+
{ pattern: /^sonar/, provider: "perplexity" },
|
|
59
|
+
{ pattern: /^pplx-/, provider: "perplexity" },
|
|
60
|
+
{ pattern: /^titan-/, provider: "amazon" },
|
|
61
|
+
{ pattern: /^nova-/, provider: "amazon" }
|
|
62
|
+
];
|
|
63
|
+
var SHORTHAND_MAP = {
|
|
64
|
+
gpt4: "openai/gpt-4",
|
|
65
|
+
gpt4o: "openai/gpt-4o",
|
|
66
|
+
"gpt-4-omni": "openai/gpt-4o",
|
|
67
|
+
gpt4omni: "openai/gpt-4o",
|
|
68
|
+
"gpt4-turbo": "openai/gpt-4-turbo",
|
|
69
|
+
gpt4turbo: "openai/gpt-4-turbo",
|
|
70
|
+
"gpt4-mini": "openai/gpt-4o-mini",
|
|
71
|
+
"gpt-4o-mini": "openai/gpt-4o-mini",
|
|
72
|
+
o1: "openai/o1",
|
|
73
|
+
"o1-mini": "openai/o1-mini",
|
|
74
|
+
o3: "openai/o3",
|
|
75
|
+
"o3-mini": "openai/o3-mini",
|
|
76
|
+
"o4-mini": "openai/o4-mini",
|
|
77
|
+
"3.5-turbo": "openai/gpt-3.5-turbo",
|
|
78
|
+
gpt35: "openai/gpt-3.5-turbo",
|
|
79
|
+
gpt3: "openai/gpt-3.5-turbo",
|
|
80
|
+
claude3: "anthropic/claude-3-5-sonnet-20241022",
|
|
81
|
+
"claude-3": "anthropic/claude-3-5-sonnet-20241022",
|
|
82
|
+
"claude3-sonnet": "anthropic/claude-3-5-sonnet-20241022",
|
|
83
|
+
"claude-sonnet": "anthropic/claude-3-5-sonnet-20241022",
|
|
84
|
+
"claude-haiku": "anthropic/claude-3-5-haiku-20241022",
|
|
85
|
+
"claude3-haiku": "anthropic/claude-3-5-haiku-20241022",
|
|
86
|
+
"claude-opus": "anthropic/claude-opus-4",
|
|
87
|
+
"claude3-opus": "anthropic/claude-3-opus-20240229",
|
|
88
|
+
claude4: "anthropic/claude-opus-4",
|
|
89
|
+
"claude4-sonnet": "anthropic/claude-sonnet-4",
|
|
90
|
+
"claude4-opus": "anthropic/claude-opus-4",
|
|
91
|
+
sonnet: "anthropic/claude-3-5-sonnet-20241022",
|
|
92
|
+
haiku: "anthropic/claude-3-5-haiku-20241022",
|
|
93
|
+
opus: "anthropic/claude-opus-4",
|
|
94
|
+
gemini: "google/gemini-pro",
|
|
95
|
+
"gemini-pro": "google/gemini-pro",
|
|
96
|
+
"gemini-flash": "google/gemini-flash-1.5",
|
|
97
|
+
gemini2: "google/gemini-2.0-flash-001",
|
|
98
|
+
"gemini-2": "google/gemini-2.0-flash-001",
|
|
99
|
+
llama3: "meta-llama/llama-3.1-8b-instruct",
|
|
100
|
+
"llama-3": "meta-llama/llama-3.1-8b-instruct",
|
|
101
|
+
llama2: "meta-llama/llama-2-13b-chat",
|
|
102
|
+
"llama-2": "meta-llama/llama-2-13b-chat",
|
|
103
|
+
mistral: "mistral/mistral-7b-instruct",
|
|
104
|
+
"mistral-large": "mistral/mistral-large-latest",
|
|
105
|
+
mixtral: "mistral/mixtral-8x7b-instruct",
|
|
106
|
+
deepseek: "deepseek/deepseek-chat",
|
|
107
|
+
"deepseek-r1": "deepseek/deepseek-r1"
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
// src/sync/modelNameResolver/normalize.ts
|
|
111
|
+
function normalizeString(input) {
|
|
112
|
+
let s = input.trim();
|
|
113
|
+
s = s.replace(/\s+/g, " ").replace(/ /g, "-");
|
|
114
|
+
s = s.toLowerCase();
|
|
115
|
+
s = s.replace(/^\/+|\/+$/g, "");
|
|
116
|
+
s = s.replace(/\/+/g, "/");
|
|
117
|
+
if (s.startsWith('"') && s.endsWith('"') || s.startsWith("'") && s.endsWith("'")) {
|
|
118
|
+
s = s.slice(1, -1);
|
|
119
|
+
}
|
|
120
|
+
return s;
|
|
121
|
+
}
|
|
122
|
+
function normalizeProvider(provider) {
|
|
123
|
+
if (provider === void 0 || provider === "") return void 0;
|
|
124
|
+
const n = normalizeString(provider);
|
|
125
|
+
return PROVIDER_NORMALISATION_MAP[n] ?? n;
|
|
126
|
+
}
|
|
127
|
+
function tokenise(s) {
|
|
128
|
+
return s.split(/[-_./]+/).filter(Boolean);
|
|
129
|
+
}
|
|
130
|
+
function modelSlug(modelId) {
|
|
131
|
+
const slash = modelId.indexOf("/");
|
|
132
|
+
return slash >= 0 ? modelId.slice(slash + 1) : modelId;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// src/sync/openRouterRoutingEnv.ts
|
|
136
|
+
import { loadDotenv } from "@x12i/env";
|
|
137
|
+
function providerIdToEnvKeyPrefix(providerId) {
|
|
138
|
+
return providerId.trim().toLowerCase().replace(/-/g, "_").toUpperCase();
|
|
139
|
+
}
|
|
140
|
+
function vendorApiKeyEnvName(providerId) {
|
|
141
|
+
return `${providerIdToEnvKeyPrefix(providerId)}_API_KEY`;
|
|
142
|
+
}
|
|
143
|
+
function loadOpenRouterRoutingEnv(env = process.env) {
|
|
144
|
+
const dotenv = loadDotenv();
|
|
145
|
+
const merged = {};
|
|
146
|
+
for (const [k, v] of Object.entries(dotenv)) {
|
|
147
|
+
if (v !== void 0) merged[k] = v;
|
|
148
|
+
}
|
|
149
|
+
for (const [k, v] of Object.entries(env)) {
|
|
150
|
+
if (v !== void 0) merged[k] = v;
|
|
151
|
+
}
|
|
152
|
+
const openRouterKey = merged.OPENROUTER_API_KEY?.trim();
|
|
153
|
+
const useRaw = merged.USE_OPENROUTER?.trim().toLowerCase();
|
|
154
|
+
const useOpenRouterExplicit = useRaw === "true" || useRaw === "1";
|
|
155
|
+
return {
|
|
156
|
+
hasOpenRouterKey: Boolean(openRouterKey),
|
|
157
|
+
useOpenRouterExplicit,
|
|
158
|
+
getVendorApiKey(providerId) {
|
|
159
|
+
const name = vendorApiKeyEnvName(providerId);
|
|
160
|
+
const val = merged[name]?.trim();
|
|
161
|
+
return val || void 0;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function shouldDefaultRouteViaOpenRouter(providerId, config) {
|
|
166
|
+
if (!config.hasOpenRouterKey) return false;
|
|
167
|
+
if (config.useOpenRouterExplicit) return true;
|
|
168
|
+
if (providerId && providerId !== "openrouter") {
|
|
169
|
+
return !config.getVendorApiKey(providerId);
|
|
170
|
+
}
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// src/sync/modelNameResolver/stripVersionSuffix.ts
|
|
175
|
+
var VERSION_STRIP_PATTERNS = [
|
|
176
|
+
{ re: /-\d{4}-\d{2}-\d{2}$/, label: "date YYYY-MM-DD" },
|
|
177
|
+
{ re: /-\d{8}$/, label: "date YYYYMMDD" },
|
|
178
|
+
{ re: /-v\d+$/, label: "version -vN" },
|
|
179
|
+
{ re: /-\d+\.\d+\.\d+$/, label: "semver" },
|
|
180
|
+
{ re: /:\d+[a-z]?$/i, label: "colon version" },
|
|
181
|
+
{ re: /-\d{4,}$/, label: "build number" },
|
|
182
|
+
{ re: /@\d+$/, label: "epoch @NNNN" }
|
|
183
|
+
];
|
|
184
|
+
function stripModelSlugSuffix(slug) {
|
|
185
|
+
for (const { re } of VERSION_STRIP_PATTERNS) {
|
|
186
|
+
if (re.test(slug)) {
|
|
187
|
+
return slug.replace(re, "");
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
function stripModelVersionSuffix(model) {
|
|
193
|
+
const normalized = normalizeString(model);
|
|
194
|
+
if (!normalized) return null;
|
|
195
|
+
if (normalized.includes("/")) {
|
|
196
|
+
const slash = normalized.indexOf("/");
|
|
197
|
+
const prefix = normalized.slice(0, slash);
|
|
198
|
+
const slug = normalized.slice(slash + 1);
|
|
199
|
+
const stripped2 = stripModelSlugSuffix(slug);
|
|
200
|
+
if (stripped2 && stripped2 !== slug) {
|
|
201
|
+
return `${prefix}/${stripped2}`;
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
const stripped = stripModelSlugSuffix(normalized);
|
|
206
|
+
return stripped && stripped !== normalized ? stripped : null;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export {
|
|
210
|
+
DEFAULT_CONFIDENCE_THRESHOLD,
|
|
211
|
+
LOCAL_PROVIDERS,
|
|
212
|
+
PROVIDER_INFERENCE_MAP,
|
|
213
|
+
SHORTHAND_MAP,
|
|
214
|
+
normalizeString,
|
|
215
|
+
normalizeProvider,
|
|
216
|
+
tokenise,
|
|
217
|
+
modelSlug,
|
|
218
|
+
stripModelSlugSuffix,
|
|
219
|
+
stripModelVersionSuffix,
|
|
220
|
+
providerIdToEnvKeyPrefix,
|
|
221
|
+
vendorApiKeyEnvName,
|
|
222
|
+
loadOpenRouterRoutingEnv,
|
|
223
|
+
shouldDefaultRouteViaOpenRouter
|
|
224
|
+
};
|
|
225
|
+
//# sourceMappingURL=chunk-B3V2EHRY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sync/modelNameResolver/constants.ts","../src/sync/modelNameResolver/normalize.ts","../src/sync/openRouterRoutingEnv.ts","../src/sync/modelNameResolver/stripVersionSuffix.ts"],"sourcesContent":["export const DEFAULT_CONFIDENCE_THRESHOLD = 0.6;\n\nexport const PROVIDER_NORMALISATION_MAP: Record<string, string> = {\n \"open-router\": \"openrouter\",\n or: \"openrouter\",\n oai: \"openai\",\n \"open-ai\": \"openai\",\n claude: \"anthropic\",\n ant: \"anthropic\",\n gemini: \"google\",\n gcp: \"google\",\n \"google-ai\": \"google\",\n vertex: \"google\",\n meta: \"meta-llama\",\n llama: \"meta-llama\",\n \"mistral-ai\": \"mistral\",\n \"cohere-ai\": \"cohere\",\n};\n\nexport const LOCAL_PROVIDERS = new Set([\n \"ollama\",\n \"lmstudio\",\n \"lm-studio\",\n \"localai\",\n \"local-ai\",\n \"llamacpp\",\n \"llama.cpp\",\n \"llamafile\",\n \"jan\",\n \"koboldcpp\",\n]);\n\nexport const PROVIDER_INFERENCE_MAP: Array<{\n pattern: RegExp;\n provider: string;\n notes?: string;\n}> = [\n { pattern: /^gpt-/, provider: \"openai\" },\n { pattern: /^o1($|-)/, provider: \"openai\" },\n { pattern: /^o3($|-)/, provider: \"openai\" },\n { pattern: /^o4($|-)/, provider: \"openai\" },\n { pattern: /^chatgpt-/, provider: \"openai\" },\n { pattern: /^text-davinci/, provider: \"openai\" },\n { pattern: /^dall-e/, provider: \"openai\" },\n { pattern: /^whisper/, provider: \"openai\" },\n { pattern: /^tts-/, provider: \"openai\" },\n { pattern: /^claude-/, provider: \"anthropic\" },\n { pattern: /^gemini-/, provider: \"google\" },\n { pattern: /^palm-/, provider: \"google\" },\n { pattern: /^bison/, provider: \"google\" },\n { pattern: /^llama-?[23]/, provider: \"meta-llama\" },\n { pattern: /^llama/, provider: \"meta-llama\" },\n { pattern: /^codellama/, provider: \"meta-llama\" },\n { pattern: /^mistral-/, provider: \"mistral\" },\n { pattern: /^mixtral-/, provider: \"mistral\" },\n { pattern: /^codestral/, provider: \"mistral\" },\n { pattern: /^ministral/, provider: \"mistral\" },\n { pattern: /^command-/, provider: \"cohere\" },\n { pattern: /^c4ai-/, provider: \"cohere\" },\n { pattern: /^deepseek-/, provider: \"deepseek\" },\n { pattern: /^grok-/, provider: \"x-ai\" },\n { pattern: /^qwen/, provider: \"qwen\" },\n { pattern: /^yi-/, provider: \"01-ai\" },\n { pattern: /^sonar/, provider: \"perplexity\" },\n { pattern: /^pplx-/, provider: \"perplexity\" },\n { pattern: /^titan-/, provider: \"amazon\" },\n { pattern: /^nova-/, provider: \"amazon\" },\n];\n\nexport const SHORTHAND_MAP: Record<string, string> = {\n gpt4: \"openai/gpt-4\",\n gpt4o: \"openai/gpt-4o\",\n \"gpt-4-omni\": \"openai/gpt-4o\",\n gpt4omni: \"openai/gpt-4o\",\n \"gpt4-turbo\": \"openai/gpt-4-turbo\",\n gpt4turbo: \"openai/gpt-4-turbo\",\n \"gpt4-mini\": \"openai/gpt-4o-mini\",\n \"gpt-4o-mini\": \"openai/gpt-4o-mini\",\n o1: \"openai/o1\",\n \"o1-mini\": \"openai/o1-mini\",\n o3: \"openai/o3\",\n \"o3-mini\": \"openai/o3-mini\",\n \"o4-mini\": \"openai/o4-mini\",\n \"3.5-turbo\": \"openai/gpt-3.5-turbo\",\n gpt35: \"openai/gpt-3.5-turbo\",\n gpt3: \"openai/gpt-3.5-turbo\",\n claude3: \"anthropic/claude-3-5-sonnet-20241022\",\n \"claude-3\": \"anthropic/claude-3-5-sonnet-20241022\",\n \"claude3-sonnet\": \"anthropic/claude-3-5-sonnet-20241022\",\n \"claude-sonnet\": \"anthropic/claude-3-5-sonnet-20241022\",\n \"claude-haiku\": \"anthropic/claude-3-5-haiku-20241022\",\n \"claude3-haiku\": \"anthropic/claude-3-5-haiku-20241022\",\n \"claude-opus\": \"anthropic/claude-opus-4\",\n \"claude3-opus\": \"anthropic/claude-3-opus-20240229\",\n claude4: \"anthropic/claude-opus-4\",\n \"claude4-sonnet\": \"anthropic/claude-sonnet-4\",\n \"claude4-opus\": \"anthropic/claude-opus-4\",\n sonnet: \"anthropic/claude-3-5-sonnet-20241022\",\n haiku: \"anthropic/claude-3-5-haiku-20241022\",\n opus: \"anthropic/claude-opus-4\",\n gemini: \"google/gemini-pro\",\n \"gemini-pro\": \"google/gemini-pro\",\n \"gemini-flash\": \"google/gemini-flash-1.5\",\n gemini2: \"google/gemini-2.0-flash-001\",\n \"gemini-2\": \"google/gemini-2.0-flash-001\",\n llama3: \"meta-llama/llama-3.1-8b-instruct\",\n \"llama-3\": \"meta-llama/llama-3.1-8b-instruct\",\n llama2: \"meta-llama/llama-2-13b-chat\",\n \"llama-2\": \"meta-llama/llama-2-13b-chat\",\n mistral: \"mistral/mistral-7b-instruct\",\n \"mistral-large\": \"mistral/mistral-large-latest\",\n mixtral: \"mistral/mixtral-8x7b-instruct\",\n deepseek: \"deepseek/deepseek-chat\",\n \"deepseek-r1\": \"deepseek/deepseek-r1\",\n};\n","import { PROVIDER_NORMALISATION_MAP } from \"./constants.js\";\n\nexport function normalizeString(input: string): string {\n let s = input.trim();\n s = s.replace(/\\s+/g, \" \").replace(/ /g, \"-\");\n s = s.toLowerCase();\n s = s.replace(/^\\/+|\\/+$/g, \"\");\n s = s.replace(/\\/+/g, \"/\");\n if (\n (s.startsWith('\"') && s.endsWith('\"')) ||\n (s.startsWith(\"'\") && s.endsWith(\"'\"))\n ) {\n s = s.slice(1, -1);\n }\n return s;\n}\n\nexport function normalizeProvider(provider: string | undefined): string | undefined {\n if (provider === undefined || provider === \"\") return undefined;\n const n = normalizeString(provider);\n return PROVIDER_NORMALISATION_MAP[n] ?? n;\n}\n\nexport function tokenise(s: string): string[] {\n return s.split(/[-_./]+/).filter(Boolean);\n}\n\nexport function modelSlug(modelId: string): string {\n const slash = modelId.indexOf(\"/\");\n return slash >= 0 ? modelId.slice(slash + 1) : modelId;\n}\n","import { loadDotenv } from \"@x12i/env\";\n\n/**\n * Env naming for vendor direct API keys: `{VENDOR}_API_KEY`\n * where VENDOR is the provider id in UPPER_SNAKE (hyphens → underscores).\n *\n * Examples: `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `META_LLAMA_API_KEY`, `X_AI_API_KEY`\n */\nexport function providerIdToEnvKeyPrefix(providerId: string): string {\n return providerId\n .trim()\n .toLowerCase()\n .replace(/-/g, \"_\")\n .toUpperCase();\n}\n\nexport function vendorApiKeyEnvName(providerId: string): string {\n return `${providerIdToEnvKeyPrefix(providerId)}_API_KEY`;\n}\n\nexport type OpenRouterRoutingConfig = {\n /** OPENROUTER_API_KEY is set and non-empty */\n hasOpenRouterKey: boolean;\n /** USE_OPENROUTER=true or USE_OPENROUTER=1 */\n useOpenRouterExplicit: boolean;\n /** Read `{PROVIDER}_API_KEY` for a catalog provider id */\n getVendorApiKey(providerId: string): string | undefined;\n};\n\n/**\n * Load routing hints from process env and optional `.env` (via @x12/env).\n */\nexport function loadOpenRouterRoutingEnv(\n env: Record<string, string | undefined> = process.env,\n): OpenRouterRoutingConfig {\n const dotenv = loadDotenv();\n const merged: Record<string, string> = {};\n for (const [k, v] of Object.entries(dotenv)) {\n if (v !== undefined) merged[k] = v;\n }\n for (const [k, v] of Object.entries(env)) {\n if (v !== undefined) merged[k] = v;\n }\n\n const openRouterKey = merged.OPENROUTER_API_KEY?.trim();\n const useRaw = merged.USE_OPENROUTER?.trim().toLowerCase();\n const useOpenRouterExplicit = useRaw === \"true\" || useRaw === \"1\";\n\n return {\n hasOpenRouterKey: Boolean(openRouterKey),\n useOpenRouterExplicit,\n getVendorApiKey(providerId: string) {\n const name = vendorApiKeyEnvName(providerId);\n const val = merged[name]?.trim();\n return val || undefined;\n },\n };\n}\n\n/**\n * Default route via OpenRouter when:\n * 1. OPENROUTER_API_KEY is set AND USE_OPENROUTER=true|1, or\n * 2. OPENROUTER_API_KEY is set AND the vendor's `{VENDOR}_API_KEY` is missing.\n */\nexport function shouldDefaultRouteViaOpenRouter(\n providerId: string | undefined,\n config: OpenRouterRoutingConfig,\n): boolean {\n if (!config.hasOpenRouterKey) return false;\n if (config.useOpenRouterExplicit) return true;\n if (providerId && providerId !== \"openrouter\") {\n return !config.getVendorApiKey(providerId);\n }\n return false;\n}\n","import { normalizeString } from \"./normalize.js\";\n\n/** Patterns stripped when resolving versioned runtime model ids to catalog entries. */\nexport const VERSION_STRIP_PATTERNS: ReadonlyArray<{ re: RegExp; label: string }> = [\n { re: /-\\d{4}-\\d{2}-\\d{2}$/, label: \"date YYYY-MM-DD\" },\n { re: /-\\d{8}$/, label: \"date YYYYMMDD\" },\n { re: /-v\\d+$/, label: \"version -vN\" },\n { re: /-\\d+\\.\\d+\\.\\d+$/, label: \"semver\" },\n { re: /:\\d+[a-z]?$/i, label: \"colon version\" },\n { re: /-\\d{4,}$/, label: \"build number\" },\n { re: /@\\d+$/, label: \"epoch @NNNN\" },\n];\n\n/** Strip version/date suffix from a bare slug (no `provider/` prefix). */\nexport function stripModelSlugSuffix(slug: string): string | null {\n for (const { re } of VERSION_STRIP_PATTERNS) {\n if (re.test(slug)) {\n return slug.replace(re, \"\");\n }\n }\n return null;\n}\n\n/**\n * Strip a version/date suffix from a model id (`gpt-5.5-2026-04-23` → `gpt-5.5`,\n * `openai/gpt-4o-2024-08-06` → `openai/gpt-4o`). Returns null when nothing was stripped.\n */\nexport function stripModelVersionSuffix(model: string): string | null {\n const normalized = normalizeString(model);\n if (!normalized) return null;\n\n if (normalized.includes(\"/\")) {\n const slash = normalized.indexOf(\"/\");\n const prefix = normalized.slice(0, slash);\n const slug = normalized.slice(slash + 1);\n const stripped = stripModelSlugSuffix(slug);\n if (stripped && stripped !== slug) {\n return `${prefix}/${stripped}`;\n }\n return null;\n }\n\n const stripped = stripModelSlugSuffix(normalized);\n return stripped && stripped !== normalized ? stripped : null;\n}\n"],"mappings":"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","names":["stripped"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkPADNCGZBcjs = require('./chunk-PADNCGZB.cjs');
|
|
8
8
|
|
|
9
9
|
// src/aliases/AliasRegistry.ts
|
|
10
10
|
var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);
|
|
@@ -62,17 +62,17 @@ var AliasRegistry = class {
|
|
|
62
62
|
try {
|
|
63
63
|
raw = _fs2.default.readFileSync(this.aliasesPath, "utf8");
|
|
64
64
|
} catch (cause) {
|
|
65
|
-
throw new (0,
|
|
65
|
+
throw new (0, _chunkPADNCGZBcjs.AliasFileParseError)(this.aliasesPath, cause);
|
|
66
66
|
}
|
|
67
67
|
let parsed;
|
|
68
68
|
try {
|
|
69
69
|
parsed = JSON.parse(raw);
|
|
70
70
|
} catch (cause) {
|
|
71
|
-
throw new (0,
|
|
71
|
+
throw new (0, _chunkPADNCGZBcjs.AliasFileParseError)(this.aliasesPath, cause);
|
|
72
72
|
}
|
|
73
73
|
const result = aliasFileSchema.safeParse(parsed);
|
|
74
74
|
if (!result.success) {
|
|
75
|
-
throw new (0,
|
|
75
|
+
throw new (0, _chunkPADNCGZBcjs.AliasFileParseError)(this.aliasesPath, result.error);
|
|
76
76
|
}
|
|
77
77
|
return result.data;
|
|
78
78
|
}
|
|
@@ -86,7 +86,7 @@ var AliasRegistry = class {
|
|
|
86
86
|
}
|
|
87
87
|
set(aliasName, entry) {
|
|
88
88
|
if (!ALIAS_NAME_RE.test(aliasName)) {
|
|
89
|
-
throw new (0,
|
|
89
|
+
throw new (0, _chunkPADNCGZBcjs.AliasInvalidNameError)(aliasName);
|
|
90
90
|
}
|
|
91
91
|
if (!this.exists()) this.init();
|
|
92
92
|
const schema = this.load();
|
|
@@ -113,15 +113,15 @@ var AliasRegistry = class {
|
|
|
113
113
|
}
|
|
114
114
|
rename(from, to, options) {
|
|
115
115
|
if (!ALIAS_NAME_RE.test(to)) {
|
|
116
|
-
throw new (0,
|
|
116
|
+
throw new (0, _chunkPADNCGZBcjs.AliasInvalidNameError)(to);
|
|
117
117
|
}
|
|
118
118
|
const schema = this.load();
|
|
119
119
|
const entry = schema.aliases[from];
|
|
120
120
|
if (!entry) {
|
|
121
|
-
throw new (0,
|
|
121
|
+
throw new (0, _chunkPADNCGZBcjs.AliasNotFoundError)(from);
|
|
122
122
|
}
|
|
123
123
|
if (schema.aliases[to] && !_optionalChain([options, 'optionalAccess', _3 => _3.force])) {
|
|
124
|
-
throw new (0,
|
|
124
|
+
throw new (0, _chunkPADNCGZBcjs.AliasConflictError)(to);
|
|
125
125
|
}
|
|
126
126
|
delete schema.aliases[from];
|
|
127
127
|
entry.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -136,7 +136,7 @@ var AliasRegistry = class {
|
|
|
136
136
|
_fs2.default.writeFileSync(tmp, JSON.stringify(schema, null, 2), "utf8");
|
|
137
137
|
_fs2.default.renameSync(tmp, this.aliasesPath);
|
|
138
138
|
} catch (cause) {
|
|
139
|
-
throw new (0,
|
|
139
|
+
throw new (0, _chunkPADNCGZBcjs.AliasFileWriteError)(this.aliasesPath, cause);
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
};
|
|
@@ -153,7 +153,7 @@ var AliasResolver = class {
|
|
|
153
153
|
async getModel(aliasName) {
|
|
154
154
|
const entry = this.registry.get(aliasName);
|
|
155
155
|
if (!entry) {
|
|
156
|
-
throw new (0,
|
|
156
|
+
throw new (0, _chunkPADNCGZBcjs.AliasNotFoundError)(aliasName);
|
|
157
157
|
}
|
|
158
158
|
return this.resolveEntry(aliasName, entry);
|
|
159
159
|
}
|
|
@@ -237,4 +237,4 @@ var AliasResolver = class {
|
|
|
237
237
|
|
|
238
238
|
|
|
239
239
|
exports.AliasRegistry = AliasRegistry; exports.AliasResolver = AliasResolver;
|
|
240
|
-
//# sourceMappingURL=chunk-
|
|
240
|
+
//# sourceMappingURL=chunk-BAHBDADJ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-QWAX7VQO.cjs","../src/aliases/AliasRegistry.ts","../src/aliases/AliasResolver.ts"],"names":["ALIAS_NAME_RE"],"mappings":"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","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-QWAX7VQO.cjs","sourcesContent":[null,"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\nimport {\n AliasConflictError,\n AliasFileParseError,\n AliasFileWriteError,\n AliasInvalidNameError,\n AliasNotFoundError,\n} from \"../errors.js\";\nimport type { AliasEntry, AliasFileSchema } from \"./types.js\";\n\nconst ALIAS_NAME_RE = /^[a-z0-9][a-z0-9-]*$/;\n\nconst aliasEntrySchema = z.object({\n modelId: z.string().min(1),\n provider: z.string().min(1),\n description: z.string().optional(),\n tags: z.array(z.string()).optional(),\n addedAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst aliasFileSchema = z.object({\n $schema: z.string().optional(),\n version: z.literal(1),\n updatedAt: z.string(),\n aliases: z.record(aliasEntrySchema),\n});\n\nexport type AliasRegistryOptions = {\n aliasesPath?: string;\n};\n\nfunction defaultAliasesPath(): string {\n if (process.env.AI_TOOLS_ALIASES_PATH) {\n return path.resolve(process.env.AI_TOOLS_ALIASES_PATH);\n }\n return path.resolve(process.cwd(), \"ai-tools/aliases.json\");\n}\n\nfunction emptySchema(): AliasFileSchema {\n const now = new Date().toISOString();\n return {\n $schema: \"https://unpkg.com/@x12i/ai-tools/schemas/aliases.json\",\n version: 1,\n updatedAt: now,\n aliases: {},\n };\n}\n\nexport class AliasRegistry {\n private readonly aliasesPath: string;\n\n constructor(options: AliasRegistryOptions = {}) {\n this.aliasesPath = options.aliasesPath ?? defaultAliasesPath();\n }\n\n get path(): string {\n return this.aliasesPath;\n }\n\n exists(): boolean {\n return fs.existsSync(this.aliasesPath);\n }\n\n init(): void {\n if (this.exists()) return;\n fs.mkdirSync(path.dirname(this.aliasesPath), { recursive: true });\n this.writeFile(emptySchema());\n }\n\n load(): AliasFileSchema {\n if (!this.exists()) return emptySchema();\n\n let raw: string;\n try {\n raw = fs.readFileSync(this.aliasesPath, \"utf8\");\n } catch (cause) {\n throw new AliasFileParseError(this.aliasesPath, cause);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (cause) {\n throw new AliasFileParseError(this.aliasesPath, cause);\n }\n\n const result = aliasFileSchema.safeParse(parsed);\n if (!result.success) {\n throw new AliasFileParseError(this.aliasesPath, result.error);\n }\n\n return result.data;\n }\n\n get(aliasName: string): AliasEntry | null {\n const schema = this.load();\n return schema.aliases[aliasName] ?? null;\n }\n\n list(filter?: { tag?: string }): Array<{ name: string } & AliasEntry> {\n const schema = this.load();\n return Object.entries(schema.aliases)\n .filter(([, entry]) => !filter?.tag || (entry.tags ?? []).includes(filter.tag))\n .map(([name, entry]) => ({ name, ...entry }));\n }\n\n set(\n aliasName: string,\n entry: Omit<AliasEntry, \"addedAt\" | \"updatedAt\">,\n ): AliasEntry {\n if (!ALIAS_NAME_RE.test(aliasName)) {\n throw new AliasInvalidNameError(aliasName);\n }\n\n if (!this.exists()) this.init();\n\n const schema = this.load();\n const now = new Date().toISOString();\n const existing = schema.aliases[aliasName];\n\n const full: AliasEntry = {\n ...entry,\n addedAt: existing?.addedAt ?? now,\n updatedAt: now,\n };\n\n schema.aliases[aliasName] = full;\n schema.updatedAt = now;\n this.writeFile(schema);\n return full;\n }\n\n remove(aliasName: string): boolean {\n if (!this.exists()) return false;\n const schema = this.load();\n if (!schema.aliases[aliasName]) return false;\n delete schema.aliases[aliasName];\n schema.updatedAt = new Date().toISOString();\n this.writeFile(schema);\n return true;\n }\n\n rename(from: string, to: string, options?: { force?: boolean }): void {\n if (!ALIAS_NAME_RE.test(to)) {\n throw new AliasInvalidNameError(to);\n }\n\n const schema = this.load();\n const entry = schema.aliases[from];\n if (!entry) {\n throw new AliasNotFoundError(from);\n }\n if (schema.aliases[to] && !options?.force) {\n throw new AliasConflictError(to);\n }\n\n delete schema.aliases[from];\n entry.updatedAt = new Date().toISOString();\n schema.aliases[to] = entry;\n schema.updatedAt = entry.updatedAt;\n this.writeFile(schema);\n }\n\n private writeFile(schema: AliasFileSchema): void {\n const tmp = `${this.aliasesPath}.tmp`;\n try {\n fs.mkdirSync(path.dirname(this.aliasesPath), { recursive: true });\n fs.writeFileSync(tmp, JSON.stringify(schema, null, 2), \"utf8\");\n fs.renameSync(tmp, this.aliasesPath);\n } catch (cause) {\n throw new AliasFileWriteError(this.aliasesPath, cause);\n }\n }\n}\n","import { AliasNotFoundError } from \"../errors.js\";\nimport type { AiModelsCatalogClient } from \"../catalox/AiModelsCatalogClient.js\";\nimport type { AliasRegistry } from \"./AliasRegistry.js\";\nimport type { AliasValidationReport, ResolvedModelRef } from \"./types.js\";\n\nconst ALIAS_NAME_RE = /^[a-z0-9][a-z0-9-]*$/;\n\nexport type AliasResolverOptions = {\n registry: AliasRegistry;\n catalogClient: AiModelsCatalogClient;\n};\n\nexport class AliasResolver {\n private readonly registry: AliasRegistry;\n private readonly catalogClient: AiModelsCatalogClient;\n\n constructor(options: AliasResolverOptions) {\n this.registry = options.registry;\n this.catalogClient = options.catalogClient;\n }\n\n async getModel(aliasName: string): Promise<ResolvedModelRef> {\n const entry = this.registry.get(aliasName);\n if (!entry) {\n throw new AliasNotFoundError(aliasName);\n }\n return this.resolveEntry(aliasName, entry);\n }\n\n async getModels(aliasNames: string[]): Promise<ResolvedModelRef[]> {\n const results: ResolvedModelRef[] = [];\n for (const name of aliasNames) {\n const entry = this.registry.get(name);\n if (!entry) {\n console.warn(`[ai-tools] Unknown alias \"${name}\" — skipped.`);\n continue;\n }\n results.push(await this.resolveEntry(name, entry));\n }\n return results;\n }\n\n async getAllResolved(): Promise<ResolvedModelRef[]> {\n const list = this.registry.list();\n return Promise.all(list.map(({ name, ...entry }) => this.resolveEntry(name, entry)));\n }\n\n async validate(): Promise<AliasValidationReport> {\n const list = this.registry.list();\n const entries: AliasValidationReport[\"entries\"] = [];\n let ok = 0;\n let unknown = 0;\n let broken = 0;\n\n for (const { name, modelId } of list) {\n if (!ALIAS_NAME_RE.test(name) || !modelId) {\n broken++;\n entries.push({\n name,\n status: \"broken\",\n modelId: modelId ?? \"\",\n issue: \"Invalid alias name or empty modelId\",\n });\n continue;\n }\n\n const ref = await this.resolveEntry(name, this.registry.get(name)!);\n if (ref.modelRecord) {\n ok++;\n entries.push({\n name,\n status: \"ok\",\n modelId: ref.modelId,\n resolvedName: ref.name,\n });\n } else {\n unknown++;\n entries.push({\n name,\n status: \"unknown\",\n modelId: ref.modelId,\n issue: \"Model not found in catalog\",\n });\n }\n }\n\n return {\n total: list.length,\n ok,\n unknown,\n broken,\n entries,\n };\n }\n\n private async resolveEntry(\n alias: string,\n entry: import(\"./types.js\").AliasEntry,\n ): Promise<ResolvedModelRef> {\n const result = await this.catalogClient.resolveModel({\n model: entry.modelId,\n provider: entry.provider,\n });\n\n return {\n alias,\n entry,\n modelRecord: result.found ? result.record : null,\n modelId: result.found ? result.modelId : entry.modelId,\n provider: entry.provider,\n name: result.record?.name ?? entry.modelId,\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-BAHBDADJ.cjs","../src/aliases/AliasRegistry.ts","../src/aliases/AliasResolver.ts"],"names":["ALIAS_NAME_RE"],"mappings":"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","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-BAHBDADJ.cjs","sourcesContent":[null,"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\nimport {\n AliasConflictError,\n AliasFileParseError,\n AliasFileWriteError,\n AliasInvalidNameError,\n AliasNotFoundError,\n} from \"../errors.js\";\nimport type { AliasEntry, AliasFileSchema } from \"./types.js\";\n\nconst ALIAS_NAME_RE = /^[a-z0-9][a-z0-9-]*$/;\n\nconst aliasEntrySchema = z.object({\n modelId: z.string().min(1),\n provider: z.string().min(1),\n description: z.string().optional(),\n tags: z.array(z.string()).optional(),\n addedAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst aliasFileSchema = z.object({\n $schema: z.string().optional(),\n version: z.literal(1),\n updatedAt: z.string(),\n aliases: z.record(aliasEntrySchema),\n});\n\nexport type AliasRegistryOptions = {\n aliasesPath?: string;\n};\n\nfunction defaultAliasesPath(): string {\n if (process.env.AI_TOOLS_ALIASES_PATH) {\n return path.resolve(process.env.AI_TOOLS_ALIASES_PATH);\n }\n return path.resolve(process.cwd(), \"ai-tools/aliases.json\");\n}\n\nfunction emptySchema(): AliasFileSchema {\n const now = new Date().toISOString();\n return {\n $schema: \"https://unpkg.com/@x12i/ai-tools/schemas/aliases.json\",\n version: 1,\n updatedAt: now,\n aliases: {},\n };\n}\n\nexport class AliasRegistry {\n private readonly aliasesPath: string;\n\n constructor(options: AliasRegistryOptions = {}) {\n this.aliasesPath = options.aliasesPath ?? defaultAliasesPath();\n }\n\n get path(): string {\n return this.aliasesPath;\n }\n\n exists(): boolean {\n return fs.existsSync(this.aliasesPath);\n }\n\n init(): void {\n if (this.exists()) return;\n fs.mkdirSync(path.dirname(this.aliasesPath), { recursive: true });\n this.writeFile(emptySchema());\n }\n\n load(): AliasFileSchema {\n if (!this.exists()) return emptySchema();\n\n let raw: string;\n try {\n raw = fs.readFileSync(this.aliasesPath, \"utf8\");\n } catch (cause) {\n throw new AliasFileParseError(this.aliasesPath, cause);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (cause) {\n throw new AliasFileParseError(this.aliasesPath, cause);\n }\n\n const result = aliasFileSchema.safeParse(parsed);\n if (!result.success) {\n throw new AliasFileParseError(this.aliasesPath, result.error);\n }\n\n return result.data;\n }\n\n get(aliasName: string): AliasEntry | null {\n const schema = this.load();\n return schema.aliases[aliasName] ?? null;\n }\n\n list(filter?: { tag?: string }): Array<{ name: string } & AliasEntry> {\n const schema = this.load();\n return Object.entries(schema.aliases)\n .filter(([, entry]) => !filter?.tag || (entry.tags ?? []).includes(filter.tag))\n .map(([name, entry]) => ({ name, ...entry }));\n }\n\n set(\n aliasName: string,\n entry: Omit<AliasEntry, \"addedAt\" | \"updatedAt\">,\n ): AliasEntry {\n if (!ALIAS_NAME_RE.test(aliasName)) {\n throw new AliasInvalidNameError(aliasName);\n }\n\n if (!this.exists()) this.init();\n\n const schema = this.load();\n const now = new Date().toISOString();\n const existing = schema.aliases[aliasName];\n\n const full: AliasEntry = {\n ...entry,\n addedAt: existing?.addedAt ?? now,\n updatedAt: now,\n };\n\n schema.aliases[aliasName] = full;\n schema.updatedAt = now;\n this.writeFile(schema);\n return full;\n }\n\n remove(aliasName: string): boolean {\n if (!this.exists()) return false;\n const schema = this.load();\n if (!schema.aliases[aliasName]) return false;\n delete schema.aliases[aliasName];\n schema.updatedAt = new Date().toISOString();\n this.writeFile(schema);\n return true;\n }\n\n rename(from: string, to: string, options?: { force?: boolean }): void {\n if (!ALIAS_NAME_RE.test(to)) {\n throw new AliasInvalidNameError(to);\n }\n\n const schema = this.load();\n const entry = schema.aliases[from];\n if (!entry) {\n throw new AliasNotFoundError(from);\n }\n if (schema.aliases[to] && !options?.force) {\n throw new AliasConflictError(to);\n }\n\n delete schema.aliases[from];\n entry.updatedAt = new Date().toISOString();\n schema.aliases[to] = entry;\n schema.updatedAt = entry.updatedAt;\n this.writeFile(schema);\n }\n\n private writeFile(schema: AliasFileSchema): void {\n const tmp = `${this.aliasesPath}.tmp`;\n try {\n fs.mkdirSync(path.dirname(this.aliasesPath), { recursive: true });\n fs.writeFileSync(tmp, JSON.stringify(schema, null, 2), \"utf8\");\n fs.renameSync(tmp, this.aliasesPath);\n } catch (cause) {\n throw new AliasFileWriteError(this.aliasesPath, cause);\n }\n }\n}\n","import { AliasNotFoundError } from \"../errors.js\";\nimport type { AiModelsCatalogClient } from \"../catalog/AiModelsCatalogClient.js\";\nimport type { AliasRegistry } from \"./AliasRegistry.js\";\nimport type { AliasValidationReport, ResolvedModelRef } from \"./types.js\";\n\nconst ALIAS_NAME_RE = /^[a-z0-9][a-z0-9-]*$/;\n\nexport type AliasResolverOptions = {\n registry: AliasRegistry;\n catalogClient: AiModelsCatalogClient;\n};\n\nexport class AliasResolver {\n private readonly registry: AliasRegistry;\n private readonly catalogClient: AiModelsCatalogClient;\n\n constructor(options: AliasResolverOptions) {\n this.registry = options.registry;\n this.catalogClient = options.catalogClient;\n }\n\n async getModel(aliasName: string): Promise<ResolvedModelRef> {\n const entry = this.registry.get(aliasName);\n if (!entry) {\n throw new AliasNotFoundError(aliasName);\n }\n return this.resolveEntry(aliasName, entry);\n }\n\n async getModels(aliasNames: string[]): Promise<ResolvedModelRef[]> {\n const results: ResolvedModelRef[] = [];\n for (const name of aliasNames) {\n const entry = this.registry.get(name);\n if (!entry) {\n console.warn(`[ai-tools] Unknown alias \"${name}\" — skipped.`);\n continue;\n }\n results.push(await this.resolveEntry(name, entry));\n }\n return results;\n }\n\n async getAllResolved(): Promise<ResolvedModelRef[]> {\n const list = this.registry.list();\n return Promise.all(list.map(({ name, ...entry }) => this.resolveEntry(name, entry)));\n }\n\n async validate(): Promise<AliasValidationReport> {\n const list = this.registry.list();\n const entries: AliasValidationReport[\"entries\"] = [];\n let ok = 0;\n let unknown = 0;\n let broken = 0;\n\n for (const { name, modelId } of list) {\n if (!ALIAS_NAME_RE.test(name) || !modelId) {\n broken++;\n entries.push({\n name,\n status: \"broken\",\n modelId: modelId ?? \"\",\n issue: \"Invalid alias name or empty modelId\",\n });\n continue;\n }\n\n const ref = await this.resolveEntry(name, this.registry.get(name)!);\n if (ref.modelRecord) {\n ok++;\n entries.push({\n name,\n status: \"ok\",\n modelId: ref.modelId,\n resolvedName: ref.name,\n });\n } else {\n unknown++;\n entries.push({\n name,\n status: \"unknown\",\n modelId: ref.modelId,\n issue: \"Model not found in catalog\",\n });\n }\n }\n\n return {\n total: list.length,\n ok,\n unknown,\n broken,\n entries,\n };\n }\n\n private async resolveEntry(\n alias: string,\n entry: import(\"./types.js\").AliasEntry,\n ): Promise<ResolvedModelRef> {\n const result = await this.catalogClient.resolveModel({\n model: entry.modelId,\n provider: entry.provider,\n });\n\n return {\n alias,\n entry,\n modelRecord: result.found ? result.record : null,\n modelId: result.found ? result.modelId : entry.modelId,\n provider: entry.provider,\n name: result.record?.name ?? entry.modelId,\n };\n }\n}\n"]}
|