123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- from collections.abc import Sequence
- from enum import Enum, StrEnum
- from typing import Any, Optional
- from pydantic import BaseModel, Field, field_validator
- from core.file import FileTransferMethod, FileType, FileUploadConfig
- 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):
- """
- 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: str
- label: str
- description: str = ""
- type: VariableEntityType
- required: 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] = {}
- 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
- 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 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
|