您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

entities.py 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. from collections.abc import Sequence
  2. from enum import Enum, StrEnum
  3. from typing import Any, Literal, Optional
  4. from pydantic import BaseModel, Field, field_validator
  5. from core.file import FileTransferMethod, FileType, FileUploadConfig
  6. from core.model_runtime.entities.llm_entities import LLMMode
  7. from core.model_runtime.entities.message_entities import PromptMessageRole
  8. from models.model import AppMode
  9. class ModelConfigEntity(BaseModel):
  10. """
  11. Model Config Entity.
  12. """
  13. provider: str
  14. model: str
  15. mode: Optional[str] = None
  16. parameters: dict[str, Any] = Field(default_factory=dict)
  17. stop: list[str] = Field(default_factory=list)
  18. class AdvancedChatMessageEntity(BaseModel):
  19. """
  20. Advanced Chat Message Entity.
  21. """
  22. text: str
  23. role: PromptMessageRole
  24. class AdvancedChatPromptTemplateEntity(BaseModel):
  25. """
  26. Advanced Chat Prompt Template Entity.
  27. """
  28. messages: list[AdvancedChatMessageEntity]
  29. class AdvancedCompletionPromptTemplateEntity(BaseModel):
  30. """
  31. Advanced Completion Prompt Template Entity.
  32. """
  33. class RolePrefixEntity(BaseModel):
  34. """
  35. Role Prefix Entity.
  36. """
  37. user: str
  38. assistant: str
  39. prompt: str
  40. role_prefix: Optional[RolePrefixEntity] = None
  41. class PromptTemplateEntity(BaseModel):
  42. """
  43. Prompt Template Entity.
  44. """
  45. class PromptType(Enum):
  46. """
  47. Prompt Type.
  48. 'simple', 'advanced'
  49. """
  50. SIMPLE = "simple"
  51. ADVANCED = "advanced"
  52. @classmethod
  53. def value_of(cls, value: str):
  54. """
  55. Get value of given mode.
  56. :param value: mode value
  57. :return: mode
  58. """
  59. for mode in cls:
  60. if mode.value == value:
  61. return mode
  62. raise ValueError(f"invalid prompt type value {value}")
  63. prompt_type: PromptType
  64. simple_prompt_template: Optional[str] = None
  65. advanced_chat_prompt_template: Optional[AdvancedChatPromptTemplateEntity] = None
  66. advanced_completion_prompt_template: Optional[AdvancedCompletionPromptTemplateEntity] = None
  67. class VariableEntityType(StrEnum):
  68. TEXT_INPUT = "text-input"
  69. SELECT = "select"
  70. PARAGRAPH = "paragraph"
  71. NUMBER = "number"
  72. EXTERNAL_DATA_TOOL = "external_data_tool"
  73. FILE = "file"
  74. FILE_LIST = "file-list"
  75. CHECKBOX = "checkbox"
  76. class VariableEntity(BaseModel):
  77. """
  78. Variable Entity.
  79. """
  80. # `variable` records the name of the variable in user inputs.
  81. variable: str
  82. label: str
  83. description: str = ""
  84. type: VariableEntityType
  85. required: bool = False
  86. hide: bool = False
  87. max_length: Optional[int] = None
  88. options: Sequence[str] = Field(default_factory=list)
  89. allowed_file_types: Sequence[FileType] = Field(default_factory=list)
  90. allowed_file_extensions: Sequence[str] = Field(default_factory=list)
  91. allowed_file_upload_methods: Sequence[FileTransferMethod] = Field(default_factory=list)
  92. @field_validator("description", mode="before")
  93. @classmethod
  94. def convert_none_description(cls, v: Any) -> str:
  95. return v or ""
  96. @field_validator("options", mode="before")
  97. @classmethod
  98. def convert_none_options(cls, v: Any) -> Sequence[str]:
  99. return v or []
  100. class ExternalDataVariableEntity(BaseModel):
  101. """
  102. External Data Variable Entity.
  103. """
  104. variable: str
  105. type: str
  106. config: dict[str, Any] = Field(default_factory=dict)
  107. SupportedComparisonOperator = Literal[
  108. # for string or array
  109. "contains",
  110. "not contains",
  111. "start with",
  112. "end with",
  113. "is",
  114. "is not",
  115. "empty",
  116. "not empty",
  117. "in",
  118. "not in",
  119. # for number
  120. "=",
  121. "≠",
  122. ">",
  123. "<",
  124. "≥",
  125. "≤",
  126. # for time
  127. "before",
  128. "after",
  129. ]
  130. class ModelConfig(BaseModel):
  131. provider: str
  132. name: str
  133. mode: LLMMode
  134. completion_params: dict[str, Any] = Field(default_factory=dict)
  135. class Condition(BaseModel):
  136. """
  137. Conditon detail
  138. """
  139. name: str
  140. comparison_operator: SupportedComparisonOperator
  141. value: str | Sequence[str] | None | int | float = None
  142. class MetadataFilteringCondition(BaseModel):
  143. """
  144. Metadata Filtering Condition.
  145. """
  146. logical_operator: Optional[Literal["and", "or"]] = "and"
  147. conditions: Optional[list[Condition]] = Field(default=None, deprecated=True)
  148. class DatasetRetrieveConfigEntity(BaseModel):
  149. """
  150. Dataset Retrieve Config Entity.
  151. """
  152. class RetrieveStrategy(Enum):
  153. """
  154. Dataset Retrieve Strategy.
  155. 'single' or 'multiple'
  156. """
  157. SINGLE = "single"
  158. MULTIPLE = "multiple"
  159. @classmethod
  160. def value_of(cls, value: str):
  161. """
  162. Get value of given mode.
  163. :param value: mode value
  164. :return: mode
  165. """
  166. for mode in cls:
  167. if mode.value == value:
  168. return mode
  169. raise ValueError(f"invalid retrieve strategy value {value}")
  170. query_variable: Optional[str] = None # Only when app mode is completion
  171. retrieve_strategy: RetrieveStrategy
  172. top_k: Optional[int] = None
  173. score_threshold: Optional[float] = 0.0
  174. rerank_mode: Optional[str] = "reranking_model"
  175. reranking_model: Optional[dict] = None
  176. weights: Optional[dict] = None
  177. reranking_enabled: Optional[bool] = True
  178. metadata_filtering_mode: Optional[Literal["disabled", "automatic", "manual"]] = "disabled"
  179. metadata_model_config: Optional[ModelConfig] = None
  180. metadata_filtering_conditions: Optional[MetadataFilteringCondition] = None
  181. class DatasetEntity(BaseModel):
  182. """
  183. Dataset Config Entity.
  184. """
  185. dataset_ids: list[str]
  186. retrieve_config: DatasetRetrieveConfigEntity
  187. class SensitiveWordAvoidanceEntity(BaseModel):
  188. """
  189. Sensitive Word Avoidance Entity.
  190. """
  191. type: str
  192. config: dict[str, Any] = Field(default_factory=dict)
  193. class TextToSpeechEntity(BaseModel):
  194. """
  195. Sensitive Word Avoidance Entity.
  196. """
  197. enabled: bool
  198. voice: Optional[str] = None
  199. language: Optional[str] = None
  200. class TracingConfigEntity(BaseModel):
  201. """
  202. Tracing Config Entity.
  203. """
  204. enabled: bool
  205. tracing_provider: str
  206. class AppAdditionalFeatures(BaseModel):
  207. file_upload: Optional[FileUploadConfig] = None
  208. opening_statement: Optional[str] = None
  209. suggested_questions: list[str] = []
  210. suggested_questions_after_answer: bool = False
  211. show_retrieve_source: bool = False
  212. more_like_this: bool = False
  213. speech_to_text: bool = False
  214. text_to_speech: Optional[TextToSpeechEntity] = None
  215. trace_config: Optional[TracingConfigEntity] = None
  216. class AppConfig(BaseModel):
  217. """
  218. Application Config Entity.
  219. """
  220. tenant_id: str
  221. app_id: str
  222. app_mode: AppMode
  223. additional_features: AppAdditionalFeatures
  224. variables: list[VariableEntity] = []
  225. sensitive_word_avoidance: Optional[SensitiveWordAvoidanceEntity] = None
  226. class EasyUIBasedAppModelConfigFrom(Enum):
  227. """
  228. App Model Config From.
  229. """
  230. ARGS = "args"
  231. APP_LATEST_CONFIG = "app-latest-config"
  232. CONVERSATION_SPECIFIC_CONFIG = "conversation-specific-config"
  233. class EasyUIBasedAppConfig(AppConfig):
  234. """
  235. Easy UI Based App Config Entity.
  236. """
  237. app_model_config_from: EasyUIBasedAppModelConfigFrom
  238. app_model_config_id: str
  239. app_model_config_dict: dict
  240. model: ModelConfigEntity
  241. prompt_template: PromptTemplateEntity
  242. dataset: Optional[DatasetEntity] = None
  243. external_data_variables: list[ExternalDataVariableEntity] = []
  244. class WorkflowUIBasedAppConfig(AppConfig):
  245. """
  246. Workflow UI Based App Config Entity.
  247. """
  248. workflow_id: str