kai_engine_firebase_ai 0.2.0
kai_engine_firebase_ai: ^0.2.0 copied to clipboard
A Firebase AI adapter for the Kai Engine.
Kai Engine Firebase AI #
A Firebase AI adapter for the Kai Engine.
Overview #
This package provides Firebase AI (Gemini) integration for the Kai Engine, allowing you to easily use Firebase's generative AI services with the Kai Engine's pipeline architecture.
Features #
- Seamless integration with Firebase AI (Gemini models)
- Implements
GenerationServiceBaseinterface from Kai Engine - Streaming responses with real-time text updates
- Tool/function calling support with automatic execution loop
- Token counting support
- Configurable safety settings and generation parameters
- Built-in infinite loop detection for tool calls
Getting Started #
Add the dependencies to your pubspec.yaml:
dependencies:
kai_engine: ^0.1.1
kai_engine_firebase_ai: ^0.1.1
firebase_core: ^3.0.0
firebase_ai: ^3.2.0
Or install via command line:
dart pub add kai_engine kai_engine_firebase_ai firebase_core firebase_ai
Setup #
-
Set up Firebase in your project following the Firebase setup guide.
-
Enable the Vertex AI for Firebase API in your Firebase project.
Usage #
Basic Setup #
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_ai/firebase_ai.dart';
import 'package:kai_engine/kai_engine.dart';
import 'package:kai_engine_firebase_ai/kai_engine_firebase_ai.dart';
// Initialize Firebase
await Firebase.initializeApp();
// Create the Firebase AI instance
final firebaseAi = FirebaseAI.googleAI();
// Create the generation service
final generationService = FirebaseAiGenerationService(
firebaseAi: firebaseAi,
config: GenerativeConfig(
model: 'gemini-2.0-flash',
generationConfig: GenerationConfig(
temperature: 0.7,
maxOutputTokens: 2048,
),
),
);
// Use with your chat controller
final chatController = MyChatController(
conversationManager: conversationManager,
generationService: generationService,
);
With Tool/Function Calling #
// Define a tool call model
class WeatherCall {
final String location;
WeatherCall({required this.location});
factory WeatherCall.fromJson(Map<String, Object?> json) {
return WeatherCall(location: json['location'] as String);
}
}
// Define a tool schema
final class WeatherToolSchema extends FirebaseAiToolSchema<WeatherCall, String> {
WeatherToolSchema()
: super(
parser: WeatherCall.fromJson,
declaration: FunctionDeclaration(
'get_weather',
'Get the current weather for a location',
parameters: {
'location': Schema.string(description: 'City name'),
},
),
);
@override
Future<ToolResult<String>> execute(WeatherCall call) async {
// Fetch weather data...
final weather = 'Sunny, 25°C in ${call.location}';
return ToolResult.success(weather, {'weather': weather});
}
}
// Create service with tools
final generationService = FirebaseAiGenerationService(
firebaseAi: firebaseAi,
config: GenerativeConfig(
model: 'gemini-2.0-flash',
toolSchemas: [WeatherToolSchema()],
),
);
Streaming Responses #
// The service automatically handles streaming
controller.generationStateStream.listen((state) {
state.when(
initial: () {},
loading: (_) => print('Starting...'),
streamingText: (text) => print('Received: $text'),
functionCalling: (name) => print('Calling function: $name'),
complete: (result) => print('Complete!'),
error: (e) => print('Error: $e'),
);
});
await controller.submit('What is the weather in Tokyo?');
Custom Message Adapter #
// Use custom adapter if needed
final generationService = FirebaseAiGenerationService(
firebaseAi: firebaseAi,
config: config,
messageAdapter: MyCustomContentAdapter(),
);
Configuration Options #
GenerativeConfig #
| Parameter | Type | Description |
|---|---|---|
model |
String |
The Gemini model to use (e.g., 'gemini-2.0-flash') |
safetySettings |
List<SafetySetting>? |
Safety settings for content filtering |
generationConfig |
GenerationConfig? |
Generation parameters (temperature, tokens, etc.) |
toolSchemas |
List<FirebaseAiToolSchema>? |
Tool definitions for function calling |
toolConfig |
ToolingConfig? |
Tool execution configuration |
systemPrompt |
String? |
Default system prompt (overridden by ContextEngine) |
Related Packages #
- kai_engine - Core AI chat engine
- kai_engine_chat_ui - Flutter chat UI widgets
- prompt_block - Structured prompt blocks
License #
This project is licensed under the MIT License - see the LICENSE file for details.