feat: 完善多模型配置与运行切换
将模型连接统一持久化管理,并支持 Agent 运行中切换模型以及中断后选择模型继续。补充配置校验、事务与前后端交互测试。
This commit is contained in:
@@ -1,14 +1,62 @@
|
||||
package tech.easyflow.manuagent.agent;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.agentscope.core.agui.adapter.AguiAgentAdapter;
|
||||
import java.util.UUID;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
import tech.easyflow.manuagent.project.ProjectFileService;
|
||||
import tech.easyflow.manuagent.project.ProjectService;
|
||||
import tech.easyflow.manuagent.skill.SkillService;
|
||||
|
||||
/**
|
||||
* 验证 Agent 事件持久化的精简规则。
|
||||
*/
|
||||
class AgentExecutionServiceTest {
|
||||
|
||||
/**
|
||||
* Run 在创建时已经固化模型配置 ID;执行和模型重连都必须沿用该 ID,
|
||||
* 不能在工厂内部重新读取可能已经变化的全局默认模型。
|
||||
*/
|
||||
@Test
|
||||
void shouldCreateAgentWithModelBoundToRun() {
|
||||
UUID projectId = UUID.randomUUID();
|
||||
UUID runId = UUID.randomUUID();
|
||||
UUID modelId = UUID.randomUUID();
|
||||
AgentFactory factory = mock(AgentFactory.class);
|
||||
AgentFactory.AgentHandle handle = mock(AgentFactory.AgentHandle.class);
|
||||
AguiAgentAdapter adapter = mock(AguiAgentAdapter.class);
|
||||
SkillService skillService = mock(SkillService.class);
|
||||
when(handle.adapter()).thenReturn(adapter);
|
||||
when(adapter.run(any())).thenReturn(Flux.empty());
|
||||
when(skillService.enabledNames()).thenReturn(new String[] {"document"});
|
||||
when(factory.create(eq(projectId), eq(modelId), any(String[].class))).thenReturn(handle);
|
||||
|
||||
AgentExecutionService service = new AgentExecutionService(
|
||||
new ObjectMapper(),
|
||||
factory,
|
||||
mock(AgentEventService.class),
|
||||
mock(ProjectFileService.class),
|
||||
skillService);
|
||||
ProjectService.ProjectView project = mock(ProjectService.ProjectView.class);
|
||||
when(project.id()).thenReturn(projectId);
|
||||
when(project.threadId()).thenReturn("project-" + projectId);
|
||||
AgentRunService.RunView run = new AgentRunService.RunView(
|
||||
runId, projectId, modelId, "INITIAL", "RUNNING", null, null, null, null);
|
||||
|
||||
service.execute(project, run, "执行测试", Mono.never(), () -> { }, () -> false);
|
||||
|
||||
verify(factory).create(eq(projectId), eq(modelId), any(String[].class));
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证文档视觉结果保留图片路径元数据并丢弃 Base64 正文。
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user