Skip to content

fix(responses): disable parallel tools on first inference - #711

Merged
leseb merged 4 commits into
praxis-proxy:mainfrom
skamenan7:bug/677-agentic-loop-first-inference-parallel
Aug 13, 2026
Merged

fix(responses): disable parallel tools on first inference#711
leseb merged 4 commits into
praxis-proxy:mainfrom
skamenan7:bug/677-agentic-loop-first-inference-parallel

Conversation

@skamenan7

Copy link
Copy Markdown
Contributor

Summary

Forces the agentic loop's first provider request to send parallel_tool_calls:false when the client omits the field or explicitly sends true. Provider-visible request mutations now mark the Responses state for outbound serialization, while an already-false request keeps byte-exact passthrough.

  • agentic_loop marks changed provider-visible fields as requiring a request-body rebuild.
  • openai_responses_proxy rebuilds only when the explicit request-body state requires it.
  • Unit and configured integration tests cover omitted, explicit true, and byte-exact explicit false behavior.

Related issue

Closes #677

Validation

  • Unit tests
  • Integration or functional tests
  • make lint

Validation run:

  • cargo test -p praxis-ai-apis agentic_loop (46 passed)
  • cargo test -p praxis-tests-integration --test suite examples::agentic_loop (6 passed)
  • make test
  • Built and launched the real praxis-ai server with the agentic-loop example configuration and a controlled local inference backend. The captured provider-bound requests show omitted and explicit true reaching first inference as false; explicit false retained the same request-body length and SHA-256 across the proxy.

Checklist

  • I reviewed every changed line and can explain the change.
  • New capabilities include an example config and functional example test.
  • User-facing behavior and generated documentation are updated.
  • Performance-sensitive changes include appropriate benchmark or load-test evidence.
  • Commits are signed and include a Signed-off-by trailer.

Breaking changes

None.

Signed-off-by: Sumanth Kamenani <skamenan@redhat.com>
@skamenan7
skamenan7 requested a review from leseb August 11, 2026 15:09
Signed-off-by: Sumanth Kamenani <skamenan@redhat.com>
@skamenan7
skamenan7 marked this pull request as ready for review August 13, 2026 13:09
@skamenan7
skamenan7 requested a review from a team August 13, 2026 13:09
skamenan7 and others added 2 commits August 13, 2026 09:09
Add a controlled synthetic scenario and recording that proves the
agentic loop injects `parallel_tool_calls: false` into the upstream
request when the client omits it. This closes the inference fixture
coverage gap for the dirty-marker implementation.

- Add `agentic-loop-fixture.yaml` example config (replay-safe subset
  of the agentic loop pipeline without external callout filters)
- Add `agentic_loop` and `iterative_request_router` to the replay
  filter allowlist (they make no external callouts)
- Add scenario, recording, and coverage.yaml entry for
  `responses.agentic.parallel_tool_calls`
- Update the snapshot test in `coverage.rs` for the new scope,
  feature, scenario, and recording counts
- Regenerate example and inference READMEs

Signed-off-by: Sébastien Han <seb@redhat.com>
@leseb
leseb enabled auto-merge August 13, 2026 14:07
@leseb
leseb added this pull request to the merge queue Aug 13, 2026
Merged via the queue into praxis-proxy:main with commit 7e80461 Aug 13, 2026
23 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.

The agentic loop's first inference request still permits parallel tool calls

2 participants