gemini_bridge 1.0.0 copy "gemini_bridge: ^1.0.0" to clipboard
gemini_bridge: ^1.0.0 copied to clipboard

A pure Dart bridge to the Google Gemini API. Lightweight, powerful, and without any Flutter dependencies.

example/gemini_bridge_example.dart

import 'dart:convert';
import 'dart:io';

import 'package:gemini_bridge/gemini_bridge.dart';

void main() async {
  final apiKey = 'YOUR_GEMINI_API_KEY';

  final client = GeminiClient(apiKey: apiKey);
  final separator = '\n${'=' * 50}\n';

  // --- الحالة 1: توليد نص بسيط ---
  print('--- 1. توليد نص بسيط ---');
  try {
    final response = await client.generateContent('لماذا السماء زرقاء؟ اشرح باختصار.');
    print('المستخدم: لماذا السماء زرقاء؟ اشرح باختصار.');
    print('Gemini: ${response.text}');
  } on GeminiBridgeException catch (e) {
    print('حدث خطأ: $e');
  }
  print(separator);

  // --- الحالة 2: استجابة متدفقة ---
  print('--- 2. استجابة متدفقة (Streaming) ---');
  try {
    final prompt = [Content.text('اخبرني قصة مستقبلية قصيرة عن مبرمج.')];
    final stream = client.generateContentStream(prompt);

    print('المستخدم: اخبرني قصة مستقبلية قصيرة عن مبرمج.');
    stdout.write('Gemini (متدفق): ');
    await for (final chunk in stream) {
      stdout.write(chunk.text);
    }
    print('');
  } on GeminiBridgeException catch (e) {
    print('حدث خطأ أثناء البث المتدفق: $e');
  }
  print(separator);

  // --- الحالة 3: مخرجات JSON محددة ---
  print('--- 3. توليد مُتحكَم به (مخرجات JSON) ---');
  try {
    final recipeSchema = Schema.object(properties: {
      'recipeName': Schema.string(description: 'اسم الوصفة.'),
      'ingredients': Schema.array(
        description: 'قائمة بالمكونات.',
        items: Schema.object(properties: {
          'name': Schema.string(description: 'اسم المكون'),
          'quantity': Schema.number(description: 'الكمية'),
          'unit': Schema.string(description: 'الوحدة، مثل: جرام، مل، كوب'),
        }),
      ),
      'totalCalories': Schema.integer(description: 'إجمالي السعرات الحرارية.'),
    });

    final generationConfig = GenerationConfig(
      responseMimeType: 'application/json',
      responseSchema: recipeSchema,
    );

    final prompt = [Content.text('أنشئ وصفة بسيطة للفطائر الكلاسيكية (pancake) مع السعرات الحرارية.')];
    print('المستخدم: أنشئ وصفة بسيطة للفطائر الكلاسيكية (pancake) مع السعرات الحرارية.');
    
    final response = await client.generateContentFromPrompt(
      prompt,
      generationConfig: generationConfig,
    );

    print('Gemini (JSON):');
    final prettyJson = JsonEncoder.withIndent('  ').convert(jsonDecode(response.text!));
    print(prettyJson);

  } on GeminiBridgeException catch (e) {
    print('حدث خطأ في توليد JSON: $e');
  }
  print(separator);


  // --- الحالة 4: استخدام الأدوات (استدعاء الدوال) ---
  print('--- 4. استخدام الأدوات (استدعاء الدوال) ---');
  try {
    final weatherFunction = FunctionDeclaration(
      'getCurrentWeather',
      'الحصول على الطقس الحالي في موقع معين.',
      parameters: {
        'location_info': Schema.object(properties: {
          'location': Schema.string(description: 'المدينة والدولة، مثل: الرياض، السعودية'),
        }),
      },
    );

    final tool = Tool.functionDeclarations([weatherFunction]);

    final initialPrompt = [Content.text("ما هو الطقس في الرياض؟")];
    print('المستخدم: ما هو الطقس في الرياض؟');

    final response = await client.generateContentFromPrompt(
      initialPrompt,
      tools: [tool],
    );

    final functionCalls = response.functionCalls;

    if (functionCalls.isNotEmpty) {
      final call = functionCalls.first;
      if (call.name == 'getCurrentWeather') {
        final location = (call.args['location_info'] as Map<String, dynamic>)['location'];
        print('Gemini يطلب استدعاء دالة: ${call.name} للموقع: $location');

        final weatherResult = {"temperature": "35", "unit": "C", "description": "حار ومشمس"};
        print('نتيجة الدالة المحلية: $weatherResult');

        final resultPrompt = [
          ...initialPrompt,
          Content.model(functionCalls),
          Content.functionResponse(call.name, weatherResult),
        ];

        print('إرسال النتيجة مرة أخرى إلى Gemini...');
        final finalResponse = await client.generateContentFromPrompt(resultPrompt);
        print('إجابة Gemini النهائية: ${finalResponse.text}');
      }
    } else {
      print('لم يطلب النموذج استدعاء أي دالة وأجاب مباشرة: ${response.text}');
    }

  } on GeminiBridgeException catch (e) {
    print('حدث خطأ في استخدام الأدوات: $e');
  }
}
1
likes
155
points
13
downloads

Publisher

unverified uploader

Weekly Downloads

A pure Dart bridge to the Google Gemini API. Lightweight, powerful, and without any Flutter dependencies.

Repository (GitHub)
View/report issues

Topics

#dart #gemini #google #api #bridge

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

http

More

Packages that depend on gemini_bridge