App öffnen
Moonborn — Developers

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_KEY statt OPENAI_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