feat: Intégration d'un assistant IA logisticien basé sur Gemini
- Ajout d'une Cloud Function `aiEquipmentProposal` utilisant le modèle Gemini avec function calling pour suggérer du matériel et des containers. - Implémentation de plusieurs outils (tools) côté serveur pour permettre à l'IA d'interagir avec Firestore : `search_equipment`, `check_availability_batch`, `get_past_events`, `search_event_reference` et `search_containers`. - Ajout de la dépendance `@google/generative-ai` dans le backend. - Création d'un service Flutter `AiEquipmentAssistantService` pour communiquer avec la nouvelle Cloud Function. - Ajout d'une interface de dialogue `AiEquipmentAssistantDialog` permettant aux utilisateurs de discuter avec l'IA pour affiner les propositions de matériel. - Intégration de l'assistant IA dans la section de gestion du matériel des événements (`EventAssignedEquipmentSection`). - Mise à jour de `DataService` avec de nouvelles méthodes de recherche et de vérification de disponibilité optimisées pour l'assistant. - Activation du mode développement et configuration des identifiants de test dans `env.dart`. - Optimisation des paramètres de la Cloud Function (timeout de 300s et 1GiB de RAM) pour supporter les traitements IA.
This commit is contained in:
@@ -17,6 +17,7 @@ const { Storage } = require('@google-cloud/storage');
|
||||
const auth = require('./utils/auth');
|
||||
const helpers = require('./utils/helpers');
|
||||
const { generateTTS } = require('./generateTTS');
|
||||
const { handleAiEquipmentProposal } = require('./aiEquipmentProposal');
|
||||
|
||||
// Initialisation sécurisée
|
||||
if (!admin.apps.length) {
|
||||
@@ -33,6 +34,13 @@ const httpOptions = {
|
||||
// Version: 2.0 - Ajout de l'invoker public pour résoudre les problèmes CORS
|
||||
};
|
||||
|
||||
// Options dédiées pour les traitements IA potentiellement longs.
|
||||
const aiHttpOptions = {
|
||||
...httpOptions,
|
||||
timeoutSeconds: 300,
|
||||
memory: '1GiB',
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// CORS Middleware
|
||||
// ============================================================================
|
||||
@@ -4263,3 +4271,20 @@ exports.generateTTSV2 = onRequest(ttsHttpOptions, async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// ============================================================================
|
||||
// AI - Assistant Logisticien (Gemini avec function calling côté serveur)
|
||||
// ============================================================================
|
||||
|
||||
exports.aiEquipmentProposal = onRequest(aiHttpOptions, withCors(async (req, res) => {
|
||||
try {
|
||||
// Authentification Firebase obligatoire (pas de clé API côté client)
|
||||
await auth.authenticateUser(req);
|
||||
await handleAiEquipmentProposal(req, res);
|
||||
} catch (error) {
|
||||
logger.error('[aiEquipmentProposal] Error:', error);
|
||||
if (!res.headersSent) {
|
||||
res.status(500).json({ error: error.message });
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user