Support GenAI for embeddings

This commit is contained in:
Nicolas Mowen 2026-02-19 08:13:39 -07:00
parent 1f1d546326
commit 29e2c322e7
2 changed files with 20 additions and 4 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
@ -173,10 +173,10 @@ class SemanticSearchConfig(FrigateBaseModel):
title="Reindex on startup", title="Reindex on startup",
description="Trigger a full reindex of historical tracked objects into the embeddings database.", description="Trigger a full reindex of historical tracked objects into the embeddings database.",
) )
model: Optional[SemanticSearchModelEnum] = Field( model: Optional[Union[SemanticSearchModelEnum, str]] = Field(
default=SemanticSearchModelEnum.jinav1, default=SemanticSearchModelEnum.jinav1,
title="Semantic search model", title="Semantic search model or GenAI provider name",
description="The embeddings model to use for semantic search (for example 'jinav1').", description="The embeddings model to use for semantic search (for example 'jinav1'), or the name of a GenAI provider with the embeddings role.",
) )
model_size: str = Field( model_size: str = Field(
default="small", default="small",

View File

@ -592,6 +592,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):