Human In the Loop middleware with aync invocation of the langchain agent using .ainvoke() fails

Hi,
I have setup a HITL middleware with langchain agent to ask approval before executing a tool call.
currently all my tools are defined asynchronously and the agent is also invoked using “await agent.ainvoke()” . My application worked perfectly untill i added the HITL middleware. i get the error when i query the agent to use the tool mentioned in the middleware :-

Traceback (most recent call last):
File “/home/vaishnav/.local/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py”, line 409, in run_asgi
result = await app(  # type: ignore\[func-returns-value\]
File “/home/vaishnav/.local/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py”, line 60, in **call**
return await self.app(scope, receive, send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/fastapi/applications.py”, line 1054, in **call**
await super().**call**(scope, receive, send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/applications.py”, line 112, in **call**
await self.middleware_stack(scope, receive, send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/middleware/errors.py”, line 187, in **call**
raise exc
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/middleware/errors.py”, line 165, in **call**
await self.app(scope, receive, \_send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/middleware/cors.py”, line 93, in **call**
await self.simple_response(scope, receive, send, request_headers=headers)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/middleware/cors.py”, line 144, in simple_response
await self.app(scope, receive, send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/middleware/exceptions.py”, line 62, in **call**
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/\_exception_handler.py”, line 53, in wrapped_app
raise exc
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/\_exception_handler.py”, line 42, in wrapped_app
await app(scope, receive, sender)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/routing.py”, line 714, in **call**
await self.middleware_stack(scope, receive, send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/routing.py”, line 734, in app
await route.handle(scope, receive, send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/routing.py”, line 288, in handle
await self.app(scope, receive, send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/routing.py”, line 76, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/\_exception_handler.py”, line 53, in wrapped_app
raise exc
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/\_exception_handler.py”, line 42, in wrapped_app
await app(scope, receive, sender)
File “/home/vaishnav/.local/lib/python3.10/site-packages/starlette/routing.py”, line 73, in app
response = await f(request)
File “/home/vaishnav/.local/lib/python3.10/site-packages/fastapi/routing.py”, line 301, in app
raw_response = await run_endpoint_function(
File “/home/vaishnav/.local/lib/python3.10/site-packages/fastapi/routing.py”, line 212, in run_endpoint_function
return await dependant.call(\*\*values)
File “/home/vaishnav/llm_nav/x86/new_tts_agent.py”, line 1950, in chat
agent_raw_response = await drone_controlling_agent.ainvoke(
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langgraph/pregel/main.py”, line 3161, in ainvoke
async for chunk in self.astream(
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langgraph/pregel/main.py”, line 2974, in astream
async for \_ in runner.atick(
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langgraph/pregel/\_runner.py”, line 304, in atick
await arun_with_retry(
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langgraph/pregel/\_retry.py”, line 138, in arun_with_retry
return await task.proc.ainvoke(task.input, config)
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langgraph/\_internal/\_runnable.py”, line 709, in ainvoke
input = await step.ainvoke(input, config, \*\*kwargs)
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langgraph/\_internal/\_runnable.py”, line 473, in ainvoke
ret = await self.afunc(\*args, \*\*kwargs)
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langchain/agents/middleware/human_in_the_loop.py”, line 381, in aafter_model
return self.after_model(state, runtime)
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langchain/agents/middleware/human_in_the_loop.py”, line 331, in after_model
decisions = interrupt(hitl_request)\[“decisions”\]
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langgraph/types.py”, line 515, in interrupt
conf = get_config()\[“configurable”\]
File “/home/vaishnav/llm_nav/venv_lang2p0/lib/python3.10/site-packages/langgraph/config.py”, line 29, in get_config
raise RuntimeError(“Called get_config outside of a runnable context”)
RuntimeError: Called get_config outside of a runnable context

Please help me fix this

hi @Vaishnav

could you please format your post using preformatted text button for code block, logs etc.
And share your code please - without it we can’t debug efficiently.

Try to upgrade your Python version from 3.10 to 3.11 and let me know is the issue is still there

Hi Pawel,

I am unable to move to python 3.11 as I have other dependencies for other tools and libraries for ASR,TTS etc which all run on python 3.10.12

can you help me figure out a solution to this ?

On Python < 3.11, LangGraph/LangChain can’t reliably propagate the Runnable config context into async tasks the way interrupts need.

Can you decouple LangChain/LangGraph and ASR, TTS etc? What are the packages that block you from the upgrade?

@Vaishnav have you tried using uvpackage manager? If you are using poetry or pip, you may encounter errors trying to upgrade or change package versions/python version. Using uv, it automatically handles package versions so all of them are compatible.