-
Notifications
You must be signed in to change notification settings - Fork 5
Open
Labels
P3Low priority / BacklogLow priority / Backlogphase:5-techdebtPhase 5: Technical DebtPhase 5: Technical DebtrefactoringArchitectural refactoringArchitectural refactoring
Description
Parent
Sub-issue of #641 (Phase 7: Service facade migration)
Зависит от
- Фаза 6: Protocol interfaces — типизация контрактов между модулями #496 (Phase 6 — ChatService Protocol определён)
- Phase 7.3: LLMService facade — извлечь generate/stream из оркестратора #644 (Phase 7.3 — LLMService, т.к. ChatService.send_message() вызывает LLM)
Цель
Объединить chat CRUD (modules/chat/service.py) и LLM-генерацию (из оркестратора / LLMService) в единый ChatService фасад, соответствующий Protocol из modules/chat/protocols.py.
Текущее состояние
modules/chat/service.py—ChatService(CRUD: create_session, get_session, add_message, get_active_messages, edit_message, branch_regenerate, etc.) +ChatShareService(sharing, forking)- Оркестратор —
send_messageendpoint собирает history, вызывает LLM, сохраняет ответ — это и естьChatService.send_message()из Protocol - Chat router (
modules/chat/router.py) — HTTP endpoints, делегируют к service + orchestrator
Что сделать
- Расширить существующий
ChatServiceвmodules/chat/service.pyметодамиsend_message()иstream_message() - Эти методы: получают history → вызывают
LLMService.generate()/stream()→ сохраняют ответ → возвращаютMessageInfo - Зависимость от
LLMService— через конструктор или lazy import share_session()/unshare_session()делегируют кChatShareService- Возвраты типизированы через TypedDict из
modules/chat/schemas.py - Мигрировать chat router: вместо inline orchestrator-логики →
chat_service.send_message()
Нюансы
- Зависит от 7.3 — без LLMService нет
generate()для делегирования - Streaming SSE —
stream_message()должен возвращатьAsyncIterator[StreamChunk], совместимый с SSE endpoint - Branching — edit/regenerate тоже вызывают LLM, нужно решить: добавлять в Protocol или оставить как internal
- Widget/Telegram — используют свой путь к LLM (через оркестратор), не через ChatService. Унификация — опциональна
- Существующий
ChatServiceуже есть и используется — расширяем, не заменяем
Критерии готовности
-
ChatServiceреализует Protocol изmodules/chat/protocols.py -
send_message()иstream_message()работают - Chat router использует
chat_service.send_message()вместо inline-кода - Sharing методы интегрированы
- Тесты, CI зелёный
Оценка: L (1 PR)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
P3Low priority / BacklogLow priority / Backlogphase:5-techdebtPhase 5: Technical DebtPhase 5: Technical DebtrefactoringArchitectural refactoringArchitectural refactoring