87 lines
2.3 KiB
TypeScript
87 lines
2.3 KiB
TypeScript
import type { AiProviderKind, AiProviderResponse, AiProviderStatus, AiRelayMode } from "../api/types";
|
|
|
|
export type AiProviderFilter = AiProviderStatus | "all";
|
|
export type AiProviderListState = "loading" | "ready" | "error";
|
|
export type AiProviderViewState = "api" | "local-development" | "saving" | "error";
|
|
|
|
export interface AiProviderFormState {
|
|
id: string;
|
|
name: string;
|
|
kind: AiProviderKind;
|
|
baseUrl: string;
|
|
apiKeyRef: string;
|
|
modelsText: string;
|
|
defaultModel: string;
|
|
relayMode: AiRelayMode;
|
|
timeoutMs: string;
|
|
redactionPolicy: string;
|
|
}
|
|
|
|
export interface AiProviderMetrics {
|
|
total: number;
|
|
active: number;
|
|
disabled: number;
|
|
models: number;
|
|
}
|
|
|
|
export interface AiProviderActionState {
|
|
providerId: string;
|
|
label: string;
|
|
success: boolean;
|
|
message: string;
|
|
}
|
|
|
|
export interface AiProviderPageInitialState {
|
|
providers?: AiProviderResponse[];
|
|
selectedId?: string;
|
|
listState?: AiProviderListState;
|
|
listError?: string;
|
|
source?: AiProviderViewState;
|
|
action?: AiProviderActionState | null;
|
|
}
|
|
|
|
export function emptyAiProviderForm(): AiProviderFormState {
|
|
return {
|
|
id: "",
|
|
name: "",
|
|
kind: "openai-compatible",
|
|
baseUrl: "",
|
|
apiKeyRef: "secret://providers/",
|
|
modelsText: "",
|
|
defaultModel: "",
|
|
relayMode: "relay",
|
|
timeoutMs: "30000",
|
|
redactionPolicy: "default"
|
|
};
|
|
}
|
|
|
|
export function aiProviderToForm(provider?: AiProviderResponse): AiProviderFormState {
|
|
if (!provider) {
|
|
return emptyAiProviderForm();
|
|
}
|
|
return {
|
|
id: provider.id,
|
|
name: provider.name,
|
|
kind: provider.kind,
|
|
baseUrl: provider.baseUrl,
|
|
apiKeyRef: provider.apiKeyRef,
|
|
modelsText: provider.models.join(", "),
|
|
defaultModel: provider.defaultModel ?? "",
|
|
relayMode: provider.relayMode,
|
|
timeoutMs: String(provider.timeoutMs),
|
|
redactionPolicy: provider.redactionPolicy
|
|
};
|
|
}
|
|
|
|
export function summarizeAiProviders(providers: AiProviderResponse[]): AiProviderMetrics {
|
|
return providers.reduce<AiProviderMetrics>(
|
|
(metrics, provider) => ({
|
|
total: metrics.total + 1,
|
|
active: metrics.active + (provider.status === "active" ? 1 : 0),
|
|
disabled: metrics.disabled + (provider.status === "disabled" ? 1 : 0),
|
|
models: metrics.models + provider.models.length
|
|
}),
|
|
{ total: 0, active: 0, disabled: 0, models: 0 }
|
|
);
|
|
}
|