Skip to content

API-Referenz

Lenny implementiert eine OpenAI-kompatible REST-API. Alle Endpunkte liegen unter https://lenny-api.mycubeserver.com.

Authentifizierung

Alle Endpunkte außer /health und /v1/models erfordern einen API-Key im HTTP-Header — anonymer Zugriff auf den Chat ist deaktiviert:

Authorization: Bearer sk-lenny-DEIN-KEY

Fehlende oder ungültige Keys werden mit 401 Unauthorized abgewiesen.


POST /v1/chat/completions

Beantwortet eine Frage auf Basis der Wissensbasis. Kompatibel mit der OpenAI Chat Completions API.

Request

POST /v1/chat/completions
Content-Type: application/json
Authorization: Bearer sk-lenny-DEIN-KEY
{
  "messages": [
    {"role": "user", "content": "Was ist eine Datenbank?"}
  ],
  "stream": false,
  "user": "dein-username"
}
Feld Typ Pflicht Beschreibung
messages Array ja Chat-Verlauf; mind. eine user-Nachricht
model string nein Wird ignoriert – Lenny wählt selbst
stream boolean nein true → SSE-Streaming (default: false)
user string nein Deine User-ID, um das persönliche Gedächtnis einzubeziehen
lenny_retrieval string nein Retrieval-Modus für diesen Request (siehe Tabelle unten)
lenny_top_n int nein Anzahl Retrieval-Treffer (default: 3)

Verfügbare Retrieval-Modi (lenny_retrieval):

Wert Beschreibung
auto Bester verfügbarer Modus (Default)
hybrid Kombination aus Stichwort- und Bedeutungssuche
tfidf Nur lexikalisches Matching
embed Nur semantische Ähnlichkeit
graph Strukturbasiertes Retrieval
graph-hybrid Graph kombiniert mit Stichwortsuche
fts Volltext-Suche

Sonder-Befehl: /merke

Beginnt die Nachricht mit /merke, wird das Konzept ins persönliche Gedächtnis gespeichert statt beantwortet.
Beispiel: "/merke Datenbank: Ein strukturiertes System zur Datenhaltung."

Response (stream: false)

{
  "id": "chatcmpl-a1b2c3d4e5f6",
  "object": "chat.completion",
  "created": 1718400000,
  "model": "lenny",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Eine Datenbank ist ein System zur strukturierten..."
      },
      "finish_reason": "stop"
    }
  ]
}

Response (stream: true)

Der Server schickt Server-Sent Events (SSE). Jedes Ereignis ist eine Zeile der Form data: {...}\n\n. Das letzte Ereignis ist data: [DONE]\n\n.

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Eine"},"finish_reason":null}]}

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":" Datenbank"},"finish_reason":null}]}

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

GET /v1/models

Listet verfügbare Modelle. Kompatibel mit OpenAI-Clients.

GET /v1/models
Authorization: Bearer sk-lenny-DEIN-KEY

Response

{
  "object": "list",
  "data": [
    {
      "id": "lenny",
      "object": "model",
      "created": 1718400000,
      "owned_by": "lenny"
    }
  ]
}

GET /health

Gibt den Systemstatus zurück. Kein API-Key erforderlich.

GET /health

Response

{
  "status": "ok",
  "retrieval": "hybrid"
}
Feld Mögliche Werte Bedeutung
status "ok" / "loading" loading während des Systemstarts
retrieval "hybrid" / "tfidf" / "none" Aktiver Retrieval-Modus

GET /v1/patterns

Listet erkannte strukturelle Muster aus der Wissensbasis.

GET /v1/patterns
Authorization: Bearer sk-lenny-DEIN-KEY

Query-Parameter (optional):

Parameter Beschreibung
anchor Filtert nach Oberbegriff (z. B. anchor=Programmiersprache)
relation_type Filtert nach Relationstyp (z. B. relation_type=ist_ein)
status Filtert nach Status (default: active)

Response

{
  "patterns": [
    {
      "pattern_type": "shared_object",
      "relation_type": "ist_ein",
      "anchor": "Programmiersprache",
      "targets": ["Python", "JavaScript"],
      "confidence": 1.0,
      "status": "active"
    }
  ],
  "total": 1
}

curl-Beispiel

# Alle aktiven Muster
curl -s "https://lenny-api.mycubeserver.com/v1/patterns" \
  -H "Authorization: Bearer sk-lenny-DEIN-KEY" | python -m json.tool

# Nur ist_ein-Muster
curl -s "https://lenny-api.mycubeserver.com/v1/patterns?relation_type=ist_ein" \
  -H "Authorization: Bearer sk-lenny-DEIN-KEY" | python -m json.tool

POST /v1/evaluations

Fuehrt eine deterministische symbolische Evaluation aus. Der Endpoint lernt nicht aus Requests und speichert keine Signale. Details: Evaluation API V1.


Fehler-Codes

Code Bedeutung
401 API-Key fehlt oder ungültig
403 Zugriff verweigert
429 Rate-Limit überschritten
500 Interner Fehler