SAIA Plattform

SAIA ist der skalierbare KI-Accelerator (AI), der unsere KI-Dienste hostet.
Zu diesen Diensten gehören Chat AI und CoCo AI, weitere werden in Kürze hinzukommen.
API-Schlüssel für die SAIA-API (Application Programming Interface) können beantragt und innerhalb Ihres Codes zur Nutzung der Dienste verwendet werden.

API-Schlüssel sind nicht erforderlich, um die Web-Oberfläche von Chat AI zu nutzen Web-Oberfläche.

Die SAIA-API eignet sich für interaktive Inferenz-Szenarien.
Falls Sie eine große Anzahl (z. B. Tausende von LLM-Anfragen) asynchron verarbeiten können, ist das Batch-Verfahren unseres HPC-Clusters die bessere Wahl.
Ihre Batch-Aufgabe wird zuverlässiger, schneller und kostengünstiger abgeschlossen.
Informieren Sie sich über die Einrichtung Ihres HPC-Clusters und die Nutzung von LLMs, um zu erfahren, wie Sie eine Batch-Inferenz-Aufgabe auf dem Cluster einrichten können.
vLLM ist eine weitere beliebte Wahl für LLM-Inferenz.

SAIA-Ablauf SAIA-Ablauf

API-Antrag

Wenn ein Benutzer über einen API-Schlüssel verfügt, kann er die verfügbaren Modelle direkt in seiner Terminal- oder Python-Umgebung nutzen.
Um Zugang zu einem API-Schlüssel zu erhalten, besuchen Sie die KISSKI LLM-Service-Seite und klicken Sie auf „Buchen“.
Dort finden Sie ein Formular, in dem Sie Ihre Anmeldeinformationen und Ihre Absichten bezüglich des API-Schlüssels angeben können.
Bitte verwenden Sie dieselbe E-Mail-Adresse, die Ihrem Academic Cloud-Konto zugeordnet ist.
Sobald Sie den Schlüssel erhalten haben, teilen Sie ihn nicht mit anderen Benutzern!

API-Buchung API-Buchung

API-Nutzung

Der API-Service ist kompatibel mit dem OpenAI API-Standard.
Wir bieten die folgenden Endpunkte:

  • /chat/completions
  • /completions
  • /embeddings
  • /models
  • /documents

Minimalbeispiel für die API

Sie können Ihren API-Schlüssel verwenden, um direkt über die Terminal-Eingabeaufforderung auf Chat AI zuzugreifen.
Im Folgenden finden Sie ein Beispiel zur Text-Vervollständigung über die API.

curl -i -X POST \
  --url https://chat-ai.academiccloud.de/v1/chat/completions \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'Content-Type: application/json'\
  --data '{
  "model": "meta-llama-3.1-8b-instruct",
  "messages":[{"role":"system","content":"You are an assistant."},{"role":"user","content":"What is the weather today?"}],
  "max_tokens": 7,
  "temperature": 0.5,
  "top_p": 0.5
}'

Ersetzen Sie <api_key> durch Ihren eigenen API-Schlüssel.

Modellnamen für die API

Weitere Informationen zu den jeweiligen Modellen finden Sie in der Modellliste.

ModellnameFunktionen
apertus-70b-instruct-2509Text
devstral-2-123b-instruct-2512Codierung
deepseek-v4-flash-0731Text
gemma-4-31b-itText, Bild
glm-5.3-flashText, Bild
glm-4.7Text
meta-llama-3.1-8b-instructText
mistral-medium-3.5-128bText, Bild
openai-gpt-oss-120bText
qwen3.5-122b-a10bText, Bild
qwen3.5-397b-a17bText, Bild
qwen3.6-35b-a3bText, Bild
qwen3.8-27bText, Bild
qwen3-30b-a3b-instruct-2507Text
qwen3-coder-nextText, Code
qwen3-omni-30b-a3b-instructText, Omni
e5-mistral-7b-instructEmbeddings
multilingual-e5-large-instructEmbeddings
qwen3-embedding-4bEmbeddings

Eine vollständige, aktuelle Liste der verfügbaren Modelle können Sie mit dem folgenden Befehl abrufen:

curl -X POST \
  --url https://chat-ai.academiccloud.de/v1/models \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'Content-Type: application/json'

Beispiele für die API-Nutzung

Die OpenAI (externen) Modelle sind nicht allgemein für die API-Nutzung verfügbar.
Für eine detailliertere Konfiguration Ihrer Anfragen, z. B. die Einstellung von frequency_penalty, seed, max_tokens usw., verweisen wir auf die OpenAI-API-Referenzseite.

Chat

