enhancement
major
minor
defect
critical
major
minor
major
#30254
tl-chat: a missing API key is announced as a rejected key ("Das Modell hat den Zugangsschlüssel abgelehnt")
tl-chat / tl-ai-core 8.0.0-alpha12.819, application E-Home (haumacher/ehome #126).
Without the secret tl_anthropic_api_key (no other provider configured), a chat message is answered with the headline "Das Modell hat den Zugangsschlüssel abgelehnt. Bitte wende dich an deine Administration." - the text of the provider error kind AUTHENTICATION. Only the detail below it says that the secret tl_anthropic_api_key is missing. The key was not rejected; there is none. An administrator reading the headline checks the key instead of providing one.
Expected: a missing key has an error kind and headline of its own ("No language model is available: the secret tl_anthropic_api_key is not set."), as the article ai/index describes the behaviour ("a chat message is answered with the names of the secrets that would make a provider available").
Workaround in E-Home: none.
Lösung
- Neue Fehlerart ProviderException.Kind.NO_CREDENTIALS: ein Anbieter ohne Zugangsdaten wurde gar nicht aufgerufen. AgentLoop meldet einen Lauf, für den kein Modell mit Zugangsdaten übrig ist, mit dieser Art (bisher AUTHENTICATION, die Art einer vom Anbieter abgelehnten Anfrage), ebenso AbstractStreamingProvider, wenn die Zugangsdaten beim Senden fehlen.
- ModelAvailability setzt für diese Art keine Markierung gegen das Modell (Failover übergeht einen Anbieter ohne Schlüssel ohne Markierung).
- Der Chat zeigt bei NO_CREDENTIALS als Überschrift die Meldung des Servers, die das fehlende Secret nennt (z.B. "Das KI-Modell mistral-medium-latest kann nicht verwendet werden: Die Zugangsdaten seines Anbieters mistral sind nicht verfügbar. Hinterlegen Sie das Secret tl_mistral_api_key."), einmal und ohne zusätzliche Detailzeile, statt "Das Modell hat den Zugangsschlüssel abgelehnt". Fehlt die Meldung, steht dort ein allgemeiner Hinweis, dass kein KI-Modell verfügbar ist.
- Die Meldung eines Anbieterfehlers wird für den Chat einmal im Thread des Laufs formuliert, der im Kontext des Fensters läuft, aus dem gesendet wurde - also in der Sprache des Benutzers. Diesen Text bekommen sowohl die Live-Anzeige (ChatSSEHandler) als auch das gespeicherte Gespräch (ConversationLogListener). Bisher wurde der Live-Text erst im SSE-Worker ohne Benutzerkontext übersetzt und das Gespräch speicherte den Text in der Log-Sprache, sodass die Meldung in einer deutschen Oberfläche englisch erschien. Bereits gespeicherte Gespräche behalten ihren Text.
- Die Eval-Auswertung (tl-ai-eval) zählt NO_CREDENTIALS wie AUTHENTICATION zu den Infrastrukturfehlern; der Artikel ai/providers beschreibt das Verhalten.