mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-07-26 05:23:37 +00:00
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>
359 lines
12 KiB
Python
359 lines
12 KiB
Python
import json
|
||
import logging
|
||
from typing import List, Optional
|
||
|
||
from fastapi import APIRouter, Depends
|
||
|
||
from dbgpt._private.config import Config
|
||
from dbgpt.agent.core.agent_manage import get_agent_manager
|
||
from dbgpt.agent.resource.manage import get_resource_manager
|
||
from dbgpt.agent.util.llm.llm import LLMStrategyType
|
||
from dbgpt.app.openapi.api_view_model import Result
|
||
from dbgpt.serve.agent.app.gpts_server import available_llms
|
||
from dbgpt.serve.agent.db.gpts_app import (
|
||
GptsApp,
|
||
GptsAppCollectionDao,
|
||
GptsAppDao,
|
||
GptsAppQuery,
|
||
native_app_params,
|
||
)
|
||
from dbgpt.serve.agent.team.base import TeamMode
|
||
from dbgpt.serve.utils.auth import UserRequest, get_user_from_headers
|
||
|
||
CFG = Config()
|
||
|
||
router = APIRouter()
|
||
logger = logging.getLogger(__name__)
|
||
|
||
gpts_dao = GptsAppDao()
|
||
collection_dao = GptsAppCollectionDao()
|
||
|
||
|
||
@router.post("/v1/app/create")
|
||
async def create(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
gpts_app.user_code = (
|
||
user_info.user_id if user_info.user_id is not None else gpts_app.user_code
|
||
)
|
||
return Result.succ(gpts_dao.create(gpts_app))
|
||
except Exception as ex:
|
||
return Result.failed(code="E000X", msg=f"create app error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/list")
|
||
async def app_list(
|
||
query: GptsAppQuery, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
# query.user_code = (
|
||
# user_info.user_id if user_info.user_id is not None else query.user_code
|
||
# )
|
||
query.ignore_user = "true"
|
||
return Result.succ(gpts_dao.app_list(query, True))
|
||
except Exception as ex:
|
||
logger.exception("app_list exception!")
|
||
return Result.failed(code="E000X", msg=f"query app list error: {ex}")
|
||
|
||
|
||
@router.get("/v1/app/info")
|
||
async def app_detail(
|
||
chat_scene: str,
|
||
app_code: str = None,
|
||
):
|
||
logger.info(f"app_detail:{chat_scene},{app_code}")
|
||
try:
|
||
if app_code:
|
||
return Result.succ(gpts_dao.app_detail(app_code))
|
||
else:
|
||
from dbgpt.app.scene.base import ChatScene
|
||
|
||
scene: ChatScene = ChatScene.of_mode(chat_scene)
|
||
return Result.succ(gpts_dao.native_app_detail(scene.scene_name()))
|
||
except Exception as ex:
|
||
logger.exception("query app detail error!")
|
||
return Result.failed(code="E000X", msg=f"query app detail error: {ex}")
|
||
|
||
|
||
@router.get("/v1/app/export")
|
||
async def app_export(
|
||
chat_scene: str,
|
||
app_code: str = None,
|
||
):
|
||
logger.info(f"app_export:{app_code}")
|
||
try:
|
||
if app_code:
|
||
app_info = gpts_dao.app_detail(app_code)
|
||
else:
|
||
from dbgpt.app.scene.base import ChatScene
|
||
|
||
scene: ChatScene = ChatScene.of_mode(chat_scene)
|
||
app_info = gpts_dao.native_app_detail(scene.scene_name())
|
||
|
||
return Result.succ(app_info)
|
||
except Exception as ex:
|
||
logger.exception("export app info error!")
|
||
return Result.failed(code="E000X", msg=f"export app info error: {ex}")
|
||
|
||
|
||
@router.get("/v1/app/{app_code}")
|
||
async def get_app_by_code(
|
||
app_code: str,
|
||
):
|
||
try:
|
||
return Result.succ(gpts_dao.app_detail(app_code))
|
||
except Exception as ex:
|
||
logger.exception("query app detail error!")
|
||
return Result.failed(code="E000X", msg=f"query app detail error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/hot/list")
|
||
async def hot_app_list(
|
||
query: GptsAppQuery, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
query.user_code = (
|
||
user_info.user_id if user_info.user_id is not None else query.user_code
|
||
)
|
||
list_hot_apps = gpts_dao.list_hot_apps(query)
|
||
return Result.succ(list_hot_apps)
|
||
except Exception as ex:
|
||
logger.exception("hot_app_list exception!")
|
||
return Result.failed(code="E000X", msg=f"query hot app error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/detail")
|
||
async def app_list(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
gpts_app.user_code = (
|
||
user_info.user_id if user_info.user_id is not None else gpts_app.user_code
|
||
)
|
||
return Result.succ(gpts_dao.app_detail(gpts_app.app_code))
|
||
except Exception as ex:
|
||
return Result.failed(code="E000X", msg=f"query app error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/edit")
|
||
async def edit(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
gpts_app.user_code = (
|
||
user_info.user_id if user_info.user_id is not None else gpts_app.user_code
|
||
)
|
||
return Result.succ(gpts_dao.edit(gpts_app))
|
||
except Exception as ex:
|
||
logger.exception(" app edit exception!")
|
||
return Result.failed(code="E000X", msg=f"edit app error: {ex}")
|
||
|
||
|
||
@router.get("/v1/agents/list")
|
||
async def all_agents(user_info: UserRequest = Depends(get_user_from_headers)):
|
||
try:
|
||
agents = get_agent_manager().list_agents()
|
||
for agent in agents:
|
||
label = agent["name"]
|
||
agent["label"] = label
|
||
return Result.succ(agents)
|
||
except Exception as ex:
|
||
return Result.failed(code="E000X", msg=f"query agents error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/remove", response_model=Result)
|
||
async def delete(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
gpts_app.user_code = (
|
||
user_info.user_id if user_info.user_id is not None else gpts_app.user_code
|
||
)
|
||
gpts_dao.delete(gpts_app.app_code, gpts_app.user_code, gpts_app.sys_code)
|
||
return Result.succ()
|
||
except Exception as ex:
|
||
logger.exception("app remove exception!")
|
||
return Result.failed(code="E000X", msg=f"delete app error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/collect", response_model=Result)
|
||
async def collect(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
gpts_app.user_code = (
|
||
user_info.user_id if user_info.user_id is not None else gpts_app.user_code
|
||
)
|
||
collection_dao.collect(gpts_app.app_code, gpts_app.user_code, gpts_app.sys_code)
|
||
return Result.succ()
|
||
except Exception as ex:
|
||
return Result.failed(code="E000X", msg=f"collect app error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/uncollect", response_model=Result)
|
||
async def uncollect(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
gpts_app.user_code = (
|
||
user_info.user_id if user_info.user_id is not None else gpts_app.user_code
|
||
)
|
||
collection_dao.uncollect(
|
||
gpts_app.app_code, gpts_app.user_code, gpts_app.sys_code
|
||
)
|
||
return Result.succ()
|
||
except Exception as ex:
|
||
return Result.failed(code="E000X", msg=f"uncollect app error: {ex}")
|
||
|
||
|
||
@router.get("/v1/team-mode/list")
|
||
async def team_mode_list(user_info: UserRequest = Depends(get_user_from_headers)):
|
||
try:
|
||
return Result.succ([mode.to_dict() for mode in TeamMode])
|
||
except Exception as ex:
|
||
logger.exception(str(ex))
|
||
return Result.failed(code="E000X", msg=f"query team mode list error: {ex}")
|
||
|
||
|
||
@router.get("/v1/resource-type/list")
|
||
async def team_mode_list(user_info: UserRequest = Depends(get_user_from_headers)):
|
||
try:
|
||
resources = get_resource_manager().get_supported_resources_type()
|
||
return Result.succ(resources)
|
||
except Exception as ex:
|
||
logger.exception(str(ex))
|
||
return Result.failed(code="E000X", msg=f"query resource type list error: {ex}")
|
||
|
||
|
||
@router.get("/v1/llm-strategy/list")
|
||
async def llm_strategies(user_info: UserRequest = Depends(get_user_from_headers)):
|
||
try:
|
||
return Result.succ([type.to_dict() for type in LLMStrategyType])
|
||
except Exception as ex:
|
||
logger.exception(str(ex))
|
||
return Result.failed(
|
||
code="E000X", msg=f"query llm strategy type list error: {ex}"
|
||
)
|
||
|
||
|
||
@router.get("/v1/llm-strategy/value/list")
|
||
async def llm_strategy_values(
|
||
type: str, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
results = []
|
||
match type:
|
||
case LLMStrategyType.Priority.value:
|
||
results = await available_llms()
|
||
return Result.succ(results)
|
||
except Exception as ex:
|
||
logger.exception(str(ex))
|
||
return Result.failed(
|
||
code="E000X", msg=f"query llm strategy type list error: {ex}"
|
||
)
|
||
|
||
|
||
@router.get("/v1/app/resources/list", response_model=Result)
|
||
async def app_resources(
|
||
type: str,
|
||
name: Optional[str] = None,
|
||
user_code: Optional[str] = None,
|
||
sys_code: Optional[str] = None,
|
||
user_info: UserRequest = Depends(get_user_from_headers),
|
||
):
|
||
"""
|
||
Get agent resources, such as db, knowledge, internet, plugin.
|
||
"""
|
||
try:
|
||
resources = get_resource_manager().get_supported_resources(
|
||
version="v1", type=type, user_id=None
|
||
)
|
||
results = resources.get(type, [])
|
||
return Result.succ(results)
|
||
except Exception as ex:
|
||
logger.exception(str(ex))
|
||
return Result.failed(code="E000X", msg=f"query app resources error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/publish", response_model=Result)
|
||
async def publish(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
gpts_app.user_code = (
|
||
user_info.user_id if user_info.user_id is not None else gpts_app.user_code
|
||
)
|
||
gpts_dao.publish(gpts_app.app_code, gpts_app.user_code, gpts_app.sys_code)
|
||
return Result.succ([])
|
||
except Exception as ex:
|
||
logger.exception(str(ex))
|
||
return Result.failed(code="E000X", msg=f"publish app error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/unpublish", response_model=Result)
|
||
async def unpublish(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
gpts_app.user_code = (
|
||
user_info.user_id if user_info.user_id is not None else gpts_app.user_code
|
||
)
|
||
gpts_dao.unpublish(gpts_app.app_code, gpts_app.user_code, gpts_app.sys_code)
|
||
return Result.succ([])
|
||
except Exception as ex:
|
||
logger.exception("unpublish:" + str(ex))
|
||
return Result.failed(code="E000X", msg=f"unpublish app error: {ex}")
|
||
|
||
|
||
@router.post("/v1/app/native/init", response_model=Result)
|
||
async def init_native_apps(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
try:
|
||
user_code = (
|
||
user_info.user_id if user_info.user_id is not None else gpts_app.user_code
|
||
)
|
||
gpts_dao.init_native_apps(user_code)
|
||
return Result.succ([])
|
||
except Exception as ex:
|
||
logger.exception("init natove error!")
|
||
return Result.failed(code="E000X", msg=f"init natove error: {ex}")
|
||
|
||
|
||
@router.get("/v1/native_scenes")
|
||
async def native_scenes(user_info: UserRequest = Depends(get_user_from_headers)):
|
||
return Result.succ(native_app_params())
|
||
|
||
|
||
@router.post("/v1/app/admins/update")
|
||
def update_admins(
|
||
gpts_app: GptsApp, user_info: UserRequest = Depends(get_user_from_headers)
|
||
):
|
||
return Result.succ(gpts_dao.update_admins(gpts_app.app_code, gpts_app.admins))
|
||
|
||
|
||
@router.get("/v1/app/{app_code}/admins")
|
||
async def query_admins(
|
||
app_code: str,
|
||
user_info: UserRequest = Depends(get_user_from_headers),
|
||
):
|
||
try:
|
||
return Result.succ(gpts_dao.get_admins(app_code))
|
||
except Exception as ex:
|
||
logger.exception("query_admins:" + str(ex))
|
||
return Result.failed(code="E000X", msg=f"query admins error: {ex}")
|
||
|
||
|
||
@router.get("/v1/dbgpts/list", response_model=Result[List[GptsApp]])
|
||
async def get_dbgpts(user_code: str = None, sys_code: str = None):
|
||
logger.info(f"get_dbgpts:{user_code},{sys_code}")
|
||
try:
|
||
query: GptsAppQuery = GptsAppQuery()
|
||
query.ignore_user = "true"
|
||
response = gpts_dao.app_list(query, True)
|
||
return Result.succ(response.app_list)
|
||
except Exception as e:
|
||
logger.error(f"get_dbgpts failed:{str(e)}")
|
||
return Result.failed(msg=str(e), code="E300003")
|