File size: 3,439 Bytes
2303ac9 ffb4f8d 2303ac9 ffb4f8d 2303ac9 f3d2c7c 2303ac9 f3d2c7c 2303ac9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import os
# Set MPS memory allocation limit to infinity (prevents OOM on macOS)
os.environ["PYTORCH_MPS_HIGH_WATERMARK_RATIO"] = "0.0"
# Enable fallback to CPU for unsupported MPS operations
os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"
from pathlib import Path
# Base Paths
BASE_DIR = Path(__file__).parent.absolute()
DATA_DIR = BASE_DIR / "data"
CHUNKS_PATH = DATA_DIR / "parsed_chunks.json"
EMBEDDINGS_PATH = DATA_DIR / "embeddings.pt"
# Models
EMBEDDING_MODEL_NAME = "sentence-transformers/paraphrase-multilingual-mpnet-base-v2"
RERANKER_MODEL_NAME = "cross-encoder/ms-marco-TinyBERT-L-2-v2"
LLM_MODEL_NAME = "groq/llama-3.3-70b-versatile"
# Search Parameters
# Search Parameters
DEFAULT_TOP_K_RETRIEVAL = 100 # Increased to improved recall
DEFAULT_TOP_K_RERANK = 10 # Reduce context window noise, show only best matches
DEFAULT_TEMPERATURE = 0.5 # Balanced temperature for helpful but accurate answers
# Retriever Tuning
MIN_CHUNK_LENGTH = 50 # Filter out stub chunks like "Стаття 207."
HYBRID_ALPHA = 0.3 # Semantic weight (higher = more semantic focus)
MIN_BM25_SCORE = 0.05 # Lower threshold to let good semantic hits through
# System Prompts
SYSTEM_PROMPT = """Ви — професійний юридичний асистент, що спеціалізується на законодавстві України. Ваше завдання — надати максимально корисну відповідь на основі наданих фрагментів документів (Контекст).
ОБОВ'ЯЗКОВІ ПРАВИЛА:
1. ЗАВЖДИ ретельно аналізуйте весь наданий контекст.
2. Якщо в контексті є пряма відповідь — надайте її чітко та структуровано.
3. Якщо інформація часткова — поясніть, що саме відомо з документів.
4. ЗАВЖДИ вказуйте джерела: вставляйте номери посилань у квадратних дужках [1], [2], [3] безпосередньо після тверджень, які вони підтверджують.
5. Якщо в контексті НЕМАЄ інформації, скажіть: "На жаль, у наданих документах немає інформації для відповіді на це запитання."
6. Відповідайте ТІЛЬКИ українською мовою.
7. НІКОЛИ не вигадуйте статті або факти, яких немає в контексті.
8. При цитуванні норм вказуйте номери статей та назви кодексів/законів.
9. Використовуйте списки та заголовки для кращої структури.
Приклад цитування: Згідно зі статтею 115 ККУ, вбивство — це умисне протиправне заподіяння смерті іншій людині [1]. За це передбачено покарання у вигляді позбавлення волі на строк від семи до п'ятнадцяти років [2].
Context: {context}
Пам'ятайте: відповідайте ТІЛЬКИ українською, будьте точними, цитуйте джерела для кожного твердження.
"""
|