From 745b96eb63851aa1d6f4d88fc0d0685b58e46400 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Wed, 24 Jul 2024 08:50:32 -0700 Subject: [PATCH 1/2] Fix recursion limit considering steps taken in previous runs on same thread --- libs/langgraph/langgraph/pregel/loop.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/langgraph/langgraph/pregel/loop.py b/libs/langgraph/langgraph/pregel/loop.py index ae2ba2edf..877f49f56 100644 --- a/libs/langgraph/langgraph/pregel/loop.py +++ b/libs/langgraph/langgraph/pregel/loop.py @@ -102,6 +102,7 @@ class PregelLoop: checkpoint_pending_writes: List[PendingWrite] step: int + stop: int status: Literal[ "pending", "done", "interrupt_before", "interrupt_after", "out_of_steps" ] @@ -203,7 +204,7 @@ class PregelLoop: return False # check if iteration limit is reached - if self.step > self.config["recursion_limit"]: + if self.step > self.stop: self.status = "out_of_steps" return False @@ -419,6 +420,7 @@ class SyncPregelLoop(PregelLoop, ContextManager): ) self.status = "pending" self.step = self.checkpoint_metadata["step"] + 1 + self.stop = self.step + self.config["recursion_limit"] + 2 return self @@ -497,6 +499,7 @@ class AsyncPregelLoop(PregelLoop, AsyncContextManager): ) self.status = "pending" self.step = self.checkpoint_metadata["step"] + 1 + self.stop = self.step + self.config["recursion_limit"] + 2 return self From 03f9b27e3b3ac15179a0829e8f7644d57a8cb9b4 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Wed, 24 Jul 2024 09:26:49 -0700 Subject: [PATCH 2/2] Fix --- libs/langgraph/langgraph/pregel/loop.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/langgraph/langgraph/pregel/loop.py b/libs/langgraph/langgraph/pregel/loop.py index 877f49f56..8373a1fba 100644 --- a/libs/langgraph/langgraph/pregel/loop.py +++ b/libs/langgraph/langgraph/pregel/loop.py @@ -420,7 +420,7 @@ class SyncPregelLoop(PregelLoop, ContextManager): ) self.status = "pending" self.step = self.checkpoint_metadata["step"] + 1 - self.stop = self.step + self.config["recursion_limit"] + 2 + self.stop = self.step + self.config["recursion_limit"] + 1 return self @@ -499,7 +499,7 @@ class AsyncPregelLoop(PregelLoop, AsyncContextManager): ) self.status = "pending" self.step = self.checkpoint_metadata["step"] + 1 - self.stop = self.step + self.config["recursion_limit"] + 2 + self.stop = self.step + self.config["recursion_limit"] + 1 return self