DB-GPT/dbgpt/serve/dbgpts/my/service/service.py
明天 d7a893e1a7
feat: new dbgpts modules (#1910)
Co-authored-by: 途杨 <tuyang.yhj@antgroup.com>
Co-authored-by: lhwan <1017484907@qq.com>
2024-08-28 21:31:42 +08:00

192 lines
5.7 KiB
Python

import logging
from typing import List, Optional
from dbgpt.component import BaseComponent, SystemApp
from dbgpt.serve.core import BaseService
from dbgpt.storage.metadata import BaseDao
from dbgpt.util.dbgpts.base import INSTALL_DIR
from dbgpt.util.dbgpts.repo import (
copy_and_install,
inner_copy_and_install,
inner_uninstall,
install,
uninstall,
)
from dbgpt.util.pagination_utils import PaginationResult
from ..api.schemas import ServeRequest, ServerResponse
from ..config import SERVE_CONFIG_KEY_PREFIX, SERVE_SERVICE_COMPONENT_NAME, ServeConfig
from ..models.models import ServeDao, ServeEntity
logger = logging.getLogger(__name__)
class Service(BaseService[ServeEntity, ServeRequest, ServerResponse]):
"""The service class for DbgptsMy"""
name = SERVE_SERVICE_COMPONENT_NAME
def __init__(self, system_app: SystemApp, dao: Optional[ServeDao] = None):
self._system_app = None
self._serve_config: ServeConfig = None
self._dao: ServeDao = dao
super().__init__(system_app)
def init_app(self, system_app: SystemApp) -> None:
"""Initialize the service
Args:
system_app (SystemApp): The system app
"""
super().init_app(system_app)
self._serve_config = ServeConfig.from_app_config(
system_app.config, SERVE_CONFIG_KEY_PREFIX
)
self._dao = self._dao or ServeDao(self._serve_config)
self._system_app = system_app
@property
def dao(self) -> BaseDao[ServeEntity, ServeRequest, ServerResponse]:
"""Returns the internal DAO."""
return self._dao
@property
def config(self) -> ServeConfig:
"""Returns the internal ServeConfig."""
return self._serve_config
def update(self, request: ServeRequest) -> ServerResponse:
"""Update a DbgptsMy entity
Args:
request (ServeRequest): The request
Returns:
ServerResponse: The response
"""
# Build the query request from the request
query_request = {"id": request.id}
return self.dao.update(query_request, update_request=request)
def get(self, request: ServeRequest) -> Optional[ServerResponse]:
"""Get a DbgptsMy entity
Args:
request (ServeRequest): The request
Returns:
ServerResponse: The response
"""
# Build the query request from the request
query_request = request
return self.dao.get_one(query_request)
def delete(self, request: ServeRequest) -> None:
"""Delete a DbgptsMy entity
Args:
request (ServeRequest): The request
"""
# TODO: implement your own logic here
# Build the query request from the request
self.dao.delete(request)
def get_list(self, request: ServeRequest) -> List[ServerResponse]:
"""Get a list of DbgptsMy entities
Args:
request (ServeRequest): The request
Returns:
List[ServerResponse]: The response
"""
# Build the query request from the request
query_request = request
return self.dao.get_list(query_request)
def get_list_by_page(
self, request: ServeRequest, page: int, page_size: int
) -> PaginationResult[ServerResponse]:
"""Get a list of DbgptsMy entities by page
Args:
request (ServeRequest): The request
page (int): The page number
page_size (int): The page size
Returns:
List[ServerResponse]: The response
"""
query_request = request
return self.dao.get_list_page(query_request, page, page_size)
def install_gpts(
self,
name: str,
type: str,
repo: str,
dbgpt_path: str,
user_name: Optional[str] = None,
sys_code: Optional[str] = None,
):
logger.info(f"install_gpts {name}")
# install(name, repo)
try:
from pathlib import Path
inner_copy_and_install(repo, name, Path(dbgpt_path))
except Exception as e:
logger.exception(f"install_gpts failed!{str(e)}")
raise ValueError(f"Install dbgpts [{type}:{name}] Failed! {str(e)}", e)
from dbgpt.util.dbgpts.base import get_repo_path
from dbgpt.util.dbgpts.loader import (
BasePackage,
InstalledPackage,
parse_package_metadata,
)
base_package: BasePackage = parse_package_metadata(
InstalledPackage(
name=name,
repo=repo,
root=dbgpt_path,
package=type,
)
)
dbgpts_entity = self.get(ServeRequest(name=name, type=type))
if not dbgpts_entity:
request = ServeRequest()
request.name = name
request.user_name = user_name
request.sys_code = sys_code
request.type = type
request.file_name = str(INSTALL_DIR / name)
request.version = base_package.version
return self.create(request)
else:
dbgpts_entity.version = base_package.version
return self.update(ServeRequest(**dbgpts_entity.to_dict()))
def uninstall_gpts(
self,
name: str,
type: str,
user_name: Optional[str] = None,
sys_code: Optional[str] = None,
):
logger.info(f"install_gpts {name}")
try:
inner_uninstall(name)
except Exception as e:
logger.warning(f"Uninstall dbgpts [{type}:{name}] Failed! {str(e)}", e)
raise ValueError(f"Uninstall dbgpts [{type}:{name}] Failed! {str(e)}", e)
self.delete(ServeRequest(name=name, type=type))