Skip to content

Commit d0f7c1e

Browse files
committed
Refactor token provider usage for Azure services
Replaces direct calls to config.get_access_token() with a dedicated ad_token_provider method in both settings and reasoning agent classes. This improves consistency and encapsulation of token retrieval logic for Azure Cognitive Services and management APIs.
1 parent ac2fdfb commit d0f7c1e

File tree

3 files changed

+51
-34
lines changed

3 files changed

+51
-34
lines changed

src/backend/v3/common/services/foundry_service.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import re
33
from typing import Any, Dict, List
44

5-
#from git import List
5+
# from git import List
66
import aiohttp
77
from azure.ai.projects.aio import AIProjectClient
88
from common.config.app_config import config
@@ -44,7 +44,6 @@ async def get_connection(self, name: str) -> Dict[str, Any]:
4444
# -----------------------
4545
# Model validation methods
4646
# -----------------------
47-
4847
async def list_model_deployments(self) -> List[Dict[str, Any]]:
4948
"""
5049
List all model deployments in the Azure AI project using the REST API.
@@ -55,19 +54,23 @@ async def list_model_deployments(self) -> List[Dict[str, Any]]:
5554

5655
try:
5756
# Get Azure Management API token (not Cognitive Services token)
58-
token = await config.get_access_token()
57+
credential = config.get_azure_credentials()
58+
token = credential.get_token(config.AZURE_MANAGEMENT_SCOPE)
59+
5960

6061
# Extract Azure OpenAI resource name from endpoint URL
6162
openai_endpoint = config.AZURE_OPENAI_ENDPOINT
6263
# Extract resource name from URL like "https://aisa-macae-d3x6aoi7uldi.openai.azure.com/"
63-
match = re.search(r'https://([^.]+)\.openai\.azure\.com', openai_endpoint)
64+
match = re.search(r"https://([^.]+)\.openai\.azure\.com", openai_endpoint)
6465
if not match:
65-
self.logger.error(f"Could not extract resource name from endpoint: {openai_endpoint}")
66+
self.logger.error(
67+
f"Could not extract resource name from endpoint: {openai_endpoint}"
68+
)
6669
return []
67-
70+
6871
openai_resource_name = match.group(1)
6972
self.logger.info(f"Using Azure OpenAI resource: {openai_resource_name}")
70-
73+
7174
# Query Azure OpenAI resource deployments
7275
url = (
7376
f"https://management.azure.com/subscriptions/{self.subscription_id}/"

src/backend/v3/config/settings.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,20 @@ def __init__(self):
3434
# Create credential
3535
self.credential = config.get_azure_credentials()
3636

37+
def ad_token_provider(self) -> str:
38+
token = self.credential.get_token(config.AZURE_COGNITIVE_SERVICES)
39+
return token.token
40+
3741
async def create_chat_completion_service(self, use_reasoning_model: bool=False):
3842
"""Create Azure Chat Completion service."""
3943
model_name = (
4044
self.reasoning_model if use_reasoning_model else self.standard_model
4145
)
42-
46+
# Create Azure Chat Completion service
4347
return AzureChatCompletion(
4448
deployment_name=model_name,
4549
endpoint=self.endpoint,
46-
ad_token_provider= await config.get_access_token(),
50+
ad_token_provider=self.ad_token_provider,
4751
)
4852

4953
def create_execution_settings(self):

src/backend/v3/magentic_agents/reasoning_agent.py

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,31 +18,39 @@ class ReasoningAgentTemplate(MCPEnabledBase):
1818
No Azure AI Agents client is needed here. We only need a token provider for SK.
1919
"""
2020

21-
def __init__(self, agent_name: str,
22-
agent_description: str,
23-
agent_instructions: str,
24-
model_deployment_name: str,
25-
azure_openai_endpoint: str,
26-
search_config: SearchConfig | None = None,
27-
mcp_config: MCPConfig | None = None) -> None:
21+
def __init__(
22+
self,
23+
agent_name: str,
24+
agent_description: str,
25+
agent_instructions: str,
26+
model_deployment_name: str,
27+
azure_openai_endpoint: str,
28+
search_config: SearchConfig | None = None,
29+
mcp_config: MCPConfig | None = None,
30+
) -> None:
2831
super().__init__(mcp=mcp_config)
2932
self.agent_name = agent_name
3033
self.agent_description = agent_description
3134
self.agent_instructions = agent_instructions
3235
self._model_deployment_name = model_deployment_name
3336
self._openai_endpoint = azure_openai_endpoint
34-
self.search_config = search_config
37+
self.search_config = search_config
3538
self.reasoning_search: ReasoningSearch | None = None
3639
self.logger = logging.getLogger(__name__)
3740

41+
def ad_token_provider(self) -> str:
42+
credential = config.get_azure_credentials()
43+
token = credential.get_token(config.AZURE_COGNITIVE_SERVICES)
44+
return token.token
45+
3846
async def _after_open(self) -> None:
3947
self.kernel = Kernel()
4048

41-
49+
# Add Azure OpenAI Chat Completion service
4250
chat = AzureChatCompletion(
4351
deployment_name=self._model_deployment_name,
4452
endpoint=self._openai_endpoint,
45-
ad_token_provider= await config.get_access_token()
53+
ad_token_provider=self.ad_token_provider,
4654
)
4755
self.kernel.add_service(chat)
4856

@@ -63,34 +71,36 @@ async def _after_open(self) -> None:
6371
kernel=self.kernel,
6472
name=self.agent_name,
6573
description=self.agent_description,
66-
instructions=self.agent_instructions
74+
instructions=self.agent_instructions,
6775
)
68-
76+
6977
async def invoke(self, message: str):
7078
"""Invoke the agent with a message."""
7179
if not self._agent:
7280
raise RuntimeError("Agent not initialized. Call open() first.")
73-
81+
7482
async for response in self._agent.invoke(message):
7583
yield response
76-
84+
85+
7786
# Backward‑compatible factory
7887
async def create_reasoning_agent(
79-
agent_name: str,
80-
agent_description: str,
81-
agent_instructions: str,
82-
model_deployment_name: str,
83-
azure_openai_endpoint: str,
84-
search_config: SearchConfig | None = None,
85-
mcp_config: MCPConfig | None = None) -> ReasoningAgentTemplate:
88+
agent_name: str,
89+
agent_description: str,
90+
agent_instructions: str,
91+
model_deployment_name: str,
92+
azure_openai_endpoint: str,
93+
search_config: SearchConfig | None = None,
94+
mcp_config: MCPConfig | None = None,
95+
) -> ReasoningAgentTemplate:
8696
agent = ReasoningAgentTemplate(
87-
agent_name=agent_name,
88-
agent_description=agent_description,
97+
agent_name=agent_name,
98+
agent_description=agent_description,
8999
agent_instructions=agent_instructions,
90100
model_deployment_name=model_deployment_name,
91101
azure_openai_endpoint=azure_openai_endpoint,
92-
search_config= search_config,
93-
mcp_config=mcp_config
102+
search_config=search_config,
103+
mcp_config=mcp_config,
94104
)
95105
await agent.open()
96106
return agent

0 commit comments

Comments
 (0)