Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

model_entities.py 2.9KB

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