pydantic_graph.persistence
SnapshotStatusmodule-attribute
SnapshotStatus=Literal["created","pending","running","success","error"]
The status of a snapshot.
'created'
: The snapshot has been created but not yet run.'pending'
: The snapshot has been retrieved withload_next
but not yet run.'running'
: The snapshot is currently running.'success'
: The snapshot has been run successfully.'error'
: The snapshot has been run but an error occurred.
NodeSnapshotdataclass
Bases:Generic[StateT,RunEndT]
History step describing the execution of a node in a graph.
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
4445464748495051525354555657585960616263646566 |
|
stateinstance-attribute
state:StateT
The state of the graph before the node is run.
nodeinstance-attribute
The node to run next.
start_tsclass-attribute
instance-attribute
start_ts:datetime|None=None
The timestamp when the node started running,None
until the run starts.
durationclass-attribute
instance-attribute
duration:float|None=None
The duration of the node run in seconds, if the node has been run.
kindclass-attribute
instance-attribute
kind:Literal['node']='node'
The kind of history step, can be used as a discriminator when deserializing history.
EndSnapshotdataclass
Bases:Generic[StateT,RunEndT]
History step describing the end of a graph run.
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
697071727374757677787980818283848586878889909192939495 |
|
stateinstance-attribute
state:StateT
The state of the graph at the end of the run.
tsclass-attribute
instance-attribute
The timestamp when the graph run ended.
kindclass-attribute
instance-attribute
kind:Literal['end']='end'
The kind of history step, can be used as a discriminator when deserializing history.
Snapshotmodule-attribute
Snapshot=Union[NodeSnapshot[StateT,RunEndT],EndSnapshot[StateT,RunEndT],]
A step in the history of a graph run.
Graph.run
returns a list of these steps describing the execution of the graph,together with the run return value.
BaseStatePersistence
Bases:ABC
,Generic[StateT,RunEndT]
Abstract base class for storing the state of a graph run.
Each instance of aBaseStatePersistence
subclass should be used for a single graph run.
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
|
snapshot_nodeabstractmethod
async
Snapshot the state of a graph, when the next step is to run a node.
This method should add aNodeSnapshot
to persistence.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
state | StateT | The state of the graph. | required |
next_node | BaseNode[StateT,Any,RunEndT] | The next node to run. | required |
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
112113114115116117118119120121122 |
|
snapshot_node_if_newabstractmethod
async
Snapshot the state of a graph if the snapshot ID doesn't already exist in persistence.
This method will generally callsnapshot_node
but should do so in an atomic way.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
snapshot_id | str | The ID of the snapshot to check. | required |
state | StateT | The state of the graph. | required |
next_node | BaseNode[StateT,Any,RunEndT] | The next node to run. | required |
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
124125126127128129130131132133134135136137138 |
|
snapshot_endabstractmethod
async
snapshot_end(state:StateT,end:End[RunEndT])->None
Snapshot the state of a graph when the graph has ended.
This method should add anEndSnapshot
to persistence.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
state | StateT | The state of the graph. | required |
end | End[RunEndT] | data from the end of the run. | required |
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
140141142143144145146147148149150 |
|
record_runabstractmethod
record_run(snapshot_id:str,)->AbstractAsyncContextManager[None]
Record the run of the node, or error if the node is already running.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
snapshot_id | str | The ID of the snapshot to record. | required |
Raises:
Type | Description |
---|---|
GraphNodeRunningError | if the node status it not |
LookupError | if the snapshot ID is not found in persistence. |
Returns:
Type | Description |
---|---|
AbstractAsyncContextManager[None] | An async context manager that records the run of the node. |
In particular this should set:
NodeSnapshot.status
to'running'
andNodeSnapshot.start_ts
when the run starts.NodeSnapshot.status
to'success'
or'error'
andNodeSnapshot.duration
when the run finishes.
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
152153154155156157158159160161162163164165166167168169170171172173 |
|
load_nextabstractmethod
async
load_next()->NodeSnapshot[StateT,RunEndT]|None
Retrieve a node snapshot with status'created
' and set its status to'pending'
.
This is used byGraph.iter_from_persistence
to get the next node to run.
Returns: The snapshot, orNone
if no snapshot with status'created
' exists.
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
175176177178179180181182183184 |
|
load_allabstractmethod
async
Load the entire history of snapshots.
load_all
is not used by pydantic-graph itself, instead it's provided to make it convenient toget allsnapshots from persistence.
Returns: The list of snapshots.
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
186187188189190191192193194195 |
|
set_graph_types
Set the types of the state and run end from a graph.
You generally won't need to customise this method, instead implementset_types
andshould_set_types
.
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
197198199200201202203204205206 |
|
should_set_types
should_set_types()->bool
Whether types need to be set.
Implementations should override this method to returnTrue
when types have not been set if they are needed.
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
208209210211212213 |
|
set_types
Set the types of the state and run end.
This can be used to createtype adapters for serializing and deserializing snapshots,e.g. withbuild_snapshot_list_type_adapter
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
state_type | type[StateT] | The state type. | required |
run_end_type | type[RunEndT] | The run end type. | required |
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
215216217218219220221222223224225 |
|
build_snapshot_list_type_adapter
build_snapshot_list_type_adapter(state_t:type[StateT],run_end_t:type[RunEndT])->TypeAdapter[list[Snapshot[StateT,RunEndT]]]
Build a type adapter for a list of snapshots.
This method should be called from withinset_types
where context variables will be set such that Pydantic can create a schema forNodeSnapshot.node
.
Source code inpydantic_graph/pydantic_graph/persistence/__init__.py
228229230231232233234235236237238 |
|
In memory state persistence.
This module provides simple in memory state persistence for graphs.
SimpleStatePersistencedataclass
Bases:BaseStatePersistence[StateT,RunEndT]
Simple in memory state persistence that just hold the latest snapshot.
If no state persistence implementation is provided when running a graph, this is used by default.
Source code inpydantic_graph/pydantic_graph/persistence/in_mem.py
31323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
|
last_snapshotclass-attribute
instance-attribute
last_snapshot:Snapshot[StateT,RunEndT]|None=None
The last snapshot.
FullStatePersistencedataclass
Bases:BaseStatePersistence[StateT,RunEndT]
In memory state persistence that hold a list of snapshots.
Source code inpydantic_graph/pydantic_graph/persistence/in_mem.py
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
|
deep_copyclass-attribute
instance-attribute
deep_copy:bool=True
Whether to deep copy the state and nodes when storing them.
Defaults toTrue
so even if nodes or state are modified after the snapshot is taken,the persistence history will record the value at the time of the snapshot.
historyclass-attribute
instance-attribute
List of snapshots taken during the graph run.
dump_json
Dump the history to JSON bytes.
Source code inpydantic_graph/pydantic_graph/persistence/in_mem.py
157158159160 |
|
load_json
Load the history from JSON.
Source code inpydantic_graph/pydantic_graph/persistence/in_mem.py
162163164165 |
|
FileStatePersistencedataclass
Bases:BaseStatePersistence[StateT,RunEndT]
File based state persistence that hold graph run state in a JSON file.
Source code inpydantic_graph/pydantic_graph/persistence/file.py
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
|
json_fileinstance-attribute
json_file:Path
Path to the JSON file where the snapshots are stored.
You should use a different file for each graph run, but a single file should be reused for multiplesteps of the same run.
For example if you have a run ID of the formrun_123abc
, you might create aFileStatePersistence
thus:
frompathlibimportPathfrompydantic_graphimportFullStatePersistencerun_id='run_123abc'persistence=FullStatePersistence(Path('runs')/f'{run_id}.json')
should_set_types
should_set_types()->bool
Whether types need to be set.
Source code inpydantic_graph/pydantic_graph/persistence/file.py
104105106 |
|