UNPKG

ai-code-writer

Version:

An AI code writer application using OpenAI APIs for audio transcription and chat completion.

110 lines (109 loc) 5.91 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ChatMessageEntity_1 = __importDefault(require("../../ChatMessageEntity")); class ConversationUseCase { constructor(conversationStorage, conversationLogger, systemPromptService, fileCollectorService, stateStorage, config, conversationRunner, fileTask) { this.conversationStorage = conversationStorage; this.conversationLogger = conversationLogger; this.systemPromptService = systemPromptService; this.fileCollectorService = fileCollectorService; this.stateStorage = stateStorage; this.config = config; this.conversationRunner = conversationRunner; this.fileTask = fileTask; } initialize() { return __awaiter(this, void 0, void 0, function* () { const conversationHistory = yield this.conversationStorage.loadConversation(); if (conversationHistory.length != 0) return; const systemPrompt = new ChatMessageEntity_1.default(); systemPrompt.role = 'system'; systemPrompt.content = this.systemPromptService.getSystemPrompt(this.config.magicWord); conversationHistory.push(systemPrompt); yield this.conversationStorage.saveConversation(conversationHistory); }); } addProjectFiles() { return __awaiter(this, void 0, void 0, function* () { const conversationHistory = yield this.conversationStorage.loadConversation(); const filesContents = yield this.fileCollectorService.collectFiles(); this.fileTask.addFileListToInitialConversation(filesContents, conversationHistory); yield this.conversationStorage.saveConversation(conversationHistory); }); } addUserMessageToConversation(request) { return __awaiter(this, void 0, void 0, function* () { if (this.stateStorage.getSuspendMode()) { this.conversationStorage.setSuspendTranscription(request.transcription); return; } yield this.addCommonUserMessage(request); }); } continueConversation(response) { return __awaiter(this, void 0, void 0, function* () { yield this.conversationRunner.continueConversation(response); }); } addToConversationHistory(request) { return __awaiter(this, void 0, void 0, function* () { if (this.stateStorage.getSuspendMode()) return; const conversationHistory = yield this.conversationStorage.loadConversation(); this.fileTask.removeOldFileFromHistory(conversationHistory, request.fileName); const messageItem = new ChatMessageEntity_1.default(); messageItem.callId = request.callId; messageItem.role = request.role; messageItem.content = request.content; messageItem.filePath = request.fileName; const indexOfRelatedMessage = conversationHistory.findIndex(m => m.toolCalls.findIndex(tc => tc.id == request.callId) !== -1); if (indexOfRelatedMessage == -1 || indexOfRelatedMessage + 1 >= conversationHistory.length) conversationHistory.push(messageItem); else conversationHistory.splice(indexOfRelatedMessage + 1, 0, messageItem); yield this.conversationLogger.logConversation(messageItem); yield this.conversationStorage.saveConversation(conversationHistory); }); } addCommonUserMessage(request) { return __awaiter(this, void 0, void 0, function* () { const conversationHistory = yield this.conversationStorage.loadConversation(); const userRequestMessage = new ChatMessageEntity_1.default(); userRequestMessage.role = request.role; userRequestMessage.content = request.transcription; conversationHistory.push(userRequestMessage); yield this.conversationLogger.logConversation(userRequestMessage); yield this.conversationStorage.saveConversation(conversationHistory); }); } wakeUpConversation() { return __awaiter(this, void 0, void 0, function* () { const conversationHistory = yield this.conversationStorage.loadConversation(); const systemMessage = new ChatMessageEntity_1.default(); systemMessage.content = 'User waked you up.'; systemMessage.role = 'system'; conversationHistory.push(systemMessage); yield this.conversationLogger.logConversation(systemMessage); const userMessage = new ChatMessageEntity_1.default(); userMessage.content = this.conversationStorage.getSuspendTranscription(); userMessage.role = 'user'; conversationHistory.push(userMessage); yield this.conversationLogger.logConversation(userMessage); yield this.conversationStorage.saveConversation(conversationHistory); }); } } exports.default = ConversationUseCase;