We recommend all users upgrade. v1.12.0 is a maintainability and correctness release: a full-repo cleanup (20+ focused PRs) that removed ~3,000 lines of dead code, fixed real user-facing bugs along the way, and turned on the quality gates that keep them fixed — validated end-to-end by the release test process (full suites, API+UI smoke, fresh-install and upgrade tests on the real images).
✨ New features
- Live Anthropic model discovery — "Discover models" for Anthropic credentials now queries Anthropic's models API instead of a hardcoded 2024-era list, so new Claude models appear as soon as they ship (#1070)
GET /api/providers— new endpoint exposing provider metadata (modalities, docs, env-configured status) from a single backend registry (#1075)- Math rendering in chat — prompts now steer models to emit
$$...$$/$...$so formulas render via KaTeX instead of raw LaTeX code blocks (#1051)
🐛 Notable fixes
- Errors now tell you what's wrong: a missing/misconfigured model returns a clear 422 with guidance (and not-found resources a 404) instead of a generic "Internal Server Error" — across all API routes (#1078)
- Translations interpolate correctly in all 14 languages: counters, names and plurals no longer risk showing literal
{count}/{name}placeholders; eight podcast toasts that always showed{name}are fixed (#1074, #1077) - Podcast dialog: rapid source toggling no longer causes a request storm with flickering token counts, and the dialog closes deterministically after the episode list refreshes (#1067)
🧹 Code health (why this release exists)
- ~3,000 lines of dead code removed, including the entire leftover Streamlit-era service layer (#1053, #1054, #1056)
- CI now gates every PR on ruff, ESLint, the frontend production build and mypy at zero errors (was: 197 baseline errors, not enforced) (#1062, #1068, #1076)
- One provider registry drives env config, modalities, connection tests and discovery — adding a provider went from ~6 hand-synced locations to 2, both test-enforced (#1075)
- Heavy copy-paste deduplicated across the chat routers, sources router, embedding commands and model discovery (#1069–#1072)
- Both Docker images are now built from a single multi-stage
Dockerfile, eliminating drift between the regular and single-container variants — published image names and tags are unchanged (#1066) - Dependency diet: unused
langchain-communityandlangchain-deepseekremoved, upper bounds on the langchain family, and an undeclared transitive dependency made explicit (#1073)
⚠️ Behavior changes for self-hosters
- API error codes are now accurate — if you script against the API and matched on
500for configuration mistakes, update your handling: configuration errors return422, missing resources404, provider rate limits429, upstream provider failures502(#1078). POST /api/notebooks/{id}/contextwas removed — it duplicatedPOST /api/chat/contextand had no known callers. If you used it, switch toPOST /api/chat/contextwith body{notebook_id, context_config}(#1079).- Upgrading from a version older than 1.6 with embedding jobs still queued: drain the queue on a 1.x release before upgrading past this version — the pre-1.6 job compatibility shims were removed (#1056).
🙏 Thanks
This cycle was a focused maintenance sprint by the core team, but it stands on the community's shoulders: thank you to everyone who reported the issues that shaped the cleanup backlog and the release checklist — your reports are what turned a "refactor" into a list of real bugs to fix. Special mention to the contributors whose earlier security work (#1042, #1046, #1049) set the quality bar this release enforces in CI.
Full details in the CHANGELOG.