> ## Documentation Index
> Fetch the complete documentation index at: https://docs.osvi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Memory

> Let an agent hold details in mind during a call, and carry them across calls with the same contact

The **Memory** tab controls what an agent remembers. It is split into two halves that work at different moments and are configured separately:

|                       | **On-Call Memory**                                                               | **Post-Call Memory**                                                       |
| --------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| **When it runs**      | Live, while the call is in progress                                              | After the call ends, from the transcript                                   |
| **What it does**      | Keeps named details straight for the rest of the conversation                    | Extracts structured data and persists it                                   |
| **How long it lasts** | The call                                                                         | Session records, plus a contact profile that builds up over calls          |
| **Where it shows up** | In this conversation only — the agent stops repeating questions it already asked | On later calls with the same contact, so the agent starts off knowing them |

**The two are independent.** Each has its own switch and saves separately, so turning one on or off does nothing to the other. Long calls where the agent loses track need **on-call memory**; repeat callers who shouldn't have to introduce themselves twice need **post-call memory**. Plenty of agents want both, and a simple one-shot agent needs neither.

## On-call memory

Pick the **On-Call Memory** sub-tab and turn on **State Fields** — the details the agent should track while it is talking. Nothing here is saved after the call: these values live and die with the conversation.

<Frame>
  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/on-call-mem-Light.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=910c8f609f14b54c34bd8d13610d97a8" alt="On-Call Memory with the State Fields toggle and a list of tracked fields" className="dark:hidden" width="1600" height="880" data-path="images/Memory/on-call-mem-Light.png" />

  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/on-call-mem-Dark.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=def3dd508f947ca59643d6faae125d8c" alt="On-Call Memory with the State Fields toggle and a list of tracked fields" className="hidden dark:block" width="1600" height="904" data-path="images/Memory/on-call-mem-Dark.png" />
</Frame>

List the details you want the agent to hold on to — caller name, issue type, whatever the conversation turns on — and it keeps them straight for the rest of the call, even a long one. Add each field with a **Field Name** and a **Description**:

| Field            | Description                                                                  |
| ---------------- | ---------------------------------------------------------------------------- |
| `destination`    | The exact country the student wants to study in, e.g. Canada, UK, Australia  |
| `intake`         | The intake month and year the student is targeting, e.g. September 2027      |
| `funding`        | The funding source as stated by the caller, e.g. self-funded, education loan |
| `preferred_time` | The preferred appointment time the caller asks for, e.g. 11 AM               |

<Tip>
  Write the description the way you would brief a new agent: say what the value is and give an example. The model reads it to decide what counts as a match, so "The city the caller is based in" beats "city".
</Tip>

## Post-call memory

Pick the **Post-Call Memory** sub-tab and turn on **Post-Call Memory** — *Extract and persist call data*. Once it is on, the agent reads each finished transcript and pulls out the fields you have defined, and what it finds is available on future calls with the same contact.

<Frame>
  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-overview-Light.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=010c6f187f5d32682cfcc034dad0e6ef" alt="Post-Call Memory overview explaining session fields, profile fields, and the extraction prompt" className="dark:hidden" width="1600" height="559" data-path="images/Memory/pc-overview-Light.png" />

  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-overview-Dark.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=eba6cd499dd767d5fe87f131bfa2dc97" alt="Post-Call Memory overview explaining session fields, profile fields, and the extraction prompt" className="hidden dark:block" width="1600" height="522" data-path="images/Memory/pc-overview-Dark.png" />
</Frame>

The **Overview** section counts how many fields of each kind you have defined. The three things you configure below it are the extraction prompt, the session fields, and the profile fields.

### Extraction prompt

<Frame>
  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-extraction-Light.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=f8a927996bc6bc625913e14d8dfc1f83" alt="The extraction prompt that tells the agent how to pull session and profile memory from a transcript" className="dark:hidden" width="1600" height="563" data-path="images/Memory/pc-extraction-Light.png" />

  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-extraction-Dark.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=2b588ed5774581d0f7d39912081e0383" alt="The extraction prompt that tells the agent how to pull session and profile memory from a transcript" className="hidden dark:block" width="1600" height="541" data-path="images/Memory/pc-extraction-Dark.png" />
</Frame>

The standing instruction given to the extraction model. It names the two categories — session memory for this call, profile memory to remember across calls — and sets the rule that matters most:

