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 in your project, or point node_modules_dir at a directory whose node_modules has 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


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.0.tar.gz (23.2 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.0-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

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

Hashes for langchain_pi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 61152157c4418e752db6823d0d66077619145b0778d0aab9052b7f5779f54240
MD5 2bdbf7ddb133fea819fcfb0ffca4d48a
BLAKE2b-256 90399b512b1c53bef4c8b3c7050c7e70295d4df37216af22791bec931f313ea2

See more details on using hashes here.

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

Hashes for langchain_pi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eca3eb5ddf06cdaede87df2832c09350bf20244e2c6804d3214957dea2f6aa5b
MD5 cee35d34a4356583a933cedf043d103e
BLAKE2b-256 364158f91717368186692a17bec26dfa76477828ec9c2d26917766f55568e37b

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