Skip to content

Preserve extraction reasoning defaults and support flat YAML syntax - #1226

Merged
ebhills merged 3 commits into
mainfrom
codex/ai-reasoning-default-always-none
Oct 10, 2026
Merged

ebhills merged 3 commits into
mainfrom
codex/ai-reasoning-default-always-none

Conversation

@ebhills

@ebhills ebhills commented Oct 10, 2026

Copy link
Copy Markdown
Collaborator

Linked issue

Refs #1217. This is the current-main follow-up to the isolated release patch in #1218. The remaining model-default cleanup stays in #1225.

What changes

On main, extraction can omit reasoning based on model capabilities and let the provider's default apply. This change makes extract.ai always send an effective effort, defaulting to none for every model, including future and unlisted names. Explicit caller, saved-model, and configuration settings retain their precedence.

  • Accept both reasoning: none and reasoning: {effort: none} in recipes and direct Python calls. Normalize scalars before applying overrides; Responses receives reasoning, and Chat Completions receives reasoning_effort.
  • Set the packaged Sol effort to none and remove generation's operation-level low override so configured model defaults remain effective.
  • Update schemas, documentation, provider-rejection tests, and saved-schema integration fixtures. Fixtures change only a deep local copy to the configured test model; shared saved definitions are not modified.

Retains the configuration foundation from #1200. The #1203/#1206 redesign, model-default migration, spreadsheet table work, package version bump, and deployments remain separate. Intended for the coordinated v1.20.5 release.

How it was verified

  • scripts/test-local.ps1: 2,998 passed, 6 skipped, 139 deselected; the sole failure was an older schema assertion that assumed reasoning could only be an object.
  • Updated that assertion to validate both forms. Final targeted rerun of TestWrangleSchema and test_generated_recipe_schema_preserves_reasoning_forms: 4 passed. The full suite was not rerun after this test-only correction.
  • Coverage compares complete outgoing payloads for scalar/nested YAML and Python calls across both protocols, including saved/configured overrides, legacy argument precedence, invalid types, generated schemas, and provider rejection without fallback.
  • scripts/check_pytest_local_config.py and git diff --check pass. Branch is current with main at 4ddeceb9; tested implementation head is f7d90135.

Provider requests in the new tests are mocked. Live provider checks and GitHub CI on this PR remain separate validation.

Compatibility and risk

Scalar reasoning is additive; nested options, saved-model selection, output shape, and verbosity handling remain intact. A provider that rejects the requested effort now returns its error instead of receiving a request with reasoning silently omitted. Callers using incompatible models may need an explicit supported effort or the separate model migration in #1225.

Rollback: revert this PR on main; that restores the prior capability-gated reasoning behavior and object-only recipe syntax.

Ready-for-review checklist

  • One human delivery owner is assigned: Eric (ebhills)
  • The linked issue is correct; intended release is v1.20.5 (no GitHub milestone assigned)
  • The branch is current with main and has no merge conflicts
  • Focused tests pass
  • New or changed behavior has direct test coverage
  • Documentation/schema/configuration is updated where applicable
  • The PR contains no unrelated changes
  • The PR description reflects the branch's current scope and latest validation
  • GitHub CI passes on the final PR head
  • One primary reviewer is requested only when this PR is ready

Keep Draft until CI and review readiness are confirmed. Eric owns the next action: verify CI, mark Ready, and request one primary reviewer.

See the pull request workflow.

@ebhills ebhills self-assigned this Oct 10, 2026
@ebhills
ebhills marked this pull request as ready for review October 10, 2026 01:50
@ebhills
ebhills merged commit 1d5e05a into main Oct 10, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant