refactor: share provider catalog projection

This commit is contained in:
Vincent Koc
2026-05-29 05:50:16 +02:00
parent 25a5cb3270
commit 2fef80aee5
3 changed files with 31 additions and 55 deletions

View File

@@ -1,5 +1,6 @@
import type { UnifiedModelCatalogEntry } from "../model-catalog/types.js";
import { createProviderApiKeyAuthMethod } from "../plugins/provider-api-key-auth.js";
import { projectProviderCatalogResultToUnifiedTextRows } from "../plugins/provider-catalog-unified-text.js";
import type {
ProviderPlugin,
ProviderCatalogContext,
@@ -109,33 +110,6 @@ function resolveEnvVars(params: {
return combined.length > 0 ? uniqueStrings(combined) : undefined;
}
function projectProviderCatalogResultToUnifiedTextRows(params: {
providerId: string;
result: ProviderCatalogResult;
source: UnifiedModelCatalogEntry["source"];
}): UnifiedModelCatalogEntry[] {
if (!params.result) {
return [];
}
const providers =
"provider" in params.result
? { [params.providerId]: params.result.provider }
: params.result.providers;
const rows: UnifiedModelCatalogEntry[] = [];
for (const [providerId, providerConfig] of Object.entries(providers)) {
for (const model of providerConfig.models ?? []) {
rows.push({
kind: "text",
provider: providerId,
model: model.id,
...(model.name ? { label: model.name } : {}),
source: params.source,
});
}
}
return rows;
}
async function runUnifiedTextCatalog(params: {
providerId: string;
catalog: ProviderPluginCatalog;

View File

@@ -15,9 +15,9 @@ import type {
import { normalizeOptionalString } from "../shared/string-coerce.js";
import { uniqueValues } from "../shared/string-normalization.js";
import type { PluginDiagnostic } from "./manifest-types.js";
import { projectProviderCatalogResultToUnifiedTextRows } from "./provider-catalog-unified-text.js";
import type { PluginRecord, PluginRegistry } from "./registry-types.js";
import type {
ProviderCatalogResult,
ProviderPlugin,
UnifiedModelCatalogProviderContext,
UnifiedModelCatalogProviderPlugin,
@@ -58,33 +58,6 @@ function mergeModelCatalogHooks(
};
}
function projectProviderCatalogResultToUnifiedTextRows(params: {
providerId: string;
result: ProviderCatalogResult;
source: UnifiedModelCatalogEntry["source"];
}): UnifiedModelCatalogEntry[] {
if (!params.result) {
return [];
}
const providers =
"provider" in params.result
? { [params.providerId]: params.result.provider }
: params.result.providers;
const rows: UnifiedModelCatalogEntry[] = [];
for (const [providerId, providerConfig] of Object.entries(providers)) {
for (const model of providerConfig.models ?? []) {
rows.push({
kind: "text",
provider: providerId,
model: model.id,
...(model.name ? { label: model.name } : {}),
source: params.source,
});
}
}
return rows;
}
export function createModelCatalogRegistrationHandlers(params: {
registry: PluginRegistry;
pushDiagnostic: (diagnostic: PluginDiagnostic) => void;

View File

@@ -0,0 +1,29 @@
import type { UnifiedModelCatalogEntry } from "../model-catalog/types.js";
import type { ProviderCatalogResult } from "./types.js";
export function projectProviderCatalogResultToUnifiedTextRows(params: {
providerId: string;
result: ProviderCatalogResult;
source: UnifiedModelCatalogEntry["source"];
}): UnifiedModelCatalogEntry[] {
if (!params.result) {
return [];
}
const providers =
"provider" in params.result
? { [params.providerId]: params.result.provider }
: params.result.providers;
const rows: UnifiedModelCatalogEntry[] = [];
for (const [providerId, providerConfig] of Object.entries(providers)) {
for (const model of providerConfig.models ?? []) {
rows.push({
kind: "text",
provider: providerId,
model: model.id,
...(model.name ? { label: model.name } : {}),
source: params.source,
});
}
}
return rows;
}