diff --git a/web/src/components/menu/GeneralSettings.tsx b/web/src/components/menu/GeneralSettings.tsx index d1a1322ac..b3ab45f98 100644 --- a/web/src/components/menu/GeneralSettings.tsx +++ b/web/src/components/menu/GeneralSettings.tsx @@ -93,6 +93,14 @@ export default function GeneralSettings({ className }: GeneralSettingsProps) { useSWR("profiles"); const logoutUrl = config?.proxy?.logout_url || "/api/logout"; + const hasChatAgent = useMemo( + () => + Object.values(config?.genai ?? {}).some((agent) => + agent?.roles?.includes("chat"), + ), + [config?.genai], + ); + // languages const languages = useMemo(() => { @@ -511,7 +519,7 @@ export default function GeneralSettings({ className }: GeneralSettingsProps) { {t("menu.classification")} - {config?.genai?.model !== "none" && ( + {hasChatAgent && ( agent?.roles?.includes("descriptions")) + ?.provider?.replaceAll("_", " ") ?? t("generativeAI"), ), }), { @@ -976,8 +977,9 @@ function ObjectDetailsTab({ toast.error( t("details.item.toast.error.regenerate", { provider: capitalizeAll( - config?.genai.provider.replaceAll("_", " ") ?? - t("generativeAI"), + Object.values(config?.genai ?? {}) + .find((agent) => agent?.roles?.includes("descriptions")) + ?.provider?.replaceAll("_", " ") ?? t("generativeAI"), ), errorMessage, }), diff --git a/web/src/hooks/use-navigation.ts b/web/src/hooks/use-navigation.ts index 031411c1a..dcf5da0ca 100644 --- a/web/src/hooks/use-navigation.ts +++ b/web/src/hooks/use-navigation.ts @@ -28,6 +28,14 @@ export default function useNavigation( }); const isAdmin = useIsAdmin(); + const hasChatAgent = useMemo( + () => + Object.values(config?.genai ?? {}).some((agent) => + agent?.roles?.includes("chat"), + ), + [config?.genai], + ); + return useMemo( () => [ @@ -89,9 +97,9 @@ export default function useNavigation( icon: MdChat, title: "menu.chat", url: "/chat", - enabled: isDesktop && isAdmin && config?.genai?.model !== "none", + enabled: isDesktop && isAdmin && hasChatAgent, }, ] as NavData[], - [config?.face_recognition?.enabled, config?.genai?.model, variant, isAdmin], + [config?.face_recognition?.enabled, hasChatAgent, variant, isAdmin], ); } diff --git a/web/src/types/frigateConfig.ts b/web/src/types/frigateConfig.ts index 9a745b76c..2b9a05a1a 100644 --- a/web/src/types/frigateConfig.ts +++ b/web/src/types/frigateConfig.ts @@ -382,6 +382,18 @@ export type AllGroupsStreamingSettings = { [groupName: string]: GroupStreamingSettings; }; +export type GenAIRole = "chat" | "descriptions" | "embeddings"; + +export type GenAIAgentConfig = { + api_key?: string; + base_url?: string; + model: string; + provider?: string; + roles: GenAIRole[]; + provider_options?: Record; + runtime_options?: Record; +}; + export interface FrigateConfig { version: string; safe_mode: boolean; @@ -478,12 +490,7 @@ export interface FrigateConfig { retry_interval: number; }; - genai: { - provider: string; - base_url?: string; - api_key?: string; - model: string; - }; + genai: Record; go2rtc: { streams: Record;