fix: paste text can not overwrite the selection
This commit is contained in:
@@ -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<string, string> = {
|
||||
};
|
||||
|
||||
const defaultQuant = ['Q4_K_M'];
|
||||
const EmbeddingRerankFirstQuant = ['FP16'];
|
||||
const EmbeddingRerankFirstQuant = ['FP16', 'F16'];
|
||||
const AddModal: React.FC<AddModalProps> = (props) => {
|
||||
const {
|
||||
title,
|
||||
@@ -85,39 +84,9 @@ const AddModal: React.FC<AddModalProps> = (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<AddModalProps> = (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<AddModalProps> = (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 = {};
|
||||
|
||||
|
||||
@@ -85,6 +85,7 @@ const GroundEmbedding: React.FC<MessageProps> = forwardRef((props, ref) => {
|
||||
});
|
||||
const [lessTwoInput, setLessTwoInput] = useState<boolean>(false);
|
||||
const multiplePasteEnable = useRef<boolean>(true);
|
||||
const selectionTextRef = useRef<any>(null);
|
||||
|
||||
const [textList, setTextList] = useState<
|
||||
{ text: string; uid: number | string; name: string }[]
|
||||
@@ -303,6 +304,19 @@ const GroundEmbedding: React.FC<MessageProps> = 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<MessageProps> = 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<MessageProps> = forwardRef((props, ref) => {
|
||||
ref={inputListRef}
|
||||
textList={textList}
|
||||
onChange={handleTextListChange}
|
||||
onSelect={handleonSelect}
|
||||
onPaste={handleOnPaste}
|
||||
></InputList>
|
||||
<div style={{ marginTop: 8 }}>
|
||||
|
||||
@@ -124,6 +124,7 @@ const GroundReranker: React.FC<MessageProps> = forwardRef((props, ref) => {
|
||||
]);
|
||||
const [sortIndexMap, setSortIndexMap] = useState<number[]>([]);
|
||||
const [queryValue, setQueryValue] = useState<string>('');
|
||||
const selectionTextRef = useRef<any>(null);
|
||||
|
||||
const { initialize, updateScrollerPosition: updateDocumentScrollerPosition } =
|
||||
useOverlayScroller();
|
||||
@@ -364,6 +365,19 @@ const GroundReranker: React.FC<MessageProps> = 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<MessageProps> = 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,
|
||||
|
||||
@@ -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<InputListProps> = forwardRef(
|
||||
@@ -44,7 +50,8 @@ const InputList: React.FC<InputListProps> = forwardRef(
|
||||
onSort,
|
||||
onChange,
|
||||
extra,
|
||||
onPaste
|
||||
onPaste,
|
||||
onSelect
|
||||
},
|
||||
ref
|
||||
) => {
|
||||
@@ -244,6 +251,7 @@ const InputList: React.FC<InputListProps> = forwardRef(
|
||||
})}
|
||||
onChange={(e) => handleTextChange(e.target.value, text)}
|
||||
onPaste={(e) => onPaste?.(e, index)}
|
||||
onSelect={(data) => onSelect?.({ ...data, index })}
|
||||
></RowTextarea>
|
||||
</div>
|
||||
<span className="btn-group">
|
||||
|
||||
Reference in New Issue
Block a user