docsa_HD
Edit all
661d212
raw
history blame
2.45 kB
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)}"