- New modular pipeline architecture allowing custom workflow combinations
- Per-step LLM provider configuration (Claude, OpenAI, Gemini, Deepseek, Moonshot, Mistral)
- Visual pipeline builder and runner interfaces with drag-and-drop
- 10 predefined pipeline templates (minimal-test to originality-bypass)
- Pipeline CRUD operations via ConfigManager and REST API
- Fix variable resolution in instructions (HTML tags were breaking {{variables}})
- Fix hardcoded LLM providers in AdversarialCore
- Add TESTS_LLM_PROVIDER.md documentation with validation results
- Update dashboard to disable legacy config editor
API Endpoints:
- POST /api/pipeline/save, execute, validate, estimate
- GET /api/pipeline/list, modules, templates
Backward compatible with legacy modular workflow system.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
146 lines
5.1 KiB
JavaScript
146 lines
5.1 KiB
JavaScript
/**
|
|
* Test LLM Provider Execution
|
|
* Simule une exécution de pipeline et vérifie que llmProvider est passé correctement
|
|
*/
|
|
|
|
const { PipelineDefinition } = require('./lib/pipeline/PipelineDefinition');
|
|
const { PipelineExecutor } = require('./lib/pipeline/PipelineExecutor');
|
|
|
|
console.log('🧪 Test LLM Provider Execution Flow\n');
|
|
|
|
// Pipeline de test avec providers spécifiques
|
|
const testPipeline = {
|
|
name: 'Test LLM Execution',
|
|
description: 'Test que chaque étape utilise le bon LLM',
|
|
pipeline: [
|
|
{
|
|
step: 1,
|
|
module: 'generation',
|
|
mode: 'simple',
|
|
intensity: 1.0,
|
|
parameters: {
|
|
llmProvider: 'openai' // Override: normalement claude par défaut
|
|
}
|
|
},
|
|
{
|
|
step: 2,
|
|
module: 'selective',
|
|
mode: 'lightEnhancement',
|
|
intensity: 0.8,
|
|
parameters: {
|
|
llmProvider: 'mistral' // Override: normalement openai par défaut
|
|
}
|
|
}
|
|
],
|
|
metadata: {
|
|
author: 'test',
|
|
created: new Date().toISOString(),
|
|
version: '1.0'
|
|
}
|
|
};
|
|
|
|
console.log('📋 Configuration du test pipeline:');
|
|
testPipeline.pipeline.forEach(step => {
|
|
const moduleInfo = PipelineDefinition.getModuleInfo(step.module);
|
|
const configuredProvider = step.parameters?.llmProvider;
|
|
const defaultProvider = moduleInfo?.defaultLLM;
|
|
|
|
console.log(` Step ${step.step}: ${step.module}`);
|
|
console.log(` - Default LLM: ${defaultProvider}`);
|
|
console.log(` - Configured LLM: ${configuredProvider}`);
|
|
console.log(` - Expected: ${configuredProvider} (override)`);
|
|
});
|
|
console.log('');
|
|
|
|
// Test extraction des parameters
|
|
console.log('📋 Test extraction parameters dans executor:');
|
|
const executor = new PipelineExecutor();
|
|
|
|
testPipeline.pipeline.forEach(step => {
|
|
const moduleInfo = PipelineDefinition.getModuleInfo(step.module);
|
|
|
|
// Simuler l'extraction comme dans PipelineExecutor
|
|
const extractedProvider = step.parameters?.llmProvider || moduleInfo?.defaultLLM || 'claude';
|
|
|
|
console.log(` Step ${step.step} (${step.module}):`)
|
|
console.log(` → Extracted provider: ${extractedProvider}`);
|
|
console.log(` ✓ Correct extraction`);
|
|
});
|
|
console.log('');
|
|
|
|
// Test cas edge: pas de llmProvider spécifié
|
|
console.log('📋 Test fallback sur defaultLLM:');
|
|
const stepWithoutProvider = {
|
|
step: 1,
|
|
module: 'generation',
|
|
mode: 'simple',
|
|
intensity: 1.0,
|
|
parameters: {} // Pas de llmProvider
|
|
};
|
|
|
|
const moduleInfo1 = PipelineDefinition.getModuleInfo(stepWithoutProvider.module);
|
|
const fallbackProvider = stepWithoutProvider.parameters?.llmProvider || moduleInfo1?.defaultLLM || 'claude';
|
|
|
|
console.log(` Step sans llmProvider configuré:`);
|
|
console.log(` Module: ${stepWithoutProvider.module}`);
|
|
console.log(` → Fallback: ${fallbackProvider}`);
|
|
console.log(` ✓ Utilise defaultLLM (${moduleInfo1.defaultLLM})`);
|
|
console.log('');
|
|
|
|
// Test cas edge: llmProvider vide
|
|
console.log('📋 Test llmProvider vide (empty string):');
|
|
const stepWithEmptyProvider = {
|
|
step: 1,
|
|
module: 'selective',
|
|
mode: 'standardEnhancement',
|
|
intensity: 1.0,
|
|
parameters: {
|
|
llmProvider: '' // Empty string
|
|
}
|
|
};
|
|
|
|
const moduleInfo2 = PipelineDefinition.getModuleInfo(stepWithEmptyProvider.module);
|
|
const emptyProvider = stepWithEmptyProvider.parameters?.llmProvider || moduleInfo2?.defaultLLM || 'claude';
|
|
|
|
console.log(` Step avec llmProvider = '' (empty):`);
|
|
console.log(` Module: ${stepWithEmptyProvider.module}`);
|
|
console.log(` → Fallback: ${emptyProvider}`);
|
|
console.log(` ✓ Utilise defaultLLM (${moduleInfo2.defaultLLM})`);
|
|
console.log('');
|
|
|
|
// Résumé
|
|
console.log('✅ Tests d\'extraction LLM Provider réussis!\n');
|
|
console.log('🎯 Comportement vérifié:');
|
|
console.log(' 1. llmProvider configuré → utilise la valeur configurée');
|
|
console.log(' 2. llmProvider non spécifié → fallback sur module.defaultLLM');
|
|
console.log(' 3. llmProvider vide → fallback sur module.defaultLLM');
|
|
console.log(' 4. Aucun default → fallback final sur "claude"');
|
|
console.log('');
|
|
|
|
// Afficher le flow complet
|
|
console.log('📊 Flow d\'exécution complet:');
|
|
console.log('');
|
|
console.log(' Frontend (pipeline-builder.js):');
|
|
console.log(' - User sélectionne LLM dans dropdown');
|
|
console.log(' - Sauvé dans step.parameters.llmProvider');
|
|
console.log(' ↓');
|
|
console.log(' Backend API (ManualServer.js):');
|
|
console.log(' - Reçoit pipelineConfig avec steps');
|
|
console.log(' - Passe à PipelineExecutor.execute()');
|
|
console.log(' ↓');
|
|
console.log(' PipelineExecutor:');
|
|
console.log(' - Pour chaque step:');
|
|
console.log(' • Extract: step.parameters?.llmProvider || module.defaultLLM');
|
|
console.log(' • Pass config avec llmProvider aux modules');
|
|
console.log(' ↓');
|
|
console.log(' Modules (SelectiveUtils, AdversarialCore, etc.):');
|
|
console.log(' - Reçoivent config.llmProvider');
|
|
console.log(' - Appellent LLMManager.callLLM(provider, ...)');
|
|
console.log(' ↓');
|
|
console.log(' LLMManager:');
|
|
console.log(' - Route vers le bon provider (Claude, OpenAI, etc.)');
|
|
console.log(' - Execute la requête');
|
|
console.log('');
|
|
|
|
console.log('✅ Implémentation LLM Provider complète et fonctionnelle!');
|