Remove intent model entirely; quick-capture uses primary model

The separate intent model (OLLAMA_INTENT_MODEL / qwen2.5:7b) is removed
from every part of the system. All classification now uses the primary model.

Changes:
- config.py: remove OLLAMA_INTENT_MODEL
- intent.py: remove classify_intent() and all supporting infrastructure
  (_SYSTEM_PROMPT_TEMPLATE, _RESEARCH_PREFIX, _PRIOR_WORK_REFS); file now
  only contains the quick-capture classifier
- quick_capture.py: classify_capture_intent() now called with Config.OLLAMA_MODEL
- generation_task.py: remove intent_model_setting DB lookup and get_setting import;
  history summarization and research pipeline use the primary model directly
- research.py: remove intent_model parameter from run_research_pipeline() and
  _generate_sub_queries(); both use the model param throughout
- routes/settings.py: remove intent_model from model-key validation and response
- app.py: remove intent model pre-warming at startup
- SettingsView.vue: remove Intent Model selector and related refs/state

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-02 18:41:49 -05:00
parent 53e54ea761
commit 3d7be5888e
8 changed files with 26 additions and 223 deletions
+1 -14
View File
@@ -10,10 +10,8 @@ const authStore = useAuthStore();
const toastStore = useToastStore();
const assistantName = ref("");
const defaultModel = ref("");
const intentModel = ref("");
const installedModels = ref<string[]>([]);
const defaultChatModel = ref("");
const defaultIntentModel = ref("");
const newEmail = ref("");
const emailPassword = ref("");
const changingEmail = ref(false);
@@ -80,10 +78,9 @@ onMounted(async () => {
// Load installed models and configured defaults
try {
const modelsData = await apiGet<{ models: string[]; default_chat_model: string; default_intent_model: string }>("/api/settings/models");
const modelsData = await apiGet<{ models: string[]; default_chat_model: string }>("/api/settings/models");
installedModels.value = modelsData.models;
defaultChatModel.value = modelsData.default_chat_model;
defaultIntentModel.value = modelsData.default_intent_model;
} catch {
// Ollama unreachable — dropdowns will be empty
}
@@ -91,7 +88,6 @@ onMounted(async () => {
// Load notification preferences from user settings
const allSettings = await apiGet<Record<string, string>>("/api/settings");
defaultModel.value = allSettings.default_model ?? "";
intentModel.value = allSettings.intent_model ?? "";
if (allSettings.notify_task_reminders !== undefined) {
notifyTaskReminders.value = allSettings.notify_task_reminders !== "false";
}
@@ -190,7 +186,6 @@ async function saveAssistant() {
await store.updateSettings({
assistant_name: assistantName.value.trim() || "Fable",
default_model: defaultModel.value,
intent_model: intentModel.value,
});
saved.value = true;
setTimeout(() => (saved.value = false), 2000);
@@ -414,14 +409,6 @@ function hostname(url: string): string {
</select>
<p class="field-hint">Model used for new conversations.</p>
</div>
<div class="field">
<label for="intent-model">Intent Model</label>
<select id="intent-model" v-model="intentModel" class="input">
<option value="">Default ({{ defaultIntentModel || "qwen2.5:1.5b" }})</option>
<option v-for="m in installedModels" :key="m" :value="m">{{ m }}</option>
</select>
<p class="field-hint">Smaller/faster model for intent routing before the main model.</p>
</div>
</div>
<div class="actions">
<button class="btn-save" @click="saveAssistant" :disabled="saving">