1d01cc3b0e
Each feature service owns its system prompt in its config JSON on the shared volume. The AI Settings page now has General and System Prompts tabs — admins can view and edit any service's prompts at runtime with changes taking effect within 30 s (config cache TTL). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
"""HTTP client for the shared ai-service container."""
|
|
import json
|
|
|
|
import httpx
|
|
|
|
from app.core.config import settings
|
|
from app.services.config_reader import (
|
|
_DEFAULT_SYSTEM_PROMPT,
|
|
_DEFAULT_USER_TEMPLATE,
|
|
load_doc_config,
|
|
)
|
|
|
|
_client = httpx.AsyncClient(timeout=120.0)
|
|
|
|
|
|
class AIServiceError(Exception):
|
|
pass
|
|
|
|
|
|
async def classify_document(text: str) -> dict:
|
|
"""
|
|
Send document text to ai-service for classification.
|
|
Returns the parsed JSON result dict.
|
|
Raises AIServiceError on HTTP errors or unexpected response shapes.
|
|
"""
|
|
config = await load_doc_config()
|
|
prompts = config.get("system_prompts", {})
|
|
system_prompt = prompts.get("system") or _DEFAULT_SYSTEM_PROMPT
|
|
user_template = prompts.get("user_template") or _DEFAULT_USER_TEMPLATE
|
|
|
|
messages = [
|
|
{"role": "system", "content": system_prompt},
|
|
{"role": "user", "content": user_template.format(text=text[:50_000])},
|
|
]
|
|
|
|
try:
|
|
response = await _client.post(
|
|
f"{settings.AI_SERVICE_URL}/chat",
|
|
json={
|
|
"messages": messages,
|
|
"max_tokens": 2048,
|
|
"temperature": 0,
|
|
"response_format": "json",
|
|
},
|
|
)
|
|
except httpx.RequestError as exc:
|
|
raise AIServiceError(f"Could not reach ai-service: {exc}") from exc
|
|
|
|
if response.status_code != 200:
|
|
raise AIServiceError(
|
|
f"ai-service returned {response.status_code}: {response.text[:200]}"
|
|
)
|
|
|
|
try:
|
|
content = response.json()["content"]
|
|
return json.loads(content)
|
|
except (KeyError, json.JSONDecodeError) as exc:
|
|
raise AIServiceError(f"Unexpected ai-service response: {exc}") from exc
|