You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
UAT UT7: vision VLM 404 — stale OpenRouter model ID (google/gemini-2.0-flash-001) #167
Symptom.take_photo captures fine (3040 bytes) but the VLM explain call to
OpenRouter 404s, so Dotty can't describe what they see.
Expected. VLM returns a scene description.
Actual / log excerpt (dotty-behaviour).
20:01:31 [dispatch.vlm] ERROR VLM call failed (url=https://openrouter.ai/api/v1/chat/completions)
requests.exceptions.HTTPError: 404 Client Error: Not Found
20:01:31 vision result desc=ERROR: the vision service didn't respond...
Root cause (CONFIRMED 2026-07-11). The container has no VISION_MODEL/VLM_MODEL env
override, so the code default applies — dotty-behaviour/config.py:171: VISION_MODEL = os.environ.get("VISION_MODEL", "google/gemini-2.0-flash-001"). google/gemini-2.0-flash-001 is no longer in OpenRouter's /api/v1/models list
(checked 2026-07-11) → 404. Current vision-capable Gemini IDs on OpenRouter include google/gemini-3.5-flash and google/gemini-3.1-flash-lite.
Fix. Set VLM_MODEL/VISION_MODEL env (or bump the code default) to a live vision
model and redeploy dotty-behaviour. Low-effort config fix — and consider updating the
default in config.py so a fresh deploy doesn't regress.
From the filmed UAT session 2026-07-11 (uat-sessions/2026-07-11/: results.csv, container logs, two video recordings). Investigated and drafted with AI assistance (Claude Fable 5 via Claude Code); human-reviewed before filing.
Implemented in draft PR #171: the removed OpenRouter default was replaced with the currently listed multimodal google/gemini-3.1-flash-lite, with configuration regression coverage and updated architecture docs.
RC verification: deploy dotty-behaviour, take a photo, and require a non-error scene description. Evidence clip: 2026-07-11-UT7-FAIL-phone.mp4.
Verified fixed on the deployed release candidate and final firmware stack on 2026-07-12. After deploying PR #171, dotty-behaviour started healthy with the new google/gemini-3.1-flash-lite default. A live device capture completed successfully and Xiaozhi logged a non-error grounded result: room_view: cached len=57 ... preview='A man in his 40s with a beard is wearing a black t-shirt.'; the MCP photo result returned the same description and the device completed clean talk -> idle state transitions.
This satisfies the runtime acceptance gate: the VLM endpoint returns a non-empty scene description rather than the prior OpenRouter 404. Shipped in PR #171 / release fw-v1.3.3.
Activity
BrettKinny commentedon Jul 11, 2026
Implemented in draft PR #171: the removed OpenRouter default was replaced with the currently listed multimodal
google/gemini-3.1-flash-lite, with configuration regression coverage and updated architecture docs.RC verification: deploy dotty-behaviour, take a photo, and require a non-error scene description. Evidence clip:
2026-07-11-UT7-FAIL-phone.mp4.BrettKinny commentedon Jul 11, 2026
Verified fixed on the deployed release candidate and final firmware stack on 2026-07-12. After deploying PR #171,
dotty-behaviourstarted healthy with the newgoogle/gemini-3.1-flash-litedefault. A live device capture completed successfully and Xiaozhi logged a non-error grounded result:room_view: cached len=57 ... preview='A man in his 40s with a beard is wearing a black t-shirt.'; the MCP photo result returned the same description and the device completed cleantalk -> idlestate transitions.This satisfies the runtime acceptance gate: the VLM endpoint returns a non-empty scene description rather than the prior OpenRouter 404. Shipped in PR #171 / release
fw-v1.3.3.