Skip to content

v0.10.0 — Reasoning-model support

Choose a tag to compare

@Rynaro Rynaro released this 14 Jun 22:46
· 57 commits to main since this release
0b0a40c

What's new

The OpenAI adapter now works with reasoning models (the gpt-5 family and o-series), not just gpt-4-class models — and if a model still under-produces, the bot tells you instead of failing silently.

  • Reasoning-model tool calls. gpt-5 / o-series models do interleaved thinking; forcing a specific function short-circuited that into an empty {"findings": []} call (the "succeeds, zero findings, ~1s" symptom). The adapter now sends tool_choice: "required" for reasoning families so the model reasons, then calls the single review tool. Classic models (gpt-4o, gpt-4.1) are byte-identical — no change. Override with OPENAI_TOOL_CHOICE (auto | forced | required).

  • Empty-review safety net. If a reasoning model returns zero findings after being called on a real diff, the check run and comment reply now explain it instead of a silent "no issues found":

    ℹ️ Review produced no findings. The configured model (gpt-5.4-nano) is a reasoning model and may be under-producing with this review flow. If you expected findings, try openai/gpt-4.1, or set OPENAI_TOOL_CHOICE=required. See docs/model-compatibility.md.

    A classic model returning zero findings is still treated as a legitimately clean PR.

  • New docs/model-compatibility.md — which model families work with the adapter, the empty-review symptom, and the remedies (OPENAI_TOOL_CHOICE, generation.max_output_tokens, or gpt-4.1).

A shared isReasoningModel() detector now drives both the token-param and tool-choice selection. 733 tests across 49 files, 15/15 deterministic eval scenarios, typecheck/lint green.

Upgrade notes

No registration or config changes required. Update a deployed stack with:

bin/prisma --update --sync --tag v0.10.0 --yes

To run a gpt-5 / o-series model, set model: openai/gpt-5.4-nano (or similar) and watch findings_count in the worker logs on a substantive PR to confirm it emits findings. If a reasoning model still returns empty, the check-run notice points you at the remedies; openai/gpt-4.1 remains the proven choice for the forced-function-call flow.

Known minor follow-up: the empty-review hint fires on the single-call path; chunked large-PR + reasoning-model + empty result is not yet hinted.

Full changelog: v0.9.0...v0.10.0 (PRs #26, #27)