model_provider_entities.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. from enum import Enum
  2. from typing import Optional
  3. from flask import current_app
  4. from pydantic import BaseModel
  5. from core.entities.model_entities import ModelStatus, ModelWithProviderEntity
  6. from core.entities.provider_entities import QuotaConfiguration
  7. from core.model_runtime.entities.common_entities import I18nObject
  8. from core.model_runtime.entities.model_entities import ModelType, ProviderModel
  9. from core.model_runtime.entities.provider_entities import ConfigurateMethod, ProviderCredentialSchema, \
  10. ModelCredentialSchema, ProviderHelpEntity, SimpleProviderEntity
  11. from models.provider import ProviderType, ProviderQuotaType
  12. class CustomConfigurationStatus(Enum):
  13. """
  14. Enum class for custom configuration status.
  15. """
  16. ACTIVE = 'active'
  17. NO_CONFIGURE = 'no-configure'
  18. class CustomConfigurationResponse(BaseModel):
  19. """
  20. Model class for provider custom configuration response.
  21. """
  22. status: CustomConfigurationStatus
  23. class SystemConfigurationResponse(BaseModel):
  24. """
  25. Model class for provider system configuration response.
  26. """
  27. enabled: bool
  28. current_quota_type: Optional[ProviderQuotaType] = None
  29. quota_configurations: list[QuotaConfiguration] = []
  30. class ProviderResponse(BaseModel):
  31. """
  32. Model class for provider response.
  33. """
  34. provider: str
  35. label: I18nObject
  36. description: Optional[I18nObject] = None
  37. icon_small: Optional[I18nObject] = None
  38. icon_large: Optional[I18nObject] = None
  39. background: Optional[str] = None
  40. help: Optional[ProviderHelpEntity] = None
  41. supported_model_types: list[ModelType]
  42. configurate_methods: list[ConfigurateMethod]
  43. provider_credential_schema: Optional[ProviderCredentialSchema] = None
  44. model_credential_schema: Optional[ModelCredentialSchema] = None
  45. preferred_provider_type: ProviderType
  46. custom_configuration: CustomConfigurationResponse
  47. system_configuration: SystemConfigurationResponse
  48. def __init__(self, **data) -> None:
  49. super().__init__(**data)
  50. url_prefix = (current_app.config.get("CONSOLE_API_URL")
  51. + f"/console/api/workspaces/current/model-providers/{self.provider}")
  52. if self.icon_small is not None:
  53. self.icon_small = I18nObject(
  54. en_US=f"{url_prefix}/icon_small/en_US",
  55. zh_Hans=f"{url_prefix}/icon_small/zh_Hans"
  56. )
  57. if self.icon_large is not None:
  58. self.icon_large = I18nObject(
  59. en_US=f"{url_prefix}/icon_large/en_US",
  60. zh_Hans=f"{url_prefix}/icon_large/zh_Hans"
  61. )
  62. class ModelResponse(ProviderModel):
  63. """
  64. Model class for model response.
  65. """
  66. status: ModelStatus
  67. class ProviderWithModelsResponse(BaseModel):
  68. """
  69. Model class for provider with models response.
  70. """
  71. provider: str
  72. label: I18nObject
  73. icon_small: Optional[I18nObject] = None
  74. icon_large: Optional[I18nObject] = None
  75. status: CustomConfigurationStatus
  76. models: list[ModelResponse]
  77. def __init__(self, **data) -> None:
  78. super().__init__(**data)
  79. url_prefix = (current_app.config.get("CONSOLE_API_URL")
  80. + f"/console/api/workspaces/current/model-providers/{self.provider}")
  81. if self.icon_small is not None:
  82. self.icon_small = I18nObject(
  83. en_US=f"{url_prefix}/icon_small/en_US",
  84. zh_Hans=f"{url_prefix}/icon_small/zh_Hans"
  85. )
  86. if self.icon_large is not None:
  87. self.icon_large = I18nObject(
  88. en_US=f"{url_prefix}/icon_large/en_US",
  89. zh_Hans=f"{url_prefix}/icon_large/zh_Hans"
  90. )
  91. class SimpleProviderEntityResponse(SimpleProviderEntity):
  92. """
  93. Simple provider entity response.
  94. """
  95. def __init__(self, **data) -> None:
  96. super().__init__(**data)
  97. url_prefix = (current_app.config.get("CONSOLE_API_URL")
  98. + f"/console/api/workspaces/current/model-providers/{self.provider}")
  99. if self.icon_small is not None:
  100. self.icon_small = I18nObject(
  101. en_US=f"{url_prefix}/icon_small/en_US",
  102. zh_Hans=f"{url_prefix}/icon_small/zh_Hans"
  103. )
  104. if self.icon_large is not None:
  105. self.icon_large = I18nObject(
  106. en_US=f"{url_prefix}/icon_large/en_US",
  107. zh_Hans=f"{url_prefix}/icon_large/zh_Hans"
  108. )
  109. class DefaultModelResponse(BaseModel):
  110. """
  111. Default model entity.
  112. """
  113. model: str
  114. model_type: ModelType
  115. provider: SimpleProviderEntityResponse
  116. class ModelWithProviderEntityResponse(ModelWithProviderEntity):
  117. """
  118. Model with provider entity.
  119. """
  120. provider: SimpleProviderEntityResponse
  121. def __init__(self, model: ModelWithProviderEntity) -> None:
  122. super().__init__(**model.dict())