-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add docstring to RemoteGraph
#2217
Changes from 6 commits
88f3d64
a49d9e6
f94dfad
aa99707
08d2afd
1769c49
b2abca5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
from typing import ( | ||
Check notice on line 1 in libs/langgraph/langgraph/pregel/remote.py GitHub Actions / benchmarkBenchmark results
Check notice on line 1 in libs/langgraph/langgraph/pregel/remote.py GitHub Actions / benchmarkComparison against main
|
||
Any, | ||
AsyncIterator, | ||
Iterator, | ||
|
@@ -46,6 +46,16 @@ | |
|
||
|
||
class RemoteGraph(PregelProtocol): | ||
"""The RemoteGraph class is a client implementation for calling remote | ||
APIs that implement the Open Agent API Specification. | ||
|
||
For example, the RemoteGraph class can be used to call LangGraph Cloud | ||
APIs. | ||
|
||
RemoteGraph behaves the same way as a Graph and can be used directly as | ||
a node in another Graph. | ||
""" | ||
|
||
name: str | ||
|
||
def __init__( | ||
|
@@ -63,7 +73,17 @@ | |
"""Specify `url`, `api_key`, and/or `headers` to create default sync and async clients. | ||
|
||
If `client` or `sync_client` are provided, they will be used instead of the default clients. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i would also add that if at least one of the 3 (url/client/sync_client) needs to be specified. something similar to how i describe in this how-to guide maybe https://github.com/langchain-ai/langgraph/pull/2218/files |
||
See `LangGraphClient` and `SyncLangGraphClient` for details on the default clients. | ||
See `LangGraphClient` and `SyncLangGraphClient` for details on the default clients. At least | ||
one of `url`, `client`, or `sync_client` must be provided. | ||
|
||
Args: | ||
name: The name of the graph. | ||
url: The URL of the remote API. | ||
api_key: The API key to use for authentication. If not provided, it will be read from the environment (LANGGRAPH_API_KEY, LANGSMITH_API_KEY, or LANGCHAIN_API_KEY). | ||
headers: Additional headers to include in the requests. | ||
client: A LangGraphClient instance to use instead of creating a default client. | ||
sync_client: A SyncLangGraphClient instance to use instead of creating a default client. | ||
config: An optional RunnableConfig instance with additional configuration. | ||
""" | ||
self.name = name | ||
self.config = config | ||
|
@@ -121,6 +141,19 @@ | |
*, | ||
xray: Union[int, bool] = False, | ||
) -> DrawableGraph: | ||
"""Get graph by graph name. | ||
|
||
This method calls GET /assistants/{assistant_id}/graph. | ||
|
||
Args: | ||
config: This parameter is not used. | ||
xray: Include graph representation of subgraphs. If an integer | ||
value is provided, only subgraphs with a depth less than or | ||
equal to the value will be included. | ||
|
||
Returns: | ||
DrawableGraph: The graph information for the assistant in JSON format. | ||
""" | ||
sync_client = self._validate_sync_client() | ||
graph = sync_client.assistants.get_graph( | ||
assistant_id=self.name, | ||
|
@@ -137,6 +170,19 @@ | |
*, | ||
xray: Union[int, bool] = False, | ||
) -> DrawableGraph: | ||
"""Get graph by graph name. | ||
|
||
This method calls GET /assistants/{assistant_id}/graph. | ||
|
||
Args: | ||
config: This parameter is not used. | ||
xray: Include graph representation of subgraphs. If an integer | ||
value is provided, only subgraphs with a depth less than or | ||
equal to the value will be included. | ||
|
||
Returns: | ||
DrawableGraph: The graph information for the assistant in JSON format. | ||
""" | ||
client = self._validate_client() | ||
graph = await client.assistants.get_graph( | ||
assistant_id=self.name, | ||
|
@@ -268,6 +314,20 @@ | |
def get_state( | ||
self, config: RunnableConfig, *, subgraphs: bool = False | ||
) -> StateSnapshot: | ||
"""Get the state of a thread. | ||
|
||
This method calls POST /threads/{thread_id}/state/checkpoint if a | ||
checkpoint is specified in the config or GET /threads/{thread_id}/state | ||
if no checkpoint is specified. | ||
|
||
Args: | ||
config: A RunnableConfig that includes `thread_id` in the | ||
`configurable` field. | ||
subgraphs: Include subgraphs in the state. | ||
|
||
Returns: | ||
StateSnapshot: The latest state of the thread. | ||
""" | ||
sync_client = self._validate_sync_client() | ||
merged_config = merge_configs(self.config, config) | ||
|
||
|
@@ -281,6 +341,20 @@ | |
async def aget_state( | ||
self, config: RunnableConfig, *, subgraphs: bool = False | ||
) -> StateSnapshot: | ||
"""Get the state of a thread. | ||
|
||
This method calls POST /threads/{thread_id}/state/checkpoint if a | ||
checkpoint is specified in the config or GET /threads/{thread_id}/state | ||
if no checkpoint is specified. | ||
|
||
Args: | ||
config: A RunnableConfig that includes `thread_id` in the | ||
`configurable` field. | ||
subgraphs: Include subgraphs in the state. | ||
|
||
Returns: | ||
StateSnapshot: The latest state of the thread. | ||
""" | ||
client = self._validate_client() | ||
merged_config = merge_configs(self.config, config) | ||
|
||
|
@@ -299,6 +373,20 @@ | |
before: Optional[RunnableConfig] = None, | ||
limit: Optional[int] = None, | ||
) -> Iterator[StateSnapshot]: | ||
"""Get the state history of a thread. | ||
|
||
This method calls POST /threads/{thread_id}/history. | ||
|
||
Args: | ||
config: A RunnableConfig that includes `thread_id` in the | ||
`configurable` field. | ||
filter: Metadata to filter on. | ||
before: A RunnableConfig that includes checkpoint metadata. | ||
limit: Max number of states to return. | ||
|
||
Returns: | ||
Iterator[StateSnapshot]: States of the thread. | ||
""" | ||
sync_client = self._validate_sync_client() | ||
merged_config = merge_configs(self.config, config) | ||
|
||
|
@@ -320,6 +408,20 @@ | |
before: Optional[RunnableConfig] = None, | ||
limit: Optional[int] = None, | ||
) -> AsyncIterator[StateSnapshot]: | ||
"""Get the state history of a thread. | ||
|
||
This method calls POST /threads/{thread_id}/history. | ||
|
||
Args: | ||
config: A RunnableConfig that includes `thread_id` in the | ||
`configurable` field. | ||
filter: Metadata to filter on. | ||
before: A RunnableConfig that includes checkpoint metadata. | ||
limit: Max number of states to return. | ||
|
||
Returns: | ||
Iterator[StateSnapshot]: States of the thread. | ||
""" | ||
client = self._validate_client() | ||
merged_config = merge_configs(self.config, config) | ||
|
||
|
@@ -339,6 +441,19 @@ | |
values: Optional[Union[dict[str, Any], Any]], | ||
as_node: Optional[str] = None, | ||
) -> RunnableConfig: | ||
"""Update the state of a thread. | ||
|
||
This method calls POST /threads/{thread_id}/state. | ||
|
||
Args: | ||
config: A RunnableConfig that includes `thread_id` in the | ||
`configurable` field. | ||
values: Values to update to the state. | ||
as_node: Update the state as if this node had just executed. | ||
|
||
Returns: | ||
RunnableConfig: RunnableConfig for the updated thread. | ||
""" | ||
sync_client = self._validate_sync_client() | ||
merged_config = merge_configs(self.config, config) | ||
|
||
|
@@ -356,6 +471,19 @@ | |
values: Optional[Union[dict[str, Any], Any]], | ||
as_node: Optional[str] = None, | ||
) -> RunnableConfig: | ||
"""Update the state of a thread. | ||
|
||
This method calls POST /threads/{thread_id}/state. | ||
|
||
Args: | ||
config: A RunnableConfig that includes `thread_id` in the | ||
`configurable` field. | ||
values: Values to update to the state. | ||
as_node: Update the state as if this node had just executed. | ||
|
||
Returns: | ||
RunnableConfig: RunnableConfig for the updated thread. | ||
""" | ||
client = self._validate_client() | ||
merged_config = merge_configs(self.config, config) | ||
|
||
|
@@ -408,6 +536,23 @@ | |
interrupt_after: Optional[Union[All, Sequence[str]]] = None, | ||
subgraphs: bool = False, | ||
) -> Iterator[Union[dict[str, Any], Any]]: | ||
"""Create a run and stream the results. | ||
|
||
This method calls POST /threads/{thread_id}/runs/stream if a `thread_id` | ||
is speciffed in the `configurable` field of the config or | ||
POST /runs/stream otherwise. | ||
|
||
Args: | ||
input: Input to the graph. | ||
config: A RunnableConfig for graph invocation. | ||
stream_mode: Stream mode(s) to use. | ||
interrupt_before: Interrupt the graph before these nodes. | ||
interrupt_after: Interrupt the graph after these nodes. | ||
subgraphs: Stream from subgraphs. | ||
|
||
Yields: | ||
Iterator[Union[dict[str, Any], Any]]: The output of the graph. | ||
""" | ||
sync_client = self._validate_sync_client() | ||
merged_config = merge_configs(self.config, config) | ||
sanitized_config = self._sanitize_config(merged_config) | ||
|
@@ -456,6 +601,23 @@ | |
interrupt_after: Optional[Union[All, Sequence[str]]] = None, | ||
subgraphs: bool = False, | ||
) -> AsyncIterator[Union[dict[str, Any], Any]]: | ||
"""Create a run and stream the results. | ||
|
||
This method calls POST /threads/{thread_id}/runs/stream if a `thread_id` | ||
is speciffed in the `configurable` field of the config or | ||
POST /runs/stream otherwise. | ||
|
||
Args: | ||
input: Input to the graph. | ||
config: A RunnableConfig for graph invocation. | ||
stream_mode: Stream mode(s) to use. | ||
interrupt_before: Interrupt the graph before these nodes. | ||
interrupt_after: Interrupt the graph after these nodes. | ||
subgraphs: Stream from subgraphs. | ||
|
||
Yields: | ||
Iterator[Union[dict[str, Any], Any]]: The output of the graph. | ||
""" | ||
client = self._validate_client() | ||
merged_config = merge_configs(self.config, config) | ||
sanitized_config = self._sanitize_config(merged_config) | ||
|
@@ -518,6 +680,21 @@ | |
interrupt_before: Optional[Union[All, Sequence[str]]] = None, | ||
interrupt_after: Optional[Union[All, Sequence[str]]] = None, | ||
) -> Union[dict[str, Any], Any]: | ||
"""Create a run, wait until it finishes and return the final state. | ||
|
||
This method calls POST /threads/{thread_id}/runs/wait if a `thread_id` | ||
is speciffed in the `configurable` field of the config or | ||
POST /runs/wait otherwise. | ||
|
||
Args: | ||
input: Input to the graph. | ||
config: A RunnableConfig for graph invocation. | ||
interrupt_before: Interrupt the graph before these nodes. | ||
interrupt_after: Interrupt the graph after these nodes. | ||
|
||
Returns: | ||
Union[dict[str, Any], Any]: The output of the graph. | ||
""" | ||
sync_client = self._validate_sync_client() | ||
merged_config = merge_configs(self.config, config) | ||
sanitized_config = self._sanitize_config(merged_config) | ||
|
@@ -540,6 +717,21 @@ | |
interrupt_before: Optional[Union[All, Sequence[str]]] = None, | ||
interrupt_after: Optional[Union[All, Sequence[str]]] = None, | ||
) -> Union[dict[str, Any], Any]: | ||
"""Create a run, wait until it finishes and return the final state. | ||
|
||
This method calls POST /threads/{thread_id}/runs/wait if a `thread_id` | ||
is speciffed in the `configurable` field of the config or | ||
POST /runs/wait otherwise. | ||
|
||
Args: | ||
input: Input to the graph. | ||
config: A RunnableConfig for graph invocation. | ||
interrupt_before: Interrupt the graph before these nodes. | ||
interrupt_after: Interrupt the graph after these nodes. | ||
|
||
Returns: | ||
Union[dict[str, Any], Any]: The output of the graph. | ||
""" | ||
client = self._validate_client() | ||
merged_config = merge_configs(self.config, config) | ||
sanitized_config = self._sanitize_config(merged_config) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Open Agent API Specification"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changed to
LangGraph Server API specification
.