c7aa01ff06
Switching to a GPT-5.x model on api.openai.com while the session carried a stale chat_completions api_mode (e.g. from a prior openrouter default) left the request on /v1/chat/completions, which 400s with "Function tools with reasoning_effort are not supported" once the switched model's reasoning is applied. switch_model() only re-derived api_mode inside the provider-changed branch, so a same-provider/carryover switch kept the wrong wire protocol. Add host_mandated_api_mode(base_url): the endpoints that accept exactly one protocol (api.openai.com -> codex_responses, api.anthropic.com / *…/anthropic* -> anthropic_messages, api.kimi.com /coding -> anthropic_messages, bedrock-runtime -> bedrock_converse), matched by EXACT hostname so lookalike hosts and path-segment spoofs are rejected (#32243). switch_model() now uses it to override a stale carried api_mode, not merely fill an empty one; determine_api_mode() shares the same helper. Credit sjiangtao2024 (#15880) for the recompute-before-validation approach; this strengthens it from fill-if-empty to a host-mandated override. Co-Authored-By: sjiangtao2024 <siage@139.com>