# Modellkatalog

> Wie ein LMSP-Dienst seine lokalen Modelle auflistet, das Modellobjekt und seine Capability-Schalter, die Zustände des Modell-Lebenszyklus, stabile Modell-IDs und Katalogrevisionen.

Source: https://madeforagent.com/de/lmsp/1.0/models/
Language: de
Specification: LMSP 1.0 (draft)
Updated: 2026-11-08

## 5.1 Modelle auflisten {#list}

```http
GET /lmsp/v1/models?capability=chat&ready_only=false
Authorization: Bearer <token>
```

| Abfrageparameter | Bedeutung |
| --- | --- |
| `capability` | Gibt nur Modelle zurück, die die genannte Fähigkeit haben, zum Beispiel `chat`, `embeddings` oder `tools`. |
| `ready_only` | Bei `true` werden nur Modelle zurückgegeben, deren `status` `ready` ist. Standardwert ist `false`. |

```json
{
  "object": "list",
  "catalog_revision": "42",
  "data": [
    {
      "id": "qwen3:14b-q4_k_m",
      "object": "model",
      "display_name": "Qwen3 14B Q4_K_M",
      "owned_by": "local",
      "family": "qwen3",
      "revision": "sha256:8f27c1a4e9b05d36f2a7c8e1b4d90a63c5e2f7b8a1d4c9e60b3f5a7d2c8e1b04",
      "status": "ready",
      "capabilities": {
        "chat": true,
        "completion": true,
        "embeddings": false,
        "tools": true,
        "vision": false,
        "structured_output": true,
        "streaming": true
      },
      "input_modalities": ["text"],
      "output_modalities": ["text"],
      "context_window": 32768,
      "max_output_tokens": 8192,
      "runtime": {
        "backend": "llama.cpp",
        "device": "metal",
        "load_on_demand": true
      }
    }
  ]
}
```

Damit Clients nicht immer wieder den vollständigen Katalog abrufen müssen, **SOLLTE** ein Dienst einen `ETag`-Header, ein Feld `catalog_revision` oder beides zurückgeben:

- `catalog_revision` ist eine opake Zeichenfolge, die sich ändert, sobald sich der Katalog ändert.
- Ein Dienst, der `ETag` sendet, **SOLLTE** auf ein passendes `If-None-Match` mit `304 Not Modified` antworten.

## 5.2 Modellobjekt {#object}

| Feld | Bedeutung |
| --- | --- |
| `id` | Stabile Modellkennung, die in jeder Anfrage verwendet wird, die ein Modell benennt. |
| `object` | Immer `"model"`. |
| `display_name` | Menschenlesbarer Name. Der Nutzer kann ihn ändern. |
| `aliases` | Optionale Liste alternativer Namen. Sie sind rein informativ. |
| `owned_by` | Woher das Modell stammt. `local` für auf diesem Gerät installierte Modelle. |
| `family` | Modellfamilie, etwa `qwen3`. |
| `revision` | Digest des Modellinhalts, etwa `sha256:8f27...`. |
| `status` | Lebenszyklus-Zustand ([Abschnitt 5.3](https://madeforagent.com/de/lmsp/1.0/models.md#lifecycle)). |
| `capabilities` | Boolesche Schalter: `chat`, `completion`, `embeddings`, `tools`, `vision`, `structured_output` und `streaming`. |
| `input_modalities`, `output_modalities` | Die Arten von Inhalt, die das Modell liest und schreibt. `text` ist die einzige in 1.0 definierte Modalität. |
| `context_window` | Maximale Anzahl an Kontext-Tokens. |
| `max_output_tokens` | Maximale Anzahl an Tokens in einer Antwort. |
| `runtime` | `backend` (zum Beispiel `llama.cpp`), `device` (zum Beispiel `metal`) und `load_on_demand`. |
| `error` | Vorhanden, wenn `status` `error` ist. Ein Problemobjekt ([Abschnitt 9.3](https://madeforagent.com/de/lmsp/1.0/common-rules.md#errors)). |

Die `id` eines Modells **MUSS** stabil sein. Anzeigename und Aliase kann der Nutzer ändern; sie **DÜRFEN NICHT** als Primärschlüssel verwendet werden.

## 5.3 Modell-Lebenszyklus {#lifecycle}

```text
installed --> loading --> ready --> unloading --> installed
                 |
                 +-----> error
```

| Status | Bedeutung |
| --- | --- |
| `installed` | Das Modell existiert, ist aber nicht geladen. |
| `loading` | Speicher wird zugewiesen oder die Laufzeitumgebung wird initialisiert. |
| `ready` | Das Modell kann Anfragen sofort verarbeiten. |
| `unloading` | Ressourcen werden freigegeben. |
| `error` | Das Laden ist fehlgeschlagen. Das Modellobjekt **SOLLTE** einen strukturierten Fehler enthalten. |

Eine neue Ladeanfrage versetzt ein Modell im Zustand `error` zurück nach `loading`.

Benennt eine Anfrage ein Modell, das `installed` ist und dessen `runtime.load_on_demand` `true` ist, lädt der Dienst es im Rahmen der Anfrage. Kann das Modell nicht sofort verwendet werden und wird nicht bei Bedarf geladen, antwortet der Dienst mit `409` und `model_not_ready`. Schlägt das Laden fehl, lautet der Fehler `model_load_failed`.

## 5.4 Modelloperationen {#operations}

`GET /lmsp/v1/models/{model_id}` gibt ein Modellobjekt zurück. Eine unbekannte ID ergibt `404` mit `model_not_found`.

Zwei optionale Endpunkte steuern das Laden explizit. Sie sind verfügbar, wenn die Fähigkeit `model_management` `true` ist, und erfordern den Scope `models:manage` ([Abschnitt 10.3](https://madeforagent.com/de/lmsp/1.0/security.md#scopes)):

| Endpunkt | Verhalten |
| --- | --- |
| `POST /lmsp/v1/models/{model_id}/load` | Lädt das Modell vorab. Gibt das Modellobjekt mit `202 Accepted` zurück, wenn das Laden begonnen hat, oder mit `200`, wenn es bereits `ready` ist. |
| `POST /lmsp/v1/models/{model_id}/unload` | Entlädt das Modell. Gibt das Modellobjekt zurück. Die Wiederholung der Anfrage ist harmlos. |

Beide akzeptieren einen `Idempotency-Key` ([Abschnitt 9.2](https://madeforagent.com/de/lmsp/1.0/common-rules.md#idempotency)).
