128 lines
3.8 KiB
TypeScript
128 lines
3.8 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;
|
|
};
|
|
|
|
const ALIBABA_DASHSCOPE_HOST = "dashscope.aliyuncs.com";
|
|
|
|
export function isAlibabaDashScopeBaseUrl(value: unknown) {
|
|
try {
|
|
return new URL(String(value || "").trim()).hostname === ALIBABA_DASHSCOPE_HOST;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function resolveDetailAgentApiKey(params: {
|
|
configuredApiKey: string;
|
|
configuredBaseUrl: string;
|
|
enabledAlibabaProviders: Array<{
|
|
apiKey?: string | null;
|
|
baseUrl?: string | null;
|
|
}>;
|
|
}) {
|
|
if (isAlibabaDashScopeBaseUrl(params.configuredBaseUrl)) {
|
|
const provider = params.enabledAlibabaProviders.find(
|
|
(item) =>
|
|
isAlibabaDashScopeBaseUrl(item.baseUrl) &&
|
|
Boolean(String(item.apiKey || "").trim()),
|
|
);
|
|
if (provider?.apiKey) return provider.apiKey.trim();
|
|
}
|
|
|
|
return String(params.configuredApiKey || "").trim();
|
|
}
|
|
|
|
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),
|
|
};
|
|
}
|