Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
2870a21
chore: Dev merge to Main
Avijit-Microsoft May 21, 2026
20d773e
Merge pull request #254 from microsoft/dev
Prajwal-Microsoft May 27, 2026
5e7e467
chore: Dev merge to Main
Avijit-Microsoft Jun 1, 2026
868bd5d
Merge pull request #273 from microsoft/dev
Roopan-Microsoft Jun 10, 2026
27261c7
increase the tokens
Prachig-Microsoft Jun 12, 2026
49eb5cd
Upgrade agent-framework to 1.3.0 and azure-ai-projects to 2.1.0
Prachig-Microsoft Jun 11, 2026
e67884a
Fix SharedMemoryContextProvider not iterable TypeError
Prachig-Microsoft Jun 12, 2026
e364793
Remove trailing blank line in azure_openai_response_retry.py (W391)
Prachig-Microsoft Jun 12, 2026
fa63bdf
Fix async for coroutine error in retry client streaming path
Prachig-Microsoft Jun 12, 2026
0f10ef0
Fix streaming: delegate to parent ResponseStream instead of async gen…
Prachig-Microsoft Jun 12, 2026
688b136
Guard against empty messages after context trimming
Prachig-Microsoft Jun 12, 2026
1d86176
Update AZURE_OPENAI_API_VERSION from 2025-03-01-preview to v1
Prachig-Microsoft Jun 12, 2026
6938b2b
Revert "Update AZURE_OPENAI_API_VERSION from 2025-03-01-preview to v1"
Prachig-Microsoft Jun 12, 2026
5961870
Switch default client to AzureOpenAIChatCompletionWithRetry (Chat Com…
Prachig-Microsoft Jun 12, 2026
3ab3076
Fix AzureOpenAIChatClientWithRetry streaming: sync def + stream param…
Prachig-Microsoft Jun 12, 2026
2caced5
Sanitize message author_name for OpenAI Chat Completions
Prachig-Microsoft Jun 12, 2026
7f8a04b
Demote empty-messages warning to debug
Prachig-Microsoft Jun 12, 2026
6d371fd
Fix Coordinator anti-loop: accept framework's response schema
Prachig-Microsoft Jun 12, 2026
d5da788
Sanitize message name at OpenAI wire format (defense in depth)
Prachig-Microsoft Jun 12, 2026
0da531f
Fix loop detection: don't count looped-on agent's runs as progress
Prachig-Microsoft Jun 12, 2026
9a85f00
Add agent_description for Analysis participants so Coordinator can ro…
Prachig-Microsoft Jun 12, 2026
76e9c17
Fix loop detection: key on agent name only, not (agent, instruction)
Prachig-Microsoft Jun 12, 2026
4de1e28
fix(workflow): reject incoherent ResultGenerator output across all steps
Prachig-Microsoft Jun 12, 2026
f74629b
fix(groupchat): resolve agent identity via author_name for af 1.3.0
Prachig-Microsoft Jun 13, 2026
42902ab
fix(groupchat): route WorkflowEvent payloads + enforce framework max_…
Prachig-Microsoft Jun 13, 2026
7a0212f
fix(groupchat): detect participant loops via executor_completed events
Prachig-Microsoft Jun 13, 2026
03387c4
Revert "fix(groupchat): detect participant loops via executor_complet…
Prachig-Microsoft Jun 13, 2026
14d52f2
chore(logging): suppress harmless empty-message-cache warning and dro…
Prachig-Microsoft Jun 13, 2026
25aeea5
ci: replace deprecated --exclude-mail with --exclude ^mailto: in lych…
Prachig-Microsoft Jun 16, 2026
db7c837
fix: reconstruct conversation from agent_responses on early termination
Prachig-Microsoft Jun 16, 2026
d0397f7
fix: use correct Message attributes in _validate_sign_offs (text/auth…
Prachig-Microsoft Jun 17, 2026
b9979a7
fix: add loop detection for same-agent back-to-back invocations in 1.3.0
Prachig-Microsoft Jun 17, 2026
4a8ee72
fix: address Copilot review - empty name handling and type annotation
Prachig-Microsoft Jun 17, 2026
488a290
fix: use selection_func to keep Coordinator visible in streaming loop
Prachig-Microsoft Jun 17, 2026
325bf39
diag: add Coordinator response logging for loop detection debugging
Prachig-Microsoft Jun 17, 2026
c5c3a34
fix: set ManagerSelectionResponse extra=forbid for Chat API structure…
Prachig-Microsoft Jun 17, 2026
89ec3fc
fix: prevent infinite loop when sign-off validation rejects finish
Prachig-Microsoft Jun 17, 2026
411c64b
fix: relax sign-off validation to only block on explicit PENDING/FAIL
Prachig-Microsoft Jun 17, 2026
3e1685e
fix: make sign-off validation log-only to prevent termination deadlock
Prachig-Microsoft Jun 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/broken-links-checker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
uses: lycheeverse/lychee-action@v2.8.0
with:
args: >
--verbose --exclude-mail --no-progress --exclude ^https?://
--verbose --no-progress --exclude ^https?:// --exclude ^mailto:
${{ steps.changed-markdown-files.outputs.all_changed_files }}
failIfEmpty: false
env:
Expand All @@ -50,7 +50,7 @@ jobs:
uses: lycheeverse/lychee-action@v2.8.0
with:
args: >
--verbose --exclude-mail --no-progress --exclude ^https?://
--verbose --no-progress --exclude ^https?:// --exclude ^mailto:
'**/*.md'
failIfEmpty: false
env:
Expand Down
2 changes: 1 addition & 1 deletion docs/LocalDevelopmentSetup.md
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ py -3.12 -m uv venv .venv
py -3.12 -m uv sync --prerelease=allow
```

> **⚠️ Important**: This repo currently depends on a prerelease/dev version of Microsoft Agent Framework. Always run `uv sync --prerelease=allow` (or `py -3.12 -m uv sync --prerelease=allow` on Windows) after creating the virtual environment to install all required dependencies. Missing dependencies will cause runtime errors like `ModuleNotFoundError: No module named 'pydantic'` or DNS resolution failures.
> **⚠️ Important**: Always run `uv sync --prerelease=allow` (or `py -3.12 -m uv sync --prerelease=allow` on Windows) after creating the virtual environment to install all required dependencies. The `--prerelease=allow` flag is needed because some transitive dependencies may still use pre-release versions. Missing dependencies will cause runtime errors like `ModuleNotFoundError: No module named 'pydantic'` or DNS resolution failures.

### 5.4. Run the Processor

Expand Down
20 changes: 9 additions & 11 deletions docs/ProcessFrameworkGuide.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,23 +118,21 @@ Inside each step, the orchestrator can use multi-agent patterns (maker-checker l

- Implementation: [src/processor/src/steps/migration_processor.py](../src/processor/src/steps/migration_processor.py)
- The processor creates a workflow with `WorkflowBuilder`.
- It registers four executors, sets the start executor, and defines edges.
- It instantiates four executors, passes the start executor to `WorkflowBuilder`, and chains them with `add_chain`.

Example from the repo (simplified):

```python
from agent_framework import WorkflowBuilder

analysis_exec = AnalysisExecutor(id="analysis", app_context=app_context)
design_exec = DesignExecutor(id="design", app_context=app_context)
yaml_exec = YamlConvertExecutor(id="yaml", app_context=app_context)
docs_exec = DocumentationExecutor(id="documentation", app_context=app_context)

workflow = (
WorkflowBuilder()
.register_executor(lambda: AnalysisExecutor(id="analysis", app_context=app_context), name="analysis")
.register_executor(lambda: DesignExecutor(id="design", app_context=app_context), name="design")
.register_executor(lambda: YamlConvertExecutor(id="yaml", app_context=app_context), name="yaml")
.register_executor(lambda: DocumentationExecutor(id="documentation", app_context=app_context), name="documentation")
.set_start_executor("analysis")
.add_edge("analysis", "design")
.add_edge("design", "yaml")
.add_edge("yaml", "documentation")
WorkflowBuilder(start_executor=analysis_exec)
.add_chain([analysis_exec, design_exec, yaml_exec, docs_exec])
.build()
)
```
Expand Down Expand Up @@ -355,7 +353,7 @@ To run processor unit tests locally (example):

```bash
cd src/processor
uv run --prerelease=allow python -m pytest src/processor/src/tests/unit -v
uv run python -m pytest src/tests/unit -v
```

## Extending the pipeline
Expand Down
19 changes: 13 additions & 6 deletions infra/vscode_web/codeSample.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from azure.ai.agents.models import ListSortOrder
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential

Expand All @@ -7,19 +8,25 @@

agent = project_client.agents.get_agent("<%= agentId %>")

thread = project_client.agents.create_thread()
thread = project_client.agents.threads.create()
print(f"Created thread, ID: {thread.id}")

message = project_client.agents.create_message(
message = project_client.agents.messages.create(
thread_id=thread.id,
role="user",
content="<%= userMessage %>"
)

run = project_client.agents.create_and_process_run(
run = project_client.agents.runs.create_and_process(
thread_id=thread.id,
agent_id=agent.id)
messages = project_client.agents.list_messages(thread_id=thread.id)

for text_message in messages.text_messages:
print(text_message.as_dict())
if run.status == "failed":
print(f"Run failed: {run.last_error}")
else:
messages = project_client.agents.messages.list(
thread_id=thread.id, order=ListSortOrder.ASCENDING)

for message in messages:
if message.text_messages:
print(f"{message.role}: {message.text_messages[-1].text.value}")
2 changes: 1 addition & 1 deletion infra/vscode_web/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
azure-ai-projects==1.0.0b12
azure-ai-projects==2.1.0
azure-identity==1.20.0
ansible-core~=2.17.0
2 changes: 1 addition & 1 deletion src/processor/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"agent-framework==1.0.0b260107",
"agent-framework==1.3.0",
"aiohttp==3.13.5",
"art==6.5",
"azure-ai-agents==1.2.0b5",
Expand Down
Loading
Loading