UNPKG

anon-identity

Version:

Decentralized identity framework with DIDs, Verifiable Credentials, and privacy-preserving selective disclosure

210 lines 5.14 kB
/** * Provider Selection Engine for MCP * * Intelligent provider selection based on capabilities, performance, cost, and availability */ import { EventEmitter } from 'events'; import { LLMProvider, LLMRequest, LLMRequestType, RequestPriority } from '../types'; /** * Selection criteria for providers */ export interface SelectionCriteria { requestType: LLMRequestType; priority: RequestPriority; requirements: { streaming?: boolean; functionCalling?: boolean; maxTokens?: number; maxLatency?: number; minReliability?: number; costConstraint?: number; preferredModels?: string[]; }; context?: { agentDID: string; domain: string; sensitiveData: boolean; regulatoryRequirements?: string[]; }; } /** * Provider scoring weights */ export interface ScoringWeights { performance: number; reliability: number; capability: number; cost: number; availability: number; preference: number; } /** * Provider selection strategy */ export declare enum SelectionStrategy { PERFORMANCE = "performance", COST_OPTIMIZED = "cost_optimized", RELIABILITY = "reliability", CAPABILITY_MATCH = "capability_match", LOAD_BALANCED = "load_balanced", SMART_ADAPTIVE = "smart_adaptive" } /** * Selection result */ export interface SelectionResult { primaryProvider: LLMProvider; fallbackProviders: LLMProvider[]; reasoning: string; score: number; estimatedCost: number; estimatedLatency: number; alternativeOptions: Array<{ provider: LLMProvider; score: number; tradeoffs: string[]; }>; } /** * Load balancing configuration */ export interface LoadBalancingConfig { strategy: 'round_robin' | 'weighted' | 'least_connections' | 'latency_based'; weights?: Map<string, number>; stickySession: boolean; healthCheckInterval: number; failoverThreshold: number; } /** * Provider Selector */ export declare class ProviderSelector extends EventEmitter { private providers; private config; private providerMetrics; private providerHealth; private selectionHistory; private circuitBreakers; private loadBalancer; private adaptiveLearning; constructor(providers: Map<string, LLMProvider>, config?: { scoringWeights: ScoringWeights; loadBalancing: LoadBalancingConfig; circuitBreakerThreshold: number; circuitBreakerTimeout: number; adaptiveLearningEnabled: boolean; fallbackChainLength: number; }); /** * Select optimal provider for request */ selectProvider(request: LLMRequest, criteria: SelectionCriteria, strategy?: SelectionStrategy): Promise<SelectionResult>; /** * Get available providers based on criteria */ private getAvailableProviders; /** * Score providers based on strategy */ private scoreProviders; /** * Calculate individual provider score */ private calculateProviderScore; /** * Aggregate scores based on strategy */ private aggregateScore; /** * Check provider capabilities */ private checkCapabilities; /** * Check regulatory compliance */ private checkCompliance; /** * Calculate capability score */ private calculateCapabilityScore; /** * Get model quality score */ private getModelQualityScore; /** * Calculate preference score */ private calculatePreferenceScore; /** * Estimate cost for request */ private estimateCost; /** * Estimate latency */ private estimateLatency; /** * Estimate token count */ private estimateTokens; /** * Build reasoning for selection */ private buildReasoning; /** * Calculate tradeoffs between providers */ private calculateTradeoffs; /** * Record selection for learning */ private recordSelection; /** * Record actual performance for learning */ recordPerformance(requestId: string, providerId: string, performance: { latency: number; success: boolean; cost: number; }): Promise<void>; /** * Update provider metrics */ private updateProviderMetrics; /** * Update circuit breaker */ private updateCircuitBreaker; /** * Initialize provider health */ private initializeProviderHealth; /** * Start health checks */ private startHealthChecks; /** * Perform health checks */ private performHealthChecks; /** * Perform individual health check */ private performHealthCheck; /** * Get provider statistics */ getStatistics(): { totalSelections: number; providerUsage: Record<string, number>; averageScore: number; failoverRate: number; costSavings: number; }; /** * Shutdown */ shutdown(): void; } export default ProviderSelector; //# sourceMappingURL=provider-selector.d.ts.map