Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
52d37a5
Update magic-api.ftl to fix https://github.com/erupts/erupt/issues/283
aurthurxlc Oct 26, 2025
34b49a1
Merge pull request #1 from aurthurxlc/develop
aurthurxlc Oct 26, 2025
6479190
rename @Lens to @Viz
erupts Nov 6, 2025
04fdb62
rename @Lens to @Viz
erupts Nov 6, 2025
81da8cc
Merge pull request #330 from aurthurxlc/master
erupts Nov 6, 2025
15d244a
update
erupts Nov 10, 2025
c732597
Merge remote-tracking branch 'origin/develop' into develop
erupts Nov 10, 2025
3b32b25
add erupt-notice module
erupts Nov 14, 2025
d94997e
Merge remote-tracking branch 'origin/develop' into develop
erupts Nov 14, 2025
446d032
update viz demo
erupts Nov 14, 2025
f2cc03d
add gantt update_date api
erupts Nov 15, 2025
13ae4d3
甘特图支持按照数据渲染进度与颜色
erupts Nov 15, 2025
0ade697
update erupt-web
erupts Nov 16, 2025
62194e2
support groupField
erupts Nov 16, 2025
7a226b6
add erupt-notice module
erupts Nov 17, 2025
99df80c
add erupt-notice module
erupts Nov 17, 2025
5713991
add erupt-notice module
erupts Nov 17, 2025
ef8e330
add erupt-notice module
erupts Nov 17, 2025
2255bfe
add erupt-notice module
erupts Nov 17, 2025
95f1bf4
add erupt-notice module
erupts Nov 17, 2025
64c564e
update i18n
erupts Nov 18, 2025
6764843
update i18n
erupts Nov 18, 2025
27223ee
update i18n
erupts Nov 18, 2025
48dfb3f
/init-value rollback use @EruptRouter
erupts Nov 18, 2025
be0c51a
/init-value rollback use @EruptRouter
erupts Nov 18, 2025
304736e
Merge remote-tracking branch 'origin/develop' into develop
erupts Nov 18, 2025
d92687d
update erupt-web
erupts Nov 18, 2025
4d75ee7
/init-value rollback use @EruptRouter
erupts Nov 19, 2025
3483a22
Optimize notice
erupts Nov 19, 2025
305d0d1
update erupt-web
erupts Nov 19, 2025
f302fff
Merge remote-tracking branch 'origin/develop' into develop
erupts Nov 19, 2025
af2ae87
update erupt-web
erupts Nov 19, 2025
8528636
Notice module add NoticeScene
erupts Nov 20, 2025
cd034c4
Merge remote-tracking branch 'origin/develop' into develop
erupts Nov 20, 2025
ee484a5
update erupt-web
erupts Nov 20, 2025
e7463b7
Optimize 40x 500 Style
erupts Nov 21, 2025
3405205
支持在 IDEA 中注解配置项高亮,显示,例如 js 表达式,路径表达式,字段定义等
erupts Nov 21, 2025
37fa574
fit idea highlight
erupts Nov 21, 2025
59d3f44
upgarade to 1.13.2
erupts Nov 21, 2025
703e77a
support flow in erupt deleted
erupts Nov 23, 2025
21417f6
Erupt Security Support @EruptFlow
erupts Nov 24, 2025
d67893e
调整 @Readonly 注解的安全策略默认允许前端传递值,可通过 @Readonly(allowChange = false) 配置拒绝…
erupts Nov 25, 2025
e3b8647
EruptLambdaQuery 支持可重入,count() avg() 等操作后还可继续 list() one()
erupts Nov 25, 2025
32f35d9
optimize notify
erupts Nov 25, 2025
0e8af38
optimize notify
erupts Nov 27, 2025
57a96ae
update erupt-web
erupts Nov 27, 2025
f7a526b
add Annunciate
erupts Nov 28, 2025
cebd117
新增分页能力,语法:eruptDao.lambdaQuery(Announcement.class).eq(Announcement::g…
erupts Nov 28, 2025
b242b06
support announcement
erupts Nov 28, 2025
4b407be
upgrade erupt-web
erupts Nov 30, 2025
4318d07
update erupt-web
erupts Nov 30, 2025
1ced9f6
change column type
erupts Dec 1, 2025
444fd7a
Direction use single class
erupts Dec 1, 2025
fc72fb3
Direction use single class
erupts Dec 2, 2025
b132a97
Optimize announcement API
erupts Dec 2, 2025
43f2ea0
Optimize @Viz define
erupts Dec 2, 2025
8e52292
delete file
erupts Dec 2, 2025
31100c8
Fix Direction
erupts Dec 2, 2025
1690d9f
add idea icon
erupts Dec 3, 2025
6d9ab1f
支持 VizTpl 能力,分页数据可以在 tpl 文件中使用 parent.vizTplData 获取数据,Viz 解析 sort 注解配置
erupts Dec 3, 2025
147e402
Merge pull request #334 from erupts/master
erupts Dec 4, 2025
ec5a34d
Merge pull request #335 from erupts/master
erupts Dec 4, 2025
54b6059
@Viz to @Vis
erupts Dec 4, 2025
2a1afdd
@Viz to @Vis
erupts Dec 4, 2025
7792535
update erupt-web
erupts Dec 7, 2025
a20692a
Merge branch 'master' into develop
erupts Dec 8, 2025
930eb90
mysql use enum type
erupts Dec 8, 2025
7d66997
Optimize notice
erupts Dec 8, 2025
1058851
Optimize notice
erupts Dec 8, 2025
d339c47
Optimize notice
erupts Dec 8, 2025
8b90ad2
update erupt-web
erupts Dec 10, 2025
533f9b2
update erupt-web
erupts Dec 10, 2025
2c53013
修复一对多组件使用 Date 类型时,表格显示的时间比表单展示的时间少一天的 bug
erupts Dec 13, 2025
250ec73
修复一对多组件使用 Date 类型时,表格显示的时间比表单展示的时间少一天的 bug
erupts Dec 13, 2025
36856b5
修复一对多组件使用 Date 类型时,表格显示的时间比表单展示的时间少一天的 bug
erupts Dec 13, 2025
1b45cd6
Optimize notice
erupts Dec 14, 2025
6337e58
Optimize notice
erupts Dec 14, 2025
073fbaa
Flow support notice
erupts Dec 16, 2025
89d636a
Flow support notice
erupts Dec 17, 2025
5946cf7
choice add color config
erupts Dec 18, 2025
769858f
update erupt-web
erupts Dec 20, 2025
29d4f69
update erupt-web
erupts Dec 21, 2025
fec5cc0
@Vis.fields 调整为 @Vis.excludeFields 意为在视图内排除哪些 view 字段的限制
erupts Dec 22, 2025
08997c4
@Vis.fields 调整为 @Vis.excludeFields 意为在视图内排除哪些 view 字段的限制
erupts Dec 22, 2025
9b367f9
支持全部已读功能
erupts Dec 23, 2025
c363c95
update erupt-web
erupts Dec 23, 2025
e1fa514
update erupt-web
erupts Dec 23, 2025
d9dcbd0
Optimize notice
erupts Dec 24, 2025
86d059f
Optimize notice
erupts Dec 24, 2025
d85cda6
ApiKey not View
erupts Dec 25, 2025
c0ed9a2
Merge remote-tracking branch 'origin/develop' into develop
erupts Dec 25, 2025
1e857f5
Optimize Function Call prompt
erupts Dec 25, 2025
9f1d608
Erupt module add description
erupts Dec 25, 2025
8bf683a
完全 MCP 能力:请勿在生产环境中启动 MCP 能力,可能会有数据泄露的风险
erupts Dec 25, 2025
fb42efc
完善 MCP 能力:请勿在生产环境中启动 MCP 能力,可能会有数据泄露的风险
erupts Dec 25, 2025
66b8301
Merge remote-tracking branch 'origin/develop' into develop
erupts Dec 25, 2025
bda2683
update erupt-web
erupts Dec 25, 2025
9d0abc1
Erupt AI Support : Grok MinMax OpenRouter Fireworks Mistral
erupts Dec 26, 2025
1d2bc0b
extract LlmConfig
erupts Dec 26, 2025
f933797
add together ai
erupts Dec 26, 2025
3adf3ab
修复 EruptPromptHandler 接口后项目无法启动的 bug
erupts Dec 26, 2025
3dc6405
Support Vis.fieldVisibility
erupts Dec 27, 2025
aed6a07
Change SceneEnum package
erupts Dec 28, 2025
a9551f0
update erupt-web
erupts Dec 29, 2025
ff05867
upgrade to 3.5.9
erupts Dec 29, 2025
3e5612f
notice support search
erupts Dec 29, 2025
84c727f
Fix H2 LambdaQuery.page order error
erupts Dec 30, 2025
d198752
HyperModel 不传递用户上下文也会填充更新时间与创建时间
erupts Dec 30, 2025
1d984f0
支持流程创建 API → flowExternalService.launchFlow
erupts Dec 30, 2025
ddbc63f
Merge remote-tracking branch 'origin/develop' into develop
erupts Dec 30, 2025
8a121ab
MetaModel 相关类继承时,无用户上下文也会写更新时间与创建时间字段
erupts Dec 30, 2025
6da61fe
Add Gantt Demo
erupts Dec 31, 2025
7a2868f
Merge remote-tracking branch 'origin/develop' into develop
erupts Dec 31, 2025
06f07f8
break update erupt websocket api from /erupt to /erupt-websocket
erupts Jan 1, 2026
02c5799
Merge remote-tracking branch 'origin/develop' into develop
erupts Jan 1, 2026
114d66c
align version
erupts Jan 1, 2026
8e54479
upgrade erupt-web use angular 20 + vite
erupts Jan 1, 2026
c26fe54
upgrade erupt-web use angular 20 + vite
erupts Jan 1, 2026
982afd7
移除 @ChoiceType.dependExpr 配置,可使用后端联动替代
erupts Jan 2, 2026
542bb81
update erupt-web
erupts Jan 2, 2026
ebca4b8
Edit 注解支持 OnChange 配置,可以实现数据变更时变化表单与动态调整注解配置能力
erupts Jan 3, 2026
f877dfc
Edit 注解支持 OnChange 配置,实现 eruptField.edit 注解全动态控制能力
erupts Jan 3, 2026
9f612a4
upgrade erupt-web
erupts Jan 3, 2026
eefd7ec
MCP support authorization and
erupts Jan 4, 2026
8794e29
Optimize config
erupts Jan 4, 2026
a14e1d9
Demo add onchange
erupts Jan 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ HELP.md

### IntelliJ IDEA ###
.idea
!.idea/icon.png
*.iws
*.iml
*.ipr
Expand Down
Binary file added .idea/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions GUIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Official website: https://www.erupt.xyz
Deployment documentation: https://www.yuque.com/erupts/erupt/tpq1l9
Online demo: https://www.erupt.xyz/demo
Github demo code: https://github.com/erupts/erupt-example
Gitee demo code: https://gitee.com/erupt/erupt-example
2 changes: 1 addition & 1 deletion deploy/erupt-cloud-server-docker/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>xyz.erupt</groupId>
<artifactId>erupt</artifactId>
<version>1.13.1</version>
<version>1.13.2</version>
<relativePath>../../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion erupt-admin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<parent>
<groupId>xyz.erupt</groupId>
<artifactId>erupt</artifactId>
<version>1.13.1</version>
<version>1.13.2</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion erupt-ai/RREAME.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#### AI Module

ChatGpt/DeepSeek/Kimi/ollama
Unified LLM Access & Support Layer
2 changes: 1 addition & 1 deletion erupt-ai/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<parent>
<groupId>xyz.erupt</groupId>
<artifactId>erupt</artifactId>
<version>1.13.1</version>
<version>1.13.2</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public void post() {

@Override
public ModuleInfo info() {
return ModuleInfo.builder().name("erupt-ai").build();
return ModuleInfo.builder().name("erupt-ai").description("The large-model-driven ERUPT AI infrastructure").build();
}

@Override
Expand Down
6 changes: 1 addition & 5 deletions erupt-ai/src/main/java/xyz/erupt/ai/call/AiFunctionCall.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,12 @@
*/
public interface AiFunctionCall {

default String code() {
return this.getClass().getSimpleName();
}

default boolean mcpCall() {
return true;
}

default String name() {
return this.code();
return this.getClass().getSimpleName();
}

String description();
Expand Down
30 changes: 25 additions & 5 deletions erupt-ai/src/main/java/xyz/erupt/ai/call/AiFunctionManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,36 @@ public class AiFunctionManager implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) {
EruptSpringUtil.scannerPackage(EruptApplication.getScanPackage(),
new TypeFilter[]{new AssignableTypeFilter(AiFunctionCall.class)}, clazz ->
aiFunctions.put(clazz.getSimpleName(), (AiFunctionCall) EruptSpringUtil.getBean(clazz))
);
new TypeFilter[]{new AssignableTypeFilter(AiFunctionCall.class)}, clazz -> {
AiFunctionCall functionCall = (AiFunctionCall) EruptSpringUtil.getBean(clazz);
aiFunctions.put(functionCall.name(), functionCall);
});
}

public String getFunctionCallPrompt() {
StringBuilder sb = new StringBuilder("下面是一组 Function Call 的映射,根据情况决定是否调用,否则忽略这段提示词\n");
StringBuilder sb = new StringBuilder("""
Below is a mapping of available Function Calls.

Please decide whether a function is clearly required after understanding the user's question.

Rules:
1. Call a function IF AND ONLY IF the user's intent clearly and directly matches the function description,
and calling the function will significantly improve the accuracy of the response.
2. If a function is triggered, STRICTLY output ONLY the function name.
Do NOT output explanations, symbols, punctuation, or any extra text.
3. If no function is required, IGNORE this entire instruction block
and respond to the user normally.

Available functions:
""");
for (Map.Entry<String, AiFunctionCall> entry : aiFunctions.entrySet()) {
sb.append("- 如果用户问:").append(entry.getValue().description()).append(",就只回复:").append(entry.getKey()).append("\n");
sb.append("- ")
.append(entry.getKey())
.append(": ")
.append(entry.getValue().description())
.append("\n");
}

return sb.toString();
}

Expand Down
29 changes: 0 additions & 29 deletions erupt-ai/src/main/java/xyz/erupt/ai/call/UserCall.java

This file was deleted.

39 changes: 39 additions & 0 deletions erupt-ai/src/main/java/xyz/erupt/ai/call/impl/EruptDataQuery.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package xyz.erupt.ai.call.impl;

import jakarta.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import xyz.erupt.ai.annotation.AiParam;
import xyz.erupt.ai.call.AiFunctionCall;
import xyz.erupt.core.config.GsonFactory;
import xyz.erupt.core.service.EruptCoreService;
import xyz.erupt.core.view.EruptModel;
import xyz.erupt.jpa.dao.EruptDao;

import java.util.List;

/**
* @author YuePeng
* date 2025/3/14 23:25
*/
@Component
@Scope("prototype")
public class EruptDataQuery implements AiFunctionCall {

@AiParam(description = "HQL (Hibernate Query Language)")
private String hql;

@Resource
private EruptDao eruptDao;

@Override
public String description() {
return "Query erupt model data";
}

@Override
public String call(String prompt) {
List<?> result = eruptDao.getEntityManager().createQuery(hql).getResultList();
return GsonFactory.getGson().toJson(result);
}
}
31 changes: 31 additions & 0 deletions erupt-ai/src/main/java/xyz/erupt/ai/call/impl/EruptList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package xyz.erupt.ai.call.impl;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import xyz.erupt.ai.call.AiFunctionCall;
import xyz.erupt.core.module.EruptModuleInvoke;
import xyz.erupt.core.service.EruptCoreService;
import xyz.erupt.core.view.EruptModel;

/**
* @author YuePeng
* date 2025/3/14 23:25
*/
@Component
@Scope("prototype")
public class EruptList implements AiFunctionCall {

@Override
public String description() {
return "Erupt model list";
}

@Override
public String call(String prompt) {
StringBuilder sb = new StringBuilder();
for (EruptModel erupt : EruptCoreService.getErupts()) {
sb.append(erupt.getEruptName()).append(": ").append(erupt.getErupt().name());
}
return sb.toString();
}
}
29 changes: 29 additions & 0 deletions erupt-ai/src/main/java/xyz/erupt/ai/call/impl/EruptModuleInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package xyz.erupt.ai.call.impl;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import xyz.erupt.ai.call.AiFunctionCall;
import xyz.erupt.core.module.EruptModuleInvoke;

/**
* @author YuePeng
* date 2025/3/14 23:25
*/
@Component
@Scope("prototype")
public class EruptModuleInfo implements AiFunctionCall {

@Override
public String description() {
return "Erupt Module list";
}

@Override
public String call(String prompt) {
StringBuilder sb = new StringBuilder();
EruptModuleInvoke.invoke(it -> {
sb.append(it.info().getName()).append(": ").append(it.info().getDescription()).append("\n");
});
return sb.toString();
}
}
33 changes: 33 additions & 0 deletions erupt-ai/src/main/java/xyz/erupt/ai/call/impl/EruptSchema.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package xyz.erupt.ai.call.impl;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import xyz.erupt.ai.annotation.AiParam;
import xyz.erupt.ai.call.AiFunctionCall;
import xyz.erupt.core.config.GsonFactory;
import xyz.erupt.core.module.EruptModuleInvoke;
import xyz.erupt.core.service.EruptCoreService;
import xyz.erupt.core.view.EruptModel;

/**
* @author YuePeng
* date 2025/3/14 23:25
*/
@Component
@Scope("prototype")
public class EruptSchema implements AiFunctionCall {

@AiParam(description = "Erupt Name")
private String eruptName;

@Override
public String description() {
return "Erupt model schema";
}

@Override
public String call(String prompt) {
EruptModel erupt = EruptCoreService.getEruptView(eruptName);
return GsonFactory.getGson().toJson(erupt);
}
}
33 changes: 33 additions & 0 deletions erupt-ai/src/main/java/xyz/erupt/ai/call/impl/EruptUserInfo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package xyz.erupt.ai.call.impl;

import jakarta.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import xyz.erupt.ai.call.AiFunctionCall;
import xyz.erupt.core.config.GsonFactory;
import xyz.erupt.core.context.MetaContext;
import xyz.erupt.jpa.dao.EruptDao;
import xyz.erupt.upms.model.EruptUser;

/**
* @author YuePeng
* date 2025/3/14 23:25
*/
@Component
@Scope("prototype")
public class EruptUserInfo implements AiFunctionCall {

@Resource
private EruptDao eruptDao;

@Override
public String description() {
return "Ask the current system logged-in user";
}

@Override
public String call(String prompt) {
return GsonFactory.getGson().toJson(eruptDao.find(EruptUser.class, MetaContext.getUser().getUid()));
}

}
31 changes: 29 additions & 2 deletions erupt-ai/src/main/java/xyz/erupt/ai/controller/McpController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package xyz.erupt.ai.controller;

import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
Expand All @@ -13,7 +15,11 @@
import xyz.erupt.ai.config.AiMCPProp;
import xyz.erupt.ai.util.McpUtil;
import xyz.erupt.ai.vo.mcp.*;
import xyz.erupt.core.context.MetaContext;
import xyz.erupt.core.util.EruptInformation;
import xyz.erupt.core.util.ReflectUtil;
import xyz.erupt.jpa.dao.EruptDao;
import xyz.erupt.upms.model.EruptOpenApi;

import java.io.IOException;
import java.lang.reflect.Field;
Expand All @@ -30,11 +36,15 @@
@ConditionalOnProperty(name = "erupt.ai.mcp.enabled", havingValue = "true")
@RestController
@RequestMapping("/mcp")
@Slf4j
public class McpController {

@Resource
private AiMCPProp mcpProp;

@Resource
private EruptDao eruptDao;

@GetMapping(value = "/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@PostMapping(value = "/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter sse() {
Expand Down Expand Up @@ -66,7 +76,23 @@ private void cleanup(ScheduledExecutorService scheduler, ScheduledFuture<?> task
}

@PostMapping
public ResponseEntity<?> call(@RequestBody McpRequest request) {
public ResponseEntity<?> call(HttpServletRequest servletRequest, @RequestBody McpRequest request) {
String auth = servletRequest.getHeader("Authorization");
if (null == auth) {
log.error("MCP authorization not found");
return ResponseEntity.status(401).build();
}
String bearer = "Bearer ";
String token = auth.startsWith(bearer) ? auth.substring(bearer.length()) : auth;
EruptOpenApi eruptOpenApi = eruptDao.lambdaQuery(EruptOpenApi.class).eq(EruptOpenApi::getSecret, token).one();
if (null == eruptOpenApi) {
log.error("MCP authorization token error: {}", token);
return ResponseEntity.status(401).build();
} else {
MetaContext.getUser().setUid(eruptOpenApi.getEruptUser().getId());
MetaContext.getUser().setName(eruptOpenApi.getEruptUser().getName());
MetaContext.getUser().setAccount(eruptOpenApi.getEruptUser().getAccount());
}
McpResult result = new McpResult();
switch (request.getMethod()) {
case "initialize" -> result.setResult(this.mcpInfo());
Expand All @@ -81,6 +107,7 @@ public ResponseEntity<?> call(@RequestBody McpRequest request) {
mcpCallResult.setContent(List.of(content));
result.setResult(mcpCallResult);
} catch (Exception e) {
log.error("MCP call error [" + request.getParams().getName() + "]", e);
content.setText(e.getMessage());
mcpCallResult.setError(true);
mcpCallResult.setContent(List.of(content));
Expand Down Expand Up @@ -143,7 +170,7 @@ private String mcpCall(String code, Map<String, Object> params) {
AiFunctionCall aiFunctionCall = AiFunctionManager.getAiFunctions().get(code);
if (null != params) {
for (Map.Entry<String, Object> entry : params.entrySet()) {
Field field = aiFunctionCall.getClass().getDeclaredField(entry.getKey());
Field field = ReflectUtil.findClassField(aiFunctionCall.getClass(), entry.getKey());
field.setAccessible(true);
field.set(aiFunctionCall, entry.getValue());
field.setAccessible(false);
Expand Down
Loading
Loading