# AworldServer AworldServer is an execution environment for the Aworld framework that integrates MCP LLM models. It supports distributed deployment and dynamic scaling. ![img.png](img.png) 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` ##