diff --git a/packages/editor-ui/src/components/ButtonParameter/ButtonParameter.vue b/packages/editor-ui/src/components/ButtonParameter/ButtonParameter.vue index d7e05b0f5b..0708a4ea0d 100644 --- a/packages/editor-ui/src/components/ButtonParameter/ButtonParameter.vue +++ b/packages/editor-ui/src/components/ButtonParameter/ButtonParameter.vue @@ -10,6 +10,7 @@ import { getSchemas, getParentNodes } from './utils'; import { ASK_AI_EXPERIMENT } from '@/constants'; import { usePostHog } from '@/stores/posthog.store'; import { useRootStore } from '@/stores/root.store'; +import { useTelemetry } from '@/composables/useTelemetry'; import { generateCodeForPrompt } from '@/api/ai'; import { format } from 'prettier'; @@ -144,6 +145,11 @@ async function onSubmit() { }; emit('valueChanged', updateInformation); + + useTelemetry().trackAiTransform('generationFinished', { + prompt: prompt.value, + code: formattedCode, + }); break; default: return; @@ -156,6 +162,11 @@ async function onSubmit() { stopLoading(); } catch (error) { + useTelemetry().trackAiTransform('generationFinished', { + prompt: prompt.value, + code: '', + hasError: true, + }); showMessage({ type: 'error', title: i18n.baseText('codeNodeEditor.askAi.generationFailed'), diff --git a/packages/editor-ui/src/plugins/telemetry/index.ts b/packages/editor-ui/src/plugins/telemetry/index.ts index 524ddc4a3d..d6cc3bbc69 100644 --- a/packages/editor-ui/src/plugins/telemetry/index.ts +++ b/packages/editor-ui/src/plugins/telemetry/index.ts @@ -167,6 +167,20 @@ export class Telemetry { } } + trackAiTransform(event: string, properties: IDataObject = {}) { + if (this.rudderStack) { + properties.session_id = useRootStore().pushRef; + properties.ndv_session_id = useNDVStore().pushRef; + + switch (event) { + case 'generationFinished': + this.track('Ai Transform code generation finished', properties, { withPostHog: true }); + default: + break; + } + } + } + trackNodesPanel(event: string, properties: IDataObject = {}) { if (this.rudderStack) { properties.nodes_panel_session_id = this.userNodesPanelSession.pushRef; diff --git a/packages/nodes-base/nodes/AiTransform/AiTransform.node.ts b/packages/nodes-base/nodes/AiTransform/AiTransform.node.ts index 8c41635555..3042267a44 100644 --- a/packages/nodes-base/nodes/AiTransform/AiTransform.node.ts +++ b/packages/nodes-base/nodes/AiTransform/AiTransform.node.ts @@ -32,7 +32,7 @@ export class AiTransform implements INodeType { properties: [ { displayName: 'Instructions', - name: 'generate', + name: 'instructions', type: 'button', default: '', description: @@ -92,7 +92,7 @@ export class AiTransform implements INodeType { code = this.getNodeParameter(codeParameterName, index) as string; if (!code) { - const instructions = this.getNodeParameter('generate', index) as string; + const instructions = this.getNodeParameter('instructions', index) as string; if (!instructions) { throw new NodeOperationError(node, 'Missing instructions to generate code', { description: diff --git a/packages/workflow/src/TelemetryHelpers.ts b/packages/workflow/src/TelemetryHelpers.ts index 4cb107ea2c..b28a59f654 100644 --- a/packages/workflow/src/TelemetryHelpers.ts +++ b/packages/workflow/src/TelemetryHelpers.ts @@ -13,6 +13,7 @@ import type { import { ApplicationError } from './errors/application.error'; import { AGENT_LANGCHAIN_NODE_TYPE, + AI_TRANSFORM_NODE_TYPE, CHAIN_LLM_LANGCHAIN_NODE_TYPE, CHAIN_SUMMARIZATION_LANGCHAIN_NODE_TYPE, EXECUTE_WORKFLOW_NODE_TYPE, @@ -207,7 +208,9 @@ export function generateNodesGraph( nodeItem.src_node_id = options.nodeIdMap[node.id]; } - if (node.type === AGENT_LANGCHAIN_NODE_TYPE) { + if (node.type === AI_TRANSFORM_NODE_TYPE && options?.isCloudDeployment) { + nodeItem.prompts = { instructions: node.parameters.instructions as string }; + } else if (node.type === AGENT_LANGCHAIN_NODE_TYPE) { nodeItem.agent = (node.parameters.agent as string) ?? 'conversationalAgent'; } else if (node.type === MERGE_NODE_TYPE) { nodeItem.operation = node.parameters.mode as string;