Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions src/GoogleProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,26 @@ class GoogleProvider implements ProviderInterface, ImageProviderInterface, Embed
public const MODEL_1_5_PRO = 'gemini-1.5-pro';
public const MODEL_1_5_FLASH = 'gemini-1.5-flash';

// Imagen model aliases for image generation and editing
// Image generation. Imagen is retired as a product line; these replace it.
public const MODEL_3_1_FLASH_IMAGE = 'gemini-3.1-flash-image';
public const MODEL_3_1_FLASH_LITE_IMAGE = 'gemini-3.1-flash-lite-image';
public const MODEL_2_5_FLASH_IMAGE = 'gemini-2.5-flash-image';

/** @deprecated Imagen shuts down 17 August 2026. Use MODEL_3_1_FLASH_IMAGE. */
public const IMAGEN_4 = 'imagen-4.0-generate-001';
/** @deprecated Imagen shuts down 17 August 2026. Use MODEL_3_1_FLASH_IMAGE. */
public const IMAGEN_4_ULTRA = 'imagen-4.0-ultra-generate-001';
/** @deprecated Imagen shuts down 17 August 2026. Use MODEL_3_1_FLASH_IMAGE. */
public const IMAGEN_4_FAST = 'imagen-4.0-fast-generate-001';
/** @deprecated Imagen 3 is already shut down. Use MODEL_3_1_FLASH_IMAGE. */
public const IMAGEN_EDIT = 'imagen-3.0-capability-001';

// Veo model aliases for video generation
public const MODEL_VEO_3_1 = 'veo-3.1-generate-preview';
public const MODEL_VEO_3_1_FAST = 'veo-3.1-fast-generate-preview';
/** @deprecated Shut down 30 June 2026; requests fail. Use MODEL_VEO_3_1. */
public const MODEL_VEO_3 = 'veo-3.0-generate-001';
/** @deprecated Shut down 30 June 2026; requests fail. Use MODEL_VEO_3_1. */
public const MODEL_VEO_2 = 'veo-2.0-generate-001';

/** @var array<string, string> tool call ID to thought signature mapping for multi-turn tool use */
Expand Down Expand Up @@ -286,7 +297,7 @@ public function supportsImageEditing(): bool
*/
public function generateImage(string $prompt, array $options = []): array
{
$model = $options['model'] ?? self::IMAGEN_4_FAST;
$model = $options['model'] ?? self::MODEL_3_1_FLASH_IMAGE;
$numberOfImages = $options['numberOfImages'] ?? 1;
$aspectRatio = $options['aspectRatio'] ?? '1:1';

Expand Down Expand Up @@ -486,7 +497,7 @@ public function generateVideo(string $prompt, array $options = []): VideoRespons
*/
public function startVideo(string $prompt, array $options = []): string
{
$model = $options['model'] ?? self::MODEL_VEO_3;
$model = $options['model'] ?? self::MODEL_VEO_3_1;
$payload = $this->buildVideoPayload($prompt, $options);

$url = self::API_BASE . "/{$model}:predictLongRunning?key={$this->apiKey}";
Expand Down
10 changes: 5 additions & 5 deletions tests/Unit/GoogleVideoTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class TestableVeoProvider extends GoogleProvider
{
public string $lastUrl = '';
public array $lastPayload = [];
public array $startResponse = ['name' => 'models/veo-3.0-generate-001/operations/abc123'];
public array $startResponse = ['name' => 'models/veo-3.1-generate-preview/operations/abc123'];

/** @var array<int, array> Queue of getRequest() responses, consumed in order */
public array $pollResponses = [];
Expand Down Expand Up @@ -77,9 +77,9 @@ protected function pause(int $seconds): void
it('posts to the predictLongRunning endpoint and returns the operation name', function () {
$jobId = $this->provider->startVideo('a cat surfing');

expect($jobId)->toBe('models/veo-3.0-generate-001/operations/abc123');
expect($jobId)->toBe('models/veo-3.1-generate-preview/operations/abc123');
expect($this->provider->lastUrl)
->toContain('veo-3.0-generate-001:predictLongRunning')
->toContain('veo-3.1-generate-preview:predictLongRunning')
->toContain('key=test-api-key');
expect($this->provider->lastPayload['instances'][0]['prompt'])->toBe('a cat surfing');
});
Expand Down Expand Up @@ -147,12 +147,12 @@ protected function pause(int $seconds): void
]]],
]];

$video = $this->provider->fetchVideo('models/veo-3.0-generate-001/operations/abc');
$video = $this->provider->fetchVideo('models/veo-3.1-generate-preview/operations/abc');

expect($video)->toBeInstanceOf(VideoResponse::class);
expect($video->data)->toBe('fake-video-binary');
expect($video->uri)->toBe('https://files.test/clip');
expect($video->model)->toBe('veo-3.0-generate-001');
expect($video->model)->toBe('veo-3.1-generate-preview');
});

it('decodes inline base64 video bytes', function () {
Expand Down
Loading