- TTS: xtts-v2 integration with voice cloning support
- Document: docling integration for PDF/DOCX/PPTX processing
- Memory Service: added /facts/upsert, /facts/{key}, /facts endpoints
- Added required dependencies (TTS, docling)
71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
"""
|
|
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
|