ai-chatbot/lib/ai/detail-agent-model-config.ts

98 lines
3.0 KiB
TypeScript

export const DETAIL_AGENT_LOCAL_MOONSHOT_SETTING_KEY =
"canvas_detail_agent_moonshot_config";
// Stable option id: keep the historical value so existing site settings remain valid.
export const DETAIL_AGENT_LOCAL_MOONSHOT_OPTION_ID =
"__moonshot_kimi_k25_local__";
export const DETAIL_AGENT_LOCAL_MOONSHOT_BASE_URL =
"https://api.kimi.com/coding/v1";
export const DETAIL_AGENT_LOCAL_MOONSHOT_MODEL_ID = "kimi-for-coding";
export const DETAIL_AGENT_LOCAL_MOONSHOT_DISPLAY_NAME =
"Kimi Code 编程套餐";
const LEGACY_MOONSHOT_BASE_URLS = new Set([
"https://api.moonshot.cn/v1",
"https://api.moonshot.ai/v1",
"https://api.moonshot.cn/v1/chat/completions",
"https://api.moonshot.ai/v1/chat/completions",
]);
export type DetailAgentLocalMoonshotConfig = {
enabled: boolean;
providerName: string;
baseUrl: string;
apiKey: string;
modelId: string;
displayName: string;
};
export function isDetailAgentLocalMoonshotOption(value: unknown) {
return String(value || "").trim() === DETAIL_AGENT_LOCAL_MOONSHOT_OPTION_ID;
}
function normalizeMoonshotModelId(value: unknown) {
const modelId = String(value || "").trim();
if (
!modelId ||
modelId === "kimi-k2.5" ||
modelId === "kimi-k2.6" ||
modelId === "kimi-k2.7-code" ||
modelId === "kimi-k2.7-code-highspeed"
) {
return DETAIL_AGENT_LOCAL_MOONSHOT_MODEL_ID;
}
return modelId;
}
export function normalizeDetailAgentLocalMoonshotBaseUrl(value: unknown) {
const clean = String(value || "")
.trim()
.replace(/\/+$/, "");
if (!clean || LEGACY_MOONSHOT_BASE_URLS.has(clean)) {
return DETAIL_AGENT_LOCAL_MOONSHOT_BASE_URL;
}
if (clean === `${DETAIL_AGENT_LOCAL_MOONSHOT_BASE_URL}/chat/completions`) {
return DETAIL_AGENT_LOCAL_MOONSHOT_BASE_URL;
}
return clean;
}
export function isDetailAgentLocalMoonshotBaseUrl(value: unknown) {
return (
normalizeDetailAgentLocalMoonshotBaseUrl(value) ===
DETAIL_AGENT_LOCAL_MOONSHOT_BASE_URL
);
}
function normalizeMoonshotDisplayName(value: unknown) {
const displayName = String(value || "").trim();
if (
!displayName ||
displayName === "官方 Kimi K2.5" ||
displayName === "官方 Kimi K2.6" ||
displayName === "官方 Kimi K2.7 Code Highspeed" ||
displayName === "Kimi Code 编程套餐 K2.7 Highspeed"
) {
return DETAIL_AGENT_LOCAL_MOONSHOT_DISPLAY_NAME;
}
return displayName;
}
export function normalizeDetailAgentLocalMoonshotConfig(
value: unknown,
): DetailAgentLocalMoonshotConfig {
const raw =
value && typeof value === "object" && !Array.isArray(value)
? (value as Record<string, unknown>)
: {};
return {
enabled: raw.enabled !== false,
providerName:
String(raw.providerName || "").trim() || "Kimi Code 编程套餐",
baseUrl: normalizeDetailAgentLocalMoonshotBaseUrl(raw.baseUrl),
apiKey: String(raw.apiKey || "").trim(),
modelId: normalizeMoonshotModelId(raw.modelId),
displayName: normalizeMoonshotDisplayName(raw.displayName),
};
}