{% from "_macros.html" import icon %} {# The reply has stopped and is waiting for you. Two shapes, one mechanism: questions the model asked, and (later) a command waiting to be allowed. Everything shown here is model output and is escaped accordingly -- the questions, the options on the buttons and the command itself all came from a model that may have been reading somebody else's file a moment ago. Deliberately attributed to the model rather than styled as if LLeMbas were asking. A question that looks like it came from the application is a question people answer with things they would not tell a chatbot. Several questions go on ONE card and come back in ONE submit. Asking them one at a time would cost a round trip and an interruption each, and answering the third would mean having forgotten the first. hx-swap="none" because the SSE stream clears this card the moment the answer lands; swapping a response in here would fight it. #}

{{ icon("sparkle", "icon--sm") }} The model is asking you

{% if ask.kind == "question" %} {% for item in ask.items %}
{{ item.title }} {% if item.options %}
{% for option in item.options %} {% endfor %}
{% endif %} {% if item.allow_free_text %} {# Never type="password". A model talked into asking for a credential must not be handed a field that looks built for one, and a chat transcript is not a place to keep secrets. #} {% endif %}
{% endfor %}
{%- if ask.items | length > 1 %}All of them at once. {% endif -%} Leave any blank to skip it.
{% else %} {% for item in ask.items %}

{{ item.title }}

{% if item.purpose %} {# The model's own account of what this is for, above the thing itself. Deliberately separate from `reason` below, which is *our* reason for stopping — attributed, so nobody reads an explanation the model wrote as the application vouching for the command. #}

It says: {{ item.purpose }}

{% endif %} {% if item.detail %}
{{ item.detail }}
{% endif %} {% if item.reason %}

{{ item.reason }}

{% endif %}
{% endfor %}
{% endif %}