fix: Remove hardcoded model names from UI to prevent staleness

- Remove model references from provider labels ('OpenAI' not 'OpenAI (GPT-4)')
- Remove DEFAULT_MODELS usage in form initialization
- Use generic placeholders instead of specific model names
- Models are now fetched dynamically from each provider's API
- UI won't become outdated when new models are released
This commit is contained in:
rcourtman 2025-12-11 18:38:59 +00:00
parent 6e19232b02
commit a082fd3fc1
2 changed files with 12 additions and 13 deletions

View file

@ -18,10 +18,10 @@ import type {
// Provider display names for grouped model selection // Provider display names for grouped model selection
const PROVIDER_DISPLAY_NAMES: Record<string, string> = { const PROVIDER_DISPLAY_NAMES: Record<string, string> = {
anthropic: 'Anthropic (Claude)', anthropic: 'Anthropic',
openai: 'OpenAI (GPT)', openai: 'OpenAI',
deepseek: 'DeepSeek', deepseek: 'DeepSeek',
ollama: 'Ollama (Local)', ollama: 'Ollama',
}; };
// Parse provider from model ID (format: "provider:model-name") // Parse provider from model ID (format: "provider:model-name")

View file

@ -8,16 +8,15 @@ import { notificationStore } from '@/stores/notifications';
import { logger } from '@/utils/logger'; import { logger } from '@/utils/logger';
import { AIAPI } from '@/api/ai'; import { AIAPI } from '@/api/ai';
import type { AISettings as AISettingsType, AIProvider, AuthMethod } from '@/types/ai'; import type { AISettings as AISettingsType, AIProvider, AuthMethod } from '@/types/ai';
import { DEFAULT_MODELS } from '@/types/ai';
// Providers are now configured via accordion sections, not a single-provider selector // Providers are now configured via accordion sections, not a single-provider selector
// Provider display names for optgroup labels // Provider display names for optgroup labels
const PROVIDER_DISPLAY_NAMES: Record<string, string> = { const PROVIDER_DISPLAY_NAMES: Record<string, string> = {
anthropic: 'Anthropic (Claude)', anthropic: 'Anthropic',
openai: 'OpenAI (GPT)', openai: 'OpenAI',
deepseek: 'DeepSeek', deepseek: 'DeepSeek',
ollama: 'Ollama (Local)', ollama: 'Ollama',
}; };
// Parse provider from model ID (format: "provider:model-name") // Parse provider from model ID (format: "provider:model-name")
@ -98,7 +97,7 @@ export const AISettings: Component = () => {
enabled: false, enabled: false,
provider: 'anthropic', provider: 'anthropic',
apiKey: '', apiKey: '',
model: DEFAULT_MODELS.anthropic, model: '', // Will be set when provider is configured
chatModel: '', chatModel: '',
patrolModel: '', patrolModel: '',
baseUrl: '', baseUrl: '',
@ -122,7 +121,7 @@ export const AISettings: Component = () => {
enabled: data.enabled, enabled: data.enabled,
provider: data.provider, provider: data.provider,
apiKey: '', apiKey: '',
model: data.model || DEFAULT_MODELS[data.provider], model: data.model || '', // User must select a model
chatModel: data.chat_model || '', chatModel: data.chat_model || '',
patrolModel: data.patrol_model || '', patrolModel: data.patrol_model || '',
baseUrl: data.base_url || '', baseUrl: data.base_url || '',
@ -470,7 +469,7 @@ export const AISettings: Component = () => {
type="text" type="text"
value={form.model} value={form.model}
onInput={(e) => setForm('model', e.currentTarget.value)} onInput={(e) => setForm('model', e.currentTarget.value)}
placeholder={DEFAULT_MODELS[form.provider]} placeholder="Configure a provider below to see available models"
class={controlClass()} class={controlClass()}
disabled={saving()} disabled={saving()}
/> />
@ -614,7 +613,7 @@ export const AISettings: Component = () => {
}} }}
> >
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="font-medium text-sm">Anthropic (Claude)</span> <span class="font-medium text-sm">Anthropic</span>
<Show when={settings()?.anthropic_configured}> <Show when={settings()?.anthropic_configured}>
<span class="px-1.5 py-0.5 text-[10px] font-semibold bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-300 rounded">Configured</span> <span class="px-1.5 py-0.5 text-[10px] font-semibold bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-300 rounded">Configured</span>
</Show> </Show>
@ -682,7 +681,7 @@ export const AISettings: Component = () => {
}} }}
> >
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="font-medium text-sm">OpenAI (GPT-4)</span> <span class="font-medium text-sm">OpenAI</span>
<Show when={settings()?.openai_configured}> <Show when={settings()?.openai_configured}>
<span class="px-1.5 py-0.5 text-[10px] font-semibold bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-300 rounded">Configured</span> <span class="px-1.5 py-0.5 text-[10px] font-semibold bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-300 rounded">Configured</span>
</Show> </Show>
@ -826,7 +825,7 @@ export const AISettings: Component = () => {
}} }}
> >
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="font-medium text-sm">Ollama (Local)</span> <span class="font-medium text-sm">Ollama</span>
<Show when={settings()?.ollama_configured}> <Show when={settings()?.ollama_configured}>
<span class="px-1.5 py-0.5 text-[10px] font-semibold bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-300 rounded">Available</span> <span class="px-1.5 py-0.5 text-[10px] font-semibold bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-300 rounded">Available</span>
</Show> </Show>