Skip to content

Commit 77f0287

Browse files
committed
remove openai api key everywhere for security reasons
1 parent 181aac9 commit 77f0287

File tree

5 files changed

+6
-32
lines changed

5 files changed

+6
-32
lines changed

src/autointent/_wrappers/embedder/openai.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import asyncio
22
import logging
3+
import os
34
from functools import partial
45
from pathlib import Path
56
from typing import Literal, TypedDict, cast, overload
@@ -48,21 +49,19 @@ def _get_client(self) -> openai.OpenAI:
4849
"""Get or create OpenAI client instance."""
4950
if self._client is None:
5051
self._client = openai.OpenAI(
51-
api_key=self.config.api_key,
5252
timeout=self.config.timeout,
5353
max_retries=self.config.max_retries,
54-
base_url=self.config.base_url,
54+
base_url=os.getenv("OPENAI_BASE_URL", None),
5555
)
5656
return self._client
5757

5858
def _get_async_client(self) -> openai.AsyncOpenAI:
5959
"""Get or create async OpenAI client instance."""
6060
if self._async_client is None:
6161
self._async_client = openai.AsyncOpenAI(
62-
api_key=self.config.api_key,
6362
timeout=self.config.timeout,
6463
max_retries=self.config.max_retries,
65-
base_url=self.config.base_url,
64+
base_url=os.getenv("OPENAI_BASE_URL", None),
6665
)
6766
return self._async_client
6867

src/autointent/configs/_embedder.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@ class OpenaiEmbeddingConfig(EmbedderConfig):
8787
"""Configuration for OpenAI based embeddings."""
8888

8989
model_name: str = Field("text-embedding-3-small", description="Name of the OpenAI embedding model.")
90-
api_key: str = Field(description="OpenAI API key. If None, will look for OPENAI_API_KEY environment variable.")
91-
base_url: str | None = Field(default=None, description="Base URL for OpenAI API calls")
9290
batch_size: int = Field(100, description="Batch size for API requests.")
9391
max_retries: int = Field(3, description="Maximum number of retries for failed API requests.")
9492
timeout: float = Field(30.0, description="Timeout for API requests in seconds.")

