API Dokumentation

OpenAI-kompatibel — dein bestehendes Setup funktioniert sofort

Quickstart

In 3 Schritten loslegen.

  1. Account erstellen
    Registriere dich auf smartllm.at/portal/register
  2. API-Key generieren
    Im Portal unter API Keys einen neuen Key erstellen.
  3. Ersten Request senden
# Chat Completion — "frontier" ist ein Production-Alias (siehe unten) curl https://smartllm.at/v1/chat/completions \ -H "Authorization: Bearer DEIN-API-KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "frontier", "messages": [{"role": "user", "content": "Hallo!"}], "temperature": 0.7, "max_tokens": 1000 }'

Liste aller verfügbaren Modelle: GET /v1/models. Wer lieber direkt eine konkrete Modell-ID verwendet, findet sie dort.

Production-Aliase SmartLLM-Erweiterung

Stabile Rollen-Namen statt versionierter Modell-IDs.

Statt sich an Intel/Qwen3.5-397B-A17B-int4-AutoRound zu binden, setzen Konsumenten den Alias frontier als model. Der Gateway löst den Alias serverseitig auf das aktuell dahinterliegende Modell auf. Wenn wir die Hardware oder das Modell tauschen, ändert sich nichts im Client-Code.

Hinweis: /v1/aliases ist nicht Teil der OpenAI-Spec — eine SmartLLM-spezifische Erweiterung. Wenn du strikt OpenAI-kompatibel bleiben willst, nutze konkrete Modell-IDs aus /v1/models. Die Aliase tauchen dort übrigens auch auf (additiv), mit owned_by: "smartllm-alias" als Discriminator.

Aktuelle Aliase

AliasRolleTrade-Off
frontierStärkstes Modell, multimodalcapability-first
coderBeste Coding-Qualitätcapability-first
coder-fastSchnelles Codinglatency-first
visionBild-Inputcapability-first
midAllround-Mittelklassecapability-first
fastNiedrigste Latenz, einfache Taskslatency-first

Welches Modell aktuell hinter einem Alias steckt, kann sich ändern — das ist der Sinn der Sache.

GET /v1/aliases

Live-Liste der konfigurierten Aliase. Antwort-Objekte tragen "object": "smartllm.alias" als Discriminator.

curl https://smartllm.at/v1/aliases \ -H "Authorization: Bearer DEIN-API-KEY"

Beispiel-Request mit Alias

curl https://smartllm.at/v1/chat/completions \ -H "Authorization: Bearer DEIN-API-KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "coder", "messages": [{"role": "user", "content": "Schreib eine Python-Funktion die einen JSON-Stream parst."}] }'

Base URL

https://smartllm.at/v1

Ersetze einfach https://api.openai.com/v1 durch https://smartllm.at/v1 in deinem bestehenden Code.

Endpoints

POST /v1/chat/completions

Chat mit dem Modell. Unterstützt Streaming. model akzeptiert eine konkrete Modell-ID oder einen Production-Alias.

{ "model": "frontier", "messages": [ {"role": "system", "content": "Du bist ein hilfreicher Assistent."}, {"role": "user", "content": "Wie ist das Wetter?"} ], "temperature": 0.7, "max_tokens": 1000, "stream": false }

GET /v1/models

Liste aller verfügbaren Modelle. Aliase tauchen additiv mit owned_by: "smartllm-alias" auf.

GET /v1/aliases SmartLLM

Nur die Aliase, mit Target-Modell wo erlaubt. Details in der Sektion oben.

POST /v1/completions

Legacy Text-Completion Endpoint.

POST /v1/embeddings

Embedding-Vektoren für Text. Nur Modelle mit embedding-Capability. Chat-Modelle auf diesem Endpoint → 400; unbekannte Modelle → 404.

curl https://smartllm.at/v1/embeddings \ -H "Authorization: Bearer DEIN-API-KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "nomic-embed-text:latest", "input": "Hallo Welt" }'

input akzeptiert einen String oder ein Array von Strings (Batch). Verfügbare Embedding-Modelle: nomic-embed-text:latest.

Vision-Support

Zwei Modelle akzeptieren Bilder als Input via image_url-Content-Block (OpenAI-kompatibel).

ModellKategorieEmpfohlenes max_tokensEinsatz
Intel/Qwen3.5-397B-A17B-int4-AutoRound Flagship 200–500 Komplexe Bildanalyse, Detail-Extraction, Dokumentenanalyse, Rechnungsklassifikation
gemma4-nothink:26b / gemma4-think:26b Allgemein ≥ 2000 OCR, Bildklassifikation, kurze Beschreibungen
qwen3.6:27b Allgemein 500–1000 Bildanalyse im Tagesgeschäft, gute Balance aus Latenz und Qualität
nemotron3:33b Multimodal (Omni) 500–1500 Bild und Audio in einem Request, gemischte Anfragen

Beispiel

