diff --git a/api/config.py b/api/config.py index e94e5dc3..da132ead 100644 --- a/api/config.py +++ b/api/config.py @@ -3926,6 +3926,7 @@ _SETTINGS_DEFAULTS = { "send_key": "enter", # 'enter' or 'ctrl+enter' "show_token_usage": False, # show input/output token badge below assistant messages "show_tps": False, # show tokens-per-second chip in assistant message headers + "fade_text_effect": False, # animate newly streamed words with a lightweight fade-in effect "show_cli_sessions": False, # merge CLI sessions from state.db into the sidebar "sync_to_insights": False, # mirror WebUI token usage to state.db for /insights "check_for_updates": True, # check if webui/agent repos are behind upstream @@ -4055,6 +4056,7 @@ _SETTINGS_BOOL_KEYS = { "onboarding_completed", "show_token_usage", "show_tps", + "fade_text_effect", "show_cli_sessions", "sync_to_insights", "check_for_updates", diff --git a/static/boot.js b/static/boot.js index 137f684c..d5feda14 100644 --- a/static/boot.js +++ b/static/boot.js @@ -1376,6 +1376,7 @@ function applyBotName(){ window._sendKey=s.send_key||'enter'; window._showTokenUsage=!!s.show_token_usage; window._showTps=!!s.show_tps; + window._fadeTextEffect=!!s.fade_text_effect; window._showCliSessions=!!s.show_cli_sessions; window._soundEnabled=!!s.sound_enabled; window._notificationsEnabled=!!s.notifications_enabled; @@ -1413,6 +1414,7 @@ function applyBotName(){ window._sendKey='enter'; window._showTokenUsage=false; window._showTps=false; + window._fadeTextEffect=false; window._showCliSessions=false; window._soundEnabled=false; window._notificationsEnabled=false; diff --git a/static/i18n.js b/static/i18n.js index 321e617c..db0ca5b0 100644 --- a/static/i18n.js +++ b/static/i18n.js @@ -244,6 +244,8 @@ const LOCALES = { busy_interrupt_confirm: 'Interrupted — sending new message', settings_label_busy_input_mode: 'Busy input mode', settings_desc_busy_input_mode: 'Controls what happens when you send a message while the agent is running. Queue waits; Interrupt cancels and starts fresh; Steer injects a correction mid-turn without interrupting (falls back to queue when agent or stream unavailable).', + settings_label_fade_text_effect: 'Fade text effect', + settings_desc_fade_text_effect: 'Fade newly streamed words in while the assistant is responding. Similar to OpenWebUI; off by default for maximum performance.', settings_busy_input_mode_queue: 'Queue follow-up', settings_busy_input_mode_interrupt: 'Interrupt current turn', settings_busy_input_mode_steer: 'Steer (mid-turn correction)', @@ -2598,6 +2600,8 @@ const LOCALES = { busy_interrupt_confirm: '中断 — 新しいメッセージを送信中', settings_label_busy_input_mode: 'ビジー時の入力モード', settings_desc_busy_input_mode: 'エージェント実行中にメッセージを送信した時の動作を制御します。Queue は待機、Interrupt はキャンセルして再開、Steer は中断せずにターン中に修正を注入します (エージェントやストリームが利用不可ならキューにフォールバック)。', + settings_label_fade_text_effect: 'テキストのフェード効果', + settings_desc_fade_text_effect: 'アシスタントの応答中に新しくストリーミングされた単語をフェードインします。OpenWebUI に似た表示です。最大パフォーマンスのため既定ではオフです。', settings_busy_input_mode_queue: 'フォローアップをキュー', settings_busy_input_mode_interrupt: '現在のターンを中断', settings_busy_input_mode_steer: 'ステア (ターン中の修正)', @@ -3732,6 +3736,8 @@ const LOCALES = { busy_interrupt_confirm: 'Прервано — отправка нового сообщения', settings_label_busy_input_mode: 'Режим ввода при занятости', settings_desc_busy_input_mode: 'Определяет поведение при отправке сообщения во время работы агента. Очередь ждёт; Прерывание отменяет и начинает заново; Steer внедряет коррекцию без прерывания.', + settings_label_fade_text_effect: 'Эффект плавного появления текста', + settings_desc_fade_text_effect: 'Плавно показывает новые слова во время ответа ассистента. Похоже на OpenWebUI; по умолчанию выключено для максимальной производительности.', settings_busy_input_mode_queue: 'Поставить в очередь', settings_busy_input_mode_interrupt: 'Прервать текущий оборот', settings_busy_input_mode_steer: 'Steer (прерывание + отправка)', @@ -4881,6 +4887,8 @@ const LOCALES = { busy_interrupt_confirm: 'Interrumpido \u2014 enviando nuevo mensaje', settings_label_busy_input_mode: 'Modo de entrada ocupada', settings_desc_busy_input_mode: 'Controla qué sucede al enviar mensajes mientras el agente está activo. Cola espera; Interrumpir cancela y empieza de nuevo; Steer inyecta una corrección sin interrumpir (usa cola si el agente no está disponible).', + settings_label_fade_text_effect: 'Efecto de desvanecimiento de texto', + settings_desc_fade_text_effect: 'Hace aparecer gradualmente las palabras nuevas mientras el asistente responde. Similar a OpenWebUI; desactivado por defecto para máximo rendimiento.', settings_busy_input_mode_queue: 'Poner en cola', settings_busy_input_mode_interrupt: 'Interrumpir turno actual', settings_busy_input_mode_steer: 'Steer (corrección a mitad de turno)', @@ -5969,6 +5977,8 @@ const LOCALES = { busy_interrupt_confirm: 'Unterbrochen \u2014 neue Nachricht wird gesendet', settings_label_busy_input_mode: 'Eingabemodus bei Besch\u00e4ftigung', settings_desc_busy_input_mode: 'Steuert, was passiert, wenn Sie w\u00e4hrend der Agentenaktivit\u00e4t eine Nachricht senden. Warteschlange wartet; Unterbrechen bricht ab und startet neu; Steer f\u00fcgt eine Korrektur ein ohne zu unterbrechen.', + settings_label_fade_text_effect: 'Text-Fade-Effekt', + settings_desc_fade_text_effect: 'Blendet neu gestreamte Wörter während der Antwort des Assistenten sanft ein. Ähnlich wie OpenWebUI; für maximale Leistung standardmäßig deaktiviert.', settings_busy_input_mode_queue: 'In Warteschlange einreihen', settings_busy_input_mode_interrupt: 'Aktuellen Durchgang unterbrechen', settings_busy_input_mode_steer: 'Steer (Korrektur ohne Unterbrechung)', @@ -7104,6 +7114,8 @@ const LOCALES = { busy_interrupt_confirm: '已中断 — 正在发送新消息', settings_label_busy_input_mode: '忙碌输入模式', settings_desc_busy_input_mode: '控制在代理运行时发送消息的行为。队列等待;中断取消并重新开始;Steer中途注入纠正,不中断。', + settings_label_fade_text_effect: '文本淡入效果', + settings_desc_fade_text_effect: '在助手回复时让新流式输出的词语淡入显示。类似 OpenWebUI;为获得最佳性能默认关闭。', settings_busy_input_mode_queue: '加入队列', settings_busy_input_mode_interrupt: '中断当前回合', settings_busy_input_mode_steer: 'Steer(中断 + 发送)', @@ -8758,6 +8770,8 @@ const LOCALES = { busy_interrupt_confirm: '\u5df2\u4e2d\u65ad \u2014 \u6b63\u5728\u767c\u9001\u65b0\u8a0a\u606f', settings_label_busy_input_mode: '\u5fd9\u788c\u8f38\u5165\u6a21\u5f0f', settings_desc_busy_input_mode: '\u63a7\u5236\u5728\u4ee3\u7406\u904b\u884c\u6642\u767c\u9001\u8a0a\u606f\u7684\u884c\u70ba\u3002\u4f47\u5217\u7b49\u5f85\uff1b\u4e2d\u65b7\u53d6\u6d88\u4e26\u91cd\u65b0\u958b\u59cb\uff1bSteer\u4e2d\u9014\u6ce8\u5165\u7d3a\u6b63\uff0c\u4e0d\u4e2d\u65b7\u3002', + settings_label_fade_text_effect: '文字淡入效果', + settings_desc_fade_text_effect: '在助理回覆時讓新串流輸出的詞語淡入顯示。類似 OpenWebUI;為獲得最佳效能預設關閉。', settings_busy_input_mode_queue: '\u52a0\u5165\u4f47\u5217', settings_busy_input_mode_interrupt: '\u4e2d\u65ad\u7576\u524d\u56de\u5408', settings_busy_input_mode_steer: 'Steer\uff08\u4e2d\u9014\u7d3a\u6b63\uff09', @@ -9343,6 +9357,8 @@ const LOCALES = { busy_interrupt_confirm: 'Interrompido — enviando nova mensagem', settings_label_busy_input_mode: 'Modo de input ocupado', settings_desc_busy_input_mode: 'Controla o que acontece ao enviar mensagem com agente rodando. Fila espera; Interromper cancela; Steer injeta correção.', + settings_label_fade_text_effect: 'Efeito de fade no texto', + settings_desc_fade_text_effect: 'Faz novas palavras aparecerem gradualmente enquanto o assistente responde. Similar ao OpenWebUI; desativado por padrão para melhor desempenho.', settings_busy_input_mode_queue: 'Enfileirar follow-up', settings_busy_input_mode_interrupt: 'Interromper turno atual', settings_busy_input_mode_steer: 'Steer (correção no meio do turno)', @@ -10403,6 +10419,8 @@ const LOCALES = { busy_interrupt_confirm: 'Interrupted — sending new message', settings_label_busy_input_mode: '작업 중 입력 방식', settings_desc_busy_input_mode: '에이전트가 실행 중일 때 메시지를 보내면 어떻게 처리할지 제어합니다. 대기는 다음 차례까지 기다리고, 중단은 현재 작업을 취소하고 새로 시작하며, 조정은 현재 작업을 중단하지 않고 중간 수정 사항을 전달합니다(에이전트 또는 스트림을 사용할 수 없으면 대기로 전환).', + settings_label_fade_text_effect: '텍스트 페이드 효과', + settings_desc_fade_text_effect: '어시스턴트가 응답하는 동안 새로 스트리밍되는 단어를 부드럽게 표시합니다. OpenWebUI와 비슷하며, 최대 성능을 위해 기본값은 꺼짐입니다.', settings_busy_input_mode_queue: '후속 메시지 대기', settings_busy_input_mode_interrupt: '현재 작업 중단', settings_busy_input_mode_steer: '조정(중간 수정)', diff --git a/static/index.html b/static/index.html index c3a37bfb..4a33e1a2 100644 --- a/static/index.html +++ b/static/index.html @@ -1004,6 +1004,13 @@
Displays tokens per second in assistant message headers while streaming and after a response completes. Off by default.
+
+ +
Fade newly streamed words in while the assistant is responding. Similar to OpenWebUI; off by default for maximum performance.
+