diff --git a/src/components/label-selector/index.tsx b/src/components/label-selector/index.tsx index d2b162a1..6a0a0aa7 100644 --- a/src/components/label-selector/index.tsx +++ b/src/components/label-selector/index.tsx @@ -1,6 +1,6 @@ import { useIntl } from '@umijs/max'; import _ from 'lodash'; -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import Inner from './inner'; interface LabelSelectorProps { @@ -45,12 +45,10 @@ const LabelSelector: React.FC = ({ } }, [labels]); - const handleLabelListChange = useCallback( - (list: { key: string; value: string }[]) => { - setLabelList(list); - }, - [setLabelList] - ); + const handleLabelListChange = (list: { key: string; value: string }[]) => { + setLabelList(list); + }; + const handleLabelsChange = (data: Record) => { console.log('handleLabelsChange', data); setLabelsData(data); @@ -74,7 +72,7 @@ const LabelSelector: React.FC = ({ const [key, value] = line.split('=').map((part) => part.trim()); return { key, value }; }); - console.log(lines, parsedData); + console.log('onPaste', lines, parsedData); setLabelList((prevPairs) => { const newPairs = [...prevPairs]; diff --git a/src/components/label-selector/label-item.tsx b/src/components/label-selector/label-item.tsx index 56352c24..9a3538d8 100644 --- a/src/components/label-selector/label-item.tsx +++ b/src/components/label-selector/label-item.tsx @@ -123,4 +123,4 @@ const LabelItem: React.FC = ({ ); }; -export default React.memo(LabelItem); +export default LabelItem; diff --git a/src/pages/llmodels/components/deploy-modal.tsx b/src/pages/llmodels/components/deploy-modal.tsx index a303c08c..e783670f 100644 --- a/src/pages/llmodels/components/deploy-modal.tsx +++ b/src/pages/llmodels/components/deploy-modal.tsx @@ -366,8 +366,6 @@ const AddModal: FC = (props) => { evaluateStateRef.current.state === EvaluateProccess.model && item.evaluated ) { - handleShowCompatibleAlert(item.evaluateResult); - const newFormValues = { ...(manual ? { ...defaultFormValues } diff --git a/src/pages/llmodels/components/search-model.tsx b/src/pages/llmodels/components/search-model.tsx index 70e91fb6..688eafd4 100644 --- a/src/pages/llmodels/components/search-model.tsx +++ b/src/pages/llmodels/components/search-model.tsx @@ -21,9 +21,9 @@ import SearchInput from './search-input'; import SearchResult from './search-result'; const filterOptions = [ + { label: 'FP8', value: 'fp8' }, { label: 'AWQ', value: 'awq' }, - { label: 'GPTQ', value: 'gptq' }, - { label: 'GGUF', value: 'gguf' } + { label: 'GPTQ', value: 'gptq' } ]; const PaginationMain = styled(Pagination)` .ant-pagination-slash { @@ -541,8 +541,10 @@ const SearchModel: React.FC = (props) => { onChange={handleFilterChange} options={filterOptions} size="middle" - placeholder={intl.formatMessage({ id: 'common.input.type' })} - style={{ width: 120 }} + placeholder={intl.formatMessage({ + id: 'models.form.quantization' + })} + style={{ width: 130 }} > { return actionList.filter((action) => { - if (initialState?.currentUser?.id === record.id) { - return action.key !== 'delete'; + if (action.key === 'delete') { + return initialState?.currentUser?.id !== record.id; + } + if (action.key === 'active') { + return !record.is_active && initialState?.currentUser?.id !== record.id; + } + if (action.key === 'inactive') { + return record.is_active && initialState?.currentUser?.id !== record.id; } return true; }); diff --git a/src/utils/fetch-chunk-data.ts b/src/utils/fetch-chunk-data.ts index d3278f0f..053bea08 100644 --- a/src/utils/fetch-chunk-data.ts +++ b/src/utils/fetch-chunk-data.ts @@ -3,30 +3,33 @@ import qs from 'query-string'; const extractStreamRegx = /(data|error):\s*({.*?})(?=\n|$)/g; -const extractJSON = (dataStr: string) => { - let match; +const extractJSON = ( + dataStr: string +): { results: any[]; remaining: string } => { const results: any[] = []; + if (!dataStr) return { results, remaining: '' }; - if (!dataStr) { - return results; - } - while ((match = extractStreamRegx.exec(dataStr)) !== null) { - try { - const type = match[1]; // "data" or "error" - console.log('type========', type); - const jsonData = JSON.parse(match[2]); - if (type === 'error') { - results.push({ error: jsonData }); - } else { - results.push(jsonData); - } - } catch (err) { - console.error('JSON parse error:', err, 'for match:', match[2]); + const parts = dataStr.split(/\n\n/); + let remaining = ''; + + for (let i = 0; i < parts.length; i++) { + const part = parts[i].trim(); + if (!part) continue; + if (!part.startsWith('data:') && !part.startsWith('error:')) { + remaining += part; continue; } + + const jsonStr = part.slice(5).trim(); + try { + const parsed = JSON.parse(jsonStr); + results.push(parsed); + } catch { + remaining += part; + } } - return results; + return { results, remaining }; }; const errorHandler = async (res: any) => { @@ -181,10 +184,11 @@ export const readStreamData = async ( bufferManager.add({ error: jsonData }); textBuffer = ''; // Clear buffer after processing error } else { - extractJSON(textBuffer).forEach((data) => { + const { results, remaining } = extractJSON(textBuffer); + results.forEach((data) => { bufferManager.add(data); }); - textBuffer = ''; // Clear buffer after processing + textBuffer = remaining; // Clear buffer after processing } throttledCallback(); @@ -195,10 +199,11 @@ export const readStreamData = async ( if (done) { textBuffer += decoder.decode(); if (textBuffer) { - extractJSON(textBuffer).forEach((data) => bufferManager.add(data)); + const { results, remaining } = extractJSON(textBuffer); + results.forEach((data) => bufferManager.add(data)); } - isReading = false; bufferManager.flush(); + isReading = false; break; } }