""" DAGI Router Client Sends requests to DAGI Router from Bot Gateway """ import logging import os import httpx from typing import Dict, Any logger = logging.getLogger(__name__) # Router configuration from environment ROUTER_BASE_URL = os.getenv("ROUTER_URL", "http://127.0.0.1:9102") ROUTER_TIMEOUT = 60.0 # Increased for cloud API calls async def send_to_router(body: Dict[str, Any]) -> Dict[str, Any]: """ Send request to DAGI Router. Args: body: Request payload with mode, message, agent, metadata, etc. Returns: Router response as dict Raises: httpx.HTTPError: if router request fails """ agent_id = body.get("agent", "devtools") message = body.get("message", "") system_prompt = body.get("system_prompt") metadata = body.get("metadata", {}) # Build infer request infer_url = f"{ROUTER_BASE_URL}/v1/agents/{agent_id}/infer" infer_body = { "prompt": message, "system_prompt": system_prompt, "metadata": metadata } # Pass provider override if specified if metadata.get("provider"): infer_body["provider_override"] = metadata["provider"] logger.info(f"Sending to Router ({infer_url}): agent={agent_id}, provider={metadata.get('provider', 'default')}") try: async with httpx.AsyncClient(timeout=ROUTER_TIMEOUT) as client: response = await client.post(infer_url, json=infer_body) response.raise_for_status() result = response.json() # Convert Router response to Gateway expected format return { "ok": True, "data": { "text": result.get("response", result.get("text", "")) }, "response": result.get("response", result.get("text", "")), "model": result.get("model"), "backend": result.get("backend") } except httpx.HTTPError as e: logger.error(f"Router request failed: {e}") raise