@amirdaraee/namewise 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.github/workflows/build.yml +6 -0
  2. package/.github/workflows/publish.yml +59 -11
  3. package/.github/workflows/test.yml +1 -0
  4. package/CHANGELOG.md +102 -0
  5. package/RELEASE.md +15 -3
  6. package/dist/cli/commands.d.ts.map +1 -1
  7. package/dist/cli/commands.js +14 -7
  8. package/dist/cli/commands.js.map +1 -1
  9. package/dist/cli/rename.js +1 -1
  10. package/dist/cli/rename.js.map +1 -1
  11. package/dist/parsers/factory.d.ts +2 -1
  12. package/dist/parsers/factory.d.ts.map +1 -1
  13. package/dist/parsers/factory.js +9 -6
  14. package/dist/parsers/factory.js.map +1 -1
  15. package/dist/parsers/pdf-parser.d.ts +1 -0
  16. package/dist/parsers/pdf-parser.d.ts.map +1 -1
  17. package/dist/parsers/pdf-parser.js +20 -1
  18. package/dist/parsers/pdf-parser.js.map +1 -1
  19. package/dist/services/claude-service.d.ts.map +1 -1
  20. package/dist/services/claude-service.js +59 -65
  21. package/dist/services/claude-service.js.map +1 -1
  22. package/dist/services/lmstudio-service.d.ts.map +1 -1
  23. package/dist/services/lmstudio-service.js +16 -19
  24. package/dist/services/lmstudio-service.js.map +1 -1
  25. package/dist/services/ollama-service.d.ts +1 -0
  26. package/dist/services/ollama-service.d.ts.map +1 -1
  27. package/dist/services/ollama-service.js +61 -32
  28. package/dist/services/ollama-service.js.map +1 -1
  29. package/dist/services/openai-service.d.ts.map +1 -1
  30. package/dist/services/openai-service.js +59 -66
  31. package/dist/services/openai-service.js.map +1 -1
  32. package/dist/utils/ai-prompts.d.ts +20 -0
  33. package/dist/utils/ai-prompts.d.ts.map +1 -0
  34. package/dist/utils/ai-prompts.js +71 -0
  35. package/dist/utils/ai-prompts.js.map +1 -0
  36. package/dist/utils/pdf-to-image.d.ts +11 -0
  37. package/dist/utils/pdf-to-image.d.ts.map +1 -0
  38. package/dist/utils/pdf-to-image.js +91 -0
  39. package/dist/utils/pdf-to-image.js.map +1 -0
  40. package/eng.traineddata +0 -0
  41. package/package.json +5 -2
  42. package/src/cli/commands.ts +14 -7
  43. package/src/cli/rename.ts +1 -1
  44. package/src/parsers/factory.ts +11 -7
  45. package/src/parsers/pdf-parser.ts +22 -1
  46. package/src/services/claude-service.ts +63 -58
  47. package/src/services/lmstudio-service.ts +20 -20
  48. package/src/services/ollama-service.ts +75 -31
  49. package/src/services/openai-service.ts +63 -59
  50. package/src/utils/ai-prompts.ts +76 -0
  51. package/src/utils/pdf-to-image.ts +124 -0
  52. package/tests/integration/ai-prompting.test.ts +386 -0
  53. package/tests/integration/end-to-end.test.ts +9 -9
  54. package/tests/integration/person-name-extraction.test.ts +440 -0
  55. package/tests/unit/cli/commands.test.ts +9 -3
  56. package/tests/unit/services/lmstudio-service.test.ts +4 -4
  57. package/tests/unit/services/ollama-service.test.ts +4 -4
  58. package/tests/unit/utils/ai-prompts.test.ts +213 -0
  59. package/tests/unit/utils/pdf-to-image.test.ts +127 -0
