Symphony AI Local es una app Flutter de referencia: asistente conversacional con LLM on-device (llama.cpp), enrutado de herramientas (búsqueda, archivos, URLs, etc.) y flujo de login placeholder pensado para sustituir por auth real.
🎨 Diseño UI: implementado en código Flutter (Material 3 + tema propio en lib/app_theme.dart). No hay prototipo Figma enlazado en este ejemplo; podés enlazar el tuyo aquí.
👉 Placeholder: [Tu enlace Figma o Penpot]
- 📱 Cliente multiplataforma Flutter (Android, Linux, Windows; iOS/macOS en scaffold estándar)
- 🧠 Motor local: descarga de modelo GGUF (URL de ejemplo en código) y servidor llama.cpp embebido (
llama-server/ JNI en Android) - 🤖 Capa agente:
ChatAssistantService+CommandRouter(planificación por JSON y ejecución de herramientas sin alucinar rutas) - 🔐 Auth de ejemplo:
EmptyAuthService(persistencia local conSharedPreferences; reemplazar por OAuth/OIDC cuando toque) - 🛠️ Herramientas por SO:
system_tools(Linux, Windows, Android, iOS) y comandos tipo/http-get, búsqueda, WhatsApp Web, etc.
ai/
├── lib/
│ ├── main.dart # AuthGate, permisos, shell
│ ├── app_theme.dart
│ ├── llama_service.dart # Descarga GGUF + elección de motor
│ ├── llama_engine_android.dart
│ ├── llama_engine_desktop.dart
│ ├── models/
│ ├── services/
│ │ ├── auth_service.dart
│ │ ├── chat_assistant_service.dart
│ │ ├── commands/command_router.dart
│ │ ├── permissions/
│ │ └── system_tools/
│ └── ui/ # screens + widgets
├── android/app/src/main/jniLibs/ # .so llama/ggml (ejemplo compilado)
├── assets/ # binarios opcionales (ver .gitignore)
├── pubspec.yaml
└── .gitignore # secretos, .gguf, assets/bin/, pasos locales
- Requisitos: Flutter SDK estable, en Android el entorno SDK/NDK según tu máquina.
- Dependencias:
flutter pub get
- Ejecutar (ejemplo Linux):
flutter run -d linux- En Android:
flutter run -d <device>(la primera vez puede tardar por la descarga del modelo ~2 GB).
- Notas:
- El nombre Symphony y la URL del modelo en
llama_service.dartson de ejemplo; ajustalos a tu producto y política de licencias del modelo. - No subas claves: usá
.env/--dart-definesi más adelante conectás APIs remotas (ver.gitignore).
- El nombre Symphony y la URL del modelo en
Este repo sirve como plantilla agentic móvil/desktop: conversación local, herramientas deterministas y UI lista para iterar. El branding Symphony es ilustrativo; renombrá strings en MaterialApp, pantallas y prompts cuando definas tu producto final.