Chat
The model picker, the context window, thinking, editing and answer versions, duplicating and branching a chat, the sampling controls, personas and character cards, memory, document chat, voice in and out, export and import. Written for version 3.0.7.
Your first message
The model picker sits next to the message box. After the wizard it shows the starter model you installed, or the model you picked. If the picker shows no model, open the Models tab and install one first; the "New Chat" button in the sidebar reads "Pick or install a model first" until then.
Click into the box with the placeholder "Message...", type, and press Enter or the send button ("Send message"). The first answer takes longer than the following ones, because the LU Engine loads the model file into memory first; a 4 GB file takes some seconds from an SSD and longer on the first cold start. While an answer streams in, the send button becomes "Stop generation". Stop means stop: the request is cancelled at once.
"New Chat" in the sidebar starts a fresh conversation with the same model. Old conversations stay in the list on the left, where each row has "Rename chat", "Duplicate chat" and "Delete chat" buttons. Everything is stored on your machine, in the app's browser storage, with a backup file that chapter 2 names.
Edit, versions, duplicate and branch
Point at a message and a small bar of buttons appears under it: "Edit", "Regenerate" on an answer, "Copy", "Branch from here" and "Delete message". A right click on the message opens the same actions as a menu.
Edit a message
"Edit" opens the text in a field with up to three buttons:
| Button | Key | What it does |
|---|---|---|
| Cancel | Escape | Leaves the message as it was. |
| Save | Enter | Changes the text only. Nothing is sent, no model is loaded, and every later turn stays. |
| Save & resend | Ctrl or Cmd with Enter | Asks again from this message. The answers that followed are kept as a version. |
Shift with Enter makes a new line. "Save & resend" is only offered on your own messages; an answer of the model can be edited and saved, not resent. If nothing can be sent at that moment, for example because no model is picked or an answer is still running, the text is saved instead, so the edit is not lost.
Answer versions
"Regenerate" and "Save & resend" do not delete what was there before. The earlier continuation is kept as a version, and a switch such as "< 1/2 >" appears with the arrows "Previous version" and "Next version". The arrows stop at the first and the last version. When only the answer differs, the switch sits on the answer; when you edited the question, it sits on the question. While an answer is still being written, the arrows are off.
Only the version on screen counts: it is what the model sees in the next turn, and what the export and the search read.
Duplicate a chat
In the chat list, each row has a copy icon named "Duplicate chat", and the right click menu of the row 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 and their personas, the sampling values, the documents, the Agent and Code settings and the kept versions come along. Duplicate chat is not offered in Remote Access.
Branch from a message
"Branch from here" ("Branch from here: a new chat up to this message") starts 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 settings and documents of the chat come along, and the original chat is not touched. Use it to try a second direction without the first one in the context.
The model picker
The picker groups models by family, and each row shows the model name. A row with an On/Off switch is a model the engine can load or unload; "Unload all models" at the bottom frees the memory of every loaded model. A model that comes from LM Studio carries a hint that using it starts the LM Studio server and makes LM Studio the chat backend in place of the LU Engine. In Cloud mode the picker shows hosted models only, with the marks that chapter 8 explains.
Several OpenAI compatible servers can run side by side, for example LM Studio and KoboldCpp next to the LU Engine. Each one has its own row under Settings, AI Backends, and its models appear in the picker under its name.
If the picker says "No AI backend is enabled", every provider is switched off under Settings, AI Backends, Providers; enable the LU Engine there. Chapter 9 lists the other providers and their default addresses.
The context window
The context window is how much text the model can hold at once, measured in tokens (a token is roughly three quarters of a word in English). Everything counts against it: the system prompt, your messages, the answers, attached documents and tool results. When it is full, older turns fall out or the answer is cut.
Above the message box a small dropdown shows the current value and a counter next to it shows how much of it this conversation uses. Open the dropdown to change it:
- "Auto" leaves the choice to the app: at most 16,384 tokens in a plain chat and at most 32,768 in Agent mode (an agent turn carries every tool definition and needs the room), and never more than the model's own maximum. The LU Engine's own starting value is 8,192, set under Settings, AI Backends, LU Engine (expert), "Context length (tokens)".
- The fixed values run from 4,096 to 131,072 and are cut at the model's maximum.
- Three labels say where the current value came from: "from server" (the engine reported it), "set by you" (you picked it) or "estimated" (the app guessed from the model's metadata).
On the LU Engine the tooltip reads "Changing it reloads the model so it takes effect now." The reload takes as long as the first load did. Memory grows with the context: the KV cache, where the model keeps the conversation while it works, grows linearly with the context length, so 32,768 on a 7B model can push a 6 GB card into RAM. If answers become slow after you raised it, put it back.
On a server you run yourself (Ollama, LM Studio, llama.cpp, vLLM, KoboldCpp, or a custom OpenAI compatible address) the tooltip reads "This server decides its own context; pick the value it actually runs with so the counter and the request budget match it." The app asks those servers what they run with where it can (llama.cpp, vLLM, KoboldCpp and LM Studio answer), and a note under the dropdown reads "Current value 8,192 (from server). Your pick is saved for this model on this server." In Cloud mode there is no picker, because the hosted model's window is fixed.
Thinking and effort
Some models can reason before they answer, writing a hidden draft first. The "Think" button next to the message box switches that on and off for models that support it. Its tooltip tells you what the current model can do: "Thinking ON", "Thinking OFF", "Thinking is always on for this model" or "Model does not support thinking".
Next to it, the effort control cycles through Low, Medium, High and Max. Its tooltip reads "Reasoning effort: High. Click to cycle. Higher effort spends more output tokens." The default is High. On a local model effort costs time; on a hosted model it costs credits, because thinking tokens are output tokens.
The sampling controls
Next to the message box a small trigger reads "Sampling: 0.70". A star after it means "Changed from the defaults". Click it to open the sampling settings of this chat:
| Control | Range | What it does |
|---|---|---|
| Temperature | 0 to 2, step 0.05, default 0.7 | Lower is more predictable, higher is more varied. 0 always picks the most likely word. |
| Top P | 0 to 1, default 0.9 | Only the most likely words whose probabilities add up to this share are considered. |
| Max tokens | 0 = auto | The longest answer allowed. 0 lets the app decide. |
| Think budget | 0 = auto | How many tokens a model may spend thinking while Think is on. It applies to every chat, and it is off for backends that do not read it. |
A help line under the controls reads "Reasoning models accept these and react less to them." "Reset" removes this chat's own values, so the chat follows Settings, General, Generation again. That settings page holds the defaults for every chat, with Top K (0 to 200, default 40) in addition, which OpenAI style backends ignore.
Below the controls the popup lists each speaker, the chat model or every member of a group chat, with the values that hold for it and where they come from: a persona or the chat settings. A value its backend does not read is marked "(not sent)" and is not sent. The next section says how a persona gets its own values.
Images in the chat
The paper clip next to the message box attaches up to five images ("Attach images. For PDFs and documents use the Documents panel"). Only a vision model can read them. If the current model cannot, the app says "This model can't read images. Switch to a vision model (Gemma 4, LLaVA, Qwen-VL) to use the attachment." The Models tab marks vision models with an image icon in its legend.
Document chat
The "Docs" button above the message box opens the Documents panel. Drop a .pdf, .docx or .txt file into it and the app splits the text into pieces, turns each piece into numbers with the embedding model, and for every question you ask it fetches the pieces that match and hands them to the chat model. This is what people call RAG.
Document chat needs the embedding model from step 4 of the wizard. If you skipped it, the panel shows "Embedding model needed" and "Document Chat needs nomic-embed-text (274 MB). One-time download." with a button to fetch it. The panel also tells you where the indexing runs: "Your documents are indexed on this computer and stay here" on a local backend, or, on a remote embedding server you configured, "Indexing runs on (address), so the full text of every document you add is sent there".
Personas, memory and plugins
A persona is a system prompt with a name. The default persona is "No Filter", which tells the model that it is your own model, running for you alone, and carries the house conduct rules; it has a real role, so a plain question gets a plain answer. Twenty five personas are built in and you can write your own under Settings, Agent, Personas ("Use personas" switches the feature on). The "Plugins" button above the message box opens a panel where "Persona" has the checkbox "Enable persona for this chat". A chat remembers its persona, and a pick in Plugins changes the open chat, so the chat, a group chat, Agent and Voice send the persona the menu shows.
The persona editor has a block "Sampling for this persona" with 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. The values apply wherever the persona speaks: in a chat with the persona switched on, and on its seat in a group chat. "Empty fields follow the chat. A value moved in the chat's Sampling popup still wins. Each value only reaches a backend that reads it."
Character cards are the files role play apps use to share characters: a JSON file, or a PNG with the card inside the picture. Under Settings, Agent, Personas, the tile "Import card" ("Import a character card (PNG or JSON)") 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 "Imported (name). New chats start with this character." If personas are switched off, it asks you to switch them on. The persona's prompt is built from the card's system prompt, description, personality, scenario and example dialogue, and you can edit it like any other persona. Creator notes of a card are shown under the tiles for you to read; they are not part of the prompt.
A new plain chat with that persona has the persona switched on and 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; there is no setting for your own name yet, so {{user}} becomes "User". A lorebook inside a card imports without an error, but LU does not use it. "Export as character card" on the tile saves the persona as a version 2 JSON file.
Web, file, image and video tools are always on in the plain chat for every model that can call tools; a model that cannot answers without them. The same panel holds "Caveman Mode" (Off "Normal responses", Lite "Slightly shorter", Full "Very terse", Ultra "Maximum brevity") and "Group chat" ("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".
Memory is a small store of facts about you that the app injects into every prompt. The Memory toggle above the message box ("Memory: view, add or delete the context injected into prompts") shows what is in it. Settings, Agent, Memory manages the store.
Voice in and out
Voice runs locally. Speech to text uses faster-whisper, which you install under Settings, Voice & Remote, Speech with "Download & Install"; the microphone button reads "Start voice input" and, while recording, "Stop recording". If it is not installed, the app says "Speech-to-text is not installed. Install faster-whisper in Settings → Voice & Remote."
Text to speech uses Piper, a small neural voice of about 63 MB. "Enable read-aloud" under the same settings adds a speaker button to every answer ("Read aloud" / "Stop speaking"), and "Auto-read new responses" reads every answer as it arrives. In Cloud mode dictation runs hosted and needs a signed in account with credits.
Export, import, compact
"Export chat" above the message box saves the conversation as Markdown or JSON; Ctrl+E saves Markdown at once. Settings, General, Chat Backup exports all chats in one file and imports them again.
To bring your ChatGPT history over, open Settings, General, Import from other chatbots and press "Choose export file (.zip or .json)". It takes the .zip of ChatGPT's data export, or the conversations.json inside it. A large export is read in the background with its progress on screen. The list then shows each conversation with its number of messages and its date; pick them with the checkboxes, "Select all" or the field "Filter by title", and press the import button, which names how many chats it adds.
Each conversation becomes its own chat in the chat list, with its title, its original date and the messages of the thread you saw, in order. 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. An imported chat is a normal chat, so Duplicate and Branch from here work on it.
Importing again is safe. A conversation marked "Already imported" is not added twice. One marked "Updated since last import" was continued in ChatGPT and is refreshed. One marked "Continued in LU, imports as a separate chat" is a chat you went on with here: LU never replaces it, and the newer export comes in as a second chat whose title ends in "(from export)".
The second button, "Add to the open chat's documents instead", is the older way: the picked conversations become documents of the chat that is open, for document chat, and do not appear as chats.
The importer is made for ChatGPT, and only an export in ChatGPT's format has been tried in the app, not yet a real one. The same button also reads the conversations of a Claude export and Gemini Apps activity from a Google Takeout JSON file and imports them the same way, but those have not been tried with real exports. A Gemini entry that holds only a prompt becomes a chat with just that question.
When a long conversation nears the end of its context window, type /compact. The app summarises the older turns into a short recap and the conversation keeps going with the summary in place of the history. "Auto-compact at" under Settings, General, Generation does that on its own once the context is a set percentage full; 0 means off.
Ctrl+K opens a command palette with the field "Search actions…" that jumps to any tab or action by name.
When it goes wrong
The answer never starts. The engine is probably still loading the model. Wait for the load; the budget is 60 seconds plus 4 seconds per gigabyte of model file, up to ten minutes for a huge file on a cold disk. If it fails, the sentence that appears is one of the engine sentences in chapter 9.
"Couldn't start the LU Engine with "(model)": (reason)" The engine could not load that file. The reason after the colon is explained in chapter 9; the most common ones are a damaged download ("does not start with the GGUF marker") and a graphics card problem ("This looks like a graphics-card problem").
The answer is nonsense, mixed scripts, question marks. Almost always a model under 7B or a model that does not fit the card at all. Pick a 7B or larger model that the Models tab marks green or blue for your card. If it persists with a good model, set GPU Layers to 0 under Settings, AI Backends, LU Engine (expert) to run on the processor once and see whether the text is clean; if it is, the graphics driver is the suspect.
"Cut off at the length limit" appears as a badge under an answer. The model hit Max tokens. Raise Max tokens in the sampling controls (0 = auto) or under Settings, General, Generation, then send "continue".
"Your documents could not be searched for this message" The embedding model or its server did not answer. Check Settings, AI Backends for the embedding provider; on the LU Engine, the embedding server runs on port 8128 next to the chat engine.
The model forgets the start of the conversation. The context window is full and the oldest turns fell out. Type /compact, raise the context in the dropdown if the model and your memory allow it, or start a new chat.
Ollama or LM Studio is installed but the picker shows nothing from it. The server is not running. Ollama: start the app or run ollama serve. LM Studio: start its local server in LM Studio's Developer tab. Then press "Test" next to the provider under Settings, AI Backends, Providers.
Previous chapter: First start. Next chapter: Agent. Back to the handbook overview.