Native data AI application framework based on AWEL+AGENT (#1152)

Co-authored-by: Fangyin Cheng <staneyffer@gmail.com>
Co-authored-by: lcx01800250 <lcx01800250@alibaba-inc.com>
Co-authored-by: licunxing <864255598@qq.com>
Co-authored-by: Aralhi <xiaoping0501@gmail.com>
Co-authored-by: xuyuan23 <643854343@qq.com>
Co-authored-by: aries_ckt <916701291@qq.com>
Co-authored-by: hzh97 <2976151305@qq.com>
This commit is contained in:
明天
2024-02-07 17:43:27 +08:00
committed by GitHub
parent dbb9ac83b1
commit d5afa6e206
328 changed files with 22606 additions and 3282 deletions

View File

View File

@@ -0,0 +1,173 @@
import logging
from fastapi import APIRouter
from dbgpt._private.config import Config
from dbgpt.agent.agents.agents_manage import agent_manage
from dbgpt.agent.agents.llm.llm import LLMStrategyType
from dbgpt.agent.resource.resource_api import ResourceType
from dbgpt.app.knowledge.api import knowledge_space_service
from dbgpt.app.knowledge.request.request import KnowledgeSpaceRequest
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,
)
from dbgpt.serve.agent.hub.plugin_hub import plugin_hub
from dbgpt.serve.agent.team.base import TeamMode
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):
try:
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):
try:
return Result.succ(gpts_dao.app_list(query))
except Exception as ex:
return Result.failed(code="E000X", msg=f"query app error: {ex}")
@router.post("/v1/app/detail")
async def app_list(gpts_app: GptsApp):
try:
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):
try:
return Result.succ(gpts_dao.edit(gpts_app))
except Exception as ex:
return Result.failed(code="E000X", msg=f"edit app error: {ex}")
@router.get("/v1/agents/list")
async def all_agents():
try:
return Result.succ(agent_manage.list_agents())
except Exception as ex:
return Result.failed(code="E000X", msg=f"query agents error: {ex}")
@router.post("/v1/app/remove", response_model=Result[str])
async def delete(gpts_app: GptsApp):
try:
gpts_dao.delete(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"delete app error: {ex}")
@router.post("/v1/app/collect", response_model=Result[str])
async def collect(gpts_app: GptsApp):
try:
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[str])
async def uncollect(gpts_app: GptsApp):
try:
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():
try:
return Result.succ([mode.value for mode in TeamMode])
except Exception as 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():
try:
return Result.succ([type.value for type in ResourceType])
except Exception as ex:
return Result.failed(code="E000X", msg=f"query resource type list error: {ex}")
@router.get("/v1/llm-strategy/list")
async def llm_strategies():
try:
return Result.succ([type.value for type in LLMStrategyType])
except Exception as 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):
try:
results = []
match type:
case LLMStrategyType.Priority.value:
results = await available_llms()
return Result.succ(results)
except Exception as ex:
return Result.failed(
code="E000X", msg=f"query llm strategy type list error: {ex}"
)
@router.get("/v1/app/resources/list", response_model=Result[str])
async def app_resources(
type: str, name: str = None, user_code: str = None, sys_code: str = None
):
"""
Get agent resources, such as db, knowledge, internet, plugin.
"""
try:
results = []
match type:
case ResourceType.DB.value:
dbs = CFG.LOCAL_DB_MANAGE.get_db_list()
results = [db["db_name"] for db in dbs]
if name:
results = [r for r in results if name in r]
case ResourceType.Knowledge.value:
knowledge_spaces = knowledge_space_service.get_knowledge_space(
KnowledgeSpaceRequest()
)
results = [ks.name for ks in knowledge_spaces]
if name:
results = [r for r in results if name in r]
case ResourceType.Plugin.value:
plugins = plugin_hub.get_my_plugin(user_code)
results = [plugin.name for plugin in plugins]
if name:
results = [r for r in results if name in r]
case ResourceType.Internet.value:
return Result.succ(None)
case ResourceType.File.value:
return Result.succ(None)
return Result.succ(results)
except Exception as ex:
return Result.failed(code="E000X", msg=f"query app resources error: {ex}")

View File

@@ -0,0 +1,22 @@
from dbgpt._private.config import Config
from dbgpt.component import ComponentType
from dbgpt.model.cluster import BaseModelController
from dbgpt.serve.agent.db.gpts_app import GptsApp, GptsAppCollectionDao, GptsAppDao
CFG = Config()
collection_dao = GptsAppCollectionDao()
gpts_dao = GptsAppDao()
async def available_llms(worker_type: str = "llm"):
controller = CFG.SYSTEM_APP.get_component(
ComponentType.MODEL_CONTROLLER, BaseModelController
)
types = set()
models = await controller.get_all_instances(healthy_only=True)
for model in models:
worker_name, wt = model.model_name.split("@")
if wt == worker_type:
types.add(worker_name)
return list(types)