import React from 'react'; import { X, Sliders, Sparkles } from 'lucide-react'; import type { ModelParams } from '../types/chat'; interface SettingsModalProps { isOpen: boolean; onClose: () => void; params: ModelParams; onUpdateParams: (newParams: ModelParams) => void; systemPrompt: string; onUpdateSystemPrompt: (prompt: string) => void; } export const SettingsModal: React.FC = ({ isOpen, onClose, params, onUpdateParams, systemPrompt, onUpdateSystemPrompt }) => { if (!isOpen) return null; return (
{/* Modal Header */}

Model Parameters & Hyperparameters

{/* Modal Body */}
{/* Temperature Slider */}
Temperature (Creativity) {params.temperature}
onUpdateParams({ ...params, temperature: parseFloat(e.target.value) })} className="w-full accent-brand-500 cursor-pointer" />

0.0 = Deterministic Greedy Decoding (Exact & Precise). 0.8 = Creative Sampling.

{/* Top-K Slider */}
Top-K Limit {params.topK}
onUpdateParams({ ...params, topK: parseInt(e.target.value) })} className="w-full accent-brand-500 cursor-pointer" />

Filters sampling to the top K highest-probability tokens.

{/* Top-P Slider */}
Top-P (Nucleus Threshold) {params.topP}
onUpdateParams({ ...params, topP: parseFloat(e.target.value) })} className="w-full accent-brand-500 cursor-pointer" />
{/* Max Tokens Slider */}
Max New Generation Tokens {params.maxTokens}
onUpdateParams({ ...params, maxTokens: parseInt(e.target.value) })} className="w-full accent-brand-500 cursor-pointer" />
{/* System Prompt Customizer */}
Active System Prompt