37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
import requests
|
|
import logging
|
|
import time
|
|
import json
|
|
from config import OLLAMA_URL, OLLAMA_MODEL
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
def call_llm(prompt, timeout=90):
|
|
deadline = time.time() + timeout
|
|
try:
|
|
with requests.post(
|
|
OLLAMA_URL,
|
|
json={"model": OLLAMA_MODEL, "prompt": prompt, "stream": True, "format": "json"},
|
|
stream=True,
|
|
timeout=30,
|
|
) as r:
|
|
r.raise_for_status()
|
|
chunks = []
|
|
for line in r.iter_lines():
|
|
if time.time() > deadline:
|
|
log.warning("LLM call exceeded wall-clock timeout of %ds", timeout)
|
|
break
|
|
if not line:
|
|
continue
|
|
try:
|
|
data = json.loads(line)
|
|
chunks.append(data.get("response", ""))
|
|
if data.get("done"):
|
|
break
|
|
except json.JSONDecodeError:
|
|
continue
|
|
return "".join(chunks)
|
|
except requests.RequestException as e:
|
|
log.error("LLM call failed: %s", e)
|
|
return ""
|