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