{{ turn.role }}
-
{% for item in turn.citations %}{{ m.citation(item) }}{% endfor %}
{# Asking, and the conversation so far. Two rendering paths meet on this page and both are covered: * The **stored** turns below are rendered by Jinja, which autoescapes. They are model output over documents somebody else wrote, so that is load-bearing rather than hygienic. * The **live** answer arrives over SSE and is written by `manicule.js` through `textContent`, never as markup — the same rule the embeddable widget is written under, and asserted the same way against what the route actually served. The profile select and the feedback buttons post JSON to the API's own routes. There is no ask endpoint of this surface's own: the answer path, its telemetry and its tenancy check are the service's, and a second one would be a second set of guarantees. #}{% extends layout %} {% import "macros.html" as m %} {% block content %}
{{ turn.role }}
assistant