import { useEffect, useState } from 'react' import { useCliAuthStore } from '../../stores/cliAuthStore' export function LocalLoginPanel() { const { localBaseUrl, localModelName, saveLocalModelConfig, isLoading } = useCliAuthStore() const [url, setUrl] = useState('') const [modelName, setModelName] = useState('') const [status, setStatus] = useState(null) const defaultUrl = 'http://127.0.0.1:8001' useEffect(() => { if (localBaseUrl) setUrl(localBaseUrl) if (localModelName) setModelName(localModelName) }, [localBaseUrl, localModelName]) const handleSave = async () => { const finalUrl = url.trim() || defaultUrl const finalModel = modelName.trim() || 'default' if (!finalUrl) { setStatus('Please enter a URL'); return } try { new URL(finalUrl) // validate URL } catch { setStatus('Invalid URL format') return } setStatus(null) try { await saveLocalModelConfig(finalUrl, finalModel) setStatus('Saved!') } catch (err) { setStatus(err instanceof Error ? err.message : String(err)) } } return (
Configure a local model server (Ollama, LM Studio, vLLM, etc.).
setUrl(e.target.value)} placeholder={localBaseUrl || defaultUrl} className="w-full rounded-md border border-[var(--color-border)] bg-[var(--color-surface)] px-3 py-2 text-sm text-[var(--color-text-primary)] placeholder-[var(--color-text-tertiary)] focus:border-[var(--color-brand)] focus:outline-none" />
setModelName(e.target.value)} placeholder={localModelName || 'default'} className="w-full rounded-md border border-[var(--color-border)] bg-[var(--color-surface)] px-3 py-2 text-sm text-[var(--color-text-primary)] placeholder-[var(--color-text-tertiary)] focus:border-[var(--color-brand)] focus:outline-none" />
{status && (
{status}
)}
) }