Spaces:
Running
Running
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)}" | |