Skip to content

Phase 7.4: ChatService facade — объединить chat CRUD + LLM-генерацию #645

@ShaerWare

Description

@ShaerWare

Parent

Sub-issue of #641 (Phase 7: Service facade migration)

Зависит от

Цель

Объединить chat CRUD (modules/chat/service.py) и LLM-генерацию (из оркестратора / LLMService) в единый ChatService фасад, соответствующий Protocol из modules/chat/protocols.py.

Текущее состояние

  • modules/chat/service.pyChatService (CRUD: create_session, get_session, add_message, get_active_messages, edit_message, branch_regenerate, etc.) + ChatShareService (sharing, forking)
  • Оркестраторsend_message endpoint собирает history, вызывает LLM, сохраняет ответ — это и есть ChatService.send_message() из Protocol
  • Chat router (modules/chat/router.py) — HTTP endpoints, делегируют к service + orchestrator

Что сделать

  1. Расширить существующий ChatService в modules/chat/service.py методами send_message() и stream_message()
  2. Эти методы: получают history → вызывают LLMService.generate()/stream() → сохраняют ответ → возвращают MessageInfo
  3. Зависимость от LLMService — через конструктор или lazy import
  4. share_session() / unshare_session() делегируют к ChatShareService
  5. Возвраты типизированы через TypedDict из modules/chat/schemas.py
  6. Мигрировать chat router: вместо inline orchestrator-логики → chat_service.send_message()

Нюансы

  • Зависит от 7.3 — без LLMService нет generate() для делегирования
  • Streaming SSEstream_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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low priority / Backlogphase:5-techdebtPhase 5: Technical DebtrefactoringArchitectural refactoring

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions