| from enum import Enum |
| from typing import Optional |
|
|
| from pydantic import BaseModel, ConfigDict |
|
|
| from configs import dify_config |
| from core.entities.model_entities import ModelWithProviderEntity, ProviderModelWithStatusEntity |
| from core.entities.provider_entities import QuotaConfiguration |
| from core.model_runtime.entities.common_entities import I18nObject |
| from core.model_runtime.entities.model_entities import ModelType |
| from core.model_runtime.entities.provider_entities import ( |
| ConfigurateMethod, |
| ModelCredentialSchema, |
| ProviderCredentialSchema, |
| ProviderHelpEntity, |
| SimpleProviderEntity, |
| ) |
| from models.provider import ProviderQuotaType, ProviderType |
|
|
|
|
| class CustomConfigurationStatus(Enum): |
| """ |
| Enum class for custom configuration status. |
| """ |
|
|
| ACTIVE = "active" |
| NO_CONFIGURE = "no-configure" |
|
|
|
|
| class CustomConfigurationResponse(BaseModel): |
| """ |
| Model class for provider custom configuration response. |
| """ |
|
|
| status: CustomConfigurationStatus |
|
|
|
|
| class SystemConfigurationResponse(BaseModel): |
| """ |
| Model class for provider system configuration response. |
| """ |
|
|
| enabled: bool |
| current_quota_type: Optional[ProviderQuotaType] = None |
| quota_configurations: list[QuotaConfiguration] = [] |
|
|
|
|
| class ProviderResponse(BaseModel): |
| """ |
| Model class for provider response. |
| """ |
|
|
| provider: str |
| label: I18nObject |
| description: Optional[I18nObject] = None |
| icon_small: Optional[I18nObject] = None |
| icon_large: Optional[I18nObject] = None |
| background: Optional[str] = None |
| help: Optional[ProviderHelpEntity] = None |
| supported_model_types: list[ModelType] |
| configurate_methods: list[ConfigurateMethod] |
| provider_credential_schema: Optional[ProviderCredentialSchema] = None |
| model_credential_schema: Optional[ModelCredentialSchema] = None |
| preferred_provider_type: ProviderType |
| custom_configuration: CustomConfigurationResponse |
| system_configuration: SystemConfigurationResponse |
|
|
| |
| model_config = ConfigDict(protected_namespaces=()) |
|
|
| def __init__(self, **data) -> None: |
| super().__init__(**data) |
|
|
| url_prefix = dify_config.CONSOLE_API_URL + f"/console/api/workspaces/current/model-providers/{self.provider}" |
| if self.icon_small is not None: |
| self.icon_small = I18nObject( |
| en_US=f"{url_prefix}/icon_small/en_US", zh_Hans=f"{url_prefix}/icon_small/zh_Hans" |
| ) |
|
|
| if self.icon_large is not None: |
| self.icon_large = I18nObject( |
| en_US=f"{url_prefix}/icon_large/en_US", zh_Hans=f"{url_prefix}/icon_large/zh_Hans" |
| ) |
|
|
|
|
| class ProviderWithModelsResponse(BaseModel): |
| """ |
| Model class for provider with models response. |
| """ |
|
|
| provider: str |
| label: I18nObject |
| icon_small: Optional[I18nObject] = None |
| icon_large: Optional[I18nObject] = None |
| status: CustomConfigurationStatus |
| models: list[ProviderModelWithStatusEntity] |
|
|
| def __init__(self, **data) -> None: |
| super().__init__(**data) |
|
|
| url_prefix = dify_config.CONSOLE_API_URL + f"/console/api/workspaces/current/model-providers/{self.provider}" |
| if self.icon_small is not None: |
| self.icon_small = I18nObject( |
| en_US=f"{url_prefix}/icon_small/en_US", zh_Hans=f"{url_prefix}/icon_small/zh_Hans" |
| ) |
|
|
| if self.icon_large is not None: |
| self.icon_large = I18nObject( |
| en_US=f"{url_prefix}/icon_large/en_US", zh_Hans=f"{url_prefix}/icon_large/zh_Hans" |
| ) |
|
|
|
|
| class SimpleProviderEntityResponse(SimpleProviderEntity): |
| """ |
| Simple provider entity response. |
| """ |
|
|
| def __init__(self, **data) -> None: |
| super().__init__(**data) |
|
|
| url_prefix = dify_config.CONSOLE_API_URL + f"/console/api/workspaces/current/model-providers/{self.provider}" |
| if self.icon_small is not None: |
| self.icon_small = I18nObject( |
| en_US=f"{url_prefix}/icon_small/en_US", zh_Hans=f"{url_prefix}/icon_small/zh_Hans" |
| ) |
|
|
| if self.icon_large is not None: |
| self.icon_large = I18nObject( |
| en_US=f"{url_prefix}/icon_large/en_US", zh_Hans=f"{url_prefix}/icon_large/zh_Hans" |
| ) |
|
|
|
|
| class DefaultModelResponse(BaseModel): |
| """ |
| Default model entity. |
| """ |
|
|
| model: str |
| model_type: ModelType |
| provider: SimpleProviderEntityResponse |
|
|
| |
| model_config = ConfigDict(protected_namespaces=()) |
|
|
|
|
| class ModelWithProviderEntityResponse(ModelWithProviderEntity): |
| """ |
| Model with provider entity. |
| """ |
|
|
| provider: SimpleProviderEntityResponse |
|
|
| def __init__(self, model: ModelWithProviderEntity) -> None: |
| super().__init__(**model.model_dump()) |
|
|