shuzhiren-comfyui/任务队列后端/outside/generat.js

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
};
}
}