diff --git a/src/lib/components/SettingsForm.svelte b/src/lib/components/SettingsForm.svelte index b60e59c..f9775e9 100644 --- a/src/lib/components/SettingsForm.svelte +++ b/src/lib/components/SettingsForm.svelte @@ -6,20 +6,39 @@ form?: any }>() - // Simple reactive state for form values - let settingValues = $state>({}) + // Initialize form values from props + let settingValues = $state>( + Object.fromEntries(settings.map((s: { key: string; value: string }) => [s.key, s.value])) + ) - // Initialize form values once on mount + const rangeSettings: Record = { + HISTORY_LOOKBACK_HOURS: { min: 0, max: 48, step: 1 }, + OPENAI_TEMPERATURE: { min: 0, max: 1, step: 0.1 }, + OPENAI_TOP_P: { min: 0, max: 1, step: 0.05 }, + OPENAI_FREQUENCY_PENALTY: { min: -2, max: 2, step: 0.1 }, + OPENAI_PRESENCE_PENALTY: { min: -2, max: 2, step: 0.1 }, + ANTHROPIC_TEMPERATURE: { min: 0, max: 1, step: 0.1 }, + GROK_TEMPERATURE: { min: 0, max: 1, step: 0.1 }, + } + + // Update form values when settings change $effect(() => { - if (Object.keys(settingValues).length === 0) { - const values: Record = {} - for (const setting of settings) { - values[setting.key] = setting.value - } - settingValues = values + if (form?.settings) { + settingValues = Object.fromEntries( + form.settings.map((s: { key: string; value: string }) => [s.key, s.value]) + ) } }) + // Handle range input changes + function handleRangeChange(key: string, value: string) { + const num = parseFloat(value) + const range = rangeSettings[key] + if (!isNaN(num) && num >= range.min && num <= range.max) { + settingValues = { ...settingValues, [key]: value } + } + } + // Group settings by provider const settingsGroups = $derived({ general: settings.filter((s: { key: string; value: string; description: string }) => @@ -106,6 +125,22 @@ rows="4" class="context-textarea" > + {:else if rangeSettings[setting.key]} +
+ + + {settingValues[setting.key] || '0'} + +
{:else}