chroma icon indicating copy to clipboard operation
chroma copied to clipboard

[Bug]: validation context fails when underlying exception has keyword-only args

Open JuliusDegesys opened this issue 1 year ago • 0 comments

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'

JuliusDegesys avatar Dec 03 '24 20:12 JuliusDegesys