After having been logged in for half-an-hour (which is tha default duration of a session), the client is unable to log in back.
INFO: 127.0.0.1:64976 - "POST /api/chat/completions HTTP/1.1" 200 OK
[2025-03-04 20:41:32] [WARNING] [ml_api_client.api_client] - Erreur de connexion, nouvelle tentative dans 1.07s (tentative 1/3) : 401, message='Unauthorized', url='https://api.mathislambert.fr/v1/chat/completions'
[2025-03-04 20:41:33] [WARNING] [ml_api_client.api_client] - Erreur de connexion, nouvelle tentative dans 2.19s (tentative 2/3) : 401, message='Unauthorized', url='https://api.mathislambert.fr/v1/chat/completions'
[2025-03-04 20:41:36] [WARNING] [ml_api_client.api_client] - Erreur de connexion, nouvelle tentative dans 4.22s (tentative 3/3) : 401, message='Unauthorized', url='https://api.mathislambert.fr/v1/chat/completions'
ERROR: Exception in ASGI application
+ Exception Group Traceback (most recent call last):
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 180, in __call__
| await response(scope, wrapped_receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 215, in __call__
| async for chunk in self.body_iterator:
| await send({"type": "http.response.body", "body": chunk, "more_body": True})
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 169, in body_stream
| raise app_exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 141, in coro
| await self.app(scope, receive_or_disconnect, send_no_error)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/cors.py", line 93, in __call__
| await self.simple_response(scope, receive, send, request_headers=headers)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/cors.py", line 144, in simple_response
| await self.app(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
| await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
| raise exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
| await app(scope, receive, sender)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 715, in __call__
| await self.middleware_stack(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 735, in app
| await route.handle(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 288, in handle
| await self.app(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 76, in app
| await wrap_app_handling_exceptions(app, request)(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
| raise exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
| await app(scope, receive, sender)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 74, in app
| await response(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 261, in __call__
| async with anyio.create_task_group() as task_group:
| ~~~~~~~~~~~~~~~~~~~~~~~^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 767, in __aexit__
| raise BaseExceptionGroup(
| "unhandled errors in a TaskGroup", self._exceptions
| )
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Traceback (most recent call last):
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
| result = await app( # type: ignore[func-returns-value]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| self.scope, self.receive, self.send
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| )
| ^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
| return await self.app(scope, receive, send)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/fastapi/applications.py", line 1054, in __call__
| await super().__call__(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/applications.py", line 112, in __call__
| await self.middleware_stack(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 187, in __call__
| raise exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 165, in __call__
| await self.app(scope, receive, _send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 177, in __call__
| with recv_stream, send_stream, collapse_excgroups():
| ~~~~~~~~~~~~~~~~~~^^
| File "/opt/homebrew/Cellar/[email protected]/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 162, in __exit__
| self.gen.throw(value)
| ~~~~~~~~~~~~~~^^^^^^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
| raise exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 264, in wrap
| await func()
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 245, in stream_response
| async for chunk in self.body_iterator:
| ...<2 lines>...
| await send({"type": "http.response.body", "body": chunk, "more_body": True})
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/ml_api_client/endpoints/chat.py", line 203, in stream_sse
| raise ConnectionError(
| f"Nombre maximal de tentatives ({self.max_stream_retries}) dépassé : {str(e)}"
| )
| ConnectionError: Nombre maximal de tentatives (3) dépassé : 401, message='Unauthorized', url='https://api.mathislambert.fr/v1/chat/completions'
+------------------------------------
During handling of the above exception, another exception occurred:
+ Exception Group Traceback (most recent call last):
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_utils.py", line 76, in collapse_excgroups
| yield
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 178, in __call__
| async with anyio.create_task_group() as task_group:
| ~~~~~~~~~~~~~~~~~~~~~~~^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 767, in __aexit__
| raise BaseExceptionGroup(
| "unhandled errors in a TaskGroup", self._exceptions
| )
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Traceback (most recent call last):
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 268, in __call__
| await wrap(partial(self.listen_for_disconnect, receive))
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 264, in wrap
| await func()
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 233, in listen_for_disconnect
| message = await receive()
| ^^^^^^^^^^^^^^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 114, in receive_or_disconnect
| async with anyio.create_task_group() as task_group:
| ~~~~~~~~~~~~~~~~~~~~~~~^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 771, in __aexit__
| raise exc_val
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 122, in receive_or_disconnect
| message = await wrap(wrapped_receive)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 117, in wrap
| result = await func()
| ^^^^^^^^^^^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 50, in wrapped_receive
| msg = await self.receive()
| ^^^^^^^^^^^^^^^^^^^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/uvicorn/protocols/http/httptools_impl.py", line 563, in receive
| await self.message_event.wait()
| File "/opt/homebrew/Cellar/[email protected]/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/locks.py", line 213, in wait
| await fut
| asyncio.exceptions.CancelledError: Cancelled by cancel scope 10769a410
|
| During handling of the above exception, another exception occurred:
|
| Exception Group Traceback (most recent call last):
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 180, in __call__
| await response(scope, wrapped_receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 215, in __call__
| async for chunk in self.body_iterator:
| await send({"type": "http.response.body", "body": chunk, "more_body": True})
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 169, in body_stream
| raise app_exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 141, in coro
| await self.app(scope, receive_or_disconnect, send_no_error)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/cors.py", line 93, in __call__
| await self.simple_response(scope, receive, send, request_headers=headers)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/cors.py", line 144, in simple_response
| await self.app(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
| await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
| raise exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
| await app(scope, receive, sender)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 715, in __call__
| await self.middleware_stack(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 735, in app
| await route.handle(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 288, in handle
| await self.app(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 76, in app
| await wrap_app_handling_exceptions(app, request)(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
| raise exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
| await app(scope, receive, sender)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/routing.py", line 74, in app
| await response(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 261, in __call__
| async with anyio.create_task_group() as task_group:
| ~~~~~~~~~~~~~~~~~~~~~~~^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 767, in __aexit__
| raise BaseExceptionGroup(
| "unhandled errors in a TaskGroup", self._exceptions
| )
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Traceback (most recent call last):
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
| result = await app( # type: ignore[func-returns-value]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| self.scope, self.receive, self.send
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| )
| ^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
| return await self.app(scope, receive, send)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/fastapi/applications.py", line 1054, in __call__
| await super().__call__(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/applications.py", line 112, in __call__
| await self.middleware_stack(scope, receive, send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 187, in __call__
| raise exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 165, in __call__
| await self.app(scope, receive, _send)
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 177, in __call__
| with recv_stream, send_stream, collapse_excgroups():
| ~~~~~~~~~~~~~~~~~~^^
| File "/opt/homebrew/Cellar/[email protected]/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 162, in __exit__
| self.gen.throw(value)
| ~~~~~~~~~~~~~~^^^^^^^
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
| raise exc
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 264, in wrap
| await func()
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 245, in stream_response
| async for chunk in self.body_iterator:
| ...<2 lines>...
| await send({"type": "http.response.body", "body": chunk, "more_body": True})
| File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/ml_api_client/endpoints/chat.py", line 203, in stream_sse
| raise ConnectionError(
| f"Nombre maximal de tentatives ({self.max_stream_retries}) dépassé : {str(e)}"
| )
| ConnectionError: Nombre maximal de tentatives (3) dépassé : 401, message='Unauthorized', url='https://api.mathislambert.fr/v1/chat/completions'
+------------------------------------
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
self.scope, self.receive, self.send
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/fastapi/applications.py", line 1054, in __call__
await super().__call__(scope, receive, send)
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/applications.py", line 112, in __call__
await self.middleware_stack(scope, receive, send)
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 187, in __call__
raise exc
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 165, in __call__
await self.app(scope, receive, _send)
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/middleware/base.py", line 177, in __call__
with recv_stream, send_stream, collapse_excgroups():
~~~~~~~~~~~~~~~~~~^^
File "/opt/homebrew/Cellar/[email protected]/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 162, in __exit__
self.gen.throw(value)
~~~~~~~~~~~~~~^^^^^^^
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
raise exc
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 264, in wrap
await func()
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/starlette/responses.py", line 245, in stream_response
async for chunk in self.body_iterator:
...<2 lines>...
await send({"type": "http.response.body", "body": chunk, "more_body": True})
File "/Users/mathis.lambert/Documents/_PERSO/Projets/personal_website/.venv/lib/python3.13/site-packages/ml_api_client/endpoints/chat.py", line 203, in stream_sse
raise ConnectionError(
f"Nombre maximal de tentatives ({self.max_stream_retries}) dépassé : {str(e)}"
)
ConnectionError: Nombre maximal de tentatives (3) dépassé : 401, message='Unauthorized', url='https://api.mathislambert.fr/v1/chat/completions'
After having been logged in for half-an-hour (which is tha default duration of a session), the client is unable to log in back.
Here's the stack trace: