112 lines
3.8 KiB
JavaScript
112 lines
3.8 KiB
JavaScript
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
|
|
};
|
|
}
|
|
}
|