feat(core): Implement partial execution for all tool nodes (#15168)

This commit is contained in:
Benjamin Schroth
2025-05-12 12:31:17 +02:00
committed by GitHub
parent d12c7ee87f
commit 8b467e3f56
39 changed files with 1129 additions and 279 deletions

View File

@@ -25,7 +25,7 @@ import { useSettingsStore } from '@/stores/settings.store';
import { usePushConnectionStore } from '@/stores/pushConnection.store';
import { createTestNode, createTestWorkflow } from '@/__tests__/mocks';
import { waitFor } from '@testing-library/vue';
import { useParameterOverridesStore } from '@/stores/parameterOverrides.store';
import { useAgentRequestStore } from '@/stores/agentRequest.store';
vi.mock('@/stores/workflows.store', () => {
const storeState: Partial<ReturnType<typeof useWorkflowsStore>> & {
@@ -66,12 +66,12 @@ vi.mock('@/stores/workflows.store', () => {
});
vi.mock('@/stores/parameterOverrides.store', () => {
const storeState: Partial<ReturnType<typeof useParameterOverridesStore>> & {} = {
parameterOverrides: {},
substituteParameters: vi.fn(),
const storeState: Partial<ReturnType<typeof useAgentRequestStore>> & {} = {
agentRequests: {},
generateAgentRequest: vi.fn(),
};
return {
useParameterOverridesStore: vi.fn().mockReturnValue(storeState),
useAgentRequestStore: vi.fn().mockReturnValue(storeState),
};
});
@@ -138,7 +138,7 @@ describe('useRunWorkflow({ router })', () => {
let router: ReturnType<typeof useRouter>;
let workflowHelpers: ReturnType<typeof useWorkflowHelpers>;
let settingsStore: ReturnType<typeof useSettingsStore>;
let parameterOverridesStore: ReturnType<typeof useParameterOverridesStore>;
let agentRequestStore: ReturnType<typeof useAgentRequestStore>;
beforeEach(() => {
const pinia = createTestingPinia({ stubActions: false });
@@ -149,7 +149,7 @@ describe('useRunWorkflow({ router })', () => {
uiStore = useUIStore();
workflowsStore = useWorkflowsStore();
settingsStore = useSettingsStore();
parameterOverridesStore = useParameterOverridesStore();
agentRequestStore = useAgentRequestStore();
router = useRouter();
workflowHelpers = useWorkflowHelpers({ router });
@@ -512,12 +512,16 @@ describe('useRunWorkflow({ router })', () => {
});
});
it('does substituteParameters on partial execution if `partialExecutionVersion` is set to 2', async () => {
it('sends agentRequest on partial execution if `partialExecutionVersion` is set to 2', async () => {
// ARRANGE
const mockExecutionResponse = { executionId: '123' };
const mockRunData = { nodeName: [] };
const { runWorkflow } = useRunWorkflow({ router });
const dataCaptor = captor();
const agentRequest = {
query: 'query',
toolName: 'tool',
};
const workflow = mock<Workflow>({
name: 'Test Workflow',
@@ -559,16 +563,31 @@ describe('useRunWorkflow({ router })', () => {
vi.mocked(workflowHelpers).getCurrentWorkflow.mockReturnValue(workflow);
vi.mocked(workflowHelpers).getWorkflowDataToSave.mockResolvedValue(workflowData);
vi.mocked(workflowsStore).getWorkflowRunData = mockRunData;
vi.mocked(agentRequestStore).generateAgentRequest.mockReturnValue(agentRequest);
// ACT
const result = await runWorkflow({ destinationNode: 'Test node' });
// ASSERT
expect(parameterOverridesStore.substituteParameters).toHaveBeenCalledWith(
'WorkflowId',
'Test id',
{ param: '0' },
);
expect(agentRequestStore.generateAgentRequest).toHaveBeenCalledWith('WorkflowId', 'Test id');
expect(workflowsStore.runWorkflow).toHaveBeenCalledWith({
agentRequest: {
query: 'query',
tool: {
name: 'tool',
},
},
destinationNode: 'Test node',
dirtyNodeNames: undefined,
runData: mockRunData,
startNodes: [
{
name: 'Test node',
sourceData: null,
},
],
triggerToStartFrom: undefined,
workflowData,
});
expect(result).toEqual(mockExecutionResponse);
expect(workflowsStore.setWorkflowExecutionData).toHaveBeenCalledTimes(1);
expect(workflowsStore.setWorkflowExecutionData).toHaveBeenCalledWith(dataCaptor);