LangChain on 35+ models, one base_url
Pass Luno's base_url to ChatOpenAI and your chains, agents and RAG pipelines run on Claude, GPT and Gemini — one key, up to 70% cheaper in production.
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="https://api.luno.codes/v1",
api_key="luno-...",
model="claude-opus-4-8",
)35+ models · OpenAI-compatible · up to 70% cheaper
One constructor argument
ChatOpenAI(base_url=..., api_key=..., model=...) is the entire integration — Python or JS, chains, agents, LCEL and streaming all work unchanged.
Swap models without rewrites
Change the model string from claude-opus-4-8 to gpt-5.5 or gemini-3.1-pro and rerun. No provider-specific classes, no second API account.
Production volume, flat cost
RAG pipelines and multi-agent graphs make thousands of calls per day. Luno's flat plans cut that spend by up to 70% versus metered per-token billing.
Get started in 30 seconds
Get your luno- key from the Telegram bot
Pass base_url and api_key to ChatOpenAI
Set any model ID — Claude, GPT or Gemini — and run your chain
FREQUENTLY ASKED QUESTIONS
Pass Luno's base_url to ChatOpenAI and your chains, agents and RAG pipelines run on Claude, GPT and Gemini — one key, up to 70% cheaper in production.
Yes. Both langchain_openai.ChatOpenAI (Python) and @langchain/openai (JS) accept base_url / configuration.baseURL — point them at https://api.luno.codes/v1 with your luno- key.
Yes — Luno also exposes an Anthropic-compatible endpoint, so ChatAnthropic works by overriding its base URL. Most users stick with ChatOpenAI since one class then covers every model.
Yes. bind_tools, with_structured_output, streaming and async all use standard OpenAI semantics, which Luno supports across Claude, GPT and Gemini models.