flexbiz-server
Version:
Flexible Server
10 lines (9 loc) • 3.98 kB
JavaScript
const {analyzeData}=require("../../libs/utils"),async=require("async"),_=require("lodash");
function parseJsonReplacingOnlyQuotes($jsonStringWithEntities$$){if(typeof $jsonStringWithEntities$$!=="string")return Logger.error("Input must be a string."),null;let $correctedString$$=$jsonStringWithEntities$$.trim();try{return $correctedString$$.startsWith('"```json')?$correctedString$$=$correctedString$$.substring(8).trimStart():$correctedString$$.startsWith("```json")&&($correctedString$$=$correctedString$$.substring(7).trimStart()),$correctedString$$.endsWith("```")&&($correctedString$$=$correctedString$$.substring(0,
$correctedString$$.length-3).trimEnd()),$correctedString$$=$correctedString$$.replace(/"/g,'"'),JSON.parse($correctedString$$)}catch($error$$){return Logger.error("Error parsing JSON string after corrections:",$error$$),Logger.error("Original string:",$jsonStringWithEntities$$),Logger.error("Corrected string attempt:",$correctedString$$),$jsonStringWithEntities$$}}
async function aiAnalysisHandler($flowState_nodeInstanceId$$,$node$$,$payload$$,$abortSignal$$){$flowState_nodeInstanceId$$=`${$flowState_nodeInstanceId$$.instanceId}-${$node$$.id}`;const $nodeLabel$$=$node$$.data?.name||$node$$.id||"AI Analysis Node";let $prompt$$=$node$$.data?.prompt,$handle_multi_line$$=$node$$.data?.handle_multi_line;if(!$payload$$||$payload$$.length==0)throw Error("Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 ph\u00e2n t\u00edch");if(!$prompt$$)throw Error("Thi\u1ebfu y\u00eau c\u1ea7u ph\u00e2n t\u00edch");
Logger.info(`[${$flowState_nodeInstanceId$$}] ${$nodeLabel$$}: Executing.`);if($abortSignal$$.aborted)throw Logger.info(`[${$flowState_nodeInstanceId$$}] ${$nodeLabel$$}: Aborted before execution.`),new DOMException("Aborted before AI analysis","AbortError");Logger.info(`[${$flowState_nodeInstanceId$$}] ${$nodeLabel$$}: Sending conversation to AI for analysis...`);try{const $analysisResults$$=await new Promise(($resolve$$,$reject$$)=>{if($handle_multi_line$$){let $conversationData$$;$conversationData$$=
_.isArray($payload$$)?$payload$$:[$payload$$];async.mapSeries($conversationData$$,($data$$,$cb$$)=>{setImmediate(async()=>{try{const $analysisResult$$=await analyzeData($data$$,`${$prompt$$}`,null,"B\u1ea1n l\u00e0 m\u1ed9t tr\u1ee3 l\u00fd chuy\u00ean tr\u1ea3 l\u1eddi d\u01b0\u1edbi d\u1ea1ng JSON.");if($abortSignal$$.aborted)throw new DOMException("Aborted during/after AI analysis","AbortError");let $result$$=parseJsonReplacingOnlyQuotes($analysisResult$$.reply)||$analysisResult$$.reply;$result$$&&
$result$$.length==1&&($result$$=$result$$[0]);$conversationData$$.length>10?setTimeout(()=>{$cb$$(null,$result$$)},10):$cb$$(null,$result$$)}catch($e$$){$cb$$($e$$)}})},($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}else setImmediate(async()=>{try{const $analysisResult$$=await analyzeData($payload$$,`${$prompt$$}`,null,"B\u1ea1n l\u00e0 m\u1ed9t tr\u1ee3 l\u00fd chuy\u00ean tr\u1ea3 l\u1eddi d\u01b0\u1edbi d\u1ea1ng JSON.");if($abortSignal$$.aborted)throw new DOMException("Aborted during/after AI analysis",
"AbortError");let $result$$=parseJsonReplacingOnlyQuotes($analysisResult$$.reply)||$analysisResult$$.reply;$resolve$$($result$$)}catch($e$$){$reject$$($e$$)}})});if($abortSignal$$.aborted)throw Logger.info(`[${$flowState_nodeInstanceId$$}] ${$nodeLabel$$}: Aborted during/after AI analysis.`),new DOMException("Aborted during/after AI analysis","AbortError");Logger.info(`[${$flowState_nodeInstanceId$$}] ${$nodeLabel$$}: AI analysis successful.`);return $analysisResults$$}catch($error$$){if($error$$.name===
"AbortError"||$error$$ instanceof DOMException&&$error$$.name==="AbortError")throw Logger.info(`[${$flowState_nodeInstanceId$$}] ${$nodeLabel$$}: AI analysis explicitly aborted.`),$error$$;Logger.error(`[${$flowState_nodeInstanceId$$}] ${$nodeLabel$$}: Error during AI analysis:`,$error$$);throw Error(`AI analysis failed: ${$error$$.message}`);}}module.exports=aiAnalysisHandler;