UNPKG

route-claudecode

Version:

Advanced routing and transformation system for Claude Code outputs to multiple AI providers

118 lines 4.36 kB
"use strict"; /** * Gemini Request Converter Module * 请求格式转换器,负责Anthropic到Gemini的请求转换 * Project owner: Jason Zhang */ Object.defineProperty(exports, "__esModule", { value: true }); exports.GeminiRequestConverter = void 0; exports.convertAnthropicToGeminiRequest = convertAnthropicToGeminiRequest; const logger_1 = require("@/utils/logger"); const gemini_1 = require("@/transformers/gemini"); /** * Gemini请求转换器类 */ class GeminiRequestConverter { requestId; constructor(requestId = 'unknown') { this.requestId = requestId; } /** * 转换Anthropic请求为Gemini API格式 */ convertRequest(request, model) { try { logger_1.logger.debug('Converting Anthropic request to Gemini format', { requestId: this.requestId, model, messageCount: request.messages?.length, hasTools: !!request.tools?.length, hasSystem: !!request.metadata?.system }); // 使用统一的转换器 const { geminiRequest } = (0, gemini_1.transformAnthropicToGemini)(request); // 添加模型信息到转换结果 const requestWithModel = { model, ...geminiRequest }; logger_1.logger.debug('Successfully converted to Gemini format', { requestId: this.requestId, model: requestWithModel.model, hasContents: !!requestWithModel.contents?.length, hasTools: !!requestWithModel.tools?.length, hasToolConfig: !!requestWithModel.toolConfig, generationConfig: requestWithModel.generationConfig }); return requestWithModel; } catch (error) { logger_1.logger.error('Failed to convert request to Gemini format', { requestId: this.requestId, error: error.message, model, originalModel: request.model }); throw error; } } /** * 验证转换后的请求格式 */ validateConvertedRequest(request) { try { const isValid = (request && typeof request.model === 'string' && Array.isArray(request.contents) && request.contents.length > 0 && request.contents.every(content => content && ['user', 'model'].includes(content.role) && Array.isArray(content.parts) && content.parts.length > 0)); if (!isValid) { logger_1.logger.warn('Converted Gemini request validation failed', { requestId: this.requestId, hasModel: !!request?.model, hasContents: !!request?.contents, contentsLength: request?.contents?.length }); } return isValid; } catch (error) { logger_1.logger.error('Error validating converted request', { requestId: this.requestId, error: error.message }); return false; } } /** * 创建包含调试信息的转换结果 */ createConversionResult(geminiRequest) { return { request: geminiRequest, debug: { requestId: this.requestId, timestamp: Date.now(), hasTools: !!geminiRequest.tools?.length, hasSystem: geminiRequest.contents?.some(c => c.parts?.some(p => p.text?.startsWith('System:'))) || false, contentCount: geminiRequest.contents?.length || 0 } }; } } exports.GeminiRequestConverter = GeminiRequestConverter; /** * 便捷函数:转换请求并返回验证结果 */ function convertAnthropicToGeminiRequest(request, model, requestId = 'unknown') { const converter = new GeminiRequestConverter(requestId); const geminiRequest = converter.convertRequest(request, model); if (!converter.validateConvertedRequest(geminiRequest)) { throw new Error('Converted Gemini request failed validation'); } return geminiRequest; } //# sourceMappingURL=request-converter.js.map