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:
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¶
{
"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.
Response¶
{
"object": "list",
"data": [
{
"id": "lenny",
"object": "model",
"created": 1718400000,
"owned_by": "lenny"
}
]
}
GET /health¶
Gibt den Systemstatus zurück. Kein API-Key erforderlich.
Response¶
| 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.
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 |