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

# Memory

> Persista dados entre conversas com tempo de vida (TTL) configurável e suporte a arquivos

## Introdução

A Memory permite armazenar variáveis que persistem entre conversas, workflows e nós. Ao contrário do Context (que está disponível apenas durante a conversa atual), a Memory mantém os dados disponíveis para interações futuras com o usuário.

## Principais características

| Característica                | Descrição                                                  |
| ----------------------------- | ---------------------------------------------------------- |
| **TTL configurável**          | Defina o tempo de vida de cada variável em segundos        |
| **Múltiplos tipos**           | Suporta primitivos, JSON e arquivos                        |
| **Armazenamento de arquivos** | Armazene imagens, vídeos, áudios e documentos de até 10 MB |
| **Métodos específicos**       | API diferenciada para cada tipo de dado                    |

## Tipos de dados

| Tipo        | Tamanho máximo | TTL         | TTL máximo           |
| ----------- | -------------- | ----------- | -------------------- |
| **String**  | 255 caracteres | Opcional    | -                    |
| **Number**  | 15 dígitos     | Opcional    | -                    |
| **Boolean** | -              | Opcional    | -                    |
| **JSON**    | 15 KB          | Obrigatório | 86.400 s (1 dia)     |
| **File**    | 10 MB          | Obrigatório | 604.800 s (1 semana) |

<Note>
  **TTL (Time To Live):** Tempo de vida em segundos. Quando o TTL expira, a variável é automaticamente excluída. Por exemplo, `3600` = 1 hora, `86400` = 1 dia.
</Note>

## Salvando variáveis

### Usando o nó Variable

Para salvar variáveis sem código, use o nó **Variable** dentro da seção `Logic`. Em `Variable` insira o nome e em `Value` o que deseja salvar; pode ser texto simples, outra variável ou um valor do contexto.

```md theme={null}
Variable: name
Value: {{$user.names}}
```

<Tip>
  O nó Variable é ideal para salvar primitivos (string, number, boolean) de forma rápida e visual.
</Tip>

<Note>
  Cada nó Variable permite um máximo de **20 variáveis**. Se precisar de mais, use múltiplos nós ou salve os valores a partir de um nó de código.
</Note>

### Usando nós de código

Para maior controle sobre o TTL e tipos de dados complexos, use os métodos `$memory` em nós de código:

```javascript theme={null}
// Primitives (string, number, boolean) - TTL optional
$memory.set('name', 'John')
$memory.set('attempts', 3)
$memory.set('verified', true)

// Primitive with TTL (expires in 1 hour)
$memory.set('temporaryCode', 'ABC123', 3600)

// JSON - TTL required (maximum 1 day)
$memory.setJson('preferences', {
  language: 'en',
  notifications: true
}, 86400)

// File - async, TTL required, MIME required (maximum 1 week)
await $memory.setFile('receipt', base64String, 604800, 'application/pdf')
```

## Lendo variáveis

### Em qualquer nó

Dentro de qualquer nó você pode acessar a Memory com a sintaxe `{{$memory.variableName}}`. Por exemplo, se as variáveis na memória forem:

```json theme={null}
{
  "name": "John",
  "lastOrder": { "id": "ORD-123", "status": "on the way" }
}
```

Então:

* `{{$memory.name}}` mostra `John`
* `{{$memory.lastOrder.status}}` mostra `on the way`

### Em nós de código

Use os métodos específicos de acordo com o tipo de dado:

```javascript theme={null}
// Primitives
const name = $memory.get('name')
const name = $memory.get('name', 'Guest') // with default value

// JSON
const prefs = $memory.getJson('preferences')
const prefs = $memory.getJson('preferences', {}) // with default value

// Files - returns FileHandle
const file = $memory.getFile('receipt')
```

## Trabalhando com arquivos

Ao salvar um arquivo na Memory, você deve fornecer o conteúdo em base64, o TTL e o tipo MIME:

```javascript theme={null}
// Save a file
await $memory.setFile('document', base64Content, 604800, 'application/pdf')
```

Ao ler um arquivo com `$memory.getFile()` você obtém um **FileHandle** com três métodos para acessar o conteúdo:

| Método        | Descrição                         | Assíncrono |
| ------------- | --------------------------------- | ---------- |
| `.toUrl()`    | URL temporária para download (S3) | Não        |
| `.toBase64()` | Conteúdo como string base-64      | Sim        |
| `.toRaw()`    | Buffer / Uint8Array               | Sim        |

```javascript theme={null}
// Get temporary URL
const url = $memory.getFile('receipt').toUrl()

// Get content in base64
const base64 = await $memory.getFile('receipt').toBase64()

// Get file content
const content = await $memory.getFile('receipt').toRaw()
```

### Tipos MIME permitidos

| Categoria      | Tipos MIME                                                              |
| -------------- | ----------------------------------------------------------------------- |
| **Texto**      | `text/plain`                                                            |
| **JSON**       | `application/json`                                                      |
| **XML**        | `application/xml`, `text/xml`                                           |
| **Imagens**    | `image/jpeg`, `image/png`, `image/gif`                                  |
| **Vídeos**     | `video/mp4`, `video/ogg`, `video/webm`, `video/x-msvideo`, `video/mpeg` |
| **Áudios**     | `audio/mpeg`, `audio/wav`, `audio/ogg`, `audio/aac`, `audio/flac`       |
| **Documentos** | `application/pdf`                                                       |

<Warning>
  Os métodos `$memory.setFile()`, `$memory.getFile().toBase64()` e `$memory.getFile().toRaw()` são **assíncronos**. Você deve usar `await` ao chamá-los.
</Warning>

## Excluindo variáveis

Você pode excluir variáveis antes que seu TTL expire:

```javascript theme={null}
// Delete a variable
$memory.delete('temporary')

// Delete multiple variables
$memory.delete(['cache', 'session', 'temporary'])
```

## Segurança

<Warning>
  **Não armazene dados sensíveis na Memory:**

  * Senhas ou números de cartão de crédito
  * Tokens de autenticação de longa duração
  * Informações de identificação pessoal (PII) altamente sensíveis

  Para persistência de longo prazo, use o **[Datum](/pt/guias/nodos/datum)**.
</Warning>
