7749823393
* Fixing some samples and sample verification. * Workaround for continuation token moved to sample. * Address PR review comments: reset _stdinEof on reuse, null-guard modelId, format - WorkflowRunner: reset _stdinEof=false at start of ExecuteAsync so reused instances don't exit immediately on the next external request - 04_memory: throw clear InvalidOperationException when DefaultModelId is null rather than silently sending null to the Foundry Responses API - dotnet format: no code changes, formatting only Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Improving memory sample by not creating an agent just to get a chat client. --------- Co-authored-by: Ben Thomas <25218250+alliscode@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Group Chat with Tool Approval Sample
This sample demonstrates how to use GroupChatBuilder with tools that require human approval before execution. A group of specialized agents collaborate on a task, and sensitive tool calls trigger human-in-the-loop approval.
What This Sample Demonstrates
- Using a custom
GroupChatManagerwith agents that have approval-required tools - Handling
FunctionApprovalRequestContentin group chat scenarios - Multi-round group chat with tool approval interruption and resumption
- Integrating tool call approvals with multi-agent workflows where different agents have different levels of tool access
How It Works
- A
GroupChatBuilderworkflow is created with multiple specialized agents - A custom
DeploymentGroupChatManagerdetermines which agent speaks next based on conversation state - Agents collaborate on a software deployment task:
- QA Engineer: Runs automated tests
- DevOps Engineer: Checks staging status, creates rollback plan, and deploys to production
- When the deployment agent tries to deploy to production, it triggers an approval request
- The sample simulates human approval and the workflow completes
Key Components
Approval-Required Tools
The DeployToProduction function is wrapped with ApprovalRequiredAIFunction to require human approval:
new ApprovalRequiredAIFunction(AIFunctionFactory.Create(DeployToProduction))
Custom Group Chat Manager
The DeploymentGroupChatManager implements custom speaker selection logic:
- First iteration: QA Engineer runs tests
- Subsequent iterations: DevOps Engineer handles deployment tasks
Approval Handling
The sample demonstrates continuous event-driven execution with inline approval handling:
- The workflow runs in a single event loop.
- When an approval-required tool is invoked, the loop surfaces an approval request, processes the (simulated) human response, and then continues execution without starting a separate phase.
Prerequisites
- Azure OpenAI or OpenAI configured with the required environment variables
AZURE_OPENAI_ENDPOINTenvironment variable setAZURE_OPENAI_DEPLOYMENT_NAMEenvironment variable (defaults to "gpt-5.4-mini")
Running the Sample
dotnet run
Expected Output
The sample will show:
- QA Engineer running tests
- DevOps Engineer checking staging and creating rollback plan
- An approval request for production deployment
- Simulated approval response
- DevOps Engineer completing the deployment
- Workflow completion message
Related Samples
- Agent Function Tools with Approvals - Basic function approval pattern
- Agent Workflow Patterns - Group chat without approvals
- Human-in-the-Loop Basic - Workflow-level human interaction