96 lines
2.4 KiB
Markdown
96 lines
2.4 KiB
Markdown
# Genkit Google GenAI Plugin (`genkit_google_genai`)
|
|
|
|
The Google AI plugin provides an interface against the official Google AI Gemini API.
|
|
|
|
## Usage
|
|
|
|
```dart
|
|
import 'package:genkit/genkit.dart';
|
|
import 'package:genkit_google_genai/genkit_google_genai.dart';
|
|
|
|
void main() async {
|
|
// Initialize Genkit with the Google AI plugin
|
|
final ai = Genkit(plugins: [googleAI()]);
|
|
|
|
// Generate text
|
|
final response = await ai.generate(
|
|
model: googleAI.gemini('gemini-2.5-flash'),
|
|
prompt: 'Tell me a joke about a developer.',
|
|
);
|
|
|
|
print(response.text);
|
|
}
|
|
```
|
|
|
|
## Embeddings
|
|
|
|
```dart
|
|
final embeddings = await ai.embedMany(
|
|
embedder: googleAI.textEmbedding('text-embedding-004'),
|
|
documents: [
|
|
DocumentData(content: [TextPart(text: 'Hello world')]),
|
|
],
|
|
);
|
|
```
|
|
|
|
## Image Generation
|
|
|
|
The plugin also supports image generation models such as `gemini-2.5-flash-image`.
|
|
|
|
### Example (Nano Banana)
|
|
|
|
```dart
|
|
// Define an image generation flow
|
|
ai.defineFlow(
|
|
name: 'imageGenerator',
|
|
inputSchema: .string(defaultValue: 'A banana riding a bike'),
|
|
outputSchema: Media.$schema,
|
|
fn: (input, context) async {
|
|
final response = await ai.generate(
|
|
model: googleAI.gemini('gemini-2.5-flash-image'),
|
|
prompt: input,
|
|
);
|
|
if (response.media == null) {
|
|
throw Exception('No media generated');
|
|
}
|
|
return response.media!;
|
|
},
|
|
);
|
|
```
|
|
|
|
The media (url field) contain base64 encoded data uri. You can decode it and save it as a file.
|
|
|
|
## Text-to-Speech (TTS)
|
|
|
|
You can use text-to-speech models to generate audio from text. The generated `Media` object will contain base64 encoded PCM audio in its data URI.
|
|
|
|
```dart
|
|
// Define a TTS flow
|
|
ai.defineFlow(
|
|
name: 'textToSpeech',
|
|
inputSchema: .string(defaultValue: 'Genkit is an amazing AI framework!'),
|
|
outputSchema: Media.$schema,
|
|
fn: (prompt, _) async {
|
|
final response = await ai.generate(
|
|
model: googleAI.gemini('gemini-2.5-flash-preview-tts'),
|
|
prompt: prompt,
|
|
config: GeminiTtsOptions(
|
|
responseModalities: ['AUDIO'],
|
|
speechConfig: SpeechConfig(
|
|
voiceConfig: VoiceConfig(
|
|
prebuiltVoiceConfig: PrebuiltVoiceConfig(voiceName: 'Puck'),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
if (response.media != null) {
|
|
return response.media!;
|
|
}
|
|
throw Exception('No audio generated');
|
|
},
|
|
);
|
|
```
|
|
|
|
Google AI also supports multi-speaker TTS by configuring a `MultiSpeakerVoiceConfig` inside `SpeechConfig`.
|