import { useState, useEffect } from 'react'; import { Box, Plus, X } from 'lucide-react'; import type { Provider } from '../../types'; import apiClient from '../../api/client'; export function ProvidersSettings() { const [providers, setProviders] = useState([]); const [loading, setLoading] = useState(true); const [isModalOpen, setIsModalOpen] = useState(false); const [formData, setFormData] = useState({ provider_type: 'openai', provider_title: '', provider_url: '', provider_apikey: '' }); const [submitLoading, setSubmitLoading] = useState(false); const [error, setError] = useState(''); const fetchProviders = async () => { setLoading(true); try { const response = await apiClient.get('/api/v1/provider/list'); const data = response.data.provider_list || {}; const providerArray: Provider[] = Object.values(data); setProviders(providerArray); } catch (error) { console.error("Failed to fetch providers", error); setProviders([]); } finally { setLoading(false); } }; useEffect(() => { // eslint-disable-next-line react-hooks/set-state-in-effect fetchProviders(); }, []); const handleOpenModal = () => { setFormData({ provider_type: 'openai', provider_title: '', provider_url: '', provider_apikey: '' }); setError(''); setIsModalOpen(true); }; const handleCloseModal = () => { setIsModalOpen(false); }; const handleChange = (e: React.ChangeEvent) => { setFormData({ ...formData, [e.target.name]: e.target.value }); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.provider_title || !formData.provider_url || !formData.provider_apikey) { setError('Please fill in all fields.'); return; } setSubmitLoading(true); setError(''); try { await apiClient.post('/api/v1/provider', formData); await fetchProviders(); handleCloseModal(); } catch (err) { console.error("Error adding provider", err); setError('Failed to add provider. Please check your inputs and try again.'); } finally { setSubmitLoading(false); } }; return (

Provider Management

Configure external AI model providers and API keys.

{loading ? (
Loading providers...
) : providers.length === 0 ? (
No providers configured yet. Click "Add Provider" to get started.
) : (
{providers.map((provider, i) => (

{provider.provider_title}

{provider.provider_type}
{provider.status === 'Connected' && } {provider.status || 'Unknown'}

URL / Endpoint:

{provider.provider_url || 'Default'}
))}
)} {/* Add Provider Modal */} {isModalOpen && (

Add New Provider

{error && (
{error}
)}
)}
); }