Originally created by @a-klos on GitHub (Jul 7, 2025).
Check Existing Issues
I have searched the existing issues and discussions.
I am using the latest version of Open WebUI.
Installation Method
Git Clone
Open WebUI Version
v0.6.15
Ollama Version (if applicable)
No response
Operating System
macOS Sonoma
Browser (if applicable)
firefox
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.
Expected Behavior
Use websearch with duckduckgo search as search engine. The chat should perform the search and answer based on context.
Actual Behavior
I run in ratelimit, even if i set the parameters to lowest value (1) for the websearch. So Answer is generated without context.
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "/usr/local/lib/python3.11/site-packages/uvicorn/__main__.py", line 4, in
uvicorn.main()
│ └
└ <module 'uvicorn' from '/usr/local/lib/python3.11/site-packages/uvicorn/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1442, in call
return self.main(args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function Command.main at 0x7f94f60ca7a0>
└
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1363, in main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x7f94f6db8c10>
│ └ <function Command.invoke at 0x7f94f60ca480>
└
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1226, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'host': '0.0.0.0', 'port': 8080, 'forwarded_allow_ips': '', 'workers': 1, 'app': 'open_webui.main:app', 'uds': None, 'fd': ...
│ │ │ │ └ <click.core.Context object at 0x7f94f6db8c10>
│ │ │ └ <function main at 0x7f94f5cc4cc0>
│ │ └
│ └ <function Context.invoke at 0x7f94f60c96c0>
└ <click.core.Context object at 0x7f94f6db8c10>
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 794, in invoke
return callback(args, **kwargs)
│ │ └ {'host': '0.0.0.0', 'port': 8080, 'forwarded_allow_ips': '', 'workers': 1, 'app': 'open_webui.main:app', 'uds': None, 'fd': ...
│ └ ()
└ <function main at 0x7f94f5cc4cc0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 412, in main
run(
└ <function run at 0x7f94f60ef7e0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 579, in run
server.run()
│ └ <function Server.run at 0x7f94f5f6c900>
└ <uvicorn.server.Server object at 0x7f94f6cf6fd0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 66, in run
return asyncio.run(self.serve(sockets=sockets))
│ │ │ │ └ None
│ │ │ └ <function Server.serve at 0x7f94f5f6c9a0>
│ │ └ <uvicorn.server.Server object at 0x7f94f6cf6fd0>
│ └ <function run at 0x7f94f64653a0>
└ <module 'asyncio' from '/usr/local/lib/python3.11/asyncio/__init__.py'>
File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
return runner.run(main)
│ │ └ <coroutine object Server.serve at 0x7f94f5ea48b0>
│ └ <function Runner.run at 0x7f94f62b0f40>
└ <asyncio.runners.Runner object at 0x7f94f5cff6d0>
File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
return self.loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-1' coro=<Server.serve() running at /usr/local/lib/python3.11/site-packages/uvicorn/server.py:70> wai...
│ │ └ <cyfunction Loop.run_until_complete at 0x7f94f5cd7370>
│ └ <uvloop.Loop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x7f94f5cff6d0>
File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 141, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..send_no_error at 0x7f947328eac0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <starlette_compress.CompressMiddleware object at 0x7f94f50c9e40>
└ <open_webui.main.RedirectMiddleware object at 0x7f9480e79310>
File "/usr/local/lib/python3.11/site-packages/starlette_compress/__init_.py", line 92, in call
return await self._zstd(scope, receive, send)
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..send_no_error at 0x7f947328eac0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <member '_zstd' of 'CompressMiddleware' objects>
└ <starlette_compress.CompressMiddleware object at 0x7f94f50c9e40>
File "/usr/local/lib/python3.11/site-packages/starlette_compress/_zstd_legacy.py", line 100, in call
await self.app(scope, receive, wrapper)
│ │ │ │ └ <function ZstdResponder.call..wrapper at 0x7f947328d8a0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <member 'app' of 'ZstdResponder' objects>
└ <starlette_compress._zstd_legacy.ZstdResponder object at 0x7f94819ab940>
File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in call
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
│ │ │ │ │ │ └ <function ZstdResponder.call..wrapper at 0x7f947328d8a0>
│ │ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ │ │ └ <starlette.requests.Request object at 0x7f94701ddb10>
│ │ └ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x7f9480c61610>
└ <function wrap_app_handling_exceptions at 0x7f94f30c8ea0>
File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
└ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in call
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <bound method Router.app of <fastapi.routing.APIRouter object at 0x7f94b41cee10>>
└ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
await route.handle(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <function Route.handle at 0x7f94f30ca520>
└ APIRoute(path='/api/chat/completions', name='chat_completion', methods=['POST'])
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 288, in handle
await self.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <function request_response..app at 0x7f9480a35120>
└ APIRoute(path='/api/chat/completions', name='chat_completion', methods=['POST'])
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 76, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
│ │ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ │ └ <starlette.requests.Request object at 0x7f94701dd410>
│ └ <function request_response..app..app at 0x7f947328f740>
└ <function wrap_app_handling_exceptions at 0x7f94f30c8ea0>
File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328e200>
│ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
└ <function request_response..app..app at 0x7f947328f740>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 73, in app
response = await f(request)
│ └ <starlette.requests.Request object at 0x7f94701dd410>
└ <function get_request_handler..app at 0x7f9480a35760>
File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 301, in app
raw_response = await run_endpoint_function(
└ <function run_endpoint_function at 0x7f94f30b4360>
File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
return await dependant.call(**values)
│ │ └ {'user': UserModel(id='ecc7b936-7e1d-4346-8173-457b7cd6fa76', name='Andreas Klos', email='andreas.klos@stackit.cloud', role='...
│ └ <function chat_completion at 0x7f9480a34180>
└ Dependant(path_params=[], query_params=[], header_params=[], cookie_params=[], body_params=[ModelField(field_info=Body(Pydant...
File "/app/backend/open_webui/main.py", line 1263, in chat_completion
form_data, metadata, events = await process_chat_payload(
│ │ └ <function process_chat_payload at 0x7f94b45f0360>
│ └ {'user_id': 'ecc7b936-7e1d-4346-8173-457b7cd6fa76', 'chat_id': '76e330a3-4c27-4645-adc6-4778e68501f3', 'message_id': 'b2c36f4...
└ {'stream': True, 'model': 'cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic', 'messages': [{'role': 'user', 'content': 'What is the...
File "/app/backend/open_webui/utils/middleware.py", line 837, in process_chat_payload
form_data = await chat_web_search_handler(
└ <function chat_web_search_handler at 0x7f94b45f05e0>
File "/app/backend/open_webui/utils/middleware.py", line 418, in chat_web_search_handler
results = await process_web_search(
└ <function process_web_search at 0x7f94b7f76a20>
File "/app/backend/open_webui/routers/retrieval.py", line 1814, in process_web_search
search_results = await asyncio.gather(*search_tasks)
│ │ └ [<coroutine object run_in_threadpool at 0x7f94706d96c0>, <coroutine object run_in_threadpool at 0x7f94706d8130>, <coroutine o...
│ └ <function gather at 0x7f94f6295e40>
└ <module 'asyncio' from '/usr/local/lib/python3.11/asyncio/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/starlette/concurrency.py", line 37, in run_in_threadpool
return await anyio.to_thread.run_sync(func)
│ │ │ └ functools.partial(<function search_web at 0x7f94b7f33b00>, <starlette.requests.Request object at 0x7f94701dd410>, 'duckduckgo...
│ │ └ <function run_sync at 0x7f94f5ff7a60>
│ └ <module 'anyio.to_thread' from '/usr/local/lib/python3.11/site-packages/anyio/to_thread.py'>
└ <module 'anyio' from '/usr/local/lib/python3.11/site-packages/anyio/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/anyio/to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
└ <function get_async_backend at 0x7f94f5ff47c0>
File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2470, in run_sync_in_worker_thread
return await future
└ <Future finished exception=DuckDuckGoSearchException(RatelimitException('https://lite.duckduckgo.com/lite/ 202 Ratelimit'))>
File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 967, in run
result = context.run(func, *args)
File "/app/backend/open_webui/routers/retrieval.py", line 1691, in search_web
return search_duckduckgo(
└ <function search_duckduckgo at 0x7f94bce82a20>
File "/app/backend/open_webui/retrieval/web/duckduckgo.py", line 30, in search_duckduckgo
search_results = ddgs.text(
│ └ <function DDGS.text at 0x7f94bce4d300>
└ <duckduckgo_search.duckduckgo_search.DDGS object at 0x7f9473046990>
File "/usr/local/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 185, in text
raise DuckDuckGoSearchException(err)
│ └ RatelimitException('https://lite.duckduckgo.com/lite/ 202 Ratelimit')
└ <class 'duckduckgo_search.exceptions.DuckDuckGoSearchException'>
File "/app/backend/open_webui/routers/retrieval.py", line 1814, in process_web_search
search_results = await asyncio.gather(*search_tasks)
│ │ └ [<coroutine object run_in_threadpool at 0x7f94706d96c0>, <coroutine object run_in_threadpool at 0x7f94706d8130>, <coroutine o...
│ └ <function gather at 0x7f94f6295e40>
└ <module 'asyncio' from '/usr/local/lib/python3.11/asyncio/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/starlette/concurrency.py", line 37, in run_in_threadpool
return await anyio.to_thread.run_sync(func)
│ │ │ └ functools.partial(<function search_web at 0x7f94b7f33b00>, <starlette.requests.Request object at 0x7f94701dd410>, 'duckduckgo...
│ │ └ <function run_sync at 0x7f94f5ff7a60>
│ └ <module 'anyio.to_thread' from '/usr/local/lib/python3.11/site-packages/anyio/to_thread.py'>
└ <module 'anyio' from '/usr/local/lib/python3.11/site-packages/anyio/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/anyio/to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
└ <function get_async_backend at 0x7f94f5ff47c0>
File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2470, in run_sync_in_worker_thread
return await future
└ <Future finished exception=DuckDuckGoSearchException(RatelimitException('https://lite.duckduckgo.com/lite/ 202 Ratelimit'))>
File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 967, in run
result = context.run(func, *args)
File "/app/backend/open_webui/routers/retrieval.py", line 1691, in search_web
return search_duckduckgo(
└ <function search_duckduckgo at 0x7f94bce82a20>
File "/app/backend/open_webui/retrieval/web/duckduckgo.py", line 30, in search_duckduckgo
search_results = ddgs.text(
│ └ <function DDGS.text at 0x7f94bce4d300>
└ <duckduckgo_search.duckduckgo_search.DDGS object at 0x7f9473046990>
File "/usr/local/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 185, in text
raise DuckDuckGoSearchException(err)
│ └ RatelimitException('https://lite.duckduckgo.com/lite/ 202 Ratelimit')
└ <class 'duckduckgo_search.exceptions.DuckDuckGoSearchException'>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "/usr/local/lib/python3.11/site-packages/uvicorn/__main__.py", line 4, in
uvicorn.main()
│ └
└ <module 'uvicorn' from '/usr/local/lib/python3.11/site-packages/uvicorn/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1442, in call
return self.main(args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function Command.main at 0x7f94f60ca7a0>
└
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1363, in main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x7f94f6db8c10>
│ └ <function Command.invoke at 0x7f94f60ca480>
└
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1226, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'host': '0.0.0.0', 'port': 8080, 'forwarded_allow_ips': '', 'workers': 1, 'app': 'open_webui.main:app', 'uds': None, 'fd': ...
│ │ │ │ └ <click.core.Context object at 0x7f94f6db8c10>
│ │ │ └ <function main at 0x7f94f5cc4cc0>
│ │ └
│ └ <function Context.invoke at 0x7f94f60c96c0>
└ <click.core.Context object at 0x7f94f6db8c10>
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 794, in invoke
return callback(args, **kwargs)
│ │ └ {'host': '0.0.0.0', 'port': 8080, 'forwarded_allow_ips': '', 'workers': 1, 'app': 'open_webui.main:app', 'uds': None, 'fd': ...
│ └ ()
└ <function main at 0x7f94f5cc4cc0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 412, in main
run(
└ <function run at 0x7f94f60ef7e0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 579, in run
server.run()
│ └ <function Server.run at 0x7f94f5f6c900>
└ <uvicorn.server.Server object at 0x7f94f6cf6fd0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 66, in run
return asyncio.run(self.serve(sockets=sockets))
│ │ │ │ └ None
│ │ │ └ <function Server.serve at 0x7f94f5f6c9a0>
│ │ └ <uvicorn.server.Server object at 0x7f94f6cf6fd0>
│ └ <function run at 0x7f94f64653a0>
└ <module 'asyncio' from '/usr/local/lib/python3.11/asyncio/__init__.py'>
File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
return runner.run(main)
│ │ └ <coroutine object Server.serve at 0x7f94f5ea48b0>
│ └ <function Runner.run at 0x7f94f62b0f40>
└ <asyncio.runners.Runner object at 0x7f94f5cff6d0>
File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
return self.loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-1' coro=<Server.serve() running at /usr/local/lib/python3.11/site-packages/uvicorn/server.py:70> wai...
│ │ └ <cyfunction Loop.run_until_complete at 0x7f94f5cd7370>
│ └ <uvloop.Loop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x7f94f5cff6d0>
File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 141, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..send_no_error at 0x7f947328eac0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <starlette_compress.CompressMiddleware object at 0x7f94f50c9e40>
└ <open_webui.main.RedirectMiddleware object at 0x7f9480e79310>
File "/usr/local/lib/python3.11/site-packages/starlette_compress/__init_.py", line 92, in call
return await self._zstd(scope, receive, send)
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..send_no_error at 0x7f947328eac0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <member '_zstd' of 'CompressMiddleware' objects>
└ <starlette_compress.CompressMiddleware object at 0x7f94f50c9e40>
File "/usr/local/lib/python3.11/site-packages/starlette_compress/_zstd_legacy.py", line 100, in call
await self.app(scope, receive, wrapper)
│ │ │ │ └ <function ZstdResponder.call..wrapper at 0x7f947328d8a0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <member 'app' of 'ZstdResponder' objects>
└ <starlette_compress._zstd_legacy.ZstdResponder object at 0x7f94819ab940>
File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in call
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
│ │ │ │ │ │ └ <function ZstdResponder.call..wrapper at 0x7f947328d8a0>
│ │ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ │ │ └ <starlette.requests.Request object at 0x7f94701ddb10>
│ │ └ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x7f9480c61610>
└ <function wrap_app_handling_exceptions at 0x7f94f30c8ea0>
File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
└ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in call
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <bound method Router.app of <fastapi.routing.APIRouter object at 0x7f94b41cee10>>
└ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
await route.handle(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <function Route.handle at 0x7f94f30ca520>
└ APIRoute(path='/api/chat/completions', name='chat_completion', methods=['POST'])
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 288, in handle
await self.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <function request_response..app at 0x7f9480a35120>
└ APIRoute(path='/api/chat/completions', name='chat_completion', methods=['POST'])
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 76, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
│ │ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ │ └ <starlette.requests.Request object at 0x7f94701dd410>
│ └ <function request_response..app..app at 0x7f947328f740>
└ <function wrap_app_handling_exceptions at 0x7f94f30c8ea0>
File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328e200>
│ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
└ <function request_response..app..app at 0x7f947328f740>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 73, in app
response = await f(request)
│ └ <starlette.requests.Request object at 0x7f94701dd410>
└ <function get_request_handler..app at 0x7f9480a35760>
File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 301, in app
raw_response = await run_endpoint_function(
└ <function run_endpoint_function at 0x7f94f30b4360>
File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
return await dependant.call(**values)
│ │ └ {'user': UserModel(id='ecc7b936-7e1d-4346-8173-457b7cd6fa76', name='Andreas Klos', email='andreas.klos@stackit.cloud', role='...
│ └ <function chat_completion at 0x7f9480a34180>
└ Dependant(path_params=[], query_params=[], header_params=[], cookie_params=[], body_params=[ModelField(field_info=Body(Pydant...
File "/app/backend/open_webui/main.py", line 1263, in chat_completion
form_data, metadata, events = await process_chat_payload(
│ │ └ <function process_chat_payload at 0x7f94b45f0360>
│ └ {'user_id': 'ecc7b936-7e1d-4346-8173-457b7cd6fa76', 'chat_id': '76e330a3-4c27-4645-adc6-4778e68501f3', 'message_id': 'b2c36f4...
└ {'stream': True, 'model': 'cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic', 'messages': [{'role': 'user', 'content': 'What is the...
File "/app/backend/open_webui/utils/middleware.py", line 837, in process_chat_payload
form_data = await chat_web_search_handler(
└ <function chat_web_search_handler at 0x7f94b45f05e0>
File "/app/backend/open_webui/utils/middleware.py", line 418, in chat_web_search_handler
results = await process_web_search(
└ <function process_web_search at 0x7f94b7f76a20>
File "/app/backend/open_webui/routers/retrieval.py", line 1828, in process_web_search
raise HTTPException(
└ <class 'fastapi.exceptions.HTTPException'>
@tjbck i don't understand your actions! I create a PR for this issue. You closed my PR because the PR template was missing. okay, no deal. I create a new PR, but i must see, that you made the changes now yourself. You are not interested in gaining contributors for your project!? With that behavior you will not!
@a-klos commented on GitHub (Jul 7, 2025):
@tjbck i don't understand your actions! I create a PR for this issue. You closed my PR because the PR template was missing. okay, no deal. I create a new PR, but i must see, that you made the changes now yourself. You are not interested in gaining contributors for your project!? With that behavior you will not!
@tjbck i don't understand your actions! I create a PR for this issue. You closed my PR because the PR template was missing. okay, no deal. I create a new PR, but i must see, that you made the changes now yourself. You are not interested in gaining contributors for your project!? With that behavior you will not!
@rgaricano commented on GitHub (Jul 7, 2025):
> [@tjbck](https://github.com/tjbck) i don't understand your actions! I create a PR for this issue. You closed my PR because the PR template was missing. okay, no deal. I create a new PR, but i must see, that you made the changes now yourself. You are not interested in gaining contributors for your project!? With that behavior you will not!
did you read the comment https://github.com/open-webui/open-webui/pull/15563#issuecomment-3044728355 ?
it was closed in favour of a commit,
your PR was not merged but changes have been added.
(& this is usual for very small changes)
@rgaricano the contribution seems small, but figuring out, what the issue actually is, changing it, testing it, open an issue and PR, if all of that is a too small contribution okay, then i will open next time just an issue... with this actions you are not going to earn more contributors,... but maybe you already have enough
@a-klos commented on GitHub (Jul 7, 2025):
@rgaricano the contribution seems small, but figuring out, what the issue actually is, changing it, testing it, open an issue and PR, if all of that is a too small contribution okay, then i will open next time just an issue... with this actions you are not going to earn more contributors,... but maybe you already have enough
I understand your point of view. This has happened to me on other pulls, which have been rejected for various reasons.
I have some of them running in my local version, as well as changes from other users that weren't merged, and I'm extremely grateful to them for proposed.
I don't give it any more importance either.
Typically, when these types of quick commits are made, @tjbck also adds the contributor. If he hasn't done so, I imagine it was due to some oversight.
@rgaricano commented on GitHub (Jul 7, 2025):
I understand your point of view. This has happened to me on other pulls, which have been rejected for various reasons.
I have some of them running in my local version, as well as changes from other users that weren't merged, and I'm extremely grateful to them for proposed.
I don't give it any more importance either.
Typically, when these types of quick commits are made, @tjbck also adds the contributor. If he hasn't done so, I imagine it was due to some oversight.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Originally created by @a-klos on GitHub (Jul 7, 2025).
Check Existing Issues
Installation Method
Git Clone
Open WebUI Version
v0.6.15
Ollama Version (if applicable)
No response
Operating System
macOS Sonoma
Browser (if applicable)
firefox
Confirmation
README.md.Expected Behavior
Use websearch with duckduckgo search as search engine. The chat should perform the search and answer based on context.
Actual Behavior
I run in ratelimit, even if i set the parameters to lowest value (1) for the websearch. So Answer is generated without context.
Steps to Reproduce
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
configure model and websearch chose duckduckgo.
go into chat activate websearch and ask something.
Logs & Screenshots
open_webui.routers.retrieval:process_web_search:1826 - https://lite.duckduckgo.com/lite/ 202 Ratelimit - {}
Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "/usr/local/lib/python3.11/site-packages/uvicorn/__main__.py", line 4, in
uvicorn.main()
│ └
└ <module 'uvicorn' from '/usr/local/lib/python3.11/site-packages/uvicorn/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1442, in call
return self.main(args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function Command.main at 0x7f94f60ca7a0>
└
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1363, in main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x7f94f6db8c10>
│ └ <function Command.invoke at 0x7f94f60ca480>
└
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1226, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'host': '0.0.0.0', 'port': 8080, 'forwarded_allow_ips': '', 'workers': 1, 'app': 'open_webui.main:app', 'uds': None, 'fd': ...
│ │ │ │ └ <click.core.Context object at 0x7f94f6db8c10>
│ │ │ └ <function main at 0x7f94f5cc4cc0>
│ │ └
│ └ <function Context.invoke at 0x7f94f60c96c0>
└ <click.core.Context object at 0x7f94f6db8c10>
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 794, in invoke
return callback(args, **kwargs)
│ │ └ {'host': '0.0.0.0', 'port': 8080, 'forwarded_allow_ips': '', 'workers': 1, 'app': 'open_webui.main:app', 'uds': None, 'fd': ...
│ └ ()
└ <function main at 0x7f94f5cc4cc0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 412, in main
run(
└ <function run at 0x7f94f60ef7e0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 579, in run
server.run()
│ └ <function Server.run at 0x7f94f5f6c900>
└ <uvicorn.server.Server object at 0x7f94f6cf6fd0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 66, in run
return asyncio.run(self.serve(sockets=sockets))
│ │ │ │ └ None
│ │ │ └ <function Server.serve at 0x7f94f5f6c9a0>
│ │ └ <uvicorn.server.Server object at 0x7f94f6cf6fd0>
│ └ <function run at 0x7f94f64653a0>
└ <module 'asyncio' from '/usr/local/lib/python3.11/asyncio/__init__.py'>
File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
return runner.run(main)
│ │ └ <coroutine object Server.serve at 0x7f94f5ea48b0>
│ └ <function Runner.run at 0x7f94f62b0f40>
└ <asyncio.runners.Runner object at 0x7f94f5cff6d0>
File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
return self.loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-1' coro=<Server.serve() running at /usr/local/lib/python3.11/site-packages/uvicorn/server.py:70> wai...
│ │ └ <cyfunction Loop.run_until_complete at 0x7f94f5cd7370>
│ └ <uvloop.Loop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x7f94f5cff6d0>
File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 141, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..send_no_error at 0x7f947328eac0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <starlette_compress.CompressMiddleware object at 0x7f94f50c9e40>
└ <open_webui.main.RedirectMiddleware object at 0x7f9480e79310>
File "/usr/local/lib/python3.11/site-packages/starlette_compress/__init_.py", line 92, in call
return await self._zstd(scope, receive, send)
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..send_no_error at 0x7f947328eac0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <member '_zstd' of 'CompressMiddleware' objects>
└ <starlette_compress.CompressMiddleware object at 0x7f94f50c9e40>
File "/usr/local/lib/python3.11/site-packages/starlette_compress/_zstd_legacy.py", line 100, in call
await self.app(scope, receive, wrapper)
│ │ │ │ └ <function ZstdResponder.call..wrapper at 0x7f947328d8a0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <member 'app' of 'ZstdResponder' objects>
└ <starlette_compress._zstd_legacy.ZstdResponder object at 0x7f94819ab940>
File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in call
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
│ │ │ │ │ │ └ <function ZstdResponder.call..wrapper at 0x7f947328d8a0>
│ │ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ │ │ └ <starlette.requests.Request object at 0x7f94701ddb10>
│ │ └ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x7f9480c61610>
└ <function wrap_app_handling_exceptions at 0x7f94f30c8ea0>
File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
└ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in call
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <bound method Router.app of <fastapi.routing.APIRouter object at 0x7f94b41cee10>>
└ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
await route.handle(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <function Route.handle at 0x7f94f30ca520>
└ APIRoute(path='/api/chat/completions', name='chat_completion', methods=['POST'])
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 288, in handle
await self.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <function request_response..app at 0x7f9480a35120>
└ APIRoute(path='/api/chat/completions', name='chat_completion', methods=['POST'])
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 76, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
│ │ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ │ └ <starlette.requests.Request object at 0x7f94701dd410>
│ └ <function request_response..app..app at 0x7f947328f740>
└ <function wrap_app_handling_exceptions at 0x7f94f30c8ea0>
File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328e200>
│ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
└ <function request_response..app..app at 0x7f947328f740>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 73, in app
response = await f(request)
│ └ <starlette.requests.Request object at 0x7f94701dd410>
└ <function get_request_handler..app at 0x7f9480a35760>
File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 301, in app
raw_response = await run_endpoint_function(
└ <function run_endpoint_function at 0x7f94f30b4360>
File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
return await dependant.call(**values)
│ │ └ {'user': UserModel(id='ecc7b936-7e1d-4346-8173-457b7cd6fa76', name='Andreas Klos', email='andreas.klos@stackit.cloud', role='...
│ └ <function chat_completion at 0x7f9480a34180>
└ Dependant(path_params=[], query_params=[], header_params=[], cookie_params=[], body_params=[ModelField(field_info=Body(Pydant...
File "/app/backend/open_webui/main.py", line 1263, in chat_completion
form_data, metadata, events = await process_chat_payload(
│ │ └ <function process_chat_payload at 0x7f94b45f0360>
│ └ {'user_id': 'ecc7b936-7e1d-4346-8173-457b7cd6fa76', 'chat_id': '76e330a3-4c27-4645-adc6-4778e68501f3', 'message_id': 'b2c36f4...
└ {'stream': True, 'model': 'cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic', 'messages': [{'role': 'user', 'content': 'What is the...
File "/app/backend/open_webui/utils/middleware.py", line 837, in process_chat_payload
form_data = await chat_web_search_handler(
└ <function chat_web_search_handler at 0x7f94b45f05e0>
File "/app/backend/open_webui/utils/middleware.py", line 418, in chat_web_search_handler
results = await process_web_search(
└ <function process_web_search at 0x7f94b7f76a20>
File "/usr/local/lib/python3.11/site-packages/starlette/concurrency.py", line 37, in run_in_threadpool
return await anyio.to_thread.run_sync(func)
│ │ │ └ functools.partial(<function search_web at 0x7f94b7f33b00>, <starlette.requests.Request object at 0x7f94701dd410>, 'duckduckgo...
│ │ └ <function run_sync at 0x7f94f5ff7a60>
│ └ <module 'anyio.to_thread' from '/usr/local/lib/python3.11/site-packages/anyio/to_thread.py'>
└ <module 'anyio' from '/usr/local/lib/python3.11/site-packages/anyio/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/anyio/to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
└ <function get_async_backend at 0x7f94f5ff47c0>
File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2470, in run_sync_in_worker_thread
return await future
└ <Future finished exception=DuckDuckGoSearchException(RatelimitException('https://lite.duckduckgo.com/lite/ 202 Ratelimit'))>
File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 967, in run
result = context.run(func, *args)
File "/app/backend/open_webui/routers/retrieval.py", line 1691, in search_web
return search_duckduckgo(
└ <function search_duckduckgo at 0x7f94bce82a20>
File "/app/backend/open_webui/retrieval/web/duckduckgo.py", line 30, in search_duckduckgo
search_results = ddgs.text(
│ └ <function DDGS.text at 0x7f94bce4d300>
└ <duckduckgo_search.duckduckgo_search.DDGS object at 0x7f9473046990>
File "/usr/local/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 185, in text
raise DuckDuckGoSearchException(err)
│ └ RatelimitException('https://lite.duckduckgo.com/lite/ 202 Ratelimit')
└ <class 'duckduckgo_search.exceptions.DuckDuckGoSearchException'>
duckduckgo_search.exceptions.DuckDuckGoSearchException: https://lite.duckduckgo.com/lite/ 202 Ratelimit
2025-07-07 10:30:56.310 | ERROR | open_webui.utils.middleware:chat_web_search_handler:480 - 400: https://lite.duckduckgo.com/lite/ 202 Ratelimit - {}
Traceback (most recent call last):
File "/app/backend/open_webui/routers/retrieval.py", line 1814, in process_web_search
search_results = await asyncio.gather(*search_tasks)
│ │ └ [<coroutine object run_in_threadpool at 0x7f94706d96c0>, <coroutine object run_in_threadpool at 0x7f94706d8130>, <coroutine o...
│ └ <function gather at 0x7f94f6295e40>
└ <module 'asyncio' from '/usr/local/lib/python3.11/asyncio/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/starlette/concurrency.py", line 37, in run_in_threadpool
return await anyio.to_thread.run_sync(func)
│ │ │ └ functools.partial(<function search_web at 0x7f94b7f33b00>, <starlette.requests.Request object at 0x7f94701dd410>, 'duckduckgo...
│ │ └ <function run_sync at 0x7f94f5ff7a60>
│ └ <module 'anyio.to_thread' from '/usr/local/lib/python3.11/site-packages/anyio/to_thread.py'>
└ <module 'anyio' from '/usr/local/lib/python3.11/site-packages/anyio/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/anyio/to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
└ <function get_async_backend at 0x7f94f5ff47c0>
File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 2470, in run_sync_in_worker_thread
return await future
└ <Future finished exception=DuckDuckGoSearchException(RatelimitException('https://lite.duckduckgo.com/lite/ 202 Ratelimit'))>
File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 967, in run
result = context.run(func, *args)
File "/app/backend/open_webui/routers/retrieval.py", line 1691, in search_web
return search_duckduckgo(
└ <function search_duckduckgo at 0x7f94bce82a20>
File "/app/backend/open_webui/retrieval/web/duckduckgo.py", line 30, in search_duckduckgo
search_results = ddgs.text(
│ └ <function DDGS.text at 0x7f94bce4d300>
└ <duckduckgo_search.duckduckgo_search.DDGS object at 0x7f9473046990>
File "/usr/local/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 185, in text
raise DuckDuckGoSearchException(err)
│ └ RatelimitException('https://lite.duckduckgo.com/lite/ 202 Ratelimit')
└ <class 'duckduckgo_search.exceptions.DuckDuckGoSearchException'>
duckduckgo_search.exceptions.DuckDuckGoSearchException: https://lite.duckduckgo.com/lite/ 202 Ratelimit
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "/usr/local/lib/python3.11/site-packages/uvicorn/__main__.py", line 4, in
uvicorn.main()
│ └
└ <module 'uvicorn' from '/usr/local/lib/python3.11/site-packages/uvicorn/__init__.py'>
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1442, in call
return self.main(args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function Command.main at 0x7f94f60ca7a0>
└
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1363, in main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x7f94f6db8c10>
│ └ <function Command.invoke at 0x7f94f60ca480>
└
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1226, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'host': '0.0.0.0', 'port': 8080, 'forwarded_allow_ips': '', 'workers': 1, 'app': 'open_webui.main:app', 'uds': None, 'fd': ...
│ │ │ │ └ <click.core.Context object at 0x7f94f6db8c10>
│ │ │ └ <function main at 0x7f94f5cc4cc0>
│ │ └
│ └ <function Context.invoke at 0x7f94f60c96c0>
└ <click.core.Context object at 0x7f94f6db8c10>
File "/usr/local/lib/python3.11/site-packages/click/core.py", line 794, in invoke
return callback(args, **kwargs)
│ │ └ {'host': '0.0.0.0', 'port': 8080, 'forwarded_allow_ips': '', 'workers': 1, 'app': 'open_webui.main:app', 'uds': None, 'fd': ...
│ └ ()
└ <function main at 0x7f94f5cc4cc0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 412, in main
run(
└ <function run at 0x7f94f60ef7e0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 579, in run
server.run()
│ └ <function Server.run at 0x7f94f5f6c900>
└ <uvicorn.server.Server object at 0x7f94f6cf6fd0>
File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 66, in run
return asyncio.run(self.serve(sockets=sockets))
│ │ │ │ └ None
│ │ │ └ <function Server.serve at 0x7f94f5f6c9a0>
│ │ └ <uvicorn.server.Server object at 0x7f94f6cf6fd0>
│ └ <function run at 0x7f94f64653a0>
└ <module 'asyncio' from '/usr/local/lib/python3.11/asyncio/__init__.py'>
File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
return runner.run(main)
│ │ └ <coroutine object Server.serve at 0x7f94f5ea48b0>
│ └ <function Runner.run at 0x7f94f62b0f40>
└ <asyncio.runners.Runner object at 0x7f94f5cff6d0>
File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
return self.loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-1' coro=<Server.serve() running at /usr/local/lib/python3.11/site-packages/uvicorn/server.py:70> wai...
│ │ └ <cyfunction Loop.run_until_complete at 0x7f94f5cd7370>
│ └ <uvloop.Loop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x7f94f5cff6d0>
File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 141, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..send_no_error at 0x7f947328eac0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <starlette_compress.CompressMiddleware object at 0x7f94f50c9e40>
└ <open_webui.main.RedirectMiddleware object at 0x7f9480e79310>
File "/usr/local/lib/python3.11/site-packages/starlette_compress/__init_.py", line 92, in call
return await self._zstd(scope, receive, send)
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..send_no_error at 0x7f947328eac0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <member '_zstd' of 'CompressMiddleware' objects>
└ <starlette_compress.CompressMiddleware object at 0x7f94f50c9e40>
File "/usr/local/lib/python3.11/site-packages/starlette_compress/_zstd_legacy.py", line 100, in call
await self.app(scope, receive, wrapper)
│ │ │ │ └ <function ZstdResponder.call..wrapper at 0x7f947328d8a0>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <member 'app' of 'ZstdResponder' objects>
└ <starlette_compress._zstd_legacy.ZstdResponder object at 0x7f94819ab940>
File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in call
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
│ │ │ │ │ │ └ <function ZstdResponder.call..wrapper at 0x7f947328d8a0>
│ │ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ │ │ └ <starlette.requests.Request object at 0x7f94701ddb10>
│ │ └ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x7f9480c61610>
└ <function wrap_app_handling_exceptions at 0x7f94f30c8ea0>
File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
└ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in call
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <bound method Router.app of <fastapi.routing.APIRouter object at 0x7f94b41cee10>>
└ <fastapi.routing.APIRouter object at 0x7f94b41cee10>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
await route.handle(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <function Route.handle at 0x7f94f30ca520>
└ APIRoute(path='/api/chat/completions', name='chat_completion', methods=['POST'])
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 288, in handle
await self.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ └ <function request_response..app at 0x7f9480a35120>
└ APIRoute(path='/api/chat/completions', name='chat_completion', methods=['POST'])
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 76, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
│ │ │ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328cf40>
│ │ │ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
│ │ └ <starlette.requests.Request object at 0x7f94701dd410>
│ └ <function request_response..app..app at 0x7f947328f740>
└ <function wrap_app_handling_exceptions at 0x7f94f30c8ea0>
File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions..wrapped_app..sender at 0x7f947328e200>
│ │ └ <function BaseHTTPMiddleware.call..call_next..receive_or_disconnect at 0x7f947328f2e0>
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('100.64.1.46', 8080), '...
└ <function request_response..app..app at 0x7f947328f740>
File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 73, in app
response = await f(request)
│ └ <starlette.requests.Request object at 0x7f94701dd410>
└ <function get_request_handler..app at 0x7f9480a35760>
File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 301, in app
raw_response = await run_endpoint_function(
└ <function run_endpoint_function at 0x7f94f30b4360>
File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
return await dependant.call(**values)
│ │ └ {'user': UserModel(id='ecc7b936-7e1d-4346-8173-457b7cd6fa76', name='Andreas Klos', email='andreas.klos@stackit.cloud', role='...
│ └ <function chat_completion at 0x7f9480a34180>
└ Dependant(path_params=[], query_params=[], header_params=[], cookie_params=[], body_params=[ModelField(field_info=Body(Pydant...
File "/app/backend/open_webui/main.py", line 1263, in chat_completion
form_data, metadata, events = await process_chat_payload(
│ │ └ <function process_chat_payload at 0x7f94b45f0360>
│ └ {'user_id': 'ecc7b936-7e1d-4346-8173-457b7cd6fa76', 'chat_id': '76e330a3-4c27-4645-adc6-4778e68501f3', 'message_id': 'b2c36f4...
└ {'stream': True, 'model': 'cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic', 'messages': [{'role': 'user', 'content': 'What is the...
File "/app/backend/open_webui/utils/middleware.py", line 837, in process_chat_payload
form_data = await chat_web_search_handler(
└ <function chat_web_search_handler at 0x7f94b45f05e0>
File "/app/backend/open_webui/routers/retrieval.py", line 1828, in process_web_search
raise HTTPException(
└ <class 'fastapi.exceptions.HTTPException'>
fastapi.exceptions.HTTPException: 400: https://lite.duckduckgo.com/lite/ 202 Ratelimit
Additional Information
No response
@a-klos commented on GitHub (Jul 7, 2025):
this pr fixes the issue
https://github.com/open-webui/open-webui/pull/15563
@a-klos commented on GitHub (Jul 7, 2025):
@tjbck i don't understand your actions! I create a PR for this issue. You closed my PR because the PR template was missing. okay, no deal. I create a new PR, but i must see, that you made the changes now yourself. You are not interested in gaining contributors for your project!? With that behavior you will not!
@rgaricano commented on GitHub (Jul 7, 2025):
did you read the comment https://github.com/open-webui/open-webui/pull/15563#issuecomment-3044728355 ?
it was closed in favour of a commit,
your PR was not merged but changes have been added.
(& this is usual for very small changes)
@a-klos commented on GitHub (Jul 7, 2025):
@rgaricano the contribution seems small, but figuring out, what the issue actually is, changing it, testing it, open an issue and PR, if all of that is a too small contribution okay, then i will open next time just an issue... with this actions you are not going to earn more contributors,... but maybe you already have enough
@rgaricano commented on GitHub (Jul 7, 2025):
I understand your point of view. This has happened to me on other pulls, which have been rejected for various reasons.
I have some of them running in my local version, as well as changes from other users that weren't merged, and I'm extremely grateful to them for proposed.
I don't give it any more importance either.
Typically, when these types of quick commits are made, @tjbck also adds the contributor. If he hasn't done so, I imagine it was due to some oversight.