Files

1 line
13 KiB
JSON

{"repo": "aiprojeck0107-sketch/tlm", "files": {"src/main/java/com/github/tartaricacid/touhoulittlemaid/ai/service/llm/DefaultLLMSite.java": {"4decffcab62f7257d08c599d2fbf2a75b73c8fcd": {"t": 1785746136.4341123, "n": 6165, "h": "7fa52d80fdadc25c", "c": "package com.github.tartaricacid.touhoulittlemaid.ai.service.llm;\n\nimport com.github.tartaricacid.touhoulittlemaid.ai.manager.site.AvailableSites;\nimport com.github.tartaricacid.touhoulittlemaid.ai.service.SerializableSite;\nimport com.github.tartaricacid.touhoulittlemaid.ai.service.llm.openai.LLMOpenAISite;\nimport com.google.common.collect.Lists;\nimport org.apache.commons.lang3.StringUtils;\n\nimport java.util.List;\nimport java.util.Map;\nimport java.util.function.Consumer;\n\npublic final class DefaultLLMSite {\n public static LLMOpenAISite DEEPSEEK = createSite(\"deepseek\",\n \"https://api.deepseek.com/chat/completions\",\n true, true, Map.of(),\n \"deepseek-v4-flash\", \"deepseek-v4-pro\");\n\n public static LLMOpenAISite PLAYER2 = createSite(\"player2\",\n \"http://127.0.0.1:4315/v1/chat/completions\", false,\n Map.of(\"player2-game-key\", \"TouhouLittleMaid\"),\n \"default\");\n\n public static LLMOpenAISite ALIYUN = createSite(\"aliyun\",\n \"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions\",\n \"qwen3-max\", \"qwen3.5-plus\", \"qwen3.5-flash\");\n\n public static LLMOpenAISite SILICONFLOW = createSite(\"siliconflow\",\n \"https://api.siliconflow.cn/v1/chat/completions\",\n \"Pro/MiniMaxAI/MiniMax-M2.5\",\n \"Pro/zai-org/GLM-5\",\n \"Pro/moonshotai/Kimi-K2.5\",\n \"Pro/deepseek-ai/DeepSeek-V3.2\",\n \"Qwen/Qwen3.5-397B-A17B\"\n );\n\n public static LLMOpenAISite DOUBAO = createSite(\"doubao\",\n \"https://ark.cn-beijing.volces.com/api/v3/chat/completions\", true,\n \"doubao-seed-2-0-pro-260215\",\n \"doubao-seed-2-0-lite-260215\",\n \"doubao-seed-2-0-mini-260215\"\n );\n\n public static LLMOpenAISite ZHIPU = createSite(\"zhipu\",\n \"https://open.bigmodel.cn/api/paas/v4/chat/completions\", true,\n \"glm-5\", \"glm-5-turbo\", \"glm-4.7\", \"glm-4.6\"\n );\n\n public static LLMOpenAISite MINIMAX = createSite(\"minimax\",\n \"https://api.minimaxi.com/v1/chat/completions\",\n \"MiniMax-M2.7\", \"MiniMax-M2.7-highspeed\", \"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"\n );\n\n public static LLMOpenAISite KIMI = createSite(\"kimi\",\n \"https://api.moonshot.cn/v1/chat/completions\", true,\n \"kimi-k2.5\", \"kimi-k2-turbo-preview\"\n );\n\n public static LLMOpenAISite GEMINI = createSite(\"gemini\",\n \"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions\",\n \"gemini-3.1-pro-preview\", \"gemini-3-flash-preview\", \"gemini-3.1-flash-lite-preview\"\n );\n\n public static LLMOpenAISite GROK = createSite(\"grok\",\n \"https://api.x.ai/v1/chat/completions\",\n \"grok-4.20-0309-non-reasoning\", \"grok-4-1-fast-non-reasoning\"\n );\n\n public static LLMOpenAISite OPEN_ROUTER = createSite(\"openrouter\",\n \"https://openrouter.ai/api/v1/chat/completions\", false,\n Map.of(\"HTTP-Referer\", \"https://github.com/TartaricAcid/TouhouLittleMaid\",\n \"X-OpenRouter-Title\", \"Touhou Little Maid Mod (Minecraft)\"\n ), \"xiaomi/mimo-v2-flash\", \"google/gemini-3-flash-preview\", \"x-ai/grok-4.1-fast\"\n );\n\n public static Consumer<LLMSite> FIXED_DEEPSEEK = site -> {\n if (site instanceof LLMOpenAISite openAISite) {\n Map<String, String> models = openAISite.models();\n // DeepSeek 将于 2026/07/24 弃用这些模型名,需要修正\n openAISite.removeModel(\"deepseek-chat\");\n openAISite.removeModel(\"deepseek-reasoner\");\n if (!models.containsKey(\"deepseek-v4-flash\")) {\n openAISite.addModel(\"deepseek-v4-flash\");\n }\n if (!models.containsKey(\"deepseek-v4-pro\")) {\n openAISite.addModel(\"deepseek-v4-pro\");\n }\n openAISite.setHasThinkingField(true);\n }\n };\n\n public static Consumer<LLMSite> FIXED_THINKING = site -> {\n if (site instanceof LLMOpenAISite openAISite) {\n openAISite.setHasThinkingField(true);\n }\n };\n\n public static LLMOpenAISite createSite(String name, String url, String... models) {\n return createSite(name, url, false, Map.of(), models);\n }\n\n public static LLMOpenAISite createSite(String name, String url, boolean hasThinkingField, String... models) {\n return createSite(name, url, false, hasThinkingField, Map.of(), models);\n }\n\n public static LLMOpenAISite createSite(String name, String url, boolean enabled, Map<String, String> header, String... models) {\n return createSite(name, url, enabled, false, header, models);\n }\n\n public static LLMOpenAISite createSite(String name, String url, boolean enabled, boolean hasThinkingField, Map<String, String> header, String... models) {\n List<LLMOpenAISite.ModelEntry> modelEntries = Lists.newArrayList();\n for (String modelName : models) {\n modelEntries.add(new LLMOpenAISite.ModelEntry(modelName));\n }\n return new LLMOpenAISite(name, SerializableSite.defaultIcon(name), url, enabled, StringUtils.EMPTY, hasThinkingField, header, modelEntries);\n }\n\n public static void addDefaultSites() {\n AvailableSites.LLM_SITES.put(DEEPSEEK.id(), DEEPSEEK);\n AvailableSites.LLM_SITES.put(PLAYER2.id(), PLAYER2);\n AvailableSites.LLM_SITES.put(ALIYUN.id(), ALIYUN);\n AvailableSites.LLM_SITES.put(SILICONFLOW.id(), SILICONFLOW);\n AvailableSites.LLM_SITES.put(DOUBAO.id(), DOUBAO);\n AvailableSites.LLM_SITES.put(ZHIPU.id(), ZHIPU);\n AvailableSites.LLM_SITES.put(MINIMAX.id(), MINIMAX);\n AvailableSites.LLM_SITES.put(KIMI.id(), KIMI);\n AvailableSites.LLM_SITES.put(GEMINI.id(), GEMINI);\n AvailableSites.LLM_SITES.put(GROK.id(), GROK);\n AvailableSites.LLM_SITES.put(OPEN_ROUTER.id(), OPEN_ROUTER);\n\n AvailableSites.FIXED_LLM_SITES.put(DEEPSEEK.id(), FIXED_DEEPSEEK);\n AvailableSites.FIXED_LLM_SITES.put(DOUBAO.id(), FIXED_THINKING);\n AvailableSites.FIXED_LLM_SITES.put(ZHIPU.id(), FIXED_THINKING);\n AvailableSites.FIXED_LLM_SITES.put(KIMI.id(), FIXED_THINKING);\n }\n}\n"}, "05035fd7d1a0e1a1333ca3aa34a08cde40f5778c": {"t": 1785760098.568106, "n": 6165, "h": "7fa52d80fdadc25c", "c": "package com.github.tartaricacid.touhoulittlemaid.ai.service.llm;\n\nimport com.github.tartaricacid.touhoulittlemaid.ai.manager.site.AvailableSites;\nimport com.github.tartaricacid.touhoulittlemaid.ai.service.SerializableSite;\nimport com.github.tartaricacid.touhoulittlemaid.ai.service.llm.openai.LLMOpenAISite;\nimport com.google.common.collect.Lists;\nimport org.apache.commons.lang3.StringUtils;\n\nimport java.util.List;\nimport java.util.Map;\nimport java.util.function.Consumer;\n\npublic final class DefaultLLMSite {\n public static LLMOpenAISite DEEPSEEK = createSite(\"deepseek\",\n \"https://api.deepseek.com/chat/completions\",\n true, true, Map.of(),\n \"deepseek-v4-flash\", \"deepseek-v4-pro\");\n\n public static LLMOpenAISite PLAYER2 = createSite(\"player2\",\n \"http://127.0.0.1:4315/v1/chat/completions\", false,\n Map.of(\"player2-game-key\", \"TouhouLittleMaid\"),\n \"default\");\n\n public static LLMOpenAISite ALIYUN = createSite(\"aliyun\",\n \"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions\",\n \"qwen3-max\", \"qwen3.5-plus\", \"qwen3.5-flash\");\n\n public static LLMOpenAISite SILICONFLOW = createSite(\"siliconflow\",\n \"https://api.siliconflow.cn/v1/chat/completions\",\n \"Pro/MiniMaxAI/MiniMax-M2.5\",\n \"Pro/zai-org/GLM-5\",\n \"Pro/moonshotai/Kimi-K2.5\",\n \"Pro/deepseek-ai/DeepSeek-V3.2\",\n \"Qwen/Qwen3.5-397B-A17B\"\n );\n\n public static LLMOpenAISite DOUBAO = createSite(\"doubao\",\n \"https://ark.cn-beijing.volces.com/api/v3/chat/completions\", true,\n \"doubao-seed-2-0-pro-260215\",\n \"doubao-seed-2-0-lite-260215\",\n \"doubao-seed-2-0-mini-260215\"\n );\n\n public static LLMOpenAISite ZHIPU = createSite(\"zhipu\",\n \"https://open.bigmodel.cn/api/paas/v4/chat/completions\", true,\n \"glm-5\", \"glm-5-turbo\", \"glm-4.7\", \"glm-4.6\"\n );\n\n public static LLMOpenAISite MINIMAX = createSite(\"minimax\",\n \"https://api.minimaxi.com/v1/chat/completions\",\n \"MiniMax-M2.7\", \"MiniMax-M2.7-highspeed\", \"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"\n );\n\n public static LLMOpenAISite KIMI = createSite(\"kimi\",\n \"https://api.moonshot.cn/v1/chat/completions\", true,\n \"kimi-k2.5\", \"kimi-k2-turbo-preview\"\n );\n\n public static LLMOpenAISite GEMINI = createSite(\"gemini\",\n \"https://generativelanguage.googleapis.com/v1beta/openai/chat/completions\",\n \"gemini-3.1-pro-preview\", \"gemini-3-flash-preview\", \"gemini-3.1-flash-lite-preview\"\n );\n\n public static LLMOpenAISite GROK = createSite(\"grok\",\n \"https://api.x.ai/v1/chat/completions\",\n \"grok-4.20-0309-non-reasoning\", \"grok-4-1-fast-non-reasoning\"\n );\n\n public static LLMOpenAISite OPEN_ROUTER = createSite(\"openrouter\",\n \"https://openrouter.ai/api/v1/chat/completions\", false,\n Map.of(\"HTTP-Referer\", \"https://github.com/TartaricAcid/TouhouLittleMaid\",\n \"X-OpenRouter-Title\", \"Touhou Little Maid Mod (Minecraft)\"\n ), \"xiaomi/mimo-v2-flash\", \"google/gemini-3-flash-preview\", \"x-ai/grok-4.1-fast\"\n );\n\n public static Consumer<LLMSite> FIXED_DEEPSEEK = site -> {\n if (site instanceof LLMOpenAISite openAISite) {\n Map<String, String> models = openAISite.models();\n // DeepSeek 将于 2026/07/24 弃用这些模型名,需要修正\n openAISite.removeModel(\"deepseek-chat\");\n openAISite.removeModel(\"deepseek-reasoner\");\n if (!models.containsKey(\"deepseek-v4-flash\")) {\n openAISite.addModel(\"deepseek-v4-flash\");\n }\n if (!models.containsKey(\"deepseek-v4-pro\")) {\n openAISite.addModel(\"deepseek-v4-pro\");\n }\n openAISite.setHasThinkingField(true);\n }\n };\n\n public static Consumer<LLMSite> FIXED_THINKING = site -> {\n if (site instanceof LLMOpenAISite openAISite) {\n openAISite.setHasThinkingField(true);\n }\n };\n\n public static LLMOpenAISite createSite(String name, String url, String... models) {\n return createSite(name, url, false, Map.of(), models);\n }\n\n public static LLMOpenAISite createSite(String name, String url, boolean hasThinkingField, String... models) {\n return createSite(name, url, false, hasThinkingField, Map.of(), models);\n }\n\n public static LLMOpenAISite createSite(String name, String url, boolean enabled, Map<String, String> header, String... models) {\n return createSite(name, url, enabled, false, header, models);\n }\n\n public static LLMOpenAISite createSite(String name, String url, boolean enabled, boolean hasThinkingField, Map<String, String> header, String... models) {\n List<LLMOpenAISite.ModelEntry> modelEntries = Lists.newArrayList();\n for (String modelName : models) {\n modelEntries.add(new LLMOpenAISite.ModelEntry(modelName));\n }\n return new LLMOpenAISite(name, SerializableSite.defaultIcon(name), url, enabled, StringUtils.EMPTY, hasThinkingField, header, modelEntries);\n }\n\n public static void addDefaultSites() {\n AvailableSites.LLM_SITES.put(DEEPSEEK.id(), DEEPSEEK);\n AvailableSites.LLM_SITES.put(PLAYER2.id(), PLAYER2);\n AvailableSites.LLM_SITES.put(ALIYUN.id(), ALIYUN);\n AvailableSites.LLM_SITES.put(SILICONFLOW.id(), SILICONFLOW);\n AvailableSites.LLM_SITES.put(DOUBAO.id(), DOUBAO);\n AvailableSites.LLM_SITES.put(ZHIPU.id(), ZHIPU);\n AvailableSites.LLM_SITES.put(MINIMAX.id(), MINIMAX);\n AvailableSites.LLM_SITES.put(KIMI.id(), KIMI);\n AvailableSites.LLM_SITES.put(GEMINI.id(), GEMINI);\n AvailableSites.LLM_SITES.put(GROK.id(), GROK);\n AvailableSites.LLM_SITES.put(OPEN_ROUTER.id(), OPEN_ROUTER);\n\n AvailableSites.FIXED_LLM_SITES.put(DEEPSEEK.id(), FIXED_DEEPSEEK);\n AvailableSites.FIXED_LLM_SITES.put(DOUBAO.id(), FIXED_THINKING);\n AvailableSites.FIXED_LLM_SITES.put(ZHIPU.id(), FIXED_THINKING);\n AvailableSites.FIXED_LLM_SITES.put(KIMI.id(), FIXED_THINKING);\n }\n}\n"}}}}