Skip to content
WM KeyboardWM Keyboard
Accessibility

AI chat

A full back-and-forth conversation with whichever model you set up, on the keyboard's AI panel or in the settings app, as one shared list of chats.

The AI tool runs one-shot actions against the text in a field. Chat is the other half: a normal back-and-forth conversation with the same model, kept on your device.

You can chat in two places, and they’re the same chats. The keyboard’s AI panel has a Chat mode, for asking something and dropping the answer straight into whatever you’re writing. The settings app has a full-screen version, for longer conversations. Start one on the keyboard, carry it on in the app, come back: there’s one list, and an answer that’s still streaming in shows up on both.

Open the AI tool from the toolbar. The panel’s header has two chips, Actions and Chat. Tap Chat. The panel remembers which one you left it on, so if chat is what you use, the AI button opens chat from then on.

Chat mode on the AI panel: the conversation, the newest answer's buttons, and the composer.
Chat mode on the AI panel: the conversation, the newest answer's buttons, and the composer.
Chat mode on the AI panel: the conversation, the newest answer's buttons, and the composer.

Tap the message box and the keys come up underneath, with the last few messages still in view above it. The keyboard gets taller while you type so the conversation doesn’t disappear. On a short screen the conversation gives up room first: the keys under the message box always keep their full height. Tap the conversation, or press Back, and the keys step aside again so you can read. Your half-typed message stays where it was, even if you close the panel.

Glide typing, suggestions and the caret all work in the message box the way they do in any of the keyboard’s own fields. Nothing you type there reaches the app behind the keyboard.

The newest answer always shows its buttons. Tap any older bubble to bring out its own.

  • Insert puts the answer in the field at the cursor, with markdown markers stripped, since a text field won’t render them.
  • Copy copies the answer as written. Long-pressing a bubble copies it too, in one move.
  • Write again throws the newest answer away and asks for another.
  • Edit, on your own newest message, pulls it back into the message box along with the answer it got, so you can fix the question and send it again.
  • A code block gets its own Copy and Insert, which take just the code, exactly as written.

Answers are drawn with their formatting: headings, lists, bold, inline code and code blocks. While an answer is still streaming, a code block waits for its closing fence before it offers its buttons.

The paperclip beside the message box quotes what you’re working on. With text selected in the field, it takes the selection; otherwise it takes the whole field. A line above the message box says which, and how long it is. The model gets your message followed by that text, clearly marked off, and the bubble notes that text went with it. Tap the paperclip again to drop it.

It’s greyed out over an empty field, and it never reads a password field.

The clipboard button next to it pastes your latest clip at the caret.

The picture button beside the paperclip brings up two chips over the message box. Copied picture takes the newest picture in your clipboard history. Newest screenshot takes the last screenshot on the phone, whenever you took it; the first time, it asks for access to your photos, and the screenshot is added once you come back from allowing it. These are the AI reply tool’s sources rather than the photo picker the app’s chat uses, because a keyboard that opens a picker loses the field you were typing in.

Up to four pictures can go with one message. They wait above the message box with a cross on each to take it off, and a message can be pictures alone. Sent, they show at the top of your bubble, on the keyboard and in the app alike. What the model does with them is the same as in the app: see Sending pictures.

The picture button isn’t there while incognito is on, or over a password field. Play Store builds offer Copied picture only, since they don’t ask for the photos permission a screenshot needs.

An empty chat offers a few openers: Reply to this and Explain this quote the field for you, Help me write starts the sentence. They only fill the message box. Nothing is sent until you send it.

Wikipedia, Dictionary, Vocabulary and Grammar check can hand their text to the chat. Each has an Ask AI chip (on Grammar check, a sparkle on each issue card), and in Wikipedia, Dictionary and Vocabulary a long press on the text selects a passage with Ask AI on the bar over it. Either way the AI panel opens in chat mode on a new conversation, with the text attached the way the paperclip attaches the field’s, and the line above the message box names where it came from, for example “About Wikipedia: Cat”. The keys come up under the message box, and three openers stay on screen while you type: Explain simply, Summarise and Hard words. The text goes with your first message only.

The chips show only while the AI tool is on, and not on the lock screen.

The chip in the header with the chat’s title opens your list of chats: tap one to open it, New chat to start fresh, Delete twice to remove one. The plus button starts a new chat from anywhere. The arrow button opens the current chat in the settings app, which is the place to go when you’d like a full screen or selectable text.

By default Enter starts a new line, and the send button sends. If you’d rather Enter sent the message, turn on WM Keyboard  Tools  AI writing tools  Enter sends the message.

On the lock screen the panel shows only its actions. Chats are stored encrypted behind your unlock, and a transcript isn’t something to draw over a lock screen.

