route-claudecode
Version:
Advanced routing and transformation system for Claude Code outputs to multiple AI providers
399 lines • 15 kB
JavaScript
"use strict";
/**
* 动态模型配置系统集成示例
* 展示如何将模型发现系统集成到路由器和提供商中
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.DynamicModelIntegration = void 0;
exports.createIntegratedRouterConfig = createIntegratedRouterConfig;
exports.createDynamicModelIntegration = createDynamicModelIntegration;
exports.exampleUsage = exampleUsage;
const dynamic_model_config_manager_1 = require("@/utils/dynamic-model-config-manager");
const logger_1 = require("@/utils/logger");
/**
* 动态模型配置系统集成类
*/
class DynamicModelIntegration {
config;
modelManager;
isInitialized = false;
constructor(config) {
this.config = config;
if (config.modelDiscovery.enabled) {
this.initializeModelManager();
}
}
/**
* 初始化模型管理器
*/
initializeModelManager() {
this.modelManager = (0, dynamic_model_config_manager_1.createDynamicModelConfigManager)({
...dynamic_model_config_manager_1.DEFAULT_MODEL_CONFIG_MANAGER_CONFIG,
autoDiscovery: this.config.modelDiscovery.autoUpdateRouting,
discoveryInterval: this.config.modelDiscovery.discoveryInterval,
maxModelsPerProvider: this.config.modelDiscovery.maxModelsPerProvider
});
// 设置模型更新监听器
this.modelManager.addModelUpdateListener(this.handleModelUpdate.bind(this));
logger_1.logger.info('Dynamic model configuration system initialized', {
enabled: this.config.modelDiscovery.enabled,
autoUpdateRouting: this.config.modelDiscovery.autoUpdateRouting,
discoveryInterval: this.config.modelDiscovery.discoveryInterval
}, 'dynamic-model-integration');
}
/**
* 初始化系统集成
*/
async initialize() {
if (!this.modelManager) {
logger_1.logger.warn('Model discovery is disabled, skipping initialization', {}, 'dynamic-model-integration');
return;
}
logger_1.logger.info('Initializing dynamic model configuration system', {}, 'dynamic-model-integration');
try {
// 注册所有提供商
for (const [providerId, providerConfig] of Object.entries(this.config.providers)) {
await this.registerProvider(providerId, providerConfig);
}
// 启动自动发现
if (this.config.modelDiscovery.autoUpdateRouting) {
this.modelManager.startAutoDiscovery();
logger_1.logger.info('Auto discovery started', {
interval: this.config.modelDiscovery.discoveryInterval + ' minutes'
}, 'dynamic-model-integration');
}
this.isInitialized = true;
logger_1.logger.info('Dynamic model configuration system initialized successfully', {}, 'dynamic-model-integration');
}
catch (error) {
logger_1.logger.error('Failed to initialize dynamic model configuration system', error, 'dynamic-model-integration');
throw error;
}
}
/**
* 注册提供商
*/
async registerProvider(providerId, providerConfig) {
if (!this.modelManager)
return;
logger_1.logger.debug('Registering provider for model discovery', { providerId }, 'dynamic-model-integration');
try {
await this.modelManager.registerProvider(providerId, providerConfig);
// 立即执行一次模型发现
if (this.config.modelDiscovery.autoUpdateRouting) {
await this.modelManager.discoverProviderModels(providerId);
}
}
catch (error) {
logger_1.logger.warn('Failed to register provider for model discovery', {
providerId,
error: error instanceof Error ? error.message : String(error)
}, 'dynamic-model-integration');
// 不抛出错误,允许系统继续运行
}
}
/**
* 处理模型更新事件
*/
handleModelUpdate(event) {
const { providerId, type, modelId, timestamp, details } = event;
logger_1.logger.info('Model configuration update received', {
providerId,
type,
modelId,
timestamp: new Date(timestamp).toISOString()
}, 'dynamic-model-integration');
// 根据事件类型执行不同的操作
switch (type) {
case 'model_added':
this.handleModelAdded(providerId, modelId, details);
break;
case 'model_removed':
this.handleModelRemoved(providerId, modelId);
break;
case 'model_became_available':
this.handleModelBecameAvailable(providerId, modelId, details);
break;
case 'model_became_unavailable':
this.handleModelBecameUnavailable(providerId, modelId, details);
break;
}
}
/**
* 处理模型添加
*/
handleModelAdded(providerId, modelId, details) {
logger_1.logger.info('New model discovered', {
providerId,
modelId,
result: details.result
}, 'dynamic-model-integration');
// 这里可以更新路由配置,将新模型添加到路由表中
// 例如:this.updateRoutingConfig(providerId, modelId);
// 也可以发送通知给监控系统
// this.notifyMonitoringSystem('model_added', { providerId, modelId });
}
/**
* 处理模型移除
*/
handleModelRemoved(providerId, modelId) {
logger_1.logger.warn('Model removed from availability list', {
providerId,
modelId
}, 'dynamic-model-integration');
// 这里可以从路由配置中移除模型
// 例如:this.removeFromRoutingConfig(providerId, modelId);
// 也可以发送通知给监控系统
// this.notifyMonitoringSystem('model_removed', { providerId, modelId });
}
/**
* 处理模型变为可用
*/
handleModelBecameAvailable(providerId, modelId, details) {
logger_1.logger.info('Model became available', {
providerId,
modelId,
responseTime: details.result.responseTime
}, 'dynamic-model-integration');
// 这里可以重新启用模型在路由配置中
// 例如:this.enableModelInRoutingConfig(providerId, modelId);
// 也可以发送恢复通知给监控系统
// this.notifyMonitoringSystem('model_restored', { providerId, modelId });
}
/**
* 处理模型变为不可用
*/
handleModelBecameUnavailable(providerId, modelId, details) {
logger_1.logger.warn('Model became unavailable', {
providerId,
modelId,
error: details.result.error,
statusCode: details.result.statusCode
}, 'dynamic-model-integration');
// 这里可以暂时禁用模型在路由配置中
// 例如:this.disableModelInRoutingConfig(providerId, modelId);
// 也可以发送故障通知给监控系统
// this.notifyMonitoringSystem('model_failed', { providerId, modelId });
}
/**
* 获取可用模型列表
*/
getAvailableModels(category) {
if (!this.modelManager || !this.isInitialized) {
return [];
}
const availableModels = this.modelManager.getAvailableModels(category);
return availableModels.map(model => ({
providerId: 'unknown', // 需要从模型配置中获取providerId
modelId: model.id,
responseTime: model.responseTime,
category: model.category,
priority: model.priority
}));
}
/**
* 获取系统状态
*/
getStatus() {
if (!this.modelManager) {
return {
isInitialized: false,
isAutoDiscoveryRunning: false,
registeredProviders: [],
totalModels: 0,
availableModels: 0,
lastUpdateTime: 0
};
}
const managerStatus = this.modelManager.getStatus();
return {
isInitialized: this.isInitialized,
isAutoDiscoveryRunning: managerStatus.isAutoDiscoveryRunning,
registeredProviders: managerStatus.registeredProviders,
totalModels: managerStatus.totalModels,
availableModels: managerStatus.availableModels,
lastUpdateTime: managerStatus.lastUpdateTime
};
}
/**
* 手动触发模型发现
*/
async triggerModelDiscovery(providerId) {
if (!this.modelManager || !this.isInitialized) {
throw new Error('Dynamic model configuration system is not initialized');
}
if (providerId) {
// 发现特定提供商的模型
return await this.modelManager.discoverProviderModels(providerId);
}
else {
// 发现所有提供商的模型
const results = {};
for (const providerId of Object.keys(this.config.providers)) {
try {
results[providerId] = await this.modelManager.discoverProviderModels(providerId);
}
catch (error) {
logger_1.logger.error('Failed to discover models for provider', {
providerId,
error: error instanceof Error ? error.message : String(error)
}, 'dynamic-model-integration');
results[providerId] = {
error: error.message,
totalModels: 0,
availableModels: [],
unavailableModels: []
};
}
}
return results;
}
}
/**
* 测试模型可用性
*/
async testModelAvailability(providerId, modelId) {
if (!this.modelManager || !this.isInitialized) {
throw new Error('Dynamic model configuration system is not initialized');
}
return await this.modelManager.testModelAvailability(providerId, modelId);
}
/**
* 停止系统集成
*/
shutdown() {
if (this.modelManager) {
this.modelManager.stopAutoDiscovery();
logger_1.logger.info('Dynamic model configuration system shutdown completed', {}, 'dynamic-model-integration');
}
}
/**
* 更新路由配置的示例方法
*/
updateRoutingConfig(providerId, modelId) {
// 这里可以实现动态更新路由配置的逻辑
// 例如:更新routing配置中的模型列表
// 注意:这需要线程安全地更新路由器配置
logger_1.logger.info('Updating routing configuration for new model', {
providerId,
modelId
}, 'dynamic-model-integration');
// 示例:将新模型添加到default类别的路由配置中
// this.config.routing.default.models.push({
// provider: providerId,
// model: modelId,
// weight: 1
// });
}
}
exports.DynamicModelIntegration = DynamicModelIntegration;
/**
* 创建集成动态模型配置系统的路由器配置
*/
function createIntegratedRouterConfig(baseConfig, modelDiscoveryConfig = {}) {
const discoveryConfig = {
enabled: true,
autoUpdateRouting: true,
discoveryInterval: 30, // 30分钟
maxModelsPerProvider: 10,
modelFallbackEnabled: true,
...modelDiscoveryConfig
};
return {
...baseConfig,
modelDiscovery: discoveryConfig
};
}
/**
* 工厂函数创建动态模型配置系统集成
*/
function createDynamicModelIntegration(config) {
return new DynamicModelIntegration(config);
}
/**
* 示例使用代码
*/
async function exampleUsage() {
// 1. 创建基础路由器配置
const baseConfig = {
server: {
port: 3000,
host: 'localhost'
},
providers: {
'openai-provider': {
type: 'openai',
endpoint: 'https://api.openai.com/v1/chat/completions',
authentication: {
type: 'bearer',
credentials: {
apiKey: process.env.OPENAI_API_KEY || 'your-api-key'
}
},
settings: {}
},
'anthropic-provider': {
type: 'anthropic',
endpoint: 'https://api.anthropic.com/v1/messages',
authentication: {
type: 'bearer',
credentials: {
apiKey: process.env.ANTHROPIC_API_KEY || 'your-api-key'
}
},
settings: {}
}
},
routing: {
default: {
provider: 'openai-provider',
model: 'gpt-4'
}
},
debug: {
enabled: true,
logLevel: 'info',
traceRequests: false,
saveRequests: false,
logDir: './logs'
},
hooks: []
};
// 2. 创建集成动态模型配置系统的配置
const integratedConfig = createIntegratedRouterConfig(baseConfig, {
enabled: true,
autoUpdateRouting: true,
discoveryInterval: 15, // 15分钟进行一次发现
maxModelsPerProvider: 5, // 最多每个提供商5个模型
modelFallbackEnabled: true
});
// 3. 创建系统集成实例
const integration = createDynamicModelIntegration(integratedConfig);
try {
// 4. 初始化系统
await integration.initialize();
// 5. 获取系统状态
const status = integration.getStatus();
console.log('System Status:', status);
// 6. 获取可用模型
const availableModels = integration.getAvailableModels();
console.log('Available Models:', availableModels);
// 7. 手动触发模型发现
const discoveryResults = await integration.triggerModelDiscovery();
console.log('Discovery Results:', discoveryResults);
// 8. 测试特定模型可用性
if (availableModels.length > 0) {
const firstModel = availableModels[0];
const isAvailable = await integration.testModelAvailability(firstModel.providerId, firstModel.modelId);
console.log(`Model ${firstModel.modelId} availability:`, isAvailable);
}
}
catch (error) {
console.error('Example usage failed:', error);
}
finally {
// 9. 关闭系统
integration.shutdown();
}
}
//# sourceMappingURL=dynamic-model-integration-example.js.map