raise on update input

This commit is contained in:
Sydney Runkle
2026-03-09 11:00:34 -04:00
parent e00a027579
commit 4826222d4d
2 changed files with 32 additions and 0 deletions
+8
View File
@@ -637,6 +637,14 @@ class PregelLoop:
# map command to writes
if isinstance(self.input, Command):
if self.input.resume is not None and self.input.update:
raise ValueError(
"Command(resume=..., update=...) is not allowed as graph input. "
"Use Command(resume=...) to resume execution, or use "
"graph.update_state(...) to update state before resuming. "
"Note: Command(update=...) can still be used as a return "
"value from a node to update graph state."
)
if (resume := self.input.resume) is not None:
if not self.checkpointer:
raise RuntimeError(
+24
View File
@@ -5850,6 +5850,30 @@ def test_task_before_interrupt_resume(
assert result == {"answers": ["answer1", "answer2"]}
def test_command_resume_with_update_raises(
sync_checkpointer: BaseCheckpointSaver,
) -> None:
"""Test that Command(resume=..., update=...) raises InvalidUpdateError
when used as graph input."""
@entrypoint(checkpointer=sync_checkpointer)
def workflow(inputs: str) -> str:
answer = interrupt("question")
return answer
config = {"configurable": {"thread_id": "1"}}
# First invocation triggers interrupt
result = workflow.invoke("start", config=config)
assert "__interrupt__" in result
# Resuming with both resume and update should raise
with pytest.raises(ValueError, match="Command\\(resume=.*update="):
workflow.invoke(
Command(resume="answer", update={"foo": "bar"}), config=config
)
def test_multiple_tasks_before_interrupt_resume(
sync_checkpointer: BaseCheckpointSaver,
) -> None: