|
# AworldServer |
|
|
|
AworldServer is an execution environment for the Aworld framework that integrates MCP LLM models. It supports distributed deployment and dynamic scaling. |
|
|
|
 |
|
|
|
The system features: |
|
|
|
- Distributed Architecture: Supports multi-server deployment with load balancing |
|
- Dynamic Scaling: Ability to adjust server capacity based on demand |
|
- LLM Integration: Built-in MCP LLM model support |
|
- Asynchronous Processing: Uses asynchronous programming patterns for improved performance |
|
- Containerized Deployment: Docker containerization support for easy environment management |
|
|
|
|
|
|
|
## 🚀 Quick Start |
|
|
|
1. Start services using Docker Compose: |
|
|
|
```sh |
|
docker build --build-arg MINIMUM_BUILD=true -f Dockerfile --progress=plain -t aworldserver:main . |
|
|
|
docker compose up -d |
|
``` |
|
2. Configure the number of server instances: |
|
|
|
You can modify the `docker-compose.yaml` file to adjust the number of server instances. The default configuration includes 3 instances: |
|
|
|
3. Usage Methods: |
|
|
|
a. OpenWebUI Integration: |
|
- Configure external link in OpenWebUI settings |
|
- Add AworldServer endpoints to the configuration |
|
- Set up API key authentication |
|
|
|
b. Python Client Usage: |
|
```python |
|
# Initialize AworldTaskClient with server endpoints |
|
AWORLD_TASK_CLIENT = AworldTaskClient( |
|
know_hosts=["localhost:9299", "localhost:9399", "localhost:9499"] |
|
) |
|
|
|
async def _run_gaia_task(gaia_question_id: str) -> None: |
|
"""Run a single Gaia task with the given question ID. |
|
|
|
Args: |
|
gaia_question_id: The ID of the question to process |
|
""" |
|
global AWORLD_TASK_CLIENT |
|
task_id = str(uuid.uuid4()) |
|
|
|
# Submit task to Aworld server |
|
await AWORLD_TASK_CLIENT.submit_task( |
|
AworldTask( |
|
task_id=task_id, |
|
agent_id="gaia_agent", |
|
agent_input=gaia_question_id, |
|
session_id="session_id", |
|
user_id="SYSTEM" |
|
) |
|
) |
|
|
|
# Get and print task result |
|
task_result = await AWORLD_TASK_CLIENT.get_task_state(task_id=task_id) |
|
print(task_result) |
|
|
|
async def _batch_run_gaia_task(start_i: int, end_i: int) -> None: |
|
"""Run multiple Gaia tasks in parallel. |
|
|
|
Args: |
|
start_i: Starting question ID |
|
end_i: Ending question ID |
|
""" |
|
tasks = [ |
|
_run_gaia_task(str(i)) |
|
for i in range(start_i, end_i + 1) |
|
] |
|
await asyncio.gather(*tasks) |
|
|
|
if __name__ == '__main__': |
|
# Run batch processing for questions 1-5 |
|
asyncio.run(_batch_run_gaia_task(1, 5)) |
|
``` |
|
c. user curl |
|
```shell |
|
curl http://localhost:9299/v1/chat/completions \ |
|
-H "Content-Type: application/json" \ |
|
-H "Authorization: Bearer 0p3n-w3bu!" \ |
|
-d '{ |
|
"model": "gaia_agent", |
|
"messages": [ |
|
{ |
|
"role": "user", |
|
"content": [ |
|
{ |
|
"type": "text", |
|
"text": "5" |
|
} |
|
] |
|
} |
|
] |
|
}' |
|
|
|
``` |
|
|
|
|
|
## 🔑 Key Features |
|
|
|
- **Distributed Task Processing System** |
|
- Multi-server load balancing |
|
- Round-robin task distribution |
|
- Asynchronous task processing |
|
|
|
- **Docker Containerization** |
|
- Multi-instance deployment |
|
- Environment variable configuration |
|
- Auto-restart mechanism |
|
|
|
- **API Services** |
|
- FastAPI framework support |
|
- RESTful API design |
|
- Asynchronous request handling |
|
|
|
- **Development Tools** |
|
- Debug mode support |
|
- Batch task processing |
|
- Task state tracking |
|
|
|
- **Security Features** |
|
- API key authentication |
|
- Session management |
|
- User authentication |
|
|
|
|
|
|
|
## 📦 Installation and Setup |
|
|
|
Get started with aworldserver in a few easy steps: |
|
|
|
1. **Ensure Python 3.11 is installed.** |
|
|
|
2. **Install the required dependencies:** |
|
|
|
```sh |
|
pip install -r requirements-minimux.txt |
|
``` |
|
|
|
3. **Start the aworld server:** |
|
|
|
```sh |
|
sh ./start.sh |
|
``` |
|
### Custom debug |
|
|
|
please run `debug_run.py` |
|
|
|
## |
|
|