organ-ai-zer
Version:
AI-powered file organizer CLI tool
58 lines • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Conversation = void 0;
const conversation_context_1 = require("./conversation-context");
/**
* Generic AI Conversation
*/
class Conversation {
constructor(aiProvider, subject, config = {}) {
this.aiProvider = aiProvider;
this.context = new conversation_context_1.ConversationContext(subject, config);
}
async continueWithPrompt(analysisRequest) {
if (this.context.getState() !== 'active') {
throw new Error(`Cannot send message in ${this.context.getState()} state`);
}
if (this.context.getTurnCount() >= this.context.getConfig().maxTurns) {
this.context.setState('failed');
throw new Error('Maximum conversation turns exceeded');
}
this.context.addUserMessage(analysisRequest.prompt);
this.context.incrementTurnCount();
try {
if (!analysisRequest.schema) {
throw new Error('Analysis request must include a schema');
}
const response = await this.aiProvider.generateResponse(this.context, analysisRequest.schema);
const aiResponse = response.reasoning || 'No response generated';
this.context.addAssistantMessage(aiResponse);
return response;
}
catch (error) {
this.context.setState('failed');
throw new Error(`Conversation failed: ${error}`);
}
}
reset(keepSystemPrompt = true) {
const systemMessages = keepSystemPrompt ?
this.context.getMessages().filter(msg => msg.role === 'system') : [];
this.context.setMessages(systemMessages);
this.context.resetTurnCount();
this.context.setState('active');
}
complete() {
this.context.setState('complete');
}
pause() {
this.context.setState('paused');
}
resume() {
if (this.context.getState() !== 'paused') {
throw new Error('Cannot resume conversation that is not paused');
}
this.context.setState('active');
}
}
exports.Conversation = Conversation;
//# sourceMappingURL=conversation.js.map