| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 | 
							- from collections.abc import Sequence
 - from enum import Enum, StrEnum
 - from typing import Any, Literal, Optional
 - 
 - from pydantic import BaseModel, Field, field_validator
 - 
 - from core.file import FileTransferMethod, FileType, FileUploadConfig
 - from core.model_runtime.entities.llm_entities import LLMMode
 - 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] = Field(default_factory=dict)
 -     stop: list[str] = Field(default_factory=list)
 - 
 - 
 - 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):
 -             """
 -             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 VariableEntityType(StrEnum):
 -     TEXT_INPUT = "text-input"
 -     SELECT = "select"
 -     PARAGRAPH = "paragraph"
 -     NUMBER = "number"
 -     EXTERNAL_DATA_TOOL = "external_data_tool"
 -     FILE = "file"
 -     FILE_LIST = "file-list"
 - 
 - 
 - class VariableEntity(BaseModel):
 -     """
 -     Variable Entity.
 -     """
 - 
 -     # `variable` records the name of the variable in user inputs.
 -     variable: str
 -     label: str
 -     description: str = ""
 -     type: VariableEntityType
 -     required: bool = False
 -     hide: bool = False
 -     max_length: Optional[int] = None
 -     options: Sequence[str] = Field(default_factory=list)
 -     allowed_file_types: Sequence[FileType] = Field(default_factory=list)
 -     allowed_file_extensions: Sequence[str] = Field(default_factory=list)
 -     allowed_file_upload_methods: Sequence[FileTransferMethod] = Field(default_factory=list)
 - 
 -     @field_validator("description", mode="before")
 -     @classmethod
 -     def convert_none_description(cls, v: Any) -> str:
 -         return v or ""
 - 
 -     @field_validator("options", mode="before")
 -     @classmethod
 -     def convert_none_options(cls, v: Any) -> Sequence[str]:
 -         return v or []
 - 
 - 
 - class ExternalDataVariableEntity(BaseModel):
 -     """
 -     External Data Variable Entity.
 -     """
 - 
 -     variable: str
 -     type: str
 -     config: dict[str, Any] = Field(default_factory=dict)
 - 
 - 
 - SupportedComparisonOperator = Literal[
 -     # for string or array
 -     "contains",
 -     "not contains",
 -     "start with",
 -     "end with",
 -     "is",
 -     "is not",
 -     "empty",
 -     "not empty",
 -     # for number
 -     "=",
 -     "≠",
 -     ">",
 -     "<",
 -     "≥",
 -     "≤",
 -     # for time
 -     "before",
 -     "after",
 - ]
 - 
 - 
 - class ModelConfig(BaseModel):
 -     provider: str
 -     name: str
 -     mode: LLMMode
 -     completion_params: dict[str, Any] = {}
 - 
 - 
 - class Condition(BaseModel):
 -     """
 -     Conditon detail
 -     """
 - 
 -     name: str
 -     comparison_operator: SupportedComparisonOperator
 -     value: str | Sequence[str] | None | int | float = None
 - 
 - 
 - class MetadataFilteringCondition(BaseModel):
 -     """
 -     Metadata Filtering Condition.
 -     """
 - 
 -     logical_operator: Optional[Literal["and", "or"]] = "and"
 -     conditions: Optional[list[Condition]] = Field(default=None, deprecated=True)
 - 
 - 
 - 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):
 -             """
 -             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.0
 -     rerank_mode: Optional[str] = "reranking_model"
 -     reranking_model: Optional[dict] = None
 -     weights: Optional[dict] = None
 -     reranking_enabled: Optional[bool] = True
 -     metadata_filtering_mode: Optional[Literal["disabled", "automatic", "manual"]] = "disabled"
 -     metadata_model_config: Optional[ModelConfig] = None
 -     metadata_filtering_conditions: Optional[MetadataFilteringCondition] = 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] = Field(default_factory=dict)
 - 
 - 
 - class TextToSpeechEntity(BaseModel):
 -     """
 -     Sensitive Word Avoidance Entity.
 -     """
 - 
 -     enabled: bool
 -     voice: Optional[str] = None
 -     language: Optional[str] = None
 - 
 - 
 - class TracingConfigEntity(BaseModel):
 -     """
 -     Tracing Config Entity.
 -     """
 - 
 -     enabled: bool
 -     tracing_provider: str
 - 
 - 
 - class AppAdditionalFeatures(BaseModel):
 -     file_upload: Optional[FileUploadConfig] = 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] = 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
 
 
  |