Reading the answer instead of asking somebody to know it
llama-server publishes the loaded model's Jinja chat template on /props, and
that template is the very thing that rejects a reasoning effort it does not
recognise -- so the accepted set is written down, authoritatively, in a place
this application can simply read. There is a button on the model's page that
does.
The parser handles both shapes a template uses: the values inline in the test
that rejects them (Bonsai), and a named list set elsewhere with nothing near
the mention spelling them out (gpt-oss). It is deliberately conservative,
because a wrong answer here silently removes a level somebody is entitled to:
only known efforts count, an unrelated list of quoted strings is ignored, and a
single match is read as a default -- `{%- set reasoning_effort = 'medium' %}`
-- rather than as a vocabulary of one.
An endpoint with no such route says so. OpenAI and vLLM do not publish a
template, and "this cannot tell us" must not be recorded as "this model accepts
nothing".
/props sits at the server root, beside the OpenAI-compatible surface rather
than inside it, so a base URL written as .../v1 needs the suffix stripped.
Getting that wrong is a silent 404 that looks like detection simply not
working, so there is a test on it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -115,6 +115,31 @@
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if detected %}
|
||||
<div class="alert alert--{{ 'success' if detected == 'success' else 'warning' }}"
|
||||
role="status">
|
||||
{{ icon('sparkle' if detected == 'success' else 'warning', 'alert__icon') }}
|
||||
<span>{{ detected_message }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{#
|
||||
Reading the answer rather than asking somebody to know it. llama-server
|
||||
publishes the loaded model's Jinja chat template on `/props`, and that
|
||||
template is the thing that rejects an effort it does not recognise --
|
||||
so the accepted set is written down in the one authoritative place.
|
||||
Endpoints without that route (OpenAI, vLLM) say so rather than
|
||||
pretending the model accepts nothing.
|
||||
|
||||
Its own form, because this page's main form is a PUT of everything and
|
||||
a detect must not carry half-edited fields with it.
|
||||
#}
|
||||
<form method="post" action="/admin/models/{{ model.id }}/detect-efforts">
|
||||
<button class="btn btn--sm" type="submit">
|
||||
{{ icon('search', 'icon--sm') }} Detect from the endpoint
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<p class="field__hint">
|
||||
The vocabulary is <strong>not the same for every model</strong>, and
|
||||
sending one a model does not know is not ignored — it is rendered into
|
||||
|
||||
Reference in New Issue
Block a user