v1.12.0
drizzle-team/drizzle-ormv1.12.0Jul 12, 2026by lfnovo
AI Summary
v1.12.0 focuses on maintainability and correctness, removing ~3,000 lines of dead code, improving API error codes, and adding live Anthropic model discovery.
Key Highlights
- ~3,000 lines of dead code removed, including Streamlit-era service layer.
- Improved API error codes: Config errors return 422, missing resources 404.
- Live Anthropic model discovery via API instead of hardcoded lists.
- New endpoint `GET /api/providers` exposes provider metadata.
Breaking Changes
- API error codes are now accurate: Configuration errors return 422.
- `POST /api/notebooks/{id}/context` removed (use `POST /api/chat/context`).
- Upgrading from <1.6 with embedding jobs requires draining the queue first.
New Features
- Translations interpolate correctly in all 14 languages.
- Podcast dialog closes deterministically after episode list refreshes.
- CI gates on mypy at zero errors.
- Provider registry consolidated from 6 locations to 2.
- Single Dockerfile used for both regular and single-container image variants.
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).