Spaces:
Running
Running
from enum import Enum | |
from typing import Any, Optional | |
from pydantic import BaseModel | |
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' | |
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] = None | |
class VariableEntity(BaseModel): | |
""" | |
Variable Entity. | |
""" | |
class Type(Enum): | |
TEXT_INPUT = 'text-input' | |
SELECT = 'select' | |
PARAGRAPH = 'paragraph' | |
NUMBER = 'number' | |
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 | |
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' | |
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] = None | |
reranking_model: Optional[dict] = 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] = {} | |
class TextToSpeechEntity(BaseModel): | |
""" | |
Sensitive Word Avoidance Entity. | |
""" | |
enabled: bool | |
voice: Optional[str] = None | |
language: Optional[str] = None | |
class FileExtraConfig(BaseModel): | |
""" | |
File Upload Entity. | |
""" | |
image_config: Optional[dict[str, Any]] = None | |
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 | |
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 | |