@@ -1 +1 @@
1
- {"version":3,"file":"claude-service.js","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-service.js","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lmstudio-service.d.ts","sourceRoot":"","sources":["../../src/services/lmstudio-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AA6BzD,qBAAa,eAAgB,YAAW,UAAU;IAChD,IAAI,SAAc;IAClB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAGpB,OAAO,SAA0B,EACjC,KAAK,SAAgB;IAMjB,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,gBAAgB,SAAe,EAC/B,QAAQ,SAAY,EACpB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,MAAM,CAAC;IAgClB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,gBAAgB;YAUV,WAAW;IAqBnB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAWtC"}
1
+ {"version":3,"file":"lmstudio-service.d.ts","sourceRoot":"","sources":["../../src/services/lmstudio-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAgCzD,qBAAa,eAAgB,YAAW,UAAU;IAChD,IAAI,SAAc;IAClB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAGpB,OAAO,SAA0B,EACjC,KAAK,SAAgB;IAMjB,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,gBAAgB,SAAe,EAC/B,QAAQ,SAAY,EACpB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,MAAM,CAAC;IAyClB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,gBAAgB;YAUV,WAAW;IAqBnB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAWtC"}
@@ -1,3 +1,4 @@
1
+ import { buildFileNamePrompt, AI_SYSTEM_PROMPT } from '../utils/ai-prompts.js';
1
2
  export class LMStudioService {
2
3
  name = 'LMStudio';
3
4
  baseUrl;
@@ -8,13 +9,20 @@ export class LMStudioService {
8
9
  }
9
10
  async generateFileName(content, originalName, namingConvention = 'kebab-case', category = 'general', fileInfo) {
10
11
  try {
12
+ // Check if this is a scanned PDF image
13
+ const isScannedPDF = content.startsWith('[SCANNED_PDF_IMAGE]:');
14
+ if (isScannedPDF) {
15
+ // LM Studio has limited vision support, so we'll fall back to using the original filename
16
+ console.log('⚠️ Scanned PDF detected but LMStudio has limited vision support. Using original filename.');
17
+ return this.sanitizeFilename(originalName);
18
+ }
11
19
  const prompt = this.buildPrompt(content, originalName, namingConvention, category, fileInfo);
12
20
  const response = await this.makeRequest('/v1/chat/completions', {
13
21
  model: this.model,
14
22
  messages: [
15
23
  {
16
24
  role: 'system',
17
- content: 'You are a helpful assistant that generates descriptive filenames based on document content. Always respond with just the filename, no explanation or additional text.'
25
+ content: AI_SYSTEM_PROMPT
18
26
  },
19
27
  {
20
28
  role: 'user',
@@ -38,24 +46,13 @@ export class LMStudioService {
38
46
  }
39
47
  }
40
48
  buildPrompt(content, originalName, namingConvention, category, fileInfo) {
41
- let prompt = `Based on the following document content, generate a descriptive filename using ${namingConvention} naming convention. `;
42
- prompt += `The file category is: ${category}. `;
43
- if (fileInfo?.documentMetadata) {
44
- const meta = fileInfo.documentMetadata;
45
- if (meta.title)
46
- prompt += `Document title: "${meta.title}". `;
47
- if (meta.author)
48
- prompt += `Author: "${meta.author}". `;
49
- if (meta.subject)
50
- prompt += `Subject: "${meta.subject}". `;
51
- }
52
- if (fileInfo?.parentFolder && fileInfo.parentFolder !== '.') {
53
- prompt += `Located in folder: "${fileInfo.parentFolder}". `;
54
- }
55
- prompt += `\nOriginal filename: ${originalName}\n`;
56
- prompt += `\nDocument content (first 2000 characters):\n${content.substring(0, 2000)}`;
57
- prompt += `\n\nGenerate ONLY a descriptive filename (without extension) using ${namingConvention} format. Do not include any explanation or additional text.`;
58
- return prompt;
49
+ return buildFileNamePrompt({
50
+ content,
51
+ originalName,
52
+ namingConvention: namingConvention,
53
+ category: category,
54
+ fileInfo
55
+ });
59
56
  }
60
57
  sanitizeFilename(filename) {
61
58
  return filename
@@ -1 +1 @@
1
- {"version":3,"file":"lmstudio-service.js","sourceRoot":"","sources":["../../src/services/lmstudio-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lmstudio-service.js","sourceRoot":"","sources":["../../src/services/lmstudio-service.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export declare class OllamaService implements AIProvider {
6
6
  constructor(baseUrl?: string, model?: string);
7
7
  generateFileName(content: string, originalName: string, namingConvention?: string, category?: string, fileInfo?: FileInfo): Promise<string>;
8
8
  private buildPrompt;
9
+ private getVisionModel;
9
10
  private sanitizeFilename;
10
11
  private makeRequest;
11
12
  isAvailable(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"ollama-service.d.ts","sourceRoot":"","sources":["../../src/services/ollama-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAiBzD,qBAAa,aAAc,YAAW,UAAU;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAGpB,OAAO,SAA2B,EAClC,KAAK,SAAa;IAMd,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,gBAAgB,SAAe,EAC/B,QAAQ,SAAY,EACpB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,MAAM,CAAC;IA8BlB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,gBAAgB;YAUV,WAAW;IAqBnB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAWtC"}
1
+ {"version":3,"file":"ollama-service.d.ts","sourceRoot":"","sources":["../../src/services/ollama-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAqBzD,qBAAa,aAAc,YAAW,UAAU;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAGpB,OAAO,SAA2B,EAClC,KAAK,SAAa;IAMd,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,gBAAgB,SAAe,EAC/B,QAAQ,SAAY,EACpB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,MAAM,CAAC;IAqElB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;YAUV,WAAW;IAqBnB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAWtC"}
@@ -1,3 +1,4 @@
1
+ import { buildFileNamePrompt, AI_SYSTEM_PROMPT } from '../utils/ai-prompts.js';
1
2
  export class OllamaService {
2
3
  name = 'Ollama';
3
4
  baseUrl;
@@ -8,21 +9,50 @@ export class OllamaService {
8
9
  }
9
10
  async generateFileName(content, originalName, namingConvention = 'kebab-case', category = 'general', fileInfo) {
10
11
  try {
11
- const prompt = this.buildPrompt(content, originalName, namingConvention, category, fileInfo);
12
- const response = await this.makeRequest('/api/chat', {
13
- model: this.model,
14
- messages: [
15
- {
16
- role: 'system',
17
- content: 'You are a helpful assistant that generates descriptive filenames based on document content. Always respond with just the filename, no explanation or additional text.'
18
- },
19
- {
20
- role: 'user',
21
- content: prompt
22
- }
23
- ],
24
- stream: false
25
- });
12
+ // Check if this is a scanned PDF image
13
+ const isScannedPDF = content.startsWith('[SCANNED_PDF_IMAGE]:');
14
+ let response;
15
+ if (isScannedPDF) {
16
+ // Extract base64 image data and use a vision model
17
+ const imageBase64 = content.replace('[SCANNED_PDF_IMAGE]:', '');
18
+ const imageData = imageBase64.split(',')[1]; // Remove data:image/format;base64, prefix
19
+ const prompt = this.buildPrompt('This is a scanned PDF document converted to an image. Please analyze the image and extract the main content to generate an appropriate filename.', originalName, namingConvention, category, fileInfo);
20
+ // Use LLaVA model for vision capabilities
21
+ const visionModel = this.getVisionModel();
22
+ response = await this.makeRequest('/api/chat', {
23
+ model: visionModel,
24
+ messages: [
25
+ {
26
+ role: 'system',
27
+ content: AI_SYSTEM_PROMPT
28
+ },
29
+ {
30
+ role: 'user',
31
+ content: prompt,
32
+ images: [imageData]
33
+ }
34
+ ],
35
+ stream: false
36
+ });
37
+ }
38
+ else {
39
+ // Standard text processing
40
+ const prompt = this.buildPrompt(content, originalName, namingConvention, category, fileInfo);
41
+ response = await this.makeRequest('/api/chat', {
42
+ model: this.model,
43
+ messages: [
44
+ {
45
+ role: 'system',
46
+ content: AI_SYSTEM_PROMPT
47
+ },
48
+ {
49
+ role: 'user',
50
+ content: prompt
51
+ }
52
+ ],
53
+ stream: false
54
+ });
55
+ }
26
56
  if (response.message?.content) {
27
57
  return this.sanitizeFilename(response.message.content);
28
58
  }
@@ -36,24 +66,23 @@ export class OllamaService {
36
66
  }
37
67
  }
38
68
  buildPrompt(content, originalName, namingConvention, category, fileInfo) {
39
- let prompt = `Based on the following document content, generate a descriptive filename using ${namingConvention} naming convention. `;
40
- prompt += `The file category is: ${category}. `;
41
- if (fileInfo?.documentMetadata) {
42
- const meta = fileInfo.documentMetadata;
43
- if (meta.title)
44
- prompt += `Document title: "${meta.title}". `;
45
- if (meta.author)
46
- prompt += `Author: "${meta.author}". `;
47
- if (meta.subject)
48
- prompt += `Subject: "${meta.subject}". `;
49
- }
50
- if (fileInfo?.parentFolder && fileInfo.parentFolder !== '.') {
51
- prompt += `Located in folder: "${fileInfo.parentFolder}". `;
69
+ return buildFileNamePrompt({
70
+ content,
71
+ originalName,
72
+ namingConvention: namingConvention,
73
+ category: category,
74
+ fileInfo
75
+ });
76
+ }
77
+ getVisionModel() {
78
+ // Try to use a vision-capable model, fallback to default if not specified
79
+ const visionModels = ['llava', 'llava:7b', 'llava:13b', 'llava:34b', 'llama3.2-vision', 'qwen2-vl'];
80
+ // If the current model is already a vision model, use it
81
+ if (visionModels.some(vm => this.model.toLowerCase().includes(vm.split(':')[0]))) {
82
+ return this.model;
52
83
  }
53
- prompt += `\nOriginal filename: ${originalName}\n`;
54
- prompt += `\nDocument content (first 2000 characters):\n${content.substring(0, 2000)}`;
55
- prompt += `\n\nGenerate ONLY a descriptive filename (without extension) using ${namingConvention} format. Do not include any explanation or additional text.`;
56
- return prompt;
84
+ // Otherwise, default to llava (most common vision model in Ollama)
85
+ return 'llava';
57
86
  }
58
87
  sanitizeFilename(filename) {
59
88
  return filename
@@ -1 +1 @@
1
- {"version":3,"file":"ollama-service.js","sourceRoot":"","sources":["../../src/services/ollama-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ollama-service.js","sourceRoot":"","sources":["../../src/services/ollama-service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-service.d.ts","sourceRoot":"","sources":["../../src/services/openai-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIzD,qBAAa,aAAc,YAAW,UAAU;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAMpB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAqB,EAAE,QAAQ,GAAE,MAAkB,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IA0E1K,OAAO,CAAC,gBAAgB;CAuBzB"}
1
+ {"version":3,"file":"openai-service.d.ts","sourceRoot":"","sources":["../../src/services/openai-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAKzD,qBAAa,aAAc,YAAW,UAAU;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAMpB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAqB,EAAE,QAAQ,GAAE,MAAkB,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IA6E1K,OAAO,CAAC,gBAAgB;CAuBzB"}
@@ -1,6 +1,6 @@
1
1
  import OpenAI from 'openai';
2
- import { applyNamingConvention, getNamingInstructions } from '../utils/naming-conventions.js';
3
- import { getTemplateInstructions } from '../utils/file-templates.js';
2
+ import { applyNamingConvention } from '../utils/naming-conventions.js';
3
+ import { buildFileNamePrompt } from '../utils/ai-prompts.js';
4
4
  export class OpenAIService {
5
5
  name = 'OpenAI';
6
6
  client;
@@ -12,71 +12,64 @@ export class OpenAIService {
12
12
  async generateFileName(content, originalName, namingConvention = 'kebab-case', category = 'general', fileInfo) {
13
13
  const convention = namingConvention;
14
14
  const fileCategory = category;
15
- const namingInstructions = getNamingInstructions(convention);
16
- const templateInstructions = getTemplateInstructions(fileCategory);
17
- // Build comprehensive context from all metadata
18
- let metadataContext = '';
19
- if (fileInfo) {
20
- metadataContext += `File Information:
21
- - Original filename: ${originalName}
22
- - File size: ${Math.round(fileInfo.size / 1024)}KB
23
- - Created: ${fileInfo.createdAt.toLocaleDateString()}
24
- - Modified: ${fileInfo.modifiedAt.toLocaleDateString()}
25
- - Parent folder: ${fileInfo.parentFolder}
26
- - Folder path: ${fileInfo.folderPath.join(' > ')}`;
27
- if (fileInfo.documentMetadata) {
28
- const meta = fileInfo.documentMetadata;
29
- metadataContext += `
30
- Document Properties:`;
31
- if (meta.title)
32
- metadataContext += `\n- Title: ${meta.title}`;
33
- if (meta.author)
34
- metadataContext += `\n- Author: ${meta.author}`;
35
- if (meta.creator)
36
- metadataContext += `\n- Creator: ${meta.creator}`;
37
- if (meta.subject)
38
- metadataContext += `\n- Subject: ${meta.subject}`;
39
- if (meta.keywords?.length)
40
- metadataContext += `\n- Keywords: ${meta.keywords.join(', ')}`;
41
- if (meta.creationDate)
42
- metadataContext += `\n- Created: ${meta.creationDate.toLocaleDateString()}`;
43
- if (meta.modificationDate)
44
- metadataContext += `\n- Modified: ${meta.modificationDate.toLocaleDateString()}`;
45
- if (meta.pages)
46
- metadataContext += `\n- Pages: ${meta.pages}`;
47
- if (meta.wordCount)
48
- metadataContext += `\n- Word count: ${meta.wordCount}`;
49
- }
50
- }
51
- const prompt = `Based on the following document information, generate a descriptive filename that captures the main topic/purpose of the document. The filename should be:
52
- - Descriptive and meaningful
53
- - Professional and clean
54
- - Between 3-8 words
55
- - ${namingInstructions}
56
- - ${templateInstructions}
57
- - Do not include file extension
58
- - Do not include personal names, dates, or template variables - just the core content description
59
- - Only use letters, numbers, and appropriate separators for the naming convention
60
- - Use all available context (metadata, folder context, document properties) to create the most accurate filename
61
-
62
- ${metadataContext}
63
-
64
- Document content (first 2000 characters):
65
- ${content.substring(0, 2000)}
66
-
67
- Respond with only the core filename (without personal info or dates) using the specified naming convention, no explanation.`;
15
+ // Check if this is a scanned PDF image
16
+ const isScannedPDF = content.startsWith('[SCANNED_PDF_IMAGE]:');
68
17
  try {
69
- const response = await this.client.chat.completions.create({
70
- model: 'gpt-3.5-turbo',
71
- messages: [
72
- {
73
- role: 'user',
74
- content: prompt
75
- }
76
- ],
77
- max_tokens: 100,
78
- temperature: 0.3
79
- });
18
+ let response;
19
+ if (isScannedPDF) {
20
+ // Extract base64 image data
21
+ const imageBase64 = content.replace('[SCANNED_PDF_IMAGE]:', '');
22
+ const prompt = buildFileNamePrompt({
23
+ content: 'This is a scanned PDF document converted to an image. Please analyze the image and extract the main content to generate an appropriate filename.',
24
+ originalName,
25
+ namingConvention: convention,
26
+ category: fileCategory,
27
+ fileInfo
28
+ });
29
+ response = await this.client.chat.completions.create({
30
+ model: 'gpt-4o', // Use GPT-4 with vision capabilities
31
+ messages: [
32
+ {
33
+ role: 'user',
34
+ content: [
35
+ {
36
+ type: 'text',
37
+ text: prompt
38
+ },
39
+ {
40
+ type: 'image_url',
41
+ image_url: {
42
+ url: imageBase64
43
+ }
44
+ }
45
+ ]
46
+ }
47
+ ],
48
+ max_tokens: 100,
49
+ temperature: 0.3
50
+ });
51
+ }
52
+ else {
53
+ // Standard text processing
54
+ const prompt = buildFileNamePrompt({
55
+ content,
56
+ originalName,
57
+ namingConvention: convention,
58
+ category: fileCategory,
59
+ fileInfo
60
+ });
61
+ response = await this.client.chat.completions.create({
62
+ model: 'gpt-3.5-turbo',
63
+ messages: [
64
+ {
65
+ role: 'user',
66
+ content: prompt
67
+ }
68
+ ],
69
+ max_tokens: 100,
70
+ temperature: 0.3
71
+ });
72
+ }
80
73
  const suggestedName = response.choices[0]?.message?.content?.trim() || 'untitled-document';
81
74
  // Clean and validate the suggested name
82
75
  return this.sanitizeFileName(suggestedName, convention);
@@ -1 +1 @@
1
- {"version":3,"file":"openai-service.js","sourceRoot":"","sources":["../../src/services/openai-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai-service.js","sourceRoot":"","sources":["../../src/services/openai-service.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,qBAAqB,EAAoB,MAAM,gCAAgC,CAAC;AAEzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,OAAO,aAAa;IACxB,IAAI,GAAG,QAAQ,CAAC;IACR,MAAM,CAAS;IAEvB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,YAAoB,EAAE,mBAA2B,YAAY,EAAE,WAAmB,SAAS,EAAE,QAAmB;QACtJ,MAAM,UAAU,GAAG,gBAAoC,CAAC;QACxD,MAAM,YAAY,GAAG,QAAwB,CAAC;QAE9C,uCAAuC;QACvC,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC;YAEb,IAAI,YAAY,EAAE,CAAC;gBACjB,4BAA4B;gBAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;gBAEhE,MAAM,MAAM,GAAG,mBAAmB,CAAC;oBACjC,OAAO,EAAE,kJAAkJ;oBAC3J,YAAY;oBACZ,gBAAgB,EAAE,UAAU;oBAC5B,QAAQ,EAAE,YAAY;oBACtB,QAAQ;iBACT,CAAC,CAAC;gBAEH,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBACnD,KAAK,EAAE,QAAQ,EAAE,qCAAqC;oBACtD,QAAQ,EAAE;wBACR;4BACE,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,MAAM;iCACb;gCACD;oCACE,IAAI,EAAE,WAAW;oCACjB,SAAS,EAAE;wCACT,GAAG,EAAE,WAAW;qCACjB;iCACF;6BACF;yBACF;qBACF;oBACD,UAAU,EAAE,GAAG;oBACf,WAAW,EAAE,GAAG;iBACjB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,2BAA2B;gBAC3B,MAAM,MAAM,GAAG,mBAAmB,CAAC;oBACjC,OAAO;oBACP,YAAY;oBACZ,gBAAgB,EAAE,UAAU;oBAC5B,QAAQ,EAAE,YAAY;oBACtB,QAAQ;iBACT,CAAC,CAAC;gBAEH,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBACnD,KAAK,EAAE,eAAe;oBACtB,QAAQ,EAAE;wBACR;4BACE,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,MAAM;yBAChB;qBACF;oBACD,UAAU,EAAE,GAAG;oBACf,WAAW,EAAE,GAAG;iBACjB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,mBAAmB,CAAC;YAE3F,wCAAwC;YACxC,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,4CAA4C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC1H,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,IAAY,EAAE,UAA4B;QACjE,2DAA2D;QAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAErD,8BAA8B;QAC9B,IAAI,OAAO,GAAG,qBAAqB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAEhE,yCAAyC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,qBAAqB,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAChC,wDAAwD;YACxD,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACpC,4CAA4C;YAC5C,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC3C,CAAC;iBAAM,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBACvC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import { FileInfo } from '../types/index.js';
2
+ import { NamingConvention } from './naming-conventions.js';
3
+ import { FileCategory } from './file-templates.js';
4
+ export interface PromptContext {
5
+ content: string;
6
+ originalName: string;
7
+ namingConvention: NamingConvention;
8
+ category: FileCategory;
9
+ fileInfo?: FileInfo;
10
+ }
11
+ /**
12
+ * Builds a standardized prompt for AI filename generation
13
+ * This prompt is used across all AI providers (Claude, OpenAI, LMStudio, Ollama)
14
+ */
15
+ export declare function buildFileNamePrompt(context: PromptContext): string;
16
+ /**
17
+ * System prompt for AI models that need a separate system message
18
+ */
19
+ export declare const AI_SYSTEM_PROMPT = "You are a helpful assistant that generates descriptive filenames based on document content. Always respond with just the filename, no explanation or additional text.";
20
+ //# sourceMappingURL=ai-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-prompts.d.ts","sourceRoot":"","sources":["../../src/utils/ai-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAyB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAA2B,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAsDlE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,0KAA0K,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { getNamingInstructions } from './naming-conventions.js';
2
+ import { getTemplateInstructions } from './file-templates.js';
3
+ /**
4
+ * Builds a standardized prompt for AI filename generation
5
+ * This prompt is used across all AI providers (Claude, OpenAI, LMStudio, Ollama)
6
+ */
7
+ export function buildFileNamePrompt(context) {
8
+ const { content, originalName, namingConvention, category, fileInfo } = context;
9
+ const namingInstructions = getNamingInstructions(namingConvention);
10
+ const templateInstructions = getTemplateInstructions(category);
11
+ // Build comprehensive context from all metadata
12
+ let metadataContext = '';
13
+ if (fileInfo) {
14
+ metadataContext += `File Information:
15
+ - Original filename: ${originalName}
16
+ - File size: ${Math.round(fileInfo.size / 1024)}KB
17
+ - Created: ${fileInfo.createdAt.toLocaleDateString()}
18
+ - Modified: ${fileInfo.modifiedAt.toLocaleDateString()}
19
+ - Parent folder: ${fileInfo.parentFolder}
20
+ - Folder path: ${fileInfo.folderPath.join(' > ')}`;
21
+ if (fileInfo.documentMetadata) {
22
+ const meta = fileInfo.documentMetadata;
23
+ metadataContext += `
24
+ Document Properties:`;
25
+ if (meta.title)
26
+ metadataContext += `\n- Title: ${meta.title}`;
27
+ if (meta.author)
28
+ metadataContext += `\n- Author: ${meta.author}`;
29
+ if (meta.creator)
30
+ metadataContext += `\n- Creator: ${meta.creator}`;
31
+ if (meta.subject)
32
+ metadataContext += `\n- Subject: ${meta.subject}`;
33
+ if (meta.keywords?.length)
34
+ metadataContext += `\n- Keywords: ${meta.keywords.join(', ')}`;
35
+ if (meta.creationDate)
36
+ metadataContext += `\n- Created: ${meta.creationDate.toLocaleDateString()}`;
37
+ if (meta.modificationDate)
38
+ metadataContext += `\n- Modified: ${meta.modificationDate.toLocaleDateString()}`;
39
+ if (meta.pages)
40
+ metadataContext += `\n- Pages: ${meta.pages}`;
41
+ if (meta.wordCount)
42
+ metadataContext += `\n- Word count: ${meta.wordCount}`;
43
+ }
44
+ }
45
+ return `Based on the following document information, generate a descriptive filename that captures the main topic/purpose of the document. The filename should be:
46
+ - Descriptive and meaningful
47
+ - Professional and clean
48
+ - Between 3-10 words
49
+ - ${namingInstructions}
50
+ - ${templateInstructions}
51
+ - Do not include file extension
52
+ - If the document is specifically for/about a person (based on content), include their name at the beginning
53
+ - Include dates only if they are essential to the document's identity (e.g., contracts, certificates)
54
+ - Ignore irrelevant folder names that don't describe the document content
55
+ - Only use letters, numbers, and appropriate separators for the naming convention
56
+ - Focus on the document's actual content and purpose, not just metadata
57
+
58
+ ${metadataContext}
59
+
60
+ Document content (first 2000 characters):
61
+ ${content.substring(0, 2000)}
62
+
63
+ Important: If this document is specifically for or about a particular person mentioned in the content, start the filename with their name. Otherwise, focus on the document's main purpose and content.
64
+
65
+ Respond with only the filename using the specified naming convention, no explanation.`;
66
+ }
67
+ /**
68
+ * System prompt for AI models that need a separate system message
69
+ */
70
+ export const AI_SYSTEM_PROMPT = 'You are a helpful assistant that generates descriptive filenames based on document content. Always respond with just the filename, no explanation or additional text.';
71
+ //# sourceMappingURL=ai-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-prompts.js","sourceRoot":"","sources":["../../src/utils/ai-prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAoB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAgB,MAAM,qBAAqB,CAAC;AAU5E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAEhF,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACnE,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAE/D,gDAAgD;IAChD,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,QAAQ,EAAE,CAAC;QACb,eAAe,IAAI;uBACA,YAAY;eACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;aAClC,QAAQ,CAAC,SAAS,CAAC,kBAAkB,EAAE;cACtC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE;mBACnC,QAAQ,CAAC,YAAY;iBACvB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAE/C,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC;YACvC,eAAe,IAAI;qBACJ,CAAC;YAChB,IAAI,IAAI,CAAC,KAAK;gBAAE,eAAe,IAAI,cAAc,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,MAAM;gBAAE,eAAe,IAAI,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC;YACjE,IAAI,IAAI,CAAC,OAAO;gBAAE,eAAe,IAAI,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,OAAO;gBAAE,eAAe,IAAI,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM;gBAAE,eAAe,IAAI,iBAAiB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1F,IAAI,IAAI,CAAC,YAAY;gBAAE,eAAe,IAAI,gBAAgB,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,CAAC;YACnG,IAAI,IAAI,CAAC,gBAAgB;gBAAE,eAAe,IAAI,iBAAiB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC5G,IAAI,IAAI,CAAC,KAAK;gBAAE,eAAe,IAAI,cAAc,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,SAAS;gBAAE,eAAe,IAAI,mBAAmB,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO;;;;IAIL,kBAAkB;IAClB,oBAAoB;;;;;;;;EAQtB,eAAe;;;EAGf,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;;;;sFAI0D,CAAC;AACvF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,uKAAuK,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface PDFToImageOptions {
2
+ scale?: number;
3
+ format?: 'png' | 'jpeg';
4
+ firstPageOnly?: boolean;
5
+ }
6
+ export declare class PDFToImageConverter {
7
+ private static readonly MAX_IMAGE_SIZE_BYTES;
8
+ static convertFirstPageToBase64(pdfBuffer: Buffer, options?: PDFToImageOptions): Promise<string>;
9
+ static isScannedPDF(extractedText: string): boolean;
10
+ }
11
+ //# sourceMappingURL=pdf-to-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-to-image.d.ts","sourceRoot":"","sources":["../../src/utils/pdf-to-image.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,mBAAmB;IAE9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAmB;WAElD,wBAAwB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC;IAyFlB,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;CAapD"}