Фиксация изменений
This commit is contained in:
36
app/modules/chat/session_resolver.py
Normal file
36
app/modules/chat/session_resolver.py
Normal file
@@ -0,0 +1,36 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from app.core.exceptions import AppError
|
||||
from app.schemas.chat import ChatMessageRequest
|
||||
from app.schemas.common import ModuleName
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from app.modules.chat.dialog_store import DialogSessionStore
|
||||
|
||||
|
||||
class ChatSessionResolver:
|
||||
def __init__(self, dialogs: DialogSessionStore, rag_session_exists) -> None:
|
||||
self._dialogs = dialogs
|
||||
self._rag_session_exists = rag_session_exists
|
||||
|
||||
def resolve(self, request: ChatMessageRequest) -> tuple[str, str]:
|
||||
if request.dialog_session_id and request.rag_session_id:
|
||||
dialog = self._dialogs.get(request.dialog_session_id)
|
||||
if not dialog:
|
||||
raise AppError("dialog_not_found", "Dialog session not found", ModuleName.BACKEND)
|
||||
if dialog.rag_session_id != request.rag_session_id:
|
||||
raise AppError("dialog_rag_mismatch", "Dialog session does not belong to rag session", ModuleName.BACKEND)
|
||||
return request.dialog_session_id, request.rag_session_id
|
||||
|
||||
if request.session_id and request.project_id:
|
||||
if not self._rag_session_exists(request.project_id):
|
||||
raise AppError("rag_session_not_found", "RAG session not found", ModuleName.RAG)
|
||||
return request.session_id, request.project_id
|
||||
|
||||
raise AppError(
|
||||
"missing_sessions",
|
||||
"dialog_session_id and rag_session_id are required",
|
||||
ModuleName.BACKEND,
|
||||
)
|
||||
Reference in New Issue
Block a user