from uuid import UUID from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy import select from sqlalchemy.orm import Session from app.db.session import get_db from app.models.rag import RagContext from app.schemas.catalog import Page from app.schemas.rag import ContextRead, PrepareContext from app.services.auth import CurrentSession, require_admin from app.services.catalog import page_result from app.services.rag import prepare_context router = APIRouter(prefix="/rag/contexts", tags=["rag"], dependencies=[Depends(require_admin)]) @router.post("", response_model=ContextRead, status_code=201) def prepare( payload: PrepareContext, current: CurrentSession = Depends(require_admin), db: Session = Depends(get_db), ): """准备并保存请求;不调用生成模型,不返回模型答案。""" return prepare_context(db, payload, current.user.id) @router.get("", response_model=Page[ContextRead]) def history( page: int = Query(1, ge=1), page_size: int = Query(20, ge=1, le=100), db: Session = Depends(get_db), ): result = page_result( db, select(RagContext).order_by(RagContext.created_at.desc(), RagContext.id), page, page_size, ) result["items"] = [row.response for row in result["items"]] return result @router.get("/{context_id}", response_model=ContextRead) def read(context_id: UUID, db: Session = Depends(get_db)): row = db.get(RagContext, str(context_id)) if row is None: raise HTTPException(404, "上下文记录不存在") return row.response