Merge pull request #37 from covespace/history_message_handler

handle devchat log
This commit is contained in:
boob.yang 2023-05-09 20:49:21 +08:00 committed by GitHub
commit a11b38c5a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 66 additions and 4 deletions

View File

@ -30,6 +30,16 @@
],
"description": "Select whose llm to use."
},
"DevChat.maxLogCount": {
"type": "number",
"default": 20,
"description": "Limit the number of prompts to output"
},
"DevChat.logSkip": {
"type": "number",
"default": 0,
"description": "Skip number prompts before showing the prompt history"
},
"DevChat.OpenAI.model": {
"type": "string",
"default": "gpt-4",

View File

@ -1,13 +1,55 @@
import * as vscode from 'vscode';
import DevChat, { LogOptions } from '../toolwrapper/devchat';
import DevChat, { LogOptions, LogEntry } from '../toolwrapper/devchat';
import { MessageHandler } from './messageHandler';
import messageHistory from '../util/messageHistory';
interface LoadHistoryMessages {
command: string;
entries: Array<LogEntry>;
}
export async function historyMessages(message: any, panel: vscode.WebviewPanel): Promise<void> {
const devChat = new DevChat();
const logOptions: LogOptions = message.options || {};
const logEntries = await devChat.log(logOptions);
MessageHandler.sendMessage(panel, { command: 'loadHistoryMessages', entries: logEntries });
const logEntriesFlat = logEntries.flat();
// TODO handle context
const logEntriesFlatFiltered = logEntriesFlat.map((entry) => {
return {
date: entry.date,
hash: entry.hash,
request: entry.request,
text: entry.response,
user: entry.user,
parent_hash: '',
};
});
for (let i = 0; i < logEntriesFlat.length; i++) {
let entryOld = logEntriesFlat[i];
let entryNew = {
date: entryOld.date,
hash: entryOld.hash,
request: entryOld.request,
text: entryOld.response,
user: entryOld.user,
parent_hash: '',
};
if (i > 0) {
entryNew.parent_hash = logEntriesFlat[i - 1].hash;
}
messageHistory.add(panel, entryNew);
}
const loadHistoryMessages: LoadHistoryMessages = {
command: 'loadHistoryMessages',
entries: logEntriesFlat,
};
MessageHandler.sendMessage(panel, loadHistoryMessages);
return;
}

View File

@ -31,7 +31,10 @@ export interface LogEntry {
date: string;
request: string;
response: string;
context: string[];
context: Array<{
content: string;
role: string;
}>;
}
export interface ChatResponse {
@ -231,9 +234,15 @@ class DevChat {
if (options.skip) {
args.push('--skip', `${options.skip}`);
} else {
const skipLogCount = vscode.workspace.getConfiguration('DevChat').get('logSkip');
args.push('--skip', `${skipLogCount}`);
}
if (options.maxCount) {
args.push('--max-count', `${options.maxCount}`);
} else {
const maxLogCount = vscode.workspace.getConfiguration('DevChat').get('maxLogCount');
args.push('--max-count', `${maxLogCount}`);
}
const workspaceDir = vscode.workspace.workspaceFolders?.[0].uri.fsPath;
@ -256,7 +265,8 @@ class DevChat {
return [];
}
return JSON.parse(stdout.trim());
const stdoutNew = "[" + stdout.replace(/\}\n\]\n\[\n \{\n/g, "}\n],\n[\n {\n") + "]";
return JSON.parse(stdoutNew.trim());
} catch (error) {
logger.channel()?.error(`Error getting log: ${error}`);
logger.channel()?.show();