package com.smtaiserver.smtaiserver.javaai.jsonflow.node; import java.util.List; import com.smtaiserver.smtaiserver.core.SMTAIServerApp; import com.smtaiserver.smtaiserver.javaai.SMTJavaAIError; import com.smtaiserver.smtaiserver.javaai.jsonflow.core.SMTJsonFlowExecArg; import com.smtaiserver.smtaiserver.javaai.jsonflow.core.SMTJsonFlowManager; import com.smtaiserver.smtaiserver.javaai.jsonflow.core.SMTJsonFlowNodeOnlyOutput; import com.smtaiserver.smtaiserver.javaai.llm.core.SMTLLMConnect; import com.smtservlet.util.Json; import com.smtservlet.util.SMTStatic; public class SMTJsonFlowNodeLLM extends SMTJsonFlowNodeOnlyOutput { protected String _llmId; protected String _prompt; protected String _argKey; @Override public void initInstane(SMTJsonFlowManager manager, Json jsonNode) throws Exception { super.initInstane(manager, jsonNode); List jsonGroupParams = jsonNode.getJsonPath("data|group_params|", false).asJsonList(); for(Json jsonParams : jsonGroupParams) { String type = jsonParams.getJsonPath("params|0|type", false).asString(); if("llm_model".equals(type)) { _llmId = jsonParams.getJsonPath("params|0|value", false).asString(); } else if("textarea".equals(type)) { _prompt = jsonParams.getJsonPath("params|0|value", false).asString(); } else if("input".equals(type)) { _argKey = jsonParams.getJsonPath("params|0|value", false).asString(); } } if(SMTStatic.isNullOrEmpty(_llmId)) throw new Exception("can' find llmId"); if(SMTStatic.isNullOrEmpty(_prompt)) throw new Exception("can' find prompt"); if(SMTStatic.isNullOrEmpty(_argKey)) throw new Exception("can' find _argKey"); } @Override public SMTJavaAIError executeFlowNode(SMTJsonFlowExecArg execArg) throws Exception { SMTLLMConnect llm = SMTAIServerApp.getApp().allocLLMConnect(_llmId); try { String realPrompt = SMTAIServerApp.getApp().convGlobalMacroString(_prompt, execArg._jsonArgs); execArg._tranReq.traceLLMDebug("call llm : " +_llmId + "\n" + realPrompt); String result = llm.callWithMessage(null, realPrompt, execArg._tranReq); execArg._tranReq.traceLLMDebug("call llm result:\n" + result); execArg._jsonArgs.set(_argKey, result); } finally { llm.close(); } return super.executeFlowNode(execArg); } }