UNPKG

organ-ai-zer

Version:

AI-powered file organizer CLI tool

95 lines 3.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAIProvider = void 0; const openai_1 = __importDefault(require("openai")); const base_ai_provider_1 = require("./base-ai-provider"); const zod_1 = require("openai/helpers/zod"); class OpenAIProvider extends base_ai_provider_1.BaseAIProvider { constructor(config) { super(config); this.client = new openai_1.default({ apiKey: this.apiKey, timeout: this.timeout }); } getDefaultModel() { return 'gpt-4o'; } async generateResponse(context, schema) { try { const response = await this.client.responses.parse({ model: this.model, input: context.getMessages(), text: { format: (0, zod_1.zodTextFormat)(schema, 'result') } }); // const response = testResponse; const result = response.output_parsed; if (!result) { throw new Error('No response content from OpenAI'); } const parsedResponse = result; // Map the file objects back to the suggestions // parsedResponse.suggestions = parsedResponse.suggestions.map((suggestion, index) => { // const originalFile = request.files.find(f => f.name === suggestion.suggestedPath.split('/').pop()); // return { // ...suggestion, // file: originalFile || request.files[index] || request.files[0] // }; // }); return parsedResponse; } catch (error) { if (error instanceof Error) { throw new Error(`OpenAI API error: ${error.message}`); } throw new Error(`OpenAI API error: ${error}`); } } async analyzeFiles(request) { try { const prompt = this.buildPrompt(request); const completion = await this.client.chat.completions.create({ model: this.model, messages: [ { role: 'system', content: 'You are an expert file organization assistant. Always respond with valid JSON only.' }, { role: 'user', content: prompt } ], max_tokens: this.maxTokens, temperature: this.temperature }); const content = completion.choices[0]?.message?.content; if (!content) { throw new Error('No response content from OpenAI'); } const parsedResponse = this.parseAIResponse(content); // Map the file objects back to the suggestions parsedResponse.suggestions = parsedResponse.suggestions.map((suggestion, index) => { const originalFile = request.files.find(f => f.name === suggestion.suggestedPath.split('/').pop()); return { ...suggestion, file: originalFile || request.files[index] || request.files[0] }; }); return parsedResponse; } catch (error) { if (error instanceof Error) { throw new Error(`OpenAI API error: ${error.message}`); } throw new Error(`OpenAI API error: ${error}`); } } } exports.OpenAIProvider = OpenAIProvider; //# sourceMappingURL=openai-provider.js.map