o2o-negosium-original/agent/router/v1/chat/chat.py

39 lines
1.4 KiB
Python

"""chat 라우터 (대화형 협상, P7 슬라이스). 엔진 주입(헤더→레지스트리) → ChatService."""
from fastapi import APIRouter, Depends
from router.deps import get_tenant_engine
from router.v1.chat.protocol import Req_Chat, Res_Chat, Res_ChatSession
from services.chat_service import ChatService
from tenancy.registry import TenantEngine
router = APIRouter(prefix="/v1/chat", tags=["Chat (negotiation)"], responses={404: {"description": "Not found"}})
@router.post(
path="",
response_model=Res_Chat,
summary="협상 대화 한 턴",
description="session_id 없으면 새 협상 시작. user_input 으로 진행(버튼 텍스트/가격). X-Tenant-ID 헤더 필수.",
)
async def chat(
req: Req_Chat,
engine: TenantEngine = Depends(get_tenant_engine),
service: ChatService = Depends(),
):
return await service.chat(engine, req)
@router.get(
path="/sessions/{session_id}",
response_model=Res_ChatSession,
summary="세션 상태 조회 (desync 리싱크)",
description="agent 세션의 현재 step/ended 를 반환한다. backend 가 타임아웃·재진입 시 정합을 맞출 때 사용. X-Tenant-ID 헤더 필수.",
)
async def get_session(
session_id: str,
engine: TenantEngine = Depends(get_tenant_engine),
service: ChatService = Depends(),
):
return await service.get_session_state(engine, session_id)