LangChain
LangChain's OpenAI integration works with Cloakray: point ChatOpenAI and OpenAIEmbeddings at the Cloakray base URL and use any model from the catalogue.
Python
pip install langchain-openai
import os
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
llm = ChatOpenAI(
model="claude-sonnet-4-6",
base_url="https://api.cloakray.com/v1",
api_key=os.environ["CLOAKRAY_API_KEY"],
)
print(llm.invoke("What is a vector database?").content)
embeddings = OpenAIEmbeddings(
model="text-embedding-3-small",
base_url="https://api.cloakray.com/v1",
api_key=os.environ["CLOAKRAY_API_KEY"],
)
vector = embeddings.embed_query("What is a vector database?")
JavaScript
npm install @langchain/openai
import { ChatOpenAI, OpenAIEmbeddings } from "@langchain/openai";
const llm = new ChatOpenAI({
model: "claude-sonnet-4-6",
apiKey: process.env.CLOAKRAY_API_KEY,
configuration: { baseURL: "https://api.cloakray.com/v1" },
});
const reply = await llm.invoke("What is a vector database?");
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-small",
apiKey: process.env.CLOAKRAY_API_KEY,
configuration: { baseURL: "https://api.cloakray.com/v1" },
});
Tools, structured output and streaming
llm.bind_tools(...), llm.with_structured_output(Schema) and llm.stream(...) work as usual, on models that support tools and structured outputs. LangGraph agents built on ChatOpenAI work the same way.
Tips
- Set
base_urlexplicitly rather than relying onOPENAI_API_BASE, so other OpenAI clients in the same process aren't redirected by accident. - Pass
check_embedding_ctx_length=FalsetoOpenAIEmbeddingswhen using an embedding model other than OpenAI's, so LangChain sends text instead of OpenAI-specific token IDs.