[GH-ISSUE #17984] issue: Embedding and Reranker models do not work after reinstalling OpenWebUI and importing a JSON file #57123

Closed
opened 2026-05-05 20:37:06 -05:00 by GiteaMirror · 4 comments
Owner

Originally created by @Cyp9715 on GitHub (Oct 2, 2025).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/17984

Check Existing Issues

  • I have searched for any existing and/or related issues.
  • I have searched for any existing and/or related discussions.
  • I am using the latest version of Open WebUI.

Installation Method

Docker

Open WebUI Version

v0.6.32

Ollama Version (if applicable)

No response

Operating System

Ubuntu 24.04

Browser (if applicable)

Firefix 143.0.1

Confirmation

  • I have read and followed all instructions in README.md.
  • I am using 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 every relevant configuration, setting, and environment variable used in my setup.
  • I have clearly listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc).
  • I have documented step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation. My steps:
  • Start with the initial platform/version/OS and dependencies used,
  • Specify exact install/launch/configure commands,
  • List URLs visited, user input (incl. example values/emails/passwords if needed),
  • Describe all options and toggles enabled or changed,
  • Include any files or environmental changes,
  • Identify the expected and actual result at each stage,
  • Ensure any reasonably skilled user can follow and hit the same issue.

This bug can be reproduced by completely removing both OpenWebUI's volumes and images, performing a fresh installation, and then importing the configuration.

Expected Behavior

After importing a configuration JSON file through Admin Panel → Settings → Database → Import Config from JSON File, the Embedding and Re-ranker models should be automatically applied and functional without requiring additional manual intervention.

Actual Behavior

The Embedding and Re-ranker models remain non-functional after importing the JSON configuration file. They only become operational after manually navigating to Admin Panel → Documents and clicking the Save button.

Steps to Reproduce

  1. Configure an embedding model with a different dimension than the default setting (384) in OpenWebUI, then back up this configuration (Export Config to JSON File).
  2. Delete all OpenWebUI-related Docker containers, volumes, and images, then pull the image again and create a new container.
  3. Navigate to Admin Panel → Settings → Database
  4. Select Import Config from JSON File
  5. Import a configuration JSON file containing Embedding and Re-ranker model settings(Qwen3 embedding & Reranker)
  6. Attempt to use the Embedding or Reranker functionality - they will not work
  7. Navigate to Admin Panel → Documents
  8. Click the Save button
  9. The Embedding and Reranker models now function correctly

Logs & Screenshots

This log was captured after importing the JSON configuration, attaching a document in the chat, and submitting a question.

