fix: weather passes named city from utterance; clean navigate reply

GeoIP auto-detect is unavailable in the container, so '부산 날씨' failed
(no location). Extract the city from the utterance and pass it to getWeather.
Also report navigate by site name instead of the mid-load about:blank url.
This commit is contained in:
javis-bot
2026-06-15 01:02:35 +09:00
parent 49061d30f0
commit bdb012fc7c

View File

@@ -894,7 +894,9 @@ def _maybe_deterministic_site_search(text: str, db, cfg, language) -> Optional[s
if res and getattr(res, "success", False):
debug_log(f"deterministic browser: {args}", "tools")
if args["action"] == "navigate":
return res.reply_text or f"{site} 메인 페이지로 이동했습니다."
# Don't echo the tool's mid-load url (often about:blank); give a
# clean confirmation by site name.
return f"{site} 메인 페이지로 이동했습니다."
return res.reply_text or f"{site}에서 '{q}'를 검색해 화면에 띄웠습니다."
except Exception as e: # noqa: BLE001
debug_log(f"deterministic browser failed (fail-open): {e}", "tools")
@@ -918,9 +920,21 @@ def _maybe_deterministic_weather(text: str, db, cfg, language) -> Optional[str]:
low = (text or "").lower()
if not any(w in low for w in _WEATHER_INTENT_WORDS):
return None
# Extract a city candidate from the utterance (GeoIP auto-detect is
# unavailable in the container, so a named city must be passed through).
import re
_loc = text
for w in _WEATHER_INTENT_WORDS + (
"알려줘", "어때", "어떄", "말해줘", "확인해줘", "확인", "해줘",
"오늘", "지금", "현재", "", "그래서", "그럼",
):
_loc = re.sub(re.escape(w), " ", _loc, flags=re.IGNORECASE)
_loc = re.sub(r"(은|는|이|가|의|에|에서|로|을|를)\b", " ", _loc)
_loc = re.sub(r"\s+", " ", _loc).strip(" .,!?。")
args = {"location": _loc} if 1 <= len(_loc) <= 12 else {}
from ..tools.registry import run_tool_with_retries
res = run_tool_with_retries(
db=db, cfg=cfg, tool_name="getWeather", tool_args={},
db=db, cfg=cfg, tool_name="getWeather", tool_args=args,
system_prompt="", original_prompt="", redacted_text=redact(text),
max_retries=1, language=language,
)