@cedrugs/opencode-omniauth 1.2.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.
@@ -0,0 +1,199 @@
1
+ import { MODELS_DEV_DEFAULT_URL, MODELS_DEV_CACHE_TTL, MODELS_DEV_TIMEOUT_MS, log, } from './constants.js';
2
+ let modelsDevCache = null;
3
+ export async function fetchModelsDevData(config) {
4
+ const url = config?.modelsDev?.url ?? MODELS_DEV_DEFAULT_URL;
5
+ const timeoutMs = config?.modelsDev?.timeoutMs ?? MODELS_DEV_TIMEOUT_MS;
6
+ const cacheTtl = config?.modelsDev?.cacheTtl ?? MODELS_DEV_CACHE_TTL;
7
+ if (modelsDevCache && Date.now() - modelsDevCache.timestamp < cacheTtl) {
8
+ log.info('[OmniRoute] Using cached models.dev data');
9
+ return modelsDevCache.data;
10
+ }
11
+ log.info(`[OmniRoute] Fetching models.dev data from ${url}`);
12
+ const controller = new AbortController();
13
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
14
+ try {
15
+ const response = await fetch(url, {
16
+ method: 'GET',
17
+ headers: { Accept: 'application/json' },
18
+ signal: controller.signal,
19
+ });
20
+ if (!response.ok) {
21
+ log.warn(`[OmniRoute] Failed to fetch models.dev data: ${response.status}`);
22
+ return null;
23
+ }
24
+ const data = await response.json();
25
+ if (!data || typeof data !== 'object') {
26
+ log.warn('[OmniRoute] Invalid models.dev data structure');
27
+ return null;
28
+ }
29
+ modelsDevCache = {
30
+ data,
31
+ timestamp: Date.now(),
32
+ };
33
+ log.info('[OmniRoute] Successfully fetched models.dev data');
34
+ return data;
35
+ }
36
+ catch (error) {
37
+ log.warn('[OmniRoute] Error fetching models.dev data:', error);
38
+ return null;
39
+ }
40
+ finally {
41
+ clearTimeout(timeoutId);
42
+ }
43
+ }
44
+ export function buildModelsDevIndex(data) {
45
+ if (!data)
46
+ return null;
47
+ const exactByProvider = new Map();
48
+ const normalizedByProvider = new Map();
49
+ const exactGlobal = new Map();
50
+ const normalizedGlobal = new Map();
51
+ for (const [providerId, provider] of Object.entries(data)) {
52
+ if (!provider?.models)
53
+ continue;
54
+ const providerExactMap = new Map();
55
+ const providerNormMap = new Map();
56
+ for (const [modelId, model] of Object.entries(provider.models)) {
57
+ const lookupKey = modelId.toLowerCase();
58
+ providerExactMap.set(lookupKey, model);
59
+ const normalizedKey = normalizeModelKey(modelId);
60
+ providerNormMap.set(normalizedKey, model);
61
+ const globalList = exactGlobal.get(lookupKey) ?? [];
62
+ globalList.push(model);
63
+ exactGlobal.set(lookupKey, globalList);
64
+ const normGlobalList = normalizedGlobal.get(normalizedKey) ?? [];
65
+ normGlobalList.push(model);
66
+ normalizedGlobal.set(normalizedKey, normGlobalList);
67
+ }
68
+ exactByProvider.set(providerId.toLowerCase(), providerExactMap);
69
+ normalizedByProvider.set(providerId.toLowerCase(), providerNormMap);
70
+ }
71
+ return {
72
+ exactByProvider,
73
+ normalizedByProvider,
74
+ exactGlobal,
75
+ normalizedGlobal,
76
+ };
77
+ }
78
+ export async function getModelsDevIndex(config) {
79
+ if (config?.modelsDev?.enabled === false) {
80
+ return null;
81
+ }
82
+ const data = await fetchModelsDevData(config);
83
+ return buildModelsDevIndex(data);
84
+ }
85
+ export function clearModelsDevCache() {
86
+ modelsDevCache = null;
87
+ log.info('[OmniRoute] models.dev cache cleared');
88
+ }
89
+ export function normalizeModelKey(modelId) {
90
+ return modelId
91
+ .toLowerCase()
92
+ .replace(/-\d{4}-\d{2}-\d{2}$/, '')
93
+ .replace(/-v\d+$/, '')
94
+ .replace(/-(preview|latest|stable)$/i, '')
95
+ .replace(/-(thinking|reasoning)$/i, '')
96
+ .replace(/-(minimal|low|medium|high|max|xhigh|none)$/i, '')
97
+ .replace(/-\d+\.\d+$/, '')
98
+ .replace(/_/g, '-');
99
+ }
100
+ export function modelsDevToMetadata(model) {
101
+ const metadata = {};
102
+ if (model.name) {
103
+ metadata.name = model.name;
104
+ }
105
+ if (model.limit?.context !== undefined && model.limit.context > 0) {
106
+ metadata.contextWindow = model.limit.context;
107
+ }
108
+ if (model.limit?.output !== undefined && model.limit.output > 0) {
109
+ metadata.maxTokens = model.limit.output;
110
+ }
111
+ if (model.modalities?.input?.includes('image')) {
112
+ metadata.supportsVision = true;
113
+ }
114
+ if (model.tool_call === true) {
115
+ metadata.supportsTools = true;
116
+ }
117
+ if (model.reasoning === true) {
118
+ metadata.reasoning = true;
119
+ }
120
+ metadata.supportsStreaming = true;
121
+ if (model.cost?.input !== undefined || model.cost?.output !== undefined) {
122
+ metadata.pricing = {};
123
+ if (model.cost.input !== undefined) {
124
+ metadata.pricing.input = model.cost.input;
125
+ }
126
+ if (model.cost.output !== undefined) {
127
+ metadata.pricing.output = model.cost.output;
128
+ }
129
+ }
130
+ return metadata;
131
+ }
132
+ export function calculateLowestCommonCapabilities(models) {
133
+ if (models.length === 0) {
134
+ return {};
135
+ }
136
+ if (models.length === 1) {
137
+ return modelsDevToMetadata(models[0]);
138
+ }
139
+ let minContext;
140
+ let minMaxTokens;
141
+ let allSupportVision = true;
142
+ let allSupportTools = true;
143
+ for (const model of models) {
144
+ const context = model.limit?.context;
145
+ if (context !== undefined && context > 0) {
146
+ minContext = minContext === undefined ? context : Math.min(minContext, context);
147
+ }
148
+ const maxTokens = model.limit?.output;
149
+ if (maxTokens !== undefined && maxTokens > 0) {
150
+ minMaxTokens = minMaxTokens === undefined ? maxTokens : Math.min(minMaxTokens, maxTokens);
151
+ }
152
+ const supportsVision = model.modalities?.input?.includes('image') ?? false;
153
+ allSupportVision = allSupportVision && supportsVision;
154
+ const supportsTools = model.tool_call === true;
155
+ allSupportTools = allSupportTools && supportsTools;
156
+ }
157
+ const result = {};
158
+ if (minContext !== undefined) {
159
+ result.contextWindow = minContext;
160
+ }
161
+ if (minMaxTokens !== undefined) {
162
+ result.maxTokens = minMaxTokens;
163
+ }
164
+ if (allSupportVision) {
165
+ result.supportsVision = true;
166
+ }
167
+ if (allSupportTools) {
168
+ result.supportsTools = true;
169
+ }
170
+ result.supportsStreaming = true;
171
+ return result;
172
+ }
173
+ export function resolveProviderAlias(providerKey, config) {
174
+ if (!providerKey)
175
+ return null;
176
+ const lower = providerKey.toLowerCase();
177
+ const aliases = {
178
+ oai: 'openai',
179
+ openai: 'openai',
180
+ cx: 'openai',
181
+ codex: 'openai',
182
+ antigravity: 'anthropic',
183
+ anthropic: 'anthropic',
184
+ claude: 'anthropic',
185
+ gemini: 'google',
186
+ google: 'google',
187
+ deepseek: 'deepseek',
188
+ mistral: 'mistral',
189
+ xai: 'xai',
190
+ groq: 'groq',
191
+ together: 'together',
192
+ openrouter: 'openrouter',
193
+ perplexity: 'perplexity',
194
+ cohere: 'cohere',
195
+ ...config?.modelsDev?.providerAliases,
196
+ };
197
+ return aliases[lower] ?? lower;
198
+ }
199
+ //# sourceMappingURL=models-dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models-dev.js","sourceRoot":"","sources":["../../src/models-dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { OmniRouteConfig, OmniRouteModel } from './types.js';
2
+ export declare function fetchModels(config: OmniRouteConfig, apiKey: string, forceRefresh?: boolean): Promise<OmniRouteModel[]>;
3
+ export declare function clearModelCache(config?: OmniRouteConfig, apiKey?: string): void;
4
+ export declare function getCachedModels(config: OmniRouteConfig, apiKey: string): OmniRouteModel[] | null;
5
+ export declare function isCacheValid(config: OmniRouteConfig, apiKey: string): boolean;
6
+ export declare function refreshModels(config: OmniRouteConfig, apiKey: string): Promise<OmniRouteModel[]>;
7
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,cAAc,EAGd,MAAM,YAAY,CAAC;AA6BpB,wBAAsB,WAAW,CAChC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,OAAe,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC,CAmH3B;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAU/E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,GAAG,IAAI,CAGhG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAM7E;AAED,wBAAgB,aAAa,CAC5B,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,EAAE,CAAC,CAG3B"}
@@ -0,0 +1,411 @@
1
+ import { OMNIROUTE_DEFAULT_MODELS, OMNIROUTE_ENDPOINTS, MODEL_CACHE_TTL, REQUEST_TIMEOUT, log, } from './constants.js';
2
+ import { getModelsDevIndex, normalizeModelKey, resolveProviderAlias, } from './models-dev.js';
3
+ import { enrichComboModels, clearComboCache } from './omniroute-combos.js';
4
+ const modelCache = new Map();
5
+ function getCacheKey(config, apiKey) {
6
+ const baseUrl = config.baseUrl || OMNIROUTE_ENDPOINTS.BASE_URL;
7
+ return `${baseUrl}:${apiKey}`;
8
+ }
9
+ export async function fetchModels(config, apiKey, forceRefresh = false) {
10
+ const cacheKey = getCacheKey(config, apiKey);
11
+ if (!forceRefresh) {
12
+ const cacheTtl = config.modelCacheTtl && config.modelCacheTtl > 0 ? config.modelCacheTtl : MODEL_CACHE_TTL;
13
+ const cached = modelCache.get(cacheKey);
14
+ if (cached && Date.now() - cached.timestamp < cacheTtl) {
15
+ log.info('[OmniRoute] Using cached models');
16
+ return cached.models;
17
+ }
18
+ }
19
+ else {
20
+ log.info('[OmniRoute] Forcing model refresh');
21
+ }
22
+ const baseUrl = config.baseUrl || OMNIROUTE_ENDPOINTS.BASE_URL;
23
+ const modelsUrl = `${baseUrl}${OMNIROUTE_ENDPOINTS.MODELS}`;
24
+ log.info(`[OmniRoute] Fetching models from ${modelsUrl}`);
25
+ const controller = new AbortController();
26
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT);
27
+ try {
28
+ const response = await fetch(modelsUrl, {
29
+ method: 'GET',
30
+ headers: {
31
+ Authorization: `Bearer ${apiKey}`,
32
+ 'Content-Type': 'application/json',
33
+ Accept: 'application/json',
34
+ },
35
+ signal: controller.signal,
36
+ });
37
+ if (!response.ok) {
38
+ log.error(`[OmniRoute] Failed to fetch models: ${response.status} ${response.statusText}`);
39
+ throw new Error(`Failed to fetch models: ${response.status} ${response.statusText}`);
40
+ }
41
+ const rawData = await response.json();
42
+ if (!rawData || typeof rawData !== 'object' || !Array.isArray(rawData.data)) {
43
+ log.error('[OmniRoute] Invalid models response structure:', rawData);
44
+ throw new Error('Invalid models response structure: expected { data: Array }');
45
+ }
46
+ const entries = rawData.data;
47
+ const rawModels = entries
48
+ .filter((entry) => entry !== null && entry !== undefined && typeof entry.id === 'string')
49
+ .map((entry) => {
50
+ const caps = entry.capabilities;
51
+ const inputMods = entry.input_modalities;
52
+ return {
53
+ id: entry.id,
54
+ name: entry.name || entry.id,
55
+ description: entry.description || `OmniRoute model: ${entry.id}`,
56
+ root: typeof entry.root === 'string' ? entry.root : undefined,
57
+ owned_by: typeof entry.owned_by === 'string' ? entry.owned_by : undefined,
58
+ contextWindow: typeof entry.contextWindow === 'number'
59
+ ? entry.contextWindow
60
+ : typeof entry.context_length === 'number'
61
+ ? entry.context_length
62
+ : undefined,
63
+ maxTokens: typeof entry.maxTokens === 'number' ? entry.maxTokens : undefined,
64
+ supportsStreaming: typeof entry.supportsStreaming === 'boolean' ? entry.supportsStreaming : undefined,
65
+ supportsVision: typeof entry.supportsVision === 'boolean'
66
+ ? entry.supportsVision
67
+ : caps?.vision === true
68
+ ? true
69
+ : inputMods?.includes('image')
70
+ ? true
71
+ : undefined,
72
+ supportsTools: typeof entry.supportsTools === 'boolean'
73
+ ? entry.supportsTools
74
+ : caps?.tools === true
75
+ ? true
76
+ : undefined,
77
+ pricing: entry.pricing,
78
+ };
79
+ });
80
+ const models = await enrichModelMetadata(rawModels, config);
81
+ modelCache.set(cacheKey, {
82
+ models,
83
+ timestamp: Date.now(),
84
+ });
85
+ log.info(`[OmniRoute] Successfully fetched ${models.length} models`);
86
+ return models;
87
+ }
88
+ catch (error) {
89
+ log.error('[OmniRoute] Error fetching models:', error);
90
+ const cached = modelCache.get(cacheKey);
91
+ if (cached) {
92
+ log.info('[OmniRoute] Returning expired cached models as fallback');
93
+ return cached.models;
94
+ }
95
+ log.info('[OmniRoute] Returning default models as fallback');
96
+ return config.defaultModels || OMNIROUTE_DEFAULT_MODELS;
97
+ }
98
+ finally {
99
+ clearTimeout(timeoutId);
100
+ }
101
+ }
102
+ export function clearModelCache(config, apiKey) {
103
+ if (config && apiKey) {
104
+ const cacheKey = getCacheKey(config, apiKey);
105
+ modelCache.delete(cacheKey);
106
+ log.info('[OmniRoute] Model cache cleared for provided configuration');
107
+ }
108
+ else {
109
+ modelCache.clear();
110
+ log.info('[OmniRoute] All model caches cleared');
111
+ }
112
+ clearComboCache();
113
+ }
114
+ export function getCachedModels(config, apiKey) {
115
+ const cacheKey = getCacheKey(config, apiKey);
116
+ return modelCache.get(cacheKey)?.models || null;
117
+ }
118
+ export function isCacheValid(config, apiKey) {
119
+ const cacheKey = getCacheKey(config, apiKey);
120
+ const cached = modelCache.get(cacheKey);
121
+ if (!cached)
122
+ return false;
123
+ const ttl = config.modelCacheTtl || MODEL_CACHE_TTL;
124
+ return Date.now() - cached.timestamp < ttl;
125
+ }
126
+ export function refreshModels(config, apiKey) {
127
+ clearModelCache();
128
+ return fetchModels(config, apiKey, true);
129
+ }
130
+ async function enrichModelMetadata(models, config) {
131
+ const modelsDevIndex = await getModelsDevIndex(config);
132
+ const withModelsDev = modelsDevIndex === null
133
+ ? models
134
+ : models.map((model) => applyModelsDevMetadata(model, config, modelsDevIndex));
135
+ const withOverrides = applyConfiguredModelMetadata(withModelsDev, config, modelsDevIndex);
136
+ const withComboCapabilities = await enrichComboModels(withOverrides, config, modelsDevIndex);
137
+ return withComboCapabilities;
138
+ }
139
+ function applyModelsDevMetadata(model, config, index) {
140
+ const candidates = getModelsDevLookupCandidates(model, config);
141
+ const best = findBestModelsDevMatch(candidates, index);
142
+ if (!best)
143
+ return model;
144
+ return mergeModelMetadata(model, metadataFromModelsDev(best));
145
+ }
146
+ function findBestModelsDevMatch(candidates, index) {
147
+ for (const candidate of candidates) {
148
+ const lookupKey = candidate.modelKey.toLowerCase();
149
+ const normalizedKey = normalizeModelKey(candidate.modelKey);
150
+ const providerExact = candidate.providerAlias
151
+ ? index.exactByProvider.get(candidate.providerAlias)?.get(lookupKey)
152
+ : undefined;
153
+ if (providerExact)
154
+ return providerExact;
155
+ const providerNorm = candidate.providerAlias
156
+ ? index.normalizedByProvider.get(candidate.providerAlias)?.get(normalizedKey)
157
+ : undefined;
158
+ if (providerNorm)
159
+ return providerNorm;
160
+ const globalExactList = index.exactGlobal.get(lookupKey);
161
+ if (globalExactList?.length === 1)
162
+ return globalExactList[0];
163
+ const globalNormList = index.normalizedGlobal.get(normalizedKey);
164
+ if (globalNormList?.length === 1)
165
+ return globalNormList[0];
166
+ }
167
+ return undefined;
168
+ }
169
+ function getModelsDevLookupCandidates(model, config) {
170
+ const { providerKey, modelKey } = splitOmniRouteModelForLookup(model.id);
171
+ const providerAlias = resolveProviderAlias(providerKey, config);
172
+ const candidates = [];
173
+ const seen = new Set();
174
+ const addCandidate = (nextProviderAlias, nextModelKey) => {
175
+ if (!nextModelKey)
176
+ return;
177
+ const trimmedModelKey = nextModelKey.trim();
178
+ if (!trimmedModelKey)
179
+ return;
180
+ const normalizedProvider = nextProviderAlias ? nextProviderAlias.toLowerCase() : 'global';
181
+ const signature = `${normalizedProvider}:${trimmedModelKey.toLowerCase()}`;
182
+ if (seen.has(signature))
183
+ return;
184
+ seen.add(signature);
185
+ candidates.push({ providerAlias: nextProviderAlias, modelKey: trimmedModelKey });
186
+ };
187
+ const lookupRoots = [model.root, modelKey].filter((value) => typeof value === 'string' && value.trim() !== '');
188
+ for (const lookupRoot of lookupRoots) {
189
+ addCandidate(providerAlias, lookupRoot);
190
+ addCandidate(null, lookupRoot);
191
+ for (const derived of deriveModelsDevFamilies(lookupRoot, providerAlias, model.owned_by)) {
192
+ addCandidate(derived.providerAlias, derived.modelKey);
193
+ addCandidate(null, derived.modelKey);
194
+ }
195
+ }
196
+ return candidates;
197
+ }
198
+ function deriveModelsDevFamilies(modelKey, providerAlias, ownedBy) {
199
+ const lower = modelKey.toLowerCase();
200
+ const stripped = stripVariantSuffixes(modelKey);
201
+ const strippedLower = stripped.toLowerCase();
202
+ const matches = [];
203
+ const slashFamily = extractSlashModelFamily(modelKey);
204
+ const strippedSlashFamily = slashFamily ? stripVariantSuffixes(slashFamily) : null;
205
+ const slashFamilyLower = slashFamily?.toLowerCase();
206
+ const strippedSlashFamilyLower = strippedSlashFamily?.toLowerCase();
207
+ const add = (alias, key) => {
208
+ matches.push({ providerAlias: alias, modelKey: key });
209
+ };
210
+ if (strippedLower.startsWith('gemini-')) {
211
+ add('google', stripped);
212
+ }
213
+ if (strippedLower.startsWith('claude-')) {
214
+ add('anthropic', stripped);
215
+ }
216
+ if (providerAlias) {
217
+ add(providerAlias, modelKey);
218
+ if (strippedLower !== lower)
219
+ add(providerAlias, stripped);
220
+ if (slashFamily && slashFamilyLower !== lower)
221
+ add(providerAlias, slashFamily);
222
+ if (strippedSlashFamily &&
223
+ strippedSlashFamilyLower !== slashFamilyLower &&
224
+ strippedSlashFamilyLower !== lower) {
225
+ add(providerAlias, strippedSlashFamily);
226
+ }
227
+ }
228
+ if (ownedBy) {
229
+ const ownedByLower = ownedBy.toLowerCase();
230
+ add(ownedByLower, modelKey);
231
+ if (strippedLower !== lower)
232
+ add(ownedByLower, stripped);
233
+ if (slashFamily && slashFamilyLower !== lower)
234
+ add(ownedByLower, slashFamily);
235
+ if (strippedSlashFamily &&
236
+ strippedSlashFamilyLower !== slashFamilyLower &&
237
+ strippedSlashFamilyLower !== lower) {
238
+ add(ownedByLower, strippedSlashFamily);
239
+ }
240
+ }
241
+ if (lower.startsWith('claude-')) {
242
+ add('anthropic', modelKey);
243
+ if (strippedLower !== lower)
244
+ add('anthropic', stripped);
245
+ }
246
+ if (lower.startsWith('gemini-')) {
247
+ add('google', modelKey);
248
+ if (strippedLower !== lower)
249
+ add('google', stripped);
250
+ }
251
+ if (lower.startsWith('gpt-') ||
252
+ lower.startsWith('o1') ||
253
+ lower.startsWith('o3') ||
254
+ lower.startsWith('o4') ||
255
+ lower.startsWith('oai-') ||
256
+ lower.startsWith('codex-') ||
257
+ lower.startsWith('gpt-oss-')) {
258
+ add('openai', modelKey);
259
+ if (strippedLower !== lower)
260
+ add('openai', stripped);
261
+ if (slashFamily && slashFamilyLower !== lower)
262
+ add('openai', slashFamily);
263
+ if (strippedSlashFamily &&
264
+ strippedSlashFamilyLower !== slashFamilyLower &&
265
+ strippedSlashFamilyLower !== lower) {
266
+ add('openai', strippedSlashFamily);
267
+ }
268
+ }
269
+ return matches;
270
+ }
271
+ function extractSlashModelFamily(modelKey) {
272
+ const trimmed = modelKey.trim();
273
+ if (!trimmed.includes('/'))
274
+ return null;
275
+ const segments = trimmed.split('/').filter((segment) => segment.trim() !== '');
276
+ if (segments.length < 2)
277
+ return null;
278
+ return segments[segments.length - 1] ?? null;
279
+ }
280
+ function stripVariantSuffixes(modelKey) {
281
+ let normalized = modelKey;
282
+ while (true) {
283
+ const next = normalized
284
+ .replace(/-(?:\d+(?:\.\d+)*)-(minimal|low|medium|high|max|xhigh|none)$/i, '')
285
+ .replace(/-(thinking|reasoning)$/i, '')
286
+ .replace(/-(minimal|low|medium|high|max|xhigh|none)$/i, '');
287
+ if (next === normalized) {
288
+ return next;
289
+ }
290
+ normalized = next;
291
+ }
292
+ }
293
+ function splitOmniRouteModelForLookup(modelId) {
294
+ const trimmed = modelId.trim();
295
+ const withoutPrefix = trimmed.replace(/^omniroute\//, '');
296
+ const parts = withoutPrefix.split('/').filter((p) => p.trim() !== '');
297
+ if (parts.length >= 2) {
298
+ return {
299
+ providerKey: parts[0] ?? null,
300
+ modelKey: parts.slice(1).join('/'),
301
+ };
302
+ }
303
+ return { providerKey: null, modelKey: withoutPrefix };
304
+ }
305
+ function metadataFromModelsDev(model) {
306
+ return {
307
+ ...(model.limit?.context !== undefined ? { contextWindow: model.limit.context } : {}),
308
+ ...(model.limit?.output !== undefined ? { maxTokens: model.limit.output } : {}),
309
+ ...(model.modalities?.input?.includes('image') ? { supportsVision: true } : {}),
310
+ ...(model.tool_call === true ? { supportsTools: true } : {}),
311
+ ...(model.reasoning === true ? { reasoning: true } : {}),
312
+ supportsStreaming: true,
313
+ };
314
+ }
315
+ function mergeModelMetadata(model, metadata) {
316
+ return {
317
+ ...model,
318
+ ...(metadata.name !== undefined ? { name: metadata.name } : {}),
319
+ ...(metadata.description !== undefined ? { description: metadata.description } : {}),
320
+ ...(metadata.contextWindow !== undefined ? { contextWindow: metadata.contextWindow } : {}),
321
+ ...(metadata.maxTokens !== undefined ? { maxTokens: metadata.maxTokens } : {}),
322
+ ...(metadata.supportsStreaming !== undefined ? { supportsStreaming: metadata.supportsStreaming } : {}),
323
+ ...(metadata.supportsVision !== undefined ? { supportsVision: metadata.supportsVision } : {}),
324
+ ...(metadata.supportsTools !== undefined ? { supportsTools: metadata.supportsTools } : {}),
325
+ ...(metadata.apiMode !== undefined ? { apiMode: metadata.apiMode } : {}),
326
+ ...(metadata.reasoning !== undefined ? { reasoning: metadata.reasoning } : {}),
327
+ ...(metadata.resetEmbeddedReasoningVariant !== undefined
328
+ ? { resetEmbeddedReasoningVariant: metadata.resetEmbeddedReasoningVariant }
329
+ : {}),
330
+ ...(metadata.variants !== undefined ? { variants: metadata.variants } : {}),
331
+ ...(metadata.pricing !== undefined ? { pricing: { ...model.pricing, ...metadata.pricing } } : {}),
332
+ };
333
+ }
334
+ function isRecord(value) {
335
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
336
+ }
337
+ function coerceMatcherToRegExp(value) {
338
+ if (value instanceof RegExp)
339
+ return value;
340
+ if (!isRecord(value))
341
+ return null;
342
+ const source = value.source;
343
+ const flags = value.flags;
344
+ if (typeof source !== 'string' || typeof flags !== 'string')
345
+ return null;
346
+ try {
347
+ return new RegExp(source, flags);
348
+ }
349
+ catch {
350
+ return null;
351
+ }
352
+ }
353
+ function applyConfiguredModelMetadata(models, config, modelsDevIndex) {
354
+ const metadataConfig = config.modelMetadata;
355
+ if (!metadataConfig)
356
+ return models;
357
+ let output = [...models];
358
+ if (Array.isArray(metadataConfig)) {
359
+ for (const block of metadataConfig) {
360
+ const matcher = typeof block.match === 'string'
361
+ ? block.match
362
+ : coerceMatcherToRegExp(block.match);
363
+ const metadata = metadataWithoutMatcher(block);
364
+ if (typeof matcher === 'string') {
365
+ const existingIndex = output.findIndex((model) => model.id === matcher);
366
+ if (existingIndex >= 0) {
367
+ output[existingIndex] = mergeModelMetadata(output[existingIndex], metadata);
368
+ }
369
+ else if (block.addIfMissing) {
370
+ output.push(createSyntheticModel(matcher, metadata, modelsDevIndex, config));
371
+ }
372
+ continue;
373
+ }
374
+ if (!matcher)
375
+ continue;
376
+ output = output.map((model) => matcher.test(model.id) ? mergeModelMetadata(model, metadata) : model);
377
+ }
378
+ return output;
379
+ }
380
+ for (const [modelId, metadata] of Object.entries(metadataConfig)) {
381
+ const existingIndex = output.findIndex((model) => model.id === modelId);
382
+ if (existingIndex >= 0) {
383
+ output[existingIndex] = mergeModelMetadata(output[existingIndex], metadata);
384
+ }
385
+ else {
386
+ output.push(createSyntheticModel(modelId, metadata, modelsDevIndex, config));
387
+ }
388
+ }
389
+ return output;
390
+ }
391
+ function metadataWithoutMatcher(block) {
392
+ const { match: _match, addIfMissing: _addIfMissing, ...rest } = block;
393
+ return rest;
394
+ }
395
+ function createSyntheticModel(modelId, metadata, modelsDevIndex, config) {
396
+ const base = {
397
+ id: modelId,
398
+ name: metadata.name || modelId,
399
+ description: metadata.description || `OmniRoute model: ${modelId}`,
400
+ };
401
+ if (modelsDevIndex) {
402
+ const candidates = getModelsDevLookupCandidates(base, config);
403
+ const devMatch = findBestModelsDevMatch(candidates, modelsDevIndex);
404
+ if (devMatch) {
405
+ const enriched = mergeModelMetadata(base, metadataFromModelsDev(devMatch));
406
+ return mergeModelMetadata(enriched, metadata);
407
+ }
408
+ }
409
+ return mergeModelMetadata(base, metadata);
410
+ }
411
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"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"}