Source code for autogen_ext.models.openai._azure_token_provider
from typing import List
from autogen_core import Component
from azure.core.credentials import TokenProvider
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from pydantic import BaseModel
from typing_extensions import Self
class TokenProviderConfig(BaseModel):
provider_kind: str
scopes: List[str]
[docs]
class AzureTokenProvider(Component[TokenProviderConfig]):
component_type = "token_provider"
component_config_schema = TokenProviderConfig
component_provider_override = "autogen_ext.models.openai.AzureTokenProvider"
def __init__(self, credential: TokenProvider, *scopes: str):
self.credential = credential
self.scopes = list(scopes)
self.provider = get_bearer_token_provider(self.credential, *self.scopes)
def __call__(self) -> str:
return self.provider()
def _to_config(self) -> TokenProviderConfig:
"""Dump the configuration that would be requite to create a new instance of a component matching the configuration of this instance.
Returns:
T: The configuration of the component.
"""
if isinstance(self.credential, DefaultAzureCredential):
# NOTE: we are not currently inspecting the chained credentials, so this could result in a loss of information
return TokenProviderConfig(provider_kind="DefaultAzureCredential", scopes=self.scopes)
else:
raise ValueError("Only DefaultAzureCredential is supported")
@classmethod
def _from_config(cls, config: TokenProviderConfig) -> Self:
"""Create a new instance of the component from a configuration object.
Args:
config (T): The configuration object.
Returns:
Self: The new instance of the component.
"""
if config.provider_kind == "DefaultAzureCredential":
return cls(DefaultAzureCredential(), *config.scopes)
else:
raise ValueError("Only DefaultAzureCredential is supported")