feat: prepare RAG evidence and compatible chat requests
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
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
|
||||
Reference in New Issue
Block a user