{{ t('interview.engine') }}

{% if engine.refusal %}

{{ t('interview.refused_' + engine.refusal.replace('-', '_'), detail=engine.refusal_names) }}

{% if engine.refusal_names %}

{{ engine.refusal_names }}

{% endif %}
{% else %}
{{ t('interview.provider') }}
{{ engine.settings.provider or t('interview.unset') }}
{{ t('interview.model') }}
{{ engine.settings.model or t('interview.unset') }}
{{ t('interview.endpoint') }}
{{ engine.settings.base_url or t('interview.unset') }}
{{ t('interview.rate') }}
{% if engine.rate %}{{ t('interview.rate_value', input='%.2f'|format(engine.rate[0]), output='%.2f'|format(engine.rate[1])) }}{% else %}{{ t('interview.no_price') }}{% endif %}
{% if engine.block_size %}
{{ t('interview.context') }}
{{ t('interview.context_value', count=engine.block_size) }}
{# The failure this warns about is silent, which is the only reason it is worth a line here. A runtime with a smaller window truncates the block and answers fluently with part of the skill gone, and the skill is the guardrails. Measured on Ollama, docs/smoke.md. #}
{{ t('interview.context_truncation') }}
{% endif %} {% if engine.estimate %} {# A range, two decimals, and the sentence that says where it comes from. Shown only with a rate and a block: the hub sizes the block, the interview screen does not, and neither shows a figure it cannot back. #}
{{ t('interview.estimate') }}
{{ t('interview.estimate_value', low='%.2f'|format(engine.estimate[0]), high='%.2f'|format(engine.estimate[1])) }}
{{ t('interview.estimate_hint', ratio=engine.ratio) }}
{% endif %}
{% if engine.block_error %} {# A skill citing a file that is not in the tree. `check.sh` fails on it, so a shipped bundle cannot reach here; the raw text stays because whoever does reach it is editing the bundle and needs the path. #}

{{ t('interview.bundle_broken') }}

{{ engine.block_error }}

{% endif %} {% if engine.gaps %}
{% endif %} {% endif %}