- from enum import Enum
 - from typing import Any, Optional
 - 
 - from pydantic import BaseModel
 - 
 - from core.model_runtime.entities.message_entities import PromptMessageRole
 - from models.model import AppMode
 - 
 - 
 - class ModelConfigEntity(BaseModel):
 -     """
 -     Model Config Entity.
 -     """
 -     provider: str
 -     model: str
 -     mode: Optional[str] = None
 -     parameters: dict[str, Any] = {}
 -     stop: list[str] = []
 - 
 - 
 - class AdvancedChatMessageEntity(BaseModel):
 -     """
 -     Advanced Chat Message Entity.
 -     """
 -     text: str
 -     role: PromptMessageRole
 - 
 - 
 - class AdvancedChatPromptTemplateEntity(BaseModel):
 -     """
 -     Advanced Chat Prompt Template Entity.
 -     """
 -     messages: list[AdvancedChatMessageEntity]
 - 
 - 
 - class AdvancedCompletionPromptTemplateEntity(BaseModel):
 -     """
 -     Advanced Completion Prompt Template Entity.
 -     """
 - 
 -     class RolePrefixEntity(BaseModel):
 -         """
 -         Role Prefix Entity.
 -         """
 -         user: str
 -         assistant: str
 - 
 -     prompt: str
 -     role_prefix: Optional[RolePrefixEntity] = None
 - 
 - 
 - class PromptTemplateEntity(BaseModel):
 -     """
 -     Prompt Template Entity.
 -     """
 - 
 -     class PromptType(Enum):
 -         """
 -         Prompt Type.
 -         'simple', 'advanced'
 -         """
 -         SIMPLE = 'simple'
 -         ADVANCED = 'advanced'
 - 
 -         @classmethod
 -         def value_of(cls, value: str) -> 'PromptType':
 -             """
 -             Get value of given mode.
 - 
 -             :param value: mode value
 -             :return: mode
 -             """
 -             for mode in cls:
 -                 if mode.value == value:
 -                     return mode
 -             raise ValueError(f'invalid prompt type value {value}')
 - 
 -     prompt_type: PromptType
 -     simple_prompt_template: Optional[str] = None
 -     advanced_chat_prompt_template: Optional[AdvancedChatPromptTemplateEntity] = None
 -     advanced_completion_prompt_template: Optional[AdvancedCompletionPromptTemplateEntity] = None
 - 
 - 
 - class VariableEntity(BaseModel):
 -     """
 -     Variable Entity.
 -     """
 -     class Type(Enum):
 -         TEXT_INPUT = 'text-input'
 -         SELECT = 'select'
 -         PARAGRAPH = 'paragraph'
 -         NUMBER = 'number'
 - 
 -         @classmethod
 -         def value_of(cls, value: str) -> 'VariableEntity.Type':
 -             """
 -             Get value of given mode.
 - 
 -             :param value: mode value
 -             :return: mode
 -             """
 -             for mode in cls:
 -                 if mode.value == value:
 -                     return mode
 -             raise ValueError(f'invalid variable type value {value}')
 - 
 -     variable: str
 -     label: str
 -     description: Optional[str] = None
 -     type: Type
 -     required: bool = False
 -     max_length: Optional[int] = None
 -     options: Optional[list[str]] = None
 -     default: Optional[str] = None
 -     hint: Optional[str] = None
 - 
 - 
 - class ExternalDataVariableEntity(BaseModel):
 -     """
 -     External Data Variable Entity.
 -     """
 -     variable: str
 -     type: str
 -     config: dict[str, Any] = {}
 - 
 - 
 - class DatasetRetrieveConfigEntity(BaseModel):
 -     """
 -     Dataset Retrieve Config Entity.
 -     """
 - 
 -     class RetrieveStrategy(Enum):
 -         """
 -         Dataset Retrieve Strategy.
 -         'single' or 'multiple'
 -         """
 -         SINGLE = 'single'
 -         MULTIPLE = 'multiple'
 - 
 -         @classmethod
 -         def value_of(cls, value: str) -> 'RetrieveStrategy':
 -             """
 -             Get value of given mode.
 - 
 -             :param value: mode value
 -             :return: mode
 -             """
 -             for mode in cls:
 -                 if mode.value == value:
 -                     return mode
 -             raise ValueError(f'invalid retrieve strategy value {value}')
 - 
 -     query_variable: Optional[str] = None  # Only when app mode is completion
 - 
 -     retrieve_strategy: RetrieveStrategy
 -     top_k: Optional[int] = None
 -     score_threshold: Optional[float] = None
 -     reranking_model: Optional[dict] = None
 - 
 - 
 - class DatasetEntity(BaseModel):
 -     """
 -     Dataset Config Entity.
 -     """
 -     dataset_ids: list[str]
 -     retrieve_config: DatasetRetrieveConfigEntity
 - 
 - 
 - class SensitiveWordAvoidanceEntity(BaseModel):
 -     """
 -     Sensitive Word Avoidance Entity.
 -     """
 -     type: str
 -     config: dict[str, Any] = {}
 - 
 - 
 - class TextToSpeechEntity(BaseModel):
 -     """
 -     Sensitive Word Avoidance Entity.
 -     """
 -     enabled: bool
 -     voice: Optional[str] = None
 -     language: Optional[str] = None
 - 
 - 
 - class FileExtraConfig(BaseModel):
 -     """
 -     File Upload Entity.
 -     """
 -     image_config: Optional[dict[str, Any]] = None
 - 
 - 
 - class AppAdditionalFeatures(BaseModel):
 -     file_upload: Optional[FileExtraConfig] = None
 -     opening_statement: Optional[str] = None
 -     suggested_questions: list[str] = []
 -     suggested_questions_after_answer: bool = False
 -     show_retrieve_source: bool = False
 -     more_like_this: bool = False
 -     speech_to_text: bool = False
 -     text_to_speech: Optional[TextToSpeechEntity] = None
 - 
 - 
 - class AppConfig(BaseModel):
 -     """
 -     Application Config Entity.
 -     """
 -     tenant_id: str
 -     app_id: str
 -     app_mode: AppMode
 -     additional_features: AppAdditionalFeatures
 -     variables: list[VariableEntity] = []
 -     sensitive_word_avoidance: Optional[SensitiveWordAvoidanceEntity] = None
 - 
 - 
 - class EasyUIBasedAppModelConfigFrom(Enum):
 -     """
 -     App Model Config From.
 -     """
 -     ARGS = 'args'
 -     APP_LATEST_CONFIG = 'app-latest-config'
 -     CONVERSATION_SPECIFIC_CONFIG = 'conversation-specific-config'
 - 
 - 
 - class EasyUIBasedAppConfig(AppConfig):
 -     """
 -     Easy UI Based App Config Entity.
 -     """
 -     app_model_config_from: EasyUIBasedAppModelConfigFrom
 -     app_model_config_id: str
 -     app_model_config_dict: dict
 -     model: ModelConfigEntity
 -     prompt_template: PromptTemplateEntity
 -     dataset: Optional[DatasetEntity] = None
 -     external_data_variables: list[ExternalDataVariableEntity] = []
 - 
 - 
 - class WorkflowUIBasedAppConfig(AppConfig):
 -     """
 -     Workflow UI Based App Config Entity.
 -     """
 -     workflow_id: str
 
 
  |