import json from anthropic import AsyncAnthropic from app.services.ai.base import AIProvider, SYSTEM_PROMPT, USER_PROMPT_TEMPLATE class AnthropicProvider(AIProvider): def __init__(self, config: dict) -> None: self._client = AsyncAnthropic(api_key=config["api_key"]) self._model = config.get("model", "claude-haiku-4-5-20251001") async def classify_document(self, text: str) -> dict: message = await self._client.messages.create( model=self._model, max_tokens=2048, system=SYSTEM_PROMPT, messages=[{ "role": "user", "content": USER_PROMPT_TEMPLATE.format(text=text[:100_000]), }], ) raw = message.content[0].text.strip() return _parse_json(raw) def _parse_json(raw: str) -> dict: # Strip accidental markdown fences despite explicit instruction not to include them if raw.startswith("```"): raw = raw.split("\n", 1)[1].rsplit("```", 1)[0] return json.loads(raw)