entities.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. from enum import Enum
  2. from typing import Any, Optional
  3. from pydantic import BaseModel
  4. from core.model_runtime.entities.message_entities import PromptMessageRole
  5. from models.model import AppMode
  6. class ModelConfigEntity(BaseModel):
  7. """
  8. Model Config Entity.
  9. """
  10. provider: str
  11. model: str
  12. mode: Optional[str] = None
  13. parameters: dict[str, Any] = {}
  14. stop: list[str] = []
  15. class AdvancedChatMessageEntity(BaseModel):
  16. """
  17. Advanced Chat Message Entity.
  18. """
  19. text: str
  20. role: PromptMessageRole
  21. class AdvancedChatPromptTemplateEntity(BaseModel):
  22. """
  23. Advanced Chat Prompt Template Entity.
  24. """
  25. messages: list[AdvancedChatMessageEntity]
  26. class AdvancedCompletionPromptTemplateEntity(BaseModel):
  27. """
  28. Advanced Completion Prompt Template Entity.
  29. """
  30. class RolePrefixEntity(BaseModel):
  31. """
  32. Role Prefix Entity.
  33. """
  34. user: str
  35. assistant: str
  36. prompt: str
  37. role_prefix: Optional[RolePrefixEntity] = None
  38. class PromptTemplateEntity(BaseModel):
  39. """
  40. Prompt Template Entity.
  41. """
  42. class PromptType(Enum):
  43. """
  44. Prompt Type.
  45. 'simple', 'advanced'
  46. """
  47. SIMPLE = 'simple'
  48. ADVANCED = 'advanced'
  49. @classmethod
  50. def value_of(cls, value: str) -> 'PromptType':
  51. """
  52. Get value of given mode.
  53. :param value: mode value
  54. :return: mode
  55. """
  56. for mode in cls:
  57. if mode.value == value:
  58. return mode
  59. raise ValueError(f'invalid prompt type value {value}')
  60. prompt_type: PromptType
  61. simple_prompt_template: Optional[str] = None
  62. advanced_chat_prompt_template: Optional[AdvancedChatPromptTemplateEntity] = None
  63. advanced_completion_prompt_template: Optional[AdvancedCompletionPromptTemplateEntity] = None
  64. class VariableEntity(BaseModel):
  65. """
  66. Variable Entity.
  67. """
  68. class Type(Enum):
  69. TEXT_INPUT = 'text-input'
  70. SELECT = 'select'
  71. PARAGRAPH = 'paragraph'
  72. NUMBER = 'number'
  73. @classmethod
  74. def value_of(cls, value: str) -> 'VariableEntity.Type':
  75. """
  76. Get value of given mode.
  77. :param value: mode value
  78. :return: mode
  79. """
  80. for mode in cls:
  81. if mode.value == value:
  82. return mode
  83. raise ValueError(f'invalid variable type value {value}')
  84. variable: str
  85. label: str
  86. description: Optional[str] = None
  87. type: Type
  88. required: bool = False
  89. max_length: Optional[int] = None
  90. options: Optional[list[str]] = None
  91. default: Optional[str] = None
  92. hint: Optional[str] = None
  93. @property
  94. def name(self) -> str:
  95. return self.variable
  96. class ExternalDataVariableEntity(BaseModel):
  97. """
  98. External Data Variable Entity.
  99. """
  100. variable: str
  101. type: str
  102. config: dict[str, Any] = {}
  103. class DatasetRetrieveConfigEntity(BaseModel):
  104. """
  105. Dataset Retrieve Config Entity.
  106. """
  107. class RetrieveStrategy(Enum):
  108. """
  109. Dataset Retrieve Strategy.
  110. 'single' or 'multiple'
  111. """
  112. SINGLE = 'single'
  113. MULTIPLE = 'multiple'
  114. @classmethod
  115. def value_of(cls, value: str) -> 'RetrieveStrategy':
  116. """
  117. Get value of given mode.
  118. :param value: mode value
  119. :return: mode
  120. """
  121. for mode in cls:
  122. if mode.value == value:
  123. return mode
  124. raise ValueError(f'invalid retrieve strategy value {value}')
  125. query_variable: Optional[str] = None # Only when app mode is completion
  126. retrieve_strategy: RetrieveStrategy
  127. top_k: Optional[int] = None
  128. score_threshold: Optional[float] = None
  129. rerank_mode: Optional[str] = 'reranking_model'
  130. reranking_model: Optional[dict] = None
  131. weights: Optional[dict] = None
  132. class DatasetEntity(BaseModel):
  133. """
  134. Dataset Config Entity.
  135. """
  136. dataset_ids: list[str]
  137. retrieve_config: DatasetRetrieveConfigEntity
  138. class SensitiveWordAvoidanceEntity(BaseModel):
  139. """
  140. Sensitive Word Avoidance Entity.
  141. """
  142. type: str
  143. config: dict[str, Any] = {}
  144. class TextToSpeechEntity(BaseModel):
  145. """
  146. Sensitive Word Avoidance Entity.
  147. """
  148. enabled: bool
  149. voice: Optional[str] = None
  150. language: Optional[str] = None
  151. class TracingConfigEntity(BaseModel):
  152. """
  153. Tracing Config Entity.
  154. """
  155. enabled: bool
  156. tracing_provider: str
  157. class FileExtraConfig(BaseModel):
  158. """
  159. File Upload Entity.
  160. """
  161. image_config: Optional[dict[str, Any]] = None
  162. class AppAdditionalFeatures(BaseModel):
  163. file_upload: Optional[FileExtraConfig] = None
  164. opening_statement: Optional[str] = None
  165. suggested_questions: list[str] = []
  166. suggested_questions_after_answer: bool = False
  167. show_retrieve_source: bool = False
  168. more_like_this: bool = False
  169. speech_to_text: bool = False
  170. text_to_speech: Optional[TextToSpeechEntity] = None
  171. trace_config: Optional[TracingConfigEntity] = None
  172. class AppConfig(BaseModel):
  173. """
  174. Application Config Entity.
  175. """
  176. tenant_id: str
  177. app_id: str
  178. app_mode: AppMode
  179. additional_features: AppAdditionalFeatures
  180. variables: list[VariableEntity] = []
  181. sensitive_word_avoidance: Optional[SensitiveWordAvoidanceEntity] = None
  182. class EasyUIBasedAppModelConfigFrom(Enum):
  183. """
  184. App Model Config From.
  185. """
  186. ARGS = 'args'
  187. APP_LATEST_CONFIG = 'app-latest-config'
  188. CONVERSATION_SPECIFIC_CONFIG = 'conversation-specific-config'
  189. class EasyUIBasedAppConfig(AppConfig):
  190. """
  191. Easy UI Based App Config Entity.
  192. """
  193. app_model_config_from: EasyUIBasedAppModelConfigFrom
  194. app_model_config_id: str
  195. app_model_config_dict: dict
  196. model: ModelConfigEntity
  197. prompt_template: PromptTemplateEntity
  198. dataset: Optional[DatasetEntity] = None
  199. external_data_variables: list[ExternalDataVariableEntity] = []
  200. class WorkflowUIBasedAppConfig(AppConfig):
  201. """
  202. Workflow UI Based App Config Entity.
  203. """
  204. workflow_id: str