import os from anthropic import Anthropic from .prompts import SYSTEM_PROMPT, get_analysis_prompt class NPAAnalyzer: def __init__(self): self.base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) self.methodology_path = os.path.join(self.base_dir, 'data', 'methodology.txt') api_key = os.getenv('ANTHROPIC_API_KEY') if not api_key: raise ValueError("API key not found in environment variables") self.anthropic = Anthropic() self.methodology = self._load_methodology() print(f"Методологія завантажена, розмір: {len(self.methodology)} символів") def _load_methodology(self): print(f"Спроба читання методології з: {self.methodology_path}") try: with open(self.methodology_path, 'r', encoding='utf-8') as file: content = file.read() content = content.strip() if not content: raise ValueError("Файл методології порожній") return content except FileNotFoundError: raise FileNotFoundError(f"Файл методології не знайдено за шляхом: {self.methodology_path}") except Exception as e: raise Exception(f"Помилка при читанні файлу методології: {str(e)}") def analyze_npa(self, npa_text: str) -> str: if not npa_text: return "Будь ласка, введіть текст НПА для аналізу." try: response = self.anthropic.messages.create( model="claude-3-5-sonnet-latest", max_tokens=8000, messages=[ { "role": "assistant", "content": "Ти - експерт з антикорупційної експертизи нормативно-правових актів." }, { "role": "user", "content": get_analysis_prompt(self.methodology, npa_text) } ] ) return response.content[0].text # Витягуємо перший елемент тексту except Exception as e: return f"Помилка при аналізі: {str(e)}"