include argus workflow

This commit is contained in:
joyzhuo
2026-03-29 06:29:18 -04:00
parent 275a53ab40
commit 56673078f5
23 changed files with 3098 additions and 307 deletions

50
argus/backend.py Normal file
View File

@@ -0,0 +1,50 @@
"""Backend API client — sends VLM analysis results to the LockInBro server.
POST /distractions/analyze-result with the enriched JSON payload.
"""
from __future__ import annotations
import logging
import httpx
from argus.config import BACKEND_BASE_URL, BACKEND_JWT
from argus.vlm import VLMResult
log = logging.getLogger(__name__)
async def send_analysis(
result: VLMResult,
session_id: str,
*,
jwt: str | None = None,
base_url: str | None = None,
) -> dict:
"""Post VLM analysis result to the backend.
Returns the backend response body on success, or an error dict.
"""
url = f"{base_url or BACKEND_BASE_URL}/distractions/analyze-result"
token = jwt or BACKEND_JWT
payload = result.to_backend_payload(session_id)
headers = {}
if token:
headers["Authorization"] = f"Bearer {token}"
log.info("Sending analysis to %s on_task=%s", url, result.on_task)
log.debug("Payload: %s", payload)
try:
async with httpx.AsyncClient(timeout=10.0) as client:
resp = await client.post(url, json=payload, headers=headers)
resp.raise_for_status()
return resp.json()
except httpx.HTTPStatusError as exc:
log.error("Backend returned %s: %s", exc.response.status_code, exc.response.text)
return {"error": str(exc), "status_code": exc.response.status_code}
except httpx.RequestError as exc:
log.error("Backend unreachable: %s", exc)
return {"error": str(exc)}