mirror of
https://github.com/langgenius/dify.git
synced 2026-03-08 00:55:57 +08:00
170 lines
3.8 KiB
Python
170 lines
3.8 KiB
Python
from collections.abc import Sequence
|
|
from enum import StrEnum, auto
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
|
|
from dify_graph.model_runtime.entities.common_entities import I18nObject
|
|
from dify_graph.model_runtime.entities.model_entities import AIModelEntity, ModelType
|
|
|
|
|
|
class ConfigurateMethod(StrEnum):
|
|
"""
|
|
Enum class for configurate method of provider model.
|
|
"""
|
|
|
|
PREDEFINED_MODEL = "predefined-model"
|
|
CUSTOMIZABLE_MODEL = "customizable-model"
|
|
|
|
|
|
class FormType(StrEnum):
|
|
"""
|
|
Enum class for form type.
|
|
"""
|
|
|
|
TEXT_INPUT = "text-input"
|
|
SECRET_INPUT = "secret-input"
|
|
SELECT = auto()
|
|
RADIO = auto()
|
|
SWITCH = auto()
|
|
|
|
|
|
class FormShowOnObject(BaseModel):
|
|
"""
|
|
Model class for form show on.
|
|
"""
|
|
|
|
variable: str
|
|
value: str
|
|
|
|
|
|
class FormOption(BaseModel):
|
|
"""
|
|
Model class for form option.
|
|
"""
|
|
|
|
label: I18nObject
|
|
value: str
|
|
show_on: list[FormShowOnObject] = []
|
|
|
|
@model_validator(mode="after")
|
|
def _(self):
|
|
if not self.label:
|
|
self.label = I18nObject(en_US=self.value)
|
|
return self
|
|
|
|
|
|
class CredentialFormSchema(BaseModel):
|
|
"""
|
|
Model class for credential form schema.
|
|
"""
|
|
|
|
variable: str
|
|
label: I18nObject
|
|
type: FormType
|
|
required: bool = True
|
|
default: str | None = None
|
|
options: list[FormOption] | None = None
|
|
placeholder: I18nObject | None = None
|
|
max_length: int = 0
|
|
show_on: list[FormShowOnObject] = []
|
|
|
|
|
|
class ProviderCredentialSchema(BaseModel):
|
|
"""
|
|
Model class for provider credential schema.
|
|
"""
|
|
|
|
credential_form_schemas: list[CredentialFormSchema]
|
|
|
|
|
|
class FieldModelSchema(BaseModel):
|
|
label: I18nObject
|
|
placeholder: I18nObject | None = None
|
|
|
|
|
|
class ModelCredentialSchema(BaseModel):
|
|
"""
|
|
Model class for model credential schema.
|
|
"""
|
|
|
|
model: FieldModelSchema
|
|
credential_form_schemas: list[CredentialFormSchema]
|
|
|
|
|
|
class SimpleProviderEntity(BaseModel):
|
|
"""
|
|
Simple model class for provider.
|
|
"""
|
|
|
|
provider: str
|
|
label: I18nObject
|
|
icon_small: I18nObject | None = None
|
|
icon_small_dark: I18nObject | None = None
|
|
supported_model_types: Sequence[ModelType]
|
|
models: list[AIModelEntity] = []
|
|
|
|
|
|
class ProviderHelpEntity(BaseModel):
|
|
"""
|
|
Model class for provider help.
|
|
"""
|
|
|
|
title: I18nObject
|
|
url: I18nObject
|
|
|
|
|
|
class ProviderEntity(BaseModel):
|
|
"""
|
|
Model class for provider.
|
|
"""
|
|
|
|
provider: str
|
|
label: I18nObject
|
|
description: I18nObject | None = None
|
|
icon_small: I18nObject | None = None
|
|
icon_small_dark: I18nObject | None = None
|
|
background: str | None = None
|
|
help: ProviderHelpEntity | None = None
|
|
supported_model_types: Sequence[ModelType]
|
|
configurate_methods: list[ConfigurateMethod]
|
|
models: list[AIModelEntity] = Field(default_factory=list)
|
|
provider_credential_schema: ProviderCredentialSchema | None = None
|
|
model_credential_schema: ModelCredentialSchema | None = None
|
|
|
|
# pydantic configs
|
|
model_config = ConfigDict(protected_namespaces=())
|
|
|
|
# position from plugin _position.yaml
|
|
position: dict[str, list[str]] | None = {}
|
|
|
|
@field_validator("models", mode="before")
|
|
@classmethod
|
|
def validate_models(cls, v):
|
|
# returns EmptyList if v is empty
|
|
if not v:
|
|
return []
|
|
return v
|
|
|
|
def to_simple_provider(self) -> SimpleProviderEntity:
|
|
"""
|
|
Convert to simple provider.
|
|
|
|
:return: simple provider
|
|
"""
|
|
return SimpleProviderEntity(
|
|
provider=self.provider,
|
|
label=self.label,
|
|
icon_small=self.icon_small,
|
|
supported_model_types=self.supported_model_types,
|
|
models=self.models,
|
|
)
|
|
|
|
|
|
class ProviderConfig(BaseModel):
|
|
"""
|
|
Model class for provider config.
|
|
"""
|
|
|
|
provider: str
|
|
credentials: dict
|