Spaces:
Paused
Paused
File size: 1,522 Bytes
ba7b442 a76942d ba7b442 a76942d ba7b442 a76942d ba7b442 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import React, { useState, useEffect } from 'react';
import axios from 'axios';
import { FaRobot, FaSync } from 'react-icons/fa';
const ModelSelector: React.FC<{ selectedModel: string; onModelChange: (model: string) => void }> = ({ selectedModel, onModelChange }) => {
const [models, setModels] = useState<any[]>([]);
const load = () => {
axios.get('/api/models').then(res => setModels(res.data)).catch(() => setModels([]));
};
useEffect(() => { load(); }, []);
const refresh = async () => {
await axios.post('/api/refresh-models');
load();
};
return (
<div style={{ padding: '8px 12px', borderBottom: '1px solid var(--border)' }}>
<div style={{ display: 'flex', alignItems: 'center', gap: 6, marginBottom: 6, color: 'var(--text-secondary)', fontSize: 12 }}>
<FaRobot /> ACTIVE MODEL
<button onClick={refresh} style={{ marginLeft: 'auto', color: 'var(--text-secondary)', cursor: 'pointer' }} title="Refresh models from APIs">
<FaSync size={12} />
</button>
</div>
<select
style={{ width: '100%', background: 'var(--bg-tertiary)', color: 'var(--text-primary)', border: '1px solid var(--border)', padding: '6px 8px', borderRadius: 6, outline: 'none', fontSize: 13 }}
value={selectedModel}
onChange={e => onModelChange(e.target.value)}
>
{models.map((m: any) => (
<option key={m.id} value={m.id}>{m.name}</option>
))}
</select>
</div>
);
};
export default ModelSelector; |