您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

model_entities.py 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from collections.abc import Sequence
  2. from enum import StrEnum, auto
  3. from pydantic import BaseModel, ConfigDict
  4. from core.model_runtime.entities.common_entities import I18nObject
  5. from core.model_runtime.entities.model_entities import ModelType, ProviderModel
  6. from core.model_runtime.entities.provider_entities import ProviderEntity
  7. class ModelStatus(StrEnum):
  8. """
  9. Enum class for model status.
  10. """
  11. ACTIVE = auto()
  12. NO_CONFIGURE = "no-configure"
  13. QUOTA_EXCEEDED = "quota-exceeded"
  14. NO_PERMISSION = "no-permission"
  15. DISABLED = auto()
  16. CREDENTIAL_REMOVED = "credential-removed"
  17. class SimpleModelProviderEntity(BaseModel):
  18. """
  19. Simple provider.
  20. """
  21. provider: str
  22. label: I18nObject
  23. icon_small: I18nObject | None = None
  24. icon_large: I18nObject | None = None
  25. supported_model_types: list[ModelType]
  26. def __init__(self, provider_entity: ProviderEntity):
  27. """
  28. Init simple provider.
  29. :param provider_entity: provider entity
  30. """
  31. super().__init__(
  32. provider=provider_entity.provider,
  33. label=provider_entity.label,
  34. icon_small=provider_entity.icon_small,
  35. icon_large=provider_entity.icon_large,
  36. supported_model_types=provider_entity.supported_model_types,
  37. )
  38. class ProviderModelWithStatusEntity(ProviderModel):
  39. """
  40. Model class for model response.
  41. """
  42. status: ModelStatus
  43. load_balancing_enabled: bool = False
  44. has_invalid_load_balancing_configs: bool = False
  45. def raise_for_status(self):
  46. """
  47. Check model status and raise ValueError if not active.
  48. :raises ValueError: When model status is not active, with a descriptive message
  49. """
  50. if self.status == ModelStatus.ACTIVE:
  51. return
  52. error_messages = {
  53. ModelStatus.NO_CONFIGURE: "Model is not configured",
  54. ModelStatus.QUOTA_EXCEEDED: "Model quota has been exceeded",
  55. ModelStatus.NO_PERMISSION: "No permission to use this model",
  56. ModelStatus.DISABLED: "Model is disabled",
  57. }
  58. if self.status in error_messages:
  59. raise ValueError(error_messages[self.status])
  60. class ModelWithProviderEntity(ProviderModelWithStatusEntity):
  61. """
  62. Model with provider entity.
  63. """
  64. provider: SimpleModelProviderEntity
  65. class DefaultModelProviderEntity(BaseModel):
  66. """
  67. Default model provider entity.
  68. """
  69. provider: str
  70. label: I18nObject
  71. icon_small: I18nObject | None = None
  72. icon_large: I18nObject | None = None
  73. supported_model_types: Sequence[ModelType] = []
  74. class DefaultModelEntity(BaseModel):
  75. """
  76. Default model entity.
  77. """
  78. model: str
  79. model_type: ModelType
  80. provider: DefaultModelProviderEntity
  81. # pydantic configs
  82. model_config = ConfigDict(protected_namespaces=())