Фиксация изменений
This commit is contained in:
@@ -1,13 +1,16 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from fastapi import APIRouter, Header
|
||||
from fastapi.responses import StreamingResponse
|
||||
|
||||
from app.core.exceptions import AppError
|
||||
from app.modules.chat.direct_service import CodeExplainChatService
|
||||
from app.modules.chat.dialog_store import DialogSessionStore
|
||||
from app.modules.chat.repository import ChatRepository
|
||||
from app.modules.chat.service import ChatOrchestrator
|
||||
from app.modules.chat.task_store import TaskStore
|
||||
from app.modules.contracts import AgentRunner
|
||||
from app.modules.rag_session.session_store import RagSessionStore
|
||||
from app.modules.shared.event_bus import EventBus
|
||||
from app.modules.shared.idempotency_store import IdempotencyStore
|
||||
from app.modules.shared.retry_executor import RetryExecutor
|
||||
@@ -20,6 +23,11 @@ from app.schemas.chat import (
|
||||
)
|
||||
from app.schemas.common import ModuleName
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from app.modules.chat.repository import ChatRepository
|
||||
from app.modules.contracts import AgentRunner
|
||||
from app.modules.rag_session.session_store import RagSessionStore
|
||||
|
||||
|
||||
class ChatModule:
|
||||
def __init__(
|
||||
@@ -29,12 +37,16 @@ class ChatModule:
|
||||
retry: RetryExecutor,
|
||||
rag_sessions: RagSessionStore,
|
||||
repository: ChatRepository,
|
||||
direct_chat: CodeExplainChatService | None = None,
|
||||
task_store: TaskStore | None = None,
|
||||
) -> None:
|
||||
self._rag_sessions = rag_sessions
|
||||
self.tasks = TaskStore()
|
||||
self._simple_code_explain_only = os.getenv("SIMPLE_CODE_EXPLAIN_ONLY", "true").lower() in {"1", "true", "yes"}
|
||||
self.tasks = task_store or TaskStore()
|
||||
self.dialogs = DialogSessionStore(repository)
|
||||
self.idempotency = IdempotencyStore()
|
||||
self.events = event_bus
|
||||
self.direct_chat = direct_chat
|
||||
self.chat = ChatOrchestrator(
|
||||
task_store=self.tasks,
|
||||
dialogs=self.dialogs,
|
||||
@@ -59,11 +71,13 @@ class ChatModule:
|
||||
rag_session_id=dialog.rag_session_id,
|
||||
)
|
||||
|
||||
@router.post("/api/chat/messages", response_model=TaskQueuedResponse)
|
||||
@router.post("/api/chat/messages", response_model=TaskQueuedResponse | TaskResultResponse)
|
||||
async def send_message(
|
||||
request: ChatMessageRequest,
|
||||
idempotency_key: str | None = Header(default=None, alias="Idempotency-Key"),
|
||||
) -> TaskQueuedResponse:
|
||||
) -> TaskQueuedResponse | TaskResultResponse:
|
||||
if self._simple_code_explain_only and self.direct_chat is not None:
|
||||
return await self.direct_chat.handle_message(request)
|
||||
task = await self.chat.enqueue_message(request, idempotency_key)
|
||||
return TaskQueuedResponse(task_id=task.task_id, status=task.status.value)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user