e4dcfc49aa
Tests / Import Check (Python 3.13) (push) Has been cancelled
Tests / Import Check (Python 3.14) (push) Has been cancelled
Tests / Python Tests (Python 3.11) (push) Has been cancelled
Tests / Python Tests (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.14) (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Tests / Lint and Format (push) Has been cancelled
Tests / Web Node Tests (push) Has been cancelled
Tests / Import Check (Python 3.11) (push) Has been cancelled
Tests / Import Check (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.13) (push) Has been cancelled
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { apiFetch, apiUrl } from "@/lib/api";
|
|
import type { LLMSelection } from "@/lib/unified-ws";
|
|
|
|
export interface LLMOption extends LLMSelection {
|
|
profile_name: string;
|
|
model_name: string;
|
|
model: string;
|
|
provider: string;
|
|
/** Human-readable provider name from the registry ("OpenRouter"). */
|
|
provider_label?: string;
|
|
context_window?: number;
|
|
is_active_default: boolean;
|
|
}
|
|
|
|
export interface LLMOptionsResponse {
|
|
active: LLMSelection | null;
|
|
options: LLMOption[];
|
|
}
|
|
|
|
export function llmSelectionKey(selection: LLMSelection | null | undefined) {
|
|
if (!selection?.profile_id || !selection.model_id) return "";
|
|
return `${selection.profile_id}:${selection.model_id}`;
|
|
}
|
|
|
|
export function sameLLMSelection(
|
|
a: LLMSelection | null | undefined,
|
|
b: LLMSelection | null | undefined,
|
|
) {
|
|
return llmSelectionKey(a) === llmSelectionKey(b);
|
|
}
|
|
|
|
export async function listLLMOptions(): Promise<LLMOptionsResponse> {
|
|
const response = await apiFetch(apiUrl("/api/v1/settings/llm-options"), {
|
|
cache: "no-store",
|
|
});
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to load LLM options: ${response.status}`);
|
|
}
|
|
const data = (await response.json()) as LLMOptionsResponse;
|
|
return {
|
|
active: data.active ?? null,
|
|
options: Array.isArray(data.options) ? data.options : [],
|
|
};
|
|
}
|