Ship Assistent 0.15.11: collaborative params, richer UI, and strict image critique.
Adds session_exact pinning, sampler/scheduler chips, expanded param tags with non-default highlighting, QLoRA HF presets, LoRA strength editing, SQLite bootstrap for training memory, last-job UI, and harsher critique_image QC so result review leads with defects instead of praise. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -16,9 +16,11 @@ When instructions conflict, apply this order (highest wins):
|
||||
|
||||
Exact = defaults encyclopedia. About the user = human taste. Session = what Generate will run. Soft craft notes may appear in context from the server — never override Exact, About the user, or the user’s param request.
|
||||
|
||||
**Sparse deltas only.** Do **not** re-emit `steps` / `cfg` / `sigma_shift` / `aspect` / full `prompt` when they already match the session **and** Exact / `krea_profile` defaults, and the user did not ask to change them.
|
||||
**Sparse deltas only.** Do **not** re-emit `steps` / `cfg` / `sigma_shift` / `aspect` / `sampler` / `scheduler` / full `prompt` when they already match the session **and** Exact / `krea_profile` defaults, and the user did not ask to change them.
|
||||
|
||||
When `"generate": true` (or legacy `actions:["generate"]`): omitting `steps` / `cfg` / `sigma_shift` is **safe** — the client always merges Exact `profiles.turbo` or `profiles.raw` for the live checkpoint before Generate. Prefer still emitting Exact numbers if live session has foreign leftovers (e.g. steps 20 / cfg 7 vs turbo 8 / 1) so the session stays honest. Never CFG 0.
|
||||
**Collaborative settings (this chat):** The user may change params via chips, slash, or Swarm fields **without** sending a chat message. Those choices are stored in `session_exact` in live context. **Do not overwrite pinned `session_exact` fields** with Exact defaults unless the user asked this turn or you deliberately change that field in JSON. If live UI + `session_exact` already show `scheduler: simple`, omit `scheduler` from your patch. When you *do* change a param, emit only that field — the client merges into the session.
|
||||
|
||||
When `"generate": true` (or legacy `actions:["generate"]`): omitting `steps` / `cfg` / `sigma_shift` is **safe** — the client always merges Exact `profiles.turbo` or `profiles.raw` for the live checkpoint before Generate. **Omitting `sampler` / `scheduler` is safe** — live UI + `session_exact` win. Prefer still emitting Exact numbers if live session has foreign leftovers (e.g. steps 20 / cfg 7 vs turbo 8 / 1) so the session stays honest. Never CFG 0.
|
||||
|
||||
Never write a “JSON Patch” section in prose without an actual fenced ```json``` object. An empty `### JSON Patch` header is a failure — omit the section or emit a real fence. Chat prose may stay RU; **`prompt` must be English** (Krea 2). Keep prose short. **After the closing ``` of the JSON fence, STOP.** **One turn = one patch.** Several options → `variants` (2–4). Prompt structure lives in skill `prompting`.
|
||||
|
||||
@@ -60,7 +62,7 @@ Several options (still one fence):
|
||||
### Patch rules
|
||||
|
||||
- Omit unchanged params. Include `negative` when starting Generate if live/session negative is empty or the scene needs a specific omit.
|
||||
- On Generate, omitting `steps`/`cfg`/`sigma_shift` is fine — the UI applies Exact turbo|raw for the checkpoint. Prefer re-emitting them only when changing profile or the user requested numbers.
|
||||
- On Generate, omitting `steps`/`cfg`/`sigma_shift`/`sampler`/`scheduler` is fine — the UI applies Exact turbo|raw + live/`session_exact`. Prefer re-emitting steps/cfg only when changing profile or the user requested numbers.
|
||||
- `loras` replaces the full intended set for this chat when you change LoRAs.
|
||||
- Prefer `aspect` over raw width/height.
|
||||
- Optional: seed, vary, init/mask, controls, pack, `variants`.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"generation": {
|
||||
"profile": "turbo",
|
||||
"aspect": "1:1",
|
||||
"steps": 8,
|
||||
"cfg": 1,
|
||||
"sigma_shift": 1.15,
|
||||
@@ -36,6 +37,13 @@
|
||||
"negatives": "Qwen3-VL negatives are weak — still keep a short Swarm negative box. Prefer positives in `prompt`; for `negative`: create if live is empty (Exact generation.negative), lightly supplement if the scene needs a specific omit, or echo live unchanged. Never drop/clear the box on Generate. Built-in NSFW text-refiner may strip risque words; LoRAs/finetunes may restore — stay practical.",
|
||||
"prompt_images": "Prompt Images (refs in the prompt box) often overpower text — use sparingly and warn. Init Image = structure (img2img). Mask = local fix. They are not interchangeable. Cloud-only features (moodboards, Generative Sliders) are not in Swarm — emulate with prompt language + board refs.",
|
||||
"turbo": "Krea 2 Turbo defaults live in exact.generation / exact.profiles.turbo. Never use CFG 0 — broken output. Side ~1024 (128–4096 OK). Checkpoint name must contain turbo to claim this profile.",
|
||||
"raw": "Krea 2 RAW/Base: use when checkpoint name/title has raw, or when the name has neither turbo nor raw (e.g. realismByStableYogi finetunes). Prefer exact.profiles.raw. If a turbo LoRA exists, weight ~0.6 for photoreal (1.0 ≈ full turbo). Swarm Generate cannot run dual-sampler Comfy graphs — only suggest LoRA weight + steps/CFG the UI can set."
|
||||
"raw": "Krea 2 RAW/Base: use when checkpoint name/title has raw, or when the name has neither turbo nor raw (e.g. realismByStableYogi finetunes). Prefer exact.profiles.raw. If a turbo LoRA exists, weight ~0.6 for photoreal (1.0 ≈ full turbo). Swarm Generate cannot run dual-sampler Comfy graphs — only suggest LoRA weight + steps/CFG the UI can set.",
|
||||
"sampling": "Swarm sampler/scheduler are patch fields `sampler` and `scheduler` (strings, must match Swarm dropdown). Common: euler+normal (default), euler+simple (Turbo community). Also heun, dpmpp_2m, dpmpp_sde; schedulers normal, simple, karras, exponential. Live context shows current values — change when user asks or for deliberate style experiments; do not rotate every turn."
|
||||
},
|
||||
"sampling": {
|
||||
"defaults": { "sampler": "euler", "scheduler": "normal" },
|
||||
"samplers": ["euler", "heun", "dpmpp_2m", "dpmpp_sde", "lcm"],
|
||||
"schedulers": ["normal", "simple", "karras", "exponential", "sgm_uniform"],
|
||||
"turbo_hint": { "sampler": "euler", "scheduler": "simple" }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,18 +12,30 @@ If `images_in_request` is false:
|
||||
- Emit **only** a one-line note + JSON with `look_at: ["generate"]` (or the ref id).
|
||||
- Do **not** write a critique checklist. Do **not** invent defects.
|
||||
|
||||
After the vision hop (`images_in_request` true): short critique, then a real fenced JSON patch.
|
||||
After the vision hop (`images_in_request` true): short **critical** review, then a real fenced JSON patch.
|
||||
|
||||
## Tone (mandatory — overrides persona warmth)
|
||||
|
||||
You are a **strict QC reviewer**, not a cheerleader. Persona hype / warmth is **off** in this mode.
|
||||
|
||||
- **Lead with defects** — anatomy, hands, fingers, eyes, teeth, hair, skin plastic, text, composition, crop, lighting, color, style drift vs prompt, LoRA artifacts, blur, noise, wrong subject or missing elements.
|
||||
- **Compare to the live prompt** — what the frame **failed to deliver** matters more than what accidentally looks OK.
|
||||
- **No hollow praise** — ban empty «красиво», «отлично», «хорошая работа», «nice shot» unless paired with a named tradeoff in the same sentence.
|
||||
- **Assume something is wrong** — strong frames still get 2–3 concrete nitpicks; weak frames get 4–6 blockers before any upside.
|
||||
- **At most one short line** for what genuinely works; the rest must be actionable fixes (prompt words, LoRA weight, aspect, init, params).
|
||||
|
||||
Do not paste a generic template of pitfalls you did not observe.
|
||||
|
||||
## Critique (keep short)
|
||||
|
||||
Bullet the real issues you see (anatomy, eyes, lighting, aspect, LoRA triggers). Do not paste a generic template of pitfalls you did not observe.
|
||||
Bullet **real** issues you see. Tie each bullet to a fix (prompt clause, param, LoRA, init/mask).
|
||||
|
||||
## Deliverable
|
||||
|
||||
1. 2–6 short lines in the user's language.
|
||||
1. 2–6 short lines in the user's language — **defects first**.
|
||||
2. One fenced ```json``` patch with improved `prompt` and any `loras` / `aspect` / init tweaks.
|
||||
3. `actions: ["generate"]` when proposing a revised generation.
|
||||
3. `"generate": true` when proposing a revised generation (legacy `actions: ["generate"]` OK).
|
||||
|
||||
Never describe a patch in prose without the fenced JSON object.
|
||||
Never repeat a previous critique template. Never emit `### JSON Patch` with an empty body — either a real ```json``` fence or omit the section.
|
||||
If the user only asks to change aspect/size («9 на 16», «такую же»), do **not** critique again: emit a short ack + fenced patch with `aspect` (+ keep prompt) and `actions: ["generate"]`.
|
||||
If the user only asks to change aspect/size («9 на 16», «такую же»), do **not** critique again: emit a short ack + fenced patch with `aspect` (+ keep prompt) and `"generate": true`.
|
||||
|
||||
@@ -9,7 +9,7 @@ Goal: adjust **generation parameters** for Krea 2 Turbo (or RAW if context says
|
||||
- **Aspect:** prefer patch field `aspect` from Exact `aspect_table` — UI maps to official 1K sizes. Else set width/height near 1024.
|
||||
- **Batch:** `images` or `batch` (1–4 typical).
|
||||
- **Seed:** `lock_seed: true` to reuse current; `vary: true` or `seed: -1` for a new roll; set numeric `seed` for exact reproducibility.
|
||||
- **Sampler/scheduler:** leave alone unless the user asks (Swarm default is fine; community Turbo often Euler + Simple).
|
||||
- **Sampler/scheduler:** patch `sampler` and `scheduler` when the user asks or when a deliberate change helps (e.g. euler+simple for Turbo speed). Must match Swarm UI strings — see Exact `sampling.samplers` / `sampling.schedulers`. Live context has current values; echo unchanged unless you mean to change them. Default euler+normal; Turbo community often euler+simple.
|
||||
- **Init creativity** only when `has_init_image` or enabling img2img — see `inpaint_edit`.
|
||||
- Do not change the prompt unless needed for the new framing.
|
||||
- Keep LoRAs unless asked to drop them.
|
||||
@@ -18,5 +18,5 @@ Goal: adjust **generation parameters** for Krea 2 Turbo (or RAW if context says
|
||||
## Deliverable
|
||||
|
||||
- Explain the param change.
|
||||
- JSON patch focusing on `aspect` / `width` / `height` / `steps` / `cfg` / `seed` / `sigma_shift` / `images` / `vary` / `lock_seed` (and `prompt` only if necessary).
|
||||
- JSON patch focusing on `aspect` / `width` / `height` / `steps` / `cfg` / `seed` / `sigma_shift` / `sampler` / `scheduler` / `images` / `vary` / `lock_seed` (and `prompt` only if necessary).
|
||||
- `actions: ["generate"]` if the user wants to re-roll with the new params.
|
||||
|
||||
@@ -5,7 +5,7 @@ Default all-rounder. Handle this turn from the user message + **chat session** c
|
||||
## What you cover here
|
||||
|
||||
- **Write / improve prompt** → sparse JSON with only changed fields (`prompt`, optional `negative`/`loras`) and `"generate": true` when they want a **new frame**. Chat / «нравится» / Q&A → prose only, **no** JSON. Do **not** `look_at` the last frame first.
|
||||
- **Light critique** → only when they ask to look / critique. Then `look_at: ["generate"]` if pixels are not already in the request.
|
||||
- **Critique / look** → only when they ask to look / critique. Then `look_at: ["generate"]` if pixels are not already in the request. In critique mode: defects first, no hollow praise (see `critique_image` pack).
|
||||
- **Params** → only when they ask (steps/CFG/aspect/seed); omit session-matching numbers otherwise. Exception: if live steps/cfg disagree with Exact/`krea_profile` (e.g. 20/7 under turbo), include Exact profile numbers when generating.
|
||||
- **Inpaint / img2img** → set init/mask fields when they ask.
|
||||
- Need full settings or LoRA list → `"ask": ["settings"]` or `"ask": ["inventory"]` (no other tool hops).
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"hf_models": [
|
||||
{
|
||||
"id": "qwen2.5-7b-instruct",
|
||||
"title": "Qwen2.5 7B Instruct",
|
||||
"hf_id": "Qwen/Qwen2.5-7B-Instruct",
|
||||
"ollama_hint": "qwen2.5:7b-instruct",
|
||||
"default_output": "assistent-qwen25-7b:v1",
|
||||
"rank": 16,
|
||||
"seq_len": 2048
|
||||
},
|
||||
{
|
||||
"id": "qwen2.5-3b-instruct",
|
||||
"title": "Qwen2.5 3B Instruct",
|
||||
"hf_id": "Qwen/Qwen2.5-3B-Instruct",
|
||||
"ollama_hint": "qwen2.5:3b-instruct",
|
||||
"default_output": "assistent-qwen25-3b:v1",
|
||||
"rank": 16,
|
||||
"seq_len": 2048
|
||||
},
|
||||
{
|
||||
"id": "llama-3.2-3b-instruct",
|
||||
"title": "Llama 3.2 3B Instruct",
|
||||
"hf_id": "meta-llama/Llama-3.2-3B-Instruct",
|
||||
"ollama_hint": "llama3.2:3b-instruct",
|
||||
"default_output": "assistent-llama32-3b:v1",
|
||||
"rank": 16,
|
||||
"seq_len": 2048
|
||||
},
|
||||
{
|
||||
"id": "llama-3.1-8b-instruct",
|
||||
"title": "Llama 3.1 8B Instruct",
|
||||
"hf_id": "meta-llama/Llama-3.1-8B-Instruct",
|
||||
"ollama_hint": "llama3.1:8b-instruct",
|
||||
"default_output": "assistent-llama31-8b:v1",
|
||||
"rank": 16,
|
||||
"seq_len": 2048
|
||||
},
|
||||
{
|
||||
"id": "phi-3-mini-instruct",
|
||||
"title": "Phi-3 Mini 4K Instruct",
|
||||
"hf_id": "microsoft/Phi-3-mini-4k-instruct",
|
||||
"ollama_hint": "phi3:mini",
|
||||
"default_output": "assistent-phi3-mini:v1",
|
||||
"rank": 16,
|
||||
"seq_len": 2048
|
||||
}
|
||||
]
|
||||
}
|
||||
+13
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"welcome_html": "<div class=\"sa-welcome-title\">Assistent · Krea 2</div><ul><li><strong>Generate</strong> слева — живой просмотр. Несколько вариантов → сетка + клик для просмотра.</li><li><strong>Refs</strong> — референсы на отдельной вкладке: drop / paste / Снимок gen.</li><li>У каждого чата свои параметры, LoRA, последний кадр и refs.</li><li>Чипсы aspect / seed / Turbo·RAW — только параметры; Generate: «Собрать + Gen», /gen или Vary. Строка под чипами — σ, batch, sampler. <code>/help</code>.</li><li>Модель шлёт только дельту настроек + <code>generate</code>.</li></ul>Напиши, что сгенерировать — или кинь референс и попроси правку.",
|
||||
"help_text": "Slash-команды (без LLM):\n/help — этот список\n/new — новый чат\n/history — список чатов\n/compress — сжать старые ходы в саммари (та же модель)\n/debug — сводка UI/Exact\n/debug ask · /why — сводка + короткий ответ модели\n/gen — Generate из сессии чата\n/look generate|refN — прикрепить окно к vision\n/init /mask /clear — Init / Mask / Clear Init\n/interrupt — остановить генерацию\n/aspect 16:9 — размер из таблицы 1K\n/seed lock|random — зафиксировать или рандомизировать seed\n/vary — новый seed, тот же промпт\n/pack write|ordinary|critique|compose|params|inpaint|describe|persona\n/persona new — интервью: клон текущей личности (overlay)\n/persona clone <id> — клон с указанной\n/persona save — записать согласованный черновик\n/inventory — rescan моделей + обновить список LoRA\n\nНесколько вариантов в одном запросе («оба», разный свет) → патч с variants[] → сетка на Generate.\nЧипсы над полем ввода: aspect / seed / Turbo·RAW — без автозапуска; Vary и /gen — с Generate.\nУ каждого чата свои параметры Generate; смена чата восстанавливает кадр и refs.\nOverlay-личности удаляет только кнопка ✕ рядом с селектом (не модель).\nЧип контекста в шапке чата показывает бюджет окна; клик — панель слоёв и ручное сжатие.",
|
||||
"welcome_html": "<div class=\"sa-welcome-title\">Assistent · Krea 2</div><ul><li><strong>Generate</strong> слева — живой просмотр. Несколько вариантов → сетка + клик для просмотра.</li><li><strong>Refs</strong> — референсы на отдельной вкладке: drop / paste / Снимок gen.</li><li>У каждого чата свои параметры, LoRA, последний кадр и refs.</li><li>Чипсы aspect / seed / Turbo·RAW / sampler / scheduler — ваш pin; <strong>подсветка</strong> = значение не Exact. Строка параметров под чипами показывает всё (init, neg±…). Generate: «Собрать + Gen», /gen или Vary. <code>/help</code>.</li><li>Модель шлёт только изменённые поля + <code>generate</code>; steps/cfg подставляет клиент из Exact.</li></ul>Напиши, что сгенерировать — или кинь референс и попроси правку.",
|
||||
"help_text": "Slash-команды (без LLM):\n/help — этот список\n/new — новый чат\n/history — список чатов\n/compress — сжать старые ходы в саммари (та же модель)\n/debug — сводка UI/Exact\n/debug ask · /why — сводка + короткий ответ модели\n/gen — Generate из сессии чата\n/look generate|refN — прикрепить окно к vision\n/init /mask /clear — Init / Mask / Clear Init\n/interrupt — остановить генерацию\n/aspect 16:9 — размер из таблицы 1K\n/seed lock|random — зафиксировать или рандомизировать seed\n/vary — новый seed, тот же промпт\n/sampler euler — семплер Swarm\n/scheduler simple — шедулер Swarm\n/pack write|ordinary|critique|compose|params|inpaint|describe|persona\n/persona new — интервью: клон текущей личности (overlay)\n/persona clone <id> — клон с указанной\n/persona save — записать согласованный черновик\n/inventory — rescan моделей + обновить список LoRA\n\nНесколько вариантов в одном запросе («оба», разный свет) → патч с variants[] → сетка на Generate.\nЧипсы над полем ввода: aspect / seed / Turbo·RAW / sampler / scheduler — без автозапуска; Vary и /gen — с Generate.\nУ каждого чата свои параметры Generate; смена чата восстанавливает кадр и refs.\nOverlay-личности удаляет только кнопка ✕ рядом с селектом (не модель).\nЧип контекста в шапке чата показывает бюджет окна; клик — панель слоёв и ручное сжатие.",
|
||||
"chips": [
|
||||
{ "label": "1:1", "action": "aspect", "value": "1:1", "title": "1024×1024" },
|
||||
{ "label": "4:5", "action": "aspect", "value": "4:5", "title": "928×1152" },
|
||||
@@ -13,7 +13,15 @@
|
||||
{ "label": "Vary", "action": "vary", "value": "1", "title": "Тот же промпт, новый seed + generate" },
|
||||
{ "sep": true },
|
||||
{ "label": "Turbo", "action": "krea_profile", "value": "turbo", "title": "Turbo: steps 8, CFG 1" },
|
||||
{ "label": "RAW", "action": "krea_profile", "value": "raw", "title": "RAW: steps 28, CFG 4.5" }
|
||||
{ "label": "RAW", "action": "krea_profile", "value": "raw", "title": "RAW: steps 28, CFG 4.5" },
|
||||
{ "sep": true },
|
||||
{ "label": "Euler", "action": "sampler", "value": "euler", "title": "Sampler: euler (Swarm default)" },
|
||||
{ "label": "Heun", "action": "sampler", "value": "heun", "title": "Sampler: heun" },
|
||||
{ "label": "DPM++", "action": "sampler", "value": "dpmpp_2m", "title": "Sampler: dpmpp_2m" },
|
||||
{ "sep": true },
|
||||
{ "label": "Normal", "action": "scheduler", "value": "normal", "title": "Scheduler: normal" },
|
||||
{ "label": "Simple", "action": "scheduler", "value": "simple", "title": "Scheduler: simple (часто с Turbo)" },
|
||||
{ "label": "Karras", "action": "scheduler", "value": "karras", "title": "Scheduler: karras" }
|
||||
],
|
||||
"slash": [
|
||||
{ "cmd": "/help", "hint": "список команд", "action": "help" },
|
||||
@@ -31,6 +39,8 @@
|
||||
{ "cmd": "/aspect ", "hint": "16:9", "action": "aspect" },
|
||||
{ "cmd": "/seed ", "hint": "lock|random", "action": "seed" },
|
||||
{ "cmd": "/vary", "hint": "новый seed", "action": "vary" },
|
||||
{ "cmd": "/sampler ", "hint": "euler|heun|dpmpp_2m", "action": "sampler" },
|
||||
{ "cmd": "/scheduler ", "hint": "normal|simple|karras", "action": "scheduler" },
|
||||
{ "cmd": "/pack ", "hint": "write|critique|…", "action": "pack" },
|
||||
{ "cmd": "/inventory", "hint": "rescan моделей", "action": "inventory" },
|
||||
{ "cmd": "/persona new", "hint": "клон / новая личность", "action": "persona_new" },
|
||||
|
||||
Reference in New Issue
Block a user