LangChain BaseChatModel adapter for Pi (@earendil-works/pi-ai) via a Node sidecar — use Pi with any provider, model and auth from LangChain/LangGraph in Python.
Project description
langchain-pi
A LangChain BaseChatModel adapter for Pi
(@earendil-works/pi-ai),
the Python twin of langchain-pi-ts.
Use Pi — and any provider, model and credential it resolves — from LangChain and
LangGraph in Python, with native tool calling and streaming.
Pi is a TypeScript/Node stack with no Python SDK, so langchain-pi drives a tiny
Node sidecar that wraps pi-ai's streamSimple + ModelRegistry/AuthStorage.
Node keeps owning provider dispatch, OAuth refresh and the provider stealth
headers; Python only frames the request and reconstructs the streamed events.
Python never touches a token.
Requirements
- Python ≥ 3.9
- Node ≥ 22.19.0 on
PATH, with@earendil-works/pi-aiand@earendil-works/pi-coding-agentresolvable (install them in your project, or pointnode_modules_dirat a directory whosenode_moduleshas them). - A provider authenticated in
~/.pi(e.g.openai-codex), exactly as for the Pi CLI / the TS package.
Install
pip install langchain-pi # or: uv add langchain-pi
npm install @earendil-works/pi-ai @earendil-works/pi-coding-agent
Usage
from langchain_pi import ChatPi
model = ChatPi(
provider="openai-codex",
model="gpt-5.3-codex-spark",
reasoning="minimal",
system="You are a helpful assistant.",
)
print(model.invoke("Hello!").content)
Tool calling
Accepts any LangChain tool; schemas are converted to the JSON Schema pi-ai expects.
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""Get the current weather for a city."""
return f"It is sunny in {city}, 24C."
agent_model = model.bind_tools([get_weather])
Streaming
for chunk in model.stream("Write a haiku."):
print(chunk.content, end="")
LangGraph
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(model, [get_weather])
agent.invoke({"messages": [("user", "What's the weather in Paris?")]})
Pointing at your Node install
If pi-ai isn't resolvable from the sidecar's location, pass the directory whose
node_modules contains it:
ChatPi(provider="opencode", model="deepseek-v4-flash-free",
node_modules_dir="/path/to/your/project")
Notes
- Node is a runtime prerequisite — the heavy provider/auth logic lives in pi-ai.
- Tool-call deltas and usage/cost metadata are reconstructed 1:1 with the TS twin.
- Cancellation (e.g. LangGraph) aborts the in-flight provider request via the sidecar.
License
MIT
Project details
Release history Release notifications | RSS feed
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 langchain_pi-0.1.0.tar.gz.
File metadata
- Download URL: langchain_pi-0.1.0.tar.gz
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61152157c4418e752db6823d0d66077619145b0778d0aab9052b7f5779f54240
|
|
| MD5 |
2bdbf7ddb133fea819fcfb0ffca4d48a
|
|
| BLAKE2b-256 |
90399b512b1c53bef4c8b3c7050c7e70295d4df37216af22791bec931f313ea2
|
File details
Details for the file langchain_pi-0.1.0-py3-none-any.whl.
File metadata
- Download URL: langchain_pi-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eca3eb5ddf06cdaede87df2832c09350bf20244e2c6804d3214957dea2f6aa5b
|
|
| MD5 |
cee35d34a4356583a933cedf043d103e
|
|
| BLAKE2b-256 |
364158f91717368186692a17bec26dfa76477828ec9c2d26917766f55568e37b
|