Ship persona shelves, Exact controls, and overlay author pipeline.
Add Leonid as a shelf-based example with preference_bias slider; support /persona new clone-to-overlay and UI-only delete. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -81,6 +81,10 @@ A JSON block named "Live SwarmUI context" is attached. Treat it as ground truth
|
||||
"memory_kind": null,
|
||||
"tag_query": null,
|
||||
"memories": [{"kind": "lora", "key": "name", "text": "fact", "scope": "personal"}],
|
||||
"controls": {"preference_bias": 0.35},
|
||||
"persona_clone": null,
|
||||
"persona_shelves": null,
|
||||
"persona": null,
|
||||
"notes": "one-line why"
|
||||
}
|
||||
```
|
||||
@@ -93,6 +97,8 @@ A JSON block named "Live SwarmUI context" is attached. Treat it as ground truth
|
||||
- Prefer `aspect` over raw width/height when framing changes.
|
||||
- `vary: true` — new random seed. `lock_seed: true` — reuse current seed.
|
||||
- `pack` — switch active prompt pack for a follow-up hop.
|
||||
- `controls` — only keys declared in this persona's `controls.json` (Exact). Clamp to min/max. Do not invent control ids.
|
||||
- `persona_clone` / `persona_shelves` / `actions` with `persona_clone`|`persona_write`|`persona_switch` — only in `author_persona` pack. Overlay-only; never delete personas from a patch.
|
||||
- Do not invent model or LoRA filenames.
|
||||
- Memory: `memory_upsert` / `memory_forget` with `memories: [{kind,key,text,scope}]`. Default scope is personal. Tools: `memory_get` + kind/key, `memory_search` + `memory_query`, `lookup_tags` + `tag_query` (Danbooru csv — spelling only, not prompt soup).
|
||||
|
||||
@@ -104,5 +110,6 @@ A JSON block named "Live SwarmUI context" is attached. Treat it as ground truth
|
||||
- `"memory_upsert"` / `"memory_forget"` — write or delete vector memory (personal by default; `scope: "shared"` for the common store).
|
||||
- `"memory_get"` / `"memory_search"` — hop: exact row or hybrid search.
|
||||
- `"lookup_tags"` — hop: Danbooru csv (aliases/counts). Do not emit tag soup for Krea.
|
||||
- `"persona_clone"` / `"persona_write"` / `"persona_switch"` — author_persona only. Never `"persona_delete"`.
|
||||
- `look_at: ["generate", "ref1"]` — vision hop.
|
||||
- Pure Q&A with no change: omit the JSON patch.
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"id": "author_persona",
|
||||
"title": "Автор личности",
|
||||
"order": 80,
|
||||
"aliases": ["persona", "author", "clone_persona"],
|
||||
"prompt_file": "author_persona.md"
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
# Mode: author_persona
|
||||
|
||||
Goal: **clone or create an install-local persona** on this Swarm data volume (overlay only). Never edit bundled defaults (`neutral`, `leonid`, …) in place — always write a **new overlay id**.
|
||||
|
||||
## Hard rules
|
||||
|
||||
- Adults 18+ only.
|
||||
- **Do not delete** personas. Deletion is UI-only for the user.
|
||||
- Do not invent LoRA names/triggers.
|
||||
- Ask **by shelf groups**, not one giant questionnaire.
|
||||
- Until you have enough answers, **do not write to disk** — only ask.
|
||||
- Explicit “just copy as-is” → clone with no shelf edits.
|
||||
- New id must be SafeId: `[A-Za-z0-9][A-Za-z0-9_-]{0,63}` and **must not** equal a bundled id.
|
||||
|
||||
## Interview order (one group at a time)
|
||||
|
||||
1. **id + title** (and whether to start from current / named source)
|
||||
2. **voice + humor**
|
||||
3. **craft** (prompting style)
|
||||
4. **appearance + outfits + roleplay** (if relevant)
|
||||
5. **likes / dislikes / rules**
|
||||
6. **controls** — copy schema? starting `preference_bias`?
|
||||
|
||||
Skip groups the user said not to change.
|
||||
|
||||
## Live context
|
||||
|
||||
Trust `persona_shelves` (merged source), `persona_controls`, catalog `personas` with `source`, and `persona_source`.
|
||||
|
||||
## Deliverable
|
||||
|
||||
Short reply in the user's language, then one fenced JSON patch when ready to write:
|
||||
|
||||
```json
|
||||
{
|
||||
"pack": "author_persona",
|
||||
"actions": ["persona_clone", "persona_write", "persona_switch"],
|
||||
"persona_clone": {
|
||||
"from": "leonid",
|
||||
"to": "leonid_calm",
|
||||
"title": "Леонид спокойный",
|
||||
"overwrite": false
|
||||
},
|
||||
"persona_shelves": {
|
||||
"voice.json": { "tone": ["calm", "dry"] },
|
||||
"humor.json": { "frequency": "rare" }
|
||||
},
|
||||
"persona": "leonid_calm",
|
||||
"notes": "cloned and toned down"
|
||||
}
|
||||
```
|
||||
|
||||
- `persona_clone` first (materialize snapshot), then `persona_write` for sparse shelf edits.
|
||||
- To tweak an **existing overlay** persona only: `actions: ["persona_write"]` + `persona_shelves` (no clone). Refuse write on bundled-only ids — tell the user to clone.
|
||||
- `persona_switch` / `"persona": "<id>"` — client switches the dropdown after save.
|
||||
- Never emit `persona_delete` or any delete action.
|
||||
+10
-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>Галочка vision на окне — отправить кадр модели.</li><li>Чипсы aspect / seed / Vary / Turbo·RAW. В чате: <code>/help</code>.</li><li>Кнопки патча только у последнего предложения.</li></ul>Напиши, что сгенерировать — или кинь референс и попроси правку.",
|
||||
"help_text": "Slash-команды (без LLM):\n/help — этот список\n/new — новый чат\n/history — список чатов\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|critique|compose|params|inpaint|describe|card\n/civitai <query> — поиск LoRA (Confirm в чате)\n/inventory — rescan моделей + обновить список LoRA\n\nЧипсы над полем ввода делают то же для aspect / seed / vary / Turbo·RAW.\nПри старте всегда новый чат; смена чата восстанавливает параметры.",
|
||||
"help_text": "Slash-команды (без LLM):\n/help — этот список\n/new — новый чат\n/history — список чатов\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|critique|compose|params|inpaint|describe|card|persona\n/persona new — интервью: клон текущей личности (overlay)\n/persona clone <id> — клон с указанной\n/persona save — записать согласованный черновик\n/civitai <query> — поиск LoRA (Confirm в чате)\n/inventory — rescan моделей + обновить список LoRA\n\nЧипсы над полем ввода делают то же для aspect / seed / vary / Turbo·RAW.\nПри старте всегда новый чат; смена чата восстанавливает параметры.\nOverlay-личности удаляет только кнопка ✕ рядом с селектом (не модель).",
|
||||
"chips": [
|
||||
{ "label": "1:1", "action": "aspect", "value": "1:1", "title": "1024×1024" },
|
||||
{ "label": "4:5", "action": "aspect", "value": "4:5", "title": "928×1152" },
|
||||
@@ -32,7 +32,10 @@
|
||||
{ "cmd": "/vary", "hint": "новый seed", "action": "vary" },
|
||||
{ "cmd": "/pack ", "hint": "write|critique|…", "action": "pack" },
|
||||
{ "cmd": "/civitai ", "hint": "запрос LoRA", "action": "civitai" },
|
||||
{ "cmd": "/inventory", "hint": "rescan моделей", "action": "inventory" }
|
||||
{ "cmd": "/inventory", "hint": "rescan моделей", "action": "inventory" },
|
||||
{ "cmd": "/persona new", "hint": "клон / новая личность", "action": "persona_new" },
|
||||
{ "cmd": "/persona clone ", "hint": "клон с id", "action": "persona_clone" },
|
||||
{ "cmd": "/persona save", "hint": "записать черновик", "action": "persona_save" }
|
||||
],
|
||||
"pack_aliases": {
|
||||
"write": "write_prompt",
|
||||
@@ -49,6 +52,10 @@
|
||||
"describe_ref": "describe_ref",
|
||||
"card": "catalog_card",
|
||||
"catalog": "catalog_card",
|
||||
"catalog_card": "catalog_card"
|
||||
"catalog_card": "catalog_card",
|
||||
"persona": "author_persona",
|
||||
"author": "author_persona",
|
||||
"author_persona": "author_persona",
|
||||
"clone_persona": "author_persona"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user