diff --git a/README.md b/README.md index ae85120d91..db9931ec08 100644 --- a/README.md +++ b/README.md @@ -189,7 +189,7 @@ fit start -Dfit.profiles.active=prod > 这里直接使用了 `fit` 命令,该命令请参考 `fit-framework` 项目的[指导手册](https://github.com/ModelEngine-Group/fit-framework/blob/main/docs/framework/fit/java/quick-start-guide/03.%20%E4%BD%BF%E7%94%A8%E6%8F%92%E4%BB%B6%E7%9A%84%E7%83%AD%E6%8F%92%E6%8B%94%E8%83%BD%E5%8A%9B.md)。 > -> 当前,`app-platform` 使用了 `fit` 的 3.5.1 版本,因此,如果采用手动编译,需要在 `fit-framework` 仓库中切换到 `v3.5.1` 标签处进行编译构建操作。 +> 当前,`app-platform` 使用了 `fit` 的 3.5.3 版本,因此,如果采用手动编译,需要在 `fit-framework` 仓库中切换到 `v3.5.3` 标签处进行编译构建操作。 --------- diff --git a/app-builder/plugins/aipp-classify-question/pom.xml b/app-builder/plugins/aipp-classify-question/pom.xml index f8e5c15017..85a2db9ddf 100644 --- a/app-builder/plugins/aipp-classify-question/pom.xml +++ b/app-builder/plugins/aipp-classify-question/pom.xml @@ -66,7 +66,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/app-builder/plugins/aipp-extractor/pom.xml b/app-builder/plugins/aipp-extractor/pom.xml index 06568ea252..b56d83838f 100644 --- a/app-builder/plugins/aipp-extractor/pom.xml +++ b/app-builder/plugins/aipp-extractor/pom.xml @@ -61,7 +61,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/app-builder/plugins/aipp-http-call/pom.xml b/app-builder/plugins/aipp-http-call/pom.xml index 49498ae829..453e5ede46 100644 --- a/app-builder/plugins/aipp-http-call/pom.xml +++ b/app-builder/plugins/aipp-http-call/pom.xml @@ -49,7 +49,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/app-builder/plugins/aipp-loop-tool/pom.xml b/app-builder/plugins/aipp-loop-tool/pom.xml index d353b3b631..c90e166143 100644 --- a/app-builder/plugins/aipp-loop-tool/pom.xml +++ b/app-builder/plugins/aipp-loop-tool/pom.xml @@ -101,7 +101,7 @@ org.fitframework.fel tool-maven-plugin - 3.5.1 + ${fit.version} build-tool diff --git a/app-builder/plugins/aipp-parallel-tool/pom.xml b/app-builder/plugins/aipp-parallel-tool/pom.xml index 57c64362d0..31cf6dd813 100644 --- a/app-builder/plugins/aipp-parallel-tool/pom.xml +++ b/app-builder/plugins/aipp-parallel-tool/pom.xml @@ -113,7 +113,7 @@ org.fitframework.fel tool-maven-plugin - 3.5.1 + ${fit.version} build-tool diff --git a/app-builder/plugins/aipp-plugin/pom.xml b/app-builder/plugins/aipp-plugin/pom.xml index 6d7c73536d..8a2e161c4e 100644 --- a/app-builder/plugins/aipp-plugin/pom.xml +++ b/app-builder/plugins/aipp-plugin/pom.xml @@ -166,7 +166,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test @@ -315,7 +315,7 @@ org.fitframework.fel tool-maven-plugin - 3.5.1 + ${fit.version} build-tool diff --git a/app-builder/plugins/aipp-plugin/src/main/resources/application.yml b/app-builder/plugins/aipp-plugin/src/main/resources/application.yml index 345ab5e995..6e5c4ff2b6 100644 --- a/app-builder/plugins/aipp-plugin/src/main/resources/application.yml +++ b/app-builder/plugins/aipp-plugin/src/main/resources/application.yml @@ -83,6 +83,7 @@ tool: FILEEXTRACTNODESTATE: fileExtractionNodeState LOOPNODESTATE: loopNodeState PARALLELNODESTATE: parallelNodeState + TEXTCONCATENATENODESTATE: textConcatenateNodeState export-meta: version: 1.0.1 sensitive: diff --git a/app-builder/plugins/aipp-plugin/src/main/resources/component/basic_node_en.json b/app-builder/plugins/aipp-plugin/src/main/resources/component/basic_node_en.json index c68d0119d3..ceac85057b 100644 --- a/app-builder/plugins/aipp-plugin/src/main/resources/component/basic_node_en.json +++ b/app-builder/plugins/aipp-plugin/src/main/resources/component/basic_node_en.json @@ -73,5 +73,10 @@ "type": "parallelNodeState", "name": "Parallel", "uniqueName": "" + }, + { + "type": "textConcatenateNodeState", + "name": "Text Joiner", + "uniqueName": "" } ] \ No newline at end of file diff --git a/app-builder/plugins/aipp-plugin/src/main/resources/component/basic_node_zh.json b/app-builder/plugins/aipp-plugin/src/main/resources/component/basic_node_zh.json index 2f90ee566a..0a925f5591 100644 --- a/app-builder/plugins/aipp-plugin/src/main/resources/component/basic_node_zh.json +++ b/app-builder/plugins/aipp-plugin/src/main/resources/component/basic_node_zh.json @@ -73,5 +73,10 @@ "type": "parallelNodeState", "name": "并行", "uniqueName": "" + }, + { + "type": "textConcatenateNodeState", + "name": "文本拼接", + "uniqueName": "" } ] \ No newline at end of file diff --git a/app-builder/plugins/aipp-rewriter/pom.xml b/app-builder/plugins/aipp-rewriter/pom.xml index 986e5556a3..a559675087 100644 --- a/app-builder/plugins/aipp-rewriter/pom.xml +++ b/app-builder/plugins/aipp-rewriter/pom.xml @@ -62,7 +62,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/app-builder/plugins/aipp-template-render/pom.xml b/app-builder/plugins/aipp-template-render/pom.xml new file mode 100644 index 0000000000..074c5b7333 --- /dev/null +++ b/app-builder/plugins/aipp-template-render/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + + modelengine.fit.jade + app-builder-plugin-parent + 1.0.0-SNAPSHOT + + + modelengine.fit.jade.plugin + aipp-template-render + + + 17 + 17 + UTF-8 + + + + + + modelengine.jade.service + aipp-template-render-service + + + + + org.junit.jupiter + junit-jupiter + + + org.assertj + assertj-core + + + org.mockito + mockito-core + + + modelengine.fit.jade + aipp-service + + + + + + + org.fitframework + fit-build-maven-plugin + ${fit.version} + + + build-plugin + + build-plugin + + + + package-plugin + + package-plugin + + + + + + org.apache.maven.plugins + maven-antrun-plugin + ${maven.antrun.version} + + + install + + + + + + + run + + + + + + + \ No newline at end of file diff --git a/app-builder/plugins/aipp-template-render/src/main/java/modelengine/fit/jade/aipp/template/render/TemplateServiceImpl.java b/app-builder/plugins/aipp-template-render/src/main/java/modelengine/fit/jade/aipp/template/render/TemplateServiceImpl.java new file mode 100644 index 0000000000..b0989cad69 --- /dev/null +++ b/app-builder/plugins/aipp-template-render/src/main/java/modelengine/fit/jade/aipp/template/render/TemplateServiceImpl.java @@ -0,0 +1,41 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All rights reserved. + * This file is a part of the ModelEngine Project. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +package modelengine.fit.jade.aipp.template.render; + +import static modelengine.fitframework.util.ObjectUtils.nullIf; + +import modelengine.fitframework.annotation.Component; +import modelengine.fitframework.parameterization.ParameterizationMode; +import modelengine.fitframework.parameterization.ParameterizedString; +import modelengine.fitframework.parameterization.ParameterizedStringResolver; + +import java.util.Collections; +import java.util.Map; + +/** + * {@link TemplateService} 的实现类。 + * + * @author 孙怡菲 + * @since 2025-08-29 + */ +@Component +public class TemplateServiceImpl implements TemplateService { + @Override + public String renderTemplate(String template, Map args) { + if (template == null) { + return null; + } + if (args == null) { + args = Map.of(); + } + Map params = nullIf(args, Collections.emptyMap()); + ParameterizedStringResolver resolver = + ParameterizedStringResolver.create("{{", "}}", '/', ParameterizationMode.LENIENT_EMPTY); + ParameterizedString parameterizedString = resolver.resolve(template); + return parameterizedString.format(params, null); + } +} diff --git a/app-builder/plugins/aipp-template-render/src/main/resources/application.yml b/app-builder/plugins/aipp-template-render/src/main/resources/application.yml new file mode 100644 index 0000000000..f335d5a7ad --- /dev/null +++ b/app-builder/plugins/aipp-template-render/src/main/resources/application.yml @@ -0,0 +1,4 @@ +fit: + beans: + packages: + - 'modelengine.fit.jade.aipp.template.render' \ No newline at end of file diff --git a/app-builder/plugins/aipp-template-render/src/test/java/modelengine/fit/jade/aipp/template/render/TemplateServiceImplTest.java b/app-builder/plugins/aipp-template-render/src/test/java/modelengine/fit/jade/aipp/template/render/TemplateServiceImplTest.java new file mode 100644 index 0000000000..5a304b86a4 --- /dev/null +++ b/app-builder/plugins/aipp-template-render/src/test/java/modelengine/fit/jade/aipp/template/render/TemplateServiceImplTest.java @@ -0,0 +1,118 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All rights reserved. + * This file is a part of the ModelEngine Project. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +package modelengine.fit.jade.aipp.template.render; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * {@link TemplateServiceImpl} 的测试类。 + * + * @author 孙怡菲 + * @since 2025-08-28 + */ +class TemplateServiceImplTest { + private TemplateServiceImpl textTool; + + @BeforeEach + void setUp() { + this.textTool = new TemplateServiceImpl(); + } + + @Test + @DisplayName("基础模板变量替换成功") + void shouldReplaceBasicVariables() { + String template = "Hello {{name}}, your score is {{score}}."; + Map args = new HashMap<>(); + args.put("name", "Tom"); + args.put("score", 95); + + String result = this.textTool.renderTemplate(template, args); + assertEquals("Hello Tom, your score is 95.", result); + } + + @Test + @DisplayName("缺失变量时置为空字符串") + void shouldReplaceMissingVariableWithEmpty() { + String template = "Hello {{name}}, your score is {{score}}."; + Map args = new HashMap<>(); + args.put("name", "Tom"); + + String result = this.textTool.renderTemplate(template, args); + assertEquals("Hello Tom, your score is .", result); + } + + @Test + @DisplayName("空参数Map时模板变量置为空") + void shouldHandleEmptyArgsMap() { + String template = "Hello {{name}}!"; + Map args = new HashMap<>(); + + String result = this.textTool.renderTemplate(template, args); + assertEquals("Hello !", result); + } + + @Test + @DisplayName("参数为null时模板变量置为空") + void shouldHandleNullArgs() { + String template = "Hello {{name}}!"; + + String result = this.textTool.renderTemplate(template, null); + assertEquals("Hello !", result); + } + + @Test + @DisplayName("模板无占位符时内容保持不变") + void shouldHandleTemplateWithoutPlaceholders() { + String template = "Hello world!"; + + String result = this.textTool.renderTemplate(template, Map.of("name", "Tom")); + assertEquals("Hello world!", result); + } + + @Test + @DisplayName("变量中包含占位符内容保持不变") + void shouldHandleVariableWithPlaceholders() { + String template = "Hello {{name}}!"; + + String result = this.textTool.renderTemplate(template, Map.of("name", "{{Tom}}")); + assertEquals("Hello {{Tom}}!", result); + } + + @Test + @DisplayName("变量为 List 时正常替换") + void shouldReplaceListVariableCorrectly() { + String template = "Items: {{items}}"; + Map args = new HashMap<>(); + args.put("items", Arrays.asList("apple", "banana", "cherry")); + + String result = this.textTool.renderTemplate(template, args); + assertEquals("Items: [apple, banana, cherry]", result); + } + + @Test + @DisplayName("变量为 Map 时正常替换") + void shouldReplaceMapVariableCorrectly() { + String template = "Map data: {{data}}"; + Map args = new HashMap<>(); + Map mapValue = new LinkedHashMap<>(); + mapValue.put("a", 1); + mapValue.put("b", 2); + args.put("data", mapValue); + + String result = this.textTool.renderTemplate(template, args); + assertEquals("Map data: {a=1, b=2}", result); + } +} \ No newline at end of file diff --git a/app-builder/plugins/aipp-text-concatenation/pom.xml b/app-builder/plugins/aipp-text-concatenation/pom.xml new file mode 100644 index 0000000000..8c9b7dc75a --- /dev/null +++ b/app-builder/plugins/aipp-text-concatenation/pom.xml @@ -0,0 +1,99 @@ + + + 4.0.0 + + + modelengine.fit.jade + app-builder-plugin-parent + 1.0.0-SNAPSHOT + + + modelengine.fit.jade.plugin + aipp-text-concatenation + + + 17 + 17 + UTF-8 + + + + + + org.fitframework + fit-api + + + org.fitframework + fit-util + + + + + org.fitframework.fel + tool-service + + + modelengine.jade.service + aipp-template-render-service + + + + + + + org.fitframework + fit-build-maven-plugin + ${fit.version} + + + build-plugin + + build-plugin + + + + package-plugin + + package-plugin + + + + + + org.fitframework.fel + tool-maven-plugin + ${fit.version} + + + build-tool + + build-tool + + + + + + org.apache.maven.plugins + maven-antrun-plugin + ${maven.antrun.version} + + + install + + + + + + + run + + + + + + + + \ No newline at end of file diff --git a/app-builder/plugins/aipp-text-concatenation/src/main/java/modelengine/fit/jade/aipp/text/concatenation/impl/DefaultTextConcatenationToolImpl.java b/app-builder/plugins/aipp-text-concatenation/src/main/java/modelengine/fit/jade/aipp/text/concatenation/impl/DefaultTextConcatenationToolImpl.java new file mode 100644 index 0000000000..f6a6f8503e --- /dev/null +++ b/app-builder/plugins/aipp-text-concatenation/src/main/java/modelengine/fit/jade/aipp/text/concatenation/impl/DefaultTextConcatenationToolImpl.java @@ -0,0 +1,47 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All rights reserved. + * This file is a part of the ModelEngine Project. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +package modelengine.fit.jade.aipp.text.concatenation.impl; + +import modelengine.fel.tool.annotation.Attribute; +import modelengine.fel.tool.annotation.Group; +import modelengine.fel.tool.annotation.ToolMethod; +import modelengine.fit.jade.aipp.template.render.TemplateService; +import modelengine.fit.jade.aipp.text.concatenation.service.TextConcatenationTool; +import modelengine.fitframework.annotation.Component; +import modelengine.fitframework.annotation.Fitable; +import modelengine.fitframework.annotation.Property; + +import java.util.Map; + +/** + * {@link TextConcatenationTool} 的实现类。 + * + * @author 孙怡菲 + * @since 2025-08-28 + */ +@Component +@Group(name = "implGroup_text_concatenation_tool") +public class DefaultTextConcatenationToolImpl implements TextConcatenationTool { + private static final String FITABLE_ID = "default_impl"; + + private final TemplateService templateService; + + public DefaultTextConcatenationToolImpl(TemplateService templateService) { + this.templateService = templateService; + } + + @Fitable(FITABLE_ID) + @ToolMethod(name = "renderTemplateDefault", extensions = { + @Attribute(key = "tags", value = "FIT"), @Attribute(key = "tags", value = "BASIC"), + @Attribute(key = "tags", value = "TEXTCONCATENATENODE") + }) + @Property(description = "默认的文本拼接实现") + @Override + public String renderTemplate(String template, Map args) { + return this.templateService.renderTemplate(template, args); + } +} \ No newline at end of file diff --git a/app-builder/plugins/aipp-text-concatenation/src/main/java/modelengine/fit/jade/aipp/text/concatenation/service/TextConcatenationTool.java b/app-builder/plugins/aipp-text-concatenation/src/main/java/modelengine/fit/jade/aipp/text/concatenation/service/TextConcatenationTool.java new file mode 100644 index 0000000000..a75399d226 --- /dev/null +++ b/app-builder/plugins/aipp-text-concatenation/src/main/java/modelengine/fit/jade/aipp/text/concatenation/service/TextConcatenationTool.java @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All rights reserved. + * This file is a part of the ModelEngine Project. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +package modelengine.fit.jade.aipp.text.concatenation.service; + +import modelengine.fel.tool.annotation.Group; +import modelengine.fel.tool.annotation.ToolMethod; +import modelengine.fitframework.annotation.Genericable; +import modelengine.fitframework.annotation.Property; + +import java.util.Map; + +/** + * 文本拼接工具接口,提供基于模板的文本渲染功能。 + * + * @author 孙怡菲 + * @since 2025-08-28 + */ +@Group(name = "defGroup_text_concatenation_tool") +public interface TextConcatenationTool { + /** + * 渲染文本模板。 + * + * @param template 模板内容。 + * @param args 拼接的变量映射,key 为变量名,value 为变量值。 + * @return 渲染后的文本内容。 + */ + @ToolMethod(name = "renderTemplate", description = "用于文本拼接的工具") + @Genericable("modelengine.jade.concatenate.text") + String renderTemplate(@Property(description = "模板内容", required = true) String template, + @Property(description = "拼接的变量", required = true) Map args); +} diff --git a/app-builder/plugins/aipp-text-concatenation/src/main/resources/application.yml b/app-builder/plugins/aipp-text-concatenation/src/main/resources/application.yml new file mode 100644 index 0000000000..2499e00459 --- /dev/null +++ b/app-builder/plugins/aipp-text-concatenation/src/main/resources/application.yml @@ -0,0 +1,4 @@ +fit: + beans: + packages: + - 'modelengine.fit.jade.aipp.text.concatenation' \ No newline at end of file diff --git a/app-builder/plugins/aipp-text-concatenation/src/main/resources/sql/data/aipp_text_concatenation_tool.sql b/app-builder/plugins/aipp-text-concatenation/src/main/resources/sql/data/aipp_text_concatenation_tool.sql new file mode 100644 index 0000000000..2c813f8688 --- /dev/null +++ b/app-builder/plugins/aipp-text-concatenation/src/main/resources/sql/data/aipp_text_concatenation_tool.sql @@ -0,0 +1,15 @@ +INSERT INTO store_plugin (plugin_id, plugin_name, extension, deploy_status, is_builtin, source, icon) VALUES ('9a83227d6c19864af903495f7f84ac0046a4544d19f988664783c42336743227', '文本拼接工具', '{"uniqueness.groupId":"modelengine.fit.jade.plugin","pluginFullName":"aipp-text-concatenation-1.0.0-SNAPSHOT-1756387444539.jar","checksum":"6ef42fb01f0c89a8cb182ac18b8882e9e49f96ca6383fd38d90a72f979311479","name":"文本拼接工具","description":"这是一个用于文本拼接工具","uniqueness.artifactId":"text.concatenation.tool","type":"java"}', 'DEPLOYED', false, '', NULL) ON CONFLICT (plugin_id) DO NOTHING; + +INSERT INTO store_plugin_tool (tool_name, plugin_id, tool_unique_name, source, icon) VALUES ('renderTemplateDefault', '9a83227d6c19864af903495f7f84ac0046a4544d19f988664783c42336743227', '192a8c72-dce9-40a5-a07e-4f8126c0f295', '', NULL) ON CONFLICT(plugin_id, tool_unique_name) DO NOTHING; + +INSERT INTO store_tool (name, schema, runnables, extensions, unique_name, version, is_latest, group_name, definition_name, definition_group_name) VALUES ('renderTemplateDefault', '{"name":"renderTemplateDefault","description":"","parameters":{"type":"object","properties":{"template":{"default":"","examples":[""],"name":"template","description":"模板内容","type":"string"},"args":{"default":"","examples":[""],"name":"args","description":"拼接的变量","type":"object","properties":{}}},"required":["template","args"]},"return":{"convertor":"","examples":[""],"name":"","description":"默认的文本拼接实现","type":"string"},"order":["template","args"]}', '{"FIT":{"genericableId":"modelengine.jade.concatenate.text","fitableId":"default_impl"}}', '{"tags":["FIT","BASIC","TEXTCONCATENATENODE"]}', '192a8c72-dce9-40a5-a07e-4f8126c0f295', '1.0.0', true, 'implGroup_text_concatenation_tool', 'renderTemplate', 'defGroup_text_concatenation_tool') ON CONFLICT(unique_name, version) DO NOTHING; + +INSERT INTO store_definition (name, schema, definition_group_name) VALUES ('renderTemplate', '{"name":"renderTemplate","description":"用于文本拼接的工具","parameters":{"type":"object","properties":{"template":{"description":"模板内容","name":"template","type":"string","examples":[""],"default":""},"args":{"description":"拼接的变量","name":"args","type":"object","properties":{},"examples":[""],"default":""}},"required":["template","args"]},"order":["template","args"],"return":{"type":"string","convertor":""}}', 'defGroup_text_concatenation_tool') ON CONFLICT (definition_group_name, name) DO NOTHING; + +INSERT INTO store_definition_group (name, summary, description, extensions) VALUES ('defGroup_text_concatenation_tool', '', '', '{}') ON CONFLICT(name) DO NOTHING; + +INSERT INTO store_tag (tool_unique_name, name) VALUES ('192a8c72-dce9-40a5-a07e-4f8126c0f295', 'FIT') ON CONFLICT(tool_unique_name, name) DO NOTHING; +INSERT INTO store_tag (tool_unique_name, name) VALUES ('192a8c72-dce9-40a5-a07e-4f8126c0f295', 'TEXTCONCATENATENODESTATE') ON CONFLICT(tool_unique_name, name) DO NOTHING; +INSERT INTO store_tag (tool_unique_name, name) VALUES ('192a8c72-dce9-40a5-a07e-4f8126c0f295', 'BASIC') ON CONFLICT(tool_unique_name, name) DO NOTHING; + +INSERT INTO store_tool_group (name, definition_group_name, summary, description, extensions) VALUES ('implGroup_text_concatenation_tool', 'defGroup_text_concatenation_tool', '', '', '{}') ON CONFLICT(name) DO NOTHING; diff --git a/app-builder/plugins/aipp-variable-aggregation/pom.xml b/app-builder/plugins/aipp-variable-aggregation/pom.xml index bc6d728ce9..76ee836076 100644 --- a/app-builder/plugins/aipp-variable-aggregation/pom.xml +++ b/app-builder/plugins/aipp-variable-aggregation/pom.xml @@ -39,7 +39,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/app-builder/plugins/aipp-websocket-plugin/pom.xml b/app-builder/plugins/aipp-websocket-plugin/pom.xml index 41ea1fe631..167fef7f2e 100644 --- a/app-builder/plugins/aipp-websocket-plugin/pom.xml +++ b/app-builder/plugins/aipp-websocket-plugin/pom.xml @@ -62,7 +62,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/app-builder/plugins/app-metrics/pom.xml b/app-builder/plugins/app-metrics/pom.xml index ef54877336..6fbcc5e29f 100644 --- a/app-builder/plugins/app-metrics/pom.xml +++ b/app-builder/plugins/app-metrics/pom.xml @@ -110,7 +110,7 @@ org.fitframework fit-build-maven-plugin - 3.5.1 + ${fit.version} user 3 @@ -133,7 +133,7 @@ org.fitframework fit-dependency-maven-plugin - 3.5.1 + ${fit.version} dependency diff --git a/app-builder/plugins/plugins-show-case-parent/agent-test/pom.xml b/app-builder/plugins/plugins-show-case-parent/agent-test/pom.xml index 80257b19fe..4e60bcb50d 100644 --- a/app-builder/plugins/plugins-show-case-parent/agent-test/pom.xml +++ b/app-builder/plugins/plugins-show-case-parent/agent-test/pom.xml @@ -82,7 +82,7 @@ org.fitframework fit-build-maven-plugin - 3.5.1 + ${fit.version} build-plugin @@ -95,7 +95,7 @@ org.fitframework.fel tool-maven-plugin - 3.5.1 + ${fit.version} build-tool diff --git a/app-builder/plugins/plugins-show-case-parent/aito-data/pom.xml b/app-builder/plugins/plugins-show-case-parent/aito-data/pom.xml index 735f9e9a4e..71f8e4fa3f 100644 --- a/app-builder/plugins/plugins-show-case-parent/aito-data/pom.xml +++ b/app-builder/plugins/plugins-show-case-parent/aito-data/pom.xml @@ -86,7 +86,7 @@ org.fitframework fit-build-maven-plugin - 3.5.1 + ${fit.version} build-plugin @@ -105,7 +105,7 @@ org.fitframework.fel tool-maven-plugin - 3.5.1 + 3.5.3 build-tool diff --git a/app-builder/plugins/plugins-show-case-parent/fortune-telling/pom.xml b/app-builder/plugins/plugins-show-case-parent/fortune-telling/pom.xml index 33ad301322..820b7d0a13 100644 --- a/app-builder/plugins/plugins-show-case-parent/fortune-telling/pom.xml +++ b/app-builder/plugins/plugins-show-case-parent/fortune-telling/pom.xml @@ -47,7 +47,7 @@ org.fitframework fit-build-maven-plugin - 3.5.1 + ${fit.version} build-plugin @@ -66,7 +66,7 @@ org.fitframework.fel tool-maven-plugin - 3.5.1 + ${fit.version} build-tool diff --git a/app-builder/plugins/pom.xml b/app-builder/plugins/pom.xml index 4a0ab34250..4687a7b962 100644 --- a/app-builder/plugins/pom.xml +++ b/app-builder/plugins/pom.xml @@ -29,6 +29,8 @@ aipp-plugin aipp-prompt-builder aipp-rewriter + aipp-template-render + aipp-text-concatenation aipp-variable-aggregation aipp-websocket-plugin app-announcement diff --git a/app-builder/plugins/task-new/pom.xml b/app-builder/plugins/task-new/pom.xml index 6dc342abb0..4a50850858 100644 --- a/app-builder/plugins/task-new/pom.xml +++ b/app-builder/plugins/task-new/pom.xml @@ -97,7 +97,7 @@ org.fitframework.fel tool-maven-plugin - 3.5.1 + ${fit.version} build-tool diff --git a/app-builder/plugins/tool-waterflow/pom.xml b/app-builder/plugins/tool-waterflow/pom.xml index b1a25bc460..0e9260dc1a 100644 --- a/app-builder/plugins/tool-waterflow/pom.xml +++ b/app-builder/plugins/tool-waterflow/pom.xml @@ -69,7 +69,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/app-builder/services/aipp-template-render-service/pom.xml b/app-builder/services/aipp-template-render-service/pom.xml new file mode 100644 index 0000000000..99ef01078c --- /dev/null +++ b/app-builder/services/aipp-template-render-service/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + modelengine.fit.jade + app-builder-service-parent + 1.0.0-SNAPSHOT + + + modelengine.jade.service + aipp-template-render-service + + + 17 + 17 + UTF-8 + + \ No newline at end of file diff --git a/app-builder/services/aipp-template-render-service/src/main/java/modelengine/fit/jade/aipp/template/render/TemplateService.java b/app-builder/services/aipp-template-render-service/src/main/java/modelengine/fit/jade/aipp/template/render/TemplateService.java new file mode 100644 index 0000000000..dfa8c17949 --- /dev/null +++ b/app-builder/services/aipp-template-render-service/src/main/java/modelengine/fit/jade/aipp/template/render/TemplateService.java @@ -0,0 +1,26 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All rights reserved. + * This file is a part of the ModelEngine Project. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +package modelengine.fit.jade.aipp.template.render; + +import java.util.Map; + +/** + * 模板渲染服务接口,提供基于变量替换的模板渲染功能。 + * + * @author 孙怡菲 + * @since 2025-08-29 + */ +public interface TemplateService { + /** + * 渲染文本模板。 + * + * @param template 模板内容,包含变量占位符。 + * @param args 模板变量映射,key 为变量名,value 为变量值。 + * @return 渲染后的完整文本内容。 + */ + String renderTemplate(String template, Map args); +} diff --git a/app-builder/services/dynamic-form-genericable/pom.xml b/app-builder/services/dynamic-form-genericable/pom.xml index 24f8c2acae..79d45b4b78 100644 --- a/app-builder/services/dynamic-form-genericable/pom.xml +++ b/app-builder/services/dynamic-form-genericable/pom.xml @@ -18,12 +18,12 @@ org.fitframework fit-api - 3.5.1 + ${fit.version} org.fitframework fit-util - 3.5.1 + ${fit.version} modelengine.fit.jane @@ -33,7 +33,7 @@ org.fitframework.service fit-http-classic - 3.5.1 + ${fit.version} org.projectlombok diff --git a/app-builder/services/pom.xml b/app-builder/services/pom.xml index 46a9cd5419..4bbfcd7cc5 100644 --- a/app-builder/services/pom.xml +++ b/app-builder/services/pom.xml @@ -25,6 +25,7 @@ aipp-prompt-builder aipp-rewriter aipp-service + aipp-template-render-service aipp-variable-aggregation app-base dynamic-form-genericable diff --git a/app-builder/waterflow/java/pom.xml b/app-builder/waterflow/java/pom.xml index 242a631532..6b429b7968 100644 --- a/app-builder/waterflow/java/pom.xml +++ b/app-builder/waterflow/java/pom.xml @@ -21,7 +21,7 @@ 17 - 3.5.1 + 3.5.3 1.0.0-SNAPSHOT diff --git a/app-builder/waterflow/java/waterflow-dependency/pom.xml b/app-builder/waterflow/java/waterflow-dependency/pom.xml index 2f01e5f0ba..8ce3d038cb 100644 --- a/app-builder/waterflow/java/waterflow-dependency/pom.xml +++ b/app-builder/waterflow/java/waterflow-dependency/pom.xml @@ -14,10 +14,10 @@ 17 - 3.5.1 - 3.5.1 + 3.5.3 + 3.5.3 1.0.0-SNAPSHOT - 3.5.1 + 3.5.3 1.2.20 diff --git a/carver/plugins/tool-execution/pom.xml b/carver/plugins/tool-execution/pom.xml index 0c2acf6208..bac15ddf4d 100644 --- a/carver/plugins/tool-execution/pom.xml +++ b/carver/plugins/tool-execution/pom.xml @@ -50,7 +50,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/carver/plugins/tool-repository-postgresql/pom.xml b/carver/plugins/tool-repository-postgresql/pom.xml index 8071aa9589..ad2f753345 100644 --- a/carver/plugins/tool-repository-postgresql/pom.xml +++ b/carver/plugins/tool-repository-postgresql/pom.xml @@ -87,7 +87,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/common/components/ui-word-globalizer/pom.xml b/common/components/ui-word-globalizer/pom.xml index 928cac1b88..718db12803 100644 --- a/common/components/ui-word-globalizer/pom.xml +++ b/common/components/ui-word-globalizer/pom.xml @@ -40,7 +40,7 @@ org.fitframework fit-dependency-maven-plugin - 3.5.1 + ${fit.version} dependency diff --git a/common/dependency/pom.xml b/common/dependency/pom.xml index 90f2ed1a45..08557400ca 100644 --- a/common/dependency/pom.xml +++ b/common/dependency/pom.xml @@ -14,9 +14,9 @@ 17 - 3.5.1 - 3.5.1 - 3.5.1 + 3.5.3 + 3.5.3 + 3.5.3 1.0.0-SNAPSHOT 1.0.0-SNAPSHOT 1.0.0-SNAPSHOT @@ -377,6 +377,11 @@ aipp-file-extract-service 1.0.0-SNAPSHOT + + modelengine.jade.service + aipp-template-render-service + 1.0.0-SNAPSHOT + diff --git a/common/plugins/schema-generator/pom.xml b/common/plugins/schema-generator/pom.xml index 7b418bcd9d..3a7345db5d 100644 --- a/common/plugins/schema-generator/pom.xml +++ b/common/plugins/schema-generator/pom.xml @@ -45,7 +45,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/common/plugins/schema-validator-everit-h1/pom.xml b/common/plugins/schema-validator-everit-h1/pom.xml index 09a1bebd02..bc1bc16681 100644 --- a/common/plugins/schema-validator-everit-h1/pom.xml +++ b/common/plugins/schema-validator-everit-h1/pom.xml @@ -54,7 +54,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/frontend/src/assets/icon.js b/frontend/src/assets/icon.js index a2ea532ea0..e57682010e 100644 --- a/frontend/src/assets/icon.js +++ b/frontend/src/assets/icon.js @@ -64,6 +64,7 @@ const TextToImageIcon = (props) => ( ()} {...props} />; const LoopIcon = (props) => ()} {...props} />; const PairingIcon = (props) => ()} {...props} />; +const TextConcatenateIcon = (props) => ; export { LeftArrowIcon, @@ -121,6 +122,7 @@ export { TextToImageIcon, FileExtractionIcon, LoopIcon, - PairingIcon + PairingIcon, + TextConcatenateIcon } diff --git a/frontend/src/components/icons/base.tsx b/frontend/src/components/icons/base.tsx index b7da05fa1f..2e83c1441a 100644 --- a/frontend/src/components/icons/base.tsx +++ b/frontend/src/components/icons/base.tsx @@ -952,5 +952,21 @@ export const BaseIcons = { + ), + TextConcatenate:() =>( + + + + + + + + + + + + + + ) } diff --git a/frontend/src/pages/addFlow/components/basic-item.tsx b/frontend/src/pages/addFlow/components/basic-item.tsx index 14bfd651bd..a5adaf8b5b 100644 --- a/frontend/src/pages/addFlow/components/basic-item.tsx +++ b/frontend/src/pages/addFlow/components/basic-item.tsx @@ -24,6 +24,7 @@ import { FileExtractionIcon, LoopIcon, PairingIcon, + TextConcatenateIcon, } from '@/assets/icon'; import { handleClickAddBasicNode, handleDragBasicNode } from '../utils' @@ -60,7 +61,8 @@ const BasicItems = (props: any) => { 'noteNode': , 'loopNodeState': , 'manualCheckNodeState': , - 'parallelNodeState': + 'parallelNodeState': , + 'textConcatenateNodeState': }[type]; } return <> diff --git a/pom.xml b/pom.xml index 0e162ed1a8..62ed7b2fec 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 17 - 3.5.1 + 3.5.3 1.0.0-SNAPSHOT diff --git a/store/plugins/store-tool-deployer/pom.xml b/store/plugins/store-tool-deployer/pom.xml index 37ef8efea1..1cefce1ffc 100644 --- a/store/plugins/store-tool-deployer/pom.xml +++ b/store/plugins/store-tool-deployer/pom.xml @@ -49,7 +49,7 @@ org.fitframework.fel tool-info - 3.5.1 + ${fit.version} @@ -64,7 +64,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/store/plugins/store-tool-uploader/pom.xml b/store/plugins/store-tool-uploader/pom.xml index 94fc49bbc3..ae656dc14d 100644 --- a/store/plugins/store-tool-uploader/pom.xml +++ b/store/plugins/store-tool-uploader/pom.xml @@ -53,7 +53,7 @@ org.fitframework.fel tool-info - 3.5.1 + ${fit.version} @@ -68,7 +68,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test diff --git a/store/services/store-service/pom.xml b/store/services/store-service/pom.xml index 0cefcff986..217d13409a 100644 --- a/store/services/store-service/pom.xml +++ b/store/services/store-service/pom.xml @@ -45,7 +45,7 @@ org.fitframework.plugin fit-message-serializer-json-jackson - 3.5.1 + ${fit.version} test