48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
import os
|
|
from typing import Optional
|
|
|
|
import httpx
|
|
|
|
|
|
class DagiRouterClient:
|
|
"""HTTP клієнт для DAGI Router"""
|
|
|
|
def __init__(self, base_url: str):
|
|
self.base_url = base_url.rstrip("/")
|
|
self._client = httpx.AsyncClient(timeout=60.0)
|
|
|
|
async def ask_agent(
|
|
self,
|
|
agent_id: str,
|
|
prompt: str,
|
|
system_prompt: Optional[str] = None,
|
|
) -> dict:
|
|
payload = {
|
|
"prompt": prompt,
|
|
}
|
|
if system_prompt:
|
|
payload["system_prompt"] = system_prompt
|
|
|
|
response = await self._client.post(
|
|
f"{self.base_url}/v1/agents/{agent_id}/infer",
|
|
json=payload,
|
|
)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
|
|
_router_client: Optional[DagiRouterClient] = None
|
|
|
|
|
|
def get_dagi_router_client() -> DagiRouterClient:
|
|
"""Dependency factory for FastAPI"""
|
|
global _router_client
|
|
|
|
if _router_client is None:
|
|
base_url = os.getenv("DAGI_ROUTER_URL", "http://localhost:9102")
|
|
_router_client = DagiRouterClient(base_url)
|
|
|
|
return _router_client
|
|
|
|
|