chroma-core/chroma

[Bug]: When using AzureOpenAI for embedding `azure_deployment` needs to be provided as well

Open

#1,770 opened on Feb 24, 2024

View on GitHub
 (3 comments) (0 reactions) (0 assignees)Rust (2,247 forks)batch import
buggood first issue

Repository metrics

Stars
 (27,958 stars)
PR merge metrics
 (Avg merge 1d 16h) (80 merged PRs in 30d)

Description

What happened?

As a chromadb user, when I use Azure Open AI, I want to be able to use my embedding funciton with collection creation but currently it does not let me specify azure_deployment so it throws DeploymentNotFound exception (see logs):

my_azure_openai_ef= embedding_functions.OpenAIEmbeddingFunction(
            api_key=OPEN_AI_API_KEY,
            model_name="text-embedding-ada-002",
            api_base="https://my_azure_open_ai_endpoint.openai.azure.com",
            api_type="azure",
            api_version="2023-05-15",
            )
`client.get_or_create_collection("my_collection", embedding_function=my_azure_openai_ef)`

In embedding_functions.py there is a code execution path that gets triggered when api_type="azure"

        self._client = openai.AzureOpenAI(
            api_key=api_key,
            api_version=api_version,
            azure_endpoint=api_base,
            default_headers=default_headers,
        ).embeddings

The issue is that it is missing azure_deployment="your_deployment_name_here" Whithout it my azure deployment cannot be reached. See attached log for more details

To test it I have this setup:

client = AzureOpenAI(
    api_key=OPEN_AI_API_KEY, 
    azure_endpoint="https://my_azure_open_ai_endpoint.openai.azure.com", 
    azure_deployment="my_azure_open_ai_deployment",
    api_version="2023-05-15")

def text_embedding(text):
    response = client.embeddings.create(model="text-embedding-ada-002", input=[text])
    return response.data[0].embedding

When I skip azure_deployment="my_azure_open_ai_deployment", my text embedding function throws not found exception. Azure Open AI endpoints need the deployment name in order for it to work.

See https://github.com/openai/openai-python?tab=readme-ov-file#microsoft-azure-openai for more details Also can you update docs to include link to api versioning in Azure: https://learn.microsoft.com/en-us/azure/ai-services/openai/reference#rest-api-versioning

Versions

ChromaDB 0.4.21, Python 3.11.5

Relevant log output

Cell In[2], line 14
     13 def text_embedding(text):
---> 14     response = client.embeddings.create(model="text-embedding-ada-002", input=[text])
     15     return response.data[0].embedding

File c:\Python\Lib\site-packages\openai\resources\embeddings.py:113, in Embeddings.create(self, input, model, dimensions, encoding_format, user, extra_headers, extra_query, extra_body, timeout)
    107         embedding.embedding = np.frombuffer(  # type: ignore[no-untyped-call]
    108             base64.b64decode(data), dtype="float32"
    109         ).tolist()
    111     return obj
--> 113 return self._post(
    114     "/embeddings",
    115     body=maybe_transform(params, embedding_create_params.EmbeddingCreateParams),
    116     options=make_request_options(
...
   (...)
    987     stream_cls=stream_cls,
    988 )


Error code: 404 - {'error': {'code': 'DeploymentNotFound', 'message': 'The API deployment for this resource does not exist. If you created the deployment within the last 5 minutes, please wait a moment and try again.'}}

Contributor guide