{"record":{"id":"ddf646d5407bf607","repo":"spring-projects/spring-ai","slug":"unsupported-media-data-type-ddf646","errorCode":null,"errorMessage":"Unsupported media data type: ","messagePattern":"Unsupported media data type: ","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatModel.java","lineNumber":450,"sourceCode":"\t\t}\n\n\t\tList<ToolDefinition> toolDefinitions = this.toolCallingManager.resolveToolDefinitions(requestOptions);\n\t\tif (!CollectionUtils.isEmpty(toolDefinitions)) {\n\t\t\trequestBuilder.tools(this.getTools(toolDefinitions));\n\t\t}\n\n\t\treturn requestBuilder.build();\n\t}\n\n\tprivate String fromMediaData(Object mediaData) {\n\t\tif (mediaData instanceof byte[] bytes) {\n\t\t\treturn Base64.getEncoder().encodeToString(bytes);\n\t\t}\n\t\telse if (mediaData instanceof String text) {\n\t\t\treturn text;\n\t\t}\n\t\telse {\n\t\t\tthrow new IllegalArgumentException(\"Unsupported media data type: \" + mediaData.getClass().getSimpleName());\n\t\t}\n\n\t}\n\n\tprivate List<ChatRequest.Tool> getTools(List<ToolDefinition> toolDefinitions) {\n\t\treturn toolDefinitions.stream().map(toolDefinition -> {\n\t\t\tvar tool = new ChatRequest.Tool.Function(toolDefinition.name(), toolDefinition.description(),\n\t\t\t\t\ttoolDefinition.inputSchema());\n\t\t\treturn new ChatRequest.Tool(tool);\n\t\t}).toList();\n\t}\n\n\t/**\n\t * @since 2.0.0\n\t */\n\t@Override\n\tpublic OllamaChatOptions getOptions() {\n\t\treturn this.options;","sourceCodeStart":432,"sourceCodeEnd":468,"githubUrl":"https://github.com/spring-projects/spring-ai/blob/98a7beda4f29d80a71c5837eb4053b03a93a46f7/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/OllamaChatModel.java#L432-L468","documentation":"OllamaChatModel.fromMediaData() converts Media payloads to Base64 strings for the Ollama API. It supports byte[] and String data; any other media data type throws IllegalArgumentException('Unsupported media data type: ...').","triggerScenarios":"Attaching a UserMessage Media whose getDataAsByteArray()/data object is e.g. a Resource, InputStream, or BufferedImage instead of byte[] or String, and sending it to Ollama.","commonSituations":"Loading images from classpath resources or files and passing the Resource object directly as media data instead of its byte contents; copying media handling code from other model adapters with different supported types.","solutions":["Convert media data to byte[] (e.g. resource.getContentAsByteArray()) or a Base64 String before building the Media.","Read the file/Resource into a byte array explicitly when constructing the UserMessage media.","Check for a Media utility in the framework (e.g. MediaUtils) to convert resources correctly."],"exampleFix":"// before\nnew Media(MimeTypeUtils.IMAGE_PNG, new ClassPathResource(\"cat.png\")); // unsupported\n// after\nnew Media(MimeTypeUtils.IMAGE_PNG, new ClassPathResource(\"cat.png\").getContentAsByteArray());","handlingStrategy":"validation","validationCode":"Object data = media.getData();\nif (!(data instanceof byte[]) && !(data instanceof String)) {\n    throw new IllegalArgumentException(\"Convert media to byte[]/String first: \" + data.getClass());\n}","typeGuard":"boolean isSupportedMediaData(Object d) { return d instanceof byte[] || d instanceof String; }","tryCatchPattern":"try {\n    return ollamaChatModel.call(prompt);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"Unsupported media data type\")) { /* convert media to byte[] and retry */ }\n    throw e;\n}","preventionTips":["Always pass byte[] (e.g. Resource.getContentAsByteArray()) as media data.","Add a helper method that normalizes Resource/InputStream media into byte arrays.","Test multimodal prompts with real image attachments before production."],"tags":["validation","media","type-mismatch","ollama"],"backgroundTag":"type-mismatch","analyzedSha":"98a7beda4f29d80a71c5837eb4053b03a93a46f7","analyzedAt":"2026-09-11T14:15:49.441Z","contentChangedAt":"2026-09-11T14:15:49.441Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}