{% extends "admin/_layout.html" %} {% from "_macros.html" import icon %} {% set section = "general" %} {% block title %}{{ t("General") }} - {{ brand.name }}{% endblock %} {% block heading %}{{ t("General") }}{% endblock %} {% block admin_content %}

{{ t("Instance-wide settings. These are stored in the database and take effect immediately — no restart, and they survive one.") }}

{% if saved %}
{{ icon("check", "icon--sm") }} {{ said or t("Settings saved.") }}
{% endif %} {% if error %}
{{ icon("warning", "alert__icon") }} {{ error }}
{% endif %}
{#- The one piece of instance customization: the name, because device logins and the discovery document show it. -#}

{{ t("Instance name") }}

{{ t("What a device asked to sign in here is told it is signing in to, and what the LLeMbas CLI names this connection after. Empty is LLeMbas.") }}

{#- What prices are in (services/pricing.py). Per connection later. -#}

{{ t("Prices") }}

{{ t("What a new connection starts in, and what speech and picture prices are typed in. Each connection has its own currency for its models' prices (Connections). A reply keeps the currency it was priced in.") }}

{#- An instance that is only an API front. The gate is services/instance_mode.py. -#}

{{ t("Instance mode") }}

{{ t("API only switches off chats, agent chats, scheduled tasks and the MCP server; the API, device sign-in, Settings and Admin keep working.") }}

{{ t("Personalization") }}

{{ t("Each person then chooses for themselves, under Settings → Account: how they want to be helped, and a personality (concise, pragmatic, optimistic, funny, formal, Socratic, or their own words). It applies to every model, after the system prompt. Nothing is sent for anybody who has not chosen.") }}

{{ t("Language") }}

{{ t("What the interface is in for anybody who has not chosen for themselves. Everyone can pick their own under Appearance in their settings, and that choice wins here.") }}

{{ tm("This is the interface only. Models answer in whatever language you write to them in, which is a line you can edit under Prompts.") }}

{{ t("Default system prompt") }}

{{ t("Applied to every chat that does not have a prompt of its own. A model's prompt overrides this, and a chat's prompt overrides both — most specific wins outright rather than the three being stacked together.") }}

{{ t("Leave empty to send no system prompt at all.") }}

{{ t("Compaction") }}

{{ t("A long conversation eventually fills the model's context. When it gets close, the earlier turns are summarised and the summary is sent in their place. The messages themselves are kept and stay readable in the transcript — they simply stop being sent.") }}

{{ tm('Percent of the model\'s context length. 0 turns automatic compaction off; the button in each chat still works. Nothing happens for a model whose context length is unset under Models — that is "unknown", not "small", and this will not act on a number nobody supplied. The wording of the summary is under Prompts.') }}

{{ t("Tool calls in an ordinary chat") }}

{{ t("A model ends its own turn the moment it stops asking for tools — that is it saying it has what it needs, and nothing here overrides it. This is a ceiling for the case where it never says so.") }}

{{ tm("Several tools can be called in one round, so this is not a count of tools. Leave room for at least two: search finds a passage and read reads the file around it, so a ceiling of one leaves files searchable and not readable. 0 means no ceiling, which is how an agent chat already works — those are bounded under Agents by time and tokens instead.") }}

{{ t("Temporary chats") }}

{{ t("A temporary chat is not listed in the sidebar, may read files and memories but cannot change anything — no files, memories, skills or schedules — and is deleted when its time is up. Keep this chat turns one into an ordinary chat.") }}

{{ t("Minutes after its last message, up to 1440 (a day). 0 deletes it a minute after the person leaves it; one left open in a tab that was closed without saying so goes ten minutes after its last message.") }}

{#- Their own forms, after the big one rather than inside it: a form inside a form truncates the outer one (api/admin_brand.py). -#}

{{ t("Logo") }}

{{ t("Shown where the instance's name is: the sidebar, the sign-in page, the empty pages. A PNG, JPEG or WebP of at most 512 KB, square looks best. The themes stay as they are.") }}

{% if values.logo_blob_hash %} {% endif %}
{% if values.logo_blob_hash %}
{% endif %}
{% include "admin/_python_card.html" %}

{{ t("Notifications when LLeMbas is closed") }}

{{ t("A browser's push goes through its maker's relay — Google's, Mozilla's or Apple's — so they learn that this server sent something, and when. What is sent says only that something is waiting, never what. Off, people still get notified while a LLeMbas page is open, and the apps are not affected.") }}

{% endblock %}