d08200d00e
* Bump Python package versions for 1.12.0 release Bump packages represented in the 1.12.0 changelog, promote Foundry Hosting, Azure Content Understanding, Gemini, Mistral, Monty, and Tools to beta, and apply the requested beta cohort date stamp. Root and core move to 1.12.0, released and RC packages use their selected increments, alpha packages including Hosting MCP use the 260721 stamp, and core floors are raised only for proven consumers. Copilot-Session: 2dd9980a-b869-4c16-8642-75b7a6d6ebdf * fix version in readme * Add Responses conversation ID changes to release notes Include the breaking Hosting Responses conversation ID helper changes from #7234 in the Python 1.12.0 changelog. Copilot-Session: 2dd9980a-b869-4c16-8642-75b7a6d6ebdf
212 lines
8.3 KiB
Markdown
212 lines
8.3 KiB
Markdown
# DevUI Samples
|
|
|
|
This folder contains sample agents and workflows designed to work with the Agent Framework DevUI - a lightweight web interface for running and testing agents interactively.
|
|
|
|
## What is DevUI?
|
|
|
|
DevUI is a sample application that provides:
|
|
|
|
- A web interface for testing agents and workflows
|
|
- OpenAI-compatible API endpoints
|
|
- Directory-based entity discovery
|
|
- In-memory entity registration
|
|
- Sample entity gallery
|
|
|
|
> **Note**: DevUI is a sample app for development and testing. For production use, build your own custom interface using the Agent Framework SDK.
|
|
|
|
## Quick Start
|
|
|
|
### Option 1: In-Memory Mode (Programmatic Registration)
|
|
|
|
Run a single sample directly. This demonstrates how to register agents and workflows in code without using DevUI's directory discovery.
|
|
|
|
This sample uses Microsoft Foundry. Before running it:
|
|
|
|
1. Copy `.env.example` in this folder to `.env`, or export the same values in your shell
|
|
2. Set `FOUNDRY_PROJECT_ENDPOINT` and `FOUNDRY_MODEL`
|
|
3. Run `az login`
|
|
|
|
Then start the sample:
|
|
|
|
```bash
|
|
cd python/samples/02-agents/devui
|
|
python in_memory_mode.py
|
|
```
|
|
|
|
This opens your browser at http://localhost:8090 with two Foundry-backed agents and a simple text transformation workflow.
|
|
|
|
### Option 2: Directory Discovery with Shared Root `.env`
|
|
|
|
Run the folder-level launcher to load `samples/02-agents/devui/.env` and then start DevUI with directory discovery for this folder:
|
|
|
|
```bash
|
|
cd python/samples/02-agents/devui
|
|
python main.py
|
|
```
|
|
|
|
This starts the server at http://localhost:8080 with all discoverable agents and workflows available. The root `.env` acts as shared fallback configuration for discovered samples.
|
|
|
|
### Option 3: Directory Discovery with the `devui` CLI
|
|
|
|
If you prefer the CLI directly, you can still launch DevUI from this folder:
|
|
|
|
```bash
|
|
cd python/samples/02-agents/devui
|
|
devui .
|
|
```
|
|
|
|
DevUI discovery checks for a sample-specific `.env` first and then falls back to `.env` in `samples/02-agents/devui/`.
|
|
|
|
## Sample Structure
|
|
|
|
DevUI discovers samples from Python packages that export either `agent` or `workflow`.
|
|
|
|
Typical agent layout:
|
|
|
|
```
|
|
agent_name/
|
|
├── __init__.py # Must export: agent = ...
|
|
├── agent.py # Agent implementation
|
|
└── .env.example # Optional example environment variables
|
|
```
|
|
|
|
Typical workflow layout:
|
|
|
|
```
|
|
workflow_name/
|
|
├── __init__.py # Must export: workflow = ...
|
|
├── workflow.py # Workflow implementation
|
|
├── workflow.yaml # Optional declarative definition
|
|
└── .env.example # Optional example environment variables
|
|
```
|
|
|
|
## Available Samples
|
|
|
|
### Agents
|
|
|
|
| Sample | What it demonstrates | Required keys / auth |
|
|
| ------ | -------------------- | -------------------- |
|
|
| [**agent_weather/**](agent_weather/) | A richer Foundry-backed weather agent that shows chat middleware, function middleware, tool calling, and an approval-required tool alongside auto-approved tools. | `FOUNDRY_PROJECT_ENDPOINT`, `FOUNDRY_MODEL`, plus Azure CLI auth via `az login` |
|
|
| [**agent_foundry/**](agent_foundry/) | A minimal Foundry-backed weather agent with current weather and forecast tools. Use this when you want the smallest possible directory-discovered agent sample. | `FOUNDRY_PROJECT_ENDPOINT`, `FOUNDRY_MODEL`, plus Azure CLI auth via `az login` |
|
|
| [**agent_content_understanding/**](agent_content_understanding/) | Upload and analyze documents, images, audio, and video with Azure Content Understanding. | `FOUNDRY_PROJECT_ENDPOINT`, `FOUNDRY_MODEL`, `AZURE_CONTENTUNDERSTANDING_ENDPOINT`, plus Azure CLI auth via `az login` |
|
|
| [**agent_content_understanding_file_search_azure_openai/**](agent_content_understanding_file_search_azure_openai/) | Combine Azure Content Understanding extraction with Azure OpenAI vector-store file search. | `FOUNDRY_PROJECT_ENDPOINT`, `FOUNDRY_MODEL`, `AZURE_CONTENTUNDERSTANDING_ENDPOINT`, plus Azure CLI auth via `az login` |
|
|
| [**agent_content_understanding_file_search_foundry/**](agent_content_understanding_file_search_foundry/) | Combine Azure Content Understanding extraction with Foundry vector-store file search. | `FOUNDRY_PROJECT_ENDPOINT`, `FOUNDRY_MODEL`, `AZURE_CONTENTUNDERSTANDING_ENDPOINT`, plus Azure CLI auth via `az login` |
|
|
|
|
### Workflows
|
|
|
|
| Sample | What it demonstrates | Required keys / auth |
|
|
| ------ | -------------------- | -------------------- |
|
|
| [**workflow_declarative/**](workflow_declarative/) | A YAML-defined workflow loaded through `WorkflowFactory`, with nested age-based branching and no model client code. | None |
|
|
| [**workflow_with_agents/**](workflow_with_agents/) | A content review workflow that uses agents as executors and routes based on structured review output (`Writer -> Reviewer -> Editor/Publisher -> Summarizer`). | `AZURE_OPENAI_ENDPOINT`, plus `AZURE_OPENAI_CHAT_MODEL` or `AZURE_OPENAI_MODEL`; Azure CLI auth via `az login`; `AZURE_OPENAI_API_VERSION` is optional |
|
|
| [**workflow_spam/**](workflow_spam/) | A multi-step spam detection workflow with human-in-the-loop approval, branching for spam vs. legitimate messages, and a final reporting step. | None |
|
|
| [**workflow_fanout/**](workflow_fanout/) | A larger fan-out/fan-in data processing workflow with parallel validation, multiple transformations, QA, aggregation, and demo failure toggles. | None |
|
|
|
|
### Standalone Examples
|
|
|
|
| Sample | What it demonstrates | Required keys / auth |
|
|
| ------ | -------------------- | -------------------- |
|
|
| [**in_memory_mode.py**](in_memory_mode.py) | Registers multiple entities directly in Python: two Foundry-backed agents plus a simple workflow, all served from one file without directory discovery. | `FOUNDRY_PROJECT_ENDPOINT`, `FOUNDRY_MODEL`, plus Azure CLI auth via `az login` |
|
|
|
|
## Environment Variables
|
|
|
|
For samples that require external services:
|
|
|
|
1. Copy `.env.example` to `.env`
|
|
2. Fill in the required values
|
|
3. Run `az login` for samples that use Azure CLI authentication
|
|
|
|
Directory discovery checks `.env` files in this order:
|
|
|
|
1. The entity directory itself, for example `agent_weather/.env`
|
|
2. The root DevUI samples folder, `samples/02-agents/devui/.env`
|
|
|
|
That means the root `.env.example` can hold shared defaults for multiple samples, while a sample-specific `.env` can override those values when needed.
|
|
|
|
`in_memory_mode.py` and `main.py` both load `.env` from `samples/02-agents/devui/`, so the root `.env.example` in this folder is the right starting point for both commands.
|
|
|
|
Alternatively, set environment variables globally:
|
|
|
|
```bash
|
|
# Foundry-backed samples
|
|
export FOUNDRY_PROJECT_ENDPOINT="https://your-project.services.ai.azure.com"
|
|
export FOUNDRY_MODEL="gpt-4o"
|
|
|
|
# Azure OpenAI workflow_with_agents sample
|
|
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com"
|
|
export AZURE_OPENAI_CHAT_MODEL="gpt-4o"
|
|
export AZURE_OPENAI_MODEL="gpt-4o"
|
|
|
|
az login
|
|
```
|
|
|
|
## Using DevUI with Your Own Agents
|
|
|
|
To make your agent discoverable by DevUI:
|
|
|
|
1. Create a folder for your agent
|
|
2. Add an `__init__.py` that exports `agent` or `workflow`
|
|
3. (Optional) Add a `.env` file for environment variables
|
|
|
|
Example:
|
|
|
|
```python
|
|
# my_agent/__init__.py
|
|
from agent_framework import Agent
|
|
from agent_framework.openai import OpenAIChatClient
|
|
|
|
agent = Agent(
|
|
name="MyAgent",
|
|
description="My custom agent",
|
|
client=OpenAIChatClient(),
|
|
# ... your configuration
|
|
)
|
|
```
|
|
|
|
Then run:
|
|
|
|
```bash
|
|
devui /path/to/my/agents/folder
|
|
```
|
|
|
|
## API Usage
|
|
|
|
DevUI exposes OpenAI-compatible endpoints:
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8080/v1/responses \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"model": "agent-framework",
|
|
"input": "What is the weather in Seattle?",
|
|
"extra_body": {"entity_id": "agent_directory_weather-agent_<uuid>"}
|
|
}'
|
|
```
|
|
|
|
List available entities:
|
|
|
|
```bash
|
|
curl http://localhost:8080/v1/entities
|
|
```
|
|
|
|
## Learn More
|
|
|
|
- [DevUI Documentation](../../../packages/devui/README.md)
|
|
- [Agent Framework Documentation](https://docs.microsoft.com/agent-framework)
|
|
- [Sample Guidelines](../../SAMPLE_GUIDELINES.md)
|
|
|
|
## Troubleshooting
|
|
|
|
**Missing credentials or settings**: Check your `.env` files, confirm the required variables for the sample you are running, and make sure `az login` has completed for Azure-authenticated samples.
|
|
|
|
**Import errors**: Make sure you've installed the devui package:
|
|
|
|
```bash
|
|
pip install agent-framework-devui --pre
|
|
```
|
|
|
|
**Port conflicts**: DevUI uses ports 8080 (directory mode) and 8090 (in-memory mode) by default. Close other services or specify a different port:
|
|
|
|
```bash
|
|
devui --port 8888
|
|
```
|