4aac59313d
Sprint 8.5 — чанкер v2 (services/document_processor.py):
- markdown-it-py для md-входа: каждый H2 открывает свою секцию, H3 идёт в тело
- множественные H1 — штатный кейс (new_booking.md = 8 H1, шаги воронки + группы);
H1 без H2 → секция heading=H1; преамбула H1 (тело до первого H2) игнорируется
- YAML frontmatter (--- ... ---) отрезается, в индекс не попадает
- breadcrumb «## {H2}» как первая строка каждого subchunk'а
- merge коротких хвостов и sentence-overlap — только внутри одной H2-секции
- excluded_section_headings в config.py
- 17 unit-тестов на stdlib unittest (tests/test_document_processor_v2.py),
включая smoke по реальным general_info.md (тимпанометрия → правильная секция)
и new_booking.md (защита от регрессии множественных H1)
- ТЗ: docs/CHUNKER_v2_TZ.md
Sprint 8.6 — регрессия остальных 4 веток (static/regression.html):
- 4 опции в селекторе режима: branch:price_question (40 кейсов),
branch:medical_question (29), branch:escalate_human (14), branch:reschedule (16)
- бэкенд из 8b уже параметрический — правок в сервисе не потребовалось
- new_booking вне скоупа — state-machine, под него отдельный 8c (multi-turn)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
23 lines
685 B
Python
23 lines
685 B
Python
from pydantic_settings import BaseSettings
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
chroma_persist_dir: str = "./data/chroma"
|
|
sqlite_path: str = "./data/sqlite/app.db"
|
|
database_url: str = "sqlite+aiosqlite:///./data/sqlite/app.db"
|
|
embedding_model: str = "intfloat/multilingual-e5-large"
|
|
deepseek_api_key: str = ""
|
|
deepseek_model: str = "deepseek-chat"
|
|
deepseek_base_url: str = "https://api.deepseek.com"
|
|
log_level: str = "info"
|
|
|
|
max_chunk_size: int = 1200
|
|
min_chunk_size: int = 200
|
|
overlap_sentences: int = 2
|
|
excluded_section_headings: list[str] = []
|
|
|
|
model_config = {"env_file": ".env", "env_file_encoding": "utf-8"}
|
|
|
|
|
|
settings = Settings()
|