Olava-only lockdown: Anthropic and Gemini stripped from model picker

A -283/+99 commit across 22 files that commits the fork to a single-provider product. The model picker now shows only "Olava-001", the API-key entry UI is gone entirely, all defaults route to `olava-extract`, and the LLM router coerces any non-Olava model ID (from stale localStorage or DB rows) back to the default at the server layer.

brandinginfrastructure

The coercion happens in backend/src/lib/llm/index.ts via a new coerceToOlava() wrapper applied before every streamChatWithTools and completeText dispatch. If providerForModel() throws on an unknown ID, or returns something other than "olava", the params object is rebaked with DEFAULT_MAIN_MODEL. This is a pragmatic defense against old gemini-3-flash-preview or claude-sonnet-4-6 values lingering in the database from before the migration.

DEFAULT_MAIN_MODEL, DEFAULT_TITLE_MODEL, and DEFAULT_TABULAR_MODEL in models.ts all point to "olava-extract". The updateApiKey endpoint is removed - no callers remain because users no longer bring their own keys. Olava is configured server-side via OLAVA_BASE_URL and OLAVA_AUTH_TOKEN, and the ApiKeyMissingModal text now explains this instead of prompting for a key.

Brand sweep: Finch renamed to Olava in startup logs, system prompts, the DOCX tracked-changes author field, Workflows source column labels, search class names, sidebar title, and legal links pointed to onit.com/services-agreement/ and onit.com/privacy-cookies/.

claude.ts and gemini.ts still exist in the codebase but aren't exercised in production. Any downstream commits from this fork that reference Anthropic/Gemini message shapes may be dead paths.

So what Skip this commit entirely if your fork keeps multi-provider routing - it's designed to delete that. The useful signal here is diagnostic: reading nwhitehouse's later commits with the knowledge that they're tested against Olava only helps you understand which behaviors are model-specific and which are structural. The `coerceToOlava` pattern itself - server-side ID coercion as a migration safety net - is portable if you ever need to retire a model ID cleanly.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

1 commit from nwhitehouse/mike, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
cef8954a Pre-launch polish: Olava-001 sole model, Finch→Olava brand, onit.com legal links Nick Whitehouse 2026-05-01 ↗ GitHub
commit body
- Strip Anthropic + Gemini from model picker; only "Olava-001" (id stays olava-extract)
- Defaults across frontend + backend now route to olava-extract
- Server-side coercion: any non-Olava model id rewritten to default, defends against stale localStorage / DB rows
- Drop API-key input UI from /account/models; updateApiKey removed (no callers)
- Rename Finch→Olava in titles, sidebar, logo, system prompts, DOCX author, Workflows source column, search class names
- Signup terms→onit.com/services-agreement/, privacy→onit.com/privacy-cookies/

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-118.md from inside the repo you want the changes in.

⬇ Download capture-thread-118.md