From e643c7db17c8eae314579020b571663cc5a97996 Mon Sep 17 00:00:00 2001 From: Xin Wang Date: Mon, 9 Feb 2026 00:43:14 +0800 Subject: [PATCH] Update engine protocol --- engine/app/backend_client.py | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 engine/app/backend_client.py diff --git a/engine/app/backend_client.py b/engine/app/backend_client.py new file mode 100644 index 0000000..1e716dc --- /dev/null +++ b/engine/app/backend_client.py @@ -0,0 +1,44 @@ +"""Backend API client for assistant config.""" + +from __future__ import annotations + +from typing import Any, Dict, Optional + +import aiohttp +from loguru import logger + +from app.config import settings + + +async def fetch_assistant_config(assistant_id: str) -> Optional[Dict[str, Any]]: + """Fetch assistant config payload from backend API. + + Expected response shape: + { + "assistant": {...}, + "voice": {...} | null + } + """ + if not settings.backend_url: + logger.warning("BACKEND_URL not set; skipping assistant config fetch") + return None + + url = f"{settings.backend_url.rstrip('/')}/api/assistants/{assistant_id}/config" + timeout = aiohttp.ClientTimeout(total=settings.backend_timeout_sec) + + try: + async with aiohttp.ClientSession(timeout=timeout) as session: + async with session.get(url) as resp: + if resp.status == 404: + logger.warning(f"Assistant config not found: {assistant_id}") + return None + resp.raise_for_status() + payload = await resp.json() + if not isinstance(payload, dict): + logger.warning("Assistant config payload is not a dict; ignoring") + return None + return payload + except Exception as exc: + logger.warning(f"Failed to fetch assistant config ({assistant_id}): {exc}") + return None +