feat: merge branche IA (beta) - Intégration assistant IA logisticien Gemini

This commit is contained in:
ElPoyo
2026-05-25 23:35:40 +02:00
15 changed files with 3394 additions and 163 deletions
+30 -2
View File
@@ -3,8 +3,11 @@
* Architecture backend sécurisée avec authentification et permissions
*/
// Charger les variables d'environnement depuis .env
require('dotenv').config();
// Charger les variables d'environnement depuis .env.local (développement)
// ou .env (production Firebase)
const path = require('path');
require('dotenv').config({ path: path.join(__dirname, '.env.local') });
require('dotenv').config({ path: path.join(__dirname, '.env') });
const { onRequest, onCall } = require("firebase-functions/v2/https");
const { onSchedule } = require("firebase-functions/v2/scheduler");
@@ -17,6 +20,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 +37,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
// ============================================================================
@@ -4544,3 +4555,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 });
}
}
}));