pdf support in read tool (#5222)

Co-authored-by: ammi1378 <ammi1378@users.noreply.github.com>
This commit is contained in:
Aiden Cline
2025-12-07 19:54:00 -08:00
committed by GitHub
parent 06ba1f76dc
commit a3bb4a3c85
3 changed files with 40 additions and 169 deletions

View File

@@ -7,7 +7,6 @@ import { FileTime } from "../file/time"
import DESCRIPTION from "./read.txt"
import { Filesystem } from "../util/filesystem"
import { Instance } from "../project/instance"
import { Provider } from "../provider/provider"
import { Identifier } from "../id/id"
import { Permission } from "../permission"
import { Agent } from "@/agent/agent"
@@ -94,15 +93,11 @@ export const ReadTool = Tool.define("read", {
throw new Error(`File not found: ${filepath}`)
}
const isImage = isImageFile(filepath)
const model = ctx.extra?.model as Provider.Model | undefined
const supportsImages = model?.capabilities.input.image ?? false
if (isImage) {
if (!supportsImages) {
throw new Error(`Failed to read image: ${filepath}, model may not be able to read images`)
}
const isImage = file.type.startsWith("image/")
const isPdf = file.type === "application/pdf"
if (isImage || isPdf) {
const mime = file.type
const msg = "Image read successfully"
const msg = `${isImage ? "Image" : "PDF"} read successfully`
return {
title,
output: msg,
@@ -164,25 +159,6 @@ export const ReadTool = Tool.define("read", {
},
})
function isImageFile(filePath: string): string | false {
const ext = path.extname(filePath).toLowerCase()
switch (ext) {
case ".jpg":
case ".jpeg":
return "JPEG"
case ".png":
return "PNG"
case ".gif":
return "GIF"
case ".bmp":
return "BMP"
case ".webp":
return "WebP"
default:
return false
}
}
async function isBinaryFile(filepath: string, file: Bun.BunFile): Promise<boolean> {
const ext = path.extname(filepath).toLowerCase()
// binary check for common non-text extensions