fix(llm): pass the output-token cap and a configured endpoint to Azure OpenAI (#1584, #1600)

- max_tokens reaches the Azure deployment
- a tier's backend_url is used as the Azure endpoint, else AZURE_OPENAI_ENDPOINT
This commit is contained in:
Yijia-Xiao
2026-10-27 08:00:17 +00:00
parent b78f136ba3
commit 347974a000
2 changed files with 33 additions and 2 deletions
+28
View File
@@ -0,0 +1,28 @@
"""Azure OpenAI takes the run's settings like every other provider."""
from __future__ import annotations
import pytest
from tradingagents.llm_clients.factory import create_llm_client
@pytest.fixture(autouse=True)
def _azure_env(monkeypatch):
monkeypatch.setenv("AZURE_OPENAI_API_KEY", "test-key")
monkeypatch.setenv("AZURE_OPENAI_ENDPOINT", "https://from-env.openai.azure.com/")
monkeypatch.setenv("OPENAI_API_VERSION", "2025-03-01-preview")
monkeypatch.delenv("AZURE_OPENAI_DEPLOYMENT_NAME", raising=False)
@pytest.mark.unit
def test_the_output_token_cap_reaches_the_deployment():
llm = create_llm_client("azure", "gpt-5.5", max_tokens=1234).get_llm()
assert llm.max_tokens == 1234
@pytest.mark.unit
def test_an_explicit_endpoint_wins_over_the_environment():
llm = create_llm_client("azure", "gpt-5.5", base_url="https://deep.openai.azure.com/").get_llm()
assert llm.azure_endpoint == "https://deep.openai.azure.com/"
assert create_llm_client("azure", "gpt-5.5").get_llm().azure_endpoint == "https://from-env.openai.azure.com/"
+5 -2
View File
@@ -6,7 +6,7 @@ from langchain_openai import AzureChatOpenAI
from .base_client import BaseLLMClient, normalize_content
_PASSTHROUGH_KWARGS = (
"timeout", "max_retries", "api_key", "reasoning_effort", "temperature",
"timeout", "max_retries", "api_key", "reasoning_effort", "temperature", "max_tokens",
"callbacks", "http_client", "http_async_client",
)
@@ -23,7 +23,8 @@ class AzureOpenAIClient(BaseLLMClient):
Requires environment variables:
AZURE_OPENAI_API_KEY: API key
AZURE_OPENAI_ENDPOINT: Endpoint URL (e.g. https://<resource>.openai.azure.com/)
AZURE_OPENAI_ENDPOINT: Endpoint URL (e.g. https://<resource>.openai.azure.com/),
unless backend_url gives one
AZURE_OPENAI_DEPLOYMENT_NAME: Deployment name
OPENAI_API_VERSION: API version (e.g. 2025-03-01-preview)
"""
@@ -39,6 +40,8 @@ class AzureOpenAIClient(BaseLLMClient):
"model": self.model,
"azure_deployment": os.environ.get("AZURE_OPENAI_DEPLOYMENT_NAME", self.model),
}
if self.base_url: # a configured endpoint, else AZURE_OPENAI_ENDPOINT
llm_kwargs["azure_endpoint"] = self.base_url
for key in _PASSTHROUGH_KWARGS:
if key in self.kwargs: