mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-07-28 22:37:31 +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>
192 lines
5.4 KiB
Python
192 lines
5.4 KiB
Python
from enum import Enum
|
|
from typing import List, Optional
|
|
|
|
from dbgpt._private.pydantic import BaseModel, ConfigDict, Field
|
|
from dbgpt.core import BaseOutputParser, ChatPromptTemplate
|
|
from dbgpt.core._private.example_base import ExampleSelector
|
|
|
|
|
|
class Scene:
|
|
def __init__(
|
|
self,
|
|
code,
|
|
name,
|
|
describe,
|
|
param_types: List = [],
|
|
is_inner: bool = False,
|
|
show_disable=False,
|
|
prepare_scene_code: str = None,
|
|
):
|
|
self.code = code
|
|
self.name = name
|
|
self.describe = describe
|
|
self.param_types = param_types
|
|
self.is_inner = is_inner
|
|
self.show_disable = show_disable
|
|
self.prepare_scene_code = prepare_scene_code
|
|
|
|
|
|
class ChatScene(Enum):
|
|
ChatWithDbExecute = Scene(
|
|
code="chat_with_db_execute",
|
|
name="Chat Data",
|
|
describe="Dialogue with your private data through natural language.",
|
|
param_types=["DB Select"],
|
|
)
|
|
ExcelLearning = Scene(
|
|
code="excel_learning",
|
|
name="Excel Learning",
|
|
describe="Analyze and summarize your excel files.",
|
|
is_inner=True,
|
|
)
|
|
ChatExcel = Scene(
|
|
code="chat_excel",
|
|
name="Chat Excel",
|
|
describe="Dialogue with your excel, use natural language.",
|
|
param_types=["File Select"],
|
|
prepare_scene_code="excel_learning",
|
|
)
|
|
|
|
ChatWithDbQA = Scene(
|
|
code="chat_with_db_qa",
|
|
name="Chat DB",
|
|
describe="Have a Professional Conversation with Metadata.",
|
|
param_types=["DB Select"],
|
|
)
|
|
ChatExecution = Scene(
|
|
code="chat_execution",
|
|
name="Use Plugin",
|
|
describe="Use tools through dialogue to accomplish your goals.",
|
|
param_types=["Plugin Select"],
|
|
)
|
|
|
|
ChatAgent = Scene(
|
|
code="chat_agent",
|
|
name="Agent Chat",
|
|
describe="Use tools through dialogue to accomplish your goals.",
|
|
param_types=["Plugin Select"],
|
|
)
|
|
|
|
ChatFlow = Scene(
|
|
code="chat_flow",
|
|
name="Flow Chat",
|
|
describe="Have conversations with conversational AWEL flow.",
|
|
param_types=["Flow Select"],
|
|
)
|
|
|
|
InnerChatDBSummary = Scene(
|
|
"inner_chat_db_summary", "DB Summary", "Db Summary.", True
|
|
)
|
|
|
|
ChatNormal = Scene(
|
|
"chat_normal", "Chat Normal", "Native LLM large model AI dialogue."
|
|
)
|
|
ChatDashboard = Scene(
|
|
"chat_dashboard",
|
|
"Dashboard",
|
|
"Provide you with professional analysis reports through natural language.",
|
|
["DB Select"],
|
|
)
|
|
ChatKnowledge = Scene(
|
|
"chat_knowledge",
|
|
"Chat Knowledge",
|
|
"Dialogue through natural language and private documents and knowledge bases.",
|
|
["Knowledge Space Select"],
|
|
)
|
|
ExtractTriplet = Scene(
|
|
"extract_triplet",
|
|
"Extract Triplet",
|
|
"Extract Triplet",
|
|
["Extract Select"],
|
|
True,
|
|
)
|
|
ExtractSummary = Scene(
|
|
"extract_summary",
|
|
"Extract Summary",
|
|
"Extract Summary",
|
|
["Extract Select"],
|
|
True,
|
|
)
|
|
ExtractRefineSummary = Scene(
|
|
"extract_refine_summary",
|
|
"Extract Summary",
|
|
"Extract Summary",
|
|
["Extract Select"],
|
|
True,
|
|
)
|
|
ExtractEntity = Scene(
|
|
"extract_entity", "Extract Entity", "Extract Entity", ["Extract Select"], True
|
|
)
|
|
QueryRewrite = Scene(
|
|
"query_rewrite", "query_rewrite", "query_rewrite", ["query_rewrite"], True
|
|
)
|
|
|
|
@staticmethod
|
|
def of_mode(mode):
|
|
return [x for x in ChatScene if mode == x.value()][0]
|
|
|
|
@staticmethod
|
|
def is_valid_mode(mode):
|
|
return any(mode == item.value() for item in ChatScene)
|
|
|
|
def value(self):
|
|
return self._value_.code
|
|
|
|
def scene_name(self):
|
|
return self._value_.name
|
|
|
|
def describe(self):
|
|
return self._value_.describe
|
|
|
|
def param_types(self):
|
|
return self._value_.param_types
|
|
|
|
def show_disable(self):
|
|
return self._value_.show_disable
|
|
|
|
def is_inner(self):
|
|
return self._value_.is_inner
|
|
|
|
|
|
class AppScenePromptTemplateAdapter(BaseModel):
|
|
"""The template of the scene.
|
|
|
|
Include some fields that in :class:`dbgpt.core.PromptTemplate`
|
|
"""
|
|
|
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
|
|
prompt: ChatPromptTemplate = Field(..., description="The prompt of this scene")
|
|
template_scene: Optional[str] = Field(
|
|
default=None, description="The scene of this template"
|
|
)
|
|
template_is_strict: Optional[bool] = Field(
|
|
default=True, description="Whether strict"
|
|
)
|
|
|
|
output_parser: Optional[BaseOutputParser] = Field(
|
|
default=None, description="The output parser of this scene"
|
|
)
|
|
sep: Optional[str] = Field(
|
|
default="###", description="The default separator of this scene"
|
|
)
|
|
|
|
stream_out: Optional[bool] = Field(
|
|
default=True, description="Whether to stream out"
|
|
)
|
|
example_selector: Optional[ExampleSelector] = Field(
|
|
default=None, description="Example selector"
|
|
)
|
|
need_historical_messages: Optional[bool] = Field(
|
|
default=False, description="Whether to need historical messages"
|
|
)
|
|
temperature: Optional[float] = Field(
|
|
default=0.6, description="The default temperature of this scene"
|
|
)
|
|
max_new_tokens: Optional[int] = Field(
|
|
default=1024, description="The default max new tokens of this scene"
|
|
)
|
|
str_history: Optional[bool] = Field(
|
|
default=False, description="Whether transform history to str"
|
|
)
|