025-10-01 17:49:42.400 | INFO     | httpx._client:_send_single_request:1025 - HTTP Request: GET http://172.17.0.1:6310/collections/open-webui_files/exists "HTTP/1.1 200 OK"
2025-10-01 17:49:42.402 | INFO     | httpx._client:_send_single_request:1025 - HTTP Request: POST http://172.17.0.1:6310/collections/open-webui_files/points/query "HTTP/1.1 400 Bad Request"
2025-10-01 17:49:42.402 | ERROR    | open_webui.retrieval.utils:query_doc_with_hybrid_search:205 - Error querying doc file-acba1658-3ae6-4e22-b922-a1f17b32bb79 with hybrid search: Unexpected Response: 400 (Bad Request)
Raw response content:
b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}'
Traceback (most recent call last):

  File "/usr/local/lib/python3.11/threading.py", line 1002, in _bootstrap
    self._bootstrap_inner()
    │    └ <function Thread._bootstrap_inner at 0x7d75f2c5c9a0>
    └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
  File "/usr/local/lib/python3.11/threading.py", line 1045, in _bootstrap_inner
    self.run()
    │    └ <function Thread.run at 0x7d75f2c5c680>
    └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
  File "/usr/local/lib/python3.11/threading.py", line 982, in run
    self._target(*self._args, **self._kwargs)
    │    │        │    │        │    └ {}
    │    │        │    │        └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
    │    │        │    └ (<weakref at 0x7d71797614e0; to 'ThreadPoolExecutor' at 0x7d725846c9d0>, <_queue.SimpleQueue object at 0x7d7179f916c0>, None,...
    │    │        └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
    │    └ <function _worker at 0x7d75f1b8a480>
    └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 83, in _worker
    work_item.run()
    │         └ <function _WorkItem.run at 0x7d75f1b8a5c0>
    └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690>
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             │    │   │    │       │    └ {}
             │    │   │    │       └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690>
             │    │   │    └ ('file-acba1658-3ae6-4e22-b922-a1f17b32bb79', '분석점 통계 적용 사례')
             │    │   └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690>
             │    └ <function query_collection_with_hybrid_search.<locals>.process_query at 0x7d71b17e6d40>
             └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690>

  File "/app/backend/open_webui/retrieval/utils.py", line 372, in process_query
    result = query_doc_with_hybrid_search(
             └ <function query_doc_with_hybrid_search at 0x7d72aae8a7a0>

> File "/app/backend/open_webui/retrieval/utils.py", line 179, in query_doc_with_hybrid_search
    result = compression_retriever.invoke(query)
             │                     │      └ '분석점 통계 적용 사례'
             │                     └ <function BaseRetriever.invoke at 0x7d72ab96e840>
             └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l...

  File "/usr/local/lib/python3.11/site-packages/langchain_core/retrievers.py", line 263, in invoke
    result = self._get_relevant_documents(
             │    └ <function ContextualCompressionRetriever._get_relevant_documents at 0x7d72ab96e5c0>
             └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l...
  File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/contextual_compression.py", line 40, in _get_relevant_documents
    docs = self.base_retriever.invoke(
           │    │              └ <function EnsembleRetriever.invoke at 0x7d72ab96f4c0>
           │    └ EnsembleRetriever(retrievers=[BM25Retriever(vectorizer=<rank_bm25.BM25Okapi object at 0x7d7179ae1890>, k=65), VectorSearchRet...
           └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l...
  File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 116, in invoke
    result = self.rank_fusion(input, run_manager=run_manager, config=config)
             │    │           │                  │                   └ {'tags': [], 'metadata': {}, 'callbacks': <langchain_core.callbacks.manager.CallbackManager object at 0x7d7179af4510>, 'recur...
             │    │           │                  └ <langchain_core.callbacks.manager.CallbackManagerForRetrieverRun object at 0x7d7179af7bd0>
             │    │           └ '분석점 통계 적용 사례'
             │    └ <function EnsembleRetriever.rank_fusion at 0x7d72ab96f7e0>
             └ EnsembleRetriever(retrievers=[BM25Retriever(vectorizer=<rank_bm25.BM25Okapi object at 0x7d7179ae1890>, k=65), VectorSearchRet...
  File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 225, in rank_fusion
    retriever_docs = [
  File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 226, in <listcomp>
    retriever.invoke(
    │         └ <function BaseRetriever.invoke at 0x7d72ab96e840>
    └ VectorSearchRetriever(collection_name='file-acba1658-3ae6-4e22-b922-a1f17b32bb79', embedding_function=<function chat_completi...
  File "/usr/local/lib/python3.11/site-packages/langchain_core/retrievers.py", line 263, in invoke
    result = self._get_relevant_documents(
             │    └ <function VectorSearchRetriever._get_relevant_documents at 0x7d72aae8a020>
             └ VectorSearchRetriever(collection_name='file-acba1658-3ae6-4e22-b922-a1f17b32bb79', embedding_function=<function chat_completi...

  File "/app/backend/open_webui/retrieval/utils.py", line 63, in _get_relevant_documents
    result = VECTOR_DB_CLIENT.search(
             │                └ <function QdrantClient.search at 0x7d72aea63ec0>
             └ <open_webui.retrieval.vector.dbs.qdrant_multitenancy.QdrantClient object at 0x7d72b02fb450>

  File "/app/backend/open_webui/retrieval/vector/dbs/qdrant_multitenancy.py", line 272, in search
    query_response = self.client.query_points(
                     │    │      └ <function QdrantClient.query_points at 0x7d72aea614e0>
                     │    └ <qdrant_client.qdrant_client.QdrantClient object at 0x7d72b050d990>
                     └ <open_webui.retrieval.vector.dbs.qdrant_multitenancy.QdrantClient object at 0x7d72b02fb450>

  File "/usr/local/lib/python3.11/site-packages/qdrant_client/qdrant_client.py", line 593, in query_points
    return self._client.query_points(
           │    │       └ <function QdrantRemote.query_points at 0x7d72ae9a2840>
           │    └ <qdrant_client.qdrant_remote.QdrantRemote object at 0x7d72ae8a1950>
           └ <qdrant_client.qdrant_client.QdrantClient object at 0x7d72b050d990>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/qdrant_remote.py", line 673, in query_points
    query_result = self.http.search_api.query_points(
                   │    └ <property object at 0x7d72aea16a70>
                   └ <qdrant_client.qdrant_remote.QdrantRemote object at 0x7d72ae8a1950>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api/search_api.py", line 783, in query_points
    return self._build_for_query_points(
           │    └ <function _SearchApi._build_for_query_points at 0x7d72af2f51c0>
           └ <qdrant_client.http.api.search_api.SyncSearchApi object at 0x7d72ae8a2750>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api/search_api.py", line 181, in _build_for_query_points
    return self.api_client.request(
           │    │          └ <function ApiClient.request at 0x7d72af072b60>
           │    └ <qdrant_client.http.api_client.ApiClient object at 0x7d72ae8a3190>
           └ <qdrant_client.http.api.search_api.SyncSearchApi object at 0x7d72ae8a2750>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 95, in request
    return self.send(request, type_)
           │    │    │        └ <class 'qdrant_client.http.models.models.InlineResponse20022'>
           │    │    └ <Request('POST', 'http://172.17.0.1:6310/collections/open-webui_files/points/query')>
           │    └ <function ApiClient.send at 0x7d72af072e80>
           └ <qdrant_client.http.api_client.ApiClient object at 0x7d72ae8a3190>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 130, in send
    raise UnexpectedResponse.for_response(response)
          │                  │            └ <Response [400 Bad Request]>
          │                  └ <staticmethod(<function UnexpectedResponse.for_response at 0x7d72af072520>)>
          └ <class 'qdrant_client.http.exceptions.UnexpectedResponse'>

qdrant_client.http.exceptions.UnexpectedResponse: Unexpected Response: 400 (Bad Request)
Raw response content:
b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}'
2025-10-01 17:49:42.404 | ERROR    | open_webui.retrieval.utils:process_query:385 - Error when querying the collection with hybrid_search: Unexpected Response: 400 (Bad Request)
Raw response content:
b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}'
Traceback (most recent call last):

  File "/usr/local/lib/python3.11/threading.py", line 1002, in _bootstrap
    self._bootstrap_inner()
    │    └ <function Thread._bootstrap_inner at 0x7d75f2c5c9a0>
    └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
  File "/usr/local/lib/python3.11/threading.py", line 1045, in _bootstrap_inner
    self.run()
    │    └ <function Thread.run at 0x7d75f2c5c680>
    └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
  File "/usr/local/lib/python3.11/threading.py", line 982, in run
    self._target(*self._args, **self._kwargs)
    │    │        │    │        │    └ {}
    │    │        │    │        └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
    │    │        │    └ (<weakref at 0x7d71797614e0; to 'ThreadPoolExecutor' at 0x7d725846c9d0>, <_queue.SimpleQueue object at 0x7d7179f916c0>, None,...
    │    │        └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
    │    └ <function _worker at 0x7d75f1b8a480>
    └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)>
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 83, in _worker
    work_item.run()
    │         └ <function _WorkItem.run at 0x7d75f1b8a5c0>
    └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690>
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             │    │   │    │       │    └ {}
             │    │   │    │       └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690>
             │    │   │    └ ('file-acba1658-3ae6-4e22-b922-a1f17b32bb79', '분석점 통계 적용 사례')
             │    │   └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690>
             │    └ <function query_collection_with_hybrid_search.<locals>.process_query at 0x7d71b17e6d40>
             └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690>

> File "/app/backend/open_webui/retrieval/utils.py", line 372, in process_query
    result = query_doc_with_hybrid_search(
             └ <function query_doc_with_hybrid_search at 0x7d72aae8a7a0>

  File "/app/backend/open_webui/retrieval/utils.py", line 206, in query_doc_with_hybrid_search
    raise e

  File "/app/backend/open_webui/retrieval/utils.py", line 179, in query_doc_with_hybrid_search
    result = compression_retriever.invoke(query)
             │                     │      └ '분석점 통계 적용 사례'
             │                     └ <function BaseRetriever.invoke at 0x7d72ab96e840>
             └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l...

  File "/usr/local/lib/python3.11/site-packages/langchain_core/retrievers.py", line 263, in invoke
    result = self._get_relevant_documents(
             │    └ <function ContextualCompressionRetriever._get_relevant_documents at 0x7d72ab96e5c0>
             └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l...
  File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/contextual_compression.py", line 40, in _get_relevant_documents
    docs = self.base_retriever.invoke(
           │    │              └ <function EnsembleRetriever.invoke at 0x7d72ab96f4c0>
           │    └ EnsembleRetriever(retrievers=[BM25Retriever(vectorizer=<rank_bm25.BM25Okapi object at 0x7d7179ae1890>, k=65), VectorSearchRet...
           └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l...
  File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 116, in invoke
    result = self.rank_fusion(input, run_manager=run_manager, config=config)
             │    │           │                  │                   └ {'tags': [], 'metadata': {}, 'callbacks': <langchain_core.callbacks.manager.CallbackManager object at 0x7d7179af4510>, 'recur...
             │    │           │                  └ <langchain_core.callbacks.manager.CallbackManagerForRetrieverRun object at 0x7d7179af7bd0>
             │    │           └ '분석점 통계 적용 사례'
             │    └ <function EnsembleRetriever.rank_fusion at 0x7d72ab96f7e0>
             └ EnsembleRetriever(retrievers=[BM25Retriever(vectorizer=<rank_bm25.BM25Okapi object at 0x7d7179ae1890>, k=65), VectorSearchRet...
  File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 225, in rank_fusion
    retriever_docs = [
  File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 226, in <listcomp>
    retriever.invoke(
    │         └ <function BaseRetriever.invoke at 0x7d72ab96e840>
    └ VectorSearchRetriever(collection_name='file-acba1658-3ae6-4e22-b922-a1f17b32bb79', embedding_function=<function chat_completi...
  File "/usr/local/lib/python3.11/site-packages/langchain_core/retrievers.py", line 263, in invoke
    result = self._get_relevant_documents(
             │    └ <function VectorSearchRetriever._get_relevant_documents at 0x7d72aae8a020>
             └ VectorSearchRetriever(collection_name='file-acba1658-3ae6-4e22-b922-a1f17b32bb79', embedding_function=<function chat_completi...

  File "/app/backend/open_webui/retrieval/utils.py", line 63, in _get_relevant_documents
    result = VECTOR_DB_CLIENT.search(
             │                └ <function QdrantClient.search at 0x7d72aea63ec0>
             └ <open_webui.retrieval.vector.dbs.qdrant_multitenancy.QdrantClient object at 0x7d72b02fb450>

  File "/app/backend/open_webui/retrieval/vector/dbs/qdrant_multitenancy.py", line 272, in search
    query_response = self.client.query_points(
                     │    │      └ <function QdrantClient.query_points at 0x7d72aea614e0>
                     │    └ <qdrant_client.qdrant_client.QdrantClient object at 0x7d72b050d990>
                     └ <open_webui.retrieval.vector.dbs.qdrant_multitenancy.QdrantClient object at 0x7d72b02fb450>

  File "/usr/local/lib/python3.11/site-packages/qdrant_client/qdrant_client.py", line 593, in query_points
    return self._client.query_points(
           │    │       └ <function QdrantRemote.query_points at 0x7d72ae9a2840>
           │    └ <qdrant_client.qdrant_remote.QdrantRemote object at 0x7d72ae8a1950>
           └ <qdrant_client.qdrant_client.QdrantClient object at 0x7d72b050d990>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/qdrant_remote.py", line 673, in query_points
    query_result = self.http.search_api.query_points(
                   │    └ <property object at 0x7d72aea16a70>
                   └ <qdrant_client.qdrant_remote.QdrantRemote object at 0x7d72ae8a1950>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api/search_api.py", line 783, in query_points
    return self._build_for_query_points(
           │    └ <function _SearchApi._build_for_query_points at 0x7d72af2f51c0>
           └ <qdrant_client.http.api.search_api.SyncSearchApi object at 0x7d72ae8a2750>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api/search_api.py", line 181, in _build_for_query_points
    return self.api_client.request(
           │    │          └ <function ApiClient.request at 0x7d72af072b60>
           │    └ <qdrant_client.http.api_client.ApiClient object at 0x7d72ae8a3190>
           └ <qdrant_client.http.api.search_api.SyncSearchApi object at 0x7d72ae8a2750>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 95, in request
    return self.send(request, type_)
           │    │    │        └ <class 'qdrant_client.http.models.models.InlineResponse20022'>
           │    │    └ <Request('POST', 'http://172.17.0.1:6310/collections/open-webui_files/points/query')>
           │    └ <function ApiClient.send at 0x7d72af072e80>
           └ <qdrant_client.http.api_client.ApiClient object at 0x7d72ae8a3190>
  File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 130, in send
    raise UnexpectedResponse.for_response(response)
          │                  │            └ <Response [400 Bad Request]>
          │                  └ <staticmethod(<function UnexpectedResponse.for_response at 0x7d72af072520>)>
          └ <class 'qdrant_client.http.exceptions.UnexpectedResponse'>

qdrant_client.http.exceptions.UnexpectedResponse: Unexpected Response: 400 (Bad Request)
Raw response content:
b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}'
2025-10-01 17:49:42.406 | INFO     | httpx._client:_send_single_request:1025 - HTTP Request: GET http://172.17.0.1:6310/collections/open-webui_files/exists "HTTP/1.1 200 OK"

Additional Information

The following error message is notable in the logs:

b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}'

This is not an issue with the actual vector DB itself, but rather a bug caused by OpenWebUI loading the default embedding model because the Save button was not clicked despite importing the configuration.(resulting in mismatched vector dimensions, as the existing vector DB contains 1024-dimensional vectors)
Clicking the Save button applies the correctly imported vector model, which resolves the error and restores normal functionality.

At first glance, this may not seem like a bug, but when importing saved configuration each time OpenWebUI is installed, users would reasonably expect all functionality to work normally. In fact, visiting the Documents page confirms that the configuration values are properly registered.

However, since these settings are not actually applied unless the Save button is clicked on the Documents page, this creates a confusing user experience and represents a clear bug, which is why I am raising this issue.

Originally created by @Cyp9715 on GitHub (Oct 2, 2025). Original GitHub issue: https://github.com/open-webui/open-webui/issues/17984 ### Check Existing Issues - [x] I have searched for any existing and/or related issues. - [x] I have searched for any existing and/or related discussions. - [x] I am using the latest version of Open WebUI. ### Installation Method Docker ### Open WebUI Version v0.6.32 ### Ollama Version (if applicable) _No response_ ### Operating System Ubuntu 24.04 ### Browser (if applicable) Firefix 143.0.1 ### Confirmation - [x] I have read and followed all instructions in `README.md`. - [x] I am using the latest version of **both** Open WebUI and Ollama. - [x] I have included the browser console logs. - [x] I have included the Docker container logs. - [x] I have **provided every relevant configuration, setting, and environment variable used in my setup.** - [x] I have clearly **listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup** (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc). - [x] I have documented **step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation**. My steps: - Start with the initial platform/version/OS and dependencies used, - Specify exact install/launch/configure commands, - List URLs visited, user input (incl. example values/emails/passwords if needed), - Describe all options and toggles enabled or changed, - Include any files or environmental changes, - Identify the expected and actual result at each stage, - Ensure any reasonably skilled user can follow and hit the same issue. This bug can be reproduced by completely removing both OpenWebUI's volumes and images, performing a fresh installation, and then importing the configuration. ### Expected Behavior After importing a configuration JSON file through `Admin Panel → Settings → Database → Import Config from JSON File`, the Embedding and Re-ranker models should be automatically applied and functional without requiring additional manual intervention. ### Actual Behavior The Embedding and Re-ranker models remain non-functional after importing the JSON configuration file. They only become operational after manually navigating to `Admin Panel → Documents` and clicking the Save button. ### Steps to Reproduce 1. Configure an embedding model with a different dimension than the default setting (384) in OpenWebUI, then back up this configuration (`Export Config to JSON File`). 2. Delete all OpenWebUI-related Docker containers, volumes, and images, then pull the image again and create a new container. 3. Navigate to `Admin Panel → Settings → Database` 4. Select `Import Config from JSON File` 5. Import a configuration JSON file containing Embedding and Re-ranker model settings(Qwen3 embedding & Reranker) 6. Attempt to use the Embedding or Reranker functionality - they will not work 7. Navigate to `Admin Panel → Documents` 8. Click the Save button 9. The Embedding and Reranker models now function correctly ### Logs & Screenshots This log was captured after importing the JSON configuration, attaching a document in the chat, and submitting a question. ``` 025-10-01 17:49:42.400 | INFO | httpx._client:_send_single_request:1025 - HTTP Request: GET http://172.17.0.1:6310/collections/open-webui_files/exists "HTTP/1.1 200 OK" 2025-10-01 17:49:42.402 | INFO | httpx._client:_send_single_request:1025 - HTTP Request: POST http://172.17.0.1:6310/collections/open-webui_files/points/query "HTTP/1.1 400 Bad Request" 2025-10-01 17:49:42.402 | ERROR | open_webui.retrieval.utils:query_doc_with_hybrid_search:205 - Error querying doc file-acba1658-3ae6-4e22-b922-a1f17b32bb79 with hybrid search: Unexpected Response: 400 (Bad Request) Raw response content: b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}' Traceback (most recent call last): File "/usr/local/lib/python3.11/threading.py", line 1002, in _bootstrap self._bootstrap_inner() │ └ <function Thread._bootstrap_inner at 0x7d75f2c5c9a0> └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> File "/usr/local/lib/python3.11/threading.py", line 1045, in _bootstrap_inner self.run() │ └ <function Thread.run at 0x7d75f2c5c680> └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> File "/usr/local/lib/python3.11/threading.py", line 982, in run self._target(*self._args, **self._kwargs) │ │ │ │ │ └ {} │ │ │ │ └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> │ │ │ └ (<weakref at 0x7d71797614e0; to 'ThreadPoolExecutor' at 0x7d725846c9d0>, <_queue.SimpleQueue object at 0x7d7179f916c0>, None,... │ │ └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> │ └ <function _worker at 0x7d75f1b8a480> └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 83, in _worker work_item.run() │ └ <function _WorkItem.run at 0x7d75f1b8a5c0> └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690> File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) │ │ │ │ │ └ {} │ │ │ │ └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690> │ │ │ └ ('file-acba1658-3ae6-4e22-b922-a1f17b32bb79', '분석점 통계 적용 사례') │ │ └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690> │ └ <function query_collection_with_hybrid_search.<locals>.process_query at 0x7d71b17e6d40> └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690> File "/app/backend/open_webui/retrieval/utils.py", line 372, in process_query result = query_doc_with_hybrid_search( └ <function query_doc_with_hybrid_search at 0x7d72aae8a7a0> > File "/app/backend/open_webui/retrieval/utils.py", line 179, in query_doc_with_hybrid_search result = compression_retriever.invoke(query) │ │ └ '분석점 통계 적용 사례' │ └ <function BaseRetriever.invoke at 0x7d72ab96e840> └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l... File "/usr/local/lib/python3.11/site-packages/langchain_core/retrievers.py", line 263, in invoke result = self._get_relevant_documents( │ └ <function ContextualCompressionRetriever._get_relevant_documents at 0x7d72ab96e5c0> └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l... File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/contextual_compression.py", line 40, in _get_relevant_documents docs = self.base_retriever.invoke( │ │ └ <function EnsembleRetriever.invoke at 0x7d72ab96f4c0> │ └ EnsembleRetriever(retrievers=[BM25Retriever(vectorizer=<rank_bm25.BM25Okapi object at 0x7d7179ae1890>, k=65), VectorSearchRet... └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l... File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 116, in invoke result = self.rank_fusion(input, run_manager=run_manager, config=config) │ │ │ │ └ {'tags': [], 'metadata': {}, 'callbacks': <langchain_core.callbacks.manager.CallbackManager object at 0x7d7179af4510>, 'recur... │ │ │ └ <langchain_core.callbacks.manager.CallbackManagerForRetrieverRun object at 0x7d7179af7bd0> │ │ └ '분석점 통계 적용 사례' │ └ <function EnsembleRetriever.rank_fusion at 0x7d72ab96f7e0> └ EnsembleRetriever(retrievers=[BM25Retriever(vectorizer=<rank_bm25.BM25Okapi object at 0x7d7179ae1890>, k=65), VectorSearchRet... File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 225, in rank_fusion retriever_docs = [ File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 226, in <listcomp> retriever.invoke( │ └ <function BaseRetriever.invoke at 0x7d72ab96e840> └ VectorSearchRetriever(collection_name='file-acba1658-3ae6-4e22-b922-a1f17b32bb79', embedding_function=<function chat_completi... File "/usr/local/lib/python3.11/site-packages/langchain_core/retrievers.py", line 263, in invoke result = self._get_relevant_documents( │ └ <function VectorSearchRetriever._get_relevant_documents at 0x7d72aae8a020> └ VectorSearchRetriever(collection_name='file-acba1658-3ae6-4e22-b922-a1f17b32bb79', embedding_function=<function chat_completi... File "/app/backend/open_webui/retrieval/utils.py", line 63, in _get_relevant_documents result = VECTOR_DB_CLIENT.search( │ └ <function QdrantClient.search at 0x7d72aea63ec0> └ <open_webui.retrieval.vector.dbs.qdrant_multitenancy.QdrantClient object at 0x7d72b02fb450> File "/app/backend/open_webui/retrieval/vector/dbs/qdrant_multitenancy.py", line 272, in search query_response = self.client.query_points( │ │ └ <function QdrantClient.query_points at 0x7d72aea614e0> │ └ <qdrant_client.qdrant_client.QdrantClient object at 0x7d72b050d990> └ <open_webui.retrieval.vector.dbs.qdrant_multitenancy.QdrantClient object at 0x7d72b02fb450> File "/usr/local/lib/python3.11/site-packages/qdrant_client/qdrant_client.py", line 593, in query_points return self._client.query_points( │ │ └ <function QdrantRemote.query_points at 0x7d72ae9a2840> │ └ <qdrant_client.qdrant_remote.QdrantRemote object at 0x7d72ae8a1950> └ <qdrant_client.qdrant_client.QdrantClient object at 0x7d72b050d990> File "/usr/local/lib/python3.11/site-packages/qdrant_client/qdrant_remote.py", line 673, in query_points query_result = self.http.search_api.query_points( │ └ <property object at 0x7d72aea16a70> └ <qdrant_client.qdrant_remote.QdrantRemote object at 0x7d72ae8a1950> File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api/search_api.py", line 783, in query_points return self._build_for_query_points( │ └ <function _SearchApi._build_for_query_points at 0x7d72af2f51c0> └ <qdrant_client.http.api.search_api.SyncSearchApi object at 0x7d72ae8a2750> File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api/search_api.py", line 181, in _build_for_query_points return self.api_client.request( │ │ └ <function ApiClient.request at 0x7d72af072b60> │ └ <qdrant_client.http.api_client.ApiClient object at 0x7d72ae8a3190> └ <qdrant_client.http.api.search_api.SyncSearchApi object at 0x7d72ae8a2750> File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 95, in request return self.send(request, type_) │ │ │ └ <class 'qdrant_client.http.models.models.InlineResponse20022'> │ │ └ <Request('POST', 'http://172.17.0.1:6310/collections/open-webui_files/points/query')> │ └ <function ApiClient.send at 0x7d72af072e80> └ <qdrant_client.http.api_client.ApiClient object at 0x7d72ae8a3190> File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 130, in send raise UnexpectedResponse.for_response(response) │ │ └ <Response [400 Bad Request]> │ └ <staticmethod(<function UnexpectedResponse.for_response at 0x7d72af072520>)> └ <class 'qdrant_client.http.exceptions.UnexpectedResponse'> qdrant_client.http.exceptions.UnexpectedResponse: Unexpected Response: 400 (Bad Request) Raw response content: b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}' 2025-10-01 17:49:42.404 | ERROR | open_webui.retrieval.utils:process_query:385 - Error when querying the collection with hybrid_search: Unexpected Response: 400 (Bad Request) Raw response content: b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}' Traceback (most recent call last): File "/usr/local/lib/python3.11/threading.py", line 1002, in _bootstrap self._bootstrap_inner() │ └ <function Thread._bootstrap_inner at 0x7d75f2c5c9a0> └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> File "/usr/local/lib/python3.11/threading.py", line 1045, in _bootstrap_inner self.run() │ └ <function Thread.run at 0x7d75f2c5c680> └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> File "/usr/local/lib/python3.11/threading.py", line 982, in run self._target(*self._args, **self._kwargs) │ │ │ │ │ └ {} │ │ │ │ └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> │ │ │ └ (<weakref at 0x7d71797614e0; to 'ThreadPoolExecutor' at 0x7d725846c9d0>, <_queue.SimpleQueue object at 0x7d7179f916c0>, None,... │ │ └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> │ └ <function _worker at 0x7d75f1b8a480> └ <Thread(ThreadPoolExecutor-15_2, started 137926309095104)> File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 83, in _worker work_item.run() │ └ <function _WorkItem.run at 0x7d75f1b8a5c0> └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690> File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) │ │ │ │ │ └ {} │ │ │ │ └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690> │ │ │ └ ('file-acba1658-3ae6-4e22-b922-a1f17b32bb79', '분석점 통계 적용 사례') │ │ └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690> │ └ <function query_collection_with_hybrid_search.<locals>.process_query at 0x7d71b17e6d40> └ <concurrent.futures.thread._WorkItem object at 0x7d7179e7e690> > File "/app/backend/open_webui/retrieval/utils.py", line 372, in process_query result = query_doc_with_hybrid_search( └ <function query_doc_with_hybrid_search at 0x7d72aae8a7a0> File "/app/backend/open_webui/retrieval/utils.py", line 206, in query_doc_with_hybrid_search raise e File "/app/backend/open_webui/retrieval/utils.py", line 179, in query_doc_with_hybrid_search result = compression_retriever.invoke(query) │ │ └ '분석점 통계 적용 사례' │ └ <function BaseRetriever.invoke at 0x7d72ab96e840> └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l... File "/usr/local/lib/python3.11/site-packages/langchain_core/retrievers.py", line 263, in invoke result = self._get_relevant_documents( │ └ <function ContextualCompressionRetriever._get_relevant_documents at 0x7d72ab96e5c0> └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l... File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/contextual_compression.py", line 40, in _get_relevant_documents docs = self.base_retriever.invoke( │ │ └ <function EnsembleRetriever.invoke at 0x7d72ab96f4c0> │ └ EnsembleRetriever(retrievers=[BM25Retriever(vectorizer=<rank_bm25.BM25Okapi object at 0x7d7179ae1890>, k=65), VectorSearchRet... └ ContextualCompressionRetriever(base_compressor=RerankCompressor(embedding_function=<function chat_completion_files_handler.<l... File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 116, in invoke result = self.rank_fusion(input, run_manager=run_manager, config=config) │ │ │ │ └ {'tags': [], 'metadata': {}, 'callbacks': <langchain_core.callbacks.manager.CallbackManager object at 0x7d7179af4510>, 'recur... │ │ │ └ <langchain_core.callbacks.manager.CallbackManagerForRetrieverRun object at 0x7d7179af7bd0> │ │ └ '분석점 통계 적용 사례' │ └ <function EnsembleRetriever.rank_fusion at 0x7d72ab96f7e0> └ EnsembleRetriever(retrievers=[BM25Retriever(vectorizer=<rank_bm25.BM25Okapi object at 0x7d7179ae1890>, k=65), VectorSearchRet... File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 225, in rank_fusion retriever_docs = [ File "/usr/local/lib/python3.11/site-packages/langchain/retrievers/ensemble.py", line 226, in <listcomp> retriever.invoke( │ └ <function BaseRetriever.invoke at 0x7d72ab96e840> └ VectorSearchRetriever(collection_name='file-acba1658-3ae6-4e22-b922-a1f17b32bb79', embedding_function=<function chat_completi... File "/usr/local/lib/python3.11/site-packages/langchain_core/retrievers.py", line 263, in invoke result = self._get_relevant_documents( │ └ <function VectorSearchRetriever._get_relevant_documents at 0x7d72aae8a020> └ VectorSearchRetriever(collection_name='file-acba1658-3ae6-4e22-b922-a1f17b32bb79', embedding_function=<function chat_completi... File "/app/backend/open_webui/retrieval/utils.py", line 63, in _get_relevant_documents result = VECTOR_DB_CLIENT.search( │ └ <function QdrantClient.search at 0x7d72aea63ec0> └ <open_webui.retrieval.vector.dbs.qdrant_multitenancy.QdrantClient object at 0x7d72b02fb450> File "/app/backend/open_webui/retrieval/vector/dbs/qdrant_multitenancy.py", line 272, in search query_response = self.client.query_points( │ │ └ <function QdrantClient.query_points at 0x7d72aea614e0> │ └ <qdrant_client.qdrant_client.QdrantClient object at 0x7d72b050d990> └ <open_webui.retrieval.vector.dbs.qdrant_multitenancy.QdrantClient object at 0x7d72b02fb450> File "/usr/local/lib/python3.11/site-packages/qdrant_client/qdrant_client.py", line 593, in query_points return self._client.query_points( │ │ └ <function QdrantRemote.query_points at 0x7d72ae9a2840> │ └ <qdrant_client.qdrant_remote.QdrantRemote object at 0x7d72ae8a1950> └ <qdrant_client.qdrant_client.QdrantClient object at 0x7d72b050d990> File "/usr/local/lib/python3.11/site-packages/qdrant_client/qdrant_remote.py", line 673, in query_points query_result = self.http.search_api.query_points( │ └ <property object at 0x7d72aea16a70> └ <qdrant_client.qdrant_remote.QdrantRemote object at 0x7d72ae8a1950> File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api/search_api.py", line 783, in query_points return self._build_for_query_points( │ └ <function _SearchApi._build_for_query_points at 0x7d72af2f51c0> └ <qdrant_client.http.api.search_api.SyncSearchApi object at 0x7d72ae8a2750> File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api/search_api.py", line 181, in _build_for_query_points return self.api_client.request( │ │ └ <function ApiClient.request at 0x7d72af072b60> │ └ <qdrant_client.http.api_client.ApiClient object at 0x7d72ae8a3190> └ <qdrant_client.http.api.search_api.SyncSearchApi object at 0x7d72ae8a2750> File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 95, in request return self.send(request, type_) │ │ │ └ <class 'qdrant_client.http.models.models.InlineResponse20022'> │ │ └ <Request('POST', 'http://172.17.0.1:6310/collections/open-webui_files/points/query')> │ └ <function ApiClient.send at 0x7d72af072e80> └ <qdrant_client.http.api_client.ApiClient object at 0x7d72ae8a3190> File "/usr/local/lib/python3.11/site-packages/qdrant_client/http/api_client.py", line 130, in send raise UnexpectedResponse.for_response(response) │ │ └ <Response [400 Bad Request]> │ └ <staticmethod(<function UnexpectedResponse.for_response at 0x7d72af072520>)> └ <class 'qdrant_client.http.exceptions.UnexpectedResponse'> qdrant_client.http.exceptions.UnexpectedResponse: Unexpected Response: 400 (Bad Request) Raw response content: b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}' 2025-10-01 17:49:42.406 | INFO | httpx._client:_send_single_request:1025 - HTTP Request: GET http://172.17.0.1:6310/collections/open-webui_files/exists "HTTP/1.1 200 OK" ``` ### Additional Information The following error message is notable in the logs: `b'{"status":{"error":"Wrong input: Vector dimension error: expected dim: 1024, got 384"},"time":0.000194736}'` This is not an issue with the actual vector DB itself, but rather a bug caused by OpenWebUI loading the default embedding model because the Save button was not clicked despite importing the configuration.(resulting in mismatched vector dimensions, as the existing vector DB contains 1024-dimensional vectors) Clicking the Save button applies the correctly imported vector model, which resolves the error and restores normal functionality. At first glance, this may not seem like a bug, but when importing saved configuration each time OpenWebUI is installed, users would reasonably expect all functionality to work normally. In fact, visiting the Documents page confirms that the configuration values are properly registered. However, since these settings are not actually applied unless the Save button is clicked on the Documents page, this creates a confusing user experience and represents a clear bug, which is why I am raising this issue.
GiteaMirror added the bug label 2026-05-05 20:37:06 -05:00
Author
Owner

@fishfree commented on GitHub (Oct 28, 2025):

@Cyp9715 Would you pls share your configiruations screenshot? Mine is below:

Image

But it doesn't work, always "no sources found".

<!-- gh-comment-id:3454944580 --> @fishfree commented on GitHub (Oct 28, 2025): @Cyp9715 Would you pls share your configiruations screenshot? Mine is below: <img width="2133" height="1545" alt="Image" src="https://github.com/user-attachments/assets/410930b4-c2c1-48b9-a51e-8f86a8214b42" /> But it doesn't work, always "no sources found".
Author
Owner

@Cyp9715 commented on GitHub (Oct 28, 2025):

@fishfree
First, I cannot attach screenshots due to current environmental issues.
Also, while there doesn't seem to be a major problem with the settings, please try disabling the hybrid engine first and then run it again.
As far as I know, the addresses for the hybrid engine and Reranking Engine should not be /v1.

your question unrelated to that issue.

<!-- gh-comment-id:3458965971 --> @Cyp9715 commented on GitHub (Oct 28, 2025): @fishfree First, I cannot attach screenshots due to current environmental issues. Also, while there doesn't seem to be a major problem with the settings, please try disabling the hybrid engine first and then run it again. As far as I know, the addresses for the hybrid engine and Reranking Engine should not be /v1. your question unrelated to that issue.
Author
Owner

@Zenopheus commented on GitHub (Nov 19, 2025):

I'm trying to do the exact same thing with the same models. All I get (after waiting) is "no sources found".

There is NO feedback about what is happening! I have to test it every time and wait for "No sources found" and guess that the reranker is the problem. Why can you check the URL via the admin panel? Why does it take so long to give me a result?! It sits there grinding on the CPU way before it sends (no results) to the LLM. Did it retrieve anything is it trying to rerank on the CPU? No feedback.

I keep reading "disable hybrid engine." First off, if that's an issue, can we address that? Second, why would I want to do that if it disabled reranking?

Sorry for being so direct, but I had to stop using Open WebUI months ago because I was getting so frustrated with RAG and the lack of feedback. It's so much easier to load a model with large context model and use llama-server UI, but I want to use Open-WebUI instead.

<!-- gh-comment-id:3550027607 --> @Zenopheus commented on GitHub (Nov 19, 2025): I'm trying to do the exact same thing with the same models. All I get (after waiting) is "no sources found". There is NO feedback about what is happening! I have to test it every time and _**wait**_ for "No sources found" and guess that the reranker is the problem. **Why can you check the URL via the admin panel?** Why does it take so long to give me a result?! It sits there grinding on the CPU way before it sends (no results) to the LLM. Did it retrieve anything is it trying to rerank on the CPU? No feedback. I keep reading "disable hybrid engine." First off, if that's an issue, can we address that? Second, why would I want to do that if it disabled reranking? Sorry for being so direct, but I had to stop using Open WebUI months ago because I was getting so frustrated with RAG and the lack of feedback. It's so much easier to load a model with large context model and use llama-server UI, but I want to use Open-WebUI instead.
Author
Owner

@Zenopheus commented on GitHub (Nov 19, 2025):

Update

How to use llama-server as a reranker

To use llama-server with reranking:

  • add the --reranking argument
  • You may need to increase -ubatch-size XXXX (if you get a memory error)

In Open-WebUI unders Admin setttings:

  • Use this URL format for the reranker: http://<host>:<port>/rerank

Bugs:

  • Poor feedback
  • No URL test in the admin page
  • When querying "no sources found" should not be the error. It should say "Can't rerank results" (or something like that)
  • I should not continue after failing to rerank! If you stop it, it will never complete.
<!-- gh-comment-id:3550140613 --> @Zenopheus commented on GitHub (Nov 19, 2025): **Update** ### How to use llama-server as a reranker To use llama-server with reranking: - add the --reranking argument - You may need to increase -ubatch-size XXXX (if you get a memory error) In Open-WebUI unders Admin setttings: - Use this URL format for the reranker: **http://\<host\>:\<port\>/rerank** ### Bugs: - Poor feedback - No URL test in the admin page - When querying "no sources found" should not be the error. It should say "Can't rerank results" (or something like that) - I should not continue after failing to rerank! If you stop it, it will never complete.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#57123