tests/embedder/conftest.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ def on_windows() -> bool:
2828
pytest.param(
2929
OpenaiEmbeddingConfig(
3030
model_name="text-embedding-3-small",
31-
api_key=os.getenv("OPENAI_API_KEY", "fake-key-for-testing"),
3231
batch_size=2,
3332
use_cache=False,
3433
max_retries=1,
@@ -73,7 +72,6 @@ def create_openai_config(**kwargs) -> OpenaiEmbeddingConfig:
7372
"""Helper function to create OpenAI config with defaults."""
7473
defaults = {
7574
"model_name": "text-embedding-3-small",
76-
"api_key": os.getenv("OPENAI_API_KEY", "fake-key-for-testing"),
7775
"batch_size": 2,
7876
"use_cache": False,
7977
"max_retries": 1,

tests/embedder/test_dump_load.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import os
21
import tempfile
32
from pathlib import Path
43

@@ -53,7 +52,7 @@ def test_dump_load_cycle(self, embedder: Embedder, on_windows):
5352

5453
# Test that loaded embedder works the same
5554
loaded_embeddings = embedder_loaded.embed(test_utterances)
56-
np.testing.assert_allclose(original_embeddings, loaded_embeddings, rtol=1e-5)
55+
np.testing.assert_allclose(original_embeddings, loaded_embeddings, rtol=1e-3)
5756

5857
# Test configuration preservation
5958
assert embedder_loaded.config.model_name == embedder.config.model_name
@@ -75,7 +74,7 @@ def test_load_with_config_override(self, embedder: Embedder, on_windows):
7574
# For OpenAI, we can override batch_size too
7675
from autointent.configs import OpenaiEmbeddingConfig
7776

78-
override_config = OpenaiEmbeddingConfig(batch_size=16, api_key=os.getenv("OPENAI_API_KEY"))
77+
override_config = OpenaiEmbeddingConfig(batch_size=16)
7978

8079
# Load with override
8180
embedder_loaded = Embedder.load(temp_path, override_config)
@@ -104,7 +103,7 @@ def test_similarity_preserved_after_load(self, embedder: Embedder, on_windows):
104103
loaded_similarity = embedder_loaded.similarity(loaded_embeddings[:1], loaded_embeddings[1:])
105104

106105
# Similarities should be the same
107-
np.testing.assert_allclose(original_similarity, loaded_similarity, rtol=1e-5)
106+
np.testing.assert_allclose(original_similarity, loaded_similarity, rtol=1e-3)
108107

109108
def test_multiple_dump_load_cycles(self, embedder: Embedder, on_windows):
110109
"""Test multiple dump/load cycles maintain consistency."""

tests/embedder/test_openai_backend.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ def openai_backend_config():
2020
"""Create an OpenAI backend config for testing."""
2121
return OpenaiEmbeddingConfig(
2222
model_name="text-embedding-3-small",
23-
api_key=os.getenv("OPENAI_API_KEY"),
2423
batch_size=2,
2524
use_cache=False,
2625
max_retries=1,
@@ -83,11 +82,9 @@ def test_different_models_different_hashes(self):
8382
"""Test that different models produce different hashes."""
8483
config1 = OpenaiEmbeddingConfig(
8584
model_name="text-embedding-3-small",
86-
api_key=os.getenv("OPENAI_API_KEY"),
8785
)
8886
config2 = OpenaiEmbeddingConfig(
8987
model_name="text-embedding-ada-002",
90-
api_key=os.getenv("OPENAI_API_KEY"),
9188
)
9289

9390
backend1 = OpenaiEmbeddingBackend(config1)
@@ -100,7 +97,6 @@ def test_dimensions_parameter(self):
10097
# Test with different dimensions (if supported by model)
10198
config_with_dims = OpenaiEmbeddingConfig(
10299
model_name="text-embedding-3-small",
103-
api_key=os.getenv("OPENAI_API_KEY"),
104100
dimensions=512, # Reduced dimensions
105101
use_cache=False,
106102
)
@@ -126,7 +122,6 @@ def test_async_processing_initialization(self):
126122
"""Test async processing initialization."""
127123
config = OpenaiEmbeddingConfig(
128124
model_name="text-embedding-3-small",
129-
api_key=os.getenv("OPENAI_API_KEY"),
130125
max_concurrent=2, # Enable async processing
131126
max_per_second=1.0,
132127
use_cache=False,
@@ -142,7 +137,6 @@ def test_prompts_application(self):
142137
"""Test that prompts are applied correctly."""
143138
config = OpenaiEmbeddingConfig(
144139
model_name="text-embedding-3-small",
145-
api_key=os.getenv("OPENAI_API_KEY"),
146140
query_prompt="Query:",
147141
passage_prompt="Passage:",
148142
use_cache=False,
@@ -160,20 +154,6 @@ def test_prompts_application(self):
160154
# Embeddings should be different when prompts are applied
161155
assert not np.allclose(embeddings_no_prompt, embeddings_with_prompt, rtol=1e-3)
162156

163-
def test_error_handling_invalid_api_key(self):
164-
"""Test error handling with invalid API key."""
165-
config = OpenaiEmbeddingConfig(
166-
model_name="text-embedding-3-small",
167-
api_key="invalid-key",
168-
max_retries=0, # Don't retry
169-
timeout=5.0,
170-
)
171-
172-
backend = OpenaiEmbeddingBackend(config)
173-
174-
with pytest.raises(RuntimeError, match="Error calling OpenAI API"):
175-
backend.embed(["Test sentence"])
176-
177157
def test_return_tensors_functionality(self, openai_backend: OpenaiEmbeddingBackend):
178158
"""Test return_tensors parameter."""
179159
utterances = ["Hello world", "Test sentence"]

0 commit comments

Comments
 (0)