| from collections.abc import Sequence |
| from enum import Enum |
| from typing import Any, Optional |
|
|
| from pydantic import BaseModel, Field, field_validator |
|
|
| from core.file import FileExtraConfig, FileTransferMethod, FileType |
| 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(str, Enum): |
| 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 |
|
|
| 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[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] = 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 |
|
|