@x12i/ai-tools 1.0.4 → 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
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// 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 _nullishCoalesce(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
|
+
var _env = require('@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 = _env.loadDotenv.call(void 0, );
|
|
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 = _optionalChain([merged, 'access', _ => _.OPENROUTER_API_KEY, 'optionalAccess', _2 => _2.trim, 'call', _3 => _3()]);
|
|
153
|
+
const useRaw = _optionalChain([merged, 'access', _4 => _4.USE_OPENROUTER, 'optionalAccess', _5 => _5.trim, 'call', _6 => _6(), 'access', _7 => _7.toLowerCase, 'call', _8 => _8()]);
|
|
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 = _optionalChain([merged, 'access', _9 => _9[name], 'optionalAccess', _10 => _10.trim, 'call', _11 => _11()]);
|
|
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
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
exports.DEFAULT_CONFIDENCE_THRESHOLD = DEFAULT_CONFIDENCE_THRESHOLD; exports.LOCAL_PROVIDERS = LOCAL_PROVIDERS; exports.PROVIDER_INFERENCE_MAP = PROVIDER_INFERENCE_MAP; exports.SHORTHAND_MAP = SHORTHAND_MAP; exports.normalizeString = normalizeString; exports.normalizeProvider = normalizeProvider; exports.tokenise = tokenise; exports.modelSlug = modelSlug; exports.stripModelSlugSuffix = stripModelSlugSuffix; exports.stripModelVersionSuffix = stripModelVersionSuffix; exports.providerIdToEnvKeyPrefix = providerIdToEnvKeyPrefix; exports.vendorApiKeyEnvName = vendorApiKeyEnvName; exports.loadOpenRouterRoutingEnv = loadOpenRouterRoutingEnv; exports.shouldDefaultRouteViaOpenRouter = shouldDefaultRouteViaOpenRouter;
|
|
225
|
+
//# sourceMappingURL=chunk-EDMCKHO6.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-EDMCKHO6.cjs","../src/sync/modelNameResolver/constants.ts","../src/sync/modelNameResolver/normalize.ts","../src/sync/openRouterRoutingEnv.ts","../src/sync/modelNameResolver/stripVersionSuffix.ts"],"names":["stripped"],"mappings":"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AA;AACjB;AAEO,SAAS,mBAAA,CAAoB,UAAA,EAA4B;AAC9D,EAAA,OAAO,CAAA,EAAA;AACT;AAcgB;AAGR,EAAA;AACA,EAAA;AACN,EAAA;AACM,IAAA;AACN,EAAA;AACA,EAAA;AACM,IAAA;AACN,EAAA;AAEM,EAAA;AACA,EAAA;AACA,EAAA;AAEC,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AACF;AAOgB;AAIT,EAAA;AACD,EAAA;AACA,EAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AHkGU;AACA;AI1KG;AACL,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACR;AAGgB;AACd,EAAA;AACM,IAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAMgB;AACR,EAAA;AACD,EAAA;AAED,EAAA;AACI,IAAA;AACA,IAAA;AACA,IAAA;AACAA,IAAAA;AACFA,IAAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACF,EAAA;AAEM,EAAA;AACC,EAAA;AACT;AJmKU;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-EDMCKHO6.cjs","sourcesContent":[null,"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"]}
|
|
@@ -1,270 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_CONFIDENCE_THRESHOLD,
|
|
3
|
+
LOCAL_PROVIDERS,
|
|
4
|
+
PROVIDER_INFERENCE_MAP,
|
|
5
|
+
SHORTHAND_MAP,
|
|
6
|
+
loadOpenRouterRoutingEnv,
|
|
7
|
+
modelSlug,
|
|
8
|
+
normalizeProvider,
|
|
9
|
+
normalizeString,
|
|
10
|
+
shouldDefaultRouteViaOpenRouter,
|
|
11
|
+
stripModelSlugSuffix,
|
|
12
|
+
stripModelVersionSuffix,
|
|
13
|
+
tokenise
|
|
14
|
+
} from "./chunk-B3V2EHRY.js";
|
|
1
15
|
import {
|
|
2
16
|
ModelResolutionError
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
|
|
5
|
-
// src/cache/modelCache.ts
|
|
6
|
-
import { createNxCache } from "nx-cache";
|
|
7
|
-
var cache = createNxCache();
|
|
8
|
-
var DEFAULT_MODEL_CACHE_TTL_MS = 60 * 60 * 1e3;
|
|
9
|
-
function readCachedModels(appId, ttlMs = DEFAULT_MODEL_CACHE_TTL_MS) {
|
|
10
|
-
const res = cache.read("ai-models", { appId });
|
|
11
|
-
if (!res.found) return null;
|
|
12
|
-
const cachedAt = res.metadata?.cachedAt;
|
|
13
|
-
if (cachedAt) {
|
|
14
|
-
const age = Date.now() - new Date(cachedAt).getTime();
|
|
15
|
-
if (age > ttlMs) return null;
|
|
16
|
-
} else if (res.meta.isExpired) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
return res.value;
|
|
20
|
-
}
|
|
21
|
-
function writeCachedModels(appId, models, ttlMs = DEFAULT_MODEL_CACHE_TTL_MS) {
|
|
22
|
-
cache.write("ai-models", models, {
|
|
23
|
-
scope: { appId },
|
|
24
|
-
ttlMs,
|
|
25
|
-
metadata: { cachedAt: (/* @__PURE__ */ new Date()).toISOString(), count: models.size }
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
function invalidateModelsCache(appId) {
|
|
29
|
-
cache.resetKey("ai-models", { appId });
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// src/catalog/aiModelsCatalogDescriptor.ts
|
|
33
|
-
var AI_MODELS_CATALOG_ID = "ai-models";
|
|
34
|
-
var AI_TOOLS_APP_ID = "ai-tools";
|
|
35
|
-
var AI_MODELS_DESCRIPTOR = {
|
|
36
|
-
catalogId: AI_MODELS_CATALOG_ID,
|
|
37
|
-
label: "AI Models",
|
|
38
|
-
description: "Full mirror of OpenRouter Models API metadata and pricing, synced on a schedule.",
|
|
39
|
-
itemLabel: "Model",
|
|
40
|
-
sourceMode: "native",
|
|
41
|
-
status: "active",
|
|
42
|
-
visibility: "visible",
|
|
43
|
-
capabilities: {
|
|
44
|
-
canList: true,
|
|
45
|
-
canGet: true,
|
|
46
|
-
canCreate: false,
|
|
47
|
-
canEdit: false,
|
|
48
|
-
canDelete: false,
|
|
49
|
-
canExport: true,
|
|
50
|
-
canValidate: true
|
|
51
|
-
},
|
|
52
|
-
identity: {
|
|
53
|
-
itemIdStrategy: "natural",
|
|
54
|
-
itemIdField: "modelId",
|
|
55
|
-
titleField: "name",
|
|
56
|
-
subtitleField: "providerId",
|
|
57
|
-
statusField: "status",
|
|
58
|
-
updatedAtField: "syncedAt"
|
|
59
|
-
},
|
|
60
|
-
queryableFields: [
|
|
61
|
-
{ key: "modelId", label: "Model ID", type: "string", indexed: true, filterable: true },
|
|
62
|
-
{ key: "providerId", label: "Provider", type: "string", indexed: true, filterable: true },
|
|
63
|
-
{ key: "name", label: "Name", type: "string", filterable: true },
|
|
64
|
-
{ key: "canonicalSlug", label: "Canonical Slug", type: "string", indexed: true, filterable: true },
|
|
65
|
-
{ key: "contextLength", label: "Context Length", type: "number", sortable: true },
|
|
66
|
-
{
|
|
67
|
-
key: "status",
|
|
68
|
-
label: "Status",
|
|
69
|
-
type: "enum",
|
|
70
|
-
indexed: true,
|
|
71
|
-
filterable: true,
|
|
72
|
-
enumValues: ["active", "deprecated", "unknown"]
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
key: "primaryOutputModality",
|
|
76
|
-
label: "Primary Output",
|
|
77
|
-
type: "string",
|
|
78
|
-
indexed: true,
|
|
79
|
-
filterable: true
|
|
80
|
-
},
|
|
81
|
-
{ key: "supportsTools", label: "Tools", type: "boolean", indexed: true, filterable: true },
|
|
82
|
-
{
|
|
83
|
-
key: "supportsReasoning",
|
|
84
|
-
label: "Reasoning",
|
|
85
|
-
type: "boolean",
|
|
86
|
-
indexed: true,
|
|
87
|
-
filterable: true
|
|
88
|
-
},
|
|
89
|
-
{ key: "supportsStreaming", label: "Streams", type: "boolean", filterable: true },
|
|
90
|
-
{ key: "isModerated", label: "Moderated", type: "boolean", filterable: true },
|
|
91
|
-
{ key: "syncedAt", label: "Synced At", type: "datetime", sortable: true }
|
|
92
|
-
],
|
|
93
|
-
defaultSort: { field: "syncedAt", direction: "desc" }
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
// src/sync/openRouterRoutingEnv.ts
|
|
97
|
-
import { loadDotenv } from "@x12i/env";
|
|
98
|
-
function providerIdToEnvKeyPrefix(providerId) {
|
|
99
|
-
return providerId.trim().toLowerCase().replace(/-/g, "_").toUpperCase();
|
|
100
|
-
}
|
|
101
|
-
function vendorApiKeyEnvName(providerId) {
|
|
102
|
-
return `${providerIdToEnvKeyPrefix(providerId)}_API_KEY`;
|
|
103
|
-
}
|
|
104
|
-
function loadOpenRouterRoutingEnv(env = process.env) {
|
|
105
|
-
const dotenv = loadDotenv();
|
|
106
|
-
const merged = {};
|
|
107
|
-
for (const [k, v] of Object.entries(dotenv)) {
|
|
108
|
-
if (v !== void 0) merged[k] = v;
|
|
109
|
-
}
|
|
110
|
-
for (const [k, v] of Object.entries(env)) {
|
|
111
|
-
if (v !== void 0) merged[k] = v;
|
|
112
|
-
}
|
|
113
|
-
const openRouterKey = merged.OPENROUTER_API_KEY?.trim();
|
|
114
|
-
const useRaw = merged.USE_OPENROUTER?.trim().toLowerCase();
|
|
115
|
-
const useOpenRouterExplicit = useRaw === "true" || useRaw === "1";
|
|
116
|
-
return {
|
|
117
|
-
hasOpenRouterKey: Boolean(openRouterKey),
|
|
118
|
-
useOpenRouterExplicit,
|
|
119
|
-
getVendorApiKey(providerId) {
|
|
120
|
-
const name = vendorApiKeyEnvName(providerId);
|
|
121
|
-
const val = merged[name]?.trim();
|
|
122
|
-
return val || void 0;
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
function shouldDefaultRouteViaOpenRouter(providerId, config) {
|
|
127
|
-
if (!config.hasOpenRouterKey) return false;
|
|
128
|
-
if (config.useOpenRouterExplicit) return true;
|
|
129
|
-
if (providerId && providerId !== "openrouter") {
|
|
130
|
-
return !config.getVendorApiKey(providerId);
|
|
131
|
-
}
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// src/sync/modelNameResolver/constants.ts
|
|
136
|
-
var DEFAULT_CONFIDENCE_THRESHOLD = 0.6;
|
|
137
|
-
var PROVIDER_NORMALISATION_MAP = {
|
|
138
|
-
"open-router": "openrouter",
|
|
139
|
-
or: "openrouter",
|
|
140
|
-
oai: "openai",
|
|
141
|
-
"open-ai": "openai",
|
|
142
|
-
claude: "anthropic",
|
|
143
|
-
ant: "anthropic",
|
|
144
|
-
gemini: "google",
|
|
145
|
-
gcp: "google",
|
|
146
|
-
"google-ai": "google",
|
|
147
|
-
vertex: "google",
|
|
148
|
-
meta: "meta-llama",
|
|
149
|
-
llama: "meta-llama",
|
|
150
|
-
"mistral-ai": "mistral",
|
|
151
|
-
"cohere-ai": "cohere"
|
|
152
|
-
};
|
|
153
|
-
var LOCAL_PROVIDERS = /* @__PURE__ */ new Set([
|
|
154
|
-
"ollama",
|
|
155
|
-
"lmstudio",
|
|
156
|
-
"lm-studio",
|
|
157
|
-
"localai",
|
|
158
|
-
"local-ai",
|
|
159
|
-
"llamacpp",
|
|
160
|
-
"llama.cpp",
|
|
161
|
-
"llamafile",
|
|
162
|
-
"jan",
|
|
163
|
-
"koboldcpp"
|
|
164
|
-
]);
|
|
165
|
-
var PROVIDER_INFERENCE_MAP = [
|
|
166
|
-
{ pattern: /^gpt-/, provider: "openai" },
|
|
167
|
-
{ pattern: /^o1($|-)/, provider: "openai" },
|
|
168
|
-
{ pattern: /^o3($|-)/, provider: "openai" },
|
|
169
|
-
{ pattern: /^o4($|-)/, provider: "openai" },
|
|
170
|
-
{ pattern: /^chatgpt-/, provider: "openai" },
|
|
171
|
-
{ pattern: /^text-davinci/, provider: "openai" },
|
|
172
|
-
{ pattern: /^dall-e/, provider: "openai" },
|
|
173
|
-
{ pattern: /^whisper/, provider: "openai" },
|
|
174
|
-
{ pattern: /^tts-/, provider: "openai" },
|
|
175
|
-
{ pattern: /^claude-/, provider: "anthropic" },
|
|
176
|
-
{ pattern: /^gemini-/, provider: "google" },
|
|
177
|
-
{ pattern: /^palm-/, provider: "google" },
|
|
178
|
-
{ pattern: /^bison/, provider: "google" },
|
|
179
|
-
{ pattern: /^llama-?[23]/, provider: "meta-llama" },
|
|
180
|
-
{ pattern: /^llama/, provider: "meta-llama" },
|
|
181
|
-
{ pattern: /^codellama/, provider: "meta-llama" },
|
|
182
|
-
{ pattern: /^mistral-/, provider: "mistral" },
|
|
183
|
-
{ pattern: /^mixtral-/, provider: "mistral" },
|
|
184
|
-
{ pattern: /^codestral/, provider: "mistral" },
|
|
185
|
-
{ pattern: /^ministral/, provider: "mistral" },
|
|
186
|
-
{ pattern: /^command-/, provider: "cohere" },
|
|
187
|
-
{ pattern: /^c4ai-/, provider: "cohere" },
|
|
188
|
-
{ pattern: /^deepseek-/, provider: "deepseek" },
|
|
189
|
-
{ pattern: /^grok-/, provider: "x-ai" },
|
|
190
|
-
{ pattern: /^qwen/, provider: "qwen" },
|
|
191
|
-
{ pattern: /^yi-/, provider: "01-ai" },
|
|
192
|
-
{ pattern: /^sonar/, provider: "perplexity" },
|
|
193
|
-
{ pattern: /^pplx-/, provider: "perplexity" },
|
|
194
|
-
{ pattern: /^titan-/, provider: "amazon" },
|
|
195
|
-
{ pattern: /^nova-/, provider: "amazon" }
|
|
196
|
-
];
|
|
197
|
-
var SHORTHAND_MAP = {
|
|
198
|
-
gpt4: "openai/gpt-4",
|
|
199
|
-
gpt4o: "openai/gpt-4o",
|
|
200
|
-
"gpt-4-omni": "openai/gpt-4o",
|
|
201
|
-
gpt4omni: "openai/gpt-4o",
|
|
202
|
-
"gpt4-turbo": "openai/gpt-4-turbo",
|
|
203
|
-
gpt4turbo: "openai/gpt-4-turbo",
|
|
204
|
-
"gpt4-mini": "openai/gpt-4o-mini",
|
|
205
|
-
"gpt-4o-mini": "openai/gpt-4o-mini",
|
|
206
|
-
o1: "openai/o1",
|
|
207
|
-
"o1-mini": "openai/o1-mini",
|
|
208
|
-
o3: "openai/o3",
|
|
209
|
-
"o3-mini": "openai/o3-mini",
|
|
210
|
-
"o4-mini": "openai/o4-mini",
|
|
211
|
-
"3.5-turbo": "openai/gpt-3.5-turbo",
|
|
212
|
-
gpt35: "openai/gpt-3.5-turbo",
|
|
213
|
-
gpt3: "openai/gpt-3.5-turbo",
|
|
214
|
-
claude3: "anthropic/claude-3-5-sonnet-20241022",
|
|
215
|
-
"claude-3": "anthropic/claude-3-5-sonnet-20241022",
|
|
216
|
-
"claude3-sonnet": "anthropic/claude-3-5-sonnet-20241022",
|
|
217
|
-
"claude-sonnet": "anthropic/claude-3-5-sonnet-20241022",
|
|
218
|
-
"claude-haiku": "anthropic/claude-3-5-haiku-20241022",
|
|
219
|
-
"claude3-haiku": "anthropic/claude-3-5-haiku-20241022",
|
|
220
|
-
"claude-opus": "anthropic/claude-opus-4",
|
|
221
|
-
"claude3-opus": "anthropic/claude-3-opus-20240229",
|
|
222
|
-
claude4: "anthropic/claude-opus-4",
|
|
223
|
-
"claude4-sonnet": "anthropic/claude-sonnet-4",
|
|
224
|
-
"claude4-opus": "anthropic/claude-opus-4",
|
|
225
|
-
sonnet: "anthropic/claude-3-5-sonnet-20241022",
|
|
226
|
-
haiku: "anthropic/claude-3-5-haiku-20241022",
|
|
227
|
-
opus: "anthropic/claude-opus-4",
|
|
228
|
-
gemini: "google/gemini-pro",
|
|
229
|
-
"gemini-pro": "google/gemini-pro",
|
|
230
|
-
"gemini-flash": "google/gemini-flash-1.5",
|
|
231
|
-
gemini2: "google/gemini-2.0-flash-001",
|
|
232
|
-
"gemini-2": "google/gemini-2.0-flash-001",
|
|
233
|
-
llama3: "meta-llama/llama-3.1-8b-instruct",
|
|
234
|
-
"llama-3": "meta-llama/llama-3.1-8b-instruct",
|
|
235
|
-
llama2: "meta-llama/llama-2-13b-chat",
|
|
236
|
-
"llama-2": "meta-llama/llama-2-13b-chat",
|
|
237
|
-
mistral: "mistral/mistral-7b-instruct",
|
|
238
|
-
"mistral-large": "mistral/mistral-large-latest",
|
|
239
|
-
mixtral: "mistral/mixtral-8x7b-instruct",
|
|
240
|
-
deepseek: "deepseek/deepseek-chat",
|
|
241
|
-
"deepseek-r1": "deepseek/deepseek-r1"
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
// src/sync/modelNameResolver/normalize.ts
|
|
245
|
-
function normalizeString(input) {
|
|
246
|
-
let s = input.trim();
|
|
247
|
-
s = s.replace(/\s+/g, " ").replace(/ /g, "-");
|
|
248
|
-
s = s.toLowerCase();
|
|
249
|
-
s = s.replace(/^\/+|\/+$/g, "");
|
|
250
|
-
s = s.replace(/\/+/g, "/");
|
|
251
|
-
if (s.startsWith('"') && s.endsWith('"') || s.startsWith("'") && s.endsWith("'")) {
|
|
252
|
-
s = s.slice(1, -1);
|
|
253
|
-
}
|
|
254
|
-
return s;
|
|
255
|
-
}
|
|
256
|
-
function normalizeProvider(provider) {
|
|
257
|
-
if (provider === void 0 || provider === "") return void 0;
|
|
258
|
-
const n = normalizeString(provider);
|
|
259
|
-
return PROVIDER_NORMALISATION_MAP[n] ?? n;
|
|
260
|
-
}
|
|
261
|
-
function tokenise(s) {
|
|
262
|
-
return s.split(/[-_./]+/).filter(Boolean);
|
|
263
|
-
}
|
|
264
|
-
function modelSlug(modelId) {
|
|
265
|
-
const slash = modelId.indexOf("/");
|
|
266
|
-
return slash >= 0 ? modelId.slice(slash + 1) : modelId;
|
|
267
|
-
}
|
|
17
|
+
} from "./chunk-2PTCWPHV.js";
|
|
268
18
|
|
|
269
19
|
// src/sync/modelNameResolver/catalogIndexes.ts
|
|
270
20
|
function buildCatalogIndexes(catalog) {
|
|
@@ -286,15 +36,6 @@ function buildCatalogIndexes(catalog) {
|
|
|
286
36
|
}
|
|
287
37
|
|
|
288
38
|
// src/sync/modelNameResolver/ModelNameResolver.ts
|
|
289
|
-
var VERSION_STRIP_PATTERNS = [
|
|
290
|
-
{ re: /-\d{4}-\d{2}-\d{2}$/, label: "date YYYY-MM-DD" },
|
|
291
|
-
{ re: /-\d{8}$/, label: "date YYYYMMDD" },
|
|
292
|
-
{ re: /-v\d+$/, label: "version -vN" },
|
|
293
|
-
{ re: /-\d+\.\d+\.\d+$/, label: "semver" },
|
|
294
|
-
{ re: /:\d+[a-z]?$/i, label: "colon version" },
|
|
295
|
-
{ re: /-\d{4,}$/, label: "build number" },
|
|
296
|
-
{ re: /@\d+$/, label: "epoch @NNNN" }
|
|
297
|
-
];
|
|
298
39
|
var ModelNameResolver = class {
|
|
299
40
|
catalog;
|
|
300
41
|
indexes;
|
|
@@ -415,7 +156,7 @@ var ModelNameResolver = class {
|
|
|
415
156
|
if (hit) return { match: hit };
|
|
416
157
|
hit = tryMatch("cross-provider-correction", () => this.crossProviderCorrection(model));
|
|
417
158
|
if (hit) return { match: hit };
|
|
418
|
-
const stripped =
|
|
159
|
+
const stripped = stripModelVersionSuffix(model);
|
|
419
160
|
if (stripped && stripped !== model) {
|
|
420
161
|
if (!attempted.includes("version-suffix-strip")) attempted.push("version-suffix-strip");
|
|
421
162
|
const inner = this.runPipeline(
|
|
@@ -587,18 +328,10 @@ var ModelNameResolver = class {
|
|
|
587
328
|
reason: `Corrected provider prefix from "${wrongPrefix}" to "${inferred}" based on model name pattern`
|
|
588
329
|
};
|
|
589
330
|
}
|
|
590
|
-
stripVersionSuffixes(model) {
|
|
591
|
-
for (const { re } of VERSION_STRIP_PATTERNS) {
|
|
592
|
-
if (re.test(model)) {
|
|
593
|
-
return model.replace(re, "");
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
return null;
|
|
597
|
-
}
|
|
598
331
|
dateSuffixMatch(model) {
|
|
599
332
|
if (model.includes("/")) {
|
|
600
333
|
const [prefix, slug] = model.split("/", 2);
|
|
601
|
-
const stripped =
|
|
334
|
+
const stripped = stripModelSlugSuffix(slug);
|
|
602
335
|
if (stripped && stripped !== slug) {
|
|
603
336
|
const candidate = `${prefix}/${stripped}`;
|
|
604
337
|
const record = this.catalog.get(candidate);
|
|
@@ -709,21 +442,37 @@ var ModelNameResolver = class {
|
|
|
709
442
|
}
|
|
710
443
|
};
|
|
711
444
|
|
|
445
|
+
// src/models/reasoningModel.ts
|
|
446
|
+
var REASONING_SUPPORTED_PARAMETERS = ["reasoning", "include_reasoning"];
|
|
447
|
+
function supportsReasoningParameter(model) {
|
|
448
|
+
return model.supportedParameters.some(
|
|
449
|
+
(p) => REASONING_SUPPORTED_PARAMETERS.includes(p)
|
|
450
|
+
);
|
|
451
|
+
}
|
|
452
|
+
function hasReasoningPricing(model) {
|
|
453
|
+
const raw = model.openRouterPricing?.internal_reasoning;
|
|
454
|
+
if (raw !== void 0 && raw !== null && String(raw).trim() !== "") {
|
|
455
|
+
return true;
|
|
456
|
+
}
|
|
457
|
+
return model.pricing.reasoningUsdPerToken !== void 0;
|
|
458
|
+
}
|
|
459
|
+
function computeSupportsReasoning(model) {
|
|
460
|
+
return supportsReasoningParameter(model) || hasReasoningPricing(model);
|
|
461
|
+
}
|
|
462
|
+
function isReasoningModel(model) {
|
|
463
|
+
if (model.supportsReasoning !== void 0) {
|
|
464
|
+
return model.supportsReasoning;
|
|
465
|
+
}
|
|
466
|
+
return computeSupportsReasoning(model);
|
|
467
|
+
}
|
|
468
|
+
|
|
712
469
|
export {
|
|
713
|
-
DEFAULT_MODEL_CACHE_TTL_MS,
|
|
714
|
-
readCachedModels,
|
|
715
|
-
writeCachedModels,
|
|
716
|
-
invalidateModelsCache,
|
|
717
|
-
AI_MODELS_CATALOG_ID,
|
|
718
|
-
AI_TOOLS_APP_ID,
|
|
719
|
-
AI_MODELS_DESCRIPTOR,
|
|
720
|
-
providerIdToEnvKeyPrefix,
|
|
721
|
-
vendorApiKeyEnvName,
|
|
722
|
-
loadOpenRouterRoutingEnv,
|
|
723
|
-
shouldDefaultRouteViaOpenRouter,
|
|
724
|
-
normalizeString,
|
|
725
|
-
normalizeProvider,
|
|
726
470
|
buildCatalogIndexes,
|
|
727
|
-
ModelNameResolver
|
|
471
|
+
ModelNameResolver,
|
|
472
|
+
REASONING_SUPPORTED_PARAMETERS,
|
|
473
|
+
supportsReasoningParameter,
|
|
474
|
+
hasReasoningPricing,
|
|
475
|
+
computeSupportsReasoning,
|
|
476
|
+
isReasoningModel
|
|
728
477
|
};
|
|
729
|
-
//# sourceMappingURL=chunk-
|
|
478
|
+
//# sourceMappingURL=chunk-EYHMQVAL.js.map
|