provider_entities.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. from collections.abc import Sequence
  2. from enum import Enum
  3. from typing import Optional
  4. from pydantic import BaseModel, ConfigDict
  5. from core.model_runtime.entities.common_entities import I18nObject
  6. from core.model_runtime.entities.model_entities import ModelType, ProviderModel
  7. class ConfigurateMethod(Enum):
  8. """
  9. Enum class for configurate method of provider model.
  10. """
  11. PREDEFINED_MODEL = "predefined-model"
  12. CUSTOMIZABLE_MODEL = "customizable-model"
  13. class FormType(Enum):
  14. """
  15. Enum class for form type.
  16. """
  17. TEXT_INPUT = "text-input"
  18. SECRET_INPUT = "secret-input"
  19. SELECT = "select"
  20. RADIO = "radio"
  21. SWITCH = "switch"
  22. class FormShowOnObject(BaseModel):
  23. """
  24. Model class for form show on.
  25. """
  26. variable: str
  27. value: str
  28. class FormOption(BaseModel):
  29. """
  30. Model class for form option.
  31. """
  32. label: I18nObject
  33. value: str
  34. show_on: list[FormShowOnObject] = []
  35. def __init__(self, **data):
  36. super().__init__(**data)
  37. if not self.label:
  38. self.label = I18nObject(en_US=self.value)
  39. class CredentialFormSchema(BaseModel):
  40. """
  41. Model class for credential form schema.
  42. """
  43. variable: str
  44. label: I18nObject
  45. type: FormType
  46. required: bool = True
  47. default: Optional[str] = None
  48. options: Optional[list[FormOption]] = None
  49. placeholder: Optional[I18nObject] = None
  50. max_length: int = 0
  51. show_on: list[FormShowOnObject] = []
  52. class ProviderCredentialSchema(BaseModel):
  53. """
  54. Model class for provider credential schema.
  55. """
  56. credential_form_schemas: list[CredentialFormSchema]
  57. class FieldModelSchema(BaseModel):
  58. label: I18nObject
  59. placeholder: Optional[I18nObject] = None
  60. class ModelCredentialSchema(BaseModel):
  61. """
  62. Model class for model credential schema.
  63. """
  64. model: FieldModelSchema
  65. credential_form_schemas: list[CredentialFormSchema]
  66. class SimpleProviderEntity(BaseModel):
  67. """
  68. Simple model class for provider.
  69. """
  70. provider: str
  71. label: I18nObject
  72. icon_small: Optional[I18nObject] = None
  73. icon_large: Optional[I18nObject] = None
  74. supported_model_types: Sequence[ModelType]
  75. models: list[ProviderModel] = []
  76. class ProviderHelpEntity(BaseModel):
  77. """
  78. Model class for provider help.
  79. """
  80. title: I18nObject
  81. url: I18nObject
  82. class ProviderEntity(BaseModel):
  83. """
  84. Model class for provider.
  85. """
  86. provider: str
  87. label: I18nObject
  88. description: Optional[I18nObject] = None
  89. icon_small: Optional[I18nObject] = None
  90. icon_large: Optional[I18nObject] = None
  91. background: Optional[str] = None
  92. help: Optional[ProviderHelpEntity] = None
  93. supported_model_types: Sequence[ModelType]
  94. configurate_methods: list[ConfigurateMethod]
  95. models: list[ProviderModel] = []
  96. provider_credential_schema: Optional[ProviderCredentialSchema] = None
  97. model_credential_schema: Optional[ModelCredentialSchema] = None
  98. # pydantic configs
  99. model_config = ConfigDict(protected_namespaces=())
  100. def to_simple_provider(self) -> SimpleProviderEntity:
  101. """
  102. Convert to simple provider.
  103. :return: simple provider
  104. """
  105. return SimpleProviderEntity(
  106. provider=self.provider,
  107. label=self.label,
  108. icon_small=self.icon_small,
  109. icon_large=self.icon_large,
  110. supported_model_types=self.supported_model_types,
  111. models=self.models,
  112. )
  113. class ProviderConfig(BaseModel):
  114. """
  115. Model class for provider config.
  116. """
  117. provider: str
  118. credentials: dict