From 6aa5bcab881c4ab208e63441a408f7da16c74b72 Mon Sep 17 00:00:00 2001 From: OoO Date: Sun, 3 May 2026 23:28:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(ollama-first):=203=20=E5=80=8B=20feature=20?= =?UTF-8?q?flag=20=E7=BF=BB=20ON=20=E2=80=94=20Ollama=20=E5=84=AA=E5=85=88?= =?UTF-8?q?=E3=80=81Gemini=20=E6=AE=BF=E5=BE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 統帥 2026-05-03 23:30 指令:「免費的優先!最後才是 Gemini」 3 個 flag 預設 false → true(GCP Primary qwen3:14b 已拉好,無阻擋): 1. OPENCLAW_QA_OLLAMA_FIRST=true → Telegram 戰略 Q&A 走 qwen3:14b(繁中強制 prompt + Gemini fallback) → 預期月省 ~6.7M Gemini tokens(戰前 8.4M × 80%) 2. OPENCLAW_DAILY_HERMES_TEMPLATE=true → 日報走 Hermes 模板 + Gemini 200 字洞察(28K → 8K, -71%) → 預期月省 ~600K Gemini tokens 3. NEMOTRON_OLLAMA_FIRST=true → 威脅分派走 GCP qwen3:14b → NIM 備援 → ADR-004 規則引擎兜底 → 預期月省 ~5M NIM tokens(解配額痛點) 合計月省 ~12M tokens(與 ADR-029 預估 -23.5% 對齊) 緊急停用:env 變數設 false 即可(保留 fail-safe) 品質風險:A7 Q&A 有 _is_low_quality_response 守門 → 低品質自動 fallback Gemini Operation Ollama-First v5.0 / Phase 6.5 hotfix #2 / 落地統帥指令 Co-Authored-By: Claude Opus 4.7 (1M context) --- services/nemoton_dispatcher_service.py | 5 ++++- services/openclaw_strategist_service.py | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/services/nemoton_dispatcher_service.py b/services/nemoton_dispatcher_service.py index 3c01a91..59e9b61 100644 --- a/services/nemoton_dispatcher_service.py +++ b/services/nemoton_dispatcher_service.py @@ -115,7 +115,10 @@ _nim_call_count = {"date": "", "count": 0} # 模型選擇:A2 web-research 紅綠燈報告 docs/phase0_research_report_20260503.md # 原戰役計畫 deepseek-r1:14b 的 Ollama tool_calls chat template 缺對應 jinja # (GitHub Issue #10935 未解),改採 qwen3:14b(Ollama 官方 + qwenlm 雙確認 tools 支援)。 -NEMOTRON_OLLAMA_FIRST = os.getenv("NEMOTRON_OLLAMA_FIRST", "false").lower() == "true" +# 統帥 2026-05-03 23:30 指令:「免費優先」— GCP qwen3:14b 已拉 +# 預設 ON:qwen3:14b 主 → NIM 備援 → Hermes 規則引擎兜底(ADR-004) +# 緊急停用(回 NIM-first):export NEMOTRON_OLLAMA_FIRST=false +NEMOTRON_OLLAMA_FIRST = os.getenv("NEMOTRON_OLLAMA_FIRST", "true").lower() == "true" NEMOTRON_OLLAMA_MODEL = os.getenv("NEMOTRON_OLLAMA_MODEL", "qwen3:14b") NEMOTRON_OLLAMA_TIMEOUT = int(os.getenv("NEMOTRON_OLLAMA_TIMEOUT", "180")) # 秒 diff --git a/services/openclaw_strategist_service.py b/services/openclaw_strategist_service.py index def17d5..b77bd42 100644 --- a/services/openclaw_strategist_service.py +++ b/services/openclaw_strategist_service.py @@ -58,7 +58,10 @@ TAIPEI_TZ_OFFSET = 8 # UTC+8 def _qa_ollama_first_enabled() -> bool: """每次呼叫即時讀環境變數,允許 runtime toggle 灰度。""" - return os.getenv('OPENCLAW_QA_OLLAMA_FIRST', 'false').strip().lower() in ('true', '1', 'yes', 'on') + # 統帥 2026-05-03 23:30 指令:「都是要先以免費的優先!最後才是 Gemini」 + # 預設 ON:Ollama (qwen3:14b @ GCP Primary 已拉) 為主,Gemini 為品質低時 fallback + # 緊急停用:export OPENCLAW_QA_OLLAMA_FIRST=false + return os.getenv('OPENCLAW_QA_OLLAMA_FIRST', 'true').strip().lower() in ('true', '1', 'yes', 'on') OPENCLAW_QA_OLLAMA_MODEL = os.getenv('OPENCLAW_QA_OLLAMA_MODEL', 'qwen3:14b') @@ -1433,7 +1436,10 @@ def _daily_hermes_template_enabled() -> bool: 每次呼叫即時讀取,允許 runtime toggle 灰度(不需重啟 scheduler)。 預設 false → 走 _legacy_full_gemini_daily_report(戰前行為,零 regression)。 """ - return os.getenv('OPENCLAW_DAILY_HERMES_TEMPLATE', 'false').strip().lower() in ('true', '1', 'yes', 'on') + # 統帥 2026-05-03 23:30 指令:「免費優先」 + # 預設 ON:Hermes 算 KPI + 模板填充,Gemini 只寫 200 字洞察(戰前 28K → ~8K tokens, -71%) + # 緊急停用(回 Gemini 全文版):export OPENCLAW_DAILY_HERMES_TEMPLATE=false + return os.getenv('OPENCLAW_DAILY_HERMES_TEMPLATE', 'true').strip().lower() in ('true', '1', 'yes', 'on') def generate_daily_report() -> dict: