@neuroequality/neuroadapt-ai
Version:
AI-powered accessibility personalization for neurodivergent users
169 lines (168 loc) • 4.8 kB
TypeScript
import { EventEmitter } from 'eventemitter3';
import { AIProviderConfig, ModelCapabilities, StreamChunk, AdaptationSuggestion } from '../types/common.js';
/**
* Events emitted by AI providers
*/
export interface AIProviderEvents {
'stream-chunk': (chunk: StreamChunk) => void;
'stream-complete': (result: string) => void;
'stream-error': (error: Error) => void;
'rate-limit': (retryAfter: number) => void;
'error': (error: Error) => void;
}
/**
* Request parameters for AI providers
*/
export interface AIRequest {
prompt: string;
system?: string;
context?: Record<string, unknown>;
maxTokens?: number;
temperature?: number;
stream?: boolean;
functions?: AIFunction[];
}
/**
* AI function definition for function calling
*/
export interface AIFunction {
name: string;
description: string;
parameters: {
type: 'object';
properties: Record<string, {
type: string;
description: string;
enum?: string[];
}>;
required?: string[];
};
}
/**
* AI response structure
*/
export interface AIResponse {
content: string;
usage?: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
};
functionCall?: {
name: string;
arguments: Record<string, unknown>;
};
finishReason: 'stop' | 'length' | 'function_call' | 'content_filter';
metadata?: Record<string, unknown>;
}
/**
* Provider status information
*/
export interface ProviderStatus {
isAvailable: boolean;
isConfigured: boolean;
lastError?: string;
rateLimitRemaining?: number;
rateLimitReset?: number;
}
/**
* Abstract base class for AI providers
*/
export declare abstract class BaseAIProvider extends EventEmitter<AIProviderEvents> {
protected config: AIProviderConfig;
protected capabilities: ModelCapabilities;
protected status: ProviderStatus;
constructor(config: AIProviderConfig);
/**
* Get provider capabilities
*/
abstract getCapabilities(): ModelCapabilities;
/**
* Get provider name
*/
abstract getProviderName(): string;
/**
* Get available models
*/
abstract getAvailableModels(): string[];
/**
* Generate text completion
*/
abstract generate(request: AIRequest): Promise<AIResponse>;
/**
* Generate streaming text completion
*/
abstract generateStream(request: AIRequest): AsyncGenerator<StreamChunk, void, unknown>;
/**
* Analyze content for accessibility adaptations
*/
abstract analyzeAccessibility(content: string, currentPreferences: Record<string, unknown>, context?: Record<string, unknown>): Promise<AdaptationSuggestion[]>;
/**
* Simplify content for cognitive accessibility
*/
abstract simplifyContent(content: string, targetLevel: 'simple' | 'intermediate' | 'advanced', context?: Record<string, unknown>): Promise<string>;
/**
* Update provider configuration
*/
updateConfig(newConfig: Partial<AIProviderConfig>): void;
/**
* Get current provider status
*/
getStatus(): ProviderStatus;
/**
* Test provider availability
*/
testConnection(): Promise<boolean>;
/**
* Get estimated cost for request
*/
estimateCost(request: AIRequest): number;
/**
* Check if provider supports a specific capability
*/
supportsCapability(capability: keyof ModelCapabilities): boolean;
/**
* Get rate limit information
*/
getRateLimitInfo(): {
remaining?: number;
reset?: number;
};
/**
* Validate provider configuration
*/
protected isConfigValid(): boolean;
/**
* Check provider availability
*/
protected checkAvailability(): Promise<void>;
/**
* Handle rate limiting
*/
protected handleRateLimit(retryAfter: number): void;
/**
* Update rate limit status
*/
protected updateRateLimit(remaining: number, reset: number): void;
/**
* Create standard error response
*/
protected createErrorResponse(error: Error): never;
/**
* Validate request parameters
*/
protected validateRequest(request: AIRequest): void;
/**
* Create accessibility analysis prompt
*/
protected createAccessibilityPrompt(content: string, currentPreferences: Record<string, unknown>): string;
/**
* Create content simplification prompt
*/
protected createSimplificationPrompt(content: string, targetLevel: string): string;
/**
* Parse adaptation suggestions from AI response
*/
protected parseAdaptationSuggestions(response: string): AdaptationSuggestion[];
}
//# sourceMappingURL=base-provider.d.ts.map