refactor: The first refactored version for sdk release (#907)

Co-authored-by: chengfangyin2 <chengfangyin3@jd.com>
This commit is contained in:
FangYin Cheng
2023-12-08 14:45:59 +08:00
committed by GitHub
parent e7e4aff667
commit cd725db1fb
573 changed files with 2094 additions and 3571 deletions

View File

110
dbgpt/app/llm_manage/api.py Normal file
View File

@@ -0,0 +1,110 @@
from fastapi import APIRouter
from dbgpt.component import ComponentType
from dbgpt._private.config import Config
from dbgpt.model.cluster import WorkerStartupRequest, WorkerManagerFactory
from dbgpt.app.openapi.api_view_model import Result
from dbgpt.app.llm_manage.request.request import ModelResponse
CFG = Config()
router = APIRouter()
@router.get("/v1/worker/model/params")
async def model_params():
print(f"/worker/model/params")
try:
from dbgpt.model.cluster import WorkerManagerFactory
worker_manager = CFG.SYSTEM_APP.get_component(
ComponentType.WORKER_MANAGER_FACTORY, WorkerManagerFactory
).create()
params = []
workers = await worker_manager.supported_models()
for worker in workers:
for model in worker.models:
model_dict = model.__dict__
model_dict["host"] = worker.host
model_dict["port"] = worker.port
params.append(model_dict)
return Result.succ(params)
if not worker_instance:
return Result.failed(code="E000X", msg=f"can not find worker manager")
except Exception as e:
return Result.failed(code="E000X", msg=f"model stop failed {e}")
@router.get("/v1/worker/model/list")
async def model_list():
print(f"/worker/model/list")
try:
from dbgpt.model.cluster.controller.controller import BaseModelController
controller = CFG.SYSTEM_APP.get_component(
ComponentType.MODEL_CONTROLLER, BaseModelController
)
responses = []
managers = await controller.get_all_instances(
model_name="WorkerManager@service", healthy_only=True
)
manager_map = dict(map(lambda manager: (manager.host, manager), managers))
models = await controller.get_all_instances()
for model in models:
worker_name, worker_type = model.model_name.split("@")
if worker_type == "llm" or worker_type == "text2vec":
response = ModelResponse(
model_name=worker_name,
model_type=worker_type,
host=model.host,
port=model.port,
healthy=model.healthy,
check_healthy=model.check_healthy,
last_heartbeat=model.last_heartbeat,
prompt_template=model.prompt_template,
)
response.manager_host = (
model.host if manager_map.get(model.host) else None
)
response.manager_port = (
manager_map[model.host].port
if manager_map.get(model.host)
else None
)
responses.append(response)
return Result.succ(responses)
except Exception as e:
return Result.failed(code="E000X", msg=f"model list error {e}")
@router.post("/v1/worker/model/stop")
async def model_stop(request: WorkerStartupRequest):
print(f"/v1/worker/model/stop:")
try:
from dbgpt.model.cluster.controller.controller import BaseModelController
worker_manager = CFG.SYSTEM_APP.get_component(
ComponentType.WORKER_MANAGER_FACTORY, WorkerManagerFactory
).create()
if not worker_manager:
return Result.failed(code="E000X", msg=f"can not find worker manager")
request.params = {}
return Result.succ(await worker_manager.model_shutdown(request))
except Exception as e:
return Result.failed(code="E000X", msg=f"model stop failed {e}")
@router.post("/v1/worker/model/start")
async def model_start(request: WorkerStartupRequest):
print(f"/v1/worker/model/start:")
try:
worker_manager = CFG.SYSTEM_APP.get_component(
ComponentType.WORKER_MANAGER_FACTORY, WorkerManagerFactory
).create()
if not worker_manager:
return Result.failed(code="E000X", msg=f"can not find worker manager")
return Result.succ(await worker_manager.model_startup(request))
except Exception as e:
return Result.failed(code="E000X", msg=f"model start failed {e}")

View File

View File

@@ -0,0 +1,28 @@
from dataclasses import dataclass
@dataclass
class ModelResponse:
"""ModelRequest"""
"""model_name: model_name"""
model_name: str = None
"""model_type: model_type"""
model_type: str = None
"""host: host"""
host: str = None
"""port: port"""
port: int = None
"""manager_host: manager_host"""
manager_host: str = None
"""manager_port: manager_port"""
manager_port: int = None
"""healthy: healthy"""
healthy: bool = True
"""check_healthy: check_healthy"""
check_healthy: bool = True
prompt_template: str = None
last_heartbeat: str = None
stream_api: str = None
nostream_api: str = None