Library with an OpenSearch implementation of LangGraph checkpoint saver.
Project description
LangGraph OpenSearch
This repository contains OpenSearch implementations for LangGraph, providing Checkpoint Savers functionality.
Overview
The project consists of:
- OpenSearch Checkpoint Savers: Implementations for storing and managing checkpoints using OpenSearch
Dependencies
Python Dependencies
The project requires the following main Python dependencies:
opensearch-py>=2.0.0langgraph-checkpoint>=2.0.24
OpenSearch Requirements
Ensure your OpenSearch instance is properly configured and accessible.
Installation
Install the library using pip:
pip install langgraph-opensearch
OpenSearch Checkpoint Savers
Standard Implementation
# Initialize OpenSearchSaver with the graph
import os
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END, MessagesState
from langgraph.checkpoint.opensearch import OpenSearchSaver
from langchain_openai import ChatOpenAI
from langchain_core.messages import (
AIMessage,
HumanMessage,
SystemMessage,
)
from opensearchpy import OpenSearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth
import boto3
region = "us-east-1"
# Get AWS credentials (from environment, IAM role, or ~/.aws/credentials)
session = boto3.Session()
credentials = session.get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, 'es', session_token=credentials.token)
llm = ChatOpenAI(
model="gpt-4o",
temperature=0.0,
max_tokens=1000,
streaming=True,
)
graph = StateGraph(MessagesState)
def ask(state: MessagesState) -> MessagesState:
"""
Ask a question to the LLM and return the response.
"""
question = state['messages'][-1].content
response = llm.invoke(
[*state['messages']]
)
return { 'messages': [ AIMessage(content=response.content) ] }
graph.add_node('ask', ask)
graph.add_edge(START, 'ask')
graph.add_edge('ask', END)
with OpenSearchSaver.from_conn_string(client_kwargs={
'hosts': [{'host': os.getenv('OSS_HOST'), 'port': 443}],
'http_auth': awsauth,
'use_ssl': True,
'verify_certs': True,
'connection_class': RequestsHttpConnection
}) as checkpointer:
config = {
'configurable': {
'thread_id': '3'
}
}
graph = graph.compile(checkpointer=checkpointer)
# Run the graph with an initial message
response = graph.invoke(
{
"messages": [
HumanMessage(content="What is the capital of France?")
]
},
config
)
print(response)
response = graph.invoke(
{
"messages": [
HumanMessage(content="What are its key attractions?")
]
},
config
)
print(response)
Examples
The examples directory contains Jupyter notebooks demonstrating the usage of OpenSearch with LangGraph:
create-basic-checkpoint.ipynb: Demonstrates the usage of OpenSearch checkpoint savers with LangGraph
Implementation Details
OpenSearch Indexing
The OpenSearch implementation creates these main indices:
- Checkpoints Index: Stores checkpoint metadata and versioning
- Writes Index: Tracks pending writes and intermediate states
Contributing
We welcome contributions! Here's how you can help:
Development Setup
-
Clone the repository:
git clone https://github.com/samriddhadev/langgraph-opensearch.git cd langgraph-opensearch
-
Install dependencies:
hatch env create
or
hatch shell
Contribution Guidelines
- Create a new branch for your changes
- Write tests for new functionality
- Submit a pull request with a clear description of your changes
- Follow Conventional Commits for commit messages
License
This project is licensed under the MIT License.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file langgraph_opensearch-0.1.4.tar.gz.
File metadata
- Download URL: langgraph_opensearch-0.1.4.tar.gz
- Upload date:
- Size: 73.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf0addd0ec5cc27c682d336ace4a3f8efeb8561f1bd5962ae17a924d50a3c3b4
|
|
| MD5 |
ea7d780c2a710659f621794717590f69
|
|
| BLAKE2b-256 |
ed443ab99d302f2fb073e34e55a82fd70d4a385dc1e2bee3ef228d337c88dcd0
|
File details
Details for the file langgraph_opensearch-0.1.4-py3-none-any.whl.
File metadata
- Download URL: langgraph_opensearch-0.1.4-py3-none-any.whl
- Upload date:
- Size: 11.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
160c0895092d5777b2d70e46c6b9ee9e35453dd8f9baf4d4aaf4ce19eec672f6
|
|
| MD5 |
a15650dd557d7081dcbb551d614630af
|
|
| BLAKE2b-256 |
9ba59ff81125c044b4469ad954fc16fb92509bd488099abb82563eca1e5847e6
|