RAG_EMBEDDING_ENGINE=openai doesn't use OPENAI_API_BASE_URL #3327

Closed
opened 2025-11-11 15:29:11 -06:00 by GiteaMirror · 2 comments
Owner

Originally created by @btiernay on GitHub (Jan 20, 2025).

Bug Report

Installation Method

Docker:

  webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
    - "3000:8080"
    environment:
      # See https://docs.openwebui.com/getting-started/advanced-topics/env-configuration/
      WEBUI_AUTH: false
      DO_NOT_TRACK: true
      ENABLE_SIGNUP: false
      OPENAI_API_BASE_URL: "http://litellm:4000"
      OPENAI_API_KEY: "anything"
      REQUESTS_CA_BUNDLE: /etc/ssl/certs/ca-certificates.crt
      SSL_CERT_FILE: /etc/ssl/certs/ca-certificates.
      # See https://github.com/open-webui/open-webui/issues/8697
      RAG_EMBEDDING_ENGINE: "openai"
      RAG_EMBEDDING_MODEL: "bedrock/cohere.embed-english-v3"
    volumes:
    - open-webui:/app/backend/data
    - ./conf/webui/cacerts.pem:/etc/ssl/certs/ca-certificates.crt:ro
    extra_hosts:
    - "host.docker.internal:host-gateway"
    restart: always
    depends_on:
    - litellm

Environment

  • Open WebUI Version: v0.5.4 - 2024-01-05

  • Operating System: macOS Big Sequoia 15.2 (24C101)

  • Browser (if applicable): Chrome

Confirmation:

  • I have read and followed all the instructions provided in the README.md.
  • I am on the latest version of both Open WebUI and Ollama.
  • I have included the browser console logs.
  • I have included the Docker container logs.
  • I have provided the exact steps to reproduce the bug in the "Steps to Reproduce" section below.

Expected Behavior:

Uploading knowledge in the UI when OPENAI_API_BASE_URL=http://litellm:4000 is used when RAG_EMBEDDING_ENGINE=openai should use http://litellm:4000/v1/embeddings

Actual Behavior:

 401 Client Error: Unauthorized for url: https://api.openai.com/v1/embeddings

Description

Bug Summary:
[Provide a brief but clear summary of the bug]

Reproduction Details

Steps to Reproduce:

      OPENAI_API_BASE_URL: "http://litellm:4000"
      OPENAI_API_KEY: "anything"
      RAG_EMBEDDING_ENGINE: "openai" - Doesn't use OPENAI_API_BASE_URL
      RAG_EMBEDDING_MODEL: "bedrock/cohere.embed-english-v3"

Logs and Screenshots

Browser Console Logs:
[Include relevant browser console logs, if applicable]

Docker Container Logs:

webui-1                | INFO:     172.18.0.1:62156 - "GET /api/v1/knowledge/c1679ef3-89e0-4378-a005-b5ff31f65aa1 HTTP/1.1" 200 OK
webui-1                | WARNI [python_multipart.multipart] Skipping data after last boundary
webui-1                | INFO  [open_webui.routers.files] file.content_type: application/pdf
webui-1                | INFO  [open_webui.routers.retrieval] save_docs_to_vector_db: document Bell Internet Bill - November 4 - December 3 .pdf file-af2d3865-0a9b-476b-b3bd-cbd492d8896b
webui-1                | INFO  [open_webui.routers.retrieval] adding to collection file-af2d3865-0a9b-476b-b3bd-cbd492d8896b
webui-1                | ERROR [open_webui.routers.retrieval] 'NoneType' object is not iterable
webui-1                | Traceback (most recent call last):
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db
webui-1                |     embeddings = embedding_function(
webui-1                |                  ^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda>
webui-1                |     return lambda query: generate_multiple(query, func)
webui-1                |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple
webui-1                |     embeddings.extend(func(query[i : i + embedding_batch_size]))
webui-1                | TypeError: 'NoneType' object is not iterable
webui-1                | ERROR [open_webui.routers.retrieval] 'NoneType' object is not iterable
webui-1                | Traceback (most recent call last):
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 953, in process_file
webui-1                |     raise e
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 926, in process_file
webui-1                |     result = save_docs_to_vector_db(
webui-1                |              ^^^^^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 799, in save_docs_to_vector_db
webui-1                |     raise e
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db
webui-1                |     embeddings = embedding_function(
webui-1                |                  ^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda>
webui-1                |     return lambda query: generate_multiple(query, func)
webui-1                |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple
webui-1                |     embeddings.extend(func(query[i : i + embedding_batch_size]))
webui-1                | TypeError: 'NoneType' object is not iterable
webui-1                | ERROR [open_webui.routers.files] 400: 'NoneType' object is not iterable
webui-1                | Traceback (most recent call last):
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 953, in process_file
webui-1                |     raise e
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 926, in process_file
webui-1                |     result = save_docs_to_vector_db(
webui-1                |              ^^^^^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 799, in save_docs_to_vector_db
webui-1                |     raise e
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db
webui-1                |     embeddings = embedding_function(
webui-1                |                  ^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda>
webui-1                |     return lambda query: generate_multiple(query, func)
webui-1                |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple
webui-1                |     embeddings.extend(func(query[i : i + embedding_batch_size]))
webui-1                | TypeError: 'NoneType' object is not iterable
webui-1                |
webui-1                | During handling of the above exception, another exception occurred:
webui-1                |
webui-1                | Traceback (most recent call last):
webui-1                |   File "/app/backend/open_webui/routers/files.py", line 74, in upload_file
webui-1                |     process_file(request, ProcessFileForm(file_id=id))
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 962, in process_file
webui-1                |     raise HTTPException(
webui-1                | fastapi.exceptions.HTTPException: 400: 'NoneType' object is not iterable
webui-1                | ERROR [open_webui.routers.files] Error processing file: af2d3865-0a9b-476b-b3bd-cbd492d8896b
webui-1                | Collection file-af2d3865-0a9b-476b-b3bd-cbd492d8896b does not exist.
webui-1                | HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/embeddings (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1006)')))
webui-1                | INFO:     172.18.0.1:60872 - "POST /api/v1/files/ HTTP/1.1" 200 OK
webui-1                | INFO  [open_webui.routers.retrieval] save_docs_to_vector_db: document Bell Internet Bill - November 4 - December 3 .pdf c1679ef3-89e0-4378-a005-b5ff31f65aa1
webui-1                | INFO  [open_webui.routers.retrieval] adding to collection c1679ef3-89e0-4378-a005-b5ff31f65aa1
webui-1                | ERROR [open_webui.routers.retrieval] 'NoneType' object is not iterable
webui-1                | Traceback (most recent call last):
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db
webui-1                |     embeddings = embedding_function(
webui-1                |                  ^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda>
webui-1                |     return lambda query: generate_multiple(query, func)
webui-1                |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple
webui-1                |     embeddings.extend(func(query[i : i + embedding_batch_size]))
webui-1                | TypeError: 'NoneType' object is not iterable
webui-1                | ERROR [open_webui.routers.retrieval] 'NoneType' object is not iterable
webui-1                | Traceback (most recent call last):
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 953, in process_file
webui-1                |     raise e
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 926, in process_file
webui-1                |     result = save_docs_to_vector_db(
webui-1                |              ^^^^^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 799, in save_docs_to_vector_db
webui-1                |     raise e
webui-1                |   File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db
webui-1                |     embeddings = embedding_function(
webui-1                |                  ^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda>
webui-1                |     return lambda query: generate_multiple(query, func)
webui-1                |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webui-1                |   File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple
webui-1                |     embeddings.extend(func(query[i : i + embedding_batch_size]))
webui-1                | TypeError: 'NoneType' object is not iterable
webui-1                | Collection file-af2d3865-0a9b-476b-b3bd-cbd492d8896b does not exist.
webui-1                | Collection c1679ef3-89e0-4378-a005-b5ff31f65aa1 does not exist.
webui-1                | 401 Client Error: Unauthorized for url: https://api.openai.com/v1/embeddings
webui-1                | INFO:     172.18.0.1:60872 - "POST /api/v1/knowledge/c1679ef3-89e0-4378-a005-b5ff31f65aa1/file/add HTTP/1.1" 400 Bad Request
Originally created by @btiernay on GitHub (Jan 20, 2025). # Bug Report ## Installation Method Docker: ``` webui: image: ghcr.io/open-webui/open-webui:main ports: - "3000:8080" environment: # See https://docs.openwebui.com/getting-started/advanced-topics/env-configuration/ WEBUI_AUTH: false DO_NOT_TRACK: true ENABLE_SIGNUP: false OPENAI_API_BASE_URL: "http://litellm:4000" OPENAI_API_KEY: "anything" REQUESTS_CA_BUNDLE: /etc/ssl/certs/ca-certificates.crt SSL_CERT_FILE: /etc/ssl/certs/ca-certificates. # See https://github.com/open-webui/open-webui/issues/8697 RAG_EMBEDDING_ENGINE: "openai" RAG_EMBEDDING_MODEL: "bedrock/cohere.embed-english-v3" volumes: - open-webui:/app/backend/data - ./conf/webui/cacerts.pem:/etc/ssl/certs/ca-certificates.crt:ro extra_hosts: - "host.docker.internal:host-gateway" restart: always depends_on: - litellm ``` ## Environment - **Open WebUI Version:** `v0.5.4 - 2024-01-05` - **Operating System:** macOS Big Sequoia `15.2 (24C101)` - **Browser (if applicable):** Chrome **Confirmation:** - [x] I have read and followed all the instructions provided in the README.md. - [ ] I am on the latest version of both Open WebUI and Ollama. - [ ] I have included the browser console logs. - [ ] I have included the Docker container logs. - [ ] I have provided the exact steps to reproduce the bug in the "Steps to Reproduce" section below. ## Expected Behavior: Uploading knowledge in the UI when `OPENAI_API_BASE_URL=http://litellm:4000` is used when `RAG_EMBEDDING_ENGINE=openai` should use `http://litellm:4000/v1/embeddings` ## Actual Behavior: ``` 401 Client Error: Unauthorized for url: https://api.openai.com/v1/embeddings ``` ## Description **Bug Summary:** [Provide a brief but clear summary of the bug] ## Reproduction Details **Steps to Reproduce:** ```evn OPENAI_API_BASE_URL: "http://litellm:4000" OPENAI_API_KEY: "anything" RAG_EMBEDDING_ENGINE: "openai" - Doesn't use OPENAI_API_BASE_URL RAG_EMBEDDING_MODEL: "bedrock/cohere.embed-english-v3" ``` ## Logs and Screenshots **Browser Console Logs:** [Include relevant browser console logs, if applicable] **Docker Container Logs:** ``` webui-1 | INFO: 172.18.0.1:62156 - "GET /api/v1/knowledge/c1679ef3-89e0-4378-a005-b5ff31f65aa1 HTTP/1.1" 200 OK webui-1 | WARNI [python_multipart.multipart] Skipping data after last boundary webui-1 | INFO [open_webui.routers.files] file.content_type: application/pdf webui-1 | INFO [open_webui.routers.retrieval] save_docs_to_vector_db: document Bell Internet Bill - November 4 - December 3 .pdf file-af2d3865-0a9b-476b-b3bd-cbd492d8896b webui-1 | INFO [open_webui.routers.retrieval] adding to collection file-af2d3865-0a9b-476b-b3bd-cbd492d8896b webui-1 | ERROR [open_webui.routers.retrieval] 'NoneType' object is not iterable webui-1 | Traceback (most recent call last): webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db webui-1 | embeddings = embedding_function( webui-1 | ^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda> webui-1 | return lambda query: generate_multiple(query, func) webui-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple webui-1 | embeddings.extend(func(query[i : i + embedding_batch_size])) webui-1 | TypeError: 'NoneType' object is not iterable webui-1 | ERROR [open_webui.routers.retrieval] 'NoneType' object is not iterable webui-1 | Traceback (most recent call last): webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 953, in process_file webui-1 | raise e webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 926, in process_file webui-1 | result = save_docs_to_vector_db( webui-1 | ^^^^^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 799, in save_docs_to_vector_db webui-1 | raise e webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db webui-1 | embeddings = embedding_function( webui-1 | ^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda> webui-1 | return lambda query: generate_multiple(query, func) webui-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple webui-1 | embeddings.extend(func(query[i : i + embedding_batch_size])) webui-1 | TypeError: 'NoneType' object is not iterable webui-1 | ERROR [open_webui.routers.files] 400: 'NoneType' object is not iterable webui-1 | Traceback (most recent call last): webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 953, in process_file webui-1 | raise e webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 926, in process_file webui-1 | result = save_docs_to_vector_db( webui-1 | ^^^^^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 799, in save_docs_to_vector_db webui-1 | raise e webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db webui-1 | embeddings = embedding_function( webui-1 | ^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda> webui-1 | return lambda query: generate_multiple(query, func) webui-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple webui-1 | embeddings.extend(func(query[i : i + embedding_batch_size])) webui-1 | TypeError: 'NoneType' object is not iterable webui-1 | webui-1 | During handling of the above exception, another exception occurred: webui-1 | webui-1 | Traceback (most recent call last): webui-1 | File "/app/backend/open_webui/routers/files.py", line 74, in upload_file webui-1 | process_file(request, ProcessFileForm(file_id=id)) webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 962, in process_file webui-1 | raise HTTPException( webui-1 | fastapi.exceptions.HTTPException: 400: 'NoneType' object is not iterable webui-1 | ERROR [open_webui.routers.files] Error processing file: af2d3865-0a9b-476b-b3bd-cbd492d8896b webui-1 | Collection file-af2d3865-0a9b-476b-b3bd-cbd492d8896b does not exist. webui-1 | HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/embeddings (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1006)'))) webui-1 | INFO: 172.18.0.1:60872 - "POST /api/v1/files/ HTTP/1.1" 200 OK webui-1 | INFO [open_webui.routers.retrieval] save_docs_to_vector_db: document Bell Internet Bill - November 4 - December 3 .pdf c1679ef3-89e0-4378-a005-b5ff31f65aa1 webui-1 | INFO [open_webui.routers.retrieval] adding to collection c1679ef3-89e0-4378-a005-b5ff31f65aa1 webui-1 | ERROR [open_webui.routers.retrieval] 'NoneType' object is not iterable webui-1 | Traceback (most recent call last): webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db webui-1 | embeddings = embedding_function( webui-1 | ^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda> webui-1 | return lambda query: generate_multiple(query, func) webui-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple webui-1 | embeddings.extend(func(query[i : i + embedding_batch_size])) webui-1 | TypeError: 'NoneType' object is not iterable webui-1 | ERROR [open_webui.routers.retrieval] 'NoneType' object is not iterable webui-1 | Traceback (most recent call last): webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 953, in process_file webui-1 | raise e webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 926, in process_file webui-1 | result = save_docs_to_vector_db( webui-1 | ^^^^^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 799, in save_docs_to_vector_db webui-1 | raise e webui-1 | File "/app/backend/open_webui/routers/retrieval.py", line 777, in save_docs_to_vector_db webui-1 | embeddings = embedding_function( webui-1 | ^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 269, in <lambda> webui-1 | return lambda query: generate_multiple(query, func) webui-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ webui-1 | File "/app/backend/open_webui/retrieval/utils.py", line 264, in generate_multiple webui-1 | embeddings.extend(func(query[i : i + embedding_batch_size])) webui-1 | TypeError: 'NoneType' object is not iterable webui-1 | Collection file-af2d3865-0a9b-476b-b3bd-cbd492d8896b does not exist. webui-1 | Collection c1679ef3-89e0-4378-a005-b5ff31f65aa1 does not exist. webui-1 | 401 Client Error: Unauthorized for url: https://api.openai.com/v1/embeddings webui-1 | INFO: 172.18.0.1:60872 - "POST /api/v1/knowledge/c1679ef3-89e0-4378-a005-b5ff31f65aa1/file/add HTTP/1.1" 400 Bad Request ```
Author
Owner

@tjbck commented on GitHub (Jan 20, 2025):

Intended behaviour, you must set the openai api url from the settings ui.

Also, RAG_OPENAI_API_BASE_URL is a PersistantConfig, so updating as an env var won't apply after the first boot.

Related: https://docs.openwebui.com/getting-started/advanced-topics/env-configuration

@tjbck commented on GitHub (Jan 20, 2025): Intended behaviour, you must set the openai api url from the settings ui. Also, RAG_OPENAI_API_BASE_URL is a PersistantConfig, so updating as an env var won't apply after the first boot. Related: https://docs.openwebui.com/getting-started/advanced-topics/env-configuration
Author
Owner

@btiernay commented on GitHub (Jan 20, 2025):

👋 May I ask why? Certainly violates the Principle of Least Surprise .

@btiernay commented on GitHub (Jan 20, 2025): 👋 May I ask why? Certainly violates the Principle of Least Surprise .
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#3327