Skip to content

Commit 1d289c6

Browse files
Merge branch 'dev-v4' into hb-psl-us-36353
2 parents d46364f + 9bd6f91 commit 1d289c6

21 files changed

Lines changed: 577 additions & 402 deletions

infra/main.bicep

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ module applicationInsights 'br/public:avm/res/insights/component:0.6.0' = if (en
376376
flowType: 'Bluefield'
377377
// WAF aligned configuration for Monitoring
378378
workspaceResourceId: enableMonitoring ? logAnalyticsWorkspaceResourceId : ''
379-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
380379
}
381380
}
382381

infra/main.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "0.41.2.15936",
9-
"templateHash": "576514245908514889"
9+
"templateHash": "7604025969554104872"
1010
},
1111
"name": "Multi-Agent Custom Automation Engine",
1212
"description": "This module contains the resources required to deploy the [Multi-Agent Custom Automation Engine solution accelerator](https://github.com/microsoft/Multi-Agent-Custom-Automation-Engine-Solution-Accelerator) for both Sandbox environments and WAF aligned environments.\n\n> **Note:** This module is not intended for broad, generic use, as it was designed by the Commercial Solution Areas CTO team, as a Microsoft Solution Accelerator. Feature requests and bug fix requests are welcome if they support the needs of this organization but may not be incorporated if they aim to make this module more generic than what it needs to be for its primary use case. This module will likely be updated to leverage AVM resource modules in the future. This may result in breaking changes in upcoming versions when these features are implemented.\n"
@@ -3709,8 +3709,7 @@
37093709
"flowType": {
37103710
"value": "Bluefield"
37113711
},
3712-
"workspaceResourceId": "[if(parameters('enableMonitoring'), if(variables('useExistingLogAnalytics'), createObject('value', parameters('existingLogAnalyticsWorkspaceId')), createObject('value', reference('logAnalyticsWorkspace').outputs.resourceId.value)), createObject('value', ''))]",
3713-
"diagnosticSettings": "[if(parameters('enableMonitoring'), createObject('value', createArray(createObject('workspaceResourceId', if(variables('useExistingLogAnalytics'), parameters('existingLogAnalyticsWorkspaceId'), reference('logAnalyticsWorkspace').outputs.resourceId.value)))), createObject('value', null()))]"
3712+
"workspaceResourceId": "[if(parameters('enableMonitoring'), if(variables('useExistingLogAnalytics'), createObject('value', parameters('existingLogAnalyticsWorkspaceId')), createObject('value', reference('logAnalyticsWorkspace').outputs.resourceId.value)), createObject('value', ''))]"
37143713
},
37153714
"template": {
37163715
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",

infra/main_custom.bicep

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,6 @@ module applicationInsights 'br/public:avm/res/insights/component:0.6.0' = if (en
375375
flowType: 'Bluefield'
376376
// WAF aligned configuration for Monitoring
377377
workspaceResourceId: enableMonitoring ? logAnalyticsWorkspaceResourceId : ''
378-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
379378
}
380379
}
381380

