Skip to content

Commit f2b78f5

Browse files
feat: add imageModel() method for image generation support (#366)
* feat: add imageModel() method for image generation support Implements ImageModelV3 interface to enable image generation through the AI SDK's generateImage() function. Uses OpenRouter's chat completions endpoint with modalities: ['image', 'text'] to generate images. Features: - Supports aspectRatio parameter via image_config - Supports seed parameter for reproducible generation - Supports provider routing settings - Returns warnings for unsupported features (n > 1, size) - Throws UnsupportedFunctionalityError for image editing (files/mask) Closes #317 Co-Authored-By: Robert Yeakel <robert.yeakel@openrouter.ai> * fix: address PR review feedback - Change zod import to 'zod/v4' for consistency with rest of codebase - Add .passthrough() to schema for forward compatibility - Throw NoContentGeneratedError when choices array is empty - Add test for empty choices array edge case - Rename test to clarify it tests 'no images in message' case Co-Authored-By: Robert Yeakel <robert.yeakel@openrouter.ai> * fix: use shared getBase64FromDataUrl and remove duplicate user field - Use getBase64FromDataUrl from file-url-utils.ts instead of duplicating regex - Remove duplicate user field from OpenRouterImageSettings (inherited from OpenRouterSharedSettings) Co-Authored-By: Robert Yeakel <robert.yeakel@openrouter.ai> * feat: add runtime providerOptions support to image model - Extract providerOptions.openrouter and spread into request body - Matches chat model behavior for consistency - Add test for runtime providerOptions support Co-Authored-By: Robert Yeakel <robert.yeakel@openrouter.ai> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
1 parent c6ae94d commit f2b78f5

File tree

8 files changed

+965
-0
lines changed

8 files changed

+965
-0
lines changed

.changeset/add-image-model.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
"@openrouter/ai-sdk-provider": minor
3+
---
4+
5+
Add imageModel() method to OpenRouter provider for image generation support
6+
7+
This adds the `imageModel()` method to the OpenRouter provider, enabling image generation through the AI SDK's `generateImage()` function. The implementation uses OpenRouter's chat completions endpoint with `modalities: ['image', 'text']` to generate images.
8+
9+
Features:
10+
- Implements `ImageModelV3` interface from AI SDK
11+
- Supports `aspectRatio` parameter via `image_config`
12+
- Supports `seed` parameter for reproducible generation
13+
- Supports provider routing settings (order, allow_fallbacks, etc.)
14+
- Returns appropriate warnings for unsupported features (n > 1, size)
15+
- Throws `UnsupportedFunctionalityError` for image editing (files/mask parameters)
16+
17+
Usage:
18+
```typescript
19+
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
20+
import { generateImage } from 'ai';
21+
22+
const openrouter = createOpenRouter();
23+
const { image } = await generateImage({
24+
model: openrouter.imageModel('google/gemini-2.5-flash-image'),
25+
prompt: 'A cat wearing a hat',
26+
aspectRatio: '16:9',
27+
});
28+
```
29+

0 commit comments

Comments
 (0)