File size: 2,449 Bytes
5f40163 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import type { SettingsChoice, SettingsFieldSchema } from "#/types/settings";
export const LLM_AUTH_TYPE_KEY = "llm.auth_type";
export const LLM_SUBSCRIPTION_VENDOR_KEY = "llm.subscription_vendor";
export const LLM_AUTH_TYPE_API_KEY = "api_key";
export const LLM_AUTH_TYPE_SUBSCRIPTION = "subscription";
export const OPENAI_SUBSCRIPTION_VENDOR = "openai";
export const OPENAI_SUBSCRIPTION_MODELS_PATH =
"/api/llm/subscription/openai/models";
export const OPENAI_SUBSCRIPTION_STATUS_PATH =
"/api/llm/subscription/openai/status";
export const OPENAI_SUBSCRIPTION_DEVICE_START_PATH =
"/api/llm/subscription/openai/device/start";
export const OPENAI_SUBSCRIPTION_DEVICE_POLL_PATH =
"/api/llm/subscription/openai/device/poll";
export const OPENAI_SUBSCRIPTION_LOGOUT_PATH =
"/api/llm/subscription/openai/logout";
export type LlmAuthType =
| typeof LLM_AUTH_TYPE_API_KEY
| typeof LLM_AUTH_TYPE_SUBSCRIPTION;
export const LLM_AUTH_TYPE_CHOICES: SettingsChoice[] = [
{ label: "API key", value: LLM_AUTH_TYPE_API_KEY },
{ label: "ChatGPT subscription", value: LLM_AUTH_TYPE_SUBSCRIPTION },
];
const LLM_AUTH_TYPE_FIELD: SettingsFieldSchema = {
key: LLM_AUTH_TYPE_KEY,
label: "Authentication",
description:
"Choose whether this profile uses API credentials or a ChatGPT subscription.",
section: "llm",
section_label: "LLM",
value_type: "string",
default: LLM_AUTH_TYPE_API_KEY,
choices: LLM_AUTH_TYPE_CHOICES,
depends_on: [],
prominence: "critical",
secret: false,
required: true,
};
const LLM_SUBSCRIPTION_VENDOR_FIELD: SettingsFieldSchema = {
key: LLM_SUBSCRIPTION_VENDOR_KEY,
label: "Subscription provider",
description: "Provider used for subscription-backed LLM access.",
section: "llm",
section_label: "LLM",
value_type: "string",
default: OPENAI_SUBSCRIPTION_VENDOR,
choices: [{ label: "OpenAI", value: OPENAI_SUBSCRIPTION_VENDOR }],
depends_on: [],
prominence: "critical",
secret: false,
required: true,
};
export const LLM_SUBSCRIPTION_SCHEMA_FIELDS = [
LLM_AUTH_TYPE_FIELD,
LLM_SUBSCRIPTION_VENDOR_FIELD,
];
export function resolveLlmAuthType(value: unknown): LlmAuthType {
return value === LLM_AUTH_TYPE_SUBSCRIPTION
? LLM_AUTH_TYPE_SUBSCRIPTION
: LLM_AUTH_TYPE_API_KEY;
}
export function isSubscriptionLlmConfig(
llm: Record<string, unknown> | null | undefined,
): boolean {
return resolveLlmAuthType(llm?.auth_type) === LLM_AUTH_TYPE_SUBSCRIPTION;
}
|