import {modelData} from '../config/Config.js'; import outside from './outPlatforms/outside.js' import mdWebSocketServer from '../utils/mdWebSocketServer.js'; import dotenv from 'dotenv' dotenv.config() // 发送请求 export async function externalPostRequest(task) { // { aigc, tasksData } const platform = task.platformName const AIGC = process.env.PROJECT_PREFIX let actualPlatform = platform; let usedInternal = false; // 决策逻辑:如果是 runninghub 且内部有算力,尝试使用内部平台 if (platform === 'runninghub') { const internalCapacity = mdWebSocketServer.getInternalCapacity(); const hasJwtToken = !!mdWebSocketServer.getJwtToken(); const hasConnectedClients = mdWebSocketServer.hasConnectedClients(); if (internalCapacity > 0 && hasJwtToken && hasConnectedClients) { console.log('[externalPostRequest] 尝试使用内部 messageDispatcher 平台'); actualPlatform = 'messageDispatcher'; usedInternal = true; } } const apikey = modelData[AIGC][platform].apikey let response; let success = false; try { const headers = await outside[actualPlatform].getGenerateHeader(apikey) const url = outside[actualPlatform].getGenerateUrl() const body = outside[actualPlatform].getGenerateBody({payload:task.taskData, apikey}) console.log(`[externalPostRequest] 发送请求到 ${actualPlatform}: ${url}`); response = await fetch(url, { method: 'POST', headers, body: body }); // 检查响应状态 if (!response.ok) { throw new Error(`外部平台返回错误状态: ${response.status} ${response.statusText}`); } success = true; } catch (error) { if (usedInternal) { console.warn('[externalPostRequest] 内部平台失败,降级使用 runninghub:', error.message); // 降级到 runninghub actualPlatform = 'runninghub'; usedInternal = false; try { const headers = await outside[actualPlatform].getGenerateHeader(apikey) const url = outside[actualPlatform].getGenerateUrl() const body = outside[actualPlatform].getGenerateBody({payload:task.taskData, apikey}) console.log(`[externalPostRequest] 降级发送请求到 ${actualPlatform}: ${url}`); response = await fetch(url, { method: 'POST', headers, body: body }); if (!response.ok) { throw new Error(`降级平台返回错误状态: ${response.status} ${response.statusText}`); } success = true; } catch (fallbackError) { console.error('[externalPostRequest] 降级也失败:', fallbackError.message); return { taskId: task.taskId, remoteTaskId: { type: 2, message: `请求失败: ${fallbackError.message}` }, platform, AIGC }; } } else { console.error('[externalPostRequest] 外部请求失败:', error); return { taskId: task.taskId, remoteTaskId: { type: 2, message: `外部请求失败: ${error.message}` }, platform, AIGC }; } } // 处理成功响应 try { const successResult = await outside[actualPlatform].getSuccessTasks(response); console.log(`[externalPostRequest] ${actualPlatform} 响应:`, successResult); let remoteTaskId; if (successResult.type === 2) { remoteTaskId = successResult; } else { remoteTaskId = { type: 1, data: successResult }; } return { taskId: task.taskId, remoteTaskId, platform: actualPlatform, AIGC, workflowId: task.workflowId }; } catch (parseError) { console.error('[externalPostRequest] 解析响应失败:', parseError); return { taskId: task.taskId, remoteTaskId: { type: 2, message: `解析响应失败: ${parseError.message}` }, platform: actualPlatform, AIGC }; } }