{"record":{"id":"bc787facc0caa388","repo":"conductor-oss/conductor","slug":"image-generation-not-supported-by-the-model-yet-bc787f","errorCode":null,"errorMessage":"Image generation not supported by the model yet","messagePattern":"Image generation not supported by the model yet","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"ai/src/main/java/org/conductoross/conductor/ai/providers/bedrock/Bedrock.java","lineNumber":148,"sourceCode":"        String model = input.getModel();\n        log.info(\"\\n\\nusing bedrock model: {}\", model);\n        return BedrockChatOptions.builder()\n                .model(model)\n                .maxTokens(input.getMaxTokens())\n                .topP(input.getTopP())\n                .temperature(input.getTemperature())\n                .toolCallbacks(getToolCallback(input))\n                .stopSequences(input.getStopWords())\n                .frequencyPenalty(input.getFrequencyPenalty())\n                .topK(input.getTopK())\n                .internalToolExecutionEnabled(false)\n                .presencePenalty(input.getPresencePenalty())\n                .build();\n    }\n\n    @Override\n    public ImageModel getImageModel() {\n        throw new UnsupportedOperationException(\"Image generation not supported by the model yet\");\n    }\n\n    private Map<String, Object> getEmbeddingRequest(String modelId, String text) {\n        return Map.of(\n                \"input_type\", \"search_document\",\n                \"embedding_types\", List.of(\"float\"),\n                \"texts\", List.of(text));\n    }\n\n    @SneakyThrows\n    private List<Float> extractEmbeddings(String modelId, InvokeModelResponse response) {\n        if (!modelId.startsWith(\"cohere.\")) {\n            throw new RuntimeException(\"Unsupported model \" + modelId);\n        }\n        byte[] byteArray = response.body().asByteArray();\n        Map<String, Map<String, Object>> ressMap = om.readValue(byteArray, Map.class);\n        List<List<Float>> floats = (List<List<Float>>) ressMap.get(\"embeddings\").get(\"float\");\n        return floats.get(0);","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/ai/src/main/java/org/conductoross/conductor/ai/providers/bedrock/Bedrock.java#L130-L166","documentation":"Bedrock.getImageModel() throws unconditionally because the Bedrock provider implementation does not wire up an image generation model. While AWS Bedrock does host image-generation models (Stability AI, Amazon Titan Image Generator), this Conductor provider only implements chat (via BedrockProxyChatModel) and embeddings (via Cohere). The interface contract is fulfilled by throwing UnsupportedOperationException.","triggerScenarios":"Calling getImageModel() on a Bedrock provider instance — e.g. a GenerateImage task routed to provider 'bedrock'.","commonSituations":"Routing an image generation task to Bedrock expecting it to use Stability/Titan image models. A generic dispatcher that assumes all providers support image generation.","solutions":["Route image generation to a provider with an implemented ImageModel: 'openai', 'azure_openai', 'vertex_ai'/'google_gemini', or 'stabilityai'.","If you need Bedrock image models specifically, implement getImageModel() in the Bedrock provider using an InvokeModel call to stability.stable-image-* or amazon.titan-image-*.","Check provider capabilities before dispatching."],"exampleFix":"// before\nString provider = \"bedrock\";\nAIModel model = providerRegistry.get(provider);\nImageModel img = model.getImageModel(); // throws\n\n// after\nString provider = \"openai\";\nAIModel model = providerRegistry.get(provider);\nImageModel img = model.getImageModel();","handlingStrategy":"validation","validationCode":"// Validate Bedrock supports image generation before calling\nprivate static final Set<String> IMAGE_CAPABLE_PROVIDERS =\n    Set.of(\"openai\", \"azure_openai\", \"vertex_ai\", \"google_gemini\", \"stabilityai\");\n\nvoid validateImageCapability(String providerName) {\n    if (!IMAGE_CAPABLE_PROVIDERS.contains(providerName)) {\n        throw new IllegalArgumentException(\n            \"Provider '\" + providerName + \"' does not support image generation\");\n    }\n}","typeGuard":"static boolean supportsImageGeneration(AIModel model) {\n    try {\n        model.getImageModel();\n        return true;\n    } catch (UnsupportedOperationException e) {\n        return false;\n    }\n}","tryCatchPattern":"try {\n    ImageModel img = bedrock.getImageModel();\n} catch (UnsupportedOperationException e) {\n    throw new IllegalArgumentException(\n        \"Bedrock does not implement image generation in this provider. \"\n        + \"Use openai, vertex_ai, or stabilityai.\", e);\n}","preventionTips":["Maintain a capability matrix for providers — image generation is only available on openai, azure_openai, vertex_ai/google_gemini, and stabilityai.","Validate provider-capability compatibility at task registration time.","If you need Bedrock image models (Stability/Titan), implement getImageModel() in the Bedrock provider with an InvokeModel call."],"tags":["bedrock","image-generation","unsupported-operation","capability-mismatch"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}