a7f78d71b2
FastAPI + ChromaDB + E5-large + DeepSeek по паттерну work-pcs-dr-cdss, адаптированному под пациентский контекст: - services: embeddings (E5-large с префиксами), vectorstore (коллекция operators_wiki), document_processor (PDF/DOCX/TXT/MD + чанкер с FAQ- паттерном под wiki), llm_client (системный промпт ассистента клиники), rag_pipeline (одиночный вопрос → retrieval → ответ). - routers: /health, /documents (upload, list, chunks, delete), /query. - static/index.html: шапка со статусом, блок базы знаний с раскрытием чанков по клику, блок тест-вопроса с 3-колоночным ответом (чанки со score / собранный промпт / ответ LLM). - Порт 8003 (8001 занят CDSS, 8002 — voicenote). E2E проверен: загрузка wiki_test.md → 2 чанка, вопрос «как записать ребёнка к лору?» → top score 84.8%, корректный ответ DeepSeek. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
30 lines
774 B
Python
30 lines
774 B
Python
from fastapi import APIRouter
|
|
|
|
from config import settings
|
|
from models.responses import HealthResponse
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/health", response_model=HealthResponse)
|
|
async def health():
|
|
from main import vectorstore_service
|
|
|
|
if vectorstore_service is None:
|
|
return HealthResponse(
|
|
status="loading",
|
|
chromadb="not_connected",
|
|
embedding_model=settings.embedding_model,
|
|
documents_count=0,
|
|
chunks_count=0,
|
|
)
|
|
|
|
stats = vectorstore_service.get_stats()
|
|
return HealthResponse(
|
|
status="ok",
|
|
chromadb="connected",
|
|
embedding_model=settings.embedding_model,
|
|
documents_count=stats["documents_count"],
|
|
chunks_count=stats["chunks_count"],
|
|
)
|