A chat started while incognito is on is never saved. You can read it and carry it on until the keyboard’s process ends, and then it’s gone.

WM Keyboard  Tools  AI writing tools  Chat with the model

It sits in a group headed Chat on the AI tool’s settings screen, under the reasoning and panel options. There’s a faster way in too: long-press the app icon on your launcher and pick AI chat, which lands you on the conversation list without going through Home.

The conversation list, newest first, with the New chat button at the top.
The conversation list, newest first, with the New chat button at the top.
The conversation list, newest first, with the New chat button at the top.

The list is your saved conversations, most recently updated first. Each row is the chat’s title and how long ago you touched it, with a delete button on the right that asks first and names the chat it’s about to remove. New chat is both a button at the top of the list and a plus in the top bar.

Nothing saved yet? You skip the empty list entirely and land in a new chat, because an empty list with one button on it isn’t worth a screen. A chat is only written down on your first send, so opening one and backing straight out leaves no row behind.

Titles aren’t something you type. The first line of your first message becomes the title, cut to 48 characters on a word boundary.

The picture button left of the message box opens the system photo picker, which needs no permission. Pick up to four for one message; they wait above the message box, each with a cross to take it off again, and a message can be pictures alone. In a sent message they show above its text.

What the model does with them depends on what it can take:

  • A cloud or self-hosted model that reads pictures (Claude, OpenAI, Gemini, Grok, Ollama, LM Studio, any OpenAI-compatible service) is sent the pictures with your newest message. Older pictures aren’t sent again with every reply after it; the model remembers what it said about them.
  • An on-device model, or a provider with no place for pictures (Brave and DeepSeek among them) can’t take one. It is told each one is there, numbered, and can use Read text in a picture from the keyboard’s own tools to read what it says.

Either way, with Search by picture turned on the model can look a picture up on the web through the camera tool’s search site, and hands you the link to the results.

The keyboard’s chat adds pictures its own way, from the clipboard or your newest screenshot: see Adding a picture.

Two ways in open the chat as a sheet over whatever app you’re in, with the app still showing above it. The floating AI button brings the text on screen along when its screen reading is on. Ask AI in any app’s text selection menu brings the selected text. Either way it waits above the message box, where View shows all of it and Delete drops it, and the first message you send carries it. The conversation lands in the same list as the rest.

A scrolling row of chips above the transcript lists everything you can talk to right now: models you’ve downloaded on-device first, then every provider you’ve configured. “Configured” means the thing it needs is filled in. That’s an API key for the cloud services, an address for Ollama or LM Studio, and both an address and a model name for Other service. With fewer than two to choose from, the row doesn’t appear at all.

Model chips over a conversation, with an answer streaming in.
Model chips over a conversation, with an answer streaming in.
Model chips over a conversation, with an answer streaming in.

Two things worth knowing about that row:

  • It doesn’t touch the keyboard’s own setting. Chatting to Gemini while the AI tool is set to Claude leaves the tool on Claude. The chip is the chat’s choice and nothing else reads it.
  • It’s frozen while an answer is coming in. The chips grey out until the answer lands or you stop it, since swapping models halfway through a reply has no sensible meaning.

Your pick is remembered for next time, and each conversation also remembers the last model that answered in it.

Type in the box and hit send. While the answer streams, the send button becomes Stop.

  • Stop keeps what arrived. The partial answer stays in the transcript, labelled “Stopped”, rather than vanishing as if you’d never asked. An on-device generation is a native call that can’t truly be interrupted. It finishes quietly in the background instead, and the model’s own memory of the conversation is kept in step with what you can see.
  • A failed turn shows the error in its own bubble with a Retry button. Only the newest failed message gets one, because retrying something from the middle of a transcript would answer out of order. Retry re-sends the message the failure was answering, so nothing is duplicated.
  • Leaving doesn’t cancel anything. Navigate away mid-answer and the generation carries on. Come back and it’s either still streaming or already in the transcript.

Every message has a Copy button under it, and the text itself is selectable, which the keyboard’s version can’t offer. The newest answer adds Write again, and your own newest message adds Edit, both exactly as on the keyboard. Answers render the same formatting on both, and a code block has a Copy of its own. There’s no Insert here, because there’s no field behind this screen to insert into.

A Play Store build adds a Report button along the bottom edge of every finished answer. It follows the same route the panel offers under Reporting a result: a draft opens in your own mail app holding the provider, the model, the message the answer replied to, and the answer itself, with a blank line at the top for what went wrong. Nothing is uploaded when you tap it, so a report only exists once you send the mail. Your own messages carry no Report button, and neither does a failed turn, because neither one is a generated answer. With no mail app installed, a message says so instead. GitHub and F-Droid builds show no Report button here at all, since Play’s AI-generated-content policy is the only reason for it. The keyboard panel’s own Report button has no such restriction.

When the model searches the web or reads a page on the way to an answer (see Letting the model look things up), the bubble says so while it happens, as Searching the web for ”…” or Reading example.com…, and keeps a line over the finished answer afterwards. Tap it to see each search with the results the model was given, each page it read by its full address, and any lookup that failed and why. A tap on a result opens it in your browser and a long press copies the address, on the keyboard and in the app alike. The record is saved with the answer, so it’s still there when you come back to the chat, and it stays even on a turn that failed or that you stopped. A lookup cut off by Stop is marked “Stopped”.

Reasoning models follow the same Show model reasoning setting the keyboard panel uses. With it on, the raw stream renders with the thinking part dimmed. With it off, you get a “Reasoning…” line until real answer text starts arriving.

An on-device model gets a live session per conversation, seeded with the saved transcript, so it keeps the context of what you’ve already said. Switching conversation, model, compute backend or context size closes that session and opens a fresh one, seeded the same way.

With no downloaded model and no configured provider, the chat screen says Nothing to chat with yet and offers one button back to the AI tool settings. That’s the same setup you’d do for the keyboard panel: see Choosing where it runs.

On-device models are Full edition only, so on a Lite build chat only works once you’ve configured a cloud or self-hosted provider. See Full vs Lite if you’re not sure which one you have.

Conversations live in one file in the app’s private storage, in the same folder as the AI history. It shows up as AI chats on the storage screen under WM Keyboard  About  Storage, so you can at least see what it costs you. Your data covers what else is in there.

Two rows decide whether that file exists at all. Both sit on the History screen, under WM Keyboard  Tools  AI writing tools  History, in a group headed Chats:

  • Keep your conversations is on by default. Turn it off and chats live only until you close the app, and whatever is already saved is deleted with it. That’s the same contract the AI history switch has.
  • Delete all chats clears every saved conversation after a confirmation, without turning the feature off.

Three caps keep the file from growing without limit:

WhatCapWhat happens past it
Conversations50The one you touched longest ago drops off
Messages per conversation200The oldest messages drop off the front
Characters per message20,000The rest is cut

Text you attached from a field is saved with its message, under the same 20,000-character cap, because the conversation wouldn’t make sense to the model without it on the next turn.

Pictures are kept as files next to the conversations, scaled down to 1,280 pixels on the long side first, and are deleted when nothing refers to them any more: when the conversation is deleted, for example. With Keep your conversations off they go in the app’s cache instead.

Deleting a conversation from the list removes it for good. There’s no undo, which is why the dialog names the chat first.

Exactly what the AI tool sends, and only when you hit send:

  • An on-device model sends nothing. The whole conversation stays on the phone.
  • Any other provider gets the conversation so far, because that’s what makes a reply follow on from the last one. Pictures you sent go with your newest message, to a provider that takes them. That includes any field text you attached with the paperclip, and only the text you attached: the keyboard’s chat never reads the field on its own. A fixed instruction rides along with it: answer in plain text, and keep it as short as the question allows. Your API keys stay on the device.
  • The transcript itself goes nowhere. It’s deliberately left out of settings backups, the same as the AI history and for the same reason: your own conversations shouldn’t ride along in a file you export and mail to yourself. See Your data.
  • Max response length applies here too. For a cloud or self-hosted model, the AI tool’s ceiling bounds a chat reply the same way it bounds a panel result, reasoning-model multiplier included. See About “Provider maximum”. On-device, the Context size row is what bounds it, exactly as on the panel.
  • The chat prompt isn’t one of your actions. The panel’s action prompts are for transforming text in a field, which is a different job. Chat has its own fixed prompt and nothing on this screen edits it.
  • Nothing here is written to the AI history. That log records panel runs. A conversation is only in the chat file.
  • The launcher shortcut is one of four. Long-pressing the app icon offers Tools, Languages, AI chat and Themes, and nothing else. The wmkeyboard://settings/ scheme behind those four reaches three more screens (Typing, Appearance and Search) that no shortcut points at. See Deep links & launcher shortcuts.
  • Deleting a chat mid-answer is handled. If a generation finishes for a conversation you’ve already deleted, the answer is dropped rather than resurrecting the row.
  • Reasoning is stripped from what’s saved. Only the answer lands in the transcript, the same way the keyboard panel only commits the answer.
  • Lookups are saved as a list, not as pages. A saved answer keeps each query, the titles and addresses of the results, and why a lookup failed. The text of the pages themselves isn’t kept, and a follow-up question doesn’t see it again: the model only has its own earlier answer to go on.

Related: AI tools covers the providers, the on-device model catalog, the panel’s actions, and the history.