Skip to content

Commit 46a2476

Browse files
authored
enforce embedder api keys if SDK defaults to os env var (#480)
1 parent 2bee7d0 commit 46a2476

File tree

7 files changed

+21
-27
lines changed

7 files changed

+21
-27
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.0.18
2+
3+
* **Enforce api key if SDK defaults to os env var**
4+
15
## 1.0.17
26

37
* **Support optional API keys for embedders**

unstructured_ingest/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "1.0.17" # pragma: no cover
1+
__version__ = "1.0.18" # pragma: no cover

unstructured_ingest/embed/azure_openai.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@ class AzureOpenAIEmbeddingConfig(OpenAIEmbeddingConfig):
2525
def get_client(self) -> "AzureOpenAI":
2626
from openai import AzureOpenAI
2727

28-
api_key = self.api_key.get_secret_value() if self.api_key else None
2928
return AzureOpenAI(
30-
api_key=api_key,
29+
api_key=self.api_key.get_secret_value(),
3130
api_version=self.api_version,
3231
azure_endpoint=self.azure_endpoint,
3332
)
@@ -36,9 +35,8 @@ def get_client(self) -> "AzureOpenAI":
3635
def get_async_client(self) -> "AsyncAzureOpenAI":
3736
from openai import AsyncAzureOpenAI
3837

39-
api_key = self.api_key.get_secret_value() if self.api_key else None
4038
return AsyncAzureOpenAI(
41-
api_key=api_key,
39+
api_key=self.api_key.get_secret_value(),
4240
api_version=self.api_version,
4341
azure_endpoint=self.azure_endpoint,
4442
)

unstructured_ingest/embed/octoai.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from dataclasses import dataclass
2-
from typing import TYPE_CHECKING, Optional
2+
from typing import TYPE_CHECKING
33

44
from pydantic import Field, SecretStr
55

@@ -24,7 +24,7 @@
2424

2525

2626
class OctoAiEmbeddingConfig(EmbeddingConfig):
27-
api_key: Optional[SecretStr] = Field(description="API key for OctoAI", default=None)
27+
api_key: SecretStr = Field(description="API key for OctoAI")
2828
embedder_model_name: str = Field(
2929
default="thenlper/gte-large", alias="model_name", description="octoai model name"
3030
)
@@ -77,8 +77,7 @@ def get_client(self) -> "OpenAI":
7777
"""Creates an OpenAI python client to embed elements. Uses the OpenAI SDK."""
7878
from openai import OpenAI
7979

80-
api_key = self.api_key.get_secret_value() if self.api_key else None
81-
return OpenAI(api_key=api_key, base_url=self.base_url)
80+
return OpenAI(api_key=self.api_key.get_secret_value(), base_url=self.base_url)
8281

8382
@requires_dependencies(
8483
["openai", "tiktoken"],
@@ -88,8 +87,7 @@ def get_async_client(self) -> "AsyncOpenAI":
8887
"""Creates an OpenAI python client to embed elements. Uses the OpenAI SDK."""
8988
from openai import AsyncOpenAI
9089

91-
api_key = self.api_key.get_secret_value() if self.api_key else None
92-
return AsyncOpenAI(api_key=api_key, base_url=self.base_url)
90+
return AsyncOpenAI(api_key=self.api_key.get_secret_value(), base_url=self.base_url)
9391

9492

9593
@dataclass

unstructured_ingest/embed/openai.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525

2626
class OpenAIEmbeddingConfig(EmbeddingConfig):
27-
api_key: Optional[SecretStr] = Field(description="API key for OpenAI", default=None)
27+
api_key: SecretStr = Field(description="API key for OpenAI")
2828
embedder_model_name: str = Field(
2929
default="text-embedding-ada-002", alias="model_name", description="OpenAI model name"
3030
)
@@ -88,15 +88,13 @@ def run_precheck(self) -> None:
8888
def get_client(self) -> "OpenAI":
8989
from openai import OpenAI
9090

91-
api_key = self.api_key.get_secret_value() if self.api_key else None
92-
return OpenAI(api_key=api_key, base_url=self.base_url)
91+
return OpenAI(api_key=self.api_key.get_secret_value(), base_url=self.base_url)
9392

9493
@requires_dependencies(["openai"], extras="openai")
9594
def get_async_client(self) -> "AsyncOpenAI":
9695
from openai import AsyncOpenAI
9796

98-
api_key = self.api_key.get_secret_value() if self.api_key else None
99-
return AsyncOpenAI(api_key=api_key, base_url=self.base_url)
97+
return AsyncOpenAI(api_key=self.api_key.get_secret_value(), base_url=self.base_url)
10098

10199

102100
@dataclass

unstructured_ingest/embed/togetherai.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from dataclasses import dataclass
2-
from typing import TYPE_CHECKING, Any, Optional
2+
from typing import TYPE_CHECKING, Any
33

44
from pydantic import Field, SecretStr
55

@@ -20,7 +20,7 @@
2020

2121

2222
class TogetherAIEmbeddingConfig(EmbeddingConfig):
23-
api_key: Optional[SecretStr] = Field(description="API key for Together AI", default=None)
23+
api_key: SecretStr = Field(description="API key for Together AI")
2424
embedder_model_name: str = Field(
2525
default="togethercomputer/m2-bert-80M-8k-retrieval",
2626
alias="model_name",
@@ -58,15 +58,13 @@ def run_precheck(self) -> None:
5858
def get_client(self) -> "Together":
5959
from together import Together
6060

61-
api_key = self.api_key.get_secret_value() if self.api_key else None
62-
return Together(api_key=api_key)
61+
return Together(api_key=self.api_key.get_secret_value())
6362

6463
@requires_dependencies(["together"], extras="togetherai")
6564
def get_async_client(self) -> "AsyncTogether":
6665
from together import AsyncTogether
6766

68-
api_key = self.api_key.get_secret_value() if self.api_key else None
69-
return AsyncTogether(api_key=api_key)
67+
return AsyncTogether(api_key=self.api_key.get_secret_value())
7068

7169

7270
@dataclass

unstructured_ingest/embed/voyageai.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class VoyageAIEmbeddingConfig(EmbeddingConfig):
2626
le=128,
2727
description="Batch size for embedding requests. VoyageAI has a limit of 128.",
2828
)
29-
api_key: Optional[SecretStr] = Field(description="API key for VoyageAI", default=None)
29+
api_key: SecretStr = Field(description="API key for VoyageAI")
3030
embedder_model_name: str = Field(
3131
default="voyage-3", alias="model_name", description="VoyageAI model name"
3232
)
@@ -65,9 +65,8 @@ def get_client(self) -> "VoyageAIClient":
6565
"""Creates a VoyageAI python client to embed elements."""
6666
from voyageai import Client as VoyageAIClient
6767

68-
api_key = self.api_key.get_secret_value() if self.api_key else None
6968
client = VoyageAIClient(
70-
api_key=api_key,
69+
api_key=self.api_key.get_secret_value(),
7170
max_retries=self.max_retries,
7271
timeout=self.timeout_in_seconds,
7372
)
@@ -81,9 +80,8 @@ def get_async_client(self) -> "AsyncVoyageAIClient":
8180
"""Creates a VoyageAI python client to embed elements."""
8281
from voyageai import AsyncClient as AsyncVoyageAIClient
8382

84-
api_key = self.api_key.get_secret_value() if self.api_key else None
8583
client = AsyncVoyageAIClient(
86-
api_key=api_key,
84+
api_key=self.api_key.get_secret_value(),
8785
max_retries=self.max_retries,
8886
timeout=self.timeout_in_seconds,
8987
)

0 commit comments

Comments
 (0)