f52feed1ef
Azure Foundry's OpenAI-compatible Responses surface rejects the post-tool follow-up payload with HTTP 400 `invalid_payload` when a replayed encrypted `reasoning` item is sent alongside `function_call` / `function_call_output`. The initial function-call request and ordinary multi-turn continuity are both accepted, so the failure only appears after the first tool executes. Detect the Foundry endpoint in `ResponsesApiTransport.build_kwargs` and drop only the encrypted reasoning replay on that follow-up turn, leaving function_call / function_call_output continuity intact. Salvage of #59981, rebuilt on current main. Same root cause and fix direction as the original, which was correct; this version resolves three defects: - No `chat_completion_helpers.py` change. main already forwards `provider` and `base_url` to the Responses transport, so the original's re-added arguments produced `SyntaxError: keyword argument repeated: provider` on merge. Dropping the hunk removed the syntax error and the conflict. - Host matching uses `utils.base_url_host_matches`, not a substring test. `".services.ai.azure.com" in base_url` also matches URLs carrying the domain in a path or query segment, which would silently disable reasoning replay on an unrelated provider. - The post-tool predicate tests the trailing messages, not the whole history. Scanning for any tool call plus any tool result made it sticky: one tool call early in a conversation suppressed reasoning on every later turn. - Tool calls pair on `call_id` as well as `id`. Responses histories carry the function call id in `call_id` while `id` holds the response item id (`fc_...`). Identity is resolved via the converter's own `_split_responses_tool_id`, covering composite `"call_x|fc_y"` ids and bare `fc_` ids on both sides of the pairing. Tests: 27 cases across the transport and the live `build_api_kwargs` bridge, including six parametrized tool-call id shapes, non-Foundry host lookalikes, the sticky-history guard, parallel tool results, and an unpaired tool result. Each guard was confirmed to catch its defect by reverting the fix. Verified with `scripts/run_tests.sh tests/agent/ tests/run_agent/`: 532 files, 5602 tests passed, 0 failed. Not verified against a live Azure Foundry endpoint — no credentials. The original HTTP 400 reproduction and post-fix Foundry Project / Azure Container Apps harness runs are @AshuJoshi's, from #59981. This change is verified at the payload-construction layer only. Closes #59981. Co-authored-by: Ashu Joshi <AshuJoshi@users.noreply.github.com>