entities.py 6.0 KB

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