v1.12.0

microsoft/VibeVoicev1.12.0Jul 12, 2026by lfnovo

AI Summary

A maintainability and correctness release focused on code cleanup, removing ~3,000 lines of dead code. It introduces live model discovery and a new API endpoint for provider metadata, along with improved error handling.

Key Highlights

  • ~3,000 lines of dead code removed (Streamlit-era cleanup).
  • Live Anthropic model discovery (dynamic, not hardcoded).
  • New `GET /api/providers` endpoint exposing provider metadata.
  • Improved API error codes (422 for config, 404 for missing resources).
  • KaTeX math rendering in chat.

Breaking Changes

  • API error codes changed: configuration errors now return 422 instead of 500.
  • Endpoint `POST /api/notebooks/{id}/context` removed.
  • Pre-1.6 embedding job compatibility shims removed.

New Features

  • Live Anthropic model discovery
  • Provider metadata API endpoint
  • KaTeX math rendering in chat
  • CI quality gates (ruff, mypy, production build)

Full Release Notes

**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-community` and `langchain-deepseek` removed, upper bounds on the langchain family, and an undeclared transitive dependency made explicit (#1073)

## ⚠️ Behavior changes for self-hosters

1. **API error codes are now accurate** — if you script against the API and matched on `500` for configuration mistakes, update your handling: configuration errors return `422`, missing resources `404`, provider rate limits `429`, upstream provider failures `502` (#1078).
2. **`POST /api/notebooks/{id}/context` was removed** — it duplicated `POST /api/chat/context` and had no known callers. If you used it, switch to `POST /api/chat/context` with body `{notebook_id, context_config}` (#1079).
3. **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](https://github.com/lfnovo/open-notebook/blob/main/CHANGELOG.md).