OpenAI added as a third LLM provider with gpt-5.5 and gpt-5.4-nano
thegrif extends the two-provider Claude/Gemini setup to include OpenAI in a single commit. The change is additive across backend, frontend, and database, and leaves existing defaults in place.
The backend adapter in openai.ts follows the same shape as the Claude and Gemini drivers - a streaming tool-use loop plus a completeText path. Routing in llm/index.ts adds a provider === "openai" branch, and providerForModel in models.ts routes any model id starting with gpt-, o1-, o3-, or o4- to OpenAI. That prefix list covers future model releases without further changes.
Default models are untouched. gemini-3-flash-preview stays as DEFAULT_MAIN_MODEL and DEFAULT_TABULAR_MODEL. OpenAI only becomes the title model fallback when neither Gemini nor Claude keys are set, so existing users see no behavior change on upgrade.
The DB migration is handled two ways: 001_add_openai_api_key.sql uses add column if not exists for existing installs, while 000_one_shot_schema.sql is edited in place for fresh setups. Both paths land on the same schema.
Two things to check before pulling: the model ids gpt-5.5 and gpt-5.4-nano are what's committed, so verify they match OpenAI's current catalog. And streamOpenAI swallows JSON parse errors on streamed tool-call arguments with an empty catch returning {} - that's fine for the happy path, but tool failures will be opaque.
Spotted something wrong? Or know the PR text has fresher detail than the writeup above?