Skip to content

Commit e9e1f2e

Browse files
authored
Merge pull request #14 from John-Lin/refactor/remove-azure-client
Refactor/remove azure client
2 parents 60f2f79 + d2495af commit e9e1f2e

3 files changed

Lines changed: 11 additions & 53 deletions

File tree

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,12 @@ export OPENAI_API_KEY=""
4343
export OPENAI_MODEL="gpt-5.4"
4444
```
4545

46-
If you are using Azure OpenAI, set these instead:
46+
If you are using Azure OpenAI (v1 API), set these instead:
4747

4848
```
49-
export AZURE_OPENAI_API_KEY=""
50-
export AZURE_OPENAI_ENDPOINT="https://<myopenai>.azure.com/"
49+
export OPENAI_API_KEY=""
50+
export OPENAI_BASE_URL="https://<resource-name>.openai.azure.com/openai/v1/"
5151
export OPENAI_MODEL="gpt-5.4"
52-
export OPENAI_API_VERSION="2025-03-01-preview"
5352
```
5453

5554
## MCP Server Configuration (Optional)

bot/agents.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from agents.mcp import MCPServerStreamableHttp
1313
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
1414
from agents.models.openai_responses import OpenAIResponsesModel
15-
from openai import AsyncAzureOpenAI
15+
from agents.tracing import set_tracing_disabled
1616
from openai import AsyncOpenAI
1717

1818
DEFAULT_INSTRUCTIONS = (
@@ -25,26 +25,22 @@
2525
MAX_TURNS = 10
2626
MCP_SESSION_TIMEOUT_SECONDS = 30.0
2727

28+
set_tracing_disabled(True)
29+
2830

2931
def _get_model() -> OpenAIResponsesModel | OpenAIChatCompletionsModel:
3032
"""Create an OpenAI model from environment variables.
3133
34+
Uses the standard OpenAI client, which works with both OpenAI and
35+
Azure OpenAI v1 API (via OPENAI_BASE_URL + OPENAI_API_KEY).
36+
3237
OPENAI_API_TYPE controls which API the model uses:
3338
- "responses" (default): OpenAI Responses API — recommended by the SDK
34-
- "chat_completions": Chat Completions API — use for Azure OpenAI or compatible providers
39+
- "chat_completions": Chat Completions API
3540
"""
3641
model_name = os.getenv("OPENAI_MODEL", "gpt-5.4")
3742
api_type = os.getenv("OPENAI_API_TYPE", "responses")
38-
39-
client: AsyncOpenAI
40-
if os.getenv("AZURE_OPENAI_API_KEY") and os.getenv("AZURE_OPENAI_ENDPOINT"):
41-
client = AsyncAzureOpenAI(
42-
api_key=os.environ["AZURE_OPENAI_API_KEY"],
43-
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
44-
api_version=os.getenv("OPENAI_API_VERSION", "2025-04-01-preview"),
45-
)
46-
else:
47-
client = AsyncOpenAI()
43+
client = AsyncOpenAI()
4844

4945
if api_type == "chat_completions":
5046
return OpenAIChatCompletionsModel(model=model_name, openai_client=client)

tests/test_agents.py

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,59 +22,22 @@ def _mock_model(monkeypatch):
2222

2323

2424
class TestGetModel:
25-
def test_uses_azure_when_both_azure_env_vars_present(self, monkeypatch):
26-
monkeypatch.setenv("AZURE_OPENAI_API_KEY", "azure-key")
27-
monkeypatch.setenv("AZURE_OPENAI_ENDPOINT", "https://my.azure.com")
28-
monkeypatch.delenv("OPENAI_API_VERSION", raising=False)
29-
30-
with patch("bot.agents.AsyncAzureOpenAI") as mock_azure, patch("bot.agents.AsyncOpenAI") as mock_openai:
31-
mock_azure.return_value = MagicMock()
32-
_get_model()
33-
mock_azure.assert_called_once()
34-
mock_openai.assert_not_called()
35-
36-
def test_uses_standard_openai_when_only_api_key_set(self, monkeypatch):
37-
monkeypatch.setenv("AZURE_OPENAI_API_KEY", "azure-key")
38-
monkeypatch.delenv("AZURE_OPENAI_ENDPOINT", raising=False)
39-
40-
with patch("bot.agents.AsyncAzureOpenAI") as mock_azure, patch("bot.agents.AsyncOpenAI") as mock_openai:
41-
mock_openai.return_value = MagicMock()
42-
_get_model()
43-
mock_openai.assert_called_once()
44-
mock_azure.assert_not_called()
45-
46-
def test_uses_standard_openai_when_no_azure_vars(self, monkeypatch):
47-
monkeypatch.delenv("AZURE_OPENAI_API_KEY", raising=False)
48-
monkeypatch.delenv("AZURE_OPENAI_ENDPOINT", raising=False)
49-
50-
with patch("bot.agents.AsyncAzureOpenAI") as mock_azure, patch("bot.agents.AsyncOpenAI") as mock_openai:
51-
mock_openai.return_value = MagicMock()
52-
_get_model()
53-
mock_openai.assert_called_once()
54-
mock_azure.assert_not_called()
55-
5625
def test_returns_responses_model_by_default(self, monkeypatch):
5726
monkeypatch.delenv("OPENAI_API_TYPE", raising=False)
58-
monkeypatch.delenv("AZURE_OPENAI_API_KEY", raising=False)
59-
monkeypatch.delenv("AZURE_OPENAI_ENDPOINT", raising=False)
6027

6128
with patch("bot.agents.AsyncOpenAI", return_value=MagicMock()):
6229
model = _get_model()
6330
assert isinstance(model, OpenAIResponsesModel)
6431

6532
def test_returns_responses_model_when_api_type_is_responses(self, monkeypatch):
6633
monkeypatch.setenv("OPENAI_API_TYPE", "responses")
67-
monkeypatch.delenv("AZURE_OPENAI_API_KEY", raising=False)
68-
monkeypatch.delenv("AZURE_OPENAI_ENDPOINT", raising=False)
6934

7035
with patch("bot.agents.AsyncOpenAI", return_value=MagicMock()):
7136
model = _get_model()
7237
assert isinstance(model, OpenAIResponsesModel)
7338

7439
def test_returns_chat_completions_model_when_api_type_is_chat_completions(self, monkeypatch):
7540
monkeypatch.setenv("OPENAI_API_TYPE", "chat_completions")
76-
monkeypatch.delenv("AZURE_OPENAI_API_KEY", raising=False)
77-
monkeypatch.delenv("AZURE_OPENAI_ENDPOINT", raising=False)
7841

7942
with patch("bot.agents.AsyncOpenAI", return_value=MagicMock()):
8043
model = _get_model()

0 commit comments

Comments
 (0)