Skip to main content

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-ai and @earendil-works/pi-coding-agent resolvable (install them where the sidecar can reach them, or point node_modules_dir at a node_modules directory that has them). Note: NODE_PATH does not work for ESM, so node_modules_dir resolves each package via its package.json entry.
  • 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 node_modules directory that contains it:

ChatPi(provider="opencode", model="deepseek-v4-flash-free",
       node_modules_dir="/path/to/your/project/node_modules")

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

langchain_pi-0.1.1.tar.gz (24.0 kB view details)

Uploaded Source

Built Distribution

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

langchain_pi-0.1.1-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file langchain_pi-0.1.1.tar.gz.

File metadata

  • Download URL: langchain_pi-0.1.1.tar.gz
  • Upload date:
  • Size: 24.0 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

Hashes for langchain_pi-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6c032ab49ea84780f177eec746d97918ab11508946fd9e91011e61bf5506d8e2
MD5 cbd465e574d6427c5e45187959cfd659
BLAKE2b-256 9f391299d5c399addc32dc8f3e150f48029f334aca49a91f97b7003dacf221db

See more details on using hashes here.

File details

Details for the file langchain_pi-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: langchain_pi-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 11.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

Hashes for langchain_pi-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e90f39b9a6d132c7697e6e30ac98f09493f3e47e9b498c6a17c7733e2f1835c0
MD5 5675d0a59081d0739aa56fed897ab2f0
BLAKE2b-256 4bad8a1a55bc1e04919666aadcd8fbba7df9bd178562bfcc85cf601ea13db5d0

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