OpenAI-Compat-Migration
Einzeilen-Swap vom OpenAI-SDK zu Moonborns `/v1/openai`-Shim. Streaming, Tool Calling und Function Calling laufen durch.
Wenn du bereits das OpenAI-SDK nutzt, ist der billigste Weg zu
Moonborn ein Base-URL-Swap. Der /v1/openai/chat/completions-Shim
akzeptiert OpenAI-geformte Requests, gibt OpenAI-geformte Responses
zurück, und das Model-Feld trägt eine Persona-ID statt gpt-4.
1. Den Client swappen
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.MOONBORN_API_KEY,
baseURL: 'https://api.moonborn.co/v1/openai',
});Drei Änderungen:
- API-Key-Env-Var:
MOONBORN_API_KEYstattOPENAI_API_KEY. - Base-URL:
https://api.moonborn.co/v1/openai. - Model:
persona://<persona_id>statt eines Model-Namens.
2. Einen Call machen
const reply = await client.chat.completions.create({
model: 'persona://persona_01H...',
messages: [{ role: 'user', content: 'Was treibt dich an?' }],
});
console.log(reply.choices[0].message.content);Die Response-Form matched OpenAI genau. Moonborn-spezifisches Metadata
reitet auf x-moonborn-*-Response-Headern — Drift-Score, Voice-
Fingerprint-Match, Audit-ID. Dein OpenAI-Client ignoriert sie per
Default; zieh sie aus reply.response.headers, wenn du sie willst.
3. Streamen
const stream = await client.chat.completions.create({
model: 'persona://persona_01H...',
messages: [{ role: 'user', content: 'Erzähl mir eine stille Wahrheit.' }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}Streaming läuft unverändert durch. SSE-Chunks haben OpenAIs delta-
Form; das Drift-Envelope kommt als finaler Header am Stream-Close an.
4. Tool / Function Calling
const reply = await client.chat.completions.create({
model: 'persona://persona_01H...',
messages: [{ role: 'user', content: 'Wie spät ist es in Istanbul?' }],
tools: [
{
type: 'function',
function: {
name: 'get_time',
parameters: { type: 'object', properties: { tz: { type: 'string' } } },
},
},
],
});Tool-Calls laufen durch. Die Stimme der Persona umhüllt weiter das Tool-Result-Handling — du bekommst eine in-character-Erklärung um die Daten, die dein Tool zurückgegeben hat.
5. Deine Personas als Models auflisten
const models = await client.models.list();
for (const m of models.data) {
console.log(m.id); // persona://persona_01H...
}GET /v1/openai/models gibt die Personas deines Workspaces in
OpenAIs Model-Form zurück. Nützlich für IDE-Picker, Model-Selectors
in Admin-UIs etc.
Was nicht OpenAI-kompatibel ist
- Image Generation, Embeddings, Audio. Nicht Moonborns Domain. Behalte deinen OpenAI-Client side-by-side für diese Endpoints.
- Custom Assistants API. Verwende Moonborns native Persona- Oberfläche — siehe Baue deine erste Persona.
Tarif
Free und höher. Der Endpoint erbt das Rate-Limit deines Workspaces; siehe die Rate-Limits-Referenz.
Weiter
- Begleiter: MCP server integration.
- Hintergrund: OpenAI-compatible integration.
- Models endpoint reference.