feat(backend): update orchestrator endpoint

- endpoints/orchestrator.py: update orchestrator API endpoint with new features
This commit is contained in:
caoxiaozhu
2026-05-12 06:36:58 +00:00
parent 01df3452fd
commit e416818ae2

View File

@@ -2,12 +2,18 @@ from __future__ import annotations
from typing import Annotated from typing import Annotated
from fastapi import APIRouter, Depends, HTTPException, status from fastapi import APIRouter, Depends, HTTPException, Query, status
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from app.api.deps import get_db from app.api.deps import get_db
from app.schemas.common import ErrorResponse from app.schemas.common import ErrorResponse
from app.schemas.orchestrator import OrchestratorRequest, OrchestratorResponse from app.schemas.orchestrator import (
ConversationDeleteResponse,
ConversationLookupResponse,
OrchestratorRequest,
OrchestratorResponse,
)
from app.services.agent_conversations import AgentConversationService
from app.services.orchestrator import OrchestratorService from app.services.orchestrator import OrchestratorService
router = APIRouter(prefix="/orchestrator") router = APIRouter(prefix="/orchestrator")
@@ -31,3 +37,41 @@ def run_orchestrator(payload: OrchestratorRequest, db: DbSession) -> Orchestrato
return OrchestratorService(db).run(payload) return OrchestratorService(db).run(payload)
except ValueError as exc: except ValueError as exc:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc
@router.get(
"/conversations/latest",
response_model=ConversationLookupResponse,
summary="查询当前用户最近会话",
description="返回当前用户最近一段可恢复的对话会话及完整消息历史。",
)
def get_latest_conversation(
user_id: Annotated[str, Query(min_length=1, description="当前用户 ID。")],
db: DbSession,
) -> ConversationLookupResponse:
service = AgentConversationService(db)
conversation = service.get_latest_conversation_for_user(user_id=user_id, source="user_message")
if conversation is None:
return ConversationLookupResponse(found=False, conversation=None)
return ConversationLookupResponse(
found=True,
conversation=service.serialize_conversation(conversation, include_messages=True),
)
@router.delete(
"/conversations",
response_model=ConversationDeleteResponse,
summary="删除当前用户全部会话",
description="删除当前用户在智能体工作台中的全部历史会话,用于显式开启全新对话。",
)
def delete_user_conversations(
user_id: Annotated[str, Query(min_length=1, description="当前用户 ID。")],
db: DbSession,
) -> ConversationDeleteResponse:
deleted_count = AgentConversationService(db).delete_user_conversations(
user_id=user_id,
source="user_message",
)
return ConversationDeleteResponse(deleted_count=deleted_count)