organ-ai-zer
Version:
AI-powered file organizer CLI tool
302 lines • 10.2 kB
JavaScript
;
// import { ZodSchema } from 'zod';
// import { ConversationConfig, ConversationMessage, MessageRole } from '../types';
// import { BaseAIProvider } from './ai-providers/base-ai-provider';
// import { ConversationContext } from './conversation-context';
// /**
// * Generic AI Conversation Context Manager
// * Handles conversations with AI providers for any subject matter
// */
// export class AIConversationContext {
// private context: ConversationContext;
// private aiProvider: BaseAIProvider;
// constructor(
// aiProvider: BaseAIProvider,
// subject: string,
// config: Partial<ConversationConfig> = {}
// ) {
// this.aiProvider = aiProvider;
// this.context = {
// id: this.generateId(),
// subject,
// state: 'active',
// messages: [],
// config: {
// maxTurns: 10,
// keepFullHistory: true,
// maxContextSize: 8000,
// temperature: 0.7,
// ...config
// },
// createdAt: new Date(),
// updatedAt: new Date(),
// turnCount: 0
// };
// // Add system prompt if provided
// if (config.systemPrompt) {
// this.addMessage('system', config.systemPrompt);
// }
// }
// /**
// * Get current conversation context
// */
// getContext(): ConversationContext {
// return { ...this.context };
// }
// /**
// * Get conversation ID
// */
// getId(): string {
// return this.context.id;
// }
// /**
// * Get conversation state
// */
// getState(): ConversationContext['state'] {
// return this.context.state;
// }
// /**
// * Set conversation state
// */
// setState(state: ConversationContext['state']): void {
// this.context.state = state;
// this.context.updatedAt = new Date();
// }
// /**
// * Add a message to the conversation
// */
// addMessage(role: MessageRole, content: string, metadata?: Record<string, any>): void {
// const message: ConversationMessage = {
// role,
// content,
// };
// this.context.messages.push(message);
// this.context.updatedAt = new Date();
// // Trim context if it gets too large
// if (this.context.config.maxContextSize) {
// this.trimContext();
// }
// }
// /**
// * Add user message
// */
// addUserMessage(content: string, metadata?: Record<string, any>): void {
// this.addMessage('user', content, metadata);
// }
// /**
// * Add assistant message
// */
// addAssistantMessage(content: string, metadata?: Record<string, any>): void {
// this.addMessage('assistant', content, metadata);
// }
// /**
// * Get all messages
// */
// getMessages(): ConversationMessage[] {
// return [...this.context.messages];
// }
// /**
// * Get messages by role
// */
// getMessagesByRole(role: MessageRole): ConversationMessage[] {
// return this.context.messages.filter(msg => msg.role === role);
// }
// /**
// * Get the last N messages
// */
// getRecentMessages(count: number): ConversationMessage[] {
// return this.context.messages.slice(-count);
// }
// /**
// * Set custom context data
// */
// setCustomContext(key: string, value: any): void {
// this.context.customContext[key] = value;
// this.context.updatedAt = new Date();
// }
// /**
// * Get custom context data
// */
// getCustomContext<T = any>(key: string): T | undefined {
// return this.context.customContext[key];
// }
// /**
// * Get all custom context
// */
// getAllCustomContext(): Record<string, any> {
// return { ...this.context.customContext };
// }
// /**
// * Send a message and get AI response
// */
// // async sendMessage(userMessage: string, metadata?: Record<string, any>): Promise<ConversationResult> {
// // if (this.context.state !== 'active') {
// // throw new Error(`Cannot send message in ${this.context.state} state`);
// // }
// // if (this.context.turnCount >= this.context.config.maxTurns) {
// // this.setState('failed');
// // throw new Error('Maximum conversation turns exceeded');
// // }
// // // Add user message
// // this.addUserMessage(userMessage, metadata);
// // this.context.turnCount++;
// // try {
// // // Build prompt from conversation history
// // const prompt = this.buildPrompt();
// // this.addUserMessage(prompt);
// // // Get AI response using the existing AI provider interface
// // const response = await this.aiProvider.analyzeFiles({
// // files: [],
// // baseDirectory: '',
// // existingStructure: [],
// // userPreferences: {
// // customPrompt: prompt,
// // temperature: this.context.config.temperature,
// // ...this.context.config.aiSettings
// // }
// // }, this.context);
// // const aiResponse = response.reasoning || 'No response generated';
// // // Add assistant response
// // this.addAssistantMessage(aiResponse, {
// // confidence: 0.8,
// // suggestions: response.suggestions?.length || 0
// // });
// // // Parse the response for structured data
// // const result: ConversationResult = {
// // response: aiResponse,
// // needsInput: response.clarificationNeeded ? true : false,
// // questions: response.clarificationNeeded?.questions,
// // confidence: 0.8,
// // metadata: {
// // turnCount: this.context.turnCount,
// // timestamp: new Date()
// // }
// // };
// // // Try to parse JSON data if present
// // try {
// // const jsonMatch = aiResponse.match(/\{[\s\S]*\}/);
// // if (jsonMatch) {
// // result.data = JSON.parse(jsonMatch[0]);
// // }
// // } catch (e) {
// // // No structured data, that's fine
// // }
// // return result;
// // } catch (error) {
// // this.setState('failed');
// // throw new Error(`Conversation failed: ${error}`);
// // }
// // }
// /**
// * Continue conversation with custom prompt
// */
// async continueWithPrompt(analysisRequest: AIAnalysisRequest): Promise<AIAnalysisResponse> {
// try {
// this.addUserMessage(analysisRequest.userPreferences.customPrompt);
// const response = await this.aiProvider.generateResponse(analysisRequest, this.context, analysisRequest.responseSchema);
// const aiResponse = response.reasoning || 'No response generated';
// this.addAssistantMessage(aiResponse, {
// customPrompt: true,
// confidence: 0.8
// });
// return response;
// } catch (error) {
// throw new Error(`Custom prompt failed: ${error}`);
// }
// }
// /**
// * Reset conversation to start fresh
// */
// reset(keepSystemPrompt: boolean = true): void {
// const systemMessages = keepSystemPrompt ?
// this.context.messages.filter(msg => msg.role === 'system') : [];
// this.context.messages = systemMessages;
// this.context.customContext = {};
// this.context.turnCount = 0;
// this.context.state = 'active';
// this.context.updatedAt = new Date();
// }
// /**
// * Complete the conversation
// */
// complete(): void {
// this.setState('complete');
// }
// /**
// * Pause the conversation
// */
// pause(): void {
// this.setState('paused');
// }
// /**
// * Resume the conversation
// */
// resume(): void {
// if (this.context.state === 'paused') {
// this.setState('active');
// }
// }
// /**
// * Export conversation data
// */
// export(): ConversationContext {
// return { ...this.context };
// }
// /**
// * Import conversation data
// */
// static import(data: ConversationContext, aiProvider: BaseAIProvider): AIConversationContext {
// const instance = new AIConversationContext(aiProvider, data.subject, data.config);
// instance.context = { ...data };
// return instance;
// }
// /**
// * Build prompt from conversation history
// */
// private buildPrompt(): string {
// if (this.context.config.systemPrompt) {
// // Use custom system prompt
// const messages = this.context.messages
// .filter(msg => msg.role !== 'system')
// .map(msg => `${msg.role.toUpperCase()}: ${msg.content}`)
// .join('\n\n');
// return `${this.context.config.systemPrompt}\n\nCONVERSATION:\n${messages}\n\nPlease respond as the assistant.`;
// }
// // Default conversation format
// return this.context.messages
// .map(msg => `${msg.role.toUpperCase()}: ${msg.content}`)
// .join('\n\n') + '\n\nASSISTANT:';
// }
// /**
// * Trim conversation context if it gets too large
// */
// private trimContext(): void {
// const maxSize = this.context.config.maxContextSize!;
// const currentSize = this.context.messages.reduce((size, msg) => size + msg.content.length, 0);
// if (currentSize > maxSize) {
// // Keep system messages and recent messages
// const systemMessages = this.context.messages.filter(msg => msg.role === 'system');
// const otherMessages = this.context.messages.filter(msg => msg.role !== 'system');
// // Keep the most recent messages that fit within the limit
// let size = systemMessages.reduce((s, msg) => s + msg.content.length, 0);
// const recentMessages: ConversationMessage[] = [];
// for (let i = otherMessages.length - 1; i >= 0; i--) {
// const msg = otherMessages[i];
// if (size + msg.content.length <= maxSize) {
// recentMessages.unshift(msg);
// size += msg.content.length;
// } else {
// break;
// }
// }
// this.context.messages = [...systemMessages, ...recentMessages];
// }
// }
// /**
// * Generate unique conversation ID
// */
// private generateId(): string {
// return `conv_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
// }
// }
//# sourceMappingURL=ai-conversation-context.js.map