epam / ai-dial-core

The main component of AI DIAL, which provides unified API to different chat completion and embedding models, assistants, and applications
https://epam-rail.com
Apache License 2.0
55 stars 15 forks source link

Embedding API endpoint not working with langchain or OpenAI as mentioned on the EPAM DIAL API Docs #405

Open YuryZhylko opened 1 month ago

YuryZhylko commented 1 month ago

When using the code snippets for langchain and OpenAI described in the API docs here: https://epam-rail.com/dial_api#/paths/~1openai~1deployments~1%7BDeployment%20Name%7D~1embeddings/post, the code fails to execute and we get 2 distinct errors. For langchain, it throws a 500 internal server error.

Unable to find source-code formatter for language: bash. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yamlInternalServerError: Error code: 500 - {'error': {'message': '2 validation errors for EmbeddingsRequest\ninput\n str type expected (type=type_error.str)\ninput -> 0\n str type expected (type=type_error.str)', 'type': 'internal_server_error'}}

For OpenAI, it throws 422 error.

Unable to find source-code formatter for language: bash. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yamlUnprocessableEntityError: Error code: 422 - {'error': {'message': 'Base64 encoding format is not supported', 'type': 'invalid_request_error', 'code': 'invalid_argument'}}

The code does not work with semantic-router library as well. https://github.com/aurelio-labs/semantic-router It is important for the embeddings feature to work with 3rd party packages for adoption of GSL during development. If needed, break down the bug story into 3 tasks. If there are other packages the teams are using and they run into issues, similar bug stories will be raised.

Test the embedding API endpoint with different adapters to ensure it works and if possible, create a cookbook similar to the foundational models cookbook present here: https://docs.epam-rail.com/Cookbook/dial-cookbook/examples/how_to_call_text_to_text_applications/

sdryapko commented 1 month ago

Fix is in this pool request and waiting for final review which is going to happen today most probably: https://github.com/epam/ai-dial-adapter-bedrock/pull/127

And we have workaround for this issue so you may not wait for this pull request:

You can update your langchain_openai to version >=0.1.5 and call embeddings this way:

model = AzureOpenAIEmbeddings(
    openai_api_version="2023-12-01-preview",
    azure_deployment="text-embedding-ada-002",
    azure_endpoint="https://chat.<company>.com",
    api_key="DIAL_API_KEY",
+   check_embedding_ctx_length=False,
+   model_kwargs={"encoding_format": "float"}
)

2/ For OpenAI, it throws 422 error.

and for this issue you can work with this example

client = AzureOpenAI(
    api_version="2023-12-01-preview",
    azure_endpoint="https://chat.<company>.com",
    api_key="DIAL_API_KEY",
+   encoding_format="float"
)
sdryapko commented 1 month ago

Please note that this workarounds started to work from latest release. bedrock adapter >= 0.13.2