| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 | from enum import Enumfrom typing import Any, Optionalfrom pydantic import BaseModelfrom core.model_runtime.entities.message_entities import PromptMessageRolefrom models.model import AppModeclass 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: PromptMessageRoleclass 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] = Noneclass 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] = Noneclass 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    @property    def name(self) -> str:        return self.variableclass 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] = .0    rerank_mode: Optional[str] = 'reranking_model'    reranking_model: Optional[dict] = None    weights: Optional[dict] = None    reranking_enabled: Optional[bool] = Trueclass DatasetEntity(BaseModel):    """    Dataset Config Entity.    """    dataset_ids: list[str]    retrieve_config: DatasetRetrieveConfigEntityclass 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] = Noneclass TracingConfigEntity(BaseModel):    """    Tracing Config Entity.    """    enabled: bool    tracing_provider: strclass FileExtraConfig(BaseModel):    """    File Upload Entity.    """    image_config: Optional[dict[str, Any]] = Noneclass 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    trace_config: Optional[TracingConfigEntity] = Noneclass 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] = Noneclass 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
 |