| | 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 |
| |
|