model_provider_entities.py 4.9 KB

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