enhancement
major
minor
major
minor
major
#29954
KI: Modellkatalog aus der Dienstkonfiguration des LLM-Anbieter-Dienstes herausnehmen und in einer eigenen Ansicht zeigen
Kontext
Der Dienst LLMProviderService (tl-ai-core) kennt für jedes konfigurierte Modell Metadaten: Preise, Kontextfenster, maximale Ausgabe, Fähigkeiten wie Tool-Aufrufe, Reasoning oder Anhänge, Wissensstand. Sie stammen aus dem Katalog von models.dev. Beim Start liest der Dienst zuerst die mit der Anwendung ausgelieferte Kopie (models-dev-snapshot.json), danach im Hintergrund den aktuellen Katalog von https://models.dev/api.json (abschaltbar mit fetch-remote-catalog="false"). Manuelle model-overrides werden darübergelegt. Agent-Loop, Kostenberechnung und Effort-Stufen lesen diese Daten zur Laufzeit.
Damit der klassische Service-Editor die Daten anzeigen kann, schreibt LLMProviderService.installCatalog sie bei jedem Start in die eigene laufende Konfiguration, in die schreibgeschützte Eigenschaft model-catalog/llm-configuration.
Problem
- Der Service-Editor (Administration → Development → Service Editor → „LLM-Anbieter“, ebenso die Dienste-Ansicht der React-Administration) bearbeitet eine Kopie der laufenden Konfiguration und speichert sie vollständig. Schon ein Speichern ohne Änderung schreibt deshalb die kompletten Modell-Metadaten in die autoconf-Datei (WEB-INF/autoconf/com.top_logic.tl.ai.core.provider.LLMProviderService.config.xml), in tl-ai-demo z. B. rund 60 Zeilen für drei Anthropic-Modelle.
- Diese Einträge haben keine Wirkung: Beim nächsten Start leert installCatalog die Eigenschaft und füllt sie neu. Die Datei enthält danach aber einen Stand von Preisen und Limits, der maßgeblich aussieht und es nicht ist, und jedes Speichern erzeugt einen Diff im Quellbaum.
- Die Konfiguration dient hier als Anzeigekanal für Laufzeitdaten. Das passt nicht zum Konfigurationsmodell: Was in der Konfiguration steht, wird gespeichert.
- In der React-Oberfläche sind die Modelldaten nirgends sichtbar.
Lösung
- Die Eigenschaft llm-configuration entfällt aus LLMProviderService.ModelCatalogConfig. installCatalog schreibt nicht mehr in die Konfiguration; der Katalog lebt allein im Dienst. Die übrigen Eigenschaften des Katalogs (catalog-url, fetch-remote-catalog, model-overrides) bleiben Konfiguration.
- Der Dienst merkt sich je Modell die Herkunft der Daten (ausgelieferte Kopie, aktueller Katalog von models.dev, manuelle Überschreibung) und den Ladezustand des Katalogs (Laden des aktuellen Katalogs abgeschaltet, läuft, geladen, fehlgeschlagen; Zeitpunkt; URL) und liefert beides über eine Schnittstelle als unveränderlichen Stand.
- Die TL-Script-Funktionen aiModelCatalog() (eine Zeile je Anbieter und konfiguriertem Modell mit seinen Metadaten; ein Modell ohne Katalogeintrag erscheint mit unbekannter Herkunft) und aiModelCatalogStatus() (Ladezustand) machen die Daten für Ansichten verfügbar.
- Ein eigener Bereich „KI-Modelle“ der React-Administration (beigesteuert von tl-ai-core, neben „Zugriffstokens“) zeigt den Ladezustand und eine nach Anbieter gruppierte Tabelle der Modelle; „Neu laden“ aktualisiert die Anzeige.
- tl-ai-demo, tl-ai-eval und die Test-Konfigurationen werden bereinigt.
Abgrenzung
- Das Bearbeiten von model-overrides bleibt im Service-Editor.
- Gefunden bei der UI-Prüfung zu #29948 (Geheimnisquellen und Credential-Provider); dort wird es nicht behoben.
Verifikation
- Test: Speichern der Dienstkonfiguration über InAppServiceConfigStore schreibt keine Modell-Metadaten.
- Test: Der Dienst liefert nach dem Start die Metadaten der konfigurierten Modelle aus der ausgelieferten Kopie, mit Überschreibungen und der richtigen Herkunft.
- UI-Prüfung in tl-ai-demo: die neue Ansicht zeigt die Modelle der konfigurierten Anbieter.
Migration
Die Eigenschaft llm-configuration des Modellkatalogs gibt es nicht mehr. Eine Anwendung, deren gespeicherte Dienstkonfiguration (WEB-INF/autoconf/com.top_logic.tl.ai.core.provider.LLMProviderService.config.xml, oder eine andere Konfigurationsdatei des LLMProviderService) einen Abschnitt
<model-catalog> <llm-configuration>...</llm-configuration> </model-catalog>
enthält, startet sonst nicht. Den Abschnitt <llm-configuration> samt Inhalt ersatzlos löschen; er hatte nie eine Wirkung. Die Modelldaten zeigt jetzt Administration → KI-Modelle.