[
https://issues.apache.org/jira/browse/CAMEL-23740?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Federico Mariani updated CAMEL-23740:
-------------------------------------
Fix Version/s: 4.18.3
(was: 4.14.8)
> LangChain4jAgentConverter WrappedFile converter fails for FTP/SFTP
> GenericFile — requires manual convertBodyTo workaround
> -------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-23740
> URL: https://issues.apache.org/jira/browse/CAMEL-23740
> Project: Camel
> Issue Type: Bug
> Components: camel-langchain4j-agent
> Affects Versions: 4.20.0
> Reporter: Federico Mariani
> Assignee: Federico Mariani
> Priority: Major
> Fix For: 4.18.3, 4.21.0
>
>
> The _LangChain4jAgentConverter.toAiAgentBody(WrappedFile)_ type converter
> assumes the wrapped file is always a _java.io.File_:
> {code:java}
> Object fileObj = wrappedFile.getFile();
> if (!(fileObj instanceof File)) {
> throw new IllegalArgumentException(
> "WrappedFile must contain a java.io.File instance, got: " +
> fileObj.getClass().getName());
> }
> {code}
> This fails for FTP and SFTP components, which produce _GenericFile<FTPFile> /
> GenericFile<SftpRemoteFile>_. The underlying file object is not a
> _java.io.File_, so the converter throws IllegalArgumentException.
> Since this is the most specific *@Converter* match for the body type, Camel
> picks it over the byte[] or InputStream converters. The exception gets caught
> by the route's error handler (retry + DLQ), making the failure silent and
> hard to diagnose.
> *Workaround*: Add _convertBodyTo: byte[]_ before _to: langchain4j-agent:..._
> to force the body through the byteArrayToAiAgentBody converter, which works
> correctly (it detects MIME type from the CamelFileName header).
> *Expected behavior*: The WrappedFile converter should handle remote file
> types by falling back to reading the body as byte[] when getFile() does not
> return a java.io.File. For example:
> {code:java}
> if (!(fileObj instanceof File)) {
> byte[] data = exchange.getContext().getTypeConverter()
> .convertTo(byte[].class, exchange, wrappedFile);
> String mimeType = detectMimeTypeFromHeaders(exchange);
> Content content = createContent(data, mimeType);
> return buildAiAgentBody(exchange, content, "");
> }
> {code}
> Affected components: camel-langchain4j-agent with camel-ftp or camel-ftp
> (SFTP)
> *Reproducer*: A YAML route that reads images from FTP and sends them to
> langchain4j-agent:
> {code:java}
> - route:
> id: ftp-to-agent
> from:
> uri: "ftp:localhost:2121/images?noop=true&binary=true"
> steps:
> - setHeader:
> name: CamelLangChain4jAgentUserMessage
> constant:
> expression: "Describe this image"
> # Without this line, the WrappedFile converter fails silently
> # - convertBodyTo:
> # type: "byte[]"
> - to:
> uri: "langchain4j-agent:my-agent"
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)