"""HTTP client for the Nous inference chat completions API.""" from __future__ import annotations import os import httpx _DEFAULT_UA = "osint-dashboard-news-summarizer" _DEFAULT_BASE = "https://inference-api.nousresearch.com/v1" def chat(prompt, *, api_key, model, base_url, json_mode=False) -> str: resolved = (base_url or os.environ.get("NOUS_BASE_URL", _DEFAULT_BASE)).rstrip("/") url = f"{resolved}/chat/completions" headers = { "Authorization": f"Bearer {api_key}", "User-Agent": os.environ.get("OSINT_USER_AGENT") or _DEFAULT_UA, } payload = { "model": model, "messages": [{"role": "user", "content": prompt}], "temperature": 0.2, "max_tokens": 4096, } if json_mode: payload["response_format"] = {"type": "json_object"} try: with httpx.Client(timeout=60.0) as client: resp = client.post(url, headers=headers, json=payload) if resp.status_code == 401 or resp.status_code >= 500: return "" data = resp.json() return data["choices"][0]["message"]["content"] except Exception: return ""