import SealSelect from '@/components/seal-form/seal-select'; import { categoryOptions } from '@/pages/llmodels/config'; import { CheckCircleFilled, CloseCircleFilled, LoadingOutlined } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Button, Form, Tooltip } from 'antd'; import React from 'react'; import styled from 'styled-components'; import { FormData, ProviderModel } from '../config/types'; import { useTestProviderModel } from '../hooks/use-query-provider-models'; const SelectWrapper = styled.div` width: 100%; display: grid; grid-template-columns: 265px 160px max-content; align-items: center; gap: 8px; .icon-wrapper { display: flex; align-items: center; height: 100%; } `; interface ModelItemProps { onOpenChange: (open: boolean) => void; onChange: (data: ProviderModel) => void; providerModelList: ProviderModel[]; item: ProviderModel; loading?: boolean; } const ModelItem: React.FC = ({ onOpenChange, onChange, loading, providerModelList, item }) => { const intl = useIntl(); const form = Form.useFormInstance(); const { runTestModel, loading: testLoading } = useTestProviderModel(); const handleTestModel = async () => { const res = await runTestModel({ data: { model_name: item.name, api_token: form.getFieldValue('api_key') || '', config: { type: form.getFieldValue(['config', 'type']) || '' } } }); onChange({ ...item, accessible: res.accessible }); }; const handleOnChange = (value: string) => { onChange({ ...item, accessible: null, name: value }); }; const handleOnCategoryChange = (value: string) => { onChange({ ...item, category: value }); }; const renderSuffixIcon = () => { if (testLoading) { return ; } if (item.accessible === true) { return ( ); } if (item.accessible === false) { return ( ); } return null; }; return ( ); }; export default ModelItem;