{% extends "base.html" %} {% from '_ui.html' import page_header, page_tabs, empty_state, id_chip %} {#- Sentence-case titles and one-line explanations per memory type; unknown types fall back to the route's display name. -#} {% set memory_pages = { 'personas': ('Personas', 'Saved personas that shape how agents describe themselves and respond.'), 'toolbox': ('Toolbox', 'Tools registered in the memory provider and available to agents.'), 'conversations': ('Conversation memory', 'Stored conversation turns across agents, memories and threads.'), 'knowledge-base': ('Knowledge base', 'Long-term knowledge entries that agents retrieve as evidence.'), 'short-term': ('Short-term memory', 'Working memory kept for active sessions.'), 'entity': ('Entity memory', 'Facts recorded about people, organizations and other entities.'), 'summaries': ('Summaries', 'Condensed summaries of earlier conversations.'), 'shared': ('Shared memory', 'Memory that several agents read and write together.'), 'cache': ('Semantic cache', 'Cached answers that agents reuse for semantically similar queries.'), } %} {% set page_info = memory_pages.get(memory_type, (memory_type_display|capitalize, None)) %} {% block title %}{{ page_info[0] }} - Memorizz{% endblock %} {% block body_attrs %} data-sidebar-scope="memory" data-sidebar-default="collapsed"{% endblock %} {% block content %} {#- Tabs switch memory types without the sidebar, which starts collapsed here. -#} {% set memory_tabs = [] %} {% for key, info in memory_pages.items() %}{% set _ = memory_tabs.append(('/memory/' ~ key, info[0]|replace(' memory', ''), key)) %}{% endfor %} {{ page_header(page_info[0], page_info[1], 'Memory', nav=page_tabs(memory_tabs, memory_type, 'Memory types')) }} {% if load_error %} {% elif view.records %} {% set records = view.records %}
Records{% if view.has_more and not total_known %}{{ records|length }}+{% else %}{{ '{:,}'.format(view.total) }}{% endif %}
Shown{{ records|length }}{% if view.has_more %} newest{% endif %}
{% if view.memory_ids %}
Memory IDs{{ view.memory_ids|length }}
{% endif %} {% if view.agent_count %}
Agents{{ view.agent_count }}
{% endif %} {% for role, count in view.roles[:3] %}
{{ role|capitalize }}{{ '{:,}'.format(count) }}
{% endfor %}
Mean size{{ '{:,}'.format(view.mean_chars) }} chars
Newest{{ view.newest or '—' }}
{% if view.series %} {% set peak = [view.series|max, 1]|max %}
Last 14 days {% for count in view.series %}{% if count %}{% set h = [20 * count / peak, 2]|max %}{{ count }}{% endif %}{% endfor %}
{% endif %}
{% if view.has_more %}

{{ records|length }} items shown, newest first{% if total_known %}, of {{ '{:,}'.format(view.total) }}{% endif %}; more records exist.{% if view.sampled %} Role, memory ID and date figures cover these newest records.{% endif %} Narrow the query through the SDK or open the provider's database view for the rest.

{% endif %}
{% if view.roles|length > 1 %}
{% for role, count in view.roles %} {% endfor %}
{% endif %} {% if view.memory_ids|length > 1 %}
{% endif %}

j k movec copy content/ filter

{% if view.show_name %}{% endif %} {% if view.show_role %}{% endif %} {% if view.show_memory %}{% endif %} {% for row in records %} {% if view.show_name %}{% endif %} {% if view.show_role %}{% endif %} {% if view.show_memory %}{% endif %} {% endfor %}
{{ page_info[0] }}, newest first. Select a row to read the full record.
RecordedNameContentRoleMemory IDSize ID
{% if row.recorded %}{{ row.recorded }}{{ row.recorded[5:16] }}{% else %}—{% endif %}{{ row.name or '—' }}{{ row.preview or '—' }}{% if row.role %}{{ row.role }}{% else %}—{% endif %}{{ row.memory_id[:14] or '—' }}{{ '{:,}'.format(row.size) if row.size else '—' }} {{ row.id[:10] or '—' }}
{% else %} {{ empty_state('Nothing stored yet', 'The connected memory provider has no ' ~ page_info[0]|lower ~ ' entries. They appear here once agents write them during runs, or after you save them with the Python SDK.') }} {% endif %} {% endblock %}