Semantic Search Triggers (#18969)

* semantic trigger test

* database and model

* config

* embeddings maintainer and trigger post-processor

* api to create, edit, delete triggers

* frontend and i18n keys

* use thumbnail and description for trigger types

* image picker tweaks

* initial sync

* thumbnail file management

* clean up logs and use saved thumbnail on frontend

* publish mqtt messages

* webpush changes to enable trigger notifications

* add enabled switch

* add triggers from explore

* renaming and deletion fixes

* fix typing

* UI updates and add last triggering event time and link

* log exception instead of return in endpoint

* highlight entry in UI when triggered

* save and delete thumbnails directly

* remove alert action for now and add descriptions

* tweaks

* clean up

* fix types

* docs

* docs tweaks

* docs

* reuse enum
This commit is contained in:
Josh Hawkins
2025-08-16 10:20:33 -05:00
committed by Blake Blackshear
parent 28f816b49a
commit 3609b41217
37 changed files with 2736 additions and 62 deletions
@@ -109,5 +109,12 @@
"markAsReviewed": "Mark as reviewed",
"deleteNow": "Delete Now"
}
},
"imagePicker": {
"selectImage": "Select a tracked object's thumbnail",
"search": {
"placeholder": "Search by label or sub label..."
},
"noImages": "No thumbnails found for this camera"
}
}
+4
View File
@@ -175,6 +175,10 @@
"label": "Find similar",
"aria": "Find similar tracked objects"
},
"addTrigger": {
"label": "Add trigger",
"aria": "Add a trigger for this tracked object"
},
"audioTranscription": {
"label": "Transcribe",
"aria": "Request audio transcription"
+95
View File
@@ -644,5 +644,100 @@
"success": "Frigate+ settings have been saved. Restart Frigate to apply changes.",
"error": "Failed to save config changes: {{errorMessage}}"
}
},
"triggers": {
"documentTitle": "Triggers",
"management": {
"title": "Trigger Management",
"desc": "Manage triggers for {{camera}}. Use the thumbnail type to trigger on similar thumbnails to your selected tracked object, and the description type to trigger on similar descriptions to text you specify."
},
"addTrigger": "Add Trigger",
"table": {
"name": "Name",
"type": "Type",
"content": "Content",
"threshold": "Threshold",
"actions": "Actions",
"noTriggers": "No triggers configured for this camera.",
"edit": "Edit",
"deleteTrigger": "Delete Trigger",
"lastTriggered": "Last triggered"
},
"type": {
"thumbnail": "Thumbnail",
"description": "Description"
},
"actions": {
"alert": "Mark as Alert",
"notification": "Send Notification"
},
"dialog": {
"createTrigger": {
"title": "Create Trigger",
"desc": "Create a trigger for camera {{camera}}"
},
"editTrigger": {
"title": "Edit Trigger",
"desc": "Edit the settings for trigger on camera {{camera}}"
},
"deleteTrigger": {
"title": "Delete Trigger",
"desc": "Are you sure you want to delete the trigger <strong>{{triggerName}}</strong>? This action cannot be undone."
},
"form": {
"name": {
"title": "Name",
"placeholder": "Enter trigger name",
"error": {
"minLength": "Name must be at least 2 characters long.",
"invalidCharacters": "Name can only contain letters, numbers, underscores, and hyphens.",
"alreadyExists": "A trigger with this name already exists for this camera."
}
},
"enabled": {
"description": "Enable or disable this trigger"
},
"type": {
"title": "Type",
"placeholder": "Select trigger type"
},
"content": {
"title": "Content",
"imagePlaceholder": "Select an image",
"textPlaceholder": "Enter text content",
"imageDesc": "Select an image to trigger this action when a similar image is detected.",
"textDesc": "Enter text to trigger this action when a similar tracked object description is detected.",
"error": {
"required": "Content is required."
}
},
"threshold": {
"title": "Threshold",
"error": {
"min": "Threshold must be at least 0",
"max": "Threshold must be at most 1"
}
},
"actions": {
"title": "Actions",
"desc": "By default, Frigate fires an MQTT message for all triggers. Choose an additional action to perform when this trigger fires.",
"error": {
"min": "At least one action must be selected."
}
}
}
},
"toast": {
"success": {
"createTrigger": "Trigger {{name}} created successfully.",
"updateTrigger": "Trigger {{name}} updated successfully.",
"deleteTrigger": "Trigger {{name}} deleted successfully."
},
"error": {
"createTriggerFailed": "Failed to create trigger: {{errorMessage}}",
"updateTriggerFailed": "Failed to update trigger: {{errorMessage}}",
"deleteTriggerFailed": "Failed to delete trigger: {{errorMessage}}"
}
}
}
}