diff --git a/tinyflow-java-core/src/main/java/dev/tinyflow/core/node/HttpNode.java b/tinyflow-java-core/src/main/java/dev/tinyflow/core/node/HttpNode.java index 2d272ac8ff8f28a78dedfcd9d9a1c6cdb0d82dcb..1157a38d919e86ab1185b4f9d063a3699f7677a9 100644 --- a/tinyflow-java-core/src/main/java/dev/tinyflow/core/node/HttpNode.java +++ b/tinyflow-java-core/src/main/java/dev/tinyflow/core/node/HttpNode.java @@ -22,7 +22,14 @@ import com.agentsflex.core.chain.node.BaseNode; import com.agentsflex.core.llm.client.OkHttpClientUtil; import com.agentsflex.core.util.StringUtil; import com.alibaba.fastjson.JSON; -import okhttp3.*; +import com.alibaba.fastjson.JSONObject; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -39,12 +46,42 @@ public class HttpNode extends BaseNode { private List headers; private List urlParameters; - private String bodyDataType; + private String bodyType; private List fromData; private List fromUrlencoded; - private String jsonBody; + private String bodyJson; private String rawBody; + public static String mapToQueryString(Map map) { + if (map == null || map.isEmpty()) { + return ""; + } + + StringBuilder stringBuilder = new StringBuilder(); + + for (String key : map.keySet()) { + if (StringUtil.noText(key)) { + continue; + } + if (stringBuilder.length() > 0) { + stringBuilder.append("&"); + } + stringBuilder.append(key.trim()); + stringBuilder.append("="); + Object value = map.get(key); + stringBuilder.append(value == null ? "" : urlEncode(value.toString().trim())); + } + return stringBuilder.toString(); + } + + public static String urlEncode(String string) { + try { + return URLEncoder.encode(string, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + public String getUrl() { return url; } @@ -77,12 +114,12 @@ public class HttpNode extends BaseNode { this.urlParameters = urlParameters; } - public String getBodyDataType() { - return bodyDataType; + public String getBodyType() { + return bodyType; } - public void setBodyDataType(String bodyDataType) { - this.bodyDataType = bodyDataType; + public void setBodyType(String bodyType) { + this.bodyType = bodyType; } public List getFromData() { @@ -101,12 +138,12 @@ public class HttpNode extends BaseNode { this.fromUrlencoded = fromUrlencoded; } - public String getJsonBody() { - return jsonBody; + public String getBodyJson() { + return bodyJson; } - public void setJsonBody(String jsonBody) { - this.jsonBody = jsonBody; + public void setBodyJson(String bodyJson) { + this.bodyJson = bodyJson; } public String getRawBody() { @@ -117,17 +154,15 @@ public class HttpNode extends BaseNode { this.rawBody = rawBody; } - @Override protected Map execute(Chain chain) { Map urlDataMap = chain.getParameterValues(this, urlParameters); String parametersString = mapToQueryString(urlDataMap); - String newUrl = parametersString.isEmpty() ? url : url + + String newUrl = "POST".equalsIgnoreCase(method) || parametersString.isEmpty() ? url : url + (url.contains("?") ? "&" + parametersString : "?" + parametersString); - Request.Builder reqBuilder = new Request.Builder() - .url(newUrl); + Request.Builder reqBuilder = new Request.Builder().url(newUrl); Map headersMap = chain.getParameterValues(this, headers); headersMap.forEach((s, o) -> reqBuilder.addHeader(s, String.valueOf(o))); @@ -135,7 +170,7 @@ public class HttpNode extends BaseNode { if (StringUtil.noText(method) || "GET".equalsIgnoreCase(method)) { reqBuilder.method("GET", null); } else { - reqBuilder.method(method.toUpperCase(), getRequestBody(chain)); + reqBuilder.method(method.toUpperCase(), getRequestBody(chain, urlDataMap)); } @@ -180,18 +215,20 @@ public class HttpNode extends BaseNode { } } - private RequestBody getRequestBody(Chain chain) { - if ("json".equals(bodyDataType)) { - return RequestBody.create(jsonBody, MediaType.parse("application/json")); + private RequestBody getRequestBody(Chain chain, Map urlDataMap) { + if ("json".equals(bodyType)) { + JSONObject object = JSON.parseObject(bodyJson); + object.putAll(urlDataMap); + return RequestBody.create(JSON.toJSONString(object), MediaType.parse("application/json")); } - if ("x-www-form-urlencoded".equals(bodyDataType)) { + if ("x-www-form-urlencoded".equals(bodyType)) { Map formUrlencodedMap = chain.getParameterValues(this, fromUrlencoded); String bodyString = mapToQueryString(formUrlencodedMap); return RequestBody.create(bodyString, MediaType.parse("application/x-www-form-urlencoded")); } - if ("form-data".equals(bodyDataType)) { + if ("form-data".equals(bodyType)) { Map formDataMap = chain.getParameterValues(this, fromData); MultipartBody.Builder builder = new MultipartBody.Builder() @@ -216,43 +253,13 @@ public class HttpNode extends BaseNode { return builder.build(); } - if ("raw".equals(bodyDataType)) { + if ("raw".equals(bodyType)) { return RequestBody.create(rawBody, null); } //none return RequestBody.create("", null); } - public static String mapToQueryString(Map map) { - if (map == null || map.isEmpty()) { - return ""; - } - - StringBuilder stringBuilder = new StringBuilder(); - - for (String key : map.keySet()) { - if (StringUtil.noText(key)) { - continue; - } - if (stringBuilder.length() > 0) { - stringBuilder.append("&"); - } - stringBuilder.append(key.trim()); - stringBuilder.append("="); - Object value = map.get(key); - stringBuilder.append(value == null ? "" : urlEncode(value.toString().trim())); - } - return stringBuilder.toString(); - } - - public static String urlEncode(String string) { - try { - return URLEncoder.encode(string, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } - @Override public String toString() { return "HttpNode{" + @@ -260,10 +267,10 @@ public class HttpNode extends BaseNode { ", method='" + method + '\'' + ", headers=" + headers + ", parameters=" + urlParameters + - ", bodyDataType='" + bodyDataType + '\'' + + ", bodyType='" + bodyType + '\'' + ", fromData=" + fromData + ", fromUrlencoded=" + fromUrlencoded + - ", jsonBody='" + jsonBody + '\'' + + ", bodyJson='" + bodyJson + '\'' + ", rawBody='" + rawBody + '\'' + ", description='" + description + '\'' + ", parameter=" + urlParameters + diff --git a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/BaseNodeParser.java b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/BaseNodeParser.java index 711410c8bb8d4f7147ba44063a166ff4397ea4e4..f575492a62e34608594d7955a7b67c71fbe9c60f 100644 --- a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/BaseNodeParser.java +++ b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/BaseNodeParser.java @@ -62,6 +62,7 @@ public abstract class BaseNodeParser implements NodeParser { parameter.setRefType(RefType.ofValue(parameterJsonObject.getString("refType"))); parameter.setRequired(parameterJsonObject.getBooleanValue("required")); parameter.setDefaultValue(parameterJsonObject.getString("defaultValue")); + parameter.setValue(parameterJsonObject.getString("value")); JSONArray childrenJSONArray = parameterJsonObject.getJSONArray("children"); diff --git a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/HttpNodeParser.java b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/HttpNodeParser.java index 024a2e11b07f7a1519c6d8d15ec7d2c961bc3afc..dcb416aa3f00de8c48ada0dff381718900e4b79b 100644 --- a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/HttpNodeParser.java +++ b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/HttpNodeParser.java @@ -32,9 +32,9 @@ public class HttpNodeParser extends BaseNodeParser { JSONObject data = getData(nodeJSONObject); httpNode.setUrl(data.getString("url")); httpNode.setMethod(data.getString("method")); - httpNode.setBodyDataType(data.getString("bodyDataType")); + httpNode.setBodyJson(data.getString("bodyJson")); httpNode.setRawBody(data.getString("rawBody")); - httpNode.setJsonBody(data.getString("jsonBody")); + httpNode.setBodyType(data.getString("bodyType")); List headers = getParameters(data, "headers"); httpNode.setHeaders(headers); diff --git a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/KnowledgeNodeParser.java b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/KnowledgeNodeParser.java index e7beaab1e7dd361ebff53e8889a098ec90f26bdc..f46414606b52174af46603d15b0e523d0e4323c4 100644 --- a/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/KnowledgeNodeParser.java +++ b/tinyflow-java-core/src/main/java/dev/tinyflow/core/parser/impl/KnowledgeNodeParser.java @@ -30,6 +30,7 @@ public class KnowledgeNodeParser extends BaseNodeParser { KnowledgeNode knowledgeNode = new KnowledgeNode(); knowledgeNode.setKnowledgeId(data.get("knowledgeId")); knowledgeNode.setLimit(data.getString("limit")); + knowledgeNode.setKeyword(data.getString("keyword")); KnowledgeProvider knowledgeProvider = tinyflow.getKnowledgeProvider(); if (knowledgeProvider != null) {