lis3456/droid2api
0
1import { logDebug } from '../logger.js';2import { getSystemPrompt, getUserAgent } from '../config.js';3import { generateUUID } from '../utils/uuid.js';4 5export function transformToCommon(openaiRequest) {6 logDebug('Transforming OpenAI request to Common format');7 8 // 基本保持 OpenAI 格式,只在 messages 前面插入 system 消息9 const commonRequest = {10 ...openaiRequest11 };12 13 const systemPrompt = getSystemPrompt();14 15 if (systemPrompt) {16 // 检查是否已有 system 消息17 const hasSystemMessage = commonRequest.messages?.some(m => m.role === 'system');18 19 if (hasSystemMessage) {20 // 如果已有 system 消息,在第一个 system 消息前插入我们的 system prompt21 commonRequest.messages = commonRequest.messages.map((msg, index) => {22 if (msg.role === 'system' && index === commonRequest.messages.findIndex(m => m.role === 'system')) {23 // 找到第一个 system 消息,前置我们的 prompt24 return {25 role: 'system',26 content: systemPrompt + (typeof msg.content === 'string' ? msg.content : '')27 };28 }29 return msg;30 });31 } else {32 // 如果没有 system 消息,在 messages 数组最前面插入33 commonRequest.messages = [34 {35 role: 'system',36 content: systemPrompt37 },38 ...(commonRequest.messages || [])39 ];40 }41 }42 43 logDebug('Transformed Common request', commonRequest);44 return commonRequest;45}46 47export function getCommonHeaders(authHeader, clientHeaders = {}) {48 // Generate unique IDs if not provided49 const sessionId = clientHeaders['x-session-id'] || generateUUID();50 const messageId = clientHeaders['x-assistant-message-id'] || generateUUID();51 52 const headers = {53 'accept': 'application/json',54 'content-type': 'application/json',55 'authorization': authHeader || '',56 'x-api-provider': 'baseten',57 'x-factory-client': 'cli',58 'x-session-id': sessionId,59 'x-assistant-message-id': messageId,60 'user-agent': getUserAgent(),61 'connection': 'keep-alive'62 };63 64 // Pass through Stainless SDK headers with defaults65 const stainlessDefaults = {66 'x-stainless-arch': 'x64',67 'x-stainless-lang': 'js',68 'x-stainless-os': 'MacOS',69 'x-stainless-runtime': 'node',70 'x-stainless-retry-count': '0',71 'x-stainless-package-version': '5.23.2',72 'x-stainless-runtime-version': 'v24.3.0'73 };74 75 // Copy Stainless headers from client or use defaults76 Object.keys(stainlessDefaults).forEach(header => {77 headers[header] = clientHeaders[header] || stainlessDefaults[header];78 });79 80 return headers;81}82 