Es ist möglich, eine gesamte Unterhaltung in Ihre Anfrage einzubinden.
Diese Unterhaltung kann aus einer vorherigen Sitzung mit demselben Modell oder einem anderen stammen, oder zwischen Ihnen und einem Freund/Kollegen, falls Sie weitere Fragen stellen möchten (stellen Sie sicher, dass Sie Ihre System-Nachricht entsprechend anpassen, z. B. „Du bist ein Freund/Kollege, der etwas erklären möchte, das verwirrend war“).

curl -i -N -X POST \
  --url https://chat-ai.academiccloud.de/v1/chat/completions \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'Content-Type: application/json'\
  --data '{
  "model": "meta-llama-3.1-8b-instruct",
  "messages": [{"role":"system","content":"You are a helpful assistant"},{"role":"user","content":"How tall is the Eiffel tower?"},{"role":"assistant","content":"The Eiffel Tower stands at a height of 324 meters (1,063 feet) above ground level. However, if you include the radio antenna on top, the total height is 330 meters (1,083 feet)."},{"role":"user","content":"Are there restaurants?"}],
  "temperature": 0
}'

Für eine einfachere Nutzung können Sie die Chat AI-Modelle auch über die Ausführung einer Python-Datei nutzen.
Fügen Sie dazu den folgenden Code in eine Datei ein:

from openai import OpenAI

# API-Konfiguration
api_key = '<api_key>' # Ersetzen Sie dies durch Ihren API-Schlüssel
base_url = "https://chat-ai.academiccloud.de/v1"
model = "meta-llama-3.1-8b-instruct" # Wählen Sie ein verfügbares Modell

# Starten des OpenAI-Clients
client = OpenAI(
    api_key=api_key,
    base_url=base_url
)

# Abrufen der Antwort
chat_completion = client.chat.completions.create(
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "How tall is the Eiffel tower?"},
        {"role": "assistant", "content": "The Eiffel Tower stands at a height of 324 meters (1,063 feet) above ground level. However, if you include the radio antenna on top, the total height is 330 meters (1,083 feet)."},
        {"role": "user", "content": "Are there restaurants?"}
    ],
    model=model,
)

# Vollständige Antwort als JSON ausgeben
print(chat_completion) # Sie können den Antworttext aus dem JSON-Objekt extrahieren

In bestimmten Fällen kann das Modell eine lange Antwort generieren, die mit der oben genannten Methode lange dauern kann, da die gesamte Antwort zunächst generiert und dann auf dem Bildschirm ausgegeben wird.
Stattdessen können Sie Streaming verwenden, um die Antwort bereits während der Generierung zu erhalten.

from openai import OpenAI

# API-Konfiguration
api_key = '<api_key>' # Ersetzen Sie dies durch Ihren API-Schlüssel
base_url = "https://chat-ai.academiccloud.de/v1"
model = "meta-llama-3.1-8b-instruct" # Wählen Sie ein verfügbares Modell

# Starten des OpenAI-Clients
client = OpenAI(
    api_key=api_key,
    base_url=base_url
)

# Stream starten
stream = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Name the capital city of each country on earth, and describe its main attraction",
        }
    ],
    model=model,
    stream=True
)

# Antwort ausgeben
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")

Für bestimmte Reasoning-Modelle ist es möglich, über die API explizit das Reasoning zu aktivieren oder zu deaktivieren, was in der Modell-Dokumentation oft beschrieben ist.
Zum Beispiel finden Sie die Dokumentation zur Aktivierung oder Deaktivierung des Reasoning für Qwen 3.6 35B A3B hier.

Wenn Sie Visual Studio Code oder Jetbrains als IDE verwenden, ist die empfohlene Methode, um die Nutzung Ihres API-Schlüssels zu maximieren, insbesondere für Code-Vervollständigung, die Installation des Continue-Plugins und die entsprechende Konfiguration.
Weitere Details finden Sie unter CoCo AI.

Azure API

Einige unserer Kunden kommen möglicherweise mit der Azure OpenAI API in Kontakt.
Diese API ist mit der OpenAI-API kompatibel, mit geringfügigen Unterschieden in den JSON-Antworten und der Endpunkt-Verarbeitung.
Der offizielle OpenAI Python-Client bietet einen AzureOpenAI-Client, um diese Unterschiede zu berücksichtigen.
In SAIA, da die externen, nicht-open-weight-Modelle von Microsoft Azure stammen, haben wir eine Übersetzungsschicht erstellt, um die OpenAI-Kompatibilität der Azure-Modelle sicherzustellen.

Bekannte Unterschiede:

  • Hinzufügen von content_filter_results in den Antworten von Azure-Modellen.

Bild

Die API-Spezifikation ist kompatibel mit der OpenAI Image API.
Allerdings wird das Abrufen von Bildern aus dem Web nicht unterstützt und Bilder müssen als Teil der Anfrage hochgeladen werden.

