only show chat link when a genai provider is configured with the chat role

This commit is contained in:
Josh Hawkins 2026-05-02 06:47:00 -05:00
parent a136dbdb9e
commit 9f57b89296
4 changed files with 38 additions and 13 deletions

View File

@ -93,6 +93,14 @@ export default function GeneralSettings({ className }: GeneralSettingsProps) {
useSWR<ProfilesApiResponse>("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) {
<span>{t("menu.classification")}</span>
</MenuItem>
</Link>
{config?.genai?.model !== "none" && (
{hasChatAgent && (
<Link to="/chat">
<MenuItem
className="flex w-full items-center p-2 text-sm"

View File

@ -957,8 +957,9 @@ function ObjectDetailsTab({
toast.success(
t("details.item.toast.success.regenerate", {
provider: capitalizeAll(
config?.genai.provider.replaceAll("_", " ") ??
t("generativeAI"),
Object.values(config?.genai ?? {})
.find((agent) => 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,
}),

View File

@ -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],
);
}

View File

@ -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<string, unknown>;
runtime_options?: Record<string, unknown>;
};
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<string, GenAIAgentConfig>;
go2rtc: {
streams: Record<string, string | string[]>;