← Zurück zum Chat

API-Integration

Wie andere Systeme (Projekte, Backends, Tools) das interne LLM aufrufen.

Basis

Base-URLhttps://llm.devfader.de
AuthentifizierungHeader Authorization: Bearer DEIN_KEY
Content-Typeapplication/json

Jedes aufrufende System bekommt einen eigenen API-Key. So ist im Log nachvollziehbar, wer was nutzt.

Endpunkte

MethodePfadZweck
GET/healthErreichbarkeit prüfen (ohne Key)
GET/v1/modelsInstallierte Modelle auflisten
POST/v1/chatText-Chat / Textaufgaben
POST/v1/extractBild → Text, Felder aus Bild

POST /v1/chat

FeldPflichtBeschreibung
messagesjaVerlauf aus {role, content} — role = system/user/assistant
modelneinStandard: qwen2.5:3b-instruct
streamneintrue = Antwort als Server-Sent-Events
optionsneindirekt an Ollama, z.B. {"temperature":0.7}
curl https://llm.devfader.de/v1/chat \
  -H "Authorization: Bearer DEIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"Fasse zusammen: ..."}]}'

POST /v1/extract

Text aus einem Bild lesen. Das Bild Base64-kodiert im Feld image mitschicken.

FeldPflichtBeschreibung
imagejaBild als Base64
modeneinauto (Standard), ocr, vision
instructionneinfreie Anweisung zum erkannten Text
fieldsneinListe von Feldnamen → als JSON-Objekt zurück

Antwortfelder

FeldBeschreibung
methodocr oder vision — welcher Weg genutzt wurde
textder komplette erkannte Text
resultAntwort auf instruction (sonst null)
fieldsextrahierte Felder als Objekt (sonst null)
ocr_confidenceOCR-Konfidenz 0–100 (null bei Vision)

Gezielte Felder extrahieren

IMG=$(base64 -w0 rechnung.png)
curl https://llm.devfader.de/v1/extract \
  -H "Authorization: Bearer DEIN_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"image\":\"$IMG\",\"fields\":[\"rechnungsnummer\",\"datum\",\"summe\"]}"

Antwort:

{
  "method": "ocr",
  "fields": {
    "rechnungsnummer": "2024-0815",
    "datum": "12.03.2024",
    "summe": "149,00 EUR"
  },
  "text": "...",
  "duration_ms": 2100
}

Fehlercodes

CodeBedeutung
401API-Key fehlt oder ist ungültig
429Rate-Limit überschritten (30 Anfragen/Minute pro Key)
400Bild konnte nicht gelesen werden
502LLM-Backend (Ollama) nicht erreichbar oder Fehler

Beispiel: Node.js

import { readFileSync } from "fs";

const image = readFileSync("rechnung.png").toString("base64");

const res = await fetch("https://llm.devfader.de/v1/extract", {
  method: "POST",
  headers: {
    "Authorization": "Bearer DEIN_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    image,
    mode: "auto",
    fields: ["rechnungsnummer", "datum", "summe"],
  }),
});
const data = await res.json();
console.log(data.fields);

Hinweis: Das System läuft auf CPU — bei Last werden Anfragen in eine Warteschlange gestellt. Chat braucht einige Sekunden, eine Vision-Extraktion bis zu ~1 Minute.