/
ksilisk
/
spbtechrun_hack
Обзор
Документация
Войти
/
ksilisk
/
spbtechrun_hack
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
python/backend/api/v1/routes_chat.py
72 строки
3 KB
Shaliko Salimov
user profile support
12 дек 2025, 21:13
12 дек 2025, 21:13
16730d4
Код
Авторство
О чём код?
import asyncio from fastapi import APIRouter, Depends from config import Settings, get_settings from core.dialog.context_builder import ContextBuilder from core.dialog.postgres_session_store import get_postgres_session_store from core.generators.answer_generator import AnswerGenerator from core.nlp.intent_classifier import IntentClassifier from core.nlp.toxicity_filter import ToxicityFilter from core.pipeline.chat_pipeline import ChatPipeline from core.profile.profile import ProfileService from core.prompt.prompt_store import PromptStore from core.retrieval.rag_chain import RagService, build_rag_qa_chain from core.routing.intent_router import IntentRouter from infrastructure.llm.gigachat_langchain import get_gigachat from infrastructure.logging.logger import get_logger from infrastructure.vectorstore.chroma_store import get_chroma_vectorstore from schemas.chat import ChatRequest, ChatResponse router = APIRouter(prefix="/v1", tags=["chat"]) _toxicity_filter = ToxicityFilter() def get_chat_pipeline( settings: Settings = Depends(get_settings), ) -> ChatPipeline: prompt_store = PromptStore(settings.prompts_path) context_builder = ContextBuilder(prompt_store) gigachat = get_gigachat(settings) vectorstore = get_chroma_vectorstore(settings) qa_chain = build_rag_qa_chain(vectorstore=vectorstore, llm=gigachat, prompt_store=prompt_store) rag_service = RagService(qa_chain=qa_chain, logger=get_logger("rag")) intent_classifier = IntentClassifier(gigachat, prompt_store=prompt_store) answer_generator = AnswerGenerator(gigachat, get_logger("answer_generator"), settings.mcp_server_url) intent_router = IntentRouter( rag_service=rag_service, answer_generator=answer_generator, context_builder=context_builder, ) postgres_session_store = get_postgres_session_store(settings) profile_service = ProfileService(gigachat, prompt_store=prompt_store, logger=get_logger("profile_service"), postgres_session_store=postgres_session_store) logger = get_logger("chat") return ChatPipeline( toxicity_filter=_toxicity_filter, intent_classifier=intent_classifier, intent_router=intent_router, postgres_session_store=postgres_session_store, profile_service=profile_service, logger=logger, ) @router.post("/chat", response_model=ChatResponse) async def chat_endpoint( request: ChatRequest, pipeline: ChatPipeline = Depends(get_chat_pipeline), ) -> ChatResponse: interaction_result = await pipeline.handle_chat(request) response = ChatResponse( user_id=interaction_result.user_id, reply=interaction_result.model_reply ) try: if interaction_result.intent != "toxicity": asyncio.create_task(pipeline.profile_service.update_after_answer(interaction_result)) except Exception: pipeline.logger.error("Profile not found for user_id=%s", request.user_id) return response