> Extract only what is clearly stated or strongly implied in the transcript. Do not fabricate information.

Keep that last line whatever else you change. Without it the model fills gaps with plausible guesses, and a wrong value on a contact profile is worse than a missing one. Press **Save** after editing.

### Session fields

<Frame>
  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-session-fields-Light.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=a0c0bafca40996467b6f093a581e5463" alt="Session fields listing per-call extracted data such as who the user is and what was resolved" className="dark:hidden" width="1600" height="878" data-path="images/Memory/pc-session-fields-Light.png" />

  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-session-fields-Dark.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=cda9cf26ad3a64b9cefa8f728b8682e4" alt="Session fields listing per-call extracted data such as who the user is and what was resolved" className="hidden dark:block" width="1600" height="884" data-path="images/Memory/pc-session-fields-Dark.png" />
</Frame>

Per-call data. Each call produces a fresh set, so these are the fields that describe *this conversation* rather than the person:

| Field                     | Description                                                                                             |
| ------------------------- | ------------------------------------------------------------------------------------------------------- |
| `what they wanted`        | The caller's primary goal — e.g. "wants to study MS in Canada"                                          |
| `what was resolved`       | A one-line summary of how the call concluded — e.g. "Appointment booked for Thursday 10 April at 11 AM" |
| `what remains unresolved` | Only the questions *not* collected before the call ended — e.g. "funding not collected"                 |
| `caller_type`             | Whether the caller was a student or a parent — exactly as "student" or "parent"                         |

A field that records what is still missing is worth defining early: it turns the memory record into a to-do list for the next call.

### Profile fields

<Frame>
  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-profile-fields-Light.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=e450d9d1b01c36ffdd6c02a9e4731cfe" alt="Profile fields listing persistent contact data such as name, preferred language, and city" className="dark:hidden" width="1600" height="539" data-path="images/Memory/pc-profile-fields-Light.png" />

  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-profile-fields-Dark.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=4ea77e10c8374fc576d3850682e0a980" alt="Profile fields listing persistent contact data such as name, preferred language, and city" className="hidden dark:block" width="1600" height="529" data-path="images/Memory/pc-profile-fields-Dark.png" />
</Frame>

Persistent contact data. These attach to the contact, not the call, and new values merge into the existing profile as later calls come in — so keep them to facts that stay true between conversations:

| Field                | Description                                                                   |
| -------------------- | ----------------------------------------------------------------------------- |
| `name`               | The contact's full name                                                       |
| `preferred_language` | The language the caller prefers                                               |
| `city`               | The city or state the caller is based in, used to identify the nearest branch |

<Note>
  Anything that changes call to call — mood, the reason for *this* call, what was agreed today — belongs in session fields. Putting it on the profile means each call overwrites the last one's answer.
</Note>

### Memory scope

<Frame>
  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-memory-scope-Light.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=d7d189eb1132548e0ce01dafff608a7f" alt="Memory scope options: organization-wide, this agent only, or selected agents" className="dark:hidden" width="1600" height="533" data-path="images/Memory/pc-memory-scope-Light.png" />

  <img src="https://mintcdn.com/osviai/e8Tq8Iu_12VRzY1L/images/Memory/pc-memory-scope-Dark.png?fit=max&auto=format&n=e8Tq8Iu_12VRzY1L&q=85&s=ff80a9e7f2d068cae6f5813c0e854623" alt="Memory scope options: organization-wide, this agent only, or selected agents" className="hidden dark:block" width="1600" height="527" data-path="images/Memory/pc-memory-scope-Dark.png" />
</Frame>

Controls which memories this agent can read back for a contact:

| Scope                 | What the agent sees                                      |
| --------------------- | -------------------------------------------------------- |
| **Organization-wide** | All memories across the account for the same contact.    |
| **This agent only**   | Only memories created by this agent.                     |
| **Selected agents**   | Memories from this agent plus the other agents you pick. |

Organization-wide suits a set of agents working the same customer base — a caller who gave their intake preference to the sales agent doesn't repeat it to the support agent. Narrow the scope when agents serve unrelated lines of business, or when one agent handles sensitive calls whose details shouldn't surface elsewhere. Press **Save** after changing it.

<Tip>
  Post-call memory only produces a record for calls that were answered and left a transcript. If a contact's profile looks empty, check the call actually connected before re-checking the field definitions.
</Tip>
