Persist chats with Generate param snapshots, always open a new chat on start, and abort in-flight work on clear/switch so replies cannot land in the wrong chat. Co-authored-by: Cursor <cursoragent@cursor.com>
179 lines
15 KiB
HTML
179 lines
15 KiB
HTML
<div class="swarm-assistent-root" id="swarm_assistent_root">
|
||
<div class="sa-gate" id="sa_gate" hidden>
|
||
<p>Swarm Assistent только для моделей <strong>Krea 2</strong>. Выбери checkpoint Krea 2, чтобы включить чат.</p>
|
||
</div>
|
||
<div class="sa-layout" id="sa_layout">
|
||
<aside class="sa-image-pane" id="sa_image_pane">
|
||
<div class="sa-board-head">
|
||
<span class="sa-board-title">Доска</span>
|
||
<div class="sa-board-tabs" role="tablist" aria-label="Доска">
|
||
<button type="button" class="sa-board-tab sa-board-tab-active" data-board="generate" id="sa_board_tab_gen" role="tab" aria-selected="true">Generate</button>
|
||
<button type="button" class="sa-board-tab" data-board="refs" id="sa_board_tab_refs" role="tab" aria-selected="false">
|
||
Refs
|
||
<span class="sa-board-badge" id="sa_refs_badge" hidden></span>
|
||
</button>
|
||
</div>
|
||
<button type="button" class="basic-button sa-icon-btn" id="sa_btn_add_ref" title="Добавить окно референса">+ Ref</button>
|
||
</div>
|
||
<div class="sa-board" id="sa_board" tabindex="0" title="Перетащи изображение на окно или вставь (Ctrl+V). Кликни, чтобы выбрать."></div>
|
||
<div class="sa-live-params" id="sa_live_params" title="Текущие параметры Generate">—</div>
|
||
<div class="sa-image-actions" id="sa_image_actions">
|
||
<button type="button" class="basic-button" id="sa_btn_use_current" title="Скопировать текущий Generate в Ref">Снимок gen</button>
|
||
<button type="button" class="basic-button" id="sa_btn_clear_image" title="Очистить выбранный Ref">Очистить слот</button>
|
||
<div class="sa-more-wrap" id="sa_board_more_wrap">
|
||
<button type="button" class="basic-button sa-icon-btn" id="sa_btn_board_more" title="Init / Mask / Сброс" aria-expanded="false" aria-haspopup="true">⋯</button>
|
||
<div class="sa-more-menu" id="sa_board_more_menu" hidden role="menu">
|
||
<button type="button" class="sa-more-item" id="sa_btn_as_init" role="menuitem">Как Init (img2img)</button>
|
||
<button type="button" class="sa-more-item" id="sa_btn_as_mask" role="menuitem">Как Mask (inpaint)</button>
|
||
<button type="button" class="sa-more-item" id="sa_btn_clear_init" role="menuitem">Сброс Init + Mask</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</aside>
|
||
<div class="sa-splitter" id="sa_splitter" role="separator" aria-orientation="vertical" title="Потяни, чтобы изменить ширину"></div>
|
||
<section class="sa-chat-pane">
|
||
<header class="sa-chat-header">
|
||
<div class="sa-chat-title">
|
||
Assistent
|
||
<span class="sa-live-dot" id="sa_live_dot" hidden></span>
|
||
<div class="sa-sessions-bar">
|
||
<button type="button" class="basic-button sa-icon-btn" id="sa_btn_new_chat" title="Новый чат">+</button>
|
||
<button type="button" class="basic-button sa-sessions-toggle" id="sa_btn_chats" title="История чатов" aria-expanded="false">История</button>
|
||
<span class="sa-session-label" id="sa_session_label" title="Текущий чат — клик открывает Историю" role="button" tabindex="0">Новый чат</span>
|
||
</div>
|
||
<div class="sa-subtabs" role="tablist">
|
||
<button type="button" class="sa-subtab sa-subtab-active" data-view="chat" id="sa_tab_chat">Чат</button>
|
||
<button type="button" class="sa-subtab" data-view="cards" id="sa_tab_cards">Карточки</button>
|
||
</div>
|
||
</div>
|
||
<div class="sa-chats-panel" id="sa_chats_panel" hidden>
|
||
<div class="sa-chats-panel-head">Сохранённые чаты</div>
|
||
<div class="sa-chats-list" id="sa_chats_list"></div>
|
||
<div class="sa-chats-panel-hint">Старт = всегда новый чат. Клик по чату восстанавливает сообщения и параметры Generate.</div>
|
||
</div>
|
||
<div class="sa-header-right">
|
||
<select id="sa_persona" class="sa-select" title="Характер / тон">
|
||
<option value="neutral">Нейтральный</option>
|
||
</select>
|
||
<select id="sa_pack" class="sa-select" title="Пакет промпта">
|
||
<option value="write_prompt">Написать промпт</option>
|
||
</select>
|
||
<span class="sa-mode-badge" id="sa_mode_badge" title="Активный pack">write</span>
|
||
<select id="sa_model" class="sa-select sa-model-select" title="Модель Ollama (чат)">
|
||
<option value="">Загрузка моделей…</option>
|
||
</select>
|
||
<button type="button" class="basic-button sa-icon-btn" id="sa_btn_settings" title="Настройки" aria-label="Настройки">⚙</button>
|
||
</div>
|
||
</header>
|
||
<div class="sa-settings" id="sa_settings" hidden>
|
||
<label>Ollama URL <input type="text" id="sa_base_url" value="http://127.0.0.1:11434" /></label>
|
||
<label>Модель памяти
|
||
<select id="sa_embed_model" class="sa-select" title="Хранение и группировка памяти (use: memory)">
|
||
<option value="nomic-embed-text">nomic-embed-text</option>
|
||
</select>
|
||
</label>
|
||
<button type="button" class="basic-button" id="sa_btn_refresh_models">Обновить модели</button>
|
||
<button type="button" class="basic-button" id="sa_btn_refresh_inventory">Обновить inventory</button>
|
||
<div class="sa-skills-label">Скилы (процедуры)</div>
|
||
<div class="sa-skills-box" id="sa_skills_box"></div>
|
||
<label class="sa-check"><input type="checkbox" id="sa_auto_vision" /> Авто-прикреплять Generate к чату</label>
|
||
<label class="sa-check"><input type="checkbox" id="sa_auto_apply" checked /> Авто-применять патч</label>
|
||
<label class="sa-check"><input type="checkbox" id="sa_auto_generate" checked /> Авто-Generate после патча</label>
|
||
<label class="sa-check"><input type="checkbox" id="sa_auto_critique" /> Авто-критика после Generate</label>
|
||
<label class="sa-check sa-danger" title="Опасно — скачивает без Confirm"><input type="checkbox" id="sa_auto_download" /> Авто-скачивание Civitai (выкл)</label>
|
||
</div>
|
||
|
||
<div class="sa-view" id="sa_view_chat">
|
||
<div class="sa-messages" id="sa_messages">
|
||
<div class="sa-chat-empty" id="sa_chat_empty">
|
||
<div class="sa-chat-empty-title">Совместная работа с Krea 2</div>
|
||
<div class="sa-chat-empty-hint">Напиши промпт, кинь refs, выбери персону или открой <em>Карточки</em> для LoRA.</div>
|
||
</div>
|
||
</div>
|
||
<div class="sa-livebar" id="sa_livebar" hidden>
|
||
<span class="sa-spinner" aria-hidden="true"></span>
|
||
<span class="sa-livebar-text" id="sa_livebar_text">Работаю…</span>
|
||
<span class="sa-elapsed" id="sa_elapsed"></span>
|
||
</div>
|
||
<div class="sa-composer" id="sa_composer">
|
||
<div class="sa-chips" id="sa_chips" role="toolbar" aria-label="Быстрые параметры">
|
||
<button type="button" class="sa-chip" data-aspect="1:1" title="1024×1024">1:1</button>
|
||
<button type="button" class="sa-chip" data-aspect="4:5" title="928×1152">4:5</button>
|
||
<button type="button" class="sa-chip" data-aspect="2:3" title="832×1248">2:3</button>
|
||
<button type="button" class="sa-chip" data-aspect="16:9" title="1376×768">16:9</button>
|
||
<button type="button" class="sa-chip" data-aspect="9:16" title="768×1376">9:16</button>
|
||
<span class="sa-chip-sep" aria-hidden="true"></span>
|
||
<button type="button" class="sa-chip" data-seed="lock" title="Оставить текущий seed">Seed lock</button>
|
||
<button type="button" class="sa-chip" data-seed="random" title="Случайный seed">Seed −1</button>
|
||
<button type="button" class="sa-chip" data-vary="1" title="Тот же промпт, новый seed + generate">Vary</button>
|
||
<span class="sa-chip-sep" aria-hidden="true"></span>
|
||
<button type="button" class="sa-chip" data-krea-profile="turbo" title="Turbo: steps 8, CFG 1">Turbo</button>
|
||
<button type="button" class="sa-chip" data-krea-profile="raw" title="RAW: steps 28, CFG 4.5">RAW</button>
|
||
</div>
|
||
<div class="sa-lora-chips" id="sa_lora_chips" role="toolbar" aria-label="Активные LoRA"></div>
|
||
<div class="sa-slash-wrap">
|
||
<textarea id="sa_input" rows="3" placeholder="Промпт, img2img, критика… Enter = отправить · /help = команды"></textarea>
|
||
<div class="sa-slash-menu" id="sa_slash_menu" hidden role="listbox"></div>
|
||
</div>
|
||
<div class="sa-composer-actions">
|
||
<button type="button" class="basic-button sa-primary" id="sa_btn_send">Отправить</button>
|
||
<button type="button" class="basic-button sa-btn-gen" id="sa_btn_build_gen" title="Нет патча — Generate с текущим промптом SwarmUI">Собрать + Gen</button>
|
||
<button type="button" class="basic-button" id="sa_btn_interrupt" title="Прервать генерацию / чат" hidden>Стоп</button>
|
||
<div class="sa-more-wrap" id="sa_clear_more_wrap">
|
||
<button type="button" class="basic-button" id="sa_btn_clear" title="Очистить чат">Очистить</button>
|
||
<button type="button" class="basic-button sa-icon-btn" id="sa_btn_clear_more" title="Ещё варианты очистки" aria-expanded="false">▾</button>
|
||
<div class="sa-more-menu" id="sa_clear_more_menu" hidden role="menu">
|
||
<button type="button" class="sa-more-item" id="sa_btn_clear_confirm" role="menuitem">Очистить весь чат…</button>
|
||
<button type="button" class="sa-more-item" id="sa_btn_clear_patches" role="menuitem">Убрать только патчи</button>
|
||
</div>
|
||
</div>
|
||
<span class="sa-status" id="sa_status"></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sa-view" id="sa_view_cards" hidden>
|
||
<div class="sa-cards-layout">
|
||
<div class="sa-cards-list-pane">
|
||
<div class="sa-cards-filter">
|
||
<select id="sa_cards_kind" class="sa-select">
|
||
<option value="all">Все</option>
|
||
<option value="checkpoint">Checkpoints</option>
|
||
<option value="lora">LoRAs</option>
|
||
</select>
|
||
<button type="button" class="basic-button" id="sa_btn_cards_refresh">Обновить</button>
|
||
</div>
|
||
<div class="sa-cards-list" id="sa_cards_list"></div>
|
||
</div>
|
||
<div class="sa-cards-editor-pane">
|
||
<div class="sa-cards-editor-head">
|
||
<strong id="sa_card_title">Выбери модель</strong>
|
||
<span class="sa-card-badge" id="sa_card_badge" hidden></span>
|
||
</div>
|
||
<div class="sa-card-previews" id="sa_card_previews" hidden></div>
|
||
<div class="sa-card-form" id="sa_card_form">
|
||
<label>Triggers <input type="text" id="sa_card_triggers" placeholder="слово1, слово2" /></label>
|
||
<label>Weight <input type="number" id="sa_card_weight" step="0.05" min="0" max="2" value="0.8" /></label>
|
||
<label>When <textarea id="sa_card_when" rows="2" placeholder="Когда использовать"></textarea></label>
|
||
<label>Avoid <textarea id="sa_card_avoid" rows="2" placeholder="Чего избегать"></textarea></label>
|
||
<label>Prompt hint <textarea id="sa_card_hint" rows="2" placeholder="Подсказка для промпта"></textarea></label>
|
||
<label>Notes <textarea id="sa_card_notes" rows="2" placeholder="Заметки"></textarea></label>
|
||
<label>Civitai URL <input type="text" id="sa_card_url" placeholder="https://civitai…" /></label>
|
||
<label class="sa-card-json-toggle"><input type="checkbox" id="sa_card_show_json" /> Показать JSON</label>
|
||
<textarea id="sa_card_json" rows="8" hidden placeholder="Card JSON…" spellcheck="false"></textarea>
|
||
</div>
|
||
<div class="sa-cards-actions">
|
||
<button type="button" class="basic-button sa-primary" id="sa_btn_card_to_chat" title="В чат: используй эту модель/LoRA">В чат</button>
|
||
<button type="button" class="basic-button" id="sa_btn_card_meta">Загрузить Civitai meta</button>
|
||
<button type="button" class="basic-button" id="sa_btn_card_generate">Сгенерировать с Assistent</button>
|
||
<button type="button" class="basic-button" id="sa_btn_card_save">Сохранить карточку</button>
|
||
<button type="button" class="basic-button" id="sa_btn_card_wanted" title="В очередь на следующий up">В wanted</button>
|
||
<span class="sa-status" id="sa_card_status"></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|