202 lines
8.2 KiB
JavaScript
202 lines
8.2 KiB
JavaScript
// ========================================
|
|
// DÉMONSTRATION ARCHITECTURE MODULAIRE
|
|
// Usage: node lib/adversarial-generation/demo-modulaire.js
|
|
// Objectif: Valider l'intégration modulaire adversariale
|
|
// ========================================
|
|
|
|
const { logSh } = require('../ErrorReporting');
|
|
|
|
// Import modules adversariaux modulaires
|
|
const { applyAdversarialLayer } = require('./AdversarialCore');
|
|
const {
|
|
applyPredefinedStack,
|
|
applyAdaptiveLayers,
|
|
getAvailableStacks
|
|
} = require('./AdversarialLayers');
|
|
const { calculateAntiDetectionScore, evaluateAdversarialImprovement } = require('./AdversarialUtils');
|
|
|
|
/**
|
|
* EXEMPLE D'UTILISATION MODULAIRE
|
|
*/
|
|
async function demoModularAdversarial() {
|
|
console.log('\n🎯 === DÉMONSTRATION ADVERSARIAL MODULAIRE ===\n');
|
|
|
|
// Contenu d'exemple (simulé contenu généré normal)
|
|
const exempleContenu = {
|
|
'|Titre_Principal_1|': 'Guide complet pour choisir votre plaque personnalisée',
|
|
'|Introduction_1|': 'La personnalisation d\'une plaque signalétique représente un enjeu optimal pour votre entreprise. Cette solution comprehensive permet de créer une identité visuelle robuste et seamless.',
|
|
'|Texte_1|': 'Il est important de noter que les matériaux utilisés sont cutting-edge. Par ailleurs, la qualité est optimal. En effet, nos solutions sont comprehensive et robust.',
|
|
'|FAQ_Question_1|': 'Quels sont les matériaux disponibles ?',
|
|
'|FAQ_Reponse_1|': 'Nos matériaux sont optimal : dibond, aluminium, PMMA. Ces solutions comprehensive garantissent une qualité robust et seamless.'
|
|
};
|
|
|
|
console.log('📊 CONTENU ORIGINAL:');
|
|
Object.entries(exempleContenu).forEach(([tag, content]) => {
|
|
console.log(` ${tag}: "${content.substring(0, 60)}..."`);
|
|
});
|
|
|
|
// Analyser contenu original
|
|
const scoreOriginal = calculateAntiDetectionScore(Object.values(exempleContenu).join(' '));
|
|
console.log(`\n📈 Score anti-détection original: ${scoreOriginal}/100`);
|
|
|
|
try {
|
|
// ========================================
|
|
// TEST 1: COUCHE SIMPLE
|
|
// ========================================
|
|
console.log('\n🔧 TEST 1: Application couche adversariale simple');
|
|
|
|
const result1 = await applyAdversarialLayer(exempleContenu, {
|
|
detectorTarget: 'general',
|
|
intensity: 0.8,
|
|
method: 'enhancement'
|
|
});
|
|
|
|
console.log(`✅ Résultat: ${result1.stats.elementsModified}/${result1.stats.elementsProcessed} éléments modifiés`);
|
|
|
|
const scoreAmeliore = calculateAntiDetectionScore(Object.values(result1.content).join(' '));
|
|
console.log(`📈 Score anti-détection amélioré: ${scoreAmeliore}/100 (+${scoreAmeliore - scoreOriginal})`);
|
|
|
|
// ========================================
|
|
// TEST 2: STACK PRÉDÉFINI
|
|
// ========================================
|
|
console.log('\n📦 TEST 2: Application stack prédéfini');
|
|
|
|
// Lister stacks disponibles
|
|
const stacks = getAvailableStacks();
|
|
console.log(' Stacks disponibles:');
|
|
stacks.forEach(stack => {
|
|
console.log(` - ${stack.name}: ${stack.description} (${stack.layersCount} couches)`);
|
|
});
|
|
|
|
const result2 = await applyPredefinedStack(exempleContenu, 'standardDefense', {
|
|
csvData: {
|
|
personality: { nom: 'Marc', style: 'technique' },
|
|
mc0: 'plaque personnalisée'
|
|
}
|
|
});
|
|
|
|
console.log(`✅ Stack standard: ${result2.stats.totalModifications} modifications totales`);
|
|
console.log(` 📊 Couches appliquées: ${result2.stats.layers.filter(l => l.success).length}/${result2.stats.layers.length}`);
|
|
|
|
const scoreStack = calculateAntiDetectionScore(Object.values(result2.content).join(' '));
|
|
console.log(`📈 Score anti-détection stack: ${scoreStack}/100 (+${scoreStack - scoreOriginal})`);
|
|
|
|
// ========================================
|
|
// TEST 3: COUCHES ADAPTATIVES
|
|
// ========================================
|
|
console.log('\n🧠 TEST 3: Application couches adaptatives');
|
|
|
|
const result3 = await applyAdaptiveLayers(exempleContenu, {
|
|
targetDetectors: ['gptZero', 'originality'],
|
|
maxIntensity: 1.2
|
|
});
|
|
|
|
if (result3.stats.adaptive) {
|
|
console.log(`✅ Adaptatif: ${result3.stats.layersApplied || result3.stats.totalModifications} modifications`);
|
|
|
|
const scoreAdaptatif = calculateAntiDetectionScore(Object.values(result3.content).join(' '));
|
|
console.log(`📈 Score anti-détection adaptatif: ${scoreAdaptatif}/100 (+${scoreAdaptatif - scoreOriginal})`);
|
|
}
|
|
|
|
// ========================================
|
|
// COMPARAISON FINALE
|
|
// ========================================
|
|
console.log('\n📊 COMPARAISON FINALE:');
|
|
|
|
const evaluation = evaluateAdversarialImprovement(
|
|
Object.values(exempleContenu).join(' '),
|
|
Object.values(result2.content).join(' '),
|
|
'general'
|
|
);
|
|
|
|
console.log(` 🔹 Réduction empreintes IA: ${evaluation.fingerprintReduction.toFixed(2)}%`);
|
|
console.log(` 🔹 Augmentation diversité: ${evaluation.diversityIncrease.toFixed(2)}%`);
|
|
console.log(` 🔹 Amélioration variation: ${evaluation.variationIncrease.toFixed(2)}%`);
|
|
console.log(` 🔹 Score amélioration global: ${evaluation.improvementScore}`);
|
|
console.log(` 🔹 Taux modification: ${evaluation.modificationRate.toFixed(2)}%`);
|
|
console.log(` 💡 Recommandation: ${evaluation.recommendation}`);
|
|
|
|
// ========================================
|
|
// EXEMPLES DE CONTENU TRANSFORMÉ
|
|
// ========================================
|
|
console.log('\n✨ EXEMPLES DE TRANSFORMATION:');
|
|
|
|
const exempleTransforme = result2.content['|Introduction_1|'] || result1.content['|Introduction_1|'];
|
|
console.log('\n📝 AVANT:');
|
|
console.log(` "${exempleContenu['|Introduction_1|']}"`);
|
|
console.log('\n📝 APRÈS:');
|
|
console.log(` "${exempleTransforme}"`);
|
|
|
|
console.log('\n✅ === DÉMONSTRATION MODULAIRE TERMINÉE ===\n');
|
|
|
|
return {
|
|
success: true,
|
|
originalScore: scoreOriginal,
|
|
improvedScore: Math.max(scoreAmeliore, scoreStack),
|
|
improvement: evaluation.improvementScore
|
|
};
|
|
|
|
} catch (error) {
|
|
console.error('\n❌ ERREUR DÉMONSTRATION:', error.message);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* EXEMPLE D'INTÉGRATION AVEC PIPELINE NORMALE
|
|
*/
|
|
async function demoIntegrationPipeline() {
|
|
console.log('\n🔗 === DÉMONSTRATION INTÉGRATION PIPELINE ===\n');
|
|
|
|
// Simuler résultat pipeline normale (Level 1)
|
|
const contenuNormal = {
|
|
'|Titre_H1_1|': 'Solutions de plaques personnalisées professionnelles',
|
|
'|Intro_1|': 'Notre expertise en signalétique permet de créer des plaques sur mesure adaptées à vos besoins spécifiques.',
|
|
'|Texte_1|': 'Les matériaux proposés incluent l\'aluminium, le dibond et le PMMA. Chaque solution présente des avantages particuliers selon l\'usage prévu.'
|
|
};
|
|
|
|
console.log('💼 SCÉNARIO: Application adversarial post-pipeline normale');
|
|
|
|
try {
|
|
// Exemple Level 6 - Post-processing adversarial
|
|
console.log('\n🎯 Étape 1: Contenu généré par pipeline normale');
|
|
console.log(' ✅ Contenu de base: qualité préservée');
|
|
|
|
console.log('\n🎯 Étape 2: Application couche adversariale modulaire');
|
|
const resultAdversarial = await applyAdversarialLayer(contenuNormal, {
|
|
detectorTarget: 'gptZero',
|
|
intensity: 0.9,
|
|
method: 'hybrid',
|
|
preserveStructure: true
|
|
});
|
|
|
|
console.log(` ✅ Couche adversariale: ${resultAdversarial.stats.elementsModified} éléments modifiés`);
|
|
|
|
console.log('\n📊 RÉSULTAT FINAL:');
|
|
Object.entries(resultAdversarial.content).forEach(([tag, content]) => {
|
|
console.log(` ${tag}:`);
|
|
console.log(` AVANT: "${contenuNormal[tag]}"`);
|
|
console.log(` APRÈS: "${content}"`);
|
|
console.log('');
|
|
});
|
|
|
|
return { success: true, result: resultAdversarial };
|
|
|
|
} catch (error) {
|
|
console.error('❌ ERREUR INTÉGRATION:', error.message);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
// Exécuter démonstrations si fichier appelé directement
|
|
if (require.main === module) {
|
|
(async () => {
|
|
await demoModularAdversarial();
|
|
await demoIntegrationPipeline();
|
|
})().catch(console.error);
|
|
}
|
|
|
|
module.exports = {
|
|
demoModularAdversarial,
|
|
demoIntegrationPipeline
|
|
}; |