Metadata-Version: 2.4
Name: langchain-sail
Version: 0.1.0
Summary: LangChain integration for Sail (drop-in Apache Spark replacement)
Project-URL: Homepage, https://github.com/lakehq/langchain-sail
Project-URL: Repository, https://github.com/lakehq/langchain-sail
Project-URL: Documentation, https://docs.lakesail.com/
License-Expression: MIT
License-File: LICENSE
Requires-Python: >=3.10
Requires-Dist: langchain-classic<2.0.0,>=1.0.0
Requires-Dist: langchain-community<1.0.0,>=0.4.0
Requires-Dist: langchain-core<2.0.0,>=1.2.0
Requires-Dist: pyspark>=3.5.0
Description-Content-Type: text/markdown

# langchain-sail

LangChain integration for [Sail](https://github.com/lakehq/sail), a drop-in replacement for Apache Spark.

## Installation

```bash
pip install langchain-sail
```

To run a local Sail server for development/testing:

```bash
pip install pysail
```

## Usage

```python
from pysail.spark import SparkConnectServer
from pyspark.sql import SparkSession
from langchain_sail import SailSQL, SailSQLToolkit, create_sail_sql_agent

# Start a local Sail server
server = SparkConnectServer()
server.start()
_, port = server.listening_address

# Connect via SailSQL
spark = SparkSession.builder.remote(f"sc://localhost:{port}").getOrCreate()
sail = SailSQL(spark_session=spark)

# Use with an LLM agent
from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(model="claude-sonnet-4-6")
toolkit = SailSQLToolkit(db=sail, llm=llm)
agent = create_sail_sql_agent(llm=llm, toolkit=toolkit, verbose=True)

result = agent.invoke({"input": "What tables are available?"})
print(result["output"])
```

## What is Sail?

[Sail](https://docs.lakesail.com/) is a drop-in replacement for Apache Spark, written in Rust. It uses the Spark Connect protocol, so existing PySpark code works out of the box — just point your `SparkSession` at a Sail server instead of a Spark cluster.