Sehen Sie sich das folgende minimale Beispiel in Python an.

import base64
from openai import OpenAI

# API-Konfiguration
api_key = '<api_key>' # Ersetzen Sie dies durch Ihren API-Schlüssel
base_url = "https://chat-ai.academiccloud.de/v1"
model = "internvl3.5-30b-a3b" # Wählen Sie ein verfügbares Modell

# Starten des OpenAI-Clients
client = OpenAI(
    api_key=api_key,
    base_url=base_url,
)

# Funktion zum Codieren des Bildes
def encode_image(image_path):
  with open(image_path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode('utf-8')

# Pfad zu Ihrem Bild
image_path = "test-image.png"

# Abrufen der Base64-Zeichenkette
base64_image = encode_image(image_path)

response = client.chat.completions.create(
  model=model,
  messages=[
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "What is in this image?",
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}"
          },
        },
      ],
    }
  ],
)
print(response.choices[0])

Text zu Bild

curl -i -N -X POST \
  --url https://chat-ai.academiccloud.de/v1/images/generations \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <key>' \
  --header 'Content-Type: application/json' \
  --data '{
    "prompt": "flower",
    "response_format": "b64_json",
    "model": "flux",
    "size": "1024x1024",
    "n": 1,
    "quality": "standard"
}'

Ersetzen Sie <key> durch den von GWDG bereitgestellten Schlüssel.
Dieser curl-Befehl verwendet Flux.1-schnell als Backend-Modell.

Bild zu Bild

curl https://chat-ai.academiccloud.de/v1/images/edits/ \
 -H "Authorization: Bearer <key>" \
 -H "Content-Type: multipart/form-data" \
 -H "inference-service: image-edit-2511" \
 -F "prompt=make style to Van-Gogh" \
 -F "image=@./<img.png or jpg>" \
 -o "edited_output.png"

Ersetzen Sie <key> durch den von GWDG bereitgestellten Schlüssel und <img> durch Ihr Bild.
Dieser curl-Befehl verwendet Qwen-Image-Edit-2511 als Backend-Modell.

Sprache zu Text

curl -i 'https://saia.gwdg.de/v1/audio/<translations or transcriptions>' \
  --header 'Accept: /' \
  --header 'Authorization: Bearer <key>' \
  -H "Content-Type: multipart/form-data"\
  -F model="whisper-large-v2" \
  -F "file=@./<voice.wav, mp4, mp3 or flac>" \
  -F response_format=<vtt or text or srt>

Ersetzen Sie <key> durch den von GWDG bereitgestellten Schlüssel, wählen Sie zwischen Transkriptionen oder Übersetzungen, vtt oder srt oder text, und Ihre Audiodatei.
Dieser curl-Befehl verwendet whisper-large-v2 als Backend-Modell.

Embeddings

Embeddings sind nur über die API verfügbar und unterstützen die gleiche API wie die OpenAI Embeddings API.

Sehen Sie sich das folgende minimale Beispiel an.

curl https://chat-ai.academiccloud.de/v1/embeddings \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "The food was delicious and the waiter...",
    "model": "e5-mistral-7b-instruct",
    "encoding_format": "float"
  }'

Sehen Sie sich das folgende Code-Beispiel an, um RAG-Anwendungen mit llamaindex zu entwickeln: gitlab-ce.gwdg.de/hpc-team-public/chat-ai-llamaindex-examples

RAG/Arcanas

Arcanas sind ebenfalls über die API-Schnittstelle zugänglich.
Ein minimales Beispiel mit curl lautet:

curl -i -X POST \
  --url https://chat-ai.academiccloud.de/v1/chat/completions \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'Content-Type: application/json'\
  --header 'inference-service: saia-openai-gateway'\
  --data '{
    "model": "qwen3-30b-a3b-instruct-2507",
    "messages":[{"role":"system","content":"You are an assistant."},{"role":"user","content":"What is Chat-Ai?"}],
    "enable-tools": true,
    "arcana" : {
      "id": "<the Arcana ID>"
    },
    "temperature": 0.0,
    "top_p": 0.05
  }'

Docling

SAIA stellt Docling als Dienst über die API-Schnittstelle an folgendem Endpunkt bereit:

https://chat-ai.academiccloud.de/v1/documents

Ein minimales Beispiel mit curl lautet:

curl -X POST "https://chat-ai.academiccloud.de/v1/documents/convert" \
    -H "accept: application/json" \
    -H 'Authorization: Bearer <api_key>' \
    -H "Content-Type: multipart/form-data" \
    -F "document=@/path/to/your/file.pdf"

Die Antwort ist eine JSON-Antwort wie folgt:

