infria 0.1.0
infria: ^0.1.0 copied to clipboard
A clean, customizable Flutter UI SDK and runtime controller for AI chat interfaces, RAG, and dynamic client-side function calling.
INFRIA Flutter SDK #
INFRIA adalah AI Infrastructure for Mobile Applications yang menyediakan Flutter SDK dan cloud orchestration untuk mengintegrasikan asisten percakapan cerdas berbasis RAG (Retrieval-Augmented Generation) dan Dynamic Client-Side Function Calling ke aplikasi mobile tanpa perlu membangun pipeline AI dari nol.
๐ Fitur Utama #
- ๐ฌ Ready-to-Use Inclusive Chat UI (
InfriaChat): Antarmuka obrolan modern yang mendukung tema Light/Dark, avatar, animasi typing indicator, dan auto-scroll. - โก Dynamic Client-Side Function Calling: AI di cloud dapat meminta eksekusi fungsi lokal di perangkat mobile (misal: panggil API rumah sakit, cek nomor antrean, ambil data GPS) secara aman dengan round-trip otomatis.
- ๐ Arsitektur Keamanan BYOK (Bring Your Own Key): Kunci rahasia AI (Gemini / OpenAI) disimpan aman dan terenkripsi di Web Console INFRIA โ tidak pernah ditaruh di dalam aplikasi mobile.
- ๐ก Inclusive UX untuk Pengguna Awam & Lansia:
- Suggestion Chips: Tombol pertanyaan/aksi cepat di atas input bar.
- Function Execution Indicator: Animasi status saat AI sedang mengambil data lokal di HP.
- Confirmation Dialog: Dialog persetujuan sebelum mengeksekusi fungsi sensitif.
- ๐ Observe & Improve Feedback Loop: Komponen rating (๐ / ๐) untuk memantau performa jawaban AI dan mencatat Knowledge Gap.
- ๐ Session Management: Pengelolaan sesi obrolan terisolasi dengan auto-generated UUID/Nanoid.
- ๐จ Fleksibilitas Presentasi: Tampilan halaman penuh (Fullscreen), Modal Bottom Sheet, Dialog Popup, maupun Floating Action Button (FAB).
๐๏ธ Arsitektur Sistem #
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Aplikasi Flutter Klien (Mobile) โ
โ - InfriaClient (projectId & inf_pub_xxx) โ
โ - FunctionRegistry & FunctionExecutor (Lokal di HP) โ
โ - ChatController & InfriaChat UI โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTP REST (/v1/runtime/*)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ BACKEND INFRIA โ
โ - Firebase Cloud Functions (API Gateway & Multi-tenant)โ
โ - Firestore & Secret Manager (Tersimpan Kunci BYOK) โ
โ - n8n & RAG Vector Retrieval โ
โ - LLM Provider (Google Gemini / OpenAI) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Panduan Memulai Cepat (Quickstart) #
1. Instalasi #
Tambahkan infria ke dalam proyek Flutter Anda:
flutter pub add infria
2. Auto-Konfigurasi via CLI (infria init) #
Gunakan tool CLI bawaan untuk memilih proyek dan menghasilkan lib/infria_options.dart secara otomatis:
dart run infria init
CLI akan menampilkan daftar proyek Anda dan otomatis membuat file konfigurasi lib/infria_options.dart.
3. Inisialisasi & Pendaftaran Fungsi (Developer Experience Setara Firebase) #
import 'package:flutter/material.dart';
import 'package:infria/infria.dart';
import 'infria_options.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 1. Inisialisasi SDK via Options yang di-generate CLI
await InfriaSDK.initializeApp(
options: DefaultInfriaOptions.currentPlatform,
);
// 2. Daftarkan callback fungsi lokal yang dapat dipanggil AI secara instan
InfriaSDK.onFunctionCall(
'request_refund',
(arguments) async {
final txId = arguments['transaction_id'] as String;
final response = await TransaksiAPI.batalin(txId);
return response.status; // "Berhasil_Dibatalkan"
},
description: 'Memproses pembatalan pesanan dan refund',
parameters: const [
FunctionParameter.string('transaction_id', description: 'Nomor ID transaksi', isRequired: true),
],
);
runApp(const MyApp());
}
4. Tampilkan Widget Chat (InfriaChat) #
class ChatScreen extends StatelessWidget {
final ChatController controller;
const ChatScreen({super.key, required this.controller});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Asisten Layanan Kesehatan'),
),
body: InfriaChat(
controller: controller,
enableFeedback: true,
suggestions: const [
QuickSuggestion(
label: '๐ฉบ Cek Antrean Poli',
message: 'Berapa nomor antrean saya di Poli Gigi sekarang?',
icon: Icons.access_time_rounded,
),
QuickSuggestion(
label: '๐
Jadwal Dokter',
message: 'Tampilkan jadwal dokter spesialis anak hari ini',
icon: Icons.calendar_today_rounded,
),
QuickSuggestion(
label: '๐ Syarat BPJS',
message: 'Apa saja syarat pendaftaran pasien BPJS?',
icon: Icons.description_rounded,
),
],
),
);
}
}
๐จ Kustomisasi Tema & Builder #
Menggunakan Presets Tema #
InfriaChat(
controller: controller,
theme: InfriaChatTheme.dark().copyWith(
userBubbleColor: const Color(0xFF2563EB),
assistantBubbleColor: const Color(0xFF1E293B),
),
)
Kustomisasi Bubble & Header #
InfriaChat(
controller: controller,
headerBuilder: (context, controller) {
return Container(
padding: const EdgeInsets.all(12),
color: Colors.blue.shade50,
child: Text('Total Pesan: ${controller.messageCount}'),
);
},
messageBubbleBuilder: (context, message) {
return CustomBubbleWidget(message: message);
},
)
๐ฑ Mode Tampilan Presentasi (Modal & Floating Button) #
Buka via Modal Bottom Sheet #
showInfriaChatBottomSheet(
context: context,
controller: controller,
);
Buka via Modal Dialog Popup #
showInfriaChatDialog(
context: context,
controller: controller,
);
Pasang Floating Action Button (FAB) #
Scaffold(
floatingActionButton: InfriaChatFloatingButton(
controller: controller,
tooltip: 'Tanya Asisten AI',
),
body: MyDashboardContent(),
)
๐งช Menjalankan Pengujian #
SDK ini dilengkapi dengan suite pengujian komprehensif (Unit Tests & Widget Tests):
# Analisis statis
dart analyze
# Jalankan seluruh test suite
flutter test
๐ Lisensi #
Didistribusikan di bawah lisensi MIT. Lihat file LICENSE untuk informasi lebih lanjut.