@ottocode/server 0.1.251 → 0.1.253
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/package.json +3 -3
- package/src/routes/config/models.ts +55 -32
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ottocode/server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.253",
|
|
4
4
|
"description": "HTTP API server for ottocode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.ts",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"typecheck": "tsc --noEmit"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@ottocode/database": "0.1.
|
|
53
|
-
"@ottocode/sdk": "0.1.
|
|
52
|
+
"@ottocode/database": "0.1.253",
|
|
53
|
+
"@ottocode/sdk": "0.1.253",
|
|
54
54
|
"ai-sdk-ollama": "^3.8.3",
|
|
55
55
|
"drizzle-orm": "^0.44.5",
|
|
56
56
|
"hono": "^4.9.9",
|
|
@@ -131,9 +131,15 @@ async function refreshProviderModelsInBackground(args: {
|
|
|
131
131
|
providerDefinition,
|
|
132
132
|
projectRoot,
|
|
133
133
|
});
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
if (!discoveredModels) return;
|
|
135
|
+
const configuredModels = getConfiguredProviderModels(
|
|
136
|
+
await loadConfig(projectRoot),
|
|
137
|
+
provider,
|
|
138
|
+
);
|
|
139
|
+
const models = mergeConfiguredAndCachedModels(
|
|
140
|
+
configuredModels,
|
|
141
|
+
discoveredModels,
|
|
142
|
+
);
|
|
137
143
|
await mergeCachedModelCatalog({
|
|
138
144
|
[provider]: {
|
|
139
145
|
id: provider,
|
|
@@ -242,7 +248,7 @@ async function discoverProviderModels(args: {
|
|
|
242
248
|
provider,
|
|
243
249
|
error: error instanceof Error ? error.message : String(error),
|
|
244
250
|
});
|
|
245
|
-
return
|
|
251
|
+
return undefined;
|
|
246
252
|
}
|
|
247
253
|
}
|
|
248
254
|
|
|
@@ -255,15 +261,40 @@ function shouldLazyLoadProviderModels(
|
|
|
255
261
|
);
|
|
256
262
|
}
|
|
257
263
|
|
|
258
|
-
function
|
|
259
|
-
|
|
264
|
+
function mergeConfiguredAndCachedModels(
|
|
265
|
+
configuredModels: ModelInfo[],
|
|
266
|
+
cachedModels: ModelInfo[],
|
|
267
|
+
): ModelInfo[] {
|
|
268
|
+
const modelsById = new Map<string, ModelInfo>();
|
|
269
|
+
for (const model of configuredModels) {
|
|
270
|
+
modelsById.set(model.id, model);
|
|
271
|
+
}
|
|
272
|
+
for (const model of cachedModels) {
|
|
273
|
+
const configuredModel = modelsById.get(model.id);
|
|
274
|
+
modelsById.set(
|
|
275
|
+
model.id,
|
|
276
|
+
configuredModel ? { ...model, ...configuredModel } : model,
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
return Array.from(modelsById.values());
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function getProviderModelsForUi(args: {
|
|
283
|
+
providerDefinition: NonNullable<ReturnType<typeof getProviderDefinition>>;
|
|
284
|
+
catalogModels: ModelInfo[] | undefined;
|
|
260
285
|
cfg: Awaited<ReturnType<typeof loadConfig>>;
|
|
261
286
|
provider: ProviderId;
|
|
287
|
+
authType: 'api' | 'oauth' | 'wallet' | undefined;
|
|
262
288
|
}): ModelInfo[] {
|
|
263
|
-
const
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
289
|
+
const configuredModels = getConfiguredProviderModels(args.cfg, args.provider);
|
|
290
|
+
const catalogModels = args.catalogModels ?? [];
|
|
291
|
+
if (args.providerDefinition.source === 'custom') {
|
|
292
|
+
return mergeConfiguredAndCachedModels(configuredModels, catalogModels);
|
|
293
|
+
}
|
|
294
|
+
if (catalogModels.length > 0) {
|
|
295
|
+
return filterModelsForAuthType(args.provider, catalogModels, args.authType);
|
|
296
|
+
}
|
|
297
|
+
return configuredModels;
|
|
267
298
|
}
|
|
268
299
|
|
|
269
300
|
function getUiProviderLabel(
|
|
@@ -322,15 +353,13 @@ export function registerModelsRoutes(app: Hono) {
|
|
|
322
353
|
projectRoot,
|
|
323
354
|
});
|
|
324
355
|
}
|
|
325
|
-
const filteredModels =
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
? filterModelsForAuthType(provider, providerCatalog.models, authType)
|
|
333
|
-
: getConfiguredProviderModels(cfg, provider);
|
|
356
|
+
const filteredModels = getProviderModelsForUi({
|
|
357
|
+
providerDefinition,
|
|
358
|
+
catalogModels: providerCatalog?.models,
|
|
359
|
+
cfg,
|
|
360
|
+
provider,
|
|
361
|
+
authType,
|
|
362
|
+
});
|
|
334
363
|
const copilotAllowedModels =
|
|
335
364
|
provider === 'copilot'
|
|
336
365
|
? await getAuthorizedCopilotModels(projectRoot)
|
|
@@ -400,19 +429,13 @@ export function registerModelsRoutes(app: Hono) {
|
|
|
400
429
|
projectRoot,
|
|
401
430
|
});
|
|
402
431
|
}
|
|
403
|
-
const filteredModels =
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
? filterModelsForAuthType(
|
|
411
|
-
provider,
|
|
412
|
-
providerCatalog.models,
|
|
413
|
-
authType,
|
|
414
|
-
)
|
|
415
|
-
: getConfiguredProviderModels(cfg, provider);
|
|
432
|
+
const filteredModels = getProviderModelsForUi({
|
|
433
|
+
providerDefinition,
|
|
434
|
+
catalogModels: providerCatalog?.models,
|
|
435
|
+
cfg,
|
|
436
|
+
provider,
|
|
437
|
+
authType,
|
|
438
|
+
});
|
|
416
439
|
modelsMap[provider] = {
|
|
417
440
|
label: getUiProviderLabel(providerDefinition),
|
|
418
441
|
authType,
|