Spaces:
Paused
Paused
| # -*- coding: utf-8 -*- | |
| """The credential base class.""" | |
| from typing import TYPE_CHECKING, Type | |
| from pydantic import BaseModel, Field | |
| from .._utils._common import _generate_id | |
| if TYPE_CHECKING: | |
| from ..embedding import EmbeddingModelBase | |
| from ..model import ChatModelBase, ModelCard | |
| from ..tts import TTSModelBase | |
| from ..tts._tts_model_card import TTSModelCard | |
| class CredentialBase(BaseModel): | |
| """The credential base class.""" | |
| id: str = Field( | |
| default_factory=_generate_id, | |
| description="The credential id", | |
| ) | |
| name: str = Field( | |
| default="", | |
| description="User-facing display name for this credential.", | |
| ) | |
| def get_chat_model_class(cls) -> Type["ChatModelBase"]: | |
| """Return the :class:`ChatModelBase` subclass that consumes this | |
| credential. Subclasses must override this method to return the | |
| corresponding chat model class. | |
| Returns: | |
| `Type[ChatModelBase]`: | |
| The chat model class that uses this credential. | |
| """ | |
| raise NotImplementedError( | |
| f"{cls.__name__} must implement ``get_chat_model_class``.", | |
| ) | |
| def get_tts_model_classes(cls) -> list[Type["TTSModelBase"]]: | |
| """Return the TTS model classes supported by this credential. | |
| Subclasses that support TTS should override this to return one or | |
| more :class:`TTSModelBase` subclasses. The default returns an empty | |
| list (provider does not support TTS). | |
| Returns: | |
| `list[Type[TTSModelBase]]`: | |
| The TTS model classes, or an empty list. | |
| """ | |
| return [] | |
| def list_tts_models(cls) -> list["TTSModelCard"]: | |
| """List the candidate TTS models available under this credential. | |
| Returns: | |
| `list[TTSModelCard]`: | |
| A list of TTS model cards, or empty if TTS is not supported. | |
| """ | |
| cards: list["TTSModelCard"] = [] | |
| for tts_cls in cls.get_tts_model_classes(): | |
| cards.extend(tts_cls.list_models()) | |
| return cards | |
| def list_models(cls) -> list["ModelCard"]: | |
| """List the candidate chat models that are available under this | |
| credential. The default implementation delegates to the | |
| :meth:`ChatModelBase.list_models` of the class returned by | |
| :meth:`get_chat_model_class`. | |
| Returns: | |
| `list[ModelCard]`: | |
| A list of candidate models described by their model cards. | |
| """ | |
| return cls.get_chat_model_class().list_models() | |
| def get_embedding_model_class(cls) -> Type["EmbeddingModelBase"] | None: | |
| """Return the :class:`EmbeddingModelBase` subclass that consumes | |
| this credential, or ``None`` if this provider does not support | |
| embedding models. | |
| Subclasses that have a matching embedding implementation should | |
| override this method. The default returns ``None``. | |
| Returns: | |
| `Type[EmbeddingModelBase] | None`: | |
| The embedding model class, or ``None``. | |
| """ | |
| return None | |