mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-20 08:47:44 +00:00
Fix several bugs in prompt history (#734)
Co-authored-by: Marat Boshernitsan <maratb@google.com>
This commit is contained in:
committed by
GitHub
parent
c313762ba0
commit
7de790fbf2
@@ -138,4 +138,65 @@ describe('useHistoryManager', () => {
|
||||
|
||||
expect(result.current.history).toEqual([]);
|
||||
});
|
||||
|
||||
it('should not add consecutive duplicate user messages', () => {
|
||||
const { result } = renderHook(() => useHistory());
|
||||
const timestamp = Date.now();
|
||||
const itemData1: Omit<HistoryItem, 'id'> = {
|
||||
type: 'user', // Replaced HistoryItemType.User
|
||||
text: 'Duplicate message',
|
||||
};
|
||||
const itemData2: Omit<HistoryItem, 'id'> = {
|
||||
type: 'user', // Replaced HistoryItemType.User
|
||||
text: 'Duplicate message',
|
||||
};
|
||||
const itemData3: Omit<HistoryItem, 'id'> = {
|
||||
type: 'gemini', // Replaced HistoryItemType.Gemini
|
||||
text: 'Gemini response',
|
||||
};
|
||||
const itemData4: Omit<HistoryItem, 'id'> = {
|
||||
type: 'user', // Replaced HistoryItemType.User
|
||||
text: 'Another user message',
|
||||
};
|
||||
|
||||
act(() => {
|
||||
result.current.addItem(itemData1, timestamp);
|
||||
result.current.addItem(itemData2, timestamp + 1); // Same text, different timestamp
|
||||
result.current.addItem(itemData3, timestamp + 2);
|
||||
result.current.addItem(itemData4, timestamp + 3);
|
||||
});
|
||||
|
||||
expect(result.current.history).toHaveLength(3);
|
||||
expect(result.current.history[0].text).toBe('Duplicate message');
|
||||
expect(result.current.history[1].text).toBe('Gemini response');
|
||||
expect(result.current.history[2].text).toBe('Another user message');
|
||||
});
|
||||
|
||||
it('should add duplicate user messages if they are not consecutive', () => {
|
||||
const { result } = renderHook(() => useHistory());
|
||||
const timestamp = Date.now();
|
||||
const itemData1: Omit<HistoryItem, 'id'> = {
|
||||
type: 'user', // Replaced HistoryItemType.User
|
||||
text: 'Message 1',
|
||||
};
|
||||
const itemData2: Omit<HistoryItem, 'id'> = {
|
||||
type: 'gemini', // Replaced HistoryItemType.Gemini
|
||||
text: 'Gemini response',
|
||||
};
|
||||
const itemData3: Omit<HistoryItem, 'id'> = {
|
||||
type: 'user', // Replaced HistoryItemType.User
|
||||
text: 'Message 1', // Duplicate text, but not consecutive
|
||||
};
|
||||
|
||||
act(() => {
|
||||
result.current.addItem(itemData1, timestamp);
|
||||
result.current.addItem(itemData2, timestamp + 1);
|
||||
result.current.addItem(itemData3, timestamp + 2);
|
||||
});
|
||||
|
||||
expect(result.current.history).toHaveLength(3);
|
||||
expect(result.current.history[0].text).toBe('Message 1');
|
||||
expect(result.current.history[1].text).toBe('Gemini response');
|
||||
expect(result.current.history[2].text).toBe('Message 1');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -43,8 +43,22 @@ export function useHistory(): UseHistoryManagerReturn {
|
||||
(itemData: Omit<HistoryItem, 'id'>, baseTimestamp: number): number => {
|
||||
const id = getNextMessageId(baseTimestamp);
|
||||
const newItem: HistoryItem = { ...itemData, id } as HistoryItem;
|
||||
setHistory((prevHistory) => [...prevHistory, newItem]);
|
||||
return id; // Return the generated ID
|
||||
|
||||
setHistory((prevHistory) => {
|
||||
if (prevHistory.length > 0) {
|
||||
const lastItem = prevHistory[prevHistory.length - 1];
|
||||
// Prevent adding duplicate consecutive user messages
|
||||
if (
|
||||
lastItem.type === 'user' &&
|
||||
newItem.type === 'user' &&
|
||||
lastItem.text === newItem.text
|
||||
) {
|
||||
return prevHistory; // Don't add the duplicate
|
||||
}
|
||||
}
|
||||
return [...prevHistory, newItem];
|
||||
});
|
||||
return id; // Return the generated ID (even if not added, to keep signature)
|
||||
},
|
||||
[getNextMessageId],
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user