src/backend/pyproject.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ requires-python = ">=3.11"
77
dependencies = [
88
"azure-ai-evaluation==1.11.0",
99
"azure-ai-inference==1.0.0b9",
10-
"azure-ai-projects==2.0.0b3",
10+
"azure-ai-projects==2.0.0",
1111
"azure-cosmos==4.9.0",
1212
"azure-identity==1.24.0",
1313
"azure-monitor-events-extension==0.1.0",
@@ -32,8 +32,9 @@ dependencies = [
3232
"mcp==1.26.0",
3333
"werkzeug==3.1.5",
3434
"azure-core==1.38.0",
35-
"agent-framework-azure-ai==1.0.0b260130",
36-
"agent-framework-core==1.0.0b260130",
35+
"agent-framework-azure-ai==1.0.0rc4",
36+
"agent-framework-core==1.0.0rc4",
37+
"agent-framework-orchestrations==1.0.0b260311",
3738
"urllib3==2.6.3",
3839
"protobuf==5.29.6",
3940
"cryptography==46.0.5",

src/backend/requirements.txt

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,42 @@
1-
fastapi
2-
uvicorn
3-
autogen-agentchat==0.7.5
4-
azure-cosmos
5-
azure-monitor-opentelemetry
6-
azure-monitor-events-extension
7-
azure-identity
8-
python-dotenv
9-
python-multipart
10-
opentelemetry-api
11-
opentelemetry-sdk
12-
opentelemetry-exporter-otlp-proto-grpc
13-
opentelemetry-instrumentation-fastapi
14-
opentelemetry-instrumentation-openai
15-
opentelemetry-exporter-otlp-proto-http
1+
fastapi==0.116.1
2+
uvicorn==0.35.0
3+
azure-cosmos==4.9.0
4+
azure-monitor-opentelemetry==1.8.5
5+
azure-monitor-events-extension==0.1.0
6+
azure-identity==1.24.0
7+
python-dotenv==1.1.1
8+
python-multipart==0.0.22
9+
opentelemetry-api==1.39.0
10+
opentelemetry-sdk==1.39.0
11+
opentelemetry-exporter-otlp-proto-grpc==1.39.0
12+
opentelemetry-exporter-otlp-proto-http==1.39.0
13+
opentelemetry-instrumentation-fastapi==0.60b0
14+
opentelemetry-instrumentation-openai==0.46.2
1615

17-
semantic-kernel[azure]==1.39.4
18-
azure-ai-projects==1.0.0
19-
openai==1.105.0
20-
azure-ai-inference==1.0.0b9
21-
azure-search-documents
22-
azure-ai-evaluation
16+
azure-ai-projects==2.0.0
17+
openai==2.16.0
18+
azure-ai-inference==1.0.0b9
19+
azure-search-documents==11.5.3
20+
azure-ai-evaluation==1.11.0
21+
azure-core==1.38.0
2322

24-
opentelemetry-exporter-otlp-proto-grpc
23+
agent-framework-azure-ai==1.0.0rc4
24+
agent-framework-core==1.0.0rc4
25+
agent-framework-orchestrations==1.0.0b260311
2526

26-
# Date and internationalization
27-
babel>=2.9.0
27+
mcp==1.26.0
28+
werkzeug==3.1.5
29+
pylint-pydantic==0.3.5
30+
pexpect==4.9.0
31+
urllib3==2.6.3
32+
protobuf==5.29.6
33+
cryptography==46.0.5
34+
aiohttp==3.13.3
35+
pyasn1==0.6.2
36+
nltk==3.9.3
2837

2938
# Testing tools
30-
pytest>=8.2,<9 # Compatible version for pytest-asyncio
39+
pytest==8.4.1
3140
pytest-asyncio==0.24.0
3241
pytest-cov==5.0.0
3342

src/backend/uv.lock

Lines changed: 30 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/backend/v4/callbacks/response_handlers.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import re
99
from typing import Any
1010

11-
from agent_framework import ChatMessage
11+
from agent_framework import Message
1212

1313
from v4.config.settings import connection_config
1414
from v4.models.messages import (
@@ -64,22 +64,22 @@ def _extract_tool_calls_from_contents(contents: list[Any]) -> list[AgentToolCall
6464

6565
def agent_response_callback(
6666
agent_id: str,
67-
message: ChatMessage,
67+
message: Message,
6868
user_id: str | None = None,
6969
) -> None:
7070
"""
71-
Final (non-streaming) agent response callback using agent_framework ChatMessage.
71+
Final (non-streaming) agent response callback using agent_framework Message.
7272
"""
7373
agent_name = getattr(message, "author_name", None) or agent_id or "Unknown Agent"
7474
role = getattr(message, "role", "assistant")
7575

76-
# FIX: Properly extract text from ChatMessage
77-
# ChatMessage has a .text property that concatenates all TextContent items
76+
# FIX: Properly extract text from Message
77+
# Message has a .text property that concatenates all TextContent items
7878
text = ""
79-
if isinstance(message, ChatMessage):
79+
if isinstance(message, Message):
8080
text = message.text # Use the property directly
8181
else:
82-
# Fallback for non-ChatMessage objects
82+
# Fallback for non-Message objects
8383
text = str(getattr(message, "text", ""))
8484

8585
text = clean_citations(text or "")
@@ -125,8 +125,8 @@ async def streaming_agent_response_callback(
125125
# If text is None, don't fall back to str(update) as that would show object repr
126126
# Just skip if there's no actual text content
127127
if chunk_text is None:
128-
# Check if update is a ChatMessage
129-
if isinstance(update, ChatMessage):
128+
# Check if update is a Message
129+
if isinstance(update, Message):
130130
chunk_text = update.text or ""
131131
elif hasattr(update, "content"):
132132
chunk_text = str(update.content) if update.content else ""

src/backend/v4/magentic_agents/common/lifecycle.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
from typing import Any, Optional
66

77
from agent_framework import (
8-
ChatAgent,
9-
HostedMCPTool,
8+
Agent,
109
MCPStreamableHTTPTool,
1110
)
1211

@@ -46,8 +45,8 @@ def __init__(
4645
) -> None:
4746
self._stack: AsyncExitStack | None = None
4847
self.mcp_cfg: MCPConfig | None = mcp
49-
self.mcp_tool: HostedMCPTool | None = None
50-
self._agent: ChatAgent | None = None
48+
self.mcp_tool: MCPStreamableHTTPTool | None = None
49+
self._agent: Agent | None = None
5150
self.team_service: TeamService | None = team_service
5251
self.team_config: TeamConfiguration | None = team_config
5352
self.client: Optional[AgentsClient] = None
@@ -155,9 +154,9 @@ def get_chat_client(self) -> AzureAIClient:
155154
"""
156155
if (
157156
self._agent
158-
and self._agent.chat_client
157+
and self._agent.client
159158
):
160-
return self._agent.chat_client # type: ignore
159+
return self._agent.client # type: ignore
161160
chat_client = AzureAIClient(
162161
project_endpoint=self.project_endpoint,
163162
agent_name=self.agent_name,

0 commit comments

Comments
 (0)