Merge pull request #139 from covespace/history_in_page

Refactor historyMessages and historyMessagesBase
This commit is contained in:
boob.yang 2023-06-02 11:16:20 +08:00 committed by GitHub
commit 8678183865
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 9 deletions

View File

@ -1,14 +1,25 @@
import * as vscode from 'vscode';
import { MessageHandler } from './messageHandler';
import { regInMessage, regOutMessage } from '../util/reg_messages';
import { historyMessagesBase, onApiKeyBase } from './historyMessagesBase';
import { historyMessagesBase, LoadHistoryMessages, loadTopicHistoryFromCurrentMessageHistory, onApiKeyBase } from './historyMessagesBase';
import messageHistory from '../util/messageHistory';
import { TopicManager } from '../topic/topicManager';
import { UiUtilWrapper } from '../util/uiUtil';
regInMessage({command: 'historyMessages', options: { skip: 0, maxCount: 0 }});
regInMessage({command: 'historyMessages', page: 0});
regOutMessage({command: 'loadHistoryMessages', entries: [{hash: '',user: '',date: '',request: '',response: '',context: [{content: '',role: ''}]}]});
export async function historyMessages(message: any, panel: vscode.WebviewPanel|vscode.WebviewView): Promise<void> {
const historyMessage = await historyMessagesBase();
export async function historyMessages(message: {command: string, page: number}, panel: vscode.WebviewPanel|vscode.WebviewView): Promise<void> {
// if history message has load, send it to webview
const maxCount = Number(UiUtilWrapper.getConfiguration('DevChat', 'maxLogCount'));
const skip = maxCount * (message.page ? message.page : 0);
if (messageHistory.getTopic() !== TopicManager.getInstance().currentTopicId) {
await historyMessagesBase();
}
const historyMessage = loadTopicHistoryFromCurrentMessageHistory(skip, maxCount);
if (historyMessage) {
MessageHandler.sendMessage(panel, historyMessage);
}

View File

@ -8,7 +8,7 @@ import { logger } from '../util/logger';
let isApiSet: boolean | undefined = undefined;
interface LoadHistoryMessages {
export interface LoadHistoryMessages {
command: string;
entries: Array<LogEntry>;
}
@ -77,6 +77,7 @@ export async function loadTopicHistoryLogs() : Promise<Array<LogEntry> | undefin
export function updateCurrentMessageHistory(logEntries: Array<LogEntry>): void {
messageHistory.clear();
messageHistory.setTopic(TopicManager.getInstance().currentTopicId!);
for (let i = 0; i < logEntries.length; i++) {
let entryOld = logEntries[i];
@ -86,15 +87,35 @@ export function updateCurrentMessageHistory(logEntries: Array<LogEntry>): void {
request: entryOld.request,
text: entryOld.response,
user: entryOld.user,
parentHash: '',
parentHash: entryOld.parent,
context: entryOld.context,
};
if (i > 0) {
entryNew.parentHash = logEntries[i - 1].hash;
}
messageHistory.add(entryNew);
}
}
export function loadTopicHistoryFromCurrentMessageHistory(skip: number, count: number): LoadHistoryMessages {
const logEntries = messageHistory.getList();
const newEntries = logEntries.map((entry) => {
return {
hash: entry.hash,
parent: entry.parentHash,
user: entry.user,
date: entry.date,
request: entry.request,
response: entry.text,
context: entry.context,
} as LogEntry;
});
const logEntriesFlat = newEntries.reverse().slice(skip, skip + count).reverse();
return {
command: 'loadHistoryMessages',
entries: logEntriesFlat,
} as LoadHistoryMessages;
}
export async function apiKeyInvalidMessage(): Promise<LoadHistoryMessages|undefined> {
const apiKey = await ApiKeyManager.getApiKey();
isApiSet = true;

View File

@ -2,10 +2,20 @@
export class MessageHistory {
private history: any[];
private lastmessage: any | null;
private topic: string | null;
constructor() {
this.history = [];
this.lastmessage = null;
this.topic = null;
}
setTopic(topic: string) {
this.topic = topic;
}
getTopic() {
return this.topic;
}
add(message: any) {
@ -13,6 +23,10 @@ export class MessageHistory {
this.lastmessage = message;
}
getList() {
return this.history;
}
find(hash: string) {
return this.history.find(message => message.hash === hash);
}