diff --git a/packages/core/src/session/runner/to-llm-message.ts b/packages/core/src/session/runner/to-llm-message.ts index 698af2795cb..5ff3b166f84 100644 --- a/packages/core/src/session/runner/to-llm-message.ts +++ b/packages/core/src/session/runner/to-llm-message.ts @@ -67,7 +67,7 @@ const directoryAttachment = (file: FileAttachment): ContentPart => ({ const attachmentContent = (file: FileAttachment): ContentPart[] => { if (file.mime === "text/plain") return [textAttachment(file)] if (file.mime === "application/x-directory") return [directoryAttachment(file)] - if (imageMimes.has(file.mime)) { + if (imageMimes.has(file.mime) || file.mime === "application/pdf") { const location = attachmentLocation(file) return [...(location === undefined ? [] : [Message.text(`Attached file: ${location}`)]), media(file)] } diff --git a/packages/core/test/session-model-request.test.ts b/packages/core/test/session-model-request.test.ts index e2c77ed69ce..f87ab1e085a 100644 --- a/packages/core/test/session-model-request.test.ts +++ b/packages/core/test/session-model-request.test.ts @@ -9,16 +9,18 @@ describe("SessionModelRequest.unsupportedParts", () => { const messages = unsupportedParts( [ Message.user([ - Message.text("Describe this image"), + Message.text("Describe these files"), { type: "media", mediaType: "image/png", data: "aGVsbG8=", filename: "logo.png" }, + { type: "media", mediaType: "application/pdf", data: "JVBERg==", filename: "document.pdf" }, ]), ], capabilities(["text"]), ) expect(messages[0]?.content).toEqual([ - Message.text("Describe this image"), + Message.text("Describe these files"), Message.text('ERROR: Cannot read "logo.png" (this model does not support image input). Inform the user.'), + Message.text('ERROR: Cannot read "document.pdf" (this model does not support pdf input). Inform the user.'), ]) }) diff --git a/packages/core/test/session-runner-message.test.ts b/packages/core/test/session-runner-message.test.ts index a3a677329c4..9adfeb371b5 100644 --- a/packages/core/test/session-runner-message.test.ts +++ b/packages/core/test/session-runner-message.test.ts @@ -361,7 +361,7 @@ Recent work ]) }) - test("uses materialized image data as provider media and drops unsupported attachments", () => { + test("uses materialized image and PDF data as provider media", () => { const data = Base64.make("AAECAw==") const messages = toLLMMessages( [ @@ -387,6 +387,7 @@ Recent work expect(messages[0]?.content).toEqual([ { type: "text", text: "Inspect this image" }, { type: "media", mediaType: "image/png", data, filename: "image.png" }, + { type: "media", mediaType: "application/pdf", data: "JVBERg==", filename: "document.pdf" }, ]) })