/**
* Base Model Adapter Interface
*
* Unified interface for all Google AI model adapters
* Provides streaming, error handling, and capability detection
*/
///
import { EventEmitter } from "events";
import { Logger } from "../utils/logger.js";
export interface ModelCapabilities {
textGeneration: boolean;
codeGeneration: boolean;
multimodal: boolean;
streaming: boolean;
functionCalling: boolean;
longContext: boolean;
reasoning: boolean;
multiAgent: boolean;
complexProblemSolving: boolean;
chainOfThought: boolean;
maxTokens: number;
supportedLanguages: string[];
inputTypes: string[];
outputTypes: string[];
}
export interface AdapterConfig {
modelName: string;
apiKey?: string;
projectId?: string;
location?: string;
endpoint?: string;
timeout: number;
retryAttempts: number;
streamingEnabled: boolean;
cachingEnabled: boolean;
customHeaders?: Record;
}
export interface RequestContext {
requestId?: string;
userId?: string;
sessionId?: string;
priority: "low" | "medium" | "high" | "critical";
userTier: "free" | "pro" | "enterprise";
latencyTarget: number;
tokenBudget?: number;
streaming?: boolean;
retryCount?: number;
metadata?: Record;
}
export interface ModelRequest {
prompt: string;
context?: RequestContext;
parameters?: {
temperature?: number;
topP?: number;
topK?: number;
maxTokens?: number;
stopSequences?: string[];
presencePenalty?: number;
frequencyPenalty?: number;
};
systemMessage?: string;
tools?: any[];
multimodal?: {
images?: string[];
audio?: string[];
video?: string[];
};
metadata?: Record;
}
export interface ModelResponse {
id: string;
content: string;
model: string;
timestamp: Date;
latency: number;
usage: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
};
cost: number;
finishReason: string;
metadata?: Record;
streaming?: boolean;
error?: Error;
}
export interface StreamChunk {
id: string;
content: string;
delta: string;
finishReason?: string;
metadata?: Record;
}
export interface AdapterError extends Error {
code: string;
statusCode?: number;
retryable: boolean;
model: string;
requestId?: string;
metadata?: Record;
}
export interface HealthCheck {
status: "healthy" | "degraded" | "unhealthy";
latency: number;
lastChecked: Date;
errors: string[];
metadata: Record;
}
export declare abstract class BaseModelAdapter extends EventEmitter {
protected logger: Logger;
protected config: AdapterConfig;
protected capabilities: ModelCapabilities;
protected isInitialized: boolean;
protected lastHealthCheck?: HealthCheck;
constructor(config: AdapterConfig);
/**
* Initialize the adapter
*/
abstract initialize(): Promise;
/**
* Get model-specific capabilities
*/
abstract getModelCapabilities(): ModelCapabilities;
/**
* Generate response from model
*/
abstract generate(request: ModelRequest): Promise;
/**
* Stream response from model
*/
abstract generateStream(request: ModelRequest): AsyncIterableIterator;
/**
* Validate request format
*/
abstract validateRequest(request: ModelRequest): Promise;
/**
* Transform request to model-specific format
*/
protected abstract transformRequest(request: ModelRequest): any;
/**
* Transform response from model-specific format
*/
protected abstract transformResponse(response: any, request: ModelRequest): ModelResponse;
/**
* Handle model-specific errors
*/
protected abstract handleError(error: any, request: ModelRequest): AdapterError;
/**
* Perform health check
*/
healthCheck(): Promise;
/**
* Get capabilities
*/
getCapabilities(): ModelCapabilities;
/**
* Check if model supports capability
*/
supportsCapability(capability: keyof ModelCapabilities): boolean;
/**
* Get adapter configuration
*/
getConfig(): AdapterConfig;
/**
* Update configuration
*/
updateConfig(updates: Partial): void;
/**
* Get last health check result
*/
getLastHealthCheck(): HealthCheck | undefined;
/**
* Create standardized error
*/
protected createError(message: string, code: string, statusCode?: number, retryable?: boolean, metadata?: Record): AdapterError;
/**
* Generate unique request ID
*/
protected generateRequestId(): string;
/**
* Ensure request context has a request ID for tracking
*/
protected ensureRequestId(context?: RequestContext): RequestContext;
/**
* Create a default request context for testing and development
*/
createContext(overrides?: Partial): RequestContext;
/**
* Calculate cost based on token usage
*/
protected calculateCost(usage: {
totalTokens: number;
}, costPerToken: number): number;
/**
* Log performance metrics
*/
protected logPerformance(operation: string, latency: number, success: boolean, metadata?: Record): void;
/**
* Validate initialization
*/
protected ensureInitialized(): void;
/**
* Clean up resources
*/
cleanup(): Promise;
}
//# sourceMappingURL=base-model-adapter.d.ts.map