chore: import upstream snapshot with attribution
Continuous Integration / Pre-commit Linter (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.10) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.11) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.12) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.13) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.10) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.11) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.12) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.13) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.14) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.10) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.11) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.12) (push) Has been cancelled
Copybara PR Handler / close-imported-pr (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.13) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.14) (push) Has been cancelled
Continuous Integration / Pre-commit Linter (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.10) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.11) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.12) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.13) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.10) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.11) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.12) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.13) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.14) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.10) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.11) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.12) (push) Has been cancelled
Copybara PR Handler / close-imported-pr (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.13) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.14) (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
# A2A Root Sample Agent
|
||||
|
||||
This sample demonstrates how to use a **remote Agent-to-Agent (A2A) agent as the root agent** in the Agent Development Kit (ADK). This is a simplified approach where the main agent is actually a remote A2A service, also showcasing how to run remote agents using uvicorn command.
|
||||
|
||||
## Overview
|
||||
|
||||
The A2A Root sample consists of:
|
||||
|
||||
- **Root Agent** (`agent.py`): A remote A2A agent proxy as root agent that talks to a remote a2a agent running on a separate server
|
||||
- **Remote Hello World Agent** (`remote_a2a/hello_world/agent.py`): The actual agent implementation that handles dice rolling and prime number checking running on remote server
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────┐ ┌────────────────────┐
|
||||
│ Root Agent │───▶│ Remote Hello │
|
||||
│ (RemoteA2aAgent)│ │ World Agent │
|
||||
│ (localhost:8000)│ │ (localhost:8001) │
|
||||
└─────────────────┘ └────────────────────┘
|
||||
```
|
||||
|
||||
## Key Features
|
||||
|
||||
### 1. **Remote A2A as Root Agent**
|
||||
|
||||
- The `root_agent` is a `RemoteA2aAgent` that connects to a remote A2A service
|
||||
- Demonstrates how to use remote agents as the primary agent instead of local agents
|
||||
- Shows the flexibility of the A2A architecture for distributed agent deployment
|
||||
|
||||
### 2. **Uvicorn Server Deployment**
|
||||
|
||||
- The remote agent is served using uvicorn, a lightweight ASGI server
|
||||
- Demonstrates a simple way to deploy A2A agents without using the ADK CLI
|
||||
- Shows how to expose A2A agents as standalone web services
|
||||
|
||||
### 3. **Agent Functionality**
|
||||
|
||||
- **Dice Rolling**: Can roll dice with configurable number of sides
|
||||
- **Prime Number Checking**: Can check if numbers are prime
|
||||
- **State Management**: Maintains roll history in tool context
|
||||
- **Parallel Tool Execution**: Can use multiple tools in parallel
|
||||
|
||||
### 4. **Simple Deployment Pattern**
|
||||
|
||||
- Uses the `to_a2a()` utility to convert a standard ADK agent to an A2A service
|
||||
- Minimal configuration required for remote agent deployment
|
||||
|
||||
## Setup and Usage
|
||||
|
||||
### Prerequisites
|
||||
|
||||
1. **Start the Remote A2A Agent server**:
|
||||
|
||||
```bash
|
||||
# Start the remote agent using uvicorn
|
||||
uvicorn contributing.samples.a2a_root.remote_a2a.hello_world.agent:a2a_app --host localhost --port 8001
|
||||
```
|
||||
|
||||
1. **Run the Main Agent**:
|
||||
|
||||
```bash
|
||||
# In a separate terminal, run the adk web server
|
||||
adk web contributing/samples/
|
||||
```
|
||||
|
||||
### Example Interactions
|
||||
|
||||
Once both services are running, you can interact with the root agent:
|
||||
|
||||
**Simple Dice Rolling:**
|
||||
|
||||
```
|
||||
User: Roll a 6-sided die
|
||||
Bot: I rolled a 4 for you.
|
||||
```
|
||||
|
||||
**Prime Number Checking:**
|
||||
|
||||
```
|
||||
User: Is 7 a prime number?
|
||||
Bot: Yes, 7 is a prime number.
|
||||
```
|
||||
|
||||
**Combined Operations:**
|
||||
|
||||
```
|
||||
User: Roll a 10-sided die and check if it's prime
|
||||
Bot: I rolled an 8 for you.
|
||||
Bot: 8 is not a prime number.
|
||||
```
|
||||
|
||||
**Multiple Rolls with Prime Checking:**
|
||||
|
||||
```
|
||||
User: Roll a die 3 times and check which results are prime
|
||||
Bot: I rolled a 3 for you.
|
||||
Bot: I rolled a 7 for you.
|
||||
Bot: I rolled a 4 for you.
|
||||
Bot: 3, 7 are prime numbers.
|
||||
```
|
||||
|
||||
## Code Structure
|
||||
|
||||
### Root Agent (`agent.py`)
|
||||
|
||||
- **`root_agent`**: A `RemoteA2aAgent` that connects to the remote A2A service
|
||||
- **Agent Card URL**: Points to the well-known agent card endpoint on the remote server
|
||||
|
||||
### Remote Hello World Agent (`remote_a2a/hello_world/agent.py`)
|
||||
|
||||
- **`roll_die(sides: int)`**: Function tool for rolling dice with state management
|
||||
- **`check_prime(nums: list[int])`**: Async function for prime number checking
|
||||
- **`root_agent`**: The main agent with comprehensive instructions
|
||||
- **`a2a_app`**: The A2A application created using `to_a2a()` utility
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Connection Issues:**
|
||||
|
||||
- Ensure the uvicorn server is running on port 8001
|
||||
- Check that no firewall is blocking localhost connections
|
||||
- Verify the agent card URL in the root agent configuration
|
||||
- Check uvicorn logs for any startup errors
|
||||
|
||||
**Agent Not Responding:**
|
||||
|
||||
- Check the uvicorn server logs for errors
|
||||
- Verify the agent instructions are clear and unambiguous
|
||||
- Ensure the A2A app is properly configured with the correct port
|
||||
|
||||
**Uvicorn Issues:**
|
||||
|
||||
- Make sure the module path is correct: `contributing.samples.a2a_root.remote_a2a.hello_world.agent:a2a_app`
|
||||
- Check that all dependencies are installed
|
||||
Reference in New Issue
Block a user