haixunMaster/lib/ai/opencode-go-settings.ts

78 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** OpenCode Go 模型特性與呼叫設定(對照 https://opencode.ai/docs/go/ */
export const OPENCODE_GO_MESSAGES_MODELS = new Set([
"minimax-m3",
"minimax-m2.7",
"minimax-m2.5",
"qwen3.7-max",
"qwen3.7-plus",
"qwen3.6-plus",
"qwen3.5-plus",
]);
/** Kimi 只接受 temperature = 1 */
export const OPENCODE_GO_KIMI_MODELS = new Set(["kimi-k2.7-code", "kimi-k2.6", "kimi-k2.5"]);
/** structured outputgenerateObject不穩優先走 JSON 文字解析 */
export const OPENCODE_GO_TEXT_FIRST_MODELS = new Set([
"deepseek-v4-flash",
"deepseek-v4-pro",
"glm-5.1",
"glm-5",
"kimi-k2.7-code",
"kimi-k2.6",
"kimi-k2.5",
"mimo-v2.5",
"mimo-v2.5-pro",
"minimax-m3",
"minimax-m2.7",
"minimax-m2.5",
"qwen3.7-max",
"qwen3.7-plus",
"qwen3.6-plus",
"qwen3.5-plus",
]);
export function isOpenCodeGoProvider(provider: string): boolean {
return provider === "opencode-go";
}
export function getOpenCodeGenerationSettings(provider: string, modelId: string) {
if (!isOpenCodeGoProvider(provider)) return {};
if (OPENCODE_GO_KIMI_MODELS.has(modelId)) {
return { temperature: 1 as const };
}
return {};
}
export function prefersOpenCodeTextFirst(provider: string, modelId: string): boolean {
return isOpenCodeGoProvider(provider) && OPENCODE_GO_TEXT_FIRST_MODELS.has(modelId);
}
/** 將 OpenCode Go / provider 常見 API 錯誤轉成可讀訊息 */
export function explainProviderApiError(message: string, responseBody?: string): string | null {
const combined = `${message} ${responseBody ?? ""}`.toLowerCase();
if (
combined.includes("temperature") &&
(combined.includes("kimi") || combined.includes("only support"))
) {
return "Kimi 模型只接受 temperature=1。請重新整理頁面後再試或暫時改用 DeepSeek / GLM。";
}
if (
combined.includes("invalid api key") ||
combined.includes("incorrect api key") ||
combined.includes("unauthorized") ||
combined.includes("authentication")
) {
return "OpenCode Go API key 無效或未設定,請到設定頁填入從 opencode.ai/auth 取得的 key。";
}
if (combined.includes("rate limit") || combined.includes("quota") || combined.includes("usage limit")) {
return "OpenCode Go 用量已達上限,請到 opencode.ai/auth 查看配額或更換模型。";
}
if (combined.includes("model") && (combined.includes("not found") || combined.includes("does not exist"))) {
return "選用的模型不存在或已下架,請到設定頁更換 OpenCode Go 模型。";
}
return null;
}