You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

entities.py 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  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. class VariableEntity(BaseModel):
  76. """
  77. Variable Entity.
  78. """
  79. # `variable` records the name of the variable in user inputs.
  80. variable: str
  81. label: str
  82. description: str = ""
  83. type: VariableEntityType
  84. required: bool = False
  85. hide: bool = False
  86. max_length: Optional[int] = None
  87. options: Sequence[str] = Field(default_factory=list)
  88. allowed_file_types: Sequence[FileType] = Field(default_factory=list)
  89. allowed_file_extensions: Sequence[str] = Field(default_factory=list)
  90. allowed_file_upload_methods: Sequence[FileTransferMethod] = Field(default_factory=list)
  91. @field_validator("description", mode="before")
  92. @classmethod
  93. def convert_none_description(cls, v: Any) -> str:
  94. return v or ""
  95. @field_validator("options", mode="before")
  96. @classmethod
  97. def convert_none_options(cls, v: Any) -> Sequence[str]:
  98. return v or []
  99. class ExternalDataVariableEntity(BaseModel):
  100. """
  101. External Data Variable Entity.
  102. """
  103. variable: str
  104. type: str
  105. config: dict[str, Any] = Field(default_factory=dict)
  106. SupportedComparisonOperator = Literal[
  107. # for string or array
  108. "contains",
  109. "not contains",
  110. "start with",
  111. "end with",
  112. "is",
  113. "is not",
  114. "empty",
  115. "not empty",
  116. # for number
  117. "=",
  118. "≠",
  119. ">",
  120. "<",
  121. "≥",
  122. "≤",
  123. # for time
  124. "before",
  125. "after",
  126. ]
  127. class ModelConfig(BaseModel):
  128. provider: str
  129. name: str
  130. mode: LLMMode
  131. completion_params: dict[str, Any] = {}
  132. class Condition(BaseModel):
  133. """
  134. Conditon detail
  135. """
  136. name: str
  137. comparison_operator: SupportedComparisonOperator
  138. value: str | Sequence[str] | None | int | float = None
  139. class MetadataFilteringCondition(BaseModel):
  140. """
  141. Metadata Filtering Condition.
  142. """
  143. logical_operator: Optional[Literal["and", "or"]] = "and"
  144. conditions: Optional[list[Condition]] = Field(default=None, deprecated=True)
  145. class DatasetRetrieveConfigEntity(BaseModel):
  146. """
  147. Dataset Retrieve Config Entity.
  148. """
  149. class RetrieveStrategy(Enum):
  150. """
  151. Dataset Retrieve Strategy.
  152. 'single' or 'multiple'
  153. """
  154. SINGLE = "single"
  155. MULTIPLE = "multiple"
  156. @classmethod
  157. def value_of(cls, value: str):
  158. """
  159. Get value of given mode.
  160. :param value: mode value
  161. :return: mode
  162. """
  163. for mode in cls:
  164. if mode.value == value:
  165. return mode
  166. raise ValueError(f"invalid retrieve strategy value {value}")
  167. query_variable: Optional[str] = None # Only when app mode is completion
  168. retrieve_strategy: RetrieveStrategy
  169. top_k: Optional[int] = None
  170. score_threshold: Optional[float] = 0.0
  171. rerank_mode: Optional[str] = "reranking_model"
  172. reranking_model: Optional[dict] = None
  173. weights: Optional[dict] = None
  174. reranking_enabled: Optional[bool] = True
  175. metadata_filtering_mode: Optional[Literal["disabled", "automatic", "manual"]] = "disabled"
  176. metadata_model_config: Optional[ModelConfig] = None
  177. metadata_filtering_conditions: Optional[MetadataFilteringCondition] = None
  178. class DatasetEntity(BaseModel):
  179. """
  180. Dataset Config Entity.
  181. """
  182. dataset_ids: list[str]
  183. retrieve_config: DatasetRetrieveConfigEntity
  184. class SensitiveWordAvoidanceEntity(BaseModel):
  185. """
  186. Sensitive Word Avoidance Entity.
  187. """
  188. type: str
  189. config: dict[str, Any] = Field(default_factory=dict)
  190. class TextToSpeechEntity(BaseModel):
  191. """
  192. Sensitive Word Avoidance Entity.
  193. """
  194. enabled: bool
  195. voice: Optional[str] = None
  196. language: Optional[str] = None
  197. class TracingConfigEntity(BaseModel):
  198. """
  199. Tracing Config Entity.
  200. """
  201. enabled: bool
  202. tracing_provider: str
  203. class AppAdditionalFeatures(BaseModel):
  204. file_upload: Optional[FileUploadConfig] = None
  205. opening_statement: Optional[str] = None
  206. suggested_questions: list[str] = []
  207. suggested_questions_after_answer: bool = False
  208. show_retrieve_source: bool = False
  209. more_like_this: bool = False
  210. speech_to_text: bool = False
  211. text_to_speech: Optional[TextToSpeechEntity] = None
  212. trace_config: Optional[TracingConfigEntity] = None
  213. class AppConfig(BaseModel):
  214. """
  215. Application Config Entity.
  216. """
  217. tenant_id: str
  218. app_id: str
  219. app_mode: AppMode
  220. additional_features: AppAdditionalFeatures
  221. variables: list[VariableEntity] = []
  222. sensitive_word_avoidance: Optional[SensitiveWordAvoidanceEntity] = None
  223. class EasyUIBasedAppModelConfigFrom(Enum):
  224. """
  225. App Model Config From.
  226. """
  227. ARGS = "args"
  228. APP_LATEST_CONFIG = "app-latest-config"
  229. CONVERSATION_SPECIFIC_CONFIG = "conversation-specific-config"
  230. class EasyUIBasedAppConfig(AppConfig):
  231. """
  232. Easy UI Based App Config Entity.
  233. """
  234. app_model_config_from: EasyUIBasedAppModelConfigFrom
  235. app_model_config_id: str
  236. app_model_config_dict: dict
  237. model: ModelConfigEntity
  238. prompt_template: PromptTemplateEntity
  239. dataset: Optional[DatasetEntity] = None
  240. external_data_variables: list[ExternalDataVariableEntity] = []
  241. class WorkflowUIBasedAppConfig(AppConfig):
  242. """
  243. Workflow UI Based App Config Entity.
  244. """
  245. workflow_id: str