Skip to content

OpenAI-compatible

The OpenAI /chat/completions format is the industry default — OpenAI, Mistral, OpenRouter, Groq, Together, Z.ai, LM Studio and Ollama (/v1) all speak it. This one zero-dependency adapter covers the whole family; vendors differ only by data (base URL, branding), which you pass as config or pick from presets.

Terminal window
npm install @aparte/provider-openai-compat
import { AparteConfig, DirectTransport } from '@aparte/core';
import { createOpenAICompatProvider, presets } from '@aparte/provider-openai-compat';
// A known vendor, via a preset:
AparteConfig.registerAIProvider(createOpenAICompatProvider(presets.MISTRAL));
// …or any compat endpoint, no preset needed — just an id + base URL:
AparteConfig.registerAIProvider(createOpenAICompatProvider({
id: 'groq',
baseURL: 'https://api.groq.com/openai/v1',
}));
AparteConfig.setTransport(new DirectTransport({ byok: true }));

Built-in presets: OPENAI, MISTRAL, ZAI, OPENROUTER, LMSTUDIO, OLLAMA.

Pass a static models list, or rely on the generic GET {baseURL}/models fetcher (part of the compat standard). Cloud endpoints need a key to list; local servers list keyless.

createOpenAICompatProvider({
id: 'x',
baseURL: 'https://x.example/v1',
models: [{ id: 'llama-3.3-70b', name: 'Llama 3.3 70B' }],
});

Local servers are served through their OpenAI-compat /v1 endpoint. The isLocal presets relax the key requirement and fetch models keyless:

AparteConfig.registerAIProvider(createOpenAICompatProvider(presets.OLLAMA)); // http://localhost:11434/v1
AparteConfig.setTransport(new DirectTransport({ byok: true }));

For vendors outside this family (Anthropic, Gemini…), use the AI SDK bridge.