support gemini-3.1-flash-image-preview #121
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
is https://openrouter.ai/google/gemini-3.1-flash-image-preview supported in the ai client
if not we need to implement it
see crates/ai
check the specific parameters needed
maybe make specific module for it
we need to be able to specify quality, size...
check https://openrouter.ai/docs/guides/overview/multimodal/image-generation#image-aspect-ratio-configuration
Implementation Spec for Issue #121: Support gemini-3.1-flash-image-preview
Objective
Add support for the
google/gemini-3.1-flash-image-previewmodel in theherolib_aicrate, including a new image generation module that handles OpenRouter's image generation API via the/chat/completionsendpoint withmodalitiesandimage_configparameters. Usable through both Rust API and Rhai scripting bindings.Requirements
Gemini3_1FlashImagePreviewas a new variant in theModelenumimage_generationmodule with types for image generation requests, options, and responsesChatCompletionRequestto supportmodalitiesandimage_configfieldsResponseMessageto supportimagesarray in responsesAiClientFiles to Modify/Create
crates/ai/src/model.rscrates/ai/src/image_generation/mod.rscrates/ai/src/types.rscrates/ai/src/client/mod.rscrates/ai/src/lib.rscrates/ai/src/rhai.rscrates/ai/Cargo.tomlImplementation Plan
Step 1: Add Gemini model variant to model.rs
Gemini3_1FlashImagePreviewtoModelenumModel::default_image_generation()methodStep 2: Create image_generation module
ImageAspectRatioenum (1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, 1:4, 4:1, 1:8, 8:1)ImageSizeenum (0.5K, 1K, 2K, 4K)ImageConfigbuilder structImageGenerationResponsestructStep 3: Extend types.rs with image request/response fields
modalitiesandimage_configtoChatCompletionRequestImageConfigRequeststructImageContent/ImageUrlto response typesStep 4: Add image generation methods to AiClient
generate_image(prompt)- simple defaultgenerate_image_with_options(model, prompt, config)- full controlgenerate_image_to_file(model, prompt, path, config)- save to fileStep 5: Update lib.rs with module declaration and re-exports
Step 6: Add Rhai bindings
ai_generate_image(prompt, output_path)ai_generate_image_with_options(prompt, aspect_ratio, image_size, output_path)ai_image_aspect_ratios()andai_image_sizes()Step 7: Add examples and documentation
Acceptance Criteria
Model::Gemini3_1FlashImagePreviewis valid and maps to OpenRouterImageConfigbuilder works with aspect ratio and image sizeChatCompletionRequestserializes modalities and image_config correctlyResponseMessagedeserializes image responsesAiClient::generate_image()sends correctly structured requestscargo test -p herolib_aipassescargo doc -p herolib_aibuilds cleanlyNotes
modalities: ["image", "text"]data:image/png;base64,...URLs that need decoding🤖 Generated with Claude Code
Updated Implementation Spec for Issue #121: Support gemini-3.1-flash-image-preview
Objective
Add support for the
google/gemini-3.1-flash-image-previewmodel in theherolib_aicrate, including a new image generation module that handles OpenRouter's image generation API via the/chat/completionsendpoint withmodalitiesandimage_configparameters. Usable through both Rust API and Rhai scripting bindings.Requirements
Gemini3_1FlashImagePreviewas a new variant in theModelenumimage_generationmodule with types for image generation requests, options, and responsesChatCompletionRequestto supportmodalitiesandimage_configfieldsResponseMessageto supportimagesarray in responsesAiClientexamples/Files to Modify/Create
crates/ai/src/model.rscrates/ai/src/image_generation/mod.rscrates/ai/src/types.rscrates/ai/src/client/mod.rscrates/ai/src/lib.rscrates/ai/src/rhai.rscrates/ai/Cargo.tomlcrates/ai/examples/image_generation.rsImplementation Plan
Step 1: Add Gemini model variant to model.rs
Gemini3_1FlashImagePreviewtoModelenumModel::default_image_generation()methodStep 2: Create image_generation module
ImageAspectRatioenum (1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, 1:4, 4:1, 1:8, 8:1)ImageSizeenum (0.5K, 1K, 2K, 4K)ImageConfigbuilder structImageGenerationResponsestructStep 3: Extend types.rs with image request/response fields
modalitiesandimage_configtoChatCompletionRequestImageConfigRequeststructImageContent/ImageUrlto response typesStep 4: Add image generation methods to AiClient
generate_image(prompt)- simple defaultgenerate_image_with_options(model, prompt, config)- full controlgenerate_image_to_file(model, prompt, path, config)- save resulting image to a user-defined file pathStep 5: Update lib.rs with module declaration and re-exports
Step 6: Add Rhai bindings
ai_generate_image(prompt, output_path)ai_generate_image_with_options(prompt, aspect_ratio, image_size, output_path)ai_image_aspect_ratios()andai_image_sizes()Step 7: Write Rust example code
crates/ai/examples/image_generation.rswith working exampleStep 8: Testing
cargo test -p herolib_aipassesAcceptance Criteria
Model::Gemini3_1FlashImagePreviewis valid and maps to OpenRouterImageConfigbuilder works with aspect ratio and image sizeChatCompletionRequestserializes modalities and image_config correctlyResponseMessagedeserializes image responsesAiClient::generate_image()sends correctly structured requestsexamples/compiles and runs correctlycargo doc -p herolib_aibuilds cleanlyNotes
modalities: ["image", "text"]data:image/png;base64,...URLs that need decoding🤖 Generated with Claude Code
Test Results
Unit Tests
Integration Tests (Live API)
All images visually verified via hero_browser MCP:
Files Changed
crates/ai/src/model.rs— Added Gemini3_1FlashImagePreview model variantcrates/ai/src/image_generation/mod.rs— NEW: ImageConfig, ImageAspectRatio, ImageSize, ImageGenerationResponsecrates/ai/src/types.rs— Added modalities, image_config, images fields + null content handlingcrates/ai/src/client/mod.rs— Added generate_image methods, base64 decodercrates/ai/src/lib.rs— Module declaration and re-exportscrates/ai/src/rhai.rs— Rhai bindings for image generationcrates/ai/src/bin/image_gen_test.rs— Integration test binarycrates/ai/examples/rust/image_generation_test.rs— Rust examplecrates/ai/examples/rhai/05_image_generation.rhai— Rhai example🤖 Generated with Claude Code
Implementation committed:
a5b615f0Browse:
a5b615f0