Skip to main content
Glama
test-backend-adapters.js5.61 kB
#!/usr/bin/env node /** * Test script for Smart AI Bridge v1.3.0 Backend Adapter Architecture * * Tests: * 1. Backend adapter creation * 2. Backend registry initialization * 3. Adapter registration * 4. Health checks * 5. Fallback chain */ import { BackendRegistry } from './backends/backend-registry.js'; import { LocalAdapter } from './backends/local-adapter.js'; import { GeminiAdapter } from './backends/gemini-adapter.js'; import { DeepSeekAdapter } from './backends/deepseek-adapter.js'; import { QwenAdapter } from './backends/qwen-adapter.js'; console.log('\n='.repeat(60)); console.log('Smart AI Bridge v1.3.0 - Backend Adapter Test'); console.log('='.repeat(60) + '\n'); // Test 1: Create adapters console.log('✓ Test 1: Creating backend adapters...'); try { const localAdapter = new LocalAdapter(); const geminiAdapter = new GeminiAdapter(); const deepseekAdapter = new DeepSeekAdapter(); const qwenAdapter = new QwenAdapter(); console.log(` - LocalAdapter: ${localAdapter.name} (${localAdapter.type})`); console.log(` - GeminiAdapter: ${geminiAdapter.name} (${geminiAdapter.type})`); console.log(` - DeepSeekAdapter: ${deepseekAdapter.name} (${deepseekAdapter.type})`); console.log(` - QwenAdapter: ${qwenAdapter.name} (${qwenAdapter.type})`); console.log('✅ Adapters created successfully\n'); } catch (error) { console.error('❌ Failed to create adapters:', error.message); process.exit(1); } // Test 2: Initialize backend registry console.log('✓ Test 2: Initializing backend registry...'); let registry; try { registry = new BackendRegistry(); const stats = registry.getStats(); console.log(` - Total backends: ${stats.totalBackends}`); console.log(` - Enabled backends: ${stats.enabledBackends}`); console.log(` - Fallback chain: ${stats.fallbackChain.join(' → ')}`); console.log('✅ Registry initialized successfully\n'); } catch (error) { console.error('❌ Failed to initialize registry:', error.message); process.exit(1); } // Test 3: Register adapters console.log('✓ Test 3: Registering adapters with registry...'); try { const localAdapter = new LocalAdapter(); const geminiAdapter = new GeminiAdapter(); const deepseekAdapter = new DeepSeekAdapter(); const qwenAdapter = new QwenAdapter(); registry.setAdapter('local', localAdapter); registry.setAdapter('gemini', geminiAdapter); registry.setAdapter('deepseek', deepseekAdapter); registry.setAdapter('qwen', qwenAdapter); const enabledBackends = registry.getEnabledBackends(); console.log(` - Registered ${enabledBackends.length} adapters`); enabledBackends.forEach(name => { const adapter = registry.getAdapter(name); console.log(` * ${name}: ${adapter ? '✓ available' : '✗ missing'}`); }); console.log('✅ Adapters registered successfully\n'); } catch (error) { console.error('❌ Failed to register adapters:', error.message); process.exit(1); } // Test 4: Test circuit breaker console.log('✓ Test 4: Testing circuit breaker...'); try { const localAdapter = registry.getAdapter('local'); console.log(` - Initial state: circuit ${localAdapter.circuitOpen ? 'OPEN' : 'CLOSED'}`); console.log(` - Consecutive failures: ${localAdapter.consecutiveFailures}`); console.log(` - Circuit threshold: ${localAdapter.circuitOpenThreshold}`); console.log('✅ Circuit breaker functional\n'); } catch (error) { console.error('❌ Circuit breaker test failed:', error.message); process.exit(1); } // Test 5: Test adapter metrics console.log('✓ Test 5: Testing adapter metrics...'); try { const localAdapter = registry.getAdapter('local'); const metrics = localAdapter.getMetrics(); console.log(` - Total requests: ${metrics.totalRequests}`); console.log(` - Successful: ${metrics.successfulRequests}`); console.log(` - Failed: ${metrics.failedRequests}`); console.log(` - Avg latency: ${metrics.averageLatency}ms`); console.log('✅ Metrics tracking functional\n'); } catch (error) { console.error('❌ Metrics test failed:', error.message); process.exit(1); } // Test 6: Test fallback chain console.log('✓ Test 6: Testing fallback chain...'); try { const chain = registry.getFallbackChain(); console.log(` - Fallback order: ${chain.join(' → ')}`); const nextAvailable = registry.getNextAvailable(); console.log(` - Next available backend: ${nextAvailable}`); const nextExcludingLocal = registry.getNextAvailable(['local']); console.log(` - Next (excluding local): ${nextExcludingLocal}`); console.log('✅ Fallback chain functional\n'); } catch (error) { console.error('❌ Fallback chain test failed:', error.message); process.exit(1); } // Summary console.log('='.repeat(60)); console.log('✅ All tests passed! Backend adapter architecture is functional.'); console.log('='.repeat(60) + '\n'); console.log('Backend Adapter Architecture Summary:'); const stats = registry.getStats(); console.log(`- Registered backends: ${stats.totalBackends}`); console.log(`- Enabled backends: ${stats.enabledBackends}`); console.log(`- Healthy backends: ${stats.healthyBackends}`); console.log(`- Fallback chain: ${stats.fallbackChain.join(' → ')}`); console.log('\nBackend Details:'); stats.backends.forEach(backend => { console.log(` ${backend.name}:`); console.log(` Type: ${backend.type}`); console.log(` Enabled: ${backend.enabled}`); console.log(` Priority: ${backend.priority}`); console.log(` Description: ${backend.description}`); }); console.log('\n✓ Smart AI Bridge v1.3.0 backend adapter architecture is ready!');

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Platano78/Smart-AI-Bridge'

If you have feedback or need assistance with the MCP directory API, please join our Discord server