Frameworks
Topo is OpenAI-compatible, so agent frameworks connect with a base URL change. These are the setups we test on every release.
Supported frameworks
| Framework | Language | How to connect |
|---|---|---|
| OpenAI SDK | Python, TypeScript | Set base_url or baseURL. |
| Vercel AI SDK | TypeScript | The @ai-sdk/openai-compatible provider. |
| LangChain | Python, TypeScript | ChatOpenAI with a base_url. |
| LlamaIndex | Python | The OpenAILike LLM class. |
| CrewAI | Python | LLM with a base_url. |
| Mastra | TypeScript | Any OpenAI-compatible model provider. |
Vercel AI SDK
TypeScript
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";import { generateText } from "ai"; const topo = createOpenAICompatible({ name: "topo", baseURL: "https://api.topolabs.ai/v1", apiKey: process.env.TOPO_API_KEY,}); const { text } = await generateText({ model: topo("claude-sonnet-5.5"), prompt: "Summarize the Q3 board deck and draft three follow-ups",});LangChain
import osfrom langchain_openai import ChatOpenAI llm = ChatOpenAI( model="deepseek-v4-pro", base_url="https://api.topolabs.ai/v1", api_key=os.environ["TOPO_API_KEY"],) print(llm.invoke("Write a haiku about idle GPUs").content)import { ChatOpenAI } from "@langchain/openai"; const llm = new ChatOpenAI({ model: "deepseek-v4-pro", apiKey: process.env.TOPO_API_KEY, configuration: { baseURL: "https://api.topolabs.ai/v1" },}); console.log((await llm.invoke("Write a haiku about idle GPUs")).content);CrewAI
Python
import osfrom crewai import LLM llm = LLM( model="openai/claude-sonnet-5.5", base_url="https://api.topolabs.ai/v1", api_key=os.environ["TOPO_API_KEY"],)