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} Пам'ятайте: відповідайте ТІЛЬКИ українською, будьте точними, цитуйте джерела для кожного твердження. """