chroma
chroma copied to clipboard
[Bug]: validation context fails when underlying exception has keyword-only args
What happened?
The following code throws a TypeError when validation_context tries to add context to the exception:
import chromadb
from chromadb.utils import embedding_functions
client = chromadb.HttpClient()
embedding_function = embedding_functions.OpenAIEmbeddingFunction(
api_key="This is a bad key!",
model_name="text-embedding-3-small",
)
client.delete_collection("test")
collection = client.create_collection("test", embedding_function=embedding_function)
collection.add(
documents=["Hello, world!"],
ids=["id1"],
)
Instead, it should throw an APIStatusError
Versions
Chroma version: 0.5.21 OpenAI version: 1.56.1 Python version: 3.12.7 (main, Oct 19 2024, 03:00:35) [GCC 12.2.0] Operating System: linux OS Version: #1 SMP Thu Oct 3 10:17:28 UTC 2024 OS Release: 6.10.11-linuxkit Machine Architecture: aarch64
Relevant log output
Traceback (most recent call last):
File "/app/.venv/lib/python3.12/site-packages/chromadb/api/models/CollectionCommon.py", line 90, in wrapper
return func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/chromadb/api/models/CollectionCommon.py", line 213, in _validate_and_prepare_add_request
add_embeddings = self._embed_record_set(record_set=add_records)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/chromadb/api/models/CollectionCommon.py", line 526, in _embed_record_set
return self._embed(input=record_set[field]) # type: ignore[literal-required]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/chromadb/api/models/CollectionCommon.py", line 539, in _embed
return self._embedding_function(input=input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/chromadb/api/types.py", line 466, in __call__
result = call(self, input)
^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/chromadb/utils/embedding_functions/openai_embedding_function.py", line 113, in __call__
embeddings = self._client.create(
^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/resources/embeddings.py", line 124, in create
return self._post(
^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1280, in post
return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 957, in request
return self._request(
^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1061, in _request
raise self._make_status_error_from_response(err.response) from None
openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Incorrect API key provided: This is ******key!. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/app/debug.py", line 11, in <module>
collection.add(
File "/app/.venv/lib/python3.12/site-packages/chromadb/api/models/Collection.py", line 81, in add
add_request = self._validate_and_prepare_add_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/chromadb/api/models/CollectionCommon.py", line 93, in wrapper
raise type(e)(msg).with_traceback(e.__traceback__)
^^^^^^^^^^^^
TypeError: APIStatusError.__init__() missing 2 required keyword-only arguments: 'response' and 'body'