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

{{ icon("chevron-left", "icon--sm") }} {{ t("All data groups") }} {% if owner %}· {{ t("A personal group of %(who)s.", who=owner.email) }}{% endif %}

{% if saved %}
{{ icon("check", "icon--sm") }} {{ t("Settings saved.") }}
{% endif %} {% if error %}
{{ icon("warning", "alert__icon") }} {{ error }}
{% endif %} {# The delete form is declared before the main one and reached by `form=`, so it can never end up nested inside it -- a nested
truncates its parent, the 1.3.0 bug that made a whole admin page unsaveable. #}

{{ t("Name") }}

{% if not owner %}

{{ t("Connections in this group") }}

{{ t("Their models read this group's data and nothing else. A connection taken out of a group goes back to the default one. Moving a connection moves no data: it starts reading the other group's.") }}

{% for connection in connections %} {% else %}

{{ t("There are no connections yet.") }}

{% endfor %} {% if group.is_default %}

{{ t("A connection leaves the default group by being put into another one.") }}

{% endif %}
{% endif %}

{{ t("Services that read this group") }}

{{ t("The embedder is sent the full text of every document, note, skill and report it indexes, and the reviewer is sent every generated picture with its prompt. A group can name its own, so its data does not have to go to the instance's.") }}

{{ t("Changing it leaves this group's search keyword-only until the index is rebuilt on the Extraction page.") }}

{{ t("Only models that can see images are listed.") }}

{% if not group.is_default %} {% endif %}

{{ t("Where this group's data goes") }}

{{ t("Every provider this group's data is sent to, as the instance has it set. A person holding “Manage their own data groups” may have arranged their own differently. Speech to text and text to speech are not grouped: audio is sent and not kept.") }}

{% if exits %} {# Rows rather than a table, so a phone gets a stack instead of a sideways scroll -- the same list-row pattern as every other admin list. #}
{% for exit in exits %}
{{ labels.get(exit.what, exit.what) }} {%- if exit.model %}{{ exit.model }} · {% endif %}{{ exit.connection -}}
{% if exit.elsewhere %} {{ t("its connection is in %(group)s", group=exit.elsewhere) }} {% endif %}
{% endfor %}
{% else %}

{{ t("Nothing: no connection is in this group, and no service reads it.") }}

{% endif %}

{{ t("Holds") }}: {% for label, n in counts.items() %}{{ n }} {{ labels.get(label, label) }}{% if not loop.last %}, {% endif %}{% endfor %}.

{% endblock %}