fix: native tool-calling for qwen2.5 (tools actually fire) + kill Chrome infobars

Root cause of "weather/search do nothing": the engine forced TEXT tool-calling
for all <=7B models, but qwen2.5:3b emits clean NATIVE tool calls and fails at
the text format — so it just narrated ("부산 날씨는 맑습니다") and never called
getWeather/webSearch/controlBrowser. Use native tool-calling for tool-capable
small families (qwen2.5/qwen3/llama3.x/mistral); native still auto-falls back
to text on HTTP 400, so non-tool models (gemma) are unaffected.

Also launch Chrome with --test-type (removes the "--no-sandbox unsupported
flag" infobar) and disable the Translate feature/popup.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
javis-bot
2026-06-14 03:08:49 +09:00
parent 642fa42561
commit 4bc7f836ae
2 changed files with 17 additions and 1 deletions

View File

@@ -13,6 +13,11 @@ export DISPLAY=:1
# broadcast-visible Google/YouTube search. Bound to loopback (same container).
exec google-chrome \
--no-sandbox --no-first-run --disable-dev-shm-usage \
--test-type \
--disable-infobars \
--no-default-browser-check \
--disable-translate \
--disable-features=Translate,TranslateUI,InfoBars \
--remote-debugging-port="${CDP_PORT:-9222}" \
--remote-debugging-address=127.0.0.1 \
--user-data-dir="${CHROME_PROFILE_DIR:-/root/chrome-profile}" \

View File

@@ -1470,7 +1470,18 @@ def run_reply_engine(db: "Database", cfg, tts: Optional[Any],
# can't recognise. The markdown-fence format is explicit in the system prompt, so the
# model has a concrete template to follow. Using text tools from the start also avoids
# the wasted round-trip and prompt confusion of starting native and falling back mid-turn.
use_text_tools = (model_size == ModelSize.SMALL)
# …BUT some small models emit clean native tool calls (qwen2.5/qwen3,
# llama3.x, mistral). Forcing text tools on those suppresses tool use almost
# entirely — the model just narrates ("부산 날씨는 맑습니다") and never emits a
# call, so getWeather/webSearch/controlBrowser never run. Use native for the
# tool-capable families (native still auto-falls-back to text on HTTP 400);
# only genuinely non-tool small models (e.g. gemma) default to text.
_model_l = (cfg.ollama_chat_model or "").lower()
_native_capable = any(k in _model_l for k in (
"qwen2.5", "qwen2", "qwen3", "llama3.1", "llama3.2", "llama3.3",
"mistral", "hermes", "command-r", "firefunction",
))
use_text_tools = (model_size == ModelSize.SMALL) and not _native_capable
prompts = get_system_prompts(model_size)
debug_log(f"Model size detected: {model_size.value} for {cfg.ollama_chat_model} (use_text_tools={use_text_tools})", "planning")