mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-03-10 02:29:19 +03:00
Support GenAI for embeddings
This commit is contained in:
parent
acdfed40a9
commit
0ecefa3496
@ -1,5 +1,5 @@
|
||||
from enum import Enum
|
||||
from typing import Dict, List, Optional
|
||||
from typing import Dict, List, Optional, Union
|
||||
|
||||
from pydantic import ConfigDict, Field
|
||||
|
||||
@ -173,10 +173,10 @@ class SemanticSearchConfig(FrigateBaseModel):
|
||||
title="Reindex on startup",
|
||||
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,
|
||||
title="Semantic search model",
|
||||
description="The embeddings model to use for semantic search (for example 'jinav1').",
|
||||
title="Semantic search model or GenAI provider name",
|
||||
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(
|
||||
default="small",
|
||||
|
||||
@ -592,6 +592,22 @@ class FrigateConfig(FrigateBaseModel):
|
||||
)
|
||||
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
|
||||
for attribute in self.model.all_attributes:
|
||||
if not self.objects.filters.get(attribute):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user