Skip to main content

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:

  1. 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.0
  • langgraph-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:

  1. Checkpoints Index: Stores checkpoint metadata and versioning
  2. Writes Index: Tracks pending writes and intermediate states

Contributing

We welcome contributions! Here's how you can help:

Development Setup

  1. Clone the repository:

    git clone https://github.com/samriddhadev/langgraph-opensearch.git
    cd langgraph-opensearch
    
  2. Install dependencies:

    hatch env create
    

    or

    hatch shell
    

Contribution Guidelines

  1. Create a new branch for your changes
  2. Write tests for new functionality
  3. Submit a pull request with a clear description of your changes
  4. 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

langgraph_opensearch-0.1.4.tar.gz (73.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

langgraph_opensearch-0.1.4-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

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

Hashes for langgraph_opensearch-0.1.4.tar.gz
Algorithm Hash digest
SHA256 bf0addd0ec5cc27c682d336ace4a3f8efeb8561f1bd5962ae17a924d50a3c3b4
MD5 ea7d780c2a710659f621794717590f69
BLAKE2b-256 ed443ab99d302f2fb073e34e55a82fd70d4a385dc1e2bee3ef228d337c88dcd0

See more details on using hashes here.

File details

Details for the file langgraph_opensearch-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for langgraph_opensearch-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 160c0895092d5777b2d70e46c6b9ee9e35453dd8f9baf4d4aaf4ce19eec672f6
MD5 a15650dd557d7081dcbb551d614630af
BLAKE2b-256 9ba59ff81125c044b4469ad954fc16fb92509bd488099abb82563eca1e5847e6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page