organ-ai-zer
Version:
AI-powered file organizer CLI tool
95 lines • 3.76 kB
JavaScript
;
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