{% extends "base.html" %} {% from "_macros.html" import icon, model_avatar %} {% block title %}Your settings - LLeMbas{% endblock %} {% block head %} {% endblock %} {% block body_attrs %} data-authenticated="true"{% endblock %} {% block body %}
{% include "partials/sidebar.html" %}

Your settings

{# Tabs are radio inputs plus sibling selectors: no JavaScript, and the chosen tab survives a re-render because the browser keeps the checked state. Each panel is a real fragment of the page, not a fetch. #}
{% if audio.stt_enabled or audio.tts_enabled %} {% endif %} {% if can.get("library.use") %} {% endif %}
{% if error %} {% endif %} {% if saved %}
{{ icon("check", "icon--sm") }} {{ saved }}
{% endif %} {# --- Account --- #}

Account

Name
{{ user.name }}
Email
{{ user.email }}
Role
{{ user.role }}
Groups
{% if user.groups %} {% for group in user.groups %}{{ group.name }} {% endfor %} {% else %} None {% endif %}

What you can do

{% if user.is_admin %} You are an administrator, so every permission applies. {% else %} From the instance baseline plus whatever your groups add. {% endif %}

    {% for key, granted in can.items() %}
  • {{ icon("check" if granted else "x", "icon--sm") }} {{ key }}
  • {% endfor %}
{# --- Models --- #}

Default model

What a new chat starts with. Existing chats keep their model.

{% if models %}
{% else %}

No models are available to you yet.

{% endif %}
{% if models %}

Available to you

In the order an administrator arranged them.

    {% for model in models %}
  • {{ model_avatar(model, cls="nav-item__avatar") }}
    {{ model.label }} {% if model.description %}
    {{ model.description }}
    {% endif %}
    {% for name, on in (model.capabilities_json or {}).items() %} {% if on %}{{ name }}{% endif %} {% endfor %} {% if model.pinned %}pinned{% endif %}
  • {% endfor %}
{% endif %}
{# --- Appearance --- #}

Theme

Saved to this browser and to your account, so it follows you.

Install as an app

Runs in its own window, without browser chrome. Everything still comes from your server — there is no offline mode beyond a page saying so.

{# Revealed by app.js only when the browser actually offers an install. Firefox and desktop Safari never do, and a button that does nothing is worse than no button. #}

Only offered over HTTPS or on localhost, and not at all in some browsers. On iOS, use Share → Add to Home Screen.

{# --- Audio --- #} {% if audio.stt_enabled or audio.tts_enabled %}
{% if audio.tts_enabled %}

Reading replies aloud

Overrides what the administrator chose, for you only.

{# Options are fetched from the speech endpoint rather than stored, so the list follows the server. #}

{% if voice_error %} The voice list could not be read: {{ voice_error }} {% else %} {{ voices | length }} available. {% endif %}

Leave empty to use the instance default.

Only replies that arrive while you are looking at the chat.

{% endif %} {% if audio.stt_enabled %}

Dictation

An ISO code such as en or sk. Empty lets the server work it out, which is usually best.

The microphone needs HTTPS or localhost — browsers do not grant it over plain HTTP.

{% endif %}
{% endif %} {# --- Memory --- #} {% if can.get("library.use") %}

What models remember about you {{ memories|length }}

Short facts, shown to every model you talk to on every turn — so they are few and short on purpose. Anything longer belongs in a note. Nothing here is shared with anyone else, ever.

{% if memories %}
    {% for memory in memories %}
  • {% if memory.author == "model" %} remembered {% endif %}
  • {% endfor %}
{% else %}

Nothing yet. A model with the memory tool adds to this when you tell it something worth keeping.

{% endif %}

Add one

One fact per record, at most {{ memory_limit }} characters. Never put a password or a key here — it is sent to the model with every message.

{% endif %} {# --- Security --- #}

Change password

Every other session is signed out when the password changes. You stay signed in here.

At least 8 characters.

Session

{% endblock %}