# Local Runtime Testing (Laddr with OpenAI) This guide documents the **local testing workflow** for the Laddr multi-agent system using `python main.py` with the **in-memory queue backend**. It’s ideal for debugging agents, verifying tool logic, and validating agent coordination locally — **no Docker required.** ⚙️ **Tested Configuration:** OpenAI LLM backend (`gpt-4o-mini`), SQLite database, In-memory queue. ## Local Configuration Set up your `.env` file as follows: ```bash # Backend Configuration LLM_BACKEND=openai QUEUE_BACKEND=memory DB_BACKEND=sqlite DATABASE_URL=sqlite:///./Laddr.db # LLM Keys OPENAI_API_KEY=sk-proj-*** RESEARCHER_MODEL=gpt-4o-mini COORDINATOR_MODEL=gpt-4o-mini ANALYZER_MODEL=gpt-4o-mini WRITER_MODEL=gpt-4o-mini VALIDATOR_MODEL=gpt-4o-mini # Optional Tool Keys SERPER_API_KEY=*** ``` 💡 **Note:** The in-memory backend does not require Redis or Docker. SQLite is used for trace persistence. --- ## Testing Scenarios ### Single Agent Execution ```bash AGENT_NAME=writer python main.py run '{"query": "Write a paragraph about artificial intelligence"}' ``` Runs the `writer` agent independently. No delegation or external workers required. --- ### Analyzer Tool Usage ```bash AGENT_NAME=analyzer python main.py run '{"query": "Calculate the sum of 25, 50, 75, 100 and find the average"}' ``` Verifies `calculate` and `aggregate` tools within the same runtime. --- ### Sequential Workflow ```python from Laddr import AgentRunner, LaddrConfig import asyncio, uuid async def test(): runner = AgentRunner(env_config=LaddrConfig()) job_id = str(uuid.uuid4()) inputs = {'query': 'Calculate 100 + 200 + 300'} for agent in ['analyzer', 'writer']: result = await runner.run(inputs, agent_name=agent, job_id=job_id) if result.get('status') == 'success': inputs = {'input': result['result']} asyncio.run(test()) ``` Shared `job_id` ensures traces for all agents are grouped in the same workflow. --- ## Running Worker Processes Locally To start an agent worker locally, run the agent script for the worker you want to start: ```bash python agents/coordinator.py ``` You can start multiple workers by opening separate terminals and running: ```bash # Terminal 1 python agents/coordinator.py # Terminal 2 python agents/researcher.py # Terminal 3 python agents/writer.py ``` **Note:** Delegation (workers handing tasks to each other) requires a queue backend such as Redis or Kafka. The in-memory queue is ideal for **single-agent debugging** but not for inter-process delegation. --- ## Known Limitations - Delegation tools (`system_delegate_task`) need worker processes. - In-memory queue supports **single process only** (no inter-process communication). - Some agents (like `researcher`) may attempt delegation — refine prompts accordingly. --- ## Debugging and Trace Analysis Traces are automatically logged to SQLite (`Laddr.db`): ```bash sqlite3 Laddr.db "SELECT agent_name, event_type, timestamp FROM traces ORDER BY id DESC LIMIT 10;" ``` **Common trace events include:** - `task_start`, `task_complete` - `llm_usage`, `tool_call`, `tool_error` - `autonomous_think` (agent reasoning) --- ## Local Testing Guidelines - Use single-agent runs for debugging and instruction tuning. - Use sequential workflows to simulate multi-agent pipelines. - Enable tracing via SQLite for every run. - Avoid delegation without worker processes. For full orchestration testing (delegation, parallel tasks), switch to `QUEUE_BACKEND=redis` and run **Docker-based workers**. --- ## Notes - **MemoryBus** is a process-scoped singleton that enables agent task routing within the same runtime. It’s perfect for local testing but not suitable for production scaling. - All events, tools, and LLM interactions are persisted in SQLite — query them anytime for debugging.