API

OpenAI-kompatible API

Rufen Sie Ihre eigenen Nodes über https://api.majesticmesh.com/v1 aus jedem OpenAI-Client auf – mit Streaming und eigenen Tools.

Jede App und jede Bibliothek, die die OpenAI-API spricht, kann Ihre Nodes nutzen. Richten Sie sie mit einem API-Schlüssel auf die zentrale API, und sie antwortet mit den Modellen, die Ihre Nodes betreiben oder angebunden haben.

Voraussetzungen

Mindestens einer Ihrer Nodes muss:

  • laufen,
  • seinen Chat From anywhere teilen (in der App: Settings → Share → From anywhere),
  • nicht auf Private stehen.

Anfragen gehen an den ersten Ihrer Nodes, der antworten kann, in der Reihenfolge des zentralen Chats. Ist ein Node offline, ausgelastet oder hat er sein Relay-Budget aufgebraucht, übernimmt der nächste.

Base URL und Schlüssel

Base URL: https://api.majesticmesh.com/v1
API key:  mmk_api_...

Senden Sie den Schlüssel als Authorization: Bearer YOUR_API_KEY. Der Header x-api-key funktioniert ebenfalls.

Welche Modelle verfügbar sind

GET /v1/models listet, was der antwortende Node anbietet:

  • majesticmesh-chat: der Chat mit Mesh-Tools. Er kann beim Antworten die Agenten auf Ihren Nodes aufrufen. Er steht auf jedem Node zur Verfügung.
  • Ein Eintrag pro LLM, das der Node angebunden hat, etwa ein lokales Modell oder ein hinzugefügter Anbieter.
  • Die LLMs der anderen Nodes Ihres Kontos, als <agentID>@<peerID>. Ein Aufruf eines solchen Modells wird an diesen Node weitergeleitet.
curl https://api.majesticmesh.com/v1/models \
  -H "Authorization: Bearer $MM_API_KEY"

Chat Completions

curl:

curl https://api.majesticmesh.com/v1/chat/completions \
  -H "Authorization: Bearer $MM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "majesticmesh-chat", "messages": [{"role": "user", "content": "Hello"}]}'

Python mit dem offiziellen OpenAI-SDK:

from openai import OpenAI

client = OpenAI(base_url="https://api.majesticmesh.com/v1", api_key=MM_API_KEY)
r = client.chat.completions.create(
    model="majesticmesh-chat",
    messages=[{"role": "user", "content": "Roll a die for me."}],
)
print(r.choices[0].message.content)

Streaming

Mit "stream": true erhalten Sie Standard-SSE-Chunks, die mit data: [DONE] enden. stream_options.include_usage fügt einen abschließenden Usage-Chunk hinzu. Das „Denken“ eines Modells kommt als delta.reasoning; OpenAI-SDKs überspringen dieses Feld.

Streamen Sie bei langsamen Modellen: Eine Anfrage ohne Streaming, die etwa 100 Sekunden lang nichts sendet, wird mit 524 abgebrochen. Streams senden Keepalives, während das Modell nachdenkt.

Eigene Tools

Die einfachen Modelle (alle außer majesticmesh-chat) akzeptieren tools, tool_choice und parallel_tool_calls wie OpenAI. Die Aufrufe des Modells kommen als tool_calls mit finish_reason: "tool_calls" zurück; Ihr Code führt sie aus und sendet die Ergebnisse zurück. Ihre Tools laufen nie auf dem Node.

majesticmesh-chat lehnt eigene Tools mit 400 tools_not_supported ab, ebenso ein Modell, das keine Tools nutzen kann. Kleine lokale Modelle nutzen Tools oft nur schlecht.

Grenzen

  • Relay-Budget. Anfragen zählen gegen das tägliche Relay-Budget des antwortenden Nodes (429 relay_limit). Agenten, die in jeder Runde das ganze Gespräch erneut senden, verbrauchen es deutlich schneller als ein Chat.
  • Kein Node. 503 no_node_available bedeutet, dass keiner Ihrer Nodes antworten konnte.
  • Keine Wiederholung. Eine Anfrage, die womöglich schon auf einem Node lief, wird nie auf einem anderen wiederholt; stattdessen erhalten Sie 502 node_lost.
  • Dauer. Eine Anfrage läuft höchstens 30 Minuten.
  • Bilder. Nur Inline-data:-URLs (PNG, JPEG, WebP, GIF), höchstens 20 pro Anfrage und je 5 MiB. Entfernte Bild-URLs, Audio- und Dateiteile sowie n > 1 werden mit 400 abgelehnt.
  • Ignoriert. response_format und logprobs werden stillschweigend ignoriert.
  • Medien-Links. Links zu generierten Medien funktionieren über diese Adresse nicht.
  • Daten. Anfragen laufen über das Relay und werden nicht gespeichert.