"""Test that _build_call_kwargs preserves max_tokens for OpenRouter endpoints. Regression test for #41035: OpenRouter free-tier credits exhausted when max_tokens was stripped, causing HTTP 402 and fallback to text-only model. """ import pytest from agent.auxiliary_client import _build_call_kwargs class TestOpenRouterMaxTokens: """max_tokens must be included for OpenRouter to prevent free-tier 402.""" def test_openrouter_provider_includes_max_tokens(self): """Direct openrouter provider keeps max_tokens.""" kwargs = _build_call_kwargs( provider="openrouter", model="openai/gpt-4o-mini", messages=[{"role": "user", "content": "test"}], max_tokens=2000, ) assert kwargs.get("max_tokens") == 2000 or kwargs.get("max_completion_tokens") == 2000 def test_openrouter_base_url_includes_max_tokens(self): """Custom endpoint with openrouter.ai base_url keeps max_tokens.""" kwargs = _build_call_kwargs( provider="openai", model="gpt-4o-mini", messages=[{"role": "user", "content": "test"}], max_tokens=2000, base_url="https://openrouter.ai/api/v1", ) assert kwargs.get("max_tokens") == 2000 or kwargs.get("max_completion_tokens") == 2000 def test_generic_provider_omits_max_tokens(self): """Generic OpenAI-compatible provider still omits max_tokens.""" kwargs = _build_call_kwargs( provider="openai", model="gpt-4o-mini", messages=[{"role": "user", "content": "test"}], max_tokens=2000, ) assert "max_tokens" not in kwargs def test_anthropic_compat_still_includes_max_tokens(self): """Anthropic-compatible endpoints still include max_tokens.""" kwargs = _build_call_kwargs( provider="minimax", model="MiniMax-Text-01", messages=[{"role": "user", "content": "test"}], max_tokens=4000, ) assert kwargs["max_tokens"] == 4000 def test_none_max_tokens_never_included(self): """max_tokens=None is never added regardless of provider.""" for provider, base_url in [ ("openrouter", None), ("openai", "https://openrouter.ai/api/v1"), ("minimax", None), ]: kwargs = _build_call_kwargs( provider=provider, model="test-model", messages=[{"role": "user", "content": "test"}], max_tokens=None, base_url=base_url, ) assert "max_tokens" not in kwargs, ( f"max_tokens should not be set when None for {provider}" )