diff --git a/admin/src/app/official-accounts/page.tsx b/admin/src/app/official-accounts/page.tsx index de7f344..5389ef7 100644 --- a/admin/src/app/official-accounts/page.tsx +++ b/admin/src/app/official-accounts/page.tsx @@ -8,6 +8,59 @@ import { ChevronDown, ChevronUp, Bot, Clock, AlertCircle, CheckCircle, ExternalLink, } from 'lucide-react'; +// ─── Model Selector (fetches from OpenRouter) ───────── +function ModelSelector({ value, onChange, className }: { value: string; onChange: (v: string) => void; className?: string }) { + const [models, setModels] = useState<{ id: string; name: string }[]>([]); + const [search, setSearch] = useState(''); + const [open, setOpen] = useState(false); + const [loading, setLoading] = useState(false); + + useEffect(() => { + setLoading(true); + api.listOpenRouterModels().then((data) => { + const list = (data.models || []).map((m: any) => ({ id: m.id, name: m.name || m.id })); + setModels(list); + }).catch(() => {}).finally(() => setLoading(false)); + }, []); + + const filtered = search + ? models.filter((m) => m.id.toLowerCase().includes(search.toLowerCase()) || m.name.toLowerCase().includes(search.toLowerCase())) + : models; + + const displayName = models.find((m) => m.id === value)?.name || value; + + return ( +
{loading ? 'Loading...' : 'No models found'}
+ ) : ( + filtered.slice(0, 100).map((m) => ( + + )) + )} +