Files
2026-07-13 12:52:40 +08:00

69 lines
1.7 KiB
TypeScript

"use client";
import { desktopClient } from "@/lib/desktop-client";
import type {
Provider,
ProviderCatalogResponse,
ProviderModel,
ProviderModelsResponse,
} from "@/lib/provider-schema";
export type ProviderModelCatalog = {
providers: Provider[];
enabledProviderIds: string[];
providerModels: Record<string, string[]>;
providerReasoningModels: Record<string, string[]>;
};
function toModelIds(models: ProviderModel[] | undefined): string[] {
return (models ?? []).map((model) => model.id);
}
function toReasoningModelIds(models: ProviderModel[] | undefined): string[] {
return (models ?? [])
.filter((model) => model.supportsReasoning)
.map((model) => model.id);
}
export function buildProviderModelCatalog(
providers: Provider[],
): ProviderModelCatalog {
return {
providers,
enabledProviderIds: providers
.filter((provider) => provider.enabled)
.map((provider) => provider.id),
providerModels: Object.fromEntries(
providers.map((provider) => [
provider.id,
toModelIds(provider.modelList),
]),
),
providerReasoningModels: Object.fromEntries(
providers.map((provider) => [
provider.id,
toReasoningModelIds(provider.modelList),
]),
),
};
}
export async function loadProviderModelCatalog(): Promise<ProviderModelCatalog> {
const payload = await desktopClient.invoke<ProviderCatalogResponse>(
"list_provider_catalog",
);
return buildProviderModelCatalog(payload.providers ?? []);
}
export async function loadProviderModels(
providerId: string,
): Promise<ProviderModel[]> {
const payload = await desktopClient.invoke<ProviderModelsResponse>(
"list_provider_models",
{
provider: providerId,
},
);
return payload.models ?? [];
}