From 459a4f8c9486c90bed60495afb8ffbc712291301 Mon Sep 17 00:00:00 2001 From: Maphikza Date: Mon, 21 Jul 2025 15:03:36 +0200 Subject: [PATCH 1/4] Skip prefixing if key already has the prefix to avoid double-prefixing --- src/hooks/useGenericSettings.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hooks/useGenericSettings.ts b/src/hooks/useGenericSettings.ts index 1900a33..cf2f751 100644 --- a/src/hooks/useGenericSettings.ts +++ b/src/hooks/useGenericSettings.ts @@ -535,7 +535,9 @@ const useGenericSettings = ( if (groupName === 'content_filter' && key === 'full_text_kinds') { prefixedSettings[key] = value; } else { - prefixedSettings[`${prefix}${key}`] = value; + // Skip prefixing if key already has the prefix to avoid double-prefixing + const prefixedKey = key.startsWith(prefix) ? key : `${prefix}${key}`; + prefixedSettings[prefixedKey] = value; } }); From 457abbcf125235dcb326323138aca5e5bb615857 Mon Sep 17 00:00:00 2001 From: Maphikza Date: Tue, 22 Jul 2025 10:02:56 +0200 Subject: [PATCH 2/4] fix image moderation api and temp_dir field mapping Add missing unprefixed field names ('api', 'temp_dir') to the image moderation settings mapping to properly handle backend responses that send both prefixed and unprefixed field names. --- src/hooks/useGenericSettings.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hooks/useGenericSettings.ts b/src/hooks/useGenericSettings.ts index cf2f751..46b86f7 100644 --- a/src/hooks/useGenericSettings.ts +++ b/src/hooks/useGenericSettings.ts @@ -49,12 +49,12 @@ const extractSettingsForGroup = (settings: any, groupName: string) => { // Map backend fields to prefixed ones that the form expects // Based on the actual backend response, backend sends both prefixed and unprefixed versions const imageModerationMappings: Record = { - 'image_moderation_api': ['image_moderation_api'], + 'image_moderation_api': ['image_moderation_api', 'api'], 'image_moderation_check_interval': ['image_moderation_check_interval_seconds', 'check_interval_seconds'], 'image_moderation_concurrency': ['image_moderation_concurrency', 'concurrency'], 'image_moderation_enabled': ['image_moderation_enabled', 'enabled'], 'image_moderation_mode': ['image_moderation_mode', 'mode'], - 'image_moderation_temp_dir': ['image_moderation_temp_dir'], + 'image_moderation_temp_dir': ['image_moderation_temp_dir', 'temp_dir'], 'image_moderation_threshold': ['image_moderation_threshold', 'threshold'], 'image_moderation_timeout': ['image_moderation_timeout_seconds', 'timeout_seconds'] }; From 8b8ee1fd3fd0fece0df663c6e8fec329c5c85090 Mon Sep 17 00:00:00 2001 From: Maphikza Date: Tue, 22 Jul 2025 10:21:57 +0200 Subject: [PATCH 3/4] update image moderation text to be model-agnostic Replace specific "Llama Vision" references with generic "AI vision analysis" and "AI vision model" text to support different vision models. --- src/components/settings/panels/ImageModerationPanel.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/settings/panels/ImageModerationPanel.tsx b/src/components/settings/panels/ImageModerationPanel.tsx index 887c5dc..29eda13 100644 --- a/src/components/settings/panels/ImageModerationPanel.tsx +++ b/src/components/settings/panels/ImageModerationPanel.tsx @@ -113,7 +113,7 @@ const ImageModerationPanel: React.FC = () => { > - + @@ -128,9 +128,9 @@ const ImageModerationPanel: React.FC = () => { marginBottom: '16px' }}>

Moderation Mode Details:

-

Basic Mode: Only detects genitals, anus, and exposed breasts. Fastest processing (no Llama Vision used). Best for initial screening in high-volume applications.

-

Strict Mode: Includes all "basic" detection plus automatic blocking of all detected buttocks with confidence ≥ 0.4. Fast processing (no Llama Vision used). Best for zero-tolerance platforms.

-

Full Mode (Default): Complete analysis with nuanced context evaluation. Slower due to Llama Vision processing, but most accurate and reduces false positives.

+

Basic Mode: Only detects genitals, anus, and exposed breasts. Fastest processing (no AI vision analysis). Best for initial screening in high-volume applications.

+

Strict Mode: Includes all "basic" detection plus automatic blocking of all detected buttocks with confidence ≥ 0.4. Fast processing (no AI vision analysis). Best for zero-tolerance platforms.

+

Full Mode (Default): Complete analysis with nuanced context evaluation. Slower due to AI vision model processing, but most accurate and reduces false positives.

From 96b372721971216d5ed32fa1046089d3458904c0 Mon Sep 17 00:00:00 2001 From: Maphikza Date: Tue, 22 Jul 2025 10:43:03 +0200 Subject: [PATCH 4/4] fix React Hook dependency warning in NostrExtensionCheck Wrap checkExtension with useCallback and include it in useEffect dependencies to resolve exhaustive-deps warning. --- .../auth/NostrExtensionCheck/NostrExtensionCheck.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/auth/NostrExtensionCheck/NostrExtensionCheck.tsx b/src/components/auth/NostrExtensionCheck/NostrExtensionCheck.tsx index 417e9da..881abd6 100644 --- a/src/components/auth/NostrExtensionCheck/NostrExtensionCheck.tsx +++ b/src/components/auth/NostrExtensionCheck/NostrExtensionCheck.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useCallback } from 'react'; import { Alert, Card, Button, Space, Typography } from 'antd'; import { ExclamationCircleOutlined, CheckCircleOutlined, ReloadOutlined } from '@ant-design/icons'; import styled from 'styled-components'; @@ -109,7 +109,7 @@ export const NostrExtensionCheck: React.FC = ({ onExte const [hasExtension, setHasExtension] = useState(false); const [isChecking, setIsChecking] = useState(true); - const checkExtension = () => { + const checkExtension = useCallback(() => { setIsChecking(true); // Check if window.nostr exists @@ -120,7 +120,7 @@ export const NostrExtensionCheck: React.FC = ({ onExte if (extensionExists && onExtensionReady) { onExtensionReady(); } - }; + }, [onExtensionReady]); useEffect(() => { // Initial check @@ -135,7 +135,7 @@ export const NostrExtensionCheck: React.FC = ({ onExte }, 1000); return () => clearInterval(pollInterval); - }, [hasExtension, onExtensionReady]); + }, [hasExtension, checkExtension]); const extensions = [ {