issue: rate limit exception duckduckgo search #5716

Closed
opened 2025-11-11 16:31:22 -06:00 by GiteaMirror · 5 comments
Owner

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.

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 "/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
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/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'>

fastapi.exceptions.HTTPException: 400: https://lite.duckduckgo.com/lite/ 202 Ratelimit

Additional Information

No response

Originally created by @a-klos on GitHub (Jul 7, 2025). ### Check Existing Issues - [x] I have searched the existing issues and discussions. - [x] 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 - [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. ### 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 "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/local/lib/python3.11/site-packages/uvicorn/__main__.py", line 4, in <module> uvicorn.main() │ └ <Command 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> └ <Command main> 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> └ <Command main> 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> │ │ └ <Command main> │ └ <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__.<locals>.call_next.<locals>.send_no_error at 0x7f947328eac0> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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__.<locals>.call_next.<locals>.send_no_error at 0x7f947328eac0> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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__.<locals>.wrapper at 0x7f947328d8a0> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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__.<locals>.wrapper at 0x7f947328d8a0> │ │ │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.app.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328e200> │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.app.<locals>.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.<locals>.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'> 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 "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/local/lib/python3.11/site-packages/uvicorn/__main__.py", line 4, in <module> uvicorn.main() │ └ <Command 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> └ <Command main> 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> └ <Command main> 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> │ │ └ <Command main> │ └ <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__.<locals>.call_next.<locals>.send_no_error at 0x7f947328eac0> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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__.<locals>.call_next.<locals>.send_no_error at 0x7f947328eac0> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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__.<locals>.wrapper at 0x7f947328d8a0> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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__.<locals>.wrapper at 0x7f947328d8a0> │ │ │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328cf40> │ │ │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.app.<locals>.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.<locals>.wrapped_app.<locals>.sender at 0x7f947328e200> │ │ └ <function BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.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.<locals>.app.<locals>.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.<locals>.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'> fastapi.exceptions.HTTPException: 400: https://lite.duckduckgo.com/lite/ 202 Ratelimit ### Additional Information _No response_
GiteaMirror added the bug label 2025-11-11 16:31:22 -06:00
Author
Owner

@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): this pr fixes the issue https://github.com/open-webui/open-webui/pull/15563
Author
Owner

@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!

@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!
Author
Owner

@rgaricano 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!

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 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)
Author
Owner

@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

@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
Author
Owner

@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.

@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.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#5716