Skip to content

Commit c031ff2

Browse files
authored
Merge pull request #66 from HORNET-Storage/fix/image-moderation-and-react-hooks
Fix/image moderation and react hooks
2 parents ac08e00 + 96b3727 commit c031ff2

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

src/components/auth/NostrExtensionCheck/NostrExtensionCheck.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useEffect } from 'react';
1+
import React, { useState, useEffect, useCallback } from 'react';
22
import { Alert, Card, Button, Space, Typography } from 'antd';
33
import { ExclamationCircleOutlined, CheckCircleOutlined, ReloadOutlined } from '@ant-design/icons';
44
import styled from 'styled-components';
@@ -109,7 +109,7 @@ export const NostrExtensionCheck: React.FC<NostrExtensionCheckProps> = ({ onExte
109109
const [hasExtension, setHasExtension] = useState(false);
110110
const [isChecking, setIsChecking] = useState(true);
111111

112-
const checkExtension = () => {
112+
const checkExtension = useCallback(() => {
113113
setIsChecking(true);
114114

115115
// Check if window.nostr exists
@@ -120,7 +120,7 @@ export const NostrExtensionCheck: React.FC<NostrExtensionCheckProps> = ({ onExte
120120
if (extensionExists && onExtensionReady) {
121121
onExtensionReady();
122122
}
123-
};
123+
}, [onExtensionReady]);
124124

125125
useEffect(() => {
126126
// Initial check
@@ -135,7 +135,7 @@ export const NostrExtensionCheck: React.FC<NostrExtensionCheckProps> = ({ onExte
135135
}, 1000);
136136

137137
return () => clearInterval(pollInterval);
138-
}, [hasExtension, onExtensionReady]);
138+
}, [hasExtension, checkExtension]);
139139

140140
const extensions = [
141141
{

src/components/settings/panels/ImageModerationPanel.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ const ImageModerationPanel: React.FC = () => {
113113
>
114114
<Option value="basic">Basic Mode (Fastest, detects explicit content only)</Option>
115115
<Option value="strict">Strict Mode (Fast, blocks all buttocks)</Option>
116-
<Option value="full">Full Mode (Most accurate, uses Llama Vision)</Option>
116+
<Option value="full">Full Mode (Most accurate, uses AI vision analysis)</Option>
117117
</Select>
118118
</Form.Item>
119119

@@ -128,9 +128,9 @@ const ImageModerationPanel: React.FC = () => {
128128
marginBottom: '16px'
129129
}}>
130130
<h4 style={{ marginTop: 0, color: 'rgba(82, 196, 255, 1)' }}>Moderation Mode Details:</h4>
131-
<p><strong>Basic Mode:</strong> Only detects genitals, anus, and exposed breasts. Fastest processing (no Llama Vision used). Best for initial screening in high-volume applications.</p>
132-
<p><strong>Strict Mode:</strong> Includes all &quot;basic&quot; detection plus automatic blocking of all detected buttocks with confidence ≥ 0.4. Fast processing (no Llama Vision used). Best for zero-tolerance platforms.</p>
133-
<p><strong>Full Mode (Default):</strong> Complete analysis with nuanced context evaluation. Slower due to Llama Vision processing, but most accurate and reduces false positives.</p>
131+
<p><strong>Basic Mode:</strong> Only detects genitals, anus, and exposed breasts. Fastest processing (no AI vision analysis). Best for initial screening in high-volume applications.</p>
132+
<p><strong>Strict Mode:</strong> Includes all &quot;basic&quot; detection plus automatic blocking of all detected buttocks with confidence ≥ 0.4. Fast processing (no AI vision analysis). Best for zero-tolerance platforms.</p>
133+
<p><strong>Full Mode (Default):</strong> Complete analysis with nuanced context evaluation. Slower due to AI vision model processing, but most accurate and reduces false positives.</p>
134134
</div>
135135
</Form.Item>
136136

src/hooks/useGenericSettings.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ const extractSettingsForGroup = (settings: any, groupName: string) => {
4949
// Map backend fields to prefixed ones that the form expects
5050
// Based on the actual backend response, backend sends both prefixed and unprefixed versions
5151
const imageModerationMappings: Record<string, string[]> = {
52-
'image_moderation_api': ['image_moderation_api'],
52+
'image_moderation_api': ['image_moderation_api', 'api'],
5353
'image_moderation_check_interval': ['image_moderation_check_interval_seconds', 'check_interval_seconds'],
5454
'image_moderation_concurrency': ['image_moderation_concurrency', 'concurrency'],
5555
'image_moderation_enabled': ['image_moderation_enabled', 'enabled'],
5656
'image_moderation_mode': ['image_moderation_mode', 'mode'],
57-
'image_moderation_temp_dir': ['image_moderation_temp_dir'],
57+
'image_moderation_temp_dir': ['image_moderation_temp_dir', 'temp_dir'],
5858
'image_moderation_threshold': ['image_moderation_threshold', 'threshold'],
5959
'image_moderation_timeout': ['image_moderation_timeout_seconds', 'timeout_seconds']
6060
};
@@ -535,7 +535,9 @@ const useGenericSettings = <T extends SettingsGroupName>(
535535
if (groupName === 'content_filter' && key === 'full_text_kinds') {
536536
prefixedSettings[key] = value;
537537
} else {
538-
prefixedSettings[`${prefix}${key}`] = value;
538+
// Skip prefixing if key already has the prefix to avoid double-prefixing
539+
const prefixedKey = key.startsWith(prefix) ? key : `${prefix}${key}`;
540+
prefixedSettings[prefixedKey] = value;
539541
}
540542
});
541543

0 commit comments

Comments
 (0)