Branch and Duplicate AI Chats on Your Own Machine: Versions, Personas and Group Chats
Twenty turns into a conversation with a local model, you want to ask turn twelve a different way. Locally Uncensored 3.0.7 can copy a chat, branch it at any message, and keep earlier answers as versions. The same release gives personas their own sampling values, imports character cards as personas and turns a ChatGPT export into real chats.
Step 1: Duplicate a Chat
In the chat list, each chat has a copy icon named Duplicate chat, and its right click menu has the same entry. The copy opens at once, and its title ends in "(copy)".
It is a full copy: the persona, the system prompt, the group members, the sampling values, the attached documents and the Agent and Code settings come along, and so do answers you kept as versions (Step 3). Duplicate chat is not offered in Remote Access.
Step 2: Branch From Any Message
Under every message sits a small branch icon with the tooltip "Branch from here: a new chat up to this message". The right click menu of a message offers it too.
The branch is a new chat whose title ends in "(branch)". It holds the history up to and including that message, as it stands on screen, without the kept versions. The original chat is not touched. Use it for a role play that could go two ways, or to try a second approach without the first one in the context.
Step 3: Keep Earlier Answers
Regenerate now keeps the earlier answer as a version. A switch such as "1/2" with two arrows, Previous version and Next version, appears on the answer. When you edit a question and send it again, the versions differ in the question, so the switch sits on the question instead.
Step 4: Edit Without Losing the Rest
Before 3.0.7, the check mark of an edit resent the message at once and deleted every later message for good, even with no model loaded (issue 172). The pencil icon named Edit now opens a field with three buttons:
| Button | Key | What it does |
|---|---|---|
| Cancel | Escape | Leaves the message as it was |
| Save | Enter | Changes the text only and keeps every later turn |
| Save & resend | Ctrl or Cmd with Enter | Asks again from here and keeps the current answers as a version |
Shift with Enter makes a new line. Save is the one for fixing a typo in a question the model already answered.
Step 5: Give Each Persona Its Own Sampling
A persona is a system prompt with a name, managed under Settings, Agent, Personas, as the chat chapter of the handbook describes. The persona editor now has a block "Sampling for this persona" (issue 175): Temperature, Top P, Top K, Min P, Max tokens, Repeat penalty, Presence penalty, Frequency penalty and DRY multiplier.
An empty field shows "chat default" and follows the chat. A value you set applies wherever the persona speaks, in a chat with the persona switched on and on its seat in a group chat. Values set in the chat's own Sampling popup still win.
That popup now lists each speaker with the values that hold for it, so a narrator can run cool and a character next to it hotter. A value the backend does not read is marked "(not sent)" and is not sent.
The persona you pick is the one that is sent
The Plugins button above the message box has a Persona section with "Enable persona for this chat". A chat used to keep a copy of the persona active when it was made, while the menu changed only the pick for new chats, so the menu could show one persona and the request carry another (issue 170). Now a chat remembers its persona, a pick in Plugins changes the open chat, and chat, group chat, Agent and Voice send what the menu shows. Older chats keep their saved prompt.
Step 6: Run a Group Chat
In the same menu, Group chat reads "Pick 2 to 4 models. They answer in turn on every message, and each sees what the others said. Each one can speak as its own persona." Each member has a persona button, "The persona this model speaks as in this chat". The fixes for issues 165 and 169:
- A member whose model left the model list used to stay in the group unseen, and whatever model was loaded answered for it. Now it sits out until its model is back, and the group menu marks it unavailable with "Remove from the group"
- A server that lists the same model twice, such as KoboldCpp in Ollama mode, gives one row
- Every turn carries the persona it was written as, so after a persona moves to another model its older turns still count as its own
A group chat export now names the persona and model of every answer instead of "Assistant". A branch of a group chat keeps the members and their personas.
Step 7: Import Character Cards as Personas
Character cards are the format role play apps such as SillyTavern use to share characters: a JSON file, or a PNG with the card inside the picture. Under Settings, Agent, Personas, the tile Import card reads card versions 1, 2 and 3, up to 20 MB per file.
The card becomes a persona with the card picture as its tile, and the line under it reads "New chats start with this character." If personas are off, the line asks you to switch them on. Its prompt comes from the card's system prompt, description, personality, scenario and example dialogue, and stays editable.
A new chat with that persona opens with the card's greeting as the first answer. With more than one greeting, Previous greeting and Next greeting switch between them until you write. The macros {{char}} and {{user}} are filled in. LU has no setting for your own name yet, so {{user}} becomes "User".
"Export as character card" on the tile saves the persona as a version 2 JSON file. A lorebook inside a card imports without an error, but LU does not use it. If lorebooks are your main use, the alternatives page compares the tools.
Step 8: Bring Your ChatGPT History Over
Settings, General, Import from other chatbots takes the .zip of ChatGPT's data export, or the conversations.json inside it. Click "Choose export file (.zip or .json)", pick conversations with Select all or the Filter by title field, then click the Import button, which names how many chats it will add.
Each conversation becomes its own chat with its title, its original date and the messages of the thread you saw. Answers you regenerated or edited away stay out, and so do system prompts, reasoning and tool calls. Images and files are not copied. A note such as "[Image not included in the import: beach.jpg]" marks where they were.
Importing again is safe. "Already imported" is not added twice. "Updated since last import" is refreshed. "Continued in LU, imports as a separate chat" means you went on with it here: LU never replaces that chat, and the newer export arrives as a second chat ending in "(from export)". The old way, "Add to the open chat's documents instead", is the second button. An imported chat is a normal chat, so Duplicate and Branch from here work on it.
Limits
- What is new in Steps 1 to 6 has run in automated tests only
- Duplicate chat is not offered in Remote Access, and a branch carries no kept versions
- Character cards were checked in the app with Holo and Qwen models, not with Gemma. Lorebooks are not used, and {{user}} is always "User"
- The ChatGPT import ran in the app on Windows with an export built in ChatGPT's format, not yet with a real export. Images and files do not come along
Locally Uncensored is AGPL-3.0 licensed and built by PurpleDoubleD. Corrections welcome on GitHub Discussions or in the Discord.
In the handbook
- Chat: personas, memory and plugins, where personas live and how the Plugins menu works
- Chat: the sampling controls, what temperature, Top P and Top K do
- Chat: export, compact, new chat, chat export, backup and the import of other chatbots
- Remote Access, using your chats from the phone