{% 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.

Timezone

What time a model is told it is, and the zone anything you schedule runs in. Leave it unset to follow the server.

{# A plain form posting to its own route, not the composer's pattern: this page has no htmx target to swap into and a redirect back is what stops a refresh re-submitting it. #}
{% if saved == "timezone" %}

Saved. It is {{ local_now }} where you are.

{% elif error == "timezone" %}

That is not a timezone this server knows about.

{% else %}

It is currently {{ local_now }} where you are.

{% endif %}

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 %}