mirror of
https://github.com/mattjaybe/SillyTavern-EchoChamber.git
synced 2026-04-26 10:31:42 +00:00
- Content Settings: Fixed Persona not working when enabled - Content Settings: Added support for Author's Note, can be enabled - Settings> Chat Participation: Fixed backspace and input issue with AI Replies per Comment
458 lines
No EOL
27 KiB
HTML
458 lines
No EOL
27 KiB
HTML
<div class="discord_settings">
|
||
<div class="inline-drawer">
|
||
<div class="inline-drawer-toggle inline-drawer-header">
|
||
<b>EchoChamber</b>
|
||
<div class="inline-drawer-icon fa-solid fa-circle-chevron-down down"></div>
|
||
</div>
|
||
<div class="inline-drawer-content">
|
||
|
||
<div class="ec-s-panel">
|
||
|
||
<!-- Description -->
|
||
<div class="ec-s-description">
|
||
Fake chat feed that reacts dynamically to conversation context.
|
||
</div>
|
||
|
||
<!-- Global Enable -->
|
||
<label class="ec-s-toggle-row ec-s-global-enable" for="discord_enabled">
|
||
<input id="discord_enabled" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text ec-s-label-bold">Enable EchoChamber</span>
|
||
</label>
|
||
|
||
<!-- ═══ GENERATION ENGINE ═══ -->
|
||
<div class="ec-s-section">
|
||
<button class="ec-s-section-header" aria-expanded="false" type="button">
|
||
<span class="ec-s-section-title">
|
||
<i class="fa-solid fa-microchip"></i> Generation Engine
|
||
</span>
|
||
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
|
||
</button>
|
||
<div class="ec-s-section-body" hidden>
|
||
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_source">
|
||
<i class="fa-solid fa-plug"></i> Source
|
||
</label>
|
||
<select id="discord_source" class="text_pole ec-s-select">
|
||
<option value="default">Default (Main API)</option>
|
||
<option value="profile">Connection Profile (Recommended)</option>
|
||
<option value="ollama">Ollama (Local)</option>
|
||
<option value="openai">OpenAI Compatible</option>
|
||
</select>
|
||
</div>
|
||
|
||
<!-- Provider: Ollama -->
|
||
<div id="discord_ollama_settings" class="ec-s-sub-panel ec-s-sub-panel--ollama"
|
||
style="display:none">
|
||
<div class="ec-s-sub-panel-title">
|
||
<i class="fa-solid fa-terminal"></i> Ollama
|
||
</div>
|
||
<input id="discord_url" type="text" class="text_pole ec-s-input"
|
||
placeholder="http://localhost:11434" title="Ollama API endpoint">
|
||
<select id="discord_model_select" class="text_pole ec-s-select"></select>
|
||
<div id="discord_ollama_status" class="ec-s-status-note"></div>
|
||
</div>
|
||
|
||
<!-- Provider: OpenAI Compatible -->
|
||
<div id="discord_openai_settings" class="ec-s-sub-panel ec-s-sub-panel--openai"
|
||
style="display:none">
|
||
<div class="ec-s-sub-panel-title">
|
||
<i class="fa-solid fa-cloud"></i> OpenAI Compatible
|
||
</div>
|
||
<select id="discord_openai_preset" class="text_pole ec-s-select">
|
||
<option value="custom">Custom</option>
|
||
<option value="lmstudio">LM Studio (:1234)</option>
|
||
<option value="kobold">KoboldCPP (:5001)</option>
|
||
<option value="textgen">TextGenWebUI (:5000)</option>
|
||
<option value="vllm">vLLM (:8000)</option>
|
||
</select>
|
||
<input id="discord_openai_url" type="text" class="text_pole ec-s-input"
|
||
placeholder="http://localhost:1234/v1" title="API endpoint URL">
|
||
<input id="discord_openai_key" type="password" class="text_pole ec-s-input"
|
||
placeholder="API Key (Optional)" title="API Key (if required)">
|
||
<input id="discord_openai_model" type="text" class="text_pole ec-s-input"
|
||
placeholder="Model name" title="Model identifier">
|
||
</div>
|
||
|
||
<!-- Provider: Connection Profile -->
|
||
<div id="discord_profile_settings" class="ec-s-sub-panel ec-s-sub-panel--profile"
|
||
style="display:none">
|
||
<div class="ec-s-sub-panel-title">
|
||
<i class="fa-solid fa-link"></i> Connection Profile
|
||
</div>
|
||
<select id="discord_preset_select" class="text_pole ec-s-select"></select>
|
||
<div class="ec-s-hint">
|
||
<i class="fa-solid fa-shield-halved"></i> Uses your existing ST credentials securely.
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══ DISPLAY ═══ -->
|
||
<div class="ec-s-section" data-default-open>
|
||
<button class="ec-s-section-header" aria-expanded="false" type="button">
|
||
<span class="ec-s-section-title">
|
||
<i class="fa-solid fa-sliders"></i> Display
|
||
</span>
|
||
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
|
||
</button>
|
||
<div class="ec-s-section-body" hidden>
|
||
|
||
<!-- Style + Position -->
|
||
<div class="ec-s-grid-2">
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_style">
|
||
<i class="fa-solid fa-palette"></i> Style
|
||
</label>
|
||
<select id="discord_style" class="text_pole ec-s-select">
|
||
<option value="twitch">Discord/Twitch</option>
|
||
<option value="verbose">Thoughtful</option>
|
||
<option value="twitter">Twitter/X</option>
|
||
<option value="news">Breaking News</option>
|
||
<option value="mst3k">MST3K</option>
|
||
<option value="nsfw_ava">Ava NSFW</option>
|
||
<option value="nsfw_kai">Kai NSFW</option>
|
||
<option value="hypebot">HypeBot</option>
|
||
<option value="doomscrollers">Doomscrollers</option>
|
||
<option value="darkroast">Dark Roast</option>
|
||
<option value="dumbanddumber">Dumb & Dumber</option>
|
||
<option value="ao3wattpad">AO3 / Wattpad</option>
|
||
<option value="custom">Custom</option>
|
||
</select>
|
||
</div>
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_position">
|
||
<i class="fa-solid fa-arrows-up-down-left-right"></i> Position
|
||
</label>
|
||
<select id="discord_position" class="text_pole ec-s-select">
|
||
<option value="bottom">Bottom</option>
|
||
<option value="top">Top</option>
|
||
<option value="left">Left</option>
|
||
<option value="right">Right</option>
|
||
<option value="popout">↗ Pop Out</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Users + Font + Opacity -->
|
||
<div class="ec-s-grid-3">
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_user_count">
|
||
<i class="fa-solid fa-users"></i> Users
|
||
</label>
|
||
<input id="discord_user_count" type="number" class="text_pole ec-s-input-num" min="1"
|
||
max="20" value="5" title="Number of fake users (1-20)">
|
||
</div>
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_font_size">
|
||
<i class="fa-solid fa-font"></i> Font (px)
|
||
</label>
|
||
<input id="discord_font_size" type="number" class="text_pole ec-s-input-num" min="8"
|
||
max="32" value="15" title="Font size in pixels">
|
||
</div>
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_opacity">
|
||
<i class="fa-solid fa-eye"></i> Opacity
|
||
</label>
|
||
<div class="ec-s-slider-row">
|
||
<input id="discord_opacity" type="range" class="slider ec-s-slider" min="10"
|
||
max="100" value="80" step="5">
|
||
<span id="discord_opacity_val" class="ec-s-slider-val">80%</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══ CONTENT SETTINGS ═══ -->
|
||
<div class="ec-s-section" data-default-open>
|
||
<button class="ec-s-section-header" aria-expanded="false" type="button">
|
||
<span class="ec-s-section-title">
|
||
<i class="fa-solid fa-gear"></i> Content Settings
|
||
</span>
|
||
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
|
||
</button>
|
||
<div class="ec-s-section-body" hidden>
|
||
|
||
<!-- Auto-update -->
|
||
<label class="ec-s-toggle-row" for="discord_auto_update">
|
||
<input id="discord_auto_update" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-sync"></i> Auto-update On Messages
|
||
</span>
|
||
</label>
|
||
|
||
<!-- Include Chat History -->
|
||
<label class="ec-s-toggle-row" for="discord_include_user">
|
||
<input id="discord_include_user" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-comments"></i> Include Chat History
|
||
</span>
|
||
</label>
|
||
<div id="discord_context_depth_container" class="ec-s-sub-field" style="display:none">
|
||
<label class="ec-s-field-label" for="discord_context_depth">Context Depth</label>
|
||
<input id="discord_context_depth" type="number" class="text_pole ec-s-input-num" min="2"
|
||
max="20" value="4" title="Number of messages to include">
|
||
</div>
|
||
|
||
<!-- Include Past EchoChambers -->
|
||
<label class="ec-s-toggle-row" for="discord_include_past_echo">
|
||
<input id="discord_include_past_echo" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-layer-group"></i> Include Past Generated EchoChambers
|
||
</span>
|
||
</label>
|
||
<div class="ec-s-hint ec-s-hint--indent">
|
||
Includes previous commentary in the prompt for new generations
|
||
</div>
|
||
|
||
<!-- Include in Context sub-group -->
|
||
<div class="ec-s-context-sub">
|
||
<div class="ec-s-context-sub-title">
|
||
<i class="fa-solid fa-file-lines"></i> Include in Context
|
||
</div>
|
||
|
||
<label class="ec-s-toggle-row" for="discord_include_persona">
|
||
<input id="discord_include_persona" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-face-smile"></i> Persona
|
||
</span>
|
||
</label>
|
||
|
||
<label class="ec-s-toggle-row" for="discord_include_authors_note">
|
||
<input id="discord_include_authors_note" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-pen-nib"></i> Author's Note
|
||
</span>
|
||
</label>
|
||
|
||
<label class="ec-s-toggle-row" for="discord_include_character_description">
|
||
<input id="discord_include_character_description" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-address-card"></i> Character Description(s)
|
||
</span>
|
||
</label>
|
||
|
||
<label class="ec-s-toggle-row" for="discord_include_summary">
|
||
<input id="discord_include_summary" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-scroll"></i> Summary (from Summarize ext.)
|
||
</span>
|
||
</label>
|
||
|
||
<label class="ec-s-toggle-row" for="discord_include_world_info">
|
||
<input id="discord_include_world_info" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-globe"></i> World Info / Lorebook
|
||
</span>
|
||
</label>
|
||
|
||
<div class="ec-s-hint">
|
||
Additional context to include when generating the chat feed
|
||
</div>
|
||
|
||
<!-- WI Budget -->
|
||
<div id="discord_wi_budget_container" class="ec-s-sub-field" style="display:none">
|
||
<label class="ec-s-field-label" for="discord_wi_budget">
|
||
<i class="fa-solid fa-coins"></i> WI Token Budget
|
||
</label>
|
||
<div class="ec-s-inline-pair">
|
||
<input id="discord_wi_budget" type="number" class="text_pole ec-s-input-num" min="0"
|
||
max="200000" step="1000" value="0"
|
||
title="Max tokens for lorebook entries. 0 = use SillyTavern's own budget (recommended).">
|
||
<span class="ec-s-hint">0 = use ST budget</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══ LIVESTREAM ═══ -->
|
||
<div class="ec-s-section">
|
||
<button class="ec-s-section-header" aria-expanded="false" type="button">
|
||
<span class="ec-s-section-title">
|
||
<i class="fa-solid fa-tower-broadcast"></i> Livestream
|
||
</span>
|
||
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
|
||
</button>
|
||
<div class="ec-s-section-body" hidden>
|
||
|
||
<label class="ec-s-toggle-row" for="discord_livestream">
|
||
<input id="discord_livestream" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-tower-broadcast"></i> Enable Livestream Mode
|
||
</span>
|
||
</label>
|
||
<div class="ec-s-hint ec-s-hint--indent">
|
||
Simulate a livestream by showing messages appear in the panel over time
|
||
</div>
|
||
|
||
<!-- Livestream Settings (shown when enabled) -->
|
||
<div id="discord_livestream_settings" class="ec-s-sub-field" hidden>
|
||
|
||
<div class="ec-s-grid-2">
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_livestream_batch_size">
|
||
<i class="fa-solid fa-boxes-stacked"></i> Batch Size
|
||
</label>
|
||
<input id="discord_livestream_batch_size" type="number"
|
||
class="text_pole ec-s-input-num" min="5" max="50" value="20"
|
||
title="Number of messages to generate per batch">
|
||
</div>
|
||
<div class="ec-s-field-group">
|
||
<!-- spacer -->
|
||
</div>
|
||
</div>
|
||
|
||
<div class="ec-s-grid-2">
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_livestream_min_wait">
|
||
<i class="fa-solid fa-clock"></i> Min Wait (s)
|
||
</label>
|
||
<input id="discord_livestream_min_wait" type="number"
|
||
class="text_pole ec-s-input-num" min="1" max="120" value="5"
|
||
title="Minimum seconds to wait between messages">
|
||
</div>
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_livestream_max_wait">
|
||
<i class="fa-solid fa-clock"></i> Max Wait (s)
|
||
</label>
|
||
<input id="discord_livestream_max_wait" type="number"
|
||
class="text_pole ec-s-input-num" min="1" max="300" value="60"
|
||
title="Maximum seconds to wait between messages">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="ec-s-field-group">
|
||
<div class="ec-s-field-label">
|
||
<i class="fa-solid fa-clapperboard"></i> Generation Mode
|
||
</div>
|
||
<label class="ec-s-toggle-row ec-s-radio-row" for="discord_livestream_manual">
|
||
<input type="radio" name="discord_livestream_mode" value="manual" class="radio"
|
||
id="discord_livestream_manual" checked>
|
||
<span class="ec-s-label-text">Manual Upon Clicking Regenerate Chat</span>
|
||
</label>
|
||
<label class="ec-s-toggle-row ec-s-radio-row" for="discord_livestream_onmessage">
|
||
<input type="radio" name="discord_livestream_mode" value="onMessage" class="radio"
|
||
id="discord_livestream_onmessage">
|
||
<span class="ec-s-label-text">Generate Upon Receiving A New Message</span>
|
||
</label>
|
||
<label class="ec-s-toggle-row ec-s-radio-row" for="discord_livestream_oncomplete">
|
||
<input type="radio" name="discord_livestream_mode" value="onComplete" class="radio"
|
||
id="discord_livestream_oncomplete">
|
||
<span class="ec-s-label-text">Generate A New Batch After The Last One
|
||
Finishes</span>
|
||
</label>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══ CHAT PARTICIPATION ═══ -->
|
||
<div class="ec-s-section">
|
||
<button class="ec-s-section-header" aria-expanded="false" type="button">
|
||
<span class="ec-s-section-title">
|
||
<i class="fa-solid fa-reply"></i> Chat Participation
|
||
</span>
|
||
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
|
||
</button>
|
||
<div class="ec-s-section-body" hidden>
|
||
|
||
<label class="ec-s-toggle-row" for="discord_chat_enabled">
|
||
<input id="discord_chat_enabled" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-reply"></i> Enable Chat Participation
|
||
</span>
|
||
</label>
|
||
<div class="ec-s-hint ec-s-hint--indent">
|
||
Type in the chat panel and receive replies from AI chatters. Click any username to
|
||
@mention them directly.
|
||
</div>
|
||
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_chat_username">
|
||
<i class="fa-solid fa-user"></i> Your Username
|
||
</label>
|
||
<input id="discord_chat_username" type="text" class="text_pole ec-s-input"
|
||
placeholder="Streamer (You)">
|
||
</div>
|
||
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_chat_avatar_color">
|
||
<i class="fa-solid fa-circle"></i> Avatar Color
|
||
</label>
|
||
<div class="ec-s-color-row">
|
||
<input id="discord_chat_avatar_color" type="color" class="ec-s-color-input"
|
||
value="#3b82f6">
|
||
<span class="ec-s-hint">Color of your avatar circle in the chat</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-field-label" for="discord_chat_reply_count">
|
||
<i class="fa-solid fa-comments"></i> AI Replies per Comment
|
||
</label>
|
||
<input id="discord_chat_reply_count" type="number" class="text_pole ec-s-input" min="1"
|
||
max="12" value="3">
|
||
<div class="ec-s-hint ec-s-hint--indent">
|
||
Number of AI responses after a general comment (1–12). Direct @mentions always get a
|
||
single reply from that chatter.
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Max Tokens setting for Chat Participation -->
|
||
<div class="ec-s-field-group">
|
||
<label class="ec-s-toggle-row" for="discord_chat_override_tokens">
|
||
<input id="discord_chat_override_tokens" type="checkbox" class="checkbox">
|
||
<span class="ec-s-label-text">
|
||
<i class="fa-solid fa-coins"></i> Override Max Tokens Limit
|
||
</span>
|
||
</label>
|
||
<div id="discord_chat_max_tokens_container" class="ec-s-sub-field" style="display:none">
|
||
<label class="ec-s-field-label" for="discord_chat_max_tokens">Custom Max Tokens</label>
|
||
<input id="discord_chat_max_tokens" type="number" class="text_pole ec-s-input-num"
|
||
min="10" max="8192" value="3000"
|
||
title="Max generation tokens for chat participation">
|
||
</div>
|
||
<div class="ec-s-hint ec-s-hint--indent">
|
||
If unchecked, uses SillyTavern's default Response Length setting. Use this if your AI
|
||
generates replies that are too long or too short.
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ═══ STYLE MANAGER ═══ -->
|
||
<div class="ec-s-section">
|
||
<button class="ec-s-section-header" aria-expanded="false" type="button">
|
||
<span class="ec-s-section-title">
|
||
<i class="fa-solid fa-folder-tree"></i> Style Manager
|
||
</span>
|
||
<i class="ec-s-chevron fa-solid fa-chevron-down"></i>
|
||
</button>
|
||
<div class="ec-s-section-body" hidden>
|
||
|
||
<div class="ec-s-btn-row">
|
||
<button id="discord_open_style_editor" class="menu_button">
|
||
<i class="fa-solid fa-palette"></i> Manage
|
||
</button>
|
||
<button id="discord_import_btn" class="menu_button">
|
||
<i class="fa-solid fa-file-import"></i> Import
|
||
</button>
|
||
</div>
|
||
<input type="file" id="discord_import_file" accept=".md" style="display:none;">
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</div><!-- /.ec-s-panel -->
|
||
|
||
</div><!-- /.inline-drawer-content -->
|
||
</div><!-- /.inline-drawer -->
|
||
</div><!-- /.discord_settings --> |