From cb33c73418520bf38d83995c6e914ff42277eb10 Mon Sep 17 00:00:00 2001 From: molvikar Date: Mon, 4 May 2026 01:45:52 +0300 Subject: [PATCH] fix(run_agent): gate iteration-limit provider routing to OpenRouter --- run_agent.py | 5 ++++- tests/run_agent/test_run_agent.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/run_agent.py b/run_agent.py index 2e0baa2a47..a6ea2b1e72 100644 --- a/run_agent.py +++ b/run_agent.py @@ -10300,7 +10300,10 @@ class AIAgent: provider_preferences["order"] = self.providers_order if self.provider_sort: provider_preferences["sort"] = self.provider_sort - if provider_preferences: + if provider_preferences and ( + (self.provider or "").strip().lower() == "openrouter" + or self._is_openrouter_url() + ): summary_extra_body["provider"] = provider_preferences if summary_extra_body: diff --git a/tests/run_agent/test_run_agent.py b/tests/run_agent/test_run_agent.py index a0a11b1530..d663805f8f 100644 --- a/tests/run_agent/test_run_agent.py +++ b/tests/run_agent/test_run_agent.py @@ -2230,6 +2230,34 @@ class TestHandleMaxIterations: ] assert len(stub_ids) >= 1, f"No stub result for assistant tool_call: {stub_ids}" + def test_summary_omits_provider_preferences_for_non_openrouter(self, agent): + agent.base_url = "https://api.openai.com/v1" + agent._base_url_lower = agent.base_url.lower() + agent.provider = "openai" + agent.providers_allowed = ["Anthropic"] + agent.client.chat.completions.create.return_value = _mock_response(content="Summary") + agent._cached_system_prompt = "You are helpful." + + result = agent._handle_max_iterations([{"role": "user", "content": "do stuff"}], 60) + + assert result == "Summary" + kwargs = agent.client.chat.completions.create.call_args.kwargs + assert "provider" not in kwargs.get("extra_body", {}) + + def test_summary_keeps_provider_preferences_for_openrouter(self, agent): + agent.base_url = "https://openrouter.ai/api/v1" + agent._base_url_lower = agent.base_url.lower() + agent.provider = "openrouter" + agent.providers_allowed = ["Anthropic"] + agent.client.chat.completions.create.return_value = _mock_response(content="Summary") + agent._cached_system_prompt = "You are helpful." + + result = agent._handle_max_iterations([{"role": "user", "content": "do stuff"}], 60) + + assert result == "Summary" + kwargs = agent.client.chat.completions.create.call_args.kwargs + assert kwargs["extra_body"]["provider"]["only"] == ["Anthropic"] + def test_codex_summary_sanitizes_orphan_tool_results(self, agent): agent.api_mode = "codex_responses" agent.provider = "openai-codex"