feat(core): APP use new SDK component (#1050)

This commit is contained in:
Fangyin Cheng
2024-01-10 10:39:04 +08:00
committed by GitHub
parent e11b72c724
commit fa8b5b190c
242 changed files with 2768 additions and 2163 deletions

View File

@@ -1,3 +1,4 @@
import uuid
from functools import cache
from typing import List, Optional
@@ -10,7 +11,7 @@ from dbgpt.util import PaginationResult
from ..config import APP_NAME, SERVE_APP_NAME, SERVE_SERVICE_COMPONENT_NAME, ServeConfig
from ..service.service import Service
from .schemas import ServeRequest, ServerResponse
from .schemas import MessageVo, ServeRequest, ServerResponse
router = APIRouter()
@@ -94,40 +95,6 @@ async def test_auth():
return {"status": "ok"}
@router.post(
"/", response_model=Result[ServerResponse], dependencies=[Depends(check_api_key)]
)
async def create(
request: ServeRequest, service: Service = Depends(get_service)
) -> Result[ServerResponse]:
"""Create a new Conversation entity
Args:
request (ServeRequest): The request
service (Service): The service
Returns:
ServerResponse: The response
"""
return Result.succ(service.create(request))
@router.put(
"/", response_model=Result[ServerResponse], dependencies=[Depends(check_api_key)]
)
async def update(
request: ServeRequest, service: Service = Depends(get_service)
) -> Result[ServerResponse]:
"""Update a Conversation entity
Args:
request (ServeRequest): The request
service (Service): The service
Returns:
ServerResponse: The response
"""
return Result.succ(service.update(request))
@router.post(
"/query",
response_model=Result[ServerResponse],
@@ -147,6 +114,45 @@ async def query(
return Result.succ(service.get(request))
@router.post(
"/new",
response_model=Result[ServerResponse],
dependencies=[Depends(check_api_key)],
)
async def dialogue_new(
chat_mode: str = "chat_normal",
user_name: str = None,
# TODO remove user id
user_id: str = None,
sys_code: str = None,
):
user_name = user_name or user_id
unique_id = uuid.uuid1()
res = ServerResponse(
user_input="",
conv_uid=str(unique_id),
chat_mode=chat_mode,
user_name=user_name,
sys_code=sys_code,
)
return Result.succ(res)
@router.post(
"/delete",
dependencies=[Depends(check_api_key)],
)
async def delete(con_uid: str, service: Service = Depends(get_service)):
"""Delete a Conversation entity
Args:
con_uid (str): The conversation UID
service (Service): The service
"""
service.delete(ServeRequest(conv_uid=con_uid))
return Result.succ(None)
@router.post(
"/query_page",
response_model=Result[PaginationResult[ServerResponse]],
@@ -155,7 +161,7 @@ async def query(
async def query_page(
request: ServeRequest,
page: Optional[int] = Query(default=1, description="current page"),
page_size: Optional[int] = Query(default=20, description="page size"),
page_size: Optional[int] = Query(default=10, description="page size"),
service: Service = Depends(get_service),
) -> Result[PaginationResult[ServerResponse]]:
"""Query Conversation entities
@@ -171,6 +177,37 @@ async def query_page(
return Result.succ(service.get_list_by_page(request, page, page_size))
@router.get(
"/list",
response_model=Result[List[ServerResponse]],
dependencies=[Depends(check_api_key)],
)
async def list_latest_conv(
user_name: str = None,
user_id: str = None,
sys_code: str = None,
page: Optional[int] = Query(default=1, description="current page"),
page_size: Optional[int] = Query(default=10, description="page size"),
service: Service = Depends(get_service),
) -> Result[List[ServerResponse]]:
"""Return latest conversations"""
request = ServeRequest(
user_name=user_name or user_id,
sys_code=sys_code,
)
return Result.succ(service.get_list_by_page(request, page, page_size).items)
@router.get(
"/messages/history",
response_model=Result[List[MessageVo]],
dependencies=[Depends(check_api_key)],
)
async def get_history_messages(con_uid: str, service: Service = Depends(get_service)):
"""Get the history messages of a conversation"""
return Result.succ(service.get_history_messages(ServeRequest(conv_uid=con_uid)))
def init_endpoints(system_app: SystemApp) -> None:
"""Initialize the endpoints"""
global global_system_app

View File

@@ -1,4 +1,6 @@
# Define your Pydantic schemas here
from typing import Any, Optional
from dbgpt._private.pydantic import BaseModel, Field
from ..config import SERVE_APP_NAME_HUMP
@@ -7,15 +9,133 @@ from ..config import SERVE_APP_NAME_HUMP
class ServeRequest(BaseModel):
"""Conversation request model"""
# TODO define your own fields here
class Config:
title = f"ServeRequest for {SERVE_APP_NAME_HUMP}"
# Just for query
chat_mode: str = Field(
default=None,
description="The chat mode.",
examples=[
"chat_normal",
],
)
conv_uid: Optional[str] = Field(
default=None,
description="The conversation uid.",
examples=[
"5e7100bc-9017-11ee-9876-8fe019728d79",
],
)
user_name: Optional[str] = Field(
default=None,
description="The user name.",
examples=[
"zhangsan",
],
)
sys_code: Optional[str] = Field(
default=None,
description="The system code.",
examples=[
"dbgpt",
],
)
class ServerResponse(BaseModel):
"""Conversation response model"""
# TODO define your own fields here
class Config:
title = f"ServerResponse for {SERVE_APP_NAME_HUMP}"
conv_uid: str = Field(
...,
description="The conversation uid.",
examples=[
"5e7100bc-9017-11ee-9876-8fe019728d79",
],
)
user_input: str = Field(
...,
description="The user input, we return it as the summary the conversation.",
examples=[
"Hello world",
],
)
chat_mode: str = Field(
...,
description="The chat mode.",
examples=[
"chat_normal",
],
)
select_param: Optional[str] = Field(
default=None,
description="The select param.",
examples=[
"my_knowledge_space_name",
],
)
model_name: Optional[str] = Field(
default=None,
description="The model name.",
examples=[
"vicuna-13b-v1.5",
],
)
user_name: Optional[str] = Field(
default=None,
description="The user name.",
examples=[
"zhangsan",
],
)
sys_code: Optional[str] = Field(
default=None,
description="The system code.",
examples=[
"dbgpt",
],
)
class MessageVo(BaseModel):
role: str = Field(
...,
description="The role that sends out the current message.",
examples=["human", "ai", "view"],
)
context: str = Field(
...,
description="The current message content.",
examples=[
"Hello",
"Hi, how are you?",
],
)
order: int = Field(
...,
description="The current message order.",
examples=[
1,
2,
],
)
time_stamp: Optional[Any] = Field(
default=None,
description="The current message time stamp.",
examples=[
"2023-01-07 09:00:00",
],
)
model_name: Optional[str] = Field(
default=None,
description="The model name.",
examples=[
"vicuna-13b-v1.5",
],
)