Spaces:
Running
Running
from enum import Enum | |
from typing import Optional | |
from flask import current_app | |
from pydantic import BaseModel | |
from core.entities.model_entities import ModelStatus, ModelWithProviderEntity | |
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, ProviderModel | |
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 | |
def __init__(self, **data) -> None: | |
super().__init__(**data) | |
url_prefix = (current_app.config.get("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 ModelResponse(ProviderModel): | |
""" | |
Model class for model response. | |
""" | |
status: ModelStatus | |
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[ModelResponse] | |
def __init__(self, **data) -> None: | |
super().__init__(**data) | |
url_prefix = (current_app.config.get("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 = (current_app.config.get("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 | |
class ModelWithProviderEntityResponse(ModelWithProviderEntity): | |
""" | |
Model with provider entity. | |
""" | |
provider: SimpleProviderEntityResponse | |
def __init__(self, model: ModelWithProviderEntity) -> None: | |
super().__init__(**model.dict()) | |