69 lines
1.7 KiB
TypeScript
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 ?? [];
|
|
}
|