{{ ui_lang.catalog_heading|default('Catalog') }}

{{ ui_lang.catalog_lede_1|default('Find') }} {{ ui_lang.catalog_lede_what|default('what to review') }} {{ ui_lang.catalog_lede_2|default('by similarity. Build an embedding index over your items, search for traces like a given query or example, and save') }} {{ ui_lang.catalog_lede_slices|default('dynamic slices') }} {{ ui_lang.catalog_lede_3|default('— semantic + metadata filters that auto-include new matching traces and can be curated into a dataset.') }}

{% if not embeddings_available %}
{{ ui_lang.catalog_embeddings_warn_1|default('Embeddings are unavailable — install') }} sentence-transformers {{ ui_lang.catalog_embeddings_warn_2|default('(or configure an embedder) to build the index.') }}
{% endif %}

{{ ui_lang.catalog_index_heading|default('Index') }}

{{ indexed }} {{ ui_lang.catalog_items_indexed|default('item(s) indexed') }}

{{ ui_lang.catalog_search_heading|default('Similarity search') }}

{{ ui_lang.catalog_discover_heading|default('Discover failure modes') }}

{{ ui_lang.catalog_discover_desc|default('Cluster the indexed traces and let the judge propose a candidate failure-mode label per cluster (a project-specific taxonomy you then confirm or edit).') }}

{{ ui_lang.catalog_topics_heading|default('Topics') }}

{{ ui_lang.catalog_topics_desc|default('Persisted pattern groups: refresh re-clusters the indexed traces into named topics (LLM-suggested names when a judge is configured), and newly ingested traces are auto-assigned to the nearest topic. Curate any topic into a dataset.') }}

{% if topics %} {% for t in topics %} {% endfor %}
{{ ui_lang.catalog_th_topic|default('Topic') }}{{ ui_lang.catalog_th_description|default('Description') }}{{ ui_lang.catalog_th_size|default('Size') }}{{ ui_lang.catalog_th_actions|default('Actions') }}
{{ t.name }} {{ t.description }} {{ t.size }}
{% else %}

{{ ui_lang.catalog_no_topics|default('No topics yet — refresh to discover them.') }}

{% endif %}

{{ ui_lang.catalog_slices_heading|default('Dynamic slices') }}

{% if slices %} {% for s in slices %} {% endfor %}
{{ ui_lang.catalog_th_slice|default('Slice') }}{{ ui_lang.catalog_th_query_anchor|default('Query / anchor') }}{{ ui_lang.catalog_th_threshold|default('Threshold') }}{{ ui_lang.catalog_th_actions|default('Actions') }}
{{ s.name }} {{ s.query or s.anchor_id or ui_lang.catalog_all_placeholder|default('(all)') }} {{ '%.2f'|format(s.threshold) }}
{% else %}

{{ ui_lang.catalog_no_slices|default('No slices saved yet.') }}

{% endif %}