Skip to content

UAT UT7: vision VLM 404 — stale OpenRouter model ID (google/gemini-2.0-flash-001) #167

Description

@BrettKinny

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.

Activity

  1. added
    bugSomething isn't working
    area:behaviourdotty-behaviour container (perception + greeter + vision routes)
    needs-triageAwaiting triage (see docs/agents/triage-labels.md)
    ready-for-humanRequires human implementation or live-device verification
    status:activeReady to start, not blocked
    and removed
    needs-triageAwaiting triage (see docs/agents/triage-labels.md)
    on Jul 11, 2026
  2. BrettKinny commented on Jul 11, 2026

    @BrettKinny
    OwnerAuthor

    This was generated by AI during triage.

    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.

  3. BrettKinny commented on Jul 11, 2026

    @BrettKinny
    OwnerAuthor

    This was generated by AI during triage.

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:behaviourdotty-behaviour container (perception + greeter + vision routes)bugSomething isn't workingready-for-humanRequires human implementation or live-device verificationstatus:activeReady to start, not blocked

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions