langchain-ai / langgraph-studio

Desktop app for prototyping and debugging LangGraph applications locally.
https://studio.langchain.com
1.78k stars 119 forks source link

Error while loading previous threads #111

Closed itsabhinavjain closed 1 month ago

itsabhinavjain commented 1 month ago

While loading previous threads, there is an error message : Keyerror: 'recursion_limit' PS : Newbie here, might be making some silly mistake.

The problem

I have specified two agents defined in langgraph.json

{
    "dependencies": ["."],
    "graphs": {
      "react_agent": "./apps/samples/agent_langgraph_basic_react_agent/langgraph_graph.py:graph",
      "ph_competition_agent": "./apps/samples/agent_langgraph_ph_competitor_analysis/langgraph_graph.py:graph"
    },
    "env": "../.env"
}

While loading previous threads (historical), I get the following error : Keyerror: 'recursion_limit'

The individual agents work fine, but the right side window just refreshes to blank after sometime.

Sharing the output of the log

  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 163, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 149, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/api/langgraph_api/shared/http_logger.py", line 39, in __call__
  File "/api/langgraph_api/shared/http_logger.py", line 33, in __call__
  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)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
    await route.handle(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 460, in handle
    await self.app(scope, receive, send)
  File "/api/langgraph_api/auth/middleware.py", line 36, in __call__
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/authentication.py", line 48, in __call__
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
    await route.handle(scope, receive, send)
  File "/api/langgraph_api/shared/route.py", line 120, in handle
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 288, in handle
    await self.app(scope, receive, send)
  File "/api/langgraph_api/shared/route.py", line 37, in app
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
    await app(scope, receive, sender)
  File "/api/langgraph_api/shared/route.py", line 32, in app
  File "/usr/local/lib/python3.11/site-packages/langgraph_storage/retry.py", line 27, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/api/langgraph_api/api/threads.py", line 134, in get_thread_history_post
  File "/usr/local/lib/python3.11/site-packages/langgraph_storage/ops.py", line 481, in list
    return [
           ^
  File "/usr/local/lib/python3.11/site-packages/langgraph_storage/ops.py", line 481, in <listcomp>
    return [
           ^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/__init__.py", line 703, in aget_state_history
    yield await self._aprepare_state_snapshot(
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/__init__.py", line 485, in _aprepare_state_snapshot
    next_tasks = prepare_next_tasks(
                 ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/algo.py", line 301, in prepare_next_tasks
    if task := prepare_single_task(
               ^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/algo.py", line 452, in prepare_single_task
    val = next(
          ^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/algo.py", line 564, in _proc_input
    val[k] = managed[k](step)
             ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/managed/is_last_step.py", line 8, in __call__
    return step == self.config["recursion_limit"] - 1
                   ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
KeyError: 'recursion_limit'
langgraph-api-1       | info | POST /threads/2c533fb3-338f-499d-9f12-d3a6c0f63038/history 500 7ms
langgraph-api-1       | info | GET /threads/2c533fb3-338f-499d-9f12-d3a6c0f63038 200 14ms
langgraph-api-1       | info | GET /assistants/a5133e30-a744-59af-bf19-44e060d347ad/schemas 200 12ms
langgraph-api-1       | info | GET /assistants/a5133e30-a744-59af-bf19-44e060d347ad/graph 200 21ms
langgraph-api-1       | info | POST /assistants/search 200 15ms
langgraph-api-1       | info | POST /threads/search 200 12ms
langgraph-api-1       | error | Exception in ASGI application
 |   + Exception Group Traceback (most recent call last):
  |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 77, in collapse_excgroups
  |     yield
  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 186, in __call__
  |     async with anyio.create_task_group() as task_group:
  |   File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 680, in __aexit__
  |     raise BaseExceptionGroup(
  | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 401, in run_asgi
    |     result = await app(  # type: ignore[func-returns-value]
    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 70, in __call__
    |     return await self.app(scope, receive, send)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 113, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 187, in __call__
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 165, in __call__
    |     await self.app(scope, receive, _send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 93, in __call__
    |     await self.simple_response(scope, receive, send, request_headers=headers)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 144, in simple_response
    |     await self.app(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 185, in __call__
    |     with collapse_excgroups():
    |   File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    |     self.gen.throw(typ, value, traceback)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 83, in collapse_excgroups
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 187, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/langgraph_license/middleware.py", line 26, in dispatch
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 163, in call_next
    |     raise app_exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 149, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/api/langgraph_api/shared/http_logger.py", line 39, in __call__
    |   File "/api/langgraph_api/shared/http_logger.py", line 33, in __call__
    |   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)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
    |     await route.handle(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 460, in handle
    |     await self.app(scope, receive, send)
    |   File "/api/langgraph_api/auth/middleware.py", line 36, in __call__
    |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/authentication.py", line 48, in __call__
    |     await self.app(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
    |     await route.handle(scope, receive, send)
    |   File "/api/langgraph_api/shared/route.py", line 120, in handle
    |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 288, in handle
    |     await self.app(scope, receive, send)
    |   File "/api/langgraph_api/shared/route.py", line 37, in app
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
    |     raise exc
    |   File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/api/langgraph_api/shared/route.py", line 32, in app
    |   File "/usr/local/lib/python3.11/site-packages/langgraph_storage/retry.py", line 27, in wrapper
    |     return await func(*args, **kwargs)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/api/langgraph_api/api/threads.py", line 134, in get_thread_history_post
    |   File "/usr/local/lib/python3.11/site-packages/langgraph_storage/ops.py", line 481, in list
    |     return [
    |            ^
    |   File "/usr/local/lib/python3.11/site-packages/langgraph_storage/ops.py", line 481, in <listcomp>
    |     return [
    |            ^
    |   File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/__init__.py", line 703, in aget_state_history
    |     yield await self._aprepare_state_snapshot(
    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/__init__.py", line 485, in _aprepare_state_snapshot
    |     next_tasks = prepare_next_tasks(
    |                  ^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/algo.py", line 301, in prepare_next_tasks
    |     if task := prepare_single_task(
    |                ^^^^^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/algo.py", line 452, in prepare_single_task
    |     val = next(
    |           ^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/algo.py", line 564, in _proc_input
    |     val[k] = managed[k](step)
    |              ^^^^^^^^^^^^^^^^
    |   File "/usr/local/lib/python3.11/site-packages/langgraph/managed/is_last_step.py", line 8, in __call__
    |     return step == self.config["recursion_limit"] - 1
    |                    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
    | KeyError: 'recursion_limit'
    +------------------------------------

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 401, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 70, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 113, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 187, in __call__
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 165, in __call__
    await self.app(scope, receive, _send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 93, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 144, in simple_response
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 185, in __call__
    with collapse_excgroups():
  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/usr/local/lib/python3.11/site-packages/starlette/_utils.py", line 83, in collapse_excgroups
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 187, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph_license/middleware.py", line 26, in dispatch
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 163, in call_next
    raise app_exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/base.py", line 149, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/api/langgraph_api/shared/http_logger.py", line 39, in __call__
  File "/api/langgraph_api/shared/http_logger.py", line 33, in __call__
  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)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
    await route.handle(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 460, in handle
    await self.app(scope, receive, send)
  File "/api/langgraph_api/auth/middleware.py", line 36, in __call__
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/authentication.py", line 48, in __call__
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 715, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
    await route.handle(scope, receive, send)
  File "/api/langgraph_api/shared/route.py", line 120, in handle
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 288, in handle
    await self.app(scope, receive, send)
  File "/api/langgraph_api/shared/route.py", line 37, in app
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 62, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 51, in wrapped_app
    await app(scope, receive, sender)
  File "/api/langgraph_api/shared/route.py", line 32, in app
  File "/usr/local/lib/python3.11/site-packages/langgraph_storage/retry.py", line 27, in wrapper
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/api/langgraph_api/api/threads.py", line 134, in get_thread_history_post
  File "/usr/local/lib/python3.11/site-packages/langgraph_storage/ops.py", line 481, in list
    return [
           ^
  File "/usr/local/lib/python3.11/site-packages/langgraph_storage/ops.py", line 481, in <listcomp>
    return [
           ^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/__init__.py", line 703, in aget_state_history
    yield await self._aprepare_state_snapshot(
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/__init__.py", line 485, in _aprepare_state_snapshot
    next_tasks = prepare_next_tasks(
                 ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/algo.py", line 301, in prepare_next_tasks
    if task := prepare_single_task(
               ^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/algo.py", line 452, in prepare_single_task
    val = next(
          ^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/pregel/algo.py", line 564, in _proc_input
    val[k] = managed[k](step)
             ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/langgraph/managed/is_last_step.py", line 8, in __call__
    return step == self.config["recursion_limit"] - 1
                   ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
KeyError: 'recursion_limit'
langgraph-api-1       | info | POST /threads/2c533fb3-338f-499d-9f12-d3a6c0f63038/history 500 10ms
itsabhinavjain commented 1 month ago

Additional details

LangGraph Studio Version - 0.0.21 (0.0.21) Macbook Air M1 2020 OS : Sonoma 14.6.1

Screenshot 2024-09-12 at 8 00 04 PM
isahers1 commented 1 month ago

What version of LangGraph are you using? Could you upgrade to 0.2.19 and see if that fixes the issue?

itsabhinavjain commented 1 month ago

I just checked, I am using the latest version. (No option to update)

Screenshot attached

Screenshot 2024-09-12 at 9 36 59 PM
vbarda commented 1 month ago

this should be fixed in 0.2.20 -- please confirm if updating resolves your issue

itsabhinavjain commented 1 month ago

The latest update fixed the issue. Thanks.