deedy5 / duckduckgo_search

Search for words, documents, images, videos, news, maps and text translation using the DuckDuckGo.com search engine. Downloading files and images to a local hard drive.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Timeout error when trying image search from CLI or Python

drscotthawley opened this issue · comments

Describe the bug
"TimeoutError: timed out" coming from the attempt at an http socket connection. This happens whether calling from Python or using the DDG CLI. Running pip install -U duckduckgo_search does not fix this.

Debug log
CLI version, using the suggested search from the README:

$ ddgs images -k "yuri kuklachev cat theatre" -m 500 -s off -d
Traceback (most recent call last):
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_exceptions.py", line 10, in map_exceptions
    yield
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_backends/sync.py", line 206, in connect_tcp
    sock = socket.create_connection(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py", line 851, in create_connection
    raise exceptions[0]
  File "/opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py", line 836, in create_connection
    sock.connect(sa)
TimeoutError: timed out

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py", line 66, in map_httpcore_exceptions
    yield
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py", line 228, in handle_request
    resp = self._pool.handle_request(req)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py", line 268, in handle_request
    raise exc
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py", line 251, in handle_request
    response = connection.handle_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 99, in handle_request
    raise exc
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 76, in handle_request
    stream = self._connect(request)
             ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py", line 124, in _connect
    stream = self._network_backend.connect_tcp(**kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_backends/sync.py", line 205, in connect_tcp
    with map_exceptions(exc_map):
  File "/opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
    raise to_exc(exc) from exc
httpcore.ConnectTimeout: timed out

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/myusername/envs/blog/bin/ddgs", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 1719, in invoke
    rv.append(sub_ctx.command.invoke(sub_ctx))
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/cli.py", line 249, in images
    for r in DDGS(proxies=proxy).images(
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 351, in images
    vqd = self._get_vqd(keywords)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 59, in _get_vqd
    resp = self._get_url("POST", "https://duckduckgo.com", data={"q": keywords})
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 54, in _get_url
    raise ex
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py", line 45, in _get_url
    resp = self._client.request(method, url, follow_redirects=True, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 814, in request
    return self.send(request, auth=auth, follow_redirects=follow_redirects)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 901, in send
    response = self._send_handling_auth(
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 929, in _send_handling_auth
    response = self._send_handling_redirects(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 966, in _send_handling_redirects
    response = self._send_single_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_client.py", line 1002, in _send_single_request
    response = transport.handle_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py", line 227, in handle_request
    with map_httpcore_exceptions():
  File "/opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/Users/myusername/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py", line 83, in map_httpcore_exceptions
    raise mapped_exc(message) from exc
httpx.ConnectTimeout: timed out

Python version: search_results = ddgs.images(keywords="dog images"):

---------------------------------------------------------------------------
TimeoutError                              Traceback (most recent call last)
File ~/envs/blog/lib/python3.11/site-packages/httpcore/_exceptions.py:10, in map_exceptions(map)
      9 try:
---> 10     yield
     11 except Exception as exc:  # noqa: PIE786

File ~/envs/blog/lib/python3.11/site-packages/httpcore/_backends/sync.py:206, in SyncBackend.connect_tcp(self, host, port, timeout, local_address, socket_options)
    205 with map_exceptions(exc_map):
--> 206     sock = socket.create_connection(
    207         address,
    208         timeout,
    209         source_address=source_address,
    210     )
    211     for option in socket_options:

File /opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py:851, in create_connection(address, timeout, source_address, all_errors)
    850 if not all_errors:
--> 851     raise exceptions[0]
    852 raise ExceptionGroup("create_connection failed", exceptions)

File /opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/socket.py:836, in create_connection(address, timeout, source_address, all_errors)
    835     sock.bind(source_address)
--> 836 sock.connect(sa)
    837 # Break explicitly a reference cycle

TimeoutError: timed out

The above exception was the direct cause of the following exception:

ConnectTimeout                            Traceback (most recent call last)
File ~/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py:66, in map_httpcore_exceptions()
     65 try:
---> 66     yield
     67 except Exception as exc:

File ~/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py:228, in HTTPTransport.handle_request(self, request)
    227 with map_httpcore_exceptions():
--> 228     resp = self._pool.handle_request(req)
    230 assert isinstance(resp.stream, typing.Iterable)

File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py:268, in ConnectionPool.handle_request(self, request)
    267         self.response_closed(status)
--> 268     raise exc
    269 else:

File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection_pool.py:251, in ConnectionPool.handle_request(self, request)
    250 try:
--> 251     response = connection.handle_request(request)
    252 except ConnectionNotAvailable:
    253     # The ConnectionNotAvailable exception is a special case, that
    254     # indicates we need to retry the request on a new connection.
   (...)
    258     # might end up as an HTTP/2 connection, but which actually ends
    259     # up as HTTP/1.1.

File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py:99, in HTTPConnection.handle_request(self, request)
     98         self._connect_failed = True
---> 99         raise exc
    100 elif not self._connection.is_available():

File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py:76, in HTTPConnection.handle_request(self, request)
     75 try:
---> 76     stream = self._connect(request)
     78     ssl_object = stream.get_extra_info("ssl_object")

File ~/envs/blog/lib/python3.11/site-packages/httpcore/_sync/connection.py:124, in HTTPConnection._connect(self, request)
    123 with Trace("connect_tcp", logger, request, kwargs) as trace:
--> 124     stream = self._network_backend.connect_tcp(**kwargs)
    125     trace.return_value = stream

File ~/envs/blog/lib/python3.11/site-packages/httpcore/_backends/sync.py:205, in SyncBackend.connect_tcp(self, host, port, timeout, local_address, socket_options)
    200 exc_map: ExceptionMapping = {
    201     socket.timeout: ConnectTimeout,
    202     OSError: ConnectError,
    203 }
--> 205 with map_exceptions(exc_map):
    206     sock = socket.create_connection(
    207         address,
    208         timeout,
    209         source_address=source_address,
    210     )

File /opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py:155, in _GeneratorContextManager.__exit__(self, typ, value, traceback)
    154 try:
--> 155     self.gen.throw(typ, value, traceback)
    156 except StopIteration as exc:
    157     # Suppress StopIteration *unless* it's the same exception that
    158     # was passed to throw().  This prevents a StopIteration
    159     # raised inside the "with" statement from being suppressed.

File ~/envs/blog/lib/python3.11/site-packages/httpcore/_exceptions.py:14, in map_exceptions(map)
     13     if isinstance(exc, from_exc):
---> 14         raise to_exc(exc) from exc
     15 raise

ConnectTimeout: timed out

The above exception was the direct cause of the following exception:

ConnectTimeout                            Traceback (most recent call last)
Cell In[17], line 15
     12         return image_urls
     14 # example usage:
---> 15 urls = search_images("dog images", max_images=10)
     16 urls

Cell In[17], line 10, in search_images(term, max_images)
      6 with DDGS() as ddgs:
      7     # generator which yields dicts with:
      8     # {'title','image','thumbnail','url','height','width','source'}
      9     search_results = ddgs.images(keywords=term) # returns a generator
---> 10     image_urls = [next(search_results).get("image") for _ in range(max_images)]
     11     # convert to L (functionally extended list class from fastai)
     12     return image_urls

Cell In[17], line 10, in <listcomp>(.0)
      6 with DDGS() as ddgs:
      7     # generator which yields dicts with:
      8     # {'title','image','thumbnail','url','height','width','source'}
      9     search_results = ddgs.images(keywords=term) # returns a generator
---> 10     image_urls = [next(search_results).get("image") for _ in range(max_images)]
     11     # convert to L (functionally extended list class from fastai)
     12     return image_urls

File ~/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py:351, in DDGS.images(self, keywords, region, safesearch, timelimit, size, color, type_image, layout, license_image, max_results)
    326 """DuckDuckGo images search. Query params: https://duckduckgo.com/params
    327 
    328 Args:
   (...)
    347 
    348 """
    349 assert keywords, "keywords is mandatory"
--> 351 vqd = self._get_vqd(keywords)
    352 assert vqd, "error in getting vqd"
    354 safesearch_base = {"on": 1, "moderate": 1, "off": -1}

File ~/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py:59, in DDGS._get_vqd(self, keywords)
     57 def _get_vqd(self, keywords: str) -> Optional[str]:
     58     """Get vqd value for a search query."""
---> 59     resp = self._get_url("POST", "https://duckduckgo.com/", data={"q": keywords})
     60     if resp:
     61         return _extract_vqd(resp.content)

File ~/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py:54, in DDGS._get_url(self, method, url, **kwargs)
     52     logger.warning(f"_get_url() {url} {type(ex).__name__} {ex}")
     53     if i >= 2 or "418" in str(ex):
---> 54         raise ex
     55 sleep(3)

File ~/envs/blog/lib/python3.11/site-packages/duckduckgo_search/duckduckgo_search.py:45, in DDGS._get_url(self, method, url, **kwargs)
     43 for i in range(3):
     44     try:
---> 45         resp = self._client.request(method, url, follow_redirects=True, **kwargs)
     46         if _is_500_in_url(str(resp.url)) or resp.status_code == 202:
     47             raise httpx._exceptions.HTTPError("")

File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:814, in Client.request(self, method, url, content, data, files, json, params, headers, cookies, auth, follow_redirects, timeout, extensions)
    799     warnings.warn(message, DeprecationWarning)
    801 request = self.build_request(
    802     method=method,
    803     url=url,
   (...)
    812     extensions=extensions,
    813 )
--> 814 return self.send(request, auth=auth, follow_redirects=follow_redirects)

File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:901, in Client.send(self, request, stream, auth, follow_redirects)
    893 follow_redirects = (
    894     self.follow_redirects
    895     if isinstance(follow_redirects, UseClientDefault)
    896     else follow_redirects
    897 )
    899 auth = self._build_request_auth(request, auth)
--> 901 response = self._send_handling_auth(
    902     request,
    903     auth=auth,
    904     follow_redirects=follow_redirects,
    905     history=[],
    906 )
    907 try:
    908     if not stream:

File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:929, in Client._send_handling_auth(self, request, auth, follow_redirects, history)
    926 request = next(auth_flow)
    928 while True:
--> 929     response = self._send_handling_redirects(
    930         request,
    931         follow_redirects=follow_redirects,
    932         history=history,
    933     )
    934     try:
    935         try:

File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:966, in Client._send_handling_redirects(self, request, follow_redirects, history)
    963 for hook in self._event_hooks["request"]:
    964     hook(request)
--> 966 response = self._send_single_request(request)
    967 try:
    968     for hook in self._event_hooks["response"]:

File ~/envs/blog/lib/python3.11/site-packages/httpx/_client.py:1002, in Client._send_single_request(self, request)
    997     raise RuntimeError(
    998         "Attempted to send an async request with a sync Client instance."
    999     )
   1001 with request_context(request=request):
-> 1002     response = transport.handle_request(request)
   1004 assert isinstance(response.stream, SyncByteStream)
   1006 response.request = request

File ~/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py:227, in HTTPTransport.handle_request(self, request)
    213 assert isinstance(request.stream, SyncByteStream)
    215 req = httpcore.Request(
    216     method=request.method,
    217     url=httpcore.URL(
   (...)
    225     extensions=request.extensions,
    226 )
--> 227 with map_httpcore_exceptions():
    228     resp = self._pool.handle_request(req)
    230 assert isinstance(resp.stream, typing.Iterable)

File /opt/homebrew/Cellar/python@3.11/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py:155, in _GeneratorContextManager.__exit__(self, typ, value, traceback)
    153     value = typ()
    154 try:
--> 155     self.gen.throw(typ, value, traceback)
    156 except StopIteration as exc:
    157     # Suppress StopIteration *unless* it's the same exception that
    158     # was passed to throw().  This prevents a StopIteration
    159     # raised inside the "with" statement from being suppressed.
    160     return exc is not value

File ~/envs/blog/lib/python3.11/site-packages/httpx/_transports/default.py:83, in map_httpcore_exceptions()
     80     raise
     82 message = str(exc)
---> 83 raise mapped_exc(message) from exc

ConnectTimeout: timed out

Screenshots
Screenshot 2023-11-09 at 2 43 03 PM

Specify this information

  • OS: MacOS 13.4.1
  • environment
$ pip list 
Package                           Version
--------------------------------- ---------
absl-py                           1.4.0
accelerate                        0.20.3
aeiou                             0.0.20
aiofiles                          23.2.1
annotated-types                   0.6.0
anyio                             3.7.1
appdirs                           1.4.4
appnope                           0.1.3
argon2-cffi                       21.3.0
argon2-cffi-bindings              21.2.0
arrow                             1.2.3
asttokens                         2.2.1
astunparse                        1.6.3
async-lru                         2.0.4
attrs                             23.1.0
audioread                         3.0.0
Babel                             2.12.1
backcall                          0.2.0
beautifulsoup4                    4.12.2
black                             23.7.0
bleach                            6.0.0
blis                              0.7.11
bokeh                             3.1.1
braceexpand                       0.1.7
Brotli                            1.1.0
cachetools                        5.3.1
catalogue                         2.0.10
certifi                           2023.5.7
cffi                              1.15.1
charset-normalizer                3.1.0
click                             8.1.7
cloudpathlib                      0.16.0
colorcet                          3.0.1
comm                              0.1.3
confection                        0.1.3
contourpy                         1.0.7
cycler                            0.11.0
cymem                             2.0.8
debugpy                           1.6.7
decorator                         5.1.1
defusedxml                        0.7.1
docker-pycreds                    0.4.0
duckduckgo-search                 3.9.4
einops                            0.6.1
entrypoints                       0.4
execnb                            0.1.5
executing                         1.2.0
fastai                            2.7.13
fastcore                          1.5.29
fastdownload                      0.0.7
fastjsonschema                    2.17.1
fastprogress                      1.0.3
filelock                          3.12.1
flatbuffers                       23.5.26
fonttools                         4.39.4
fqdn                              1.5.1
gast                              0.4.0
ghapi                             1.0.3
gitdb                             4.0.10
GitPython                         3.1.31
google-auth                       2.19.1
google-auth-oauthlib              1.0.0
google-pasta                      0.2.0
grpcio                            1.54.2
h11                               0.14.0
h2                                4.1.0
h5py                              3.8.0
holoviews                         1.16.2
hpack                             4.0.0
httpcore                          1.0.1
httpx                             0.25.1
hyperframe                        6.0.1
idna                              3.4
ipyflow                           0.0.178
ipyflow-core                      0.0.178
ipykernel                         6.23.1
ipython                           8.14.0
ipython-genutils                  0.2.0
ipywidgets                        8.1.0
isoduration                       20.11.0
jedi                              0.18.2
Jinja2                            3.1.2
joblib                            1.2.0
json5                             0.9.14
jsonpointer                       2.4
jsonschema                        4.19.0
jsonschema-specifications         2023.7.1
jupyter                           1.0.0
jupyter_client                    8.3.0
jupyter-console                   6.6.3
jupyter-contrib-core              0.4.2
jupyter_core                      5.3.0
jupyter-events                    0.7.0
jupyter-lsp                       2.2.0
jupyter-nbextensions-configurator 0.6.3
jupyter_server                    2.7.0
jupyter_server_terminals          0.4.4
jupyterlab                        4.0.4
jupyterlab-pygments               0.2.2
jupyterlab_rise                   0.40.0
jupyterlab_server                 2.24.0
jupyterlab-widgets                3.0.8
keras                             2.13.1rc0
kiwisolver                        1.4.4
langcodes                         3.3.0
libclang                          16.0.0
librosa                           0.9.2
linkify-it-py                     2.0.2
llvmlite                          0.40.1rc1
lxml                              4.9.3
Markdown                          3.4.3
markdown-it-py                    2.2.0
MarkupSafe                        2.1.3
matplotlib                        3.7.1
matplotlib-inline                 0.1.6
mdit-py-plugins                   0.4.0
mdurl                             0.1.2
mistune                           3.0.1
mpmath                            1.3.0
mrspuff                           0.0.32
murmurhash                        1.0.10
mypy-extensions                   1.0.0
nbclassic                         1.0.0
nbclient                          0.8.0
nbconvert                         7.7.3
nbdev                             2.3.12
nbformat                          5.9.0
nest-asyncio                      1.5.6
networkx                          3.1
notebook                          7.0.2
notebook_shim                     0.2.3
numba                             0.57.0
numpy                             1.24.3
oauthlib                          3.2.2
opt-einsum                        3.3.0
overrides                         7.4.0
packaging                         23.1
pandas                            2.0.2
pandocfilters                     1.5.0
panel                             1.1.0
param                             1.13.0
parso                             0.8.3
pathspec                          0.11.2
pathtools                         0.1.2
pedalboard                        0.7.3
pexpect                           4.8.0
pickleshare                       0.7.5
Pillow                            9.5.0
pip                               23.2.1
platformdirs                      3.5.3
plotly                            5.15.0
pooch                             1.7.0
preshed                           3.0.9
prometheus-client                 0.17.1
prompt-toolkit                    3.0.38
protobuf                          4.23.2
psutil                            5.9.5
ptyprocess                        0.7.0
pure-eval                         0.2.2
pyasn1                            0.5.0
pyasn1-modules                    0.3.0
pyccolo                           0.0.48
pycparser                         2.21
pyct                              0.5.0
pydantic                          2.4.2
pydantic_core                     2.10.1
Pygments                          2.15.1
pynndescent                       0.5.10
pyparsing                         3.0.9
pyrsistent                        0.19.3
python-dateutil                   2.8.2
python-json-logger                2.0.7
pytz                              2023.3
pyviz-comms                       2.3.1
PyYAML                            6.0
pyzmq                             24.0.1
qtconsole                         5.4.3
QtPy                              2.3.1
quarto                            0.1.0
referencing                       0.30.2
requests                          2.31.0
requests-oauthlib                 1.3.1
resampy                           0.4.2
rfc3339-validator                 0.1.4
rfc3986-validator                 0.1.1
rise                              5.7.1
rpds-py                           0.9.2
rsa                               4.9
scikit-learn                      1.2.2
scipy                             1.10.1
Send2Trash                        1.8.2
sentry-sdk                        1.25.1
setproctitle                      1.3.2
setuptools                        67.6.1
six                               1.16.0
smart-open                        6.4.0
smmap                             5.0.0
sniffio                           1.3.0
socksio                           1.0.0
SoundFile                         0.10.2
soupsieve                         2.4.1
spacy                             3.7.2
spacy-legacy                      3.0.12
spacy-loggers                     1.0.5
srsly                             2.4.8
stack-data                        0.6.2
sympy                             1.12
tenacity                          8.2.2
tensorboard                       2.13.0
tensorboard-data-server           0.7.0
tensorflow                        2.13.0rc1
tensorflow-estimator              2.13.0rc0
tensorflow-macos                  2.13.0rc1
termcolor                         2.3.0
terminado                         0.17.1
thinc                             8.2.1
threadpoolctl                     3.1.0
tinycss2                          1.2.1
torch                             2.0.1
torchaudio                        2.0.2
torchvision                       0.15.2
tornado                           6.3.2
tqdm                              4.65.0
traitlets                         5.9.0
typer                             0.9.0
typing_extensions                 4.6.3
tzdata                            2023.3
uc-micro-py                       1.0.2
umap-learn                        0.5.3
uri-template                      1.3.0
urllib3                           1.26.16
wandb                             0.15.4
wasabi                            1.1.2
watchdog                          3.0.0
wcwidth                           0.2.6
weasel                            0.3.4
webcolors                         1.13
webdataset                        0.2.48
webencodings                      0.5.1
websocket-client                  1.6.1
Werkzeug                          2.3.6
wheel                             0.40.0
widgetsnbextension                4.0.8
wrapt                             1.15.0
xattr                             0.10.1
xyzservices                       2023.5.0
$ env
MANPATH=/opt/homebrew/share/man:
TERM_PROGRAM=Apple_Terminal
GEM_HOME=/Users/shawley/gems
SHELL=/bin/bash
TERM=xterm-256color
KMP_DUPLICATE_LIB_OK=TRUE
HOMEBREW_REPOSITORY=/opt/homebrew
TMPDIR=/var/folders/5s/dkk8t0jn5fv6df9f68j9xddr0000gn/T/
LIBRARY_PATH=/opt/homebrew/lib
PYTHONUNBUFFERED=1
TERM_PROGRAM_VERSION=447
OLDPWD=/Users/shawley/github/blog
TERM_SESSION_ID=87E738C7-EE2E-4ADA-8D3A-93A29BF86763
USER=shawley
CPATH=/opt/homebrew/include
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.J7IfhT2guA/Listeners
PYTORCH_ENABLE_MPS_FALLBACK=1
WINEARCH=win32
BASH_SILENCE_DEPRECATION_WARNING=1
VIRTUAL_ENV=/Users/shawley/envs/blog
LSCOLORS=gxfxcxdxbxegedabagacad
PATH=/Users/shawley/envs/blog/bin:/Users/shawley/.cargo/bin:/Users/shawley/gems/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/opt/X11/bin:/Applications/quarto/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin
LaunchInstanceID=21AB5167-758E-4CC1-AC72-202BB19C92C4
__CFBundleIdentifier=com.apple.Terminal
PWD=/Users/shawley/github/blog/posts
LANG=en_US.UTF-8
XPC_FLAGS=0x0
PS1=(blog) \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ 
CONDA_BASE=/Users/shawley/opt/anaconda3
XPC_SERVICE_NAME=0
SHLVL=1
HOME=/Users/shawley
HOMEBREW_PREFIX=/opt/homebrew
LOGNAME=shawley
INFOPATH=/opt/homebrew/share/info:
HOMEBREW_CELLAR=/opt/homebrew/Cellar
DISPLAY=/private/tmp/com.apple.launchd.00NKVjlcg4/org.xquartz:0
SECURITYSESSIONID=186b3
VIRTUAL_ENV_PROMPT=(blog) 
_=/usr/bin/env
  • duckduckgo_search version 3.9.4

Ah, seems DDG itself is down right now. Can't connect to web site. (Any/all other non-DDG URLs I try work fine so it's not my network)

Screenshot 2023-11-09 at 3 03 33 PM

Will retry code in a few hours 🤞

Thank you for finding the problem!
Fixed in v3.9.5