Smolagents Multi Agent Micro Agents
Multi-Agent Order Management System with MongoDB
This notebook implements a multi-agent system for managing product orders, inventory, and deliveries using:
- smolagents for agent management
- MongoDB for data persistence
- DeepSeek Chat as the LLM model
Setup
First, let's install required dependencies:
Requirement already satisfied: smolagents in /usr/local/lib/python3.10/dist-packages (1.0.0) Requirement already satisfied: pymongo in /usr/local/lib/python3.10/dist-packages (4.10.1) Requirement already satisfied: litellm in /usr/local/lib/python3.10/dist-packages (1.57.0) Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (from smolagents) (2.5.1+cu121) Requirement already satisfied: torchaudio in /usr/local/lib/python3.10/dist-packages (from smolagents) (2.5.1+cu121) Requirement already satisfied: torchvision in /usr/local/lib/python3.10/dist-packages (from smolagents) (0.20.1+cu121) Requirement already satisfied: transformers>=4.0.0 in /usr/local/lib/python3.10/dist-packages (from smolagents) (4.47.1) Requirement already satisfied: requests>=2.32.3 in /usr/local/lib/python3.10/dist-packages (from smolagents) (2.32.3) Requirement already satisfied: rich>=13.9.4 in /usr/local/lib/python3.10/dist-packages (from smolagents) (13.9.4) Requirement already satisfied: pandas>=2.2.3 in /usr/local/lib/python3.10/dist-packages (from smolagents) (2.2.3) Requirement already satisfied: jinja2>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from smolagents) (3.1.4) Requirement already satisfied: pillow>=11.0.0 in /usr/local/lib/python3.10/dist-packages (from smolagents) (11.0.0) Requirement already satisfied: markdownify>=0.14.1 in /usr/local/lib/python3.10/dist-packages (from smolagents) (0.14.1) Requirement already satisfied: gradio>=5.8.0 in /usr/local/lib/python3.10/dist-packages (from smolagents) (5.9.1) Requirement already satisfied: duckduckgo-search>=6.3.7 in /usr/local/lib/python3.10/dist-packages (from smolagents) (7.2.0) Requirement already satisfied: python-dotenv>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from smolagents) (1.0.1) Requirement already satisfied: e2b-code-interpreter>=1.0.3 in /usr/local/lib/python3.10/dist-packages (from smolagents) (1.0.3) Requirement already satisfied: dnspython<3.0.0,>=1.16.0 in /usr/local/lib/python3.10/dist-packages (from pymongo) (2.7.0) Requirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from litellm) (3.11.10) Requirement already satisfied: click in /usr/local/lib/python3.10/dist-packages (from litellm) (8.1.7) Requirement already satisfied: httpx<0.28.0,>=0.23.0 in /usr/local/lib/python3.10/dist-packages (from litellm) (0.27.2) Requirement already satisfied: importlib-metadata>=6.8.0 in /usr/local/lib/python3.10/dist-packages (from litellm) (8.5.0) Requirement already satisfied: jsonschema<5.0.0,>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from litellm) (4.23.0) Requirement already satisfied: openai>=1.55.3 in /usr/local/lib/python3.10/dist-packages (from litellm) (1.57.4) Requirement already satisfied: pydantic<3.0.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from litellm) (2.10.3) Requirement already satisfied: tiktoken>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from litellm) (0.8.0) Requirement already satisfied: tokenizers in /usr/local/lib/python3.10/dist-packages (from litellm) (0.21.0) Requirement already satisfied: primp>=0.9.3 in /usr/local/lib/python3.10/dist-packages (from duckduckgo-search>=6.3.7->smolagents) (0.9.3) Requirement already satisfied: lxml>=5.3.0 in /usr/local/lib/python3.10/dist-packages (from duckduckgo-search>=6.3.7->smolagents) (5.3.0) Requirement already satisfied: attrs>=21.3.0 in /usr/local/lib/python3.10/dist-packages (from e2b-code-interpreter>=1.0.3->smolagents) (24.3.0) Requirement already satisfied: e2b<2.0.0,>=1.0.4 in /usr/local/lib/python3.10/dist-packages (from e2b-code-interpreter>=1.0.3->smolagents) (1.0.5) Requirement already satisfied: aiofiles<24.0,>=22.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (23.2.1) Requirement already satisfied: anyio<5.0,>=3.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (3.7.1) Requirement already satisfied: fastapi<1.0,>=0.115.2 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.115.6) Requirement already satisfied: ffmpy in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.5.0) Requirement already satisfied: gradio-client==1.5.2 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (1.5.2) Requirement already satisfied: huggingface-hub>=0.25.1 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.27.0) Requirement already satisfied: markupsafe~=2.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (2.1.5) Requirement already satisfied: numpy<3.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (1.26.4) Requirement already satisfied: orjson~=3.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (3.10.12) Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (24.2) Requirement already satisfied: pydub in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.25.1) Requirement already satisfied: python-multipart>=0.0.18 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.0.20) Requirement already satisfied: pyyaml<7.0,>=5.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (6.0.2) Requirement already satisfied: ruff>=0.2.2 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.8.6) Requirement already satisfied: safehttpx<0.2.0,>=0.1.6 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.1.6) Requirement already satisfied: semantic-version~=2.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (2.10.0) Requirement already satisfied: starlette<1.0,>=0.40.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.41.3) Requirement already satisfied: tomlkit<0.14.0,>=0.12.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.13.2) Requirement already satisfied: typer<1.0,>=0.12 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.15.1) Requirement already satisfied: typing-extensions~=4.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (4.12.2) Requirement already satisfied: uvicorn>=0.14.0 in /usr/local/lib/python3.10/dist-packages (from gradio>=5.8.0->smolagents) (0.34.0) Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from gradio-client==1.5.2->gradio>=5.8.0->smolagents) (2024.10.0) Requirement already satisfied: websockets<15.0,>=10.0 in /usr/local/lib/python3.10/dist-packages (from gradio-client==1.5.2->gradio>=5.8.0->smolagents) (14.1) Requirement already satisfied: certifi in /usr/local/lib/python3.10/dist-packages (from httpx<0.28.0,>=0.23.0->litellm) (2024.12.14) Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.10/dist-packages (from httpx<0.28.0,>=0.23.0->litellm) (1.0.7) Requirement already satisfied: idna in /usr/local/lib/python3.10/dist-packages (from httpx<0.28.0,>=0.23.0->litellm) (3.10) Requirement already satisfied: sniffio in /usr/local/lib/python3.10/dist-packages (from httpx<0.28.0,>=0.23.0->litellm) (1.3.1) Requirement already satisfied: h11<0.15,>=0.13 in /usr/local/lib/python3.10/dist-packages (from httpcore==1.*->httpx<0.28.0,>=0.23.0->litellm) (0.14.0) Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.10/dist-packages (from importlib-metadata>=6.8.0->litellm) (3.21.0) Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (2024.10.1) Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (0.35.1) Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema<5.0.0,>=4.22.0->litellm) (0.22.3) Requirement already satisfied: beautifulsoup4<5,>=4.9 in /usr/local/lib/python3.10/dist-packages (from markdownify>=0.14.1->smolagents) (4.12.3) Requirement already satisfied: six<2,>=1.15 in /usr/local/lib/python3.10/dist-packages (from markdownify>=0.14.1->smolagents) (1.17.0) Requirement already satisfied: distro<2,>=1.7.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.55.3->litellm) (1.9.0) Requirement already satisfied: jiter<1,>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.55.3->litellm) (0.8.2) Requirement already satisfied: tqdm>4 in /usr/local/lib/python3.10/dist-packages (from openai>=1.55.3->litellm) (4.67.1) Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.10/dist-packages (from pandas>=2.2.3->smolagents) (2.8.2) Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=2.2.3->smolagents) (2024.2) Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.10/dist-packages (from pandas>=2.2.3->smolagents) (2024.2) Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<3.0.0,>=2.0.0->litellm) (0.7.0) Requirement already satisfied: pydantic-core==2.27.1 in /usr/local/lib/python3.10/dist-packages (from pydantic<3.0.0,>=2.0.0->litellm) (2.27.1) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.32.3->smolagents) (3.4.0) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.32.3->smolagents) (2.2.3) Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=13.9.4->smolagents) (3.0.0) Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=13.9.4->smolagents) (2.18.0) Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.10/dist-packages (from tiktoken>=0.7.0->litellm) (2024.11.6) Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers>=4.0.0->smolagents) (3.16.1) Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers>=4.0.0->smolagents) (0.4.5) Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->litellm) (2.4.4) Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->litellm) (1.3.2) Requirement already satisfied: async-timeout<6.0,>=4.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->litellm) (4.0.3) Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->litellm) (1.5.0) Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->litellm) (6.1.0) Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->litellm) (0.2.1) Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->litellm) (1.18.3) Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch->smolagents) (3.4.2) Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.10/dist-packages (from torch->smolagents) (1.13.1) Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy==1.13.1->torch->smolagents) (1.3.0) Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<5.0,>=3.0->gradio>=5.8.0->smolagents) (1.2.2) Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4<5,>=4.9->markdownify>=0.14.1->smolagents) (2.6) Requirement already satisfied: protobuf<6.0.0,>=3.20.0 in /usr/local/lib/python3.10/dist-packages (from e2b<2.0.0,>=1.0.4->e2b-code-interpreter>=1.0.3->smolagents) (4.25.5) Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=13.9.4->smolagents) (0.1.2) Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer<1.0,>=0.12->gradio>=5.8.0->smolagents) (1.5.4)
Import Dependencies
Import all required libraries and setup the LLM model:
/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_config.py:345: UserWarning: Valid config keys have changed in V2: * 'fields' has been removed warnings.warn(message, UserWarning)
Database Connection Class
Create a MongoDB connection manager:
Agent Tools Defenitions
Define tools for each agent type:
Main Order Management System
Define the main system class that orchestrates all agents:
Adding Sample Data
To test the system, you might want to add some sample products to MongoDB:
Sample products added successfully!
Testing the System
Let's test our system with a sample order:
Orders processing result: Here’s the response to your request:
---
### **Processed Orders and Inventory Update**
1. **Orders Created**:
- **Order 1**:
- **Products**:
- `prod1`: 2 units
- `prod2`: 1 unit
- **Delivery Address**: `123 Main St`
- **Order ID**: `677b8a9ff033af3a53c9a75a`
- **Order 2**:
- **Products**:
- `prod3`: 3 units
- **Delivery Address**: `456 Elm St`
- **Order ID**: `677b8aa3f033af3a53c9a75c`
2. **Inventory Updated**:
- **`prod1` (Laptop)**:
- Initial stock: 6 units
- Subtracted: 2 units
- New stock: 4 units
- **`prod2` (Smartphone)**:
- Initial stock: 13 units
- Subtracted: 1 unit
- New stock: 12 units
- **`prod3` (Headphones)**:
- Initial stock: 24 units
- Subtracted: 3 units
- New stock: 21 units
3. **Delivery Status**:
- Both orders have been marked as **"in_transit"** and are ready for delivery.
---
### **Summary**:
- The orders have been successfully processed.
- The inventory has been updated to reflect the subtracted quantities.
- The delivery status for both orders is now **"in_transit"**.
Let me know if you need further assistance! 😊
Conclusions
In this notebook, we have successfully implemented a multi-agent order management system using smolagents and MongoDB. We defined various tools for managing inventory, creating orders, and updating delivery statuses. We also created a main system class to orchestrate these agents and tested the system with sample data and orders.
This approach demonstrates the power of combining agent-based systems with robust data persistence solutions like MongoDB to create scalable and efficient order management systems.