From 0d8a001f8c68b3304973c00225afdaa3d8356391 Mon Sep 17 00:00:00 2001 From: Zihao Xu Date: Sat, 24 Jan 2026 22:42:46 -0800 Subject: [PATCH] feat: add Gemini preset template for LLM settings (#97) * feat: add Gemini preset template for LLM settings * docs: add comment explaining Gemini /openai suffix requirement * feat: update Gemini preset to use latest 3-pro and 3-flash models * docs: improve comment to reference backend client.py implementation --- .../components/game/panels/system/LLMConfigPanel.vue | 11 +++++++++++ web/src/locales/en-US.json | 4 +++- web/src/locales/zh-CN.json | 4 +++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/web/src/components/game/panels/system/LLMConfigPanel.vue b/web/src/components/game/panels/system/LLMConfigPanel.vue index 3f77b55..06f1176 100644 --- a/web/src/components/game/panels/system/LLMConfigPanel.vue +++ b/web/src/components/game/panels/system/LLMConfigPanel.vue @@ -50,6 +50,16 @@ const presets = computed(() => [ model_name: 'anthropic/claude-3.5-sonnet', fast_model_name: 'google/gemini-3-flash' }, + { + name: t('llm.presets.gemini'), + // Note: The `/openai` suffix is required to use Google's OpenAI-compatible API. + // Our backend (src/utils/llm/client.py) uses OpenAI-compatible format with + // Bearer token auth and /chat/completions endpoint, so we need this suffix + // to make Google API accept OpenAI-style requests instead of native Gemini format. + base_url: 'https://generativelanguage.googleapis.com/v1beta/openai/', + model_name: 'gemini-3-pro-preview', + fast_model_name: 'gemini-3-flash-preview' + }, { name: t('llm.presets.ollama'), base_url: 'http://localhost:11434/v1', @@ -286,6 +296,7 @@ onMounted(() => {
  • {{ t('llm.help_links.deepseek') }}
  • {{ t('llm.help_links.openrouter') }}
  • {{ t('llm.help_links.siliconflow') }}
  • +
  • {{ t('llm.help_links.gemini') }}
  • diff --git a/web/src/locales/en-US.json b/web/src/locales/en-US.json index e6a0a65..8eac234 100644 --- a/web/src/locales/en-US.json +++ b/web/src/locales/en-US.json @@ -109,13 +109,15 @@ "deepseek": "DeepSeek", "siliconflow": "SiliconFlow", "openrouter": "OpenRouter", + "gemini": "Gemini", "ollama": "Ollama (Local)" }, "help_links": { "qwen": "Aliyun Bailian (Qwen / Recommended)", "deepseek": "DeepSeek Platform (Fast & Cheap)", "openrouter": "OpenRouter (All-in-one, Recommended)", - "siliconflow": "SiliconFlow (Domestic Aggregation)" + "siliconflow": "SiliconFlow (Domestic Aggregation)", + "gemini": "Google AI Studio (Gemini)" } }, "game_start": { diff --git a/web/src/locales/zh-CN.json b/web/src/locales/zh-CN.json index 31258f7..e999180 100644 --- a/web/src/locales/zh-CN.json +++ b/web/src/locales/zh-CN.json @@ -109,13 +109,15 @@ "deepseek": "DeepSeek", "siliconflow": "硅基流动", "openrouter": "OpenRouter", + "gemini": "Gemini", "ollama": "Ollama (本地)" }, "help_links": { "qwen": "阿里云百炼 (Qwen / 最推荐)", "deepseek": "DeepSeek 开放平台 (国内推荐,便宜)", "openrouter": "OpenRouter (全机型聚合,推荐)", - "siliconflow": "硅基流动 (国内聚合)" + "siliconflow": "硅基流动 (国内聚合)", + "gemini": "Google AI Studio (Gemini)" } }, "game_start": {