001package dev.tinyflow.core.parser.impl;
002
003import com.alibaba.fastjson.JSONObject;
004import dev.tinyflow.core.chain.Parameter;
005import dev.tinyflow.core.llm.Llm;
006import dev.tinyflow.core.node.LlmNode;
007import dev.tinyflow.core.parser.BaseNodeParser;
008
009import java.util.List;
010
011public class LlmNodeParser extends BaseNodeParser<LlmNode> {
012
013    @Override
014    public LlmNode doParse(JSONObject root, JSONObject data, JSONObject chainJSONObject) {
015        LlmNode llmNode = new LlmNode();
016        llmNode.setLlmId(data.getString("llmId"));
017        llmNode.setUserPrompt(data.getString("userPrompt"));
018        llmNode.setSystemPrompt(data.getString("systemPrompt"));
019        llmNode.setOutType(data.getString("outType"));
020        llmNode.setJsonSchema(data.getString("jsonSchema"));
021
022        
023        Llm.ChatOptions chatOptions = new Llm.ChatOptions();
024        chatOptions.setTopK(data.containsKey("topK") ? data.getInteger("topK") : 10);
025        chatOptions.setTopP(data.containsKey("topP") ? data.getFloat("topP") : 0.8F);
026        chatOptions.setTemperature(data.containsKey("temperature") ? data.getFloat("temperature") : 0.5F);
027        llmNode.setChatOptions(chatOptions);
028
029//        LlmProvider llmProvider = tinyflow.getLlmProvider();
030//        if (llmProvider != null) {
031//            Llm llm = llmProvider.getLlm(data.getString("llmId"));
032//            llmNode.setLlm(llm);
033//        }
034
035        // 支持图片识别输入
036        List<Parameter> images = getParameters(data, "images");
037        llmNode.setImages(images);
038
039        return llmNode;
040    }
041}