openai#

  • __all__ = ['AzureOpenAiEmbeddingDriver', 'OpenAiEmbeddingDriver'] module-attribute

Bases: OpenAiEmbeddingDriver “)

Attributes#

Name

Type

Description

<a href="openai.mdx#griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.azure_deployment" title="azure_deployment = field(kw_only=True, default=Factory(lambda self: self.model, takes_self=True), metadata={'serializable': True}) class-attribute instance-attribute (griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.azure_deployment)"><code class="language-python">azure_deployment</code></a>

str

An optional Azure OpenAi deployment id. Defaults to the model name.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.azure_endpoint" title="azure_endpoint = field(kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute (griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.azure_endpoint)"><code class="language-python">azure_endpoint</code></a>

str

An Azure OpenAi endpoint.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.azure_ad_token" title="azure_ad_token = field(kw_only=True, default=None, metadata={'serializable': False}) class-attribute instance-attribute (griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.azure_ad_token)"><code class="language-python">azure_ad_token</code></a>

Optional[str]

An optional Azure Active Directory token.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.azure_ad_token_provider" title="azure_ad_token_provider = field(kw_only=True, default=None, metadata={'serializable': False}) class-attribute instance-attribute (griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.azure_ad_token_provider)"><code class="language-python">azure_ad_token_provider</code></a>

Optional[Callable[[], str]]

An optional Azure Active Directory token provider.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.api_version" title="api_version = field(default='2024-10-21', kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute (griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.api_version)"><code class="language-python">api_version</code></a>

str

An Azure OpenAi API version.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.tokenizer" title="tokenizer = field(default=Factory(lambda self: OpenAiTokenizer(model=self.model), takes_self=True), kw_only=True) class-attribute instance-attribute (griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.tokenizer)"><code class="language-python">tokenizer</code></a>

<a href="../../tokenizers#griptape.tokenizers.OpenAiTokenizer" title="OpenAiTokenizer (griptape.tokenizers.OpenAiTokenizer)"><code class="language-python">OpenAiTokenizer</code></a>

An OpenAiTokenizer.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.client" title="client() (griptape.drivers.embedding.openai.AzureOpenAiEmbeddingDriver.client)"><code class="language-python">client</code></a>

AzureOpenAI

An openai.AzureOpenAI client.<br/>

Source Code in griptape/drivers/embedding/azure_openai_embedding_driver.py

@define
class AzureOpenAiEmbeddingDriver(OpenAiEmbeddingDriver):
    """Azure OpenAi Embedding Driver.

    Attributes:
        azure_deployment: An optional Azure OpenAi deployment id. Defaults to the model name.
        azure_endpoint: An Azure OpenAi endpoint.
        azure_ad_token: An optional Azure Active Directory token.
        azure_ad_token_provider: An optional Azure Active Directory token provider.
        api_version: An Azure OpenAi API version.
        tokenizer: An `OpenAiTokenizer`.
        client: An `openai.AzureOpenAI` client.
    """

    azure_deployment: str = field(
        kw_only=True,
        default=Factory(lambda self: self.model, takes_self=True),
        metadata={"serializable": True},
    )
    azure_endpoint: str = field(kw_only=True, metadata={"serializable": True})
    azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False})
    azure_ad_token_provider: Optional[Callable[[], str]] = field(
        kw_only=True,
        default=None,
        metadata={"serializable": False},
    )
    api_version: str = field(default="2024-10-21", kw_only=True, metadata={"serializable": True})
    tokenizer: OpenAiTokenizer = field(
        default=Factory(lambda self: OpenAiTokenizer(model=self.model), takes_self=True),
        kw_only=True,
    )
    _client: Optional[openai.AzureOpenAI] = field(
        default=None, kw_only=True, alias="client", metadata={"serializable": False}
    )

    @lazy_property()
    def client(self) -> openai.AzureOpenAI:
        return openai.AzureOpenAI(
            organization=self.organization,
            api_key=self.api_key,
            api_version=self.api_version,
            azure_endpoint=self.azure_endpoint,
            azure_deployment=self.azure_deployment,
            azure_ad_token=self.azure_ad_token,
            azure_ad_token_provider=self.azure_ad_token_provider,
        )
  • _client = field(default=None, kw_only=True, alias='client', metadata={'serializable': False}) class-attribute instance-attribute

  • api_version = field(default='2024-10-21', kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute

  • azure_ad_token = field(kw_only=True, default=None, metadata={'serializable': False}) class-attribute instance-attribute

  • azure_ad_token_provider = field(kw_only=True, default=None, metadata={'serializable': False}) class-attribute instance-attribute

  • azure_deployment = field(kw_only=True, default=Factory(lambda self: self.model, takes_self=True), metadata={'serializable': True}) class-attribute instance-attribute

  • azure_endpoint = field(kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute

  • tokenizer = field(default=Factory(lambda self: OpenAiTokenizer(model=self.model), takes_self=True), kw_only=True) class-attribute instance-attribute

client()#

Source Code in griptape/drivers/embedding/azure_openai_embedding_driver.py

@lazy_property()
def client(self) -> openai.AzureOpenAI:
    return openai.AzureOpenAI(
        organization=self.organization,
        api_key=self.api_key,
        api_version=self.api_version,
        azure_endpoint=self.azure_endpoint,
        azure_deployment=self.azure_deployment,
        azure_ad_token=self.azure_ad_token,
        azure_ad_token_provider=self.azure_ad_token_provider,
    )

OpenAiEmbeddingDriver#

Bases: BaseEmbeddingDriver “)

Attributes#

Name

Type

Description

<a href="openai.mdx#griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.model" title="model = field(default=DEFAULT_MODEL, kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute (griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.model)"><code class="language-python">model</code></a>

str

OpenAI embedding model name. Defaults to text-embedding-3-small.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.base_url" title="base_url = field(default=None, kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute (griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.base_url)"><code class="language-python">base_url</code></a>

Optional[str]

API URL. Defaults to OpenAI's v1 API URL.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.api_key" title="api_key = field(default=None, kw_only=True, metadata={'serializable': False}) class-attribute instance-attribute (griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.api_key)"><code class="language-python">api_key</code></a>

Optional[str]

API key to pass directly. Defaults to OPENAI_API_KEY environment variable.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.organization" title="organization = field(default=None, kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute (griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.organization)"><code class="language-python">organization</code></a>

Optional[str]

OpenAI organization. Defaults to 'OPENAI_ORGANIZATION' environment variable.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.tokenizer" title="tokenizer = field(default=Factory(lambda self: OpenAiTokenizer(model=self.model), takes_self=True), kw_only=True) class-attribute instance-attribute (griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.tokenizer)"><code class="language-python">tokenizer</code></a>

<a href="../../tokenizers#griptape.tokenizers.OpenAiTokenizer" title="OpenAiTokenizer (griptape.tokenizers.OpenAiTokenizer)"><code class="language-python">OpenAiTokenizer</code></a>

Optionally provide custom OpenAiTokenizer.<br/>

<a href="openai.mdx#griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.client" title="client() (griptape.drivers.embedding.openai.OpenAiEmbeddingDriver.client)"><code class="language-python">client</code></a>

OpenAI

Optionally provide custom openai.OpenAI client.<br/>

azure_deployment

OpenAI

An Azure OpenAi deployment id.<br/>

azure_endpoint

OpenAI

An Azure OpenAi endpoint.<br/>

azure_ad_token

OpenAI

An optional Azure Active Directory token.<br/>

azure_ad_token_provider

OpenAI

An optional Azure Active Directory token provider.<br/>

api_version

OpenAI

An Azure OpenAi API version.<br/>

Source Code in griptape/drivers/embedding/openai_embedding_driver.py

@define
class OpenAiEmbeddingDriver(BaseEmbeddingDriver):
    """OpenAI Embedding Driver.

    Attributes:
        model: OpenAI embedding model name. Defaults to `text-embedding-3-small`.
        base_url: API URL. Defaults to OpenAIs v1 API URL.
        api_key: API key to pass directly. Defaults to `OPENAI_API_KEY` environment variable.
        organization: OpenAI organization. Defaults to OPENAI_ORGANIZATION environment variable.
        tokenizer: Optionally provide custom `OpenAiTokenizer`.
        client: Optionally provide custom `openai.OpenAI` client.
        azure_deployment: An Azure OpenAi deployment id.
        azure_endpoint: An Azure OpenAi endpoint.
        azure_ad_token: An optional Azure Active Directory token.
        azure_ad_token_provider: An optional Azure Active Directory token provider.
        api_version: An Azure OpenAi API version.
    """

    DEFAULT_MODEL = "text-embedding-3-small"

    model: str = field(default=DEFAULT_MODEL, kw_only=True, metadata={"serializable": True})
    base_url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True})
    api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False})
    organization: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True})
    tokenizer: OpenAiTokenizer = field(
        default=Factory(lambda self: OpenAiTokenizer(model=self.model), takes_self=True),
        kw_only=True,
    )
    _client: Optional[openai.OpenAI] = field(
        default=None, kw_only=True, alias="client", metadata={"serializable": False}
    )

    @lazy_property()
    def client(self) -> openai.OpenAI:
        return openai.OpenAI(api_key=self.api_key, base_url=self.base_url, organization=self.organization)

    def try_embed_chunk(self, chunk: str, **kwargs) -> list[float]:
        # Address a performance issue in older ada models
        # https://github.com/openai/openai-python/issues/418#issuecomment-1525939500
        if self.model.endswith("001"):
            chunk = chunk.replace("\n", " ")
        return self.client.embeddings.create(**self._params(chunk)).data[0].embedding

    def _params(self, chunk: str) -> dict:
        return {"input": chunk, "model": self.model}
  • DEFAULT_MODEL = 'text-embedding-3-small' class-attribute instance-attribute

  • _client = field(default=None, kw_only=True, alias='client', metadata={'serializable': False}) class-attribute instance-attribute

  • api_key = field(default=None, kw_only=True, metadata={'serializable': False}) class-attribute instance-attribute

  • base_url = field(default=None, kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute

  • model = field(default=DEFAULT_MODEL, kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute

  • organization = field(default=None, kw_only=True, metadata={'serializable': True}) class-attribute instance-attribute

  • tokenizer = field(default=Factory(lambda self: OpenAiTokenizer(model=self.model), takes_self=True), kw_only=True) class-attribute instance-attribute

_params(chunk)#

Source Code in griptape/drivers/embedding/openai_embedding_driver.py

def _params(self, chunk: str) -> dict:
    return {"input": chunk, "model": self.model}

client()#

Source Code in griptape/drivers/embedding/openai_embedding_driver.py

@lazy_property()
def client(self) -> openai.OpenAI:
    return openai.OpenAI(api_key=self.api_key, base_url=self.base_url, organization=self.organization)

try_embed_chunk(chunk, **kwargs)#

Source Code in griptape/drivers/embedding/openai_embedding_driver.py

def try_embed_chunk(self, chunk: str, **kwargs) -> list[float]:
    # Address a performance issue in older ada models
    # https://github.com/openai/openai-python/issues/418#issuecomment-1525939500
    if self.model.endswith("001"):
        chunk = chunk.replace("\n", " ")
    return self.client.embeddings.create(**self._params(chunk)).data[0].embedding