Support GenAI for embeddings

This commit is contained in:
Nicolas Mowen 2026-02-19 08:13:39 -07:00
parent b6e17b032a
commit 266e243425
2 changed files with 20 additions and 3 deletions

View File

@ -1,5 +1,5 @@
from enum import Enum from enum import Enum
from typing import Dict, List, Optional from typing import Dict, List, Optional, Union
from pydantic import ConfigDict, Field from pydantic import ConfigDict, Field
@ -128,9 +128,10 @@ class SemanticSearchConfig(FrigateBaseModel):
reindex: Optional[bool] = Field( reindex: Optional[bool] = Field(
default=False, title="Reindex all tracked objects on startup." default=False, title="Reindex all tracked objects on startup."
) )
model: Optional[SemanticSearchModelEnum] = Field( model: Optional[Union[SemanticSearchModelEnum, str]] = Field(
default=SemanticSearchModelEnum.jinav1, default=SemanticSearchModelEnum.jinav1,
title="The CLIP model to use for semantic search.", title="The CLIP model or GenAI provider name for semantic search.",
description="Use 'jinav1', 'jinav2' for ONNX models, or a GenAI config key (e.g. 'default') when that provider has the embeddings role.",
) )
model_size: str = Field( model_size: str = Field(
default="small", title="The size of the embeddings model used." default="small", title="The size of the embeddings model used."

View File

@ -443,6 +443,22 @@ class FrigateConfig(FrigateBaseModel):
) )
role_to_name[role] = name role_to_name[role] = name
# validate semantic_search.model when it is a GenAI provider name
if self.semantic_search.enabled and isinstance(
self.semantic_search.model, str
):
if self.semantic_search.model not in self.genai:
raise ValueError(
f"semantic_search.model '{self.semantic_search.model}' is not a "
"valid GenAI config key. Must match a key in genai config."
)
genai_cfg = self.genai[self.semantic_search.model]
if GenAIRoleEnum.embeddings not in genai_cfg.roles:
raise ValueError(
f"GenAI provider '{self.semantic_search.model}' must have "
"'embeddings' in its roles for semantic search."
)
# set default min_score for object attributes # set default min_score for object attributes
for attribute in self.model.all_attributes: for attribute in self.model.all_attributes:
if not self.objects.filters.get(attribute): if not self.objects.filters.get(attribute):