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_availablebedeutet, 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 sowien > 1werden mit 400 abgelehnt. - Ignoriert.
response_formatundlogprobswerden stillschweigend ignoriert. - Medien-Links. Links zu generierten Medien funktionieren über diese Adresse nicht.
- Daten. Anfragen laufen über das Relay und werden nicht gespeichert.