Files
frigate/web/src/components/config-form/section-configs/review.ts
T

150 lines
4.3 KiB
TypeScript
Raw Normal View History

2026-02-27 09:55:36 -06:00
import type { SectionConfigOverrides } from "./types";
const review: SectionConfigOverrides = {
base: {
sectionDocs: "/configuration/review",
2026-03-29 16:25:40 -05:00
messages: [
{
key: "record-disabled",
messageKey: "configMessages.review.recordDisabled",
severity: "warning",
condition: (ctx) => {
if (ctx.level === "camera" && ctx.fullCameraConfig) {
return ctx.fullCameraConfig.record.enabled === false;
}
return ctx.fullConfig.record?.enabled === false;
},
},
{
key: "detect-disabled",
messageKey: "configMessages.review.detectDisabled",
severity: "info",
condition: (ctx) => {
if (ctx.level === "camera" && ctx.fullCameraConfig) {
return ctx.fullCameraConfig.detect?.enabled === false;
}
return false;
},
},
],
fieldMessages: [
{
key: "detections-all-non-alert",
field: "detections.labels",
messageKey: "configMessages.review.allNonAlertDetections",
severity: "info",
position: "after",
condition: (ctx) => {
const labels = (
ctx.formData?.detections as Record<string, unknown> | undefined
)?.labels;
return !Array.isArray(labels) || labels.length === 0;
},
},
2026-05-07 13:23:02 -05:00
{
key: "genai-no-descriptions-provider",
field: "genai.enabled",
messageKey: "configMessages.objects.genaiNoDescriptionsProvider",
severity: "warning",
position: "before",
condition: (ctx) => {
const providers = ctx.fullConfig.genai;
if (!providers || Object.keys(providers).length === 0) return true;
return !Object.values(providers).some((agent) =>
agent.roles?.includes("descriptions"),
);
},
},
{
key: "genai-image-source-recordings-record-disabled",
field: "genai.image_source",
messageKey:
"configMessages.review.genaiImageSourceRecordingsRecordDisabled",
severity: "warning",
position: "after",
condition: (ctx) => {
const genai = ctx.formData?.genai as
| Record<string, unknown>
| undefined;
if (genai?.image_source !== "recordings") return false;
if (ctx.level === "camera" && ctx.fullCameraConfig) {
return ctx.fullCameraConfig.record?.enabled === false;
}
return ctx.fullConfig.record?.enabled === false;
},
},
2026-03-29 16:25:40 -05:00
],
2026-03-27 09:45:50 -05:00
fieldDocs: {
"alerts.labels": "/configuration/review/#alerts-and-detections",
"detections.labels": "/configuration/review/#alerts-and-detections",
2026-04-20 08:19:09 -05:00
genai: "/configuration/genai/genai_review",
"genai.image_source": "/configuration/genai/genai_review#image-source",
"genai.additional_concerns":
"/configuration/genai/genai_review#additional-concerns",
2026-03-27 09:45:50 -05:00
},
2026-02-27 09:55:36 -06:00
restartRequired: [],
2026-04-03 17:46:43 -05:00
fieldOrder: ["alerts", "detections", "genai", "genai.enabled"],
2026-02-27 09:55:36 -06:00
fieldGroups: {},
hiddenFields: [
"enabled_in_config",
"alerts.enabled_in_config",
"detections.enabled_in_config",
"genai.enabled_in_config",
],
advancedFields: [],
uiSchema: {
alerts: {
"ui:before": { render: "CameraReviewStatusToggles" },
2026-03-27 09:45:50 -05:00
labels: {
"ui:widget": "reviewLabels",
"ui:options": {
suppressMultiSchema: true,
},
},
2026-02-27 09:55:36 -06:00
required_zones: {
"ui:widget": "hidden",
},
},
detections: {
2026-03-27 09:45:50 -05:00
labels: {
"ui:widget": "reviewLabels",
"ui:options": {
suppressMultiSchema: true,
},
},
2026-02-27 09:55:36 -06:00
required_zones: {
"ui:widget": "hidden",
},
},
genai: {
additional_concerns: {
2026-03-26 13:47:24 -05:00
"ui:widget": "ArrayAsTextWidget",
2026-02-27 09:55:36 -06:00
"ui:options": {
size: "full",
2026-03-26 13:47:24 -05:00
multiline: true,
2026-02-27 09:55:36 -06:00
},
},
activity_context_prompt: {
"ui:widget": "textarea",
"ui:options": {
size: "full",
},
},
2026-05-11 01:09:50 +08:00
image_source: {
"ui:options": {
enumI18nPrefix: "review.imageSource",
},
},
2026-02-27 09:55:36 -06:00
},
},
},
global: {
restartRequired: [],
2026-02-27 09:55:36 -06:00
},
camera: {
restartRequired: [],
},
};
export default review;