tidying stuff up, dto for search

This commit is contained in:
Per Stark
2025-12-20 22:30:31 +01:00
parent a5bc72aedf
commit 79ea007b0a
23 changed files with 936 additions and 73 deletions

View File

@@ -36,9 +36,12 @@
<div id="system_prompt_section" class="nb-panel p-4">
<div class="text-sm font-semibold mb-3">System Prompts</div>
<div class="flex gap-2 flex-col sm:flex-row">
<button type="button" class="nb-btn btn-sm" hx-get="/edit-query-prompt" hx-target="#modal" hx-swap="innerHTML">Edit Query Prompt</button>
<button type="button" class="nb-btn btn-sm" hx-get="/edit-ingestion-prompt" hx-target="#modal" hx-swap="innerHTML">Edit Ingestion Prompt</button>
<button type="button" class="nb-btn btn-sm" hx-get="/edit-image-prompt" hx-target="#modal" hx-swap="innerHTML">Edit Image Prompt</button>
<button type="button" class="nb-btn btn-sm" hx-get="/edit-query-prompt" hx-target="#modal"
hx-swap="innerHTML">Edit Query Prompt</button>
<button type="button" class="nb-btn btn-sm" hx-get="/edit-ingestion-prompt" hx-target="#modal"
hx-swap="innerHTML">Edit Ingestion Prompt</button>
<button type="button" class="nb-btn btn-sm" hx-get="/edit-image-prompt" hx-target="#modal"
hx-swap="innerHTML">Edit Image Prompt</button>
</div>
</div>
{% endblock %}
@@ -52,7 +55,8 @@
<div class="text-sm opacity-80 mb-1">Query Model</div>
<select name="query_model" class="nb-select w-full">
{% for model in available_models.data %}
<option value="{{model.id}}" {% if settings.query_model==model.id %} selected {% endif %}>{{model.id}}</option>
<option value="{{model.id}}" {% if settings.query_model==model.id %} selected {% endif %}>{{model.id}}
</option>
{% endfor %}
</select>
<p class="text-xs opacity-70 mt-1">Current: <span class="font-mono">{{settings.query_model}}</span></p>
@@ -63,7 +67,8 @@
<div class="text-sm opacity-80 mb-1">Processing Model</div>
<select name="processing_model" class="nb-select w-full">
{% for model in available_models.data %}
<option value="{{model.id}}" {% if settings.processing_model==model.id %} selected {% endif %}>{{model.id}}</option>
<option value="{{model.id}}" {% if settings.processing_model==model.id %} selected {% endif %}>
{{model.id}}</option>
{% endfor %}
</select>
<p class="text-xs opacity-70 mt-1">Current: <span class="font-mono">{{settings.processing_model}}</span></p>
@@ -74,10 +79,12 @@
<div class="text-sm opacity-80 mb-1">Image Processing Model</div>
<select name="image_processing_model" class="nb-select w-full">
{% for model in available_models.data %}
<option value="{{model.id}}" {% if settings.image_processing_model==model.id %} selected {% endif %}>{{model.id}}</option>
<option value="{{model.id}}" {% if settings.image_processing_model==model.id %} selected {% endif %}>
{{model.id}}</option>
{% endfor %}
</select>
<p class="text-xs opacity-70 mt-1">Current: <span class="font-mono">{{settings.image_processing_model}}</span></p>
<p class="text-xs opacity-70 mt-1">Current: <span
class="font-mono">{{settings.image_processing_model}}</span></p>
</div>
<!-- Voice Processing Model -->
@@ -85,39 +92,66 @@
<div class="text-sm opacity-80 mb-1">Voice Processing Model</div>
<select name="voice_processing_model" class="nb-select w-full">
{% for model in available_models.data %}
<option value="{{model.id}}" {% if settings.voice_processing_model==model.id %} selected {% endif %}>{{model.id}}</option>
<option value="{{model.id}}" {% if settings.voice_processing_model==model.id %} selected {% endif %}>
{{model.id}}</option>
{% endfor %}
</select>
<p class="text-xs opacity-70 mt-1">Current: <span class="font-mono">{{settings.voice_processing_model}}</span></p>
<p class="text-xs opacity-70 mt-1">Current: <span
class="font-mono">{{settings.voice_processing_model}}</span></p>
</div>
<!-- Embedding Model -->
<div>
<div class="text-sm opacity-80 mb-1">Embedding Model</div>
{% if settings.embedding_backend == "fastembed" or settings.embedding_backend == "hashed" %}
<input type="text" name="embedding_model" class="nb-input w-full opacity-60 cursor-not-allowed"
value="{{settings.embedding_model}}" disabled />
<p class="text-xs opacity-70 mt-1">Model: <span class="font-mono">{{settings.embedding_model}}
({{settings.embedding_dimensions}} dims)</span></p>
<p class="text-xs text-info mt-1"> Embedding model is controlled by config when using <span
class="font-mono">{{settings.embedding_backend}}</span> backend.</p>
{% else %}
<select name="embedding_model" class="nb-select w-full">
{% for model in available_models.data %}
<option value="{{model.id}}" {% if settings.embedding_model==model.id %} selected {% endif %}>{{model.id}}</option>
<option value="{{model.id}}" {% if settings.embedding_model==model.id %} selected {% endif %}>{{model.id}}
</option>
{% endfor %}
</select>
<p class="text-xs opacity-70 mt-1">Current: <span class="font-mono">{{settings.embedding_model}} ({{settings.embedding_dimensions}} dims)</span></p>
<p class="text-xs opacity-70 mt-1">Current: <span class="font-mono">{{settings.embedding_model}}
({{settings.embedding_dimensions}} dims)</span></p>
{% endif %}
</div>
<!-- Embedding Dimensions -->
<div>
<div class="text-sm opacity-80 mb-1" for="embedding_dimensions">Embedding Dimensions</div>
<input type="number" id="embedding_dimensions" name="embedding_dimensions" class="nb-input w-full" value="{{ settings.embedding_dimensions }}" required />
{% if settings.embedding_backend == "fastembed" or settings.embedding_backend == "hashed" %}
<input type="number" id="embedding_dimensions" name="embedding_dimensions"
class="nb-input w-full opacity-60 cursor-not-allowed" value="{{ settings.embedding_dimensions }}"
disabled />
<p class="text-xs text-info mt-1"> Dimensions are fixed for <span
class="font-mono">{{settings.embedding_backend}}</span> backend. Set <span
class="font-mono">EMBEDDING_BACKEND=openai</span> to use OpenAI embeddings.</p>
{% else %}
<input type="number" id="embedding_dimensions" name="embedding_dimensions" class="nb-input w-full"
value="{{ settings.embedding_dimensions }}" required />
{% endif %}
</div>
<!-- Alert -->
{% if settings.embedding_backend != "fastembed" and settings.embedding_backend != "hashed" %}
<div id="embedding-change-alert" class="nb-panel p-3 bg-warning/20 hidden">
<div class="text-sm"><strong>Warning:</strong> Changing dimensions will require re-creating all embeddings. Look up your model's required dimensions or use a model that allows specifying them.</div>
<div class="text-sm"><strong>Warning:</strong> Changing dimensions will require re-creating all embeddings.
Look up your model's required dimensions or use a model that allows specifying them.</div>
</div>
{% endif %}
<div class="flex justify-end">
<button type="submit" class="nb-btn nb-cta btn-sm">Save Model Settings</button>
</div>
</form>
{% if settings.embedding_backend != "fastembed" and settings.embedding_backend != "hashed" %}
<script>
// Rebind after HTMX swaps
(() => {
@@ -135,6 +169,7 @@
}
})();
</script>
{% endif %}
{% endblock %}
</div>
@@ -143,7 +178,8 @@
<label class="flex items-center gap-3">
{% block registration_status_input %}
<form hx-patch="/toggle-registrations" hx-swap="outerHTML" hx-trigger="change">
<input name="registration_open" type="checkbox" class="nb-checkbox" {% if settings.registrations_enabled %}checked{% endif %} />
<input name="registration_open" type="checkbox" class="nb-checkbox" {% if settings.registrations_enabled
%}checked{% endif %} />
</form>
{% endblock %}
<span class="text-sm">Enable Registrations</span>
@@ -153,4 +189,4 @@
</section>
</div>
</div>
{% endblock %}
{% endblock %}