Skip to content

Commit 3f039d0

Browse files
committed
fix: Use ad_token_provider for automatic token refresh
- Updated orchestrator.py to use ad_token_provider instead of credential - This ensures tokens are refreshed automatically when they expire - Eliminates need to restart ACI container when managed identity tokens go stale - Updated requirements.txt with agent-framework 1.0.0b260106 and dependencies
1 parent 2ce9ee5 commit 3f039d0

2 files changed

Lines changed: 32 additions & 20 deletions

File tree

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
azure-identity==1.25.0
1+
azure-identity==1.25.1
22
# Flask[async]==2.3.2
3-
openai==2.0.1
4-
azure-search-documents==11.7.0b1
5-
azure-storage-blob==12.26.0
6-
python-dotenv==1.1.1
3+
openai==2.14.0
4+
azure-search-documents==11.7.0b2
5+
azure-storage-blob==12.27.1
6+
python-dotenv==1.2.1
77
azure-cosmos==4.9.0
8-
azure-ai-projects==1.0.0
8+
azure-ai-projects==2.0.0b2
99
azure-ai-inference==1.0.0b9
1010
quart==0.20.0
11-
uvicorn==0.37.0
12-
aiohttp==3.12.15
11+
uvicorn==0.38.0
12+
aiohttp==3.13.2
1313
gunicorn==23.0.0
14-
pydantic==2.11.10
15-
pydantic-settings==2.10.1
14+
pydantic==2.12.5
15+
pydantic-settings==2.12.0
1616
flake8==7.3.0
1717
black==25.9.0
1818
autoflake==2.3.1
1919
isort==6.1.0
20-
opentelemetry-exporter-otlp-proto-grpc
20+
opentelemetry-exporter-otlp-proto-grpc==1.39.1
2121
opentelemetry-exporter-otlp-proto-http
22-
opentelemetry-exporter-otlp-proto-grpc
2322
azure-monitor-events-extension
24-
opentelemetry-sdk==1.37.0
25-
opentelemetry-api==1.37.0
26-
opentelemetry-semantic-conventions==0.58b0
27-
opentelemetry-instrumentation==0.58b0
28-
azure-monitor-opentelemetry==1.8.1
23+
opentelemetry-sdk==1.39.1
24+
opentelemetry-api==1.39.1
25+
opentelemetry-semantic-conventions==0.60b1
26+
opentelemetry-instrumentation
27+
azure-monitor-opentelemetry==1.8.1
28+
agent-framework==1.0.0b260106

content-gen/src/backend/orchestrator.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
import re
2121
from typing import Any, AsyncIterator, Optional, cast
2222

23+
# Token endpoint for Azure Cognitive Services (used for Azure OpenAI)
24+
TOKEN_ENDPOINT = "https://cognitiveservices.azure.com/.default"
25+
2326
from agent_framework import (
2427
ChatAgent,
2528
ChatMessage,
@@ -286,13 +289,22 @@ def _get_chat_client(self) -> AzureOpenAIChatClient:
286289
if not endpoint:
287290
raise ValueError("AZURE_OPENAI_ENDPOINT is not configured")
288291

289-
# Use DefaultAzureCredential for RBAC authentication
290-
logger.info("Using DefaultAzureCredential for Azure OpenAI")
292+
# Use ad_token_provider for automatic token refresh
293+
# This ensures tokens are refreshed automatically when they expire,
294+
# avoiding 401 errors that require container restarts
295+
credential = DefaultAzureCredential()
296+
297+
def get_token() -> str:
298+
"""Token provider callable - invoked for each request to ensure fresh tokens."""
299+
token = credential.get_token(TOKEN_ENDPOINT)
300+
return token.token
301+
302+
logger.info("Using DefaultAzureCredential with ad_token_provider for Azure OpenAI")
291303
self._chat_client = AzureOpenAIChatClient(
292304
endpoint=endpoint,
293305
deployment_name=app_settings.azure_openai.gpt_model,
294306
api_version=app_settings.azure_openai.api_version,
295-
credential=DefaultAzureCredential(),
307+
ad_token_provider=get_token,
296308
)
297309
return self._chat_client
298310

0 commit comments

Comments
 (0)