fix: Chat-Titelmodus admin-konfigurierbar (Issue #52) #55
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/issue-52-title-mode"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem (Issue #52)
Wenn kein Antwortmodus mit dem Key
instantexistiert (z. B. nach einem Rename), wurden Chat-Titel nie mehr generiert. Die Titel-Anfrage hatteinstanthartkodiert, fiel still auf den Standardmodus zurück und scheiterte häufig an Reasoning-Modellen: Das 48-Token-Budget wurde komplett von Reasoning-Tokens verbraucht,contentkam leer zurück und der Server finalisierte trotzdemNew chatals endgültigen Titel.Lösung
titleReasoningPreset(Default:auto) – der Admin wählt im Response-modes-Bereich wie beim Standardmodus einen Titelmodus (Dropdown neben „Standardmodus“, mit Option „Automatisch“).auto= bisheriges Verhalten (instant→ Standardmodus → erster aktivierter Modus). Umbenannte oder gelöschte Modi fallen kontrolliert aufautozurück.max_tokens: 512für die Titel-Generierung, damit Reasoning-Modelle Platz für das JSON-Resultat haben.Geänderte Bereiche
src/server/config/app-settings.js,src/server/config/runtime-settings.js(Setting + Validierung/Exposition)server.js(handleTitleGeneration)src/ui/partials/admin.html,public/app.js,public/styles/pages/admin-experience.css(Admin-UI)i18n/de.json,i18n/en.json(4 neue Keys)tests/runtime-settings.test.mjs(Rename/Unknown-Choice/Fallback/Default)Tests
npm run lint,test:i18n,test:docs,test:ui(Desktop + Mobile) – alles grünnpm run test:unit: 792 pass / 0 fail (4 Cancellations inchat-job-outcome.test.mjssind vorbestehend und auf cleanem Checkout reproduzierbar)test:security/test:api/test:e2ebewusst nicht ausgeführt (ändern Zustände / rufen Modelle auf)Closes #52
Danke für die PR. Der konfigurierbare Titelmodus und der beabsichtigte Auto→
instant-Fallback passen so. Es gibt aber noch einen Merge-Blocker: Wenn/api/titlenach deiner Änderung wegen leerem Modell-Output mit 502 antwortet, schlucktgenerateChatTitle()den Fehler inpublic/app.jsnur imcatch.pendingTitleConversationIdwurde am Aufrufort bereits gelöscht undtitleRetryPendingwird bei diesem Fehler nicht gesetzt. Dadurch wird entgegen der PR-Beschreibung beim nächsten substantiellen Turn nicht erneut versucht, einen Titel zu erzeugen. Bitte im Fehlerpfad für einen weiterhin vorhandenen, noch nicht betitelten Chat den Retry-Marker setzen/persistieren und einen Regressionstest ergänzen, der „erster Titelrequest schlägt fehl → nächster abgeschlossener Turn versucht erneut“ abdeckt. Der derzeit rotenpm audit-Check (nanoidüber Excalidraw) ist unabhängig von deiner PR und wird separat aufmainbehoben.Der unabhängige Audit-Fix ist jetzt mit Commit
4a5fe51über den grünen PR #56 inmaingemergt. Bitte rebasiere/aktualisiere deinen Branch auf den aktuellenmain, wenn du den Retry-Fix pushst; dann übernimmt deine PR automatisch den gepatchtennanoid-Lock und die vollständige CI läuft erneut.9bdb42d3c3ecc743a52bDanke für die Hinweise – beide erledigt:
Retry-Fix (Merge-Blocker): Der Retry-Vertrag ist jetzt in
public/js/chat/chat-title.jsausgelagert (needsTitleGeneration/markTitleRetry/clearTitleRetry).generateChatTitle()setzt und persistierttitleRetryPendingauf jedem nicht-finalisierenden Pfad (kein nutzbares Assistant, kein nutzbarer Input, fehlgeschlagener Request/Catch), und der Job-Completion-Gate nutztneedsTitleGeneration(). Damit wird der 502-Fehlerpfad nicht mehr still verschluckt: der nächste abgeschlossene substantielle Turn setzt den Titel erneut an.Rebase: Der Branch ist jetzt auf den aktuellen
main(4a5fe51, gepatchternanoid-Lock über PR #56) rebased – Commit15c9491(Titelmodus) +ecc743a(Retry-Fix) auf4a5fe51. Die PR übernimmt damit automatisch den gepatchten Lock.Tests:
lint,test:i18n,test:docs,test:ui(Desktop+Mobile) grün;test:unit796 pass / 0 fail. Neu:tests/chat-title.test.mjsmit Verhaltens-Regression „erster Titelrequest schlägt fehl → nächster abgeschlossener Turn retryt“ plus Source-Level-Assertion, dassgenerateChatTitle()den Marker im Fehlerpfad setzt. (Die 4 Cancellations inchat-job-outcome.test.mjssind vorbestehend, auch auf cleanem Checkout.)