@vybestack/llxprt-code-core 0.8.0 → 0.9.0-nightly.260119.0f050754d
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/dist/src/auth/token-store.d.ts +57 -0
- package/dist/src/auth/token-store.js +137 -0
- package/dist/src/auth/token-store.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +6 -1
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/hydration.d.ts +40 -0
- package/dist/src/models/hydration.js +148 -0
- package/dist/src/models/hydration.js.map +1 -0
- package/dist/src/models/index.d.ts +33 -0
- package/dist/src/models/index.js +46 -0
- package/dist/src/models/index.js.map +1 -0
- package/dist/src/models/profiles.d.ts +19 -0
- package/dist/src/models/profiles.js +83 -0
- package/dist/src/models/profiles.js.map +1 -0
- package/dist/src/models/provider-integration.d.ts +49 -0
- package/dist/src/models/provider-integration.js +162 -0
- package/dist/src/models/provider-integration.js.map +1 -0
- package/dist/src/models/registry.d.ts +137 -0
- package/dist/src/models/registry.js +321 -0
- package/dist/src/models/registry.js.map +1 -0
- package/dist/src/models/schema.d.ts +1173 -0
- package/dist/src/models/schema.js +166 -0
- package/dist/src/models/schema.js.map +1 -0
- package/dist/src/models/transformer.d.ts +21 -0
- package/dist/src/models/transformer.js +130 -0
- package/dist/src/models/transformer.js.map +1 -0
- package/dist/src/providers/IProviderManager.d.ts +7 -3
- package/dist/src/providers/ProviderManager.d.ts +2 -2
- package/dist/src/providers/ProviderManager.js +56 -1
- package/dist/src/providers/ProviderManager.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.js +15 -15
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.js +27 -25
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.js +15 -5
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/tools/diffOptions.d.ts +7 -3
- package/dist/src/tools/diffOptions.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { Storage } from '../config/storage.js';
|
|
9
|
+
import { ModelsDevApiResponseSchema, } from './schema.js';
|
|
10
|
+
import { transformApiResponse } from './transformer.js';
|
|
11
|
+
const MODELS_DEV_API_URL = 'https://models.dev/api.json';
|
|
12
|
+
const CACHE_FILENAME = 'models.json';
|
|
13
|
+
const CACHE_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
14
|
+
const REFRESH_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
15
|
+
const FETCH_TIMEOUT_MS = 10000; // 10 seconds
|
|
16
|
+
/**
|
|
17
|
+
* ModelRegistry - Central registry for AI model metadata from models.dev
|
|
18
|
+
*
|
|
19
|
+
* Provides:
|
|
20
|
+
* - Automatic loading from cache or bundled fallback
|
|
21
|
+
* - Background periodic refresh (24h)
|
|
22
|
+
* - Search and filtering by capabilities, price, context
|
|
23
|
+
* - Event emission for UI updates
|
|
24
|
+
*/
|
|
25
|
+
export class ModelRegistry {
|
|
26
|
+
models = new Map();
|
|
27
|
+
providers = new Map();
|
|
28
|
+
lastRefresh = null;
|
|
29
|
+
refreshTimer = null;
|
|
30
|
+
listeners = new Map();
|
|
31
|
+
initialized = false;
|
|
32
|
+
initPromise = null;
|
|
33
|
+
/**
|
|
34
|
+
* Get the cache file path
|
|
35
|
+
*/
|
|
36
|
+
static getCachePath() {
|
|
37
|
+
const cacheDir = path.join(Storage.getGlobalLlxprtDir(), 'cache');
|
|
38
|
+
return path.join(cacheDir, CACHE_FILENAME);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Initialize the registry - loads models and starts background refresh
|
|
42
|
+
*/
|
|
43
|
+
async initialize() {
|
|
44
|
+
if (this.initialized)
|
|
45
|
+
return;
|
|
46
|
+
if (this.initPromise)
|
|
47
|
+
return this.initPromise;
|
|
48
|
+
this.initPromise = (async () => {
|
|
49
|
+
await this.loadModels();
|
|
50
|
+
this.initialized = true;
|
|
51
|
+
this.startBackgroundRefresh();
|
|
52
|
+
})();
|
|
53
|
+
await this.initPromise;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Load models from cache or trigger fresh fetch
|
|
57
|
+
*/
|
|
58
|
+
async loadModels() {
|
|
59
|
+
// Try cache first
|
|
60
|
+
const cached = await this.loadFromCache();
|
|
61
|
+
if (cached) {
|
|
62
|
+
this.populateModels(cached);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// No cache - trigger refresh
|
|
66
|
+
this.refresh().catch(() => {
|
|
67
|
+
// Silent failure - models will be empty until next refresh
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Load from cache file if fresh
|
|
72
|
+
*/
|
|
73
|
+
async loadFromCache() {
|
|
74
|
+
try {
|
|
75
|
+
const cachePath = ModelRegistry.getCachePath();
|
|
76
|
+
if (!fs.existsSync(cachePath)) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const stats = fs.statSync(cachePath);
|
|
80
|
+
const age = Date.now() - stats.mtimeMs;
|
|
81
|
+
// Check if cache is stale
|
|
82
|
+
if (age > CACHE_MAX_AGE_MS) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const content = fs.readFileSync(cachePath, 'utf-8');
|
|
86
|
+
const data = JSON.parse(content);
|
|
87
|
+
// Validate schema
|
|
88
|
+
const validated = ModelsDevApiResponseSchema.safeParse(data);
|
|
89
|
+
if (!validated.success) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return validated.data;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Refresh models from models.dev API (non-blocking)
|
|
100
|
+
*/
|
|
101
|
+
async refresh() {
|
|
102
|
+
const controller = new AbortController();
|
|
103
|
+
const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
104
|
+
try {
|
|
105
|
+
const response = await fetch(MODELS_DEV_API_URL, {
|
|
106
|
+
headers: {
|
|
107
|
+
'User-Agent': 'llxprt/1.0',
|
|
108
|
+
},
|
|
109
|
+
signal: controller.signal,
|
|
110
|
+
});
|
|
111
|
+
if (!response.ok) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
const data = await response.json();
|
|
115
|
+
// Validate schema
|
|
116
|
+
const validated = ModelsDevApiResponseSchema.safeParse(data);
|
|
117
|
+
if (!validated.success) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
// Save to cache
|
|
121
|
+
await this.saveToCache(validated.data);
|
|
122
|
+
// Update in-memory registry
|
|
123
|
+
this.populateModels(validated.data);
|
|
124
|
+
this.lastRefresh = new Date();
|
|
125
|
+
this.emit('models:updated');
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
this.emit('models:error');
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
clearTimeout(timeout);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Save data to cache file
|
|
138
|
+
*/
|
|
139
|
+
async saveToCache(data) {
|
|
140
|
+
try {
|
|
141
|
+
const cachePath = ModelRegistry.getCachePath();
|
|
142
|
+
const cacheDir = path.dirname(cachePath);
|
|
143
|
+
// Ensure cache directory exists
|
|
144
|
+
if (!fs.existsSync(cacheDir)) {
|
|
145
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
146
|
+
}
|
|
147
|
+
fs.writeFileSync(cachePath, JSON.stringify(data, null, 2));
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
// Silent failure - cache is optional
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Populate internal maps from API response
|
|
155
|
+
*/
|
|
156
|
+
populateModels(data) {
|
|
157
|
+
const { models, providers } = transformApiResponse(data);
|
|
158
|
+
this.models = models;
|
|
159
|
+
this.providers = providers;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Start background refresh timer
|
|
163
|
+
*/
|
|
164
|
+
startBackgroundRefresh() {
|
|
165
|
+
if (this.refreshTimer)
|
|
166
|
+
return;
|
|
167
|
+
this.refreshTimer = setInterval(() => {
|
|
168
|
+
this.refresh().catch(() => {
|
|
169
|
+
// Silent failure
|
|
170
|
+
});
|
|
171
|
+
}, REFRESH_INTERVAL_MS);
|
|
172
|
+
// Don't prevent process exit
|
|
173
|
+
this.refreshTimer.unref?.();
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Stop background refresh and cleanup
|
|
177
|
+
*/
|
|
178
|
+
dispose() {
|
|
179
|
+
if (this.refreshTimer) {
|
|
180
|
+
clearInterval(this.refreshTimer);
|
|
181
|
+
this.refreshTimer = null;
|
|
182
|
+
}
|
|
183
|
+
this.listeners.clear();
|
|
184
|
+
}
|
|
185
|
+
// ============== Public Query API ==============
|
|
186
|
+
/**
|
|
187
|
+
* Get all models
|
|
188
|
+
*/
|
|
189
|
+
getAll() {
|
|
190
|
+
return Array.from(this.models.values());
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get model by full ID (provider/model-id)
|
|
194
|
+
*/
|
|
195
|
+
getById(id) {
|
|
196
|
+
return this.models.get(id);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get all models for a specific provider
|
|
200
|
+
*/
|
|
201
|
+
getByProvider(providerId) {
|
|
202
|
+
return this.getAll().filter((m) => m.providerId === providerId);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Search models by various criteria
|
|
206
|
+
*/
|
|
207
|
+
search(query) {
|
|
208
|
+
let results = this.getAll();
|
|
209
|
+
if (query.provider) {
|
|
210
|
+
results = results.filter((m) => m.providerId === query.provider);
|
|
211
|
+
}
|
|
212
|
+
if (query.capability) {
|
|
213
|
+
results = results.filter((m) => m.capabilities[query.capability]);
|
|
214
|
+
}
|
|
215
|
+
if (query.reasoning !== undefined) {
|
|
216
|
+
results = results.filter((m) => m.capabilities.reasoning === query.reasoning);
|
|
217
|
+
}
|
|
218
|
+
if (query.toolCalling !== undefined) {
|
|
219
|
+
results = results.filter((m) => m.capabilities.toolCalling === query.toolCalling);
|
|
220
|
+
}
|
|
221
|
+
if (query.maxPrice !== undefined) {
|
|
222
|
+
results = results.filter((m) => m.pricing && m.pricing.input <= query.maxPrice);
|
|
223
|
+
}
|
|
224
|
+
if (query.minContext !== undefined) {
|
|
225
|
+
results = results.filter((m) => m.limits.contextWindow >= query.minContext);
|
|
226
|
+
}
|
|
227
|
+
return results;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get all providers
|
|
231
|
+
*/
|
|
232
|
+
getProviders() {
|
|
233
|
+
return Array.from(this.providers.values());
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get provider by ID
|
|
237
|
+
*/
|
|
238
|
+
getProvider(providerId) {
|
|
239
|
+
return this.providers.get(providerId);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get cache metadata
|
|
243
|
+
*/
|
|
244
|
+
getCacheMetadata() {
|
|
245
|
+
if (!this.lastRefresh)
|
|
246
|
+
return null;
|
|
247
|
+
return {
|
|
248
|
+
fetchedAt: this.lastRefresh.toISOString(),
|
|
249
|
+
version: '1.0',
|
|
250
|
+
providerCount: this.providers.size,
|
|
251
|
+
modelCount: this.models.size,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Check if registry has been initialized
|
|
256
|
+
*/
|
|
257
|
+
isInitialized() {
|
|
258
|
+
return this.initialized;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get model count
|
|
262
|
+
*/
|
|
263
|
+
getModelCount() {
|
|
264
|
+
return this.models.size;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get provider count
|
|
268
|
+
*/
|
|
269
|
+
getProviderCount() {
|
|
270
|
+
return this.providers.size;
|
|
271
|
+
}
|
|
272
|
+
// ============== Event System ==============
|
|
273
|
+
/**
|
|
274
|
+
* Subscribe to registry events
|
|
275
|
+
*/
|
|
276
|
+
on(event, callback) {
|
|
277
|
+
if (!this.listeners.has(event)) {
|
|
278
|
+
this.listeners.set(event, []);
|
|
279
|
+
}
|
|
280
|
+
this.listeners.get(event).push(callback);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Unsubscribe from registry events
|
|
284
|
+
*/
|
|
285
|
+
off(event, callback) {
|
|
286
|
+
const callbacks = this.listeners.get(event);
|
|
287
|
+
if (callbacks) {
|
|
288
|
+
const index = callbacks.indexOf(callback);
|
|
289
|
+
if (index !== -1) {
|
|
290
|
+
callbacks.splice(index, 1);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Emit an event
|
|
296
|
+
*/
|
|
297
|
+
emit(event) {
|
|
298
|
+
const callbacks = this.listeners.get(event) || [];
|
|
299
|
+
callbacks.forEach((cb) => cb());
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Singleton instance
|
|
303
|
+
let registryInstance = null;
|
|
304
|
+
/**
|
|
305
|
+
* Get the global ModelRegistry instance
|
|
306
|
+
*/
|
|
307
|
+
export function getModelRegistry() {
|
|
308
|
+
if (!registryInstance) {
|
|
309
|
+
registryInstance = new ModelRegistry();
|
|
310
|
+
}
|
|
311
|
+
return registryInstance;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Initialize the global ModelRegistry
|
|
315
|
+
*/
|
|
316
|
+
export async function initializeModelRegistry() {
|
|
317
|
+
const registry = getModelRegistry();
|
|
318
|
+
await registry.initialize();
|
|
319
|
+
return registry;
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/models/registry.ts"],"names":[],"mappings":"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"}
|