TangCheng
2025-02-28 d787e447e95c7b897c2cc9c0e832f8d2e5084934
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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<Json> 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);
    }
}