entities.py 5.9 KB

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