import React from 'react'; import { AppSettings, ModelConfig, ModelType } from '../types'; import { useLanguage } from '../contexts/LanguageContext'; import { Settings, Database, Sliders, Layers, Cpu, ChevronRight } from 'lucide-react'; import VisionModelSelector from './VisionModelSelector'; interface ConfigPanelProps { settings: AppSettings; models: ModelConfig[]; onSettingsChange: (newSettings: AppSettings) => void; onOpenSettings: () => void; mode?: 'chat' | 'kb' | 'all'; } const ConfigPanel: React.FC = ({ settings, models, onSettingsChange, onOpenSettings, mode = 'all' }) => { const { t } = useLanguage(); const handleChange = (key: keyof AppSettings, value: any) => { onSettingsChange({ ...settings, [key]: value, }); }; const llmModels = models.filter(m => m.type === ModelType.LLM && m.isEnabled !== false && !m.supportsVision); const embeddingModels = models.filter(m => m.type === ModelType.EMBEDDING && m.isEnabled !== false); const rerankModels = models.filter(m => m.type === ModelType.RERANK && m.isEnabled !== false); const showChatSettings = mode === 'chat' || mode === 'all'; const showKbSettings = mode === 'kb' || mode === 'all'; return (
{/* Model Selection (LLM) - Chat Mode Only */} {showChatSettings && (
{t('headerModelSelection')}
)} {/* Embedding Model Selection - KB Mode Only */} {showKbSettings && (
{t('lblEmbedding')}

{t('defaultForUploads')}

{t('embeddingModelWarning') || "Changing this setting may require clearing and re-importing your knowledge base."}

)} {/* Hyperparameters - Chat Mode Only */} {showChatSettings && (
{t('headerHyperparams')}
{settings.temperature}
handleChange('temperature', parseFloat(e.target.value))} className="w-full h-2 bg-slate-200 rounded-lg appearance-none cursor-pointer accent-blue-600" />
handleChange('maxTokens', parseInt(e.target.value))} className="w-full text-sm bg-slate-50 border border-slate-200 rounded-lg px-3 py-2 text-slate-700 focus:outline-none focus:border-blue-500" />
)} {/* Vision Model Settings - Chat Mode Only? Or both? Assuming Chat */} {/* Vision Model Settings - KB Only */} {showKbSettings && } {/* Retrieval Settings - KB Mode Only */} {showKbSettings && (
{t('headerRetrieval')}
{settings.topK}
handleChange('topK', parseInt(e.target.value))} className="w-full h-2 bg-slate-200 rounded-lg appearance-none cursor-pointer accent-blue-600" />
{settings.similarityThreshold}
handleChange('similarityThreshold', parseFloat(e.target.value))} className="w-full h-2 bg-slate-200 rounded-lg appearance-none cursor-pointer accent-blue-600" />

{t('filterLowResults')}

{settings.enableRerank && (
{settings.scoreThreshold}
handleChange('scoreThreshold', parseFloat(e.target.value))} className="w-full h-2 bg-slate-200 rounded-lg appearance-none cursor-pointer accent-blue-600" />

{t('filterLowResults')}

)}

{t('queryExpansionDesc')}

{t('hydeDesc')}

)}
); }; export default ConfigPanel;