ulysses/static
James Arslan 6776c7d691
Surface silent model fallback instead of masking it (#868)
When the selected model fails before producing output, stream_llm_with_fallback
quietly switches to the next candidate and the reply is shown under the
originally selected model's name, so a misconfigured provider looks like it
works. (Concretely: a Bedrock gateway that 400s every Anthropic/Claude request
appears fine because another model silently answers under the Claude label.)

Emit a `fallback` SSE event ({selected_model, answered_by, reason}) the first
time a non-primary candidate produces output, forward it through the agent loop
and both chat-route paths, stamp the response metrics with the model that
actually answered, and show a notice + relabel the reply in the UI.

Tested: python -m pytest tests/test_llm_core_fallback.py (3 pass);
python -m py_compile src/llm_core.py src/agent_loop.py routes/chat_routes.py;
node --check static/js/chat.js.
2026-06-02 11:37:25 +09:00
..
fonts Odysseus v1.0 2026-05-31 23:58:26 +09:00
js Surface silent model fallback instead of masking it (#868) 2026-06-02 11:37:25 +09:00
lib Odysseus v1.0 2026-05-31 23:58:26 +09:00
app.js Fix drag-and-drop files landing behind the panes in Compare (#818) 2026-06-02 11:14:59 +09:00
index.html Merge branch 'pr-673' into visual-pr-playground 2026-06-02 06:26:32 +09:00
landing.html feat: Add mobile hamburger navigation menu and toggle functionality 2026-06-01 15:57:01 +04:00
login.html Improve accessibility across core flows (#86) 2026-06-01 22:04:00 +02:00
manifest.json Odysseus v1.0 2026-05-31 23:58:26 +09:00
style.css Polish task UI slash commands and Ollama serving 2026-06-02 09:36:03 +09:00
sw.js Odysseus v1.0 2026-05-31 23:58:26 +09:00