chroma-core/chroma

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

Ouverte

#1 770 ouverte le 24 févr. 2024

 (5 commentaires) (0 réaction) (0 personne assignée)Rust (2 247 forks)batch import
buggood first issue

Métriques du dépôt

Stars
 (27 958 étoiles)
Métriques de merge PR
 (Merge moyen 1j 16h) (80 PRs mergées en 30 j)

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.'}}

Guide contributeur