feat: add evaluation service module for RAG and Agent (#2070)

This commit is contained in:
Aries-ckt
2024-10-18 17:42:11 +08:00
committed by GitHub
parent 253c367ceb
commit 811ce63493
29 changed files with 1263 additions and 61 deletions

View File

View File

@@ -0,0 +1,157 @@
"""This is an auto-generated model file
You can define your own models and DAOs here
"""
import json
import uuid
from datetime import datetime
from typing import Any, Dict, Union
from sqlalchemy import Column, DateTime, Index, Integer, String, Text, UniqueConstraint
from dbgpt.agent.core.schema import Status
from dbgpt.storage.metadata import BaseDao, Model, db
from ..api.schemas import EvaluateServeRequest, EvaluateServeResponse
from ..config import SERVER_APP_TABLE_NAME, ServeConfig
class ServeEntity(Model):
__tablename__ = "evaluate_manage"
__table_args__ = (
UniqueConstraint(
"evaluate_code",
name="uk_evaluate_code",
),
)
id = Column(Integer, primary_key=True, comment="Auto increment id")
evaluate_code = Column(String(256), comment="evaluate Code")
scene_key = Column(String(100), comment="evaluate scene key")
scene_value = Column(String(256), comment="evaluate scene value")
context = Column(Text, comment="evaluate scene run context")
evaluate_metrics = Column(String(599), comment="evaluate metrics")
datasets_name = Column(String(256), comment="datasets name")
datasets = Column(Text, comment="datasets")
storage_type = Column(String(256), comment="datasets storage type")
parallel_num = Column(Integer, comment="datasets run parallel num")
state = Column(String(100), comment="evaluate state")
result = Column(Text, comment="evaluate result")
log_info = Column(Text, comment="evaluate log info")
average_score = Column(Text, comment="evaluate average score")
user_id = Column(String(100), index=True, nullable=True, comment="User id")
user_name = Column(String(128), index=True, nullable=True, comment="User name")
sys_code = Column(String(128), index=True, nullable=True, comment="System code")
gmt_create = Column(DateTime, default=datetime.now, comment="Record creation time")
gmt_modified = Column(
DateTime,
default=datetime.now,
onupdate=datetime.now,
comment="Record update time",
)
def __repr__(self):
return f"ServeEntity(id={self.id}, evaluate_code='{self.evaluate_code}', scene_key='{self.scene_key}', scene_value='{self.scene_value}', datasets='{self.datasets}', user_id='{self.user_id}', user_name='{self.user_name}', sys_code='{self.sys_code}', gmt_created='{self.gmt_created}', gmt_modified='{self.gmt_modified}')"
class ServeDao(BaseDao[ServeEntity, EvaluateServeRequest, EvaluateServeResponse]):
"""The DAO class for Prompt"""
def __init__(self, serve_config: ServeConfig):
super().__init__()
self._serve_config = serve_config
def from_request(
self, request: Union[EvaluateServeRequest, Dict[str, Any]]
) -> ServeEntity:
"""Convert the request to an entity
Args:
request (Union[EvaluateServeRequest, Dict[str, Any]]): The request
Returns:
T: The entity
"""
request_dict = (
request.dict() if isinstance(request, EvaluateServeRequest) else request
)
entity = ServeEntity(
evaluate_code=request_dict.get("evaluate_code", None),
scene_key=request_dict.get("scene_key", None),
scene_value=request_dict.get("scene_value", None),
context=json.dumps(request_dict.get("context", None))
if request_dict.get("context", None)
else None,
evaluate_metrics=request_dict.get("evaluate_metrics", None),
datasets_name=request_dict.get("datasets_name", None),
datasets=request_dict.get("datasets", None),
storage_type=request_dict.get("storage_type", None),
parallel_num=request_dict.get("parallel_num", 1),
state=request_dict.get("state", Status.TODO.value),
result=request_dict.get("result", None),
average_score=request_dict.get("average_score", None),
log_info=request_dict.get("log_info", None),
user_id=request_dict.get("user_id", None),
user_name=request_dict.get("user_name", None),
sys_code=request_dict.get("sys_code", None),
)
if not entity.evaluate_code:
entity.evaluate_code = uuid.uuid1().hex
return entity
def to_request(self, entity: ServeEntity) -> EvaluateServeRequest:
"""Convert the entity to a request
Args:
entity (T): The entity
Returns:
REQ: The request
"""
return EvaluateServeRequest(
evaluate_code=entity.evaluate_code,
scene_key=entity.scene_key,
scene_value=entity.scene_value,
datasets_name=entity.datasets_name,
datasets=entity.datasets,
storage_type=entity.storage_type,
evaluate_metrics=entity.evaluate_metrics,
context=json.loads(entity.context) if entity.context else None,
user_name=entity.user_name,
user_id=entity.user_id,
sys_code=entity.sys_code,
state=entity.state,
result=entity.result,
average_score=entity.average_score,
log_info=entity.log_info,
)
def to_response(self, entity: ServeEntity) -> EvaluateServeResponse:
"""Convert the entity to a response
Args:
entity (T): The entity
Returns:
RES: The response
"""
gmt_created_str = entity.gmt_create.strftime("%Y-%m-%d %H:%M:%S")
gmt_modified_str = entity.gmt_modified.strftime("%Y-%m-%d %H:%M:%S")
return EvaluateServeResponse(
evaluate_code=entity.evaluate_code,
scene_key=entity.scene_key,
scene_value=entity.scene_value,
datasets_name=entity.datasets_name,
datasets=entity.datasets,
storage_type=entity.storage_type,
evaluate_metrics=entity.evaluate_metrics,
context=json.loads(entity.context) if entity.context else None,
user_name=entity.user_name,
user_id=entity.user_id,
sys_code=entity.sys_code,
state=entity.state,
result=entity.result,
average_score=entity.average_score,
log_info=entity.log_info,
gmt_create=gmt_created_str,
gmt_modified=gmt_modified_str,
)

View File

@@ -0,0 +1,122 @@
from datetime import datetime
from typing import Any, Dict, Union
from sqlalchemy import Column, DateTime, Index, Integer, String, Text, UniqueConstraint
from dbgpt.storage.metadata import BaseDao, Model, db
from ..api.schemas import DatasetServeRequest, DatasetServeResponse
from ..config import SERVER_APP_TABLE_NAME, ServeConfig
class DatasetServeEntity(Model):
__tablename__ = "evaluate_datasets"
__table_args__ = (
UniqueConstraint(
"code",
name="uk_dataset",
),
UniqueConstraint(
"name",
name="uk_dataset_name",
),
)
id = Column(Integer, primary_key=True, comment="Auto increment id")
code = Column(String(256), comment="evaluate datasets Code")
name = Column(String(1000), comment="evaluate datasets Name")
file_type = Column(String(256), comment="datasets file type")
storage_type = Column(String(256), comment="datasets storage type")
storage_position = Column(Text, comment="datasets storage position")
datasets_count = Column(Integer, comment="datasets row count")
have_answer = Column(String(10), comment="datasets have answer")
members = Column(String(1000), comment="evaluate datasets members")
user_id = Column(String(100), index=True, nullable=True, comment="User id")
user_name = Column(String(128), index=True, nullable=True, comment="User name")
sys_code = Column(String(128), index=True, nullable=True, comment="System code")
gmt_create = Column(DateTime, default=datetime.now, comment="Record creation time")
gmt_modified = Column(
DateTime,
default=datetime.now,
onupdate=datetime.now,
comment="Record update time",
)
def __repr__(self):
return f"ServeEntity(id={self.id}, code='{self.code}', name='{self.name}', file_type='{self.file_type}', storage_type='{self.storage_type}', storage_position='{self.storage_position}', datasets_count='{self.datasets_count}', user_id='{self.user_id}', user_name='{self.user_name}', sys_code='{self.sys_code}', gmt_create='{self.gmt_create}', gmt_modified='{self.gmt_modified}')"
class DatasetServeDao(
BaseDao[DatasetServeEntity, DatasetServeRequest, DatasetServeResponse]
):
"""The DAO class for Prompt"""
def __init__(self, serve_config: ServeConfig):
super().__init__()
self._serve_config = serve_config
def from_request(
self, request: Union[DatasetServeRequest, Dict[str, Any]]
) -> DatasetServeEntity:
"""Convert the request to an entity
Args:
request (Union[DatasetServeRequest, Dict[str, Any]]): The request
Returns:
T: The entity
"""
request_dict = (
request.dict() if isinstance(request, DatasetServeRequest) else request
)
entity = DatasetServeEntity(**request_dict)
return entity
def to_request(self, entity: DatasetServeEntity) -> DatasetServeRequest:
"""Convert the entity to a request
Args:
entity (T): The entity
Returns:
REQ: The request
"""
return DatasetServeRequest(
code=entity.code,
name=entity.name,
file_type=entity.file_type,
storage_type=entity.storage_type,
storage_position=entity.storage_position,
datasets_count=entity.datasets_count,
have_answer=entity.have_answer,
members=entity.members,
user_name=entity.user_name,
user_id=entity.user_id,
sys_code=entity.sys_code,
)
def to_response(self, entity: DatasetServeEntity) -> DatasetServeResponse:
"""Convert the entity to a response
Args:
entity (T): The entity
Returns:
RES: The response
"""
gmt_created_str = entity.gmt_create.strftime("%Y-%m-%d %H:%M:%S")
gmt_modified_str = entity.gmt_modified.strftime("%Y-%m-%d %H:%M:%S")
return DatasetServeResponse(
code=entity.code,
name=entity.name,
file_type=entity.file_type,
storage_type=entity.storage_type,
storage_position=entity.storage_position,
datasets_count=entity.datasets_count,
have_answer=entity.have_answer,
members=entity.members,
user_name=entity.user_name,
user_id=entity.user_id,
sys_code=entity.sys_code,
gmt_create=gmt_created_str,
gmt_modified=gmt_modified_str,
)