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:

    `poetry install --all-extras`
    

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.2.tar.gz (45.1 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.2-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file langgraph_opensearch-0.1.2.tar.gz.

File metadata

  • Download URL: langgraph_opensearch-0.1.2.tar.gz
  • Upload date:
  • Size: 45.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for langgraph_opensearch-0.1.2.tar.gz
Algorithm Hash digest
SHA256 178aebc11e2467c1fca5af93c245d95220185a1e935f4c9a4908f2bd2f02c769
MD5 33c4eded7164c610fd553ad6b49e81f1
BLAKE2b-256 0318d1b02ff200915e6c2b297cdc0a303037bd51edd5ed23a7bfed88744fe07c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for langgraph_opensearch-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 43e83fe4e751c40bd0f4e59e502dfaec7c989c97c972cf1d8fbf0945abcd7c6a
MD5 ecb931ba8204f1449ffb9d938b538dae
BLAKE2b-256 a3eaf817ab2b378dae2f425b282c9cc992e3324b7a5729ec3b7a0cf7bf3d4e8e

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