mirror of
https://github.com/langchain-ai/docs.git
synced 2026-08-27 02:41:59 -04:00
57 lines
1.8 KiB
Plaintext
57 lines
1.8 KiB
Plaintext
```python
|
|
import time
|
|
|
|
from langchain_core.utils.uuid import uuid7
|
|
from langgraph.checkpoint.memory import InMemorySaver
|
|
from langgraph.func import entrypoint, task
|
|
from langgraph.types import Command, interrupt
|
|
|
|
|
|
@task
|
|
def write_essay(topic: str) -> str:
|
|
"""Write an essay about the given topic."""
|
|
time.sleep(1) # This is a placeholder for a long-running task.
|
|
return f"An essay about topic: {topic}"
|
|
|
|
|
|
@entrypoint(checkpointer=InMemorySaver())
|
|
def workflow(topic: str) -> dict:
|
|
"""A simple workflow that writes an essay and asks for a review."""
|
|
essay = write_essay("cat").result()
|
|
is_approved = interrupt(
|
|
{
|
|
# Any json-serializable payload provided to interrupt as argument.
|
|
# It will be surfaced on the client side as an Interrupt when streaming data
|
|
# from the workflow.
|
|
"essay": essay, # The essay we want reviewed.
|
|
# We can add any additional information that we need.
|
|
# For example, introduce a key called "action" with some instructions.
|
|
"action": "Please approve/reject the essay",
|
|
}
|
|
)
|
|
return {
|
|
"essay": essay, # The essay that was generated
|
|
"is_approved": is_approved, # Response from HIL
|
|
}
|
|
|
|
|
|
thread_id = str(uuid7())
|
|
config = {"configurable": {"thread_id": thread_id}}
|
|
stream = workflow.stream_events("cat", config, version="v3")
|
|
_ = stream.output
|
|
print({"write_essay": stream.interrupts[0].value["essay"]})
|
|
print({"__interrupt__": stream.interrupts})
|
|
# {'write_essay': 'An essay about topic: cat'}
|
|
# {
|
|
# '__interrupt__': [
|
|
# Interrupt(
|
|
# value={
|
|
# 'essay': 'An essay about topic: cat',
|
|
# 'action': 'Please approve/reject the essay'
|
|
# },
|
|
# id='369d44b3d93d4a631ae583367ac6b5cc'
|
|
# )
|
|
# ]
|
|
# }
|
|
```
|