curl https://smartllm.at/v1/chat/completions \ -H "Authorization: Bearer DEIN-API-KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "Intel/Qwen3.5-397B-A17B-int4-AutoRound", "messages": [{ "role": "user", "content": [ {"type": "text", "text": "Was siehst du auf diesem Bild?"}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}} ] }], "max_tokens": 500 }'

Hinweise pro Modell

Qwen 3.5 397B

  • Nativ multimodal, schnelle Antwortgenerierung.
  • Empfohlen für mehrschichtige visuelle Aufgaben und niedrige Latenz bei Vision.
  • max_tokens zwischen 200 und 500 reicht in der Regel.

Gemma 4 26B

  • Führt bei Vision-Requests ausführliches internes Reasoning durch — typisch 1500–2000 Tokens, bevor die Antwort geschrieben wird.
  • max_tokens mindestens 2000 setzen, sonst kommt leerer Content zurück (Budget wird im Reasoning aufgebraucht).
  • Für niedrige Latenz Qwen 3.5 397B bevorzugen.

Audio BETA

nemotron3:33b akzeptiert zusätzlich Audio-Inputs.

Beta-Hinweis: Pricing und API-Schema für Audio-Inputs können sich ändern. Verfügbarkeit ist nicht SLA-garantiert.

Schema

OpenAI-kompatibler Content-Block mit Typ input_audio. Daten als Base64.

curl https://smartllm.at/v1/chat/completions \ -H "Authorization: Bearer DEIN-API-KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "nemotron3:33b", "messages": [{ "role": "user", "content": [ {"type": "text", "text": "Was sagt diese Aufnahme?"}, {"type": "input_audio", "input_audio": {"data": "BASE64...", "format": "wav"}} ] }], "max_tokens": 1000 }'

Format-Beschränkungen

ModalitätFormateEmpfohlene DauerToken-Verbrauch (ca.)
AudioWAV, MP3, M4Abis 60 Sek.~32 Token/Sek.

Pricing

Einheitliches Token-Pricing. Audio wird vom Modell intern tokenisiert und in usage.prompt_tokens mitgemeldet — es gibt aktuell keine separate Audio-Gebühr. Zur Orientierung bei €10/M Tokens:

InputToken-RateKosten/SekundeKosten/Minute
Textvariabel
Audio~32 Token/Sek.~€0.00032~€0.019

Token-Raten sind Orientierungswerte basierend auf vergleichbaren Omni-Modellen. Tatsächlicher Verbrauch ergibt sich aus usage.prompt_tokens der jeweiligen Antwort. Endabrechnung immer auf realen Token-Counts.

Parameter-Referenz

ParameterTypDefaultBeschreibung
modelstringrequiredModell-ID (siehe GET /v1/models)
messagesarrayrequiredChat-Verlauf als Array von {role, content}
temperaturefloat0.7Kreativität (0.0 = deterministisch, 1.0 = kreativ)
max_tokensint1000Maximale Antwortlänge in Tokens
streamboolfalseStreaming-Antwort (Server-Sent Events)
top_pfloat1.0Nucleus Sampling
stopstring/arraynullStop-Sequenzen

Smart-Modus vs Direct

Smart-Modus

55+ Tools automatisch verfügbar. Checkin-Modell prüft ob Tools nötig sind. Ideal für Chat, Assistenten, Recherche.

Direct-Modus

Request geht 1:1 ans Modell. Kein Checkin, keine Tools. Für Coding-Agents, eigenes Tool-Calling, OpenCode.

Modus pro API-Key einstellbar im Portal.

Integration

Python (OpenAI SDK)

import openai client = openai.OpenAI( api_key="DEIN-KEY", base_url="https://smartllm.at/v1" ) response = client.chat.completions.create( model="nemotron-3-super:latest", messages=[{"role": "user", "content": "Hallo!"}] ) print(response.choices[0].message.content)

JavaScript (fetch)

const response = await fetch("https://smartllm.at/v1/chat/completions", { method: "POST", headers: { "Authorization": "Bearer DEIN-KEY", "Content-Type": "application/json" }, body: JSON.stringify({ model: "nemotron-3-super:latest", messages: [{role: "user", content: "Hallo!"}] }) }); const data = await response.json(); console.log(data.choices[0].message.content);

Rate Limits

LimitDefaultBeschreibung
RPM60Requests pro Minute
TPD1.000.000Tokens pro Tag (Input + Output)
Concurrent3Gleichzeitige Requests

Limits pro API-Key konfigurierbar. Bei Überschreitung: HTTP 429.

Fehler-Codes

CodeBedeutungLösung
401Invalid API KeyKey prüfen, neuen Key erstellen
429Rate LimitWarten oder Limits erhöhen lassen
502Backend offlineModell wird geladen, kurz warten
504TimeoutKleineres Modell oder weniger Tokens

Im Playground testen

Probiere die API direkt im Browser aus — ohne Setup.

Zum Playground