route-claudecode
Version:
Advanced routing and transformation system for Claude Code outputs to multiple AI providers
91 lines • 2.95 kB
TypeScript
/**
* 统一流式处理基类
* 消除重复的流式处理逻辑
*
* 遵循零硬编码、零Fallback、零沉默失败原则
*/
import { BaseRequest, BaseResponse } from '@/types';
export interface StreamingHandlerOptions {
providerName: string;
sessionManager?: any;
enableValidation?: boolean;
allowedEvents?: string[];
}
export interface StreamingMetrics {
chunkCount: number;
hasValidContent: boolean;
finishReason?: string;
startTime: number;
endTime?: number;
}
/**
* 基础流式处理器
* 提供统一的流式请求处理框架
*/
export declare abstract class BaseStreamingHandler {
protected readonly options: StreamingHandlerOptions;
protected metrics: StreamingMetrics;
constructor(options: StreamingHandlerOptions);
/**
* 主要的流式处理方法
*/
handleStreamRequest(request: BaseRequest): AsyncIterable<any>;
/**
* 非流式请求处理(通过流式实现)
*/
handleNonStreamRequest(request: BaseRequest): Promise<BaseResponse>;
/**
* 抽象方法:具体的流式处理实现
*/
protected abstract processStream(request: BaseRequest): AsyncIterable<any>;
/**
* 抽象方法:从流式响应构建完整响应
*/
protected abstract buildCompleteResponseFromStream(chunks: any[], originalRequest: BaseRequest): Promise<BaseResponse>;
/**
* 抽象方法:判断是否为有效内容chunk
*/
protected abstract isValidContentChunk(chunk: any): boolean;
/**
* 抽象方法:判断是否为流结束chunk
*/
protected abstract isStreamEndChunk(chunk: any): boolean;
/**
* 抽象方法:提取finish reason
*/
protected abstract extractFinishReason(chunk: any): string | undefined;
/**
* 重置指标
*/
protected resetMetrics(): void;
/**
* 验证单个chunk
*/
protected validateChunk(chunk: any, requestId: string): void;
/**
* 验证整体流式输出
*/
protected validateStreamOutput(requestId: string): void;
/**
* 记录流式错误
*/
protected logStreamingError(error: unknown, requestId: string): void;
/**
* 获取当前指标
*/
getMetrics(): Readonly<StreamingMetrics>;
}
/**
* OpenAI专用流式处理器
*/
export declare class OpenAIStreamingHandler extends BaseStreamingHandler {
private openaiClient;
private transformer;
constructor(options: StreamingHandlerOptions, openaiClient: any, transformer: any);
protected processStream(request: BaseRequest): AsyncIterable<any>;
protected buildCompleteResponseFromStream(chunks: any[], originalRequest: BaseRequest): Promise<BaseResponse>;
protected isValidContentChunk(chunk: any): boolean;
protected isStreamEndChunk(chunk: any): boolean;
protected extractFinishReason(chunk: any): string | undefined;
}
//# sourceMappingURL=streaming-handler.d.ts.map