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.

преди 8 месеца
преди 8 месеца
преди 8 месеца
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  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. "in",
  117. "not in",
  118. # for number
  119. "=",
  120. "≠",
  121. ">",
  122. "<",
  123. "≥",
  124. "≤",
  125. # for time
  126. "before",
  127. "after",
  128. ]
  129. class ModelConfig(BaseModel):
  130. provider: str
  131. name: str
  132. mode: LLMMode
  133. completion_params: dict[str, Any] = {}
  134. class Condition(BaseModel):
  135. """
  136. Conditon detail
  137. """
  138. name: str
  139. comparison_operator: SupportedComparisonOperator
  140. value: str | Sequence[str] | None | int | float = None
  141. class MetadataFilteringCondition(BaseModel):
  142. """
  143. Metadata Filtering Condition.
  144. """
  145. logical_operator: Optional[Literal["and", "or"]] = "and"
  146. conditions: Optional[list[Condition]] = Field(default=None, deprecated=True)
  147. class DatasetRetrieveConfigEntity(BaseModel):
  148. """
  149. Dataset Retrieve Config Entity.
  150. """
  151. class RetrieveStrategy(Enum):
  152. """
  153. Dataset Retrieve Strategy.
  154. 'single' or 'multiple'
  155. """
  156. SINGLE = "single"
  157. MULTIPLE = "multiple"
  158. @classmethod
  159. def value_of(cls, value: str):
  160. """
  161. Get value of given mode.
  162. :param value: mode value
  163. :return: mode
  164. """
  165. for mode in cls:
  166. if mode.value == value:
  167. return mode
  168. raise ValueError(f"invalid retrieve strategy value {value}")
  169. query_variable: Optional[str] = None # Only when app mode is completion
  170. retrieve_strategy: RetrieveStrategy
  171. top_k: Optional[int] = None
  172. score_threshold: Optional[float] = 0.0
  173. rerank_mode: Optional[str] = "reranking_model"
  174. reranking_model: Optional[dict] = None
  175. weights: Optional[dict] = None
  176. reranking_enabled: Optional[bool] = True
  177. metadata_filtering_mode: Optional[Literal["disabled", "automatic", "manual"]] = "disabled"
  178. metadata_model_config: Optional[ModelConfig] = None
  179. metadata_filtering_conditions: Optional[MetadataFilteringCondition] = None
  180. class DatasetEntity(BaseModel):
  181. """
  182. Dataset Config Entity.
  183. """
  184. dataset_ids: list[str]
  185. retrieve_config: DatasetRetrieveConfigEntity
  186. class SensitiveWordAvoidanceEntity(BaseModel):
  187. """
  188. Sensitive Word Avoidance Entity.
  189. """
  190. type: str
  191. config: dict[str, Any] = Field(default_factory=dict)
  192. class TextToSpeechEntity(BaseModel):
  193. """
  194. Sensitive Word Avoidance Entity.
  195. """
  196. enabled: bool
  197. voice: Optional[str] = None
  198. language: Optional[str] = None
  199. class TracingConfigEntity(BaseModel):
  200. """
  201. Tracing Config Entity.
  202. """
  203. enabled: bool
  204. tracing_provider: str
  205. class AppAdditionalFeatures(BaseModel):
  206. file_upload: Optional[FileUploadConfig] = None
  207. opening_statement: Optional[str] = None
  208. suggested_questions: list[str] = []
  209. suggested_questions_after_answer: bool = False
  210. show_retrieve_source: bool = False
  211. more_like_this: bool = False
  212. speech_to_text: bool = False
  213. text_to_speech: Optional[TextToSpeechEntity] = None
  214. trace_config: Optional[TracingConfigEntity] = None
  215. class AppConfig(BaseModel):
  216. """
  217. Application Config Entity.
  218. """
  219. tenant_id: str
  220. app_id: str
  221. app_mode: AppMode
  222. additional_features: AppAdditionalFeatures
  223. variables: list[VariableEntity] = []
  224. sensitive_word_avoidance: Optional[SensitiveWordAvoidanceEntity] = None
  225. class EasyUIBasedAppModelConfigFrom(Enum):
  226. """
  227. App Model Config From.
  228. """
  229. ARGS = "args"
  230. APP_LATEST_CONFIG = "app-latest-config"
  231. CONVERSATION_SPECIFIC_CONFIG = "conversation-specific-config"
  232. class EasyUIBasedAppConfig(AppConfig):
  233. """
  234. Easy UI Based App Config Entity.
  235. """
  236. app_model_config_from: EasyUIBasedAppModelConfigFrom
  237. app_model_config_id: str
  238. app_model_config_dict: dict
  239. model: ModelConfigEntity
  240. prompt_template: PromptTemplateEntity
  241. dataset: Optional[DatasetEntity] = None
  242. external_data_variables: list[ExternalDataVariableEntity] = []
  243. class WorkflowUIBasedAppConfig(AppConfig):
  244. """
  245. Workflow UI Based App Config Entity.
  246. """
  247. workflow_id: str