{
  "response_type": "MARKDOWN",
  "filename": "example_document",
  "images": [
    {
      "type": "picture",
      "filename": "image1.png",
      "image": "data:image/png;base64, xxxxxxx..."
    },
    {
      "type": "table",
      "filename": "table1.png",
      "image": "data:image/png;base64, xxxxxxx..."
    }
  ],
  "markdown": "#Your Markdown File",
}

Um nur das Feld „markdown“ aus der Antwort zu extrahieren, können Sie das jq-Tool in der Kommandozeile verwenden (kann mit sudo apt install jq installiert werden).
Sie können die Ausgabe auch einfach in einer Datei speichern, indem Sie > <output-file-name> an den Befehl anhängen.

Hier ist ein Beispiel, um eine PDF-Datei in Markdown zu konvertieren und sie in output.md zu speichern:

curl -X POST "https://chat-ai.academiccloud.de/v1/documents/convert" \
    -H "accept: application/json" \
    -H 'Authorization: Bearer <api_key>' \
    -H "Content-Type: multipart/form-data" \
    -F "document=@/path/to/your/file.pdf" \
    | jq -r '.markdown' \
    > output.md

Sie können erweiterte Einstellungen in Ihrer Anfrage hinzufügen, indem Sie Abfrageparameter hinzufügen:

ParameterWerteBeschreibung
response_typemarkdown, html, json oder tokensDer Ausgabedateityp
extract_tables_as_imagestrue oder falseOb Tabellen als Bilder zurückgegeben werden sollen
image_resolution_scale1, 2, 3, 4Skalierungsfaktor für die Bildauflösung

Zum Beispiel, um Tabellen als Bilder zu extrahieren, die Bildauflösung mit Faktor 4 zu skalieren und in HTML zu konvertieren, rufen Sie auf:

https://chat-ai.academiccloud.de/v1/documents/convert?response_type=json&extract_tables_as_images=false&image_resolution_scale=4

Dies ergibt eine Ausgabe wie:

{
  "response_type": "HTML",
  "filename": "example_document",
  "images": [
    ...
  ],
  "html": "#Your HTML data",
}

API-Grenzwerte

Sie können Ihre aktuellen API-Nutzungsgrenzen und verbleibenden Kontingente direkt in den HTTP-Antwortkopfzeilen überprüfen.
Führen Sie den folgenden Befehl aus (ersetzen Sie <your-API-Key> durch Ihren tatsächlichen Schlüssel und passen Sie den Endpunkt bei Bedarf an):

curl -i -H "Authorization: Bearer <your-API-Key>" \
     -H "Content-Type: application/json" \
     https://saia.gwdg.de/v1/chat/completions

Die Antwort enthält sowohl den Körper als auch die Rate-Limit-Kopfzeilen.
Beispiel-Ausgabe:

HTTP/2 400
content-type: application/json
content-length: 43
x-ratelimit-limit-minute: 1000
x-ratelimit-limit-hour: 10000
x-ratelimit-limit-day: 50002
x-ratelimit-remaining-minute: 999
x-ratelimit-remaining-hour: 9999
x-ratelimit-remaining-day: 50001
ratelimit-limit: 1000
ratelimit-remaining: 999
ratelimit-reset: 1
date: Mon, 20 Oct 2025 10:13:58 GMT
server: uvicorn
via: kong/3.6.1

Interpretation der Kopfzeilen

  • X-RateLimit-Limit-*: Maximale Anzahl an Anfragen pro Zeitfenster (Minute, Stunde, Tag).
  • X-RateLimit-Remaining-*: Anzahl an verbleibenden Anfragen vor Erreichen des Limits.
  • ratelimit-reset: Zeit (in Sekunden), bis der Zähler zurückgesetzt wird.

Entwicklerreferenz

Die GitHub-Repositories SAIA-Hub, SAIA-HPC und Chat AI enthalten alle Komponenten für die Architektur im obigen Diagramm.

Zitierweise

Wenn Sie SAIA in Ihrer Forschung, Dienstleistungen oder Publikationen verwenden, zitieren Sie uns bitte wie folgt:

@article{doosthosseini_saia_2026,
    title = {{SAIA}: a seamless {Slurm}-native solution for {HPC}-based services},
    volume = {82},
    issn = {1573-0484},
    url = {https://doi.org/10.1007/s11227-026-08508-3},
    doi = {10.1007/s11227-026-08508-3},
    number = {7},
    journal = {The Journal of Supercomputing},
    author = {Doosthosseini, Ali and Decker, Jonathan and Nolte, Hendrik and Kunkel, Julian},
    month = may,
    year = {2026},
    pages = {403},
}

Weitere Dienste

Falls Sie weitere Fragen haben, kontaktieren Sie uns gerne unter support@gwdg.de.