mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
cc0cfaaac8
* Python: fix OpenAI Azure routing and provider samples Prefer OpenAI when OPENAI_API_KEY is present unless Azure is explicitly requested. Clarify constructor docs, keep deprecated Azure wrappers compatible with stricter settings validation, and refresh the provider samples and tests to use the current client patterns. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix bandit * Python: align OpenAI embedding Azure routing Extend the shared OpenAI-vs-Azure routing and credential behavior to the embedding client, add Azure embedding regression coverage, and refresh the embedding samples to use the generic client path. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: fix embedding client pyright check Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: thin OpenAI embedding wrapper Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: document embedding overload routing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: fix callable OpenAI key routing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: fix Azure credential routing tests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: address OpenAI review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: narrow Azure routing markers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: refine OpenAI model fallback order Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: narrow Azure deployment docs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: remove embedding routing wording Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: run embedding Azure integration tests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * changed variable name * Python: expand OpenAI package README Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * clarified readme * Python: fix Azure OpenAI integration setup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: correct Azure integration env mapping Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * updated code to fix int tests * test updates * test fix * fix test setup * updates to tests and setup * remove openai assistants int tests * improvements in int tests * fix env var * fix env vars * fix azure responses test * trigger actions --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
161 lines
7.4 KiB
Markdown
161 lines
7.4 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 (Simplest)
|
|
|
|
Run a single sample directly. This demonstrates how to wrap agents and workflows programmatically without needing a directory structure:
|
|
|
|
```bash
|
|
cd python/samples/02-agents/devui
|
|
python in_memory_mode.py
|
|
```
|
|
|
|
This opens your browser at http://localhost:8090 with pre-configured agents and a basic workflow.
|
|
|
|
### Option 2: Directory Discovery
|
|
|
|
Launch DevUI to discover all samples in this folder:
|
|
|
|
```bash
|
|
cd python/samples/02-agents/devui
|
|
devui
|
|
```
|
|
|
|
This starts the server at http://localhost:8080 with all agents and workflows available.
|
|
|
|
## Sample Structure
|
|
|
|
Each agent/workflow follows a strict structure required by DevUI's discovery system:
|
|
|
|
```
|
|
agent_name/
|
|
├── __init__.py # Must export: agent = Agent(...)
|
|
├── agent.py # Agent implementation
|
|
└── .env.example # Example environment variables
|
|
```
|
|
|
|
## Available Samples
|
|
|
|
### Agents
|
|
|
|
| Sample | Description | Features | Required Environment Variables |
|
|
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
|
|
| [**weather_agent_azure/**](weather_agent_azure/) | Weather agent using Azure OpenAI with API key authentication | Azure OpenAI integration, function calling, mock weather tools | `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_CHAT_DEPLOYMENT_NAME`, `AZURE_OPENAI_ENDPOINT` |
|
|
| [**foundry_agent/**](foundry_agent/) | Weather agent using Azure AI Agent (Foundry) with Azure CLI authentication (run `az login` first) | Azure AI Agent integration, Azure CLI authentication, mock weather tools | `AZURE_AI_PROJECT_ENDPOINT`, `FOUNDRY_MODEL_DEPLOYMENT_NAME` |
|
|
|
|
### Workflows
|
|
|
|
| Sample | Description | Features | Required Environment Variables |
|
|
| -------------------------------------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
|
|
| [**declarative/**](declarative/) | Declarative YAML workflow with conditional branching | YAML-based workflow definition, conditional logic, no Python code required | None - uses mock data |
|
|
| [**workflow_agents/**](workflow_agents/) | Content review workflow with agents as executors | Agents as workflow nodes, conditional routing based on structured outputs, quality-based paths (Writer -> Reviewer -> Editor/Publisher) | `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_CHAT_DEPLOYMENT_NAME`, `AZURE_OPENAI_ENDPOINT` |
|
|
| [**spam_workflow/**](spam_workflow/) | 5-step email spam detection workflow with branching logic | Sequential execution, conditional branching (spam vs. legitimate), multiple executors, mock spam detection | None - uses mock data |
|
|
| [**fanout_workflow/**](fanout_workflow/) | Advanced data processing workflow with parallel execution | Fan-out/fan-in patterns, complex state management, multi-stage processing (validation -> transformation -> quality assurance) | None - uses mock data |
|
|
|
|
### Standalone Examples
|
|
|
|
| Sample | Description | Features |
|
|
| ------------------------------------------ | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
| [**in_memory_mode.py**](in_memory_mode.py) | Demonstrates programmatic entity registration without directory structure | In-memory agent and workflow registration, multiple entities served from a single file, includes basic workflow, simplest way to get started |
|
|
|
|
## Environment Variables
|
|
|
|
Each sample that requires API keys includes a `.env.example` file. To use:
|
|
|
|
1. Copy `.env.example` to `.env` in the same directory
|
|
2. Fill in your actual API keys
|
|
3. DevUI automatically loads `.env` files from entity directories
|
|
|
|
Alternatively, set environment variables globally:
|
|
|
|
```bash
|
|
export OPENAI_API_KEY="your-key-here"
|
|
export OPENAI_CHAT_MODEL="gpt-4o"
|
|
```
|
|
|
|
## 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 API keys**: Check your `.env` files or environment variables.
|
|
|
|
**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
|
|
```
|