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}

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