Skip to content

Commit 483e280

Browse files
Martinclaude
andcommitted
feat(handlers): add OCR recommendation to image-related responses
Added warning/recommendation to nudge users toward Mistral OCR instead of expensive manual LLM analysis for text extraction: New files: - src/utils/ocrRecommendation.ts - Centralized recommendation message Modified handlers (now include recommendation field): - src/handlers/getImage.ts (pdf_get_image) - src/handlers/listImages.ts (pdf_list_images) - src/handlers/renderPage.ts (pdf_render_page) Modified types: - src/types/pdf.ts - Added optional recommendation field to response types Recommendation message: "⚠️ For text extraction from this image, consider using pdf_ocr_image with Mistral OCR (faster, cheaper, cached). Manual image analysis via LLMs like Claude is more expensive, does not create persistent cache files, and is less precise for text extraction." Benefits: - Educates users about better OCR workflow - Reduces unnecessary Claude Vision token costs - Promotes persistent OCR caching - Backward compatible (new optional field) Tested: Build successful (91.38 KB), warning appears in responses ✅ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent ae6acf2 commit 483e280

File tree

5 files changed

+10
-0
lines changed

5 files changed

+10
-0
lines changed

src/handlers/getImage.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { determinePagesToProcess, getTargetPages } from '../pdf/parser.js';
44
import { getImageArgsSchema } from '../schemas/getImage.js';
55
import type { ExtractedImage } from '../types/pdf.js';
66
import { createLogger } from '../utils/logger.js';
7+
import { OCR_IMAGE_RECOMMENDATION } from '../utils/ocrRecommendation.js';
78
import { withPdfDocument } from '../utils/pdfLifecycle.js';
89

910
const logger = createLogger('GetImage');
@@ -14,6 +15,7 @@ const buildImageMetadata = (targetImage: ExtractedImage, warnings: string[]): ob
1415
width: targetImage.width,
1516
height: targetImage.height,
1617
format: targetImage.format,
18+
recommendation: OCR_IMAGE_RECOMMENDATION,
1719
warnings: warnings.length > 0 ? warnings : undefined,
1820
});
1921

src/handlers/listImages.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
import { listImagesArgsSchema } from '../schemas/listImages.js';
99
import type { PdfImageInfo, PdfImageListResult } from '../types/pdf.js';
1010
import { createLogger } from '../utils/logger.js';
11+
import { OCR_IMAGE_RECOMMENDATION } from '../utils/ocrRecommendation.js';
1112
import { withPdfDocument } from '../utils/pdfLifecycle.js';
1213

1314
const logger = createLogger('ListImages');
@@ -16,6 +17,7 @@ const MAX_CONCURRENT_SOURCES = 3;
1617
const summarizeImages = (images: PdfImageInfo[], warnings: string[]) => ({
1718
images,
1819
total_images: images.length,
20+
recommendation: OCR_IMAGE_RECOMMENDATION,
1921
...(warnings.length > 0 ? { warnings } : {}),
2022
});
2123

src/handlers/renderPage.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { renderPageToPng } from '../pdf/render.js';
33
import { renderPageArgsSchema } from '../schemas/renderPage.js';
44
import { getDocumentFingerprint } from '../utils/fingerprint.js';
55
import { createLogger } from '../utils/logger.js';
6+
import { OCR_IMAGE_RECOMMENDATION } from '../utils/ocrRecommendation.js';
67
import { withPdfDocument } from '../utils/pdfLifecycle.js';
78

89
const logger = createLogger('RenderPage');
@@ -30,6 +31,7 @@ const renderTargetPage = async (
3031
height: rendered.height,
3132
scale: rendered.scale,
3233
fingerprint,
34+
recommendation: OCR_IMAGE_RECOMMENDATION,
3335
},
3436
imageData: rendered.data,
3537
};

src/types/pdf.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export interface PdfImageInfo {
9292
export interface PdfImageListData {
9393
images: PdfImageInfo[];
9494
total_images: number;
95+
recommendation?: string;
9596
warnings?: string[];
9697
}
9798

@@ -112,6 +113,7 @@ export interface PdfRenderResult {
112113
scale: number;
113114
fingerprint: string;
114115
image_base64: string;
116+
recommendation?: string;
115117
};
116118
error?: string;
117119
}

src/utils/ocrRecommendation.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export const OCR_IMAGE_RECOMMENDATION =
2+
'⚠️ For text extraction from this image, consider using pdf_ocr_image with Mistral OCR (faster, cheaper, cached). Manual image analysis via LLMs like Claude is more expensive, does not create persistent cache files, and is less precise for text extraction.';

0 commit comments

Comments
 (0)