{#- chirp-ui: Parameter override controls Tri-state per-parameter override for AI chat/agent params. Each param either inherits a model/agent default (value = null/absent) or carries a custom override. Pairs with config_schema.project_fields for the inner control. Usage: {% from "chirpui/param_override.html" import param_field, advanced_params, scope_indicator %} {% call advanced_params() %} {{ param_field("temperature", value=0.9, default=0.7, widget="range", min=0, max=2, step=0.1, label="Temperature") }} {{ param_field("model", value=none, default="gpt-4o", widget="select", choices=models, label="Model", locked=true, locked_reason="Set by your workspace admin") }} {% end %} -#} {# One overridable parameter. value=none -> inherit default; any value -> custom. locked=true renders the control disabled with a lock badge + reason tooltip. #} {% def param_field(name, value=none, default=none, widget="text", label=none, choices=none, min=0, max=100, step=1, errors=none, hint=none, locked=false, locked_reason="") %} {% set _label = label if label is not none else name %} {% set _overridden = value is not none %}
{{ _label }} {% if locked %} {% from "chirpui/badge.html" import badge %} {% from "chirpui/tooltip.html" import tooltip %} {% call tooltip(locked_reason or "Locked", position="left") %} {{ badge("Locked", variant="muted", icon="lock") }} {% end %} {% end %}
{% from "chirpui/forms.html" import text_field, select_field, range_field, toggle_field %} {% if widget == "select" %} {{ select_field(name, options=(choices or []), selected=(value or default), label=none, errors=errors) }} {% elif widget == "range" %} {{ range_field(name, value=(value if value is not none else default), min=min, max=max, step=step, label=none, errors=errors, show_value=true) }} {% elif widget == "toggle" %} {{ toggle_field(name, checked=(value if value is not none else default), label=none, errors=errors) }} {% else %} {{ text_field(name, value=(value if value is not none else default), label=none, errors=errors) }} {% end %}
{% if hint %}{{ hint }}{% end %}
{% end %} {# Collapsible advanced-parameters disclosure. Wrap param_field calls. #} {% def advanced_params(label="Advanced parameters", open=false, cls="") %}
{{ label }}
{% slot %}
{% end %} {# Scope indicator — communicates whether a value is inherited or overridden. scope: "default" | "override". source labels the origin (e.g. "model", "chat"). #} {% def scope_indicator(scope="default", source="", cls="") %} {% set _override = scope == "override" %} {% if _override %} Overridden{% if source %} for this {{ source }}{% end %} {% else %} Using {{ source or "model" }} default {% end %} {% end %}