mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-09-06 11:31:12 +00:00
feat: (0.6)New UI (#1855)
Co-authored-by: 夏姜 <wenfengjiang.jwf@digital-engine.com> Co-authored-by: aries_ckt <916701291@qq.com> Co-authored-by: wb-lh513319 <wb-lh513319@alibaba-inc.com> Co-authored-by: csunny <cfqsunny@163.com>
This commit is contained in:
@@ -1,14 +1,25 @@
|
||||
from functools import cache
|
||||
from typing import List, Optional
|
||||
from typing import List, Optional, Union
|
||||
|
||||
from fastapi import APIRouter, Depends, File, Form, HTTPException, Query, UploadFile
|
||||
from fastapi import (
|
||||
APIRouter,
|
||||
Depends,
|
||||
File,
|
||||
Form,
|
||||
Header,
|
||||
HTTPException,
|
||||
Query,
|
||||
UploadFile,
|
||||
)
|
||||
from fastapi.security.http import HTTPAuthorizationCredentials, HTTPBearer
|
||||
|
||||
from dbgpt.component import SystemApp
|
||||
from dbgpt.rag.chunk_manager import ChunkParameters
|
||||
from dbgpt.serve.core import Result
|
||||
from dbgpt.serve.rag.api.schemas import (
|
||||
DocumentServeRequest,
|
||||
DocumentServeResponse,
|
||||
KnowledgeRetrieveRequest,
|
||||
KnowledgeSyncRequest,
|
||||
SpaceServeRequest,
|
||||
SpaceServeResponse,
|
||||
@@ -99,9 +110,10 @@ async def test_auth():
|
||||
return {"status": "ok"}
|
||||
|
||||
|
||||
@router.post("/spaces", dependencies=[Depends(check_api_key)])
|
||||
@router.post("/spaces")
|
||||
async def create(
|
||||
request: SpaceServeRequest, service: Service = Depends(get_service)
|
||||
request: SpaceServeRequest,
|
||||
service: Service = Depends(get_service),
|
||||
) -> Result:
|
||||
"""Create a new Space entity
|
||||
|
||||
@@ -150,11 +162,11 @@ async def delete(
|
||||
|
||||
@router.get(
|
||||
"/spaces/{space_id}",
|
||||
dependencies=[Depends(check_api_key)],
|
||||
response_model=Result[List],
|
||||
)
|
||||
async def query(
|
||||
space_id: str, service: Service = Depends(get_service)
|
||||
space_id: str,
|
||||
service: Service = Depends(get_service),
|
||||
) -> Result[List[SpaceServeResponse]]:
|
||||
"""Query Space entities
|
||||
|
||||
@@ -170,7 +182,6 @@ async def query(
|
||||
|
||||
@router.get(
|
||||
"/spaces",
|
||||
dependencies=[Depends(check_api_key)],
|
||||
response_model=Result[PaginationResult[SpaceServeResponse]],
|
||||
)
|
||||
async def query_page(
|
||||
@@ -190,13 +201,36 @@ async def query_page(
|
||||
return Result.succ(service.get_list_by_page({}, page, page_size))
|
||||
|
||||
|
||||
@router.post("/documents", dependencies=[Depends(check_api_key)])
|
||||
@router.post("/spaces/{space_id}/retrieve")
|
||||
async def space_retrieve(
|
||||
space_id: int,
|
||||
request: KnowledgeRetrieveRequest,
|
||||
service: Service = Depends(get_service),
|
||||
) -> Result:
|
||||
"""Create a new Document entity
|
||||
|
||||
Args:
|
||||
space_id (int): The space id
|
||||
request (SpaceServeRequest): The request
|
||||
service (Service): The service
|
||||
Returns:
|
||||
ServerResponse: The response
|
||||
"""
|
||||
request.space_id = space_id
|
||||
space_request = service.build_space_request(token, space_id)
|
||||
spaces = service.get_list(space_request)
|
||||
if not spaces:
|
||||
raise HTTPException(status_code=404, detail="Space not found")
|
||||
return Result.succ(await service.retrieve(request))
|
||||
|
||||
|
||||
@router.post("/documents")
|
||||
async def create_document(
|
||||
doc_name: str = Form(...),
|
||||
doc_type: str = Form(...),
|
||||
space_id: str = Form(...),
|
||||
content: Optional[str] = Form(None),
|
||||
doc_file: Optional[UploadFile] = File(None),
|
||||
doc_file: Union[UploadFile, str] = Form(None),
|
||||
service: Service = Depends(get_service),
|
||||
) -> Result:
|
||||
"""Create a new Document entity
|
||||
@@ -219,11 +253,11 @@ async def create_document(
|
||||
|
||||
@router.get(
|
||||
"/documents/{document_id}",
|
||||
dependencies=[Depends(check_api_key)],
|
||||
response_model=Result[List],
|
||||
)
|
||||
async def query(
|
||||
document_id: str, service: Service = Depends(get_service)
|
||||
document_id: int,
|
||||
service: Service = Depends(get_service),
|
||||
) -> Result[List[SpaceServeResponse]]:
|
||||
"""Query Space entities
|
||||
|
||||
@@ -239,7 +273,6 @@ async def query(
|
||||
|
||||
@router.get(
|
||||
"/documents",
|
||||
dependencies=[Depends(check_api_key)],
|
||||
response_model=Result[PaginationResult[SpaceServeResponse]],
|
||||
)
|
||||
async def query_page(
|
||||
@@ -259,6 +292,16 @@ async def query_page(
|
||||
return Result.succ(service.get_document_list({}, page, page_size))
|
||||
|
||||
|
||||
@router.post("/documents/chunks/add")
|
||||
async def add_documents_chunks(
|
||||
doc_name: str = Form(...),
|
||||
space_id: int = Form(...),
|
||||
content: List[str] = Form(None),
|
||||
service: Service = Depends(get_service),
|
||||
) -> Result:
|
||||
""" """
|
||||
|
||||
|
||||
@router.post("/documents/sync", dependencies=[Depends(check_api_key)])
|
||||
async def sync_documents(
|
||||
requests: List[KnowledgeSyncRequest], service: Service = Depends(get_service)
|
||||
@@ -274,6 +317,42 @@ async def sync_documents(
|
||||
return Result.succ(service.sync_document(requests))
|
||||
|
||||
|
||||
@router.post("/documents/batch_sync")
|
||||
async def sync_documents(
|
||||
requests: List[KnowledgeSyncRequest],
|
||||
service: Service = Depends(get_service),
|
||||
) -> Result:
|
||||
"""Create a new Document entity
|
||||
|
||||
Args:
|
||||
request (SpaceServeRequest): The request
|
||||
service (Service): The service
|
||||
Returns:
|
||||
ServerResponse: The response
|
||||
"""
|
||||
return Result.succ(service.sync_document(requests))
|
||||
|
||||
|
||||
@router.post("/documents/{document_id}/sync")
|
||||
async def sync_document(
|
||||
document_id: int,
|
||||
request: KnowledgeSyncRequest,
|
||||
service: Service = Depends(get_service),
|
||||
) -> Result:
|
||||
"""Create a new Document entity
|
||||
|
||||
Args:
|
||||
request (SpaceServeRequest): The request
|
||||
service (Service): The service
|
||||
Returns:
|
||||
ServerResponse: The response
|
||||
"""
|
||||
request.doc_id = document_id
|
||||
if request.chunk_parameters is None:
|
||||
request.chunk_parameters = ChunkParameters(chunk_strategy="Automatic")
|
||||
return Result.succ(service.sync_document([request]))
|
||||
|
||||
|
||||
@router.delete(
|
||||
"/documents/{document_id}",
|
||||
dependencies=[Depends(check_api_key)],
|
||||
|
@@ -1,4 +1,4 @@
|
||||
from typing import List, Optional
|
||||
from typing import List, Optional, Union
|
||||
|
||||
from fastapi import File, UploadFile
|
||||
|
||||
@@ -38,11 +38,13 @@ class DocumentServeRequest(BaseModel):
|
||||
"""content: description"""
|
||||
content: Optional[str] = Field(None, description="content")
|
||||
"""doc file"""
|
||||
doc_file: UploadFile = File(...)
|
||||
"""doc_source: doc source"""
|
||||
doc_source: Optional[str] = Field(None, description="doc source")
|
||||
"""doc_source: doc source"""
|
||||
doc_file: Union[UploadFile, str] = File(None)
|
||||
"""space id: space id"""
|
||||
space_id: Optional[str] = Field(None, description="space id")
|
||||
"""space name: space name"""
|
||||
space_name: Optional[str] = Field(None, description="space name")
|
||||
"""questions: questions"""
|
||||
questions: Optional[List[str]] = Field(None, description="questions")
|
||||
|
||||
|
||||
class DocumentServeResponse(BaseModel):
|
||||
@@ -54,10 +56,46 @@ class DocumentServeResponse(BaseModel):
|
||||
content: Optional[str] = Field(None, description="content")
|
||||
"""vector ids"""
|
||||
vector_ids: Optional[str] = Field(None, description="vector ids")
|
||||
"""doc_source: doc source"""
|
||||
doc_source: Optional[str] = Field(None, description="doc source")
|
||||
"""doc_source: doc source"""
|
||||
"""space: space name"""
|
||||
space: Optional[str] = Field(None, description="space name")
|
||||
"""status: status"""
|
||||
status: Optional[str] = Field(None, description="status")
|
||||
"""last_sync: last sync time"""
|
||||
last_sync: Optional[str] = Field(None, description="last sync time")
|
||||
"""result: result"""
|
||||
result: Optional[str] = Field(None, description="result")
|
||||
"""summary: summary"""
|
||||
summary: Optional[str] = Field(None, description="summary")
|
||||
"""gmt_created: created time"""
|
||||
gmt_created: Optional[str] = Field(None, description="created time")
|
||||
"""gmt_modified: modified time"""
|
||||
gmt_modified: Optional[str] = Field(None, description="modified time")
|
||||
"""chunk_size: chunk size"""
|
||||
chunk_size: Optional[int] = Field(None, description="chunk size")
|
||||
"""questions: questions"""
|
||||
questions: Optional[str] = Field(None, description="questions")
|
||||
|
||||
|
||||
class ChunkServeRequest(BaseModel):
|
||||
id: Optional[int] = Field(None, description="The primary id")
|
||||
document_id: Optional[int] = Field(None, description="document id")
|
||||
doc_name: Optional[str] = Field(None, description="document name")
|
||||
doc_type: Optional[str] = Field(None, description="document type")
|
||||
content: Optional[str] = Field(None, description="chunk content")
|
||||
meta_info: Optional[str] = Field(None, description="chunk meta info")
|
||||
questions: Optional[List[str]] = Field(None, description="chunk questions")
|
||||
gmt_created: Optional[str] = Field(None, description="chunk create time")
|
||||
gmt_modified: Optional[str] = Field(None, description="chunk modify time")
|
||||
|
||||
|
||||
class ChunkServeResponse(BaseModel):
|
||||
id: Optional[int] = Field(None, description="The primary id")
|
||||
document_id: Optional[int] = Field(None, description="document id")
|
||||
doc_name: Optional[str] = Field(None, description="document name")
|
||||
doc_type: Optional[str] = Field(None, description="document type")
|
||||
content: Optional[str] = Field(None, description="chunk content")
|
||||
meta_info: Optional[str] = Field(None, description="chunk meta info")
|
||||
questions: Optional[str] = Field(None, description="chunk questions")
|
||||
|
||||
|
||||
class KnowledgeSyncRequest(BaseModel):
|
||||
@@ -79,6 +117,26 @@ class KnowledgeSyncRequest(BaseModel):
|
||||
)
|
||||
|
||||
|
||||
class KnowledgeRetrieveRequest(BaseModel):
|
||||
"""Retrieve request"""
|
||||
|
||||
"""space id"""
|
||||
space_id: int = Field(None, description="space id")
|
||||
|
||||
"""query: query"""
|
||||
query: str = Field(None, description="query")
|
||||
|
||||
"""top_k: top k"""
|
||||
top_k: Optional[int] = Field(5, description="top k")
|
||||
|
||||
"""score_threshold: score threshold
|
||||
"""
|
||||
score_threshold: Optional[float] = Field(0.0, description="score threshold")
|
||||
|
||||
|
||||
# 复用这里代码
|
||||
|
||||
|
||||
class SpaceServeResponse(BaseModel):
|
||||
"""Flow response model"""
|
||||
|
||||
@@ -97,13 +155,15 @@ class SpaceServeResponse(BaseModel):
|
||||
context: Optional[str] = Field(None, description="The context")
|
||||
"""owner: owner"""
|
||||
owner: Optional[str] = Field(None, description="The owner")
|
||||
"""user_id: user_id"""
|
||||
user_id: Optional[str] = Field(None, description="user id")
|
||||
"""user_id: user_ids"""
|
||||
user_ids: Optional[str] = Field(None, description="user ids")
|
||||
"""sys code"""
|
||||
sys_code: Optional[str] = Field(None, description="The sys code")
|
||||
"""domain type"""
|
||||
domain_type: Optional[str] = Field(None, description="domain_type")
|
||||
|
||||
# TODO define your own fields here
|
||||
|
||||
|
||||
class DocumentChunkVO(BaseModel):
|
||||
id: int = Field(..., description="document chunk id")
|
||||
|
Reference in New Issue
Block a user