From d1a4902460abbabcffaa0694d18e5dcc36b09780 Mon Sep 17 00:00:00 2001 From: nitin <142569587+ehconitin@users.noreply.github.com> Date: Sun, 26 Apr 2026 17:40:01 +0530 Subject: [PATCH] [AI] Drop 'serialization' from tool output naming (#20052) didnt made sense anymore -- we dont really 'serialize' --- .../interfaces/tool-retrieval-options.type.ts | 2 +- .../__tests__/strip-empty-values.util.spec.ts | 2 +- .../compact-tool-output.util.ts | 0 .../strip-empty-values.util.ts | 0 .../services/tool-registry.service.ts | 20 +++++++++---------- .../tool-provider/tools/execute-tool.tool.ts | 4 ++-- .../services/chat-execution.service.ts | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) rename packages/twenty-server/src/engine/core-modules/tool-provider/{output-serialization => output-transforms}/__tests__/strip-empty-values.util.spec.ts (98%) rename packages/twenty-server/src/engine/core-modules/tool-provider/{output-serialization => output-transforms}/compact-tool-output.util.ts (100%) rename packages/twenty-server/src/engine/core-modules/tool-provider/{output-serialization => output-transforms}/strip-empty-values.util.ts (100%) diff --git a/packages/twenty-server/src/engine/core-modules/tool-provider/interfaces/tool-retrieval-options.type.ts b/packages/twenty-server/src/engine/core-modules/tool-provider/interfaces/tool-retrieval-options.type.ts index de12a0f9d2..aac0da75f6 100644 --- a/packages/twenty-server/src/engine/core-modules/tool-provider/interfaces/tool-retrieval-options.type.ts +++ b/packages/twenty-server/src/engine/core-modules/tool-provider/interfaces/tool-retrieval-options.type.ts @@ -8,5 +8,5 @@ export type ToolRetrievalOptions = { // Apply output compaction (strip nulls/empty values) to dispatch results // before returning. Chat enables this to reduce token usage in the // conversation context; MCP and workflow agents leave raw output intact. - serializeOutput?: boolean; + compactOutput?: boolean; }; diff --git a/packages/twenty-server/src/engine/core-modules/tool-provider/output-serialization/__tests__/strip-empty-values.util.spec.ts b/packages/twenty-server/src/engine/core-modules/tool-provider/output-transforms/__tests__/strip-empty-values.util.spec.ts similarity index 98% rename from packages/twenty-server/src/engine/core-modules/tool-provider/output-serialization/__tests__/strip-empty-values.util.spec.ts rename to packages/twenty-server/src/engine/core-modules/tool-provider/output-transforms/__tests__/strip-empty-values.util.spec.ts index 42f8330e18..6810f6ab51 100644 --- a/packages/twenty-server/src/engine/core-modules/tool-provider/output-serialization/__tests__/strip-empty-values.util.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/tool-provider/output-transforms/__tests__/strip-empty-values.util.spec.ts @@ -1,4 +1,4 @@ -import { stripEmptyValues } from 'src/engine/core-modules/tool-provider/output-serialization/strip-empty-values.util'; +import { stripEmptyValues } from 'src/engine/core-modules/tool-provider/output-transforms/strip-empty-values.util'; describe('stripEmptyValues', () => { it('should remove null values', () => { diff --git a/packages/twenty-server/src/engine/core-modules/tool-provider/output-serialization/compact-tool-output.util.ts b/packages/twenty-server/src/engine/core-modules/tool-provider/output-transforms/compact-tool-output.util.ts similarity index 100% rename from packages/twenty-server/src/engine/core-modules/tool-provider/output-serialization/compact-tool-output.util.ts rename to packages/twenty-server/src/engine/core-modules/tool-provider/output-transforms/compact-tool-output.util.ts diff --git a/packages/twenty-server/src/engine/core-modules/tool-provider/output-serialization/strip-empty-values.util.ts b/packages/twenty-server/src/engine/core-modules/tool-provider/output-transforms/strip-empty-values.util.ts similarity index 100% rename from packages/twenty-server/src/engine/core-modules/tool-provider/output-serialization/strip-empty-values.util.ts rename to packages/twenty-server/src/engine/core-modules/tool-provider/output-transforms/strip-empty-values.util.ts diff --git a/packages/twenty-server/src/engine/core-modules/tool-provider/services/tool-registry.service.ts b/packages/twenty-server/src/engine/core-modules/tool-provider/services/tool-registry.service.ts index 46a5f8ecf4..b7ebfe317b 100644 --- a/packages/twenty-server/src/engine/core-modules/tool-provider/services/tool-registry.service.ts +++ b/packages/twenty-server/src/engine/core-modules/tool-provider/services/tool-registry.service.ts @@ -7,7 +7,7 @@ import { type ToolProviderContext } from 'src/engine/core-modules/tool-provider/ import { type ToolRetrievalOptions } from 'src/engine/core-modules/tool-provider/interfaces/tool-retrieval-options.type'; import { TOOL_PROVIDERS } from 'src/engine/core-modules/tool-provider/constants/tool-providers.token'; -import { compactToolOutput } from 'src/engine/core-modules/tool-provider/output-serialization/compact-tool-output.util'; +import { compactToolOutput } from 'src/engine/core-modules/tool-provider/output-transforms/compact-tool-output.util'; import { ToolExecutorService } from 'src/engine/core-modules/tool-provider/services/tool-executor.service'; import { type LearnToolsAspect } from 'src/engine/core-modules/tool-provider/tools/learn-tools.tool'; import { type ToolContext } from 'src/engine/core-modules/tool-provider/types/tool-context.type'; @@ -107,12 +107,12 @@ export class ToolRegistryService { options?: { wrapWithErrorContext?: boolean; includeLoadingMessage?: boolean; - serializeOutput?: boolean; + compactOutput?: boolean; }, ): ToolSet { const toolSet: ToolSet = {}; const includeLoadingMessage = options?.includeLoadingMessage ?? true; - const serializeOutput = options?.serializeOutput ?? false; + const compactOutput = options?.compactOutput ?? false; for (const descriptor of descriptors) { const baseSchema = descriptor.inputSchema as Record; @@ -133,7 +133,7 @@ export class ToolRegistryService { context, ); - return serializeOutput + return compactOutput ? (compactToolOutput(result) as ToolOutput) : result; }; @@ -170,7 +170,7 @@ export class ToolRegistryService { context: ToolContext, options?: { includeLoadingMessage?: boolean; - serializeOutput?: boolean; + compactOutput?: boolean; }, ): Promise { const fullContext = this.buildContextFromToolContext(context); @@ -190,7 +190,7 @@ export class ToolRegistryService { return this.hydrateToolSet(descriptors, fullContext, { includeLoadingMessage: options?.includeLoadingMessage, - serializeOutput: options?.serializeOutput, + compactOutput: options?.compactOutput, }); } @@ -236,7 +236,7 @@ export class ToolRegistryService { toolName: string, args: Record | undefined, context: ToolContext, - options?: { serializeOutput?: boolean }, + options?: { compactOutput?: boolean }, ): Promise { try { const fullContext = this.buildContextFromToolContext(context); @@ -258,7 +258,7 @@ export class ToolRegistryService { fullContext, ); - return options?.serializeOutput + return options?.compactOutput ? (compactToolOutput(result) as ToolOutput) : result; } catch (error) { @@ -286,7 +286,7 @@ export class ToolRegistryService { excludeTools, wrapWithErrorContext, includeLoadingMessage, - serializeOutput, + compactOutput, } = options; const categorySet = categories ? new Set(categories) : undefined; @@ -321,7 +321,7 @@ export class ToolRegistryService { const toolSet = this.hydrateToolSet(filteredDescriptors, context, { wrapWithErrorContext, includeLoadingMessage, - serializeOutput, + compactOutput, }); this.logger.log( diff --git a/packages/twenty-server/src/engine/core-modules/tool-provider/tools/execute-tool.tool.ts b/packages/twenty-server/src/engine/core-modules/tool-provider/tools/execute-tool.tool.ts index 4fe46a61ce..73da25fb34 100644 --- a/packages/twenty-server/src/engine/core-modules/tool-provider/tools/execute-tool.tool.ts +++ b/packages/twenty-server/src/engine/core-modules/tool-provider/tools/execute-tool.tool.ts @@ -49,7 +49,7 @@ export const createExecuteToolTool = ( context: ToolContext, options?: { excludeTools?: Set; - serializeOutput?: boolean; + compactOutput?: boolean; }, ) => ({ description: @@ -67,7 +67,7 @@ export const createExecuteToolTool = ( } return toolRegistry.resolveAndExecute(toolName, args, context, { - serializeOutput: options?.serializeOutput, + compactOutput: options?.compactOutput, }); }, }); diff --git a/packages/twenty-server/src/engine/metadata-modules/ai/ai-chat/services/chat-execution.service.ts b/packages/twenty-server/src/engine/metadata-modules/ai/ai-chat/services/chat-execution.service.ts index 7fc0380a74..d34e60d944 100644 --- a/packages/twenty-server/src/engine/metadata-modules/ai/ai-chat/services/chat-execution.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/ai/ai-chat/services/chat-execution.service.ts @@ -138,7 +138,7 @@ export class ChatExecutionService { const preloadedTools = await this.toolRegistry.getToolsByName( AI_CHAT_TOOL_NAMES_TO_PRELOAD, toolContext, - { serializeOutput: true }, + { compactOutput: true }, ); const resolvedModelId = modelId ?? workspace.smartModel; @@ -186,7 +186,7 @@ export class ChatExecutionService { [EXECUTE_TOOL_TOOL_NAME]: createExecuteToolTool( this.toolRegistry, toolContext, - { serializeOutput: true }, + { compactOutput: true }, ), [LOAD_SKILL_TOOL_NAME]: createLoadSkillTool( (skillNames) =>