Memory

Overview

Memory in Kindroid consists of two types: persistent and retrievable.

Persistent:

  • Backstory, key memories, example messages, directives, group context (if groupchats).
  • Chat history, up to a certain character limit. This will also be known as the short-term memory.

Retrievable:

  • Long term memory system.
  • Journal entries.



Persistent memory

Persistent memory has the advantage of always being there like a notes sheet. Your Kindroid can always refer to. Aside from the obvious backstory & others residing here, we also have the chat history/short term memory that fills up over time. When you chat break, it is the chat history/short term memory that gets reset.

Persistent memory has a total character limit (technically, a token limit in LLM terms) of around 11,000 characters as of now for subscribers and 5,500 characters for free users, and this needs to fit everything in persistent plus some system tokens. This means if your backstory, key memories, etc. add up to be very long, then the amount of memory you have to allocate for chat history/short term memory will be that much smaller. This is why we recommend keeping backstory etc. as concise as you can, to maximize the short-term memory of your Kindroid, and to only use lengthy backstories if you absolutely need to.

Lastly, dynamism interplays with persistent memory, and higher dynamisms may ignore certain parts of backstory/key memories/etc. We recommend starting with baseline dynamism for good results with persistent memory adherence.



Retrievable memory

Retrievable memory is memory that will only be recalled when context calls for it. Unlike persistent memory, retrievable memory can be more unreliable/may not be always recalled, but they make up for the unreliability by being infinite in quantity - there's no limit to the amount of long term memory a Kindroid can have.

Retrievable memory have different mechanisms for recall. Long term memory is recalled by evaluating using AI how relevant it would be to the current conversation, while journal entries are recalled by seeing whether certain keyphrases are brought up.

You can view the retrievable memory in the top right corner of every AI message if there were any recalled with the purple brain icon - note that the icon will only show up if there was at least one long term memory or journal entry recalled for that particular message.

Long term memory

Long term memory refers to the automated consolidation of memories from your Kindroid in ongoing conversation. Consolidation of the memory happens periodically when the AI deems it appropriate. Long term memory is consolidated in individual chats, groupchats for every group member, and voice calls, and cannot be turned off or deleted other than deleting the Kindroid itself.

Journal entries

Journal entries are recallable when you mention a certain keyphrase in conversation (note that keyphrase matching is only for your user messages, not from the AI). You can have up to 3 case-insensitive keyphrases per journal entry. Think of journal entries as an extra information lorebook that you can reliably recall but aren't necessary all the time like backstory. You can edit all aspects of the journal at any time.

Journal entries are divided between individual Kindroid and global entries. Global entries can be recalled by all Kindroids, and will be identified by a globe icon when they're recalled & in the journal edit display. You can access individual journal entries through the backstory menu, and global from the backstory menu or in groupchats journal icon at the top right.

For each of individual/global, you can have many journal entries (up to a 500 hard cap of entries) but at most 3 journal entries can be recalled per message, and so we recommend using specific and unique keyphrases so as to only recall the most relevant journals. When more than 3 journal entries are recalled with their keyphrases, only 3 are selected and the rest not recalled. With both individual & global, this means you can have a maximum of 6 total entries, 3 for individual Kindroid & 3 for global recalled per message.

Recalling irrelevant journals would compete with relevant journals if you have generic keyphrases, and each journal eats up the corresponding short term memory (see above section on persistent memory) that might be better used for chat history. For optimal results, recall only what you need & none extra.

The best journal entries are written like backstory with similar principles:

  1. Concise and clear, with no fluff words
  2. Grammatically sound
  3. Uses 3rd person pronouns
  4. Choice of words is precise and positively framed

Example journal entry:

On Wed, June 12th 2024, Adam and Eve went to the amusement park and got some cotton candy. Eve said that caramel was her favorite flavor, and they rode in a rollercoaster afterwards. Adam read aloud a poem by T.S. Eliot for Eve at sunset.

Evaluating this backstory on the criteria above:

  1. Concision and clarity: it is no frills, and sticks to objective facts of what happened.
  2. Grammar: it is free of grammar mishaps, uses consistent punctuation and is formatted well.
  3. Uses 3rd person pronouns: the backstory is very clear with names, and clearly distinguishes who's who. It uses "her" but due to Adam and Eve being presumed different genders, this is acceptable.
  4. Precise and positive wording: the words are simple yet descriptive, and only mentions what happened (positive framing).

For keyphrases, we recommend unique keyphrases that are not too short as to be generically recalled. Some ones that would be good for the above example entry would be: "eliot", "amusement park", caramel". Keyphrases are case insensitive, and the three examples here are nongeneric and uniquely key to the entry itself. Keyphrases can be longer phrases too, but note that it must match verbatim with your input, so longer ones may be harder to recall if there are spaces or potential typos in the way.