refactor(examples): unify full-flow configs into B-shaped gateway - #975
Open
leseb wants to merge 3 commits into
Open
refactor(examples): unify full-flow configs into B-shaped gateway#975leseb wants to merge 3 commits into
leseb wants to merge 3 commits into
Conversation
Merge full-flow.yaml into full-flow-agentic.yaml as a single B-shaped gateway: POST /v1/responses runs through the terminal iterative_request_router for server-side file_search, while the Responses WebSocket (GET /v1/responses) and the non-Responses paths (/v1/prompts, /v1/embeddings, /v1/files, /v1/vector_stores) branch around the IRR via a conditions-gated headers host. A format-first guard rejects Chat Completions and Anthropic Messages bodies on /v1/responses with 404. The now-redundant full-flow.yaml is deleted. Migrate all full_flow, full_flow_agentic, session_replay, codex_websocket, and vLLM SDK references to the unified config; regenerate the examples README table; drop the stale skip-list entry. The config is a DRAFT gated on praxis-proxy#313 (file_search SSE streaming lifecycle): an ignored streaming placeholder test marks the post-praxis-proxy#313 expectation. Signed-off-by: Sébastien Han <seb@redhat.com>
Base advanced past the B-shaped gateway refactor. Resolve conflicts: keep full-flow.yaml deleted, migrate example tests onto full-flow-agentic.yaml, take the renumbered pre-IRR chain (with openai_stream_events intentionally absent), preserve the union of the full_flow tests, and #[ignore] the two file_search SSE-through-IRR streaming tests pending issue praxis-proxy#313. Signed-off-by: Sébastien Han <seb@redhat.com>
… passthrough Issue praxis-proxy#313 (file_search SSE streaming lifecycle) landed, so remove the DRAFT gating from the unified full-flow-agentic gateway. Add openai_stream_events as the first filter of the IRR inference step (per §5 of the praxis-proxy#313 spec) alongside max_stream_response_bytes so POST /v1/responses serves streaming (stream: true) clients through the IRR, and un-ignore the previously gated streaming integration tests. The unified config routes every POST /v1/responses through openai_file_search_callout, which exposed a regression: on an ordinary response with no file-search work, capture_response still re-serialized the body and stripped the upstream representation headers (ETag, Last-Modified, Content-Encoding, ...), defeating openai_responses_rehydrate's decision to decline rewriting a validator-bearing response. Make the passthrough predicate precise: skip finalization only when file search performed no transformation this round (no function_call was translated to a file_search_call, and the tool-call budget did not force any pending call to `incomplete`) and there is no accumulated file-search state to assemble. terminalize_all_pending_calls now reports whether it rewrote a call, so a budget-exhausted response is never mistaken for a passthrough and leaked to the client with a non-terminal file_search_call. Add focused callout unit tests (a passthrough preserves representation headers; a budget-exhausted native call is terminalized, not passed through) and keep the integration tests unchanged. praxis-proxy#1046 owns the broader consolidation of file-search finalization. Signed-off-by: Sébastien Han <seb@redhat.com>
leseb
marked this pull request as ready for review
September 11, 2026 08:13
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Merge the standalone
full-flow.yamlgateway intofull-flow-agentic.yamlas a single "B-shaped" config:POST /v1/responsesruns through the terminaliterative_request_routerfor server-side file_search, while the Responses WebSocket (GET /v1/responses) and the non-Responses paths (/v1/prompts,/v1/embeddings,/v1/files,/v1/vector_stores) branch around the IRR via aconditions-gatedheadershost, and a format-first guard rejects Chat Completions / Anthropic Messages bodies on/v1/responseswith 404. This is the smallest complete change because it deletes the now-redundantfull-flow.yaml, migrates every test and doc reference to the unified config in one pass, and regenerates the examples README. The config is a draft gated on #313 (file_search SSE streaming lifecycle); an#[ignore]d streaming placeholder test marks the post-#313 expectation.Related issue
Refs #313
Validation
cargo test -p praxis-tests-integration --test suitegreen forfull_flow(12),full_flow_agentic(6 + 1 ignored, file_search: SSE event emission for progress streaming #313),session_replay(9),codex_websocket(2);cargo xtask lint-example-tests→ 41 configs coveredmake lint(exit 0) andmake build(exit 0)Checklist
Signed-off-bytrailer.Breaking changes
Deletes the
full-flow.yamlexample config; external references must switch tofull-flow-agentic.yaml. This is a draft — do not merge until #313 lands and validates the file_search SSE streaming lifecycle.