From 53a4ebb66ed1866a6cabffd76630dc5446c8a6aa Mon Sep 17 00:00:00 2001 From: jialin Date: Wed, 15 Jan 2025 16:03:58 +0800 Subject: [PATCH] fix: paste text can not overwrite the selection --- src/components/auto-image/single-image.less | 2 +- src/components/image-editor/index.tsx | 24 +++++---- src/components/seal-form/row-textarea.tsx | 32 +++++++++++- .../components/deploy-builtin-modal.tsx | 49 +++++-------------- .../components/ground-embedding.tsx | 17 ++++++- .../playground/components/ground-reranker.tsx | 16 +++++- .../playground/components/input-list.tsx | 10 +++- 7 files changed, 94 insertions(+), 56 deletions(-) diff --git a/src/components/auto-image/single-image.less b/src/components/auto-image/single-image.less index c42fa66f..56639a24 100644 --- a/src/components/auto-image/single-image.less +++ b/src/components/auto-image/single-image.less @@ -24,7 +24,7 @@ display: flex; justify-content: center; align-items: center; - background-color: var(--ant-color-fill-secondary); + background-color: rgba(0, 0, 0, 30%); .ant-progress-text { color: var(--color-white-secondary); diff --git a/src/components/image-editor/index.tsx b/src/components/image-editor/index.tsx index 8769cfa4..a4ca8007 100644 --- a/src/components/image-editor/index.tsx +++ b/src/components/image-editor/index.tsx @@ -490,22 +490,20 @@ const CanvasImageEditor: React.FC = ({ await drawImage(); setImgLoaded(true); console.log('Image Loaded:', imageStatus, strokesRef.current); - // if (strokeCache.current[imguid]) { - // strokesRef.current = strokeCache.current[imguid]; - // } else if (preImguid.current !== imguid) { - // strokeCache.current[preImguid.current] = strokesRef.current; - // onReset(); - // resetCanvas(); - // preImguid.current = imguid; - // } - - if (imageStatus.isOriginal) { - redrawStrokes(strokesRef.current, 'initialize'); - } else if (imageStatus.isResetNeeded) { + if (strokeCache.current[imguid]) { + strokeCache.current[preImguid.current] = strokesRef.current; + strokesRef.current = strokeCache.current[imguid]; + } else if (preImguid.current !== imguid) { + strokeCache.current[preImguid.current] = strokesRef.current; onReset(); resetCanvas(); } - }, [drawImage, onReset, redrawStrokes, imageStatus]); + preImguid.current = imguid; + + if (strokesRef.current.length) { + redrawStrokes(strokesRef.current); + } + }, [drawImage, onReset, redrawStrokes, imguid, imageStatus]); const updateZoom = (scaleChange: number, mouseX: number, mouseY: number) => { const newScale = _.round(autoScale.current + scaleChange, 2); diff --git a/src/components/seal-form/row-textarea.tsx b/src/components/seal-form/row-textarea.tsx index 87fc1eb5..2609cb36 100644 --- a/src/components/seal-form/row-textarea.tsx +++ b/src/components/seal-form/row-textarea.tsx @@ -13,10 +13,24 @@ interface SystemMessageProps { height?: number; onChange: (e: any) => void; onPaste?: (e: any) => void; + onSelect?: (data: { + start: number; + end: number; + beforeText: string; + afterText: string; + }) => void; } const RowTextarea: React.FC = (props) => { - const { value, onChange, style, label, placeholder, height = 46 } = props; + const { + value, + onChange, + onSelect, + style, + label, + placeholder, + height = 46 + } = props; const intl = useIntl(); const rowTextAreaRef = React.useRef(null); const [autoSize, setAutoSize] = useState<{ @@ -57,6 +71,21 @@ const RowTextarea: React.FC = (props) => { props.onPaste?.(e); }; + const handleOnSelect = (e: any) => { + e.stopPropagation(); + const start = e.target.selectionStart; + const end = e.target.selectionEnd; + + const beforeText = value.substring(0, start); + const afterText = value.substring(end, value.length); + onSelect?.({ + start, + end, + beforeText, + afterText + }); + }; + return (
= (props) => { onBlur={handleBlur} allowClear={false} onChange={handleOnChange} + onSelect={handleOnSelect} onPaste={handleOnPaste} >
diff --git a/src/pages/llmodels/components/deploy-builtin-modal.tsx b/src/pages/llmodels/components/deploy-builtin-modal.tsx index 79ae2a69..cb4cc288 100644 --- a/src/pages/llmodels/components/deploy-builtin-modal.tsx +++ b/src/pages/llmodels/components/deploy-builtin-modal.tsx @@ -9,7 +9,6 @@ import { queryCatalogItemSpec } from '../apis'; import { backendOptionsMap, modelCategoriesMap, - modelSourceMap, sourceOptions } from '../config'; import { CatalogSpec, FormData, ListItem } from '../config/types'; @@ -51,7 +50,7 @@ const quantiCapitMap: Record = { }; const defaultQuant = ['Q4_K_M']; -const EmbeddingRerankFirstQuant = ['FP16']; +const EmbeddingRerankFirstQuant = ['FP16', 'F16']; const AddModal: React.FC = (props) => { const { title, @@ -85,39 +84,9 @@ const AddModal: React.FC = (props) => { data.category === modelCategoriesMap.embedding || data.category === modelCategoriesMap.reranker ) { - return EmbeddingRerankFirstQuant.includes(data.quantOption); + return EmbeddingRerankFirstQuant.includes(_.toUpper(data.quantOption)); } - return defaultQuant.includes(data.quantOption); - }; - - const getModelFile = (spec: CatalogSpec) => { - let modelInfo = {}; - if (spec.source === modelSourceMap.huggingface_value) { - modelInfo = { - huggingface_repo_id: spec?.huggingface_repo_id, - huggingface_filename: spec?.huggingface_filename - }; - } - - if (spec.source === modelSourceMap.modelscope_value) { - modelInfo = { - model_scope_model_id: spec?.model_scope_model_id, - model_scope_file_path: spec?.model_scope_file_path - }; - } - - if (spec.source === modelSourceMap.ollama_library_value) { - modelInfo = { - ollama_library_model_name: spec?.ollama_library_model_name - }; - } - - if (spec.source === modelSourceMap.local_path_value) { - modelInfo = { - local_path: spec?.local_path - }; - } - return modelInfo; + return defaultQuant.includes(_.toUpper(data.quantOption)); }; const getModelSpec = (data: { @@ -190,7 +159,8 @@ const AddModal: React.FC = (props) => { const quantizationList = _.map(sizeGroup, (item: CatalogSpec) => { return { - label: quantiCapitMap[item.quantization] ?? item.quantization, + label: + quantiCapitMap[item.quantization] ?? _.toUpper(item.quantization), value: item.quantization }; }); @@ -304,9 +274,12 @@ const AddModal: React.FC = (props) => { return groupList[item.value]; }); - const list72B = _.filter(res.items, (item: CatalogSpec) => { - return item.size === 72; - }); + const list72B = + _.toLower(current.name) === 'qwen2.5' + ? _.filter(res.items, (item: CatalogSpec) => { + return item.size === 72; + }) + : []; let defaultSpec: any = {}; diff --git a/src/pages/playground/components/ground-embedding.tsx b/src/pages/playground/components/ground-embedding.tsx index 7041a87d..4c0aed0b 100644 --- a/src/pages/playground/components/ground-embedding.tsx +++ b/src/pages/playground/components/ground-embedding.tsx @@ -85,6 +85,7 @@ const GroundEmbedding: React.FC = forwardRef((props, ref) => { }); const [lessTwoInput, setLessTwoInput] = useState(false); const multiplePasteEnable = useRef(true); + const selectionTextRef = useRef(null); const [textList, setTextList] = useState< { text: string; uid: number | string; name: string }[] @@ -303,6 +304,19 @@ const GroundEmbedding: React.FC = forwardRef((props, ref) => { setTextList(list); }; + const handleonSelect = useCallback( + (data: { + start: number; + end: number; + beforeText: string; + afterText: string; + index: number; + }) => { + selectionTextRef.current = data; + }, + [] + ); + const handleOnPaste = useCallback( (e: any, index: number) => { if (!multiplePasteEnable.current) return; @@ -316,7 +330,7 @@ const GroundEmbedding: React.FC = forwardRef((props, ref) => { name: '' }; }); - dataLlist[0].text = currentContent + dataLlist[0].text; + dataLlist[0].text = `${selectionTextRef.current?.beforeText || ''}${dataLlist[0].text}${selectionTextRef.current?.afterText || ''}`; const result = [ ...textList.slice(0, index), ...dataLlist, @@ -527,6 +541,7 @@ const GroundEmbedding: React.FC = forwardRef((props, ref) => { ref={inputListRef} textList={textList} onChange={handleTextListChange} + onSelect={handleonSelect} onPaste={handleOnPaste} >
diff --git a/src/pages/playground/components/ground-reranker.tsx b/src/pages/playground/components/ground-reranker.tsx index c6086329..55dfae09 100644 --- a/src/pages/playground/components/ground-reranker.tsx +++ b/src/pages/playground/components/ground-reranker.tsx @@ -124,6 +124,7 @@ const GroundReranker: React.FC = forwardRef((props, ref) => { ]); const [sortIndexMap, setSortIndexMap] = useState([]); const [queryValue, setQueryValue] = useState(''); + const selectionTextRef = useRef(null); const { initialize, updateScrollerPosition: updateDocumentScrollerPosition } = useOverlayScroller(); @@ -364,6 +365,19 @@ const GroundReranker: React.FC = forwardRef((props, ref) => { [] ); + const handleonSelect = useCallback( + (data: { + start: number; + end: number; + beforeText: string; + afterText: string; + index: number; + }) => { + selectionTextRef.current = data; + }, + [] + ); + const handleOnPaste = useCallback( (e: any, index: number) => { if (!multiplePasteEnable.current) return; @@ -377,7 +391,7 @@ const GroundReranker: React.FC = forwardRef((props, ref) => { name: '' }; }); - dataLlist[0].text = currentContent + dataLlist[0].text; + dataLlist[0].text = `${selectionTextRef.current?.beforeText || ''}${dataLlist[0].text}${selectionTextRef.current?.afterText || ''}`; const result = [ ...textList.slice(0, index), ...dataLlist, diff --git a/src/pages/playground/components/input-list.tsx b/src/pages/playground/components/input-list.tsx index 57698309..e882c3ff 100644 --- a/src/pages/playground/components/input-list.tsx +++ b/src/pages/playground/components/input-list.tsx @@ -31,6 +31,12 @@ interface InputListProps { onSort?: ( textList: { text: string; uid: number | string; name: string }[] ) => void; + onSelect?: (data: { + start: number; + end: number; + beforeText: string; + afterText: string; + }) => void; } const InputList: React.FC = forwardRef( @@ -44,7 +50,8 @@ const InputList: React.FC = forwardRef( onSort, onChange, extra, - onPaste + onPaste, + onSelect }, ref ) => { @@ -244,6 +251,7 @@ const InputList: React.FC = forwardRef( })} onChange={(e) => handleTextChange(e.target.value, text)} onPaste={(e) => onPaste?.(e, index)} + onSelect={(data) => onSelect?.({ ...data, index })} >