Repository navigation
Conversation
A Responses API model now gets PDF, Word, Excel and PowerPoint bytes as an input_file part, and the chat UI accepts these types. Other models still get a "could not be read" note. A link that the model cannot send now fails the turn it was sent on with an error that names the link. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
The model does not see input_file's filename, so a text part before the file names it, as it already did for links. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
The chat sends each http(s) link to a known file type in the message text also as a url part, with no chip. A model that reads links (Responses API, Gemini) fetches the file. For other models the runtime drops the part, since its URL is in the text, or replaces it with the bare URL, so the agent's fetch tool can read it. This replaces the error for a link the model cannot read. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
danielle-mustillo
force-pushed
the
danielle-mustillo/pdf-office-files
branch
from
October 15, 2026 01:40
a670438 to
90e9d5d
Compare
The model reads the message as markdown, so links are now found the same way: bare URLs, <autolinks> and [markdown](links), but none inside code. A URL that ends in a bracket or a full stop keeps the right end. Tests cover the composer, the chip rules and the parser cases. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
…rn step filesToText copies only the user turns that change, and turnFilesToText decides each part. The comments now say which parts are left as they are. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
This comment has been minimized.
This comment has been minimized.
Contributor
Author
|
Before/after on a kind cluster with an Azure OpenAI
pr-3200-reel.mp4Before: the composer rejects PDF and .docx
After: the composer stages PDF and .docx
Before: the model asks for the files
After: the model reads each secret word
Before: the model asks to download the link
After: the model quotes the linked PDF
🤖 written by Claude |
danielle-mustillo
marked this pull request as ready for review
October 15, 2026 03:47
danielle-mustillo
requested review from
Charlesthebird and
supreme-gg-gg
as code owners
October 15, 2026 03:47
…PI models Also assert OpenAIModel implements FileSender, and stop the mock chat client from showing a chip for a link in the text. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
…he link media type helper Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
danielle-mustillo
force-pushed
the
danielle-mustillo/pdf-office-files
branch
from
October 15, 2026 14:34
0c5afed to
133c20a
Compare
Charlesthebird
left a comment
Collaborator
There was a problem hiding this comment.
This automated review is a first pass. A manual review will follow once the blockers are addressed.
Blocks merge: the UI turns every typed link with a known file extension into a url part, and Responses API models fetch it again on every turn. One unreachable or non-file link then breaks the whole chat.
⚠️ What I checked
- ✅ Go tests in
fileextract,modelsanda2a - ✅ UI tests for
attachments,a2aGrpcChatClient,useChatandChatComposer - ✅ Non-Responses adapters (Anthropic, Bedrock, Ollama) get url parts as bare URL text
- ✅
filesToTextcopies changed turns instead of mutating session history - Links in
textLinks: internal hosts,.md/.yamlblob pages - Replay of url parts and file bytes on later turns
🤖 written by Claude
Links in older user turns are now sent as bare URL text, for all models. A tool result no longer counts as the newest user turn, so a link stays a file for the whole turn that sends it. Responses API models get at most 50 MB of files per request, newest first. Older files over the cap become a note. A PDF must look like a PDF and an Office file like a zip, else it gets the "could not be read" note. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
The provider fetches a link itself and cannot reach these hosts. Signed-off-by: Danielle Mustillo <danielle.mustillo@solo.io>
Charlesthebird
approved these changes
Oct 16, 2026
Charlesthebird
left a comment
Collaborator
There was a problem hiding this comment.
Thanks for adding this and including the screenshots and video!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.






🤖 written by Claude (start)
Problem
Models did not get the contents of PDF and Office files, or of files at a link.
Resolution
apiFormat: responses) reads PDF, .docx, .xlsx and .pptx files sent as bytes.User Experience
A kagent UI user can now attach
report.pdf, or typeSummarize https://example.com/q3-report.pdf, and a Responses API agent answers from the file's contents.A kagent A2A user can now send a url part to any model. Models that cannot fetch files get the URL as text and do not drop it.
Changes
Limits:
blob/link sends the web page's HTML, not the file.Tested
Kind cluster at
a6704386, Azure OpenAI gpt-4.1-mini. A Responses API agent read the four types, .txt and a PDF link. A Chat Completions agent got the note, and with a fetch tool it fetched the typed link.🤖 written by Claude (end)