From ea4020c2d6cba77a7fd25d663690e978c43ee2ae Mon Sep 17 00:00:00 2001 From: Oriol Raventos Date: Tue, 28 Jul 2026 12:51:47 +0200 Subject: [PATCH 1/2] feat: remove events for knowledge base and feedback knowledge base, remove debug system components for knowledge base --- .../src/models/hubtype-analytics.ts | 34 ----- .../ht-event-feedback-knowledgebase.ts | 35 ----- .../event-models/ht-event-knowledge-base.ts | 38 ----- .../src/event-models/index.ts | 2 - .../src/types.ts | 8 - .../src/utils.ts | 8 - .../event-feedback-knowledgebase.test.ts | 38 ----- .../tests/event-knowledge-base.test.ts | 86 ----------- .../src/components/index-types.ts | 2 - .../src/components/message/index.jsx | 9 +- .../components/message/message-feedback.tsx | 90 ------------ .../src/components/message/message-footer.tsx | 14 -- .../system-debug-trace/debug-message.tsx | 3 - .../system-debug-trace/events/constants.ts | 2 - .../system-debug-trace/events/index.ts | 1 - .../events/knowledge-base.tsx | 115 --------------- .../hooks/use-knowledge-base-info.tsx | 28 +--- .../components/system-debug-trace/types.ts | 2 - .../botonic-react/src/components/text.tsx | 2 - .../src/debug-system-messages.ts | 25 ---- .../botonic-react/src/webchat/tracking.ts | 58 +------- .../system-debug-trace-events.test.jsx | 139 ------------------ .../system-debug-trace-utils.test.jsx | 72 --------- .../components/system-debug-trace.test.jsx | 20 --- 24 files changed, 4 insertions(+), 827 deletions(-) delete mode 100644 packages/botonic-plugin-hubtype-analytics/src/event-models/ht-event-feedback-knowledgebase.ts delete mode 100644 packages/botonic-plugin-hubtype-analytics/src/event-models/ht-event-knowledge-base.ts delete mode 100644 packages/botonic-plugin-hubtype-analytics/tests/event-feedback-knowledgebase.test.ts delete mode 100644 packages/botonic-plugin-hubtype-analytics/tests/event-knowledge-base.test.ts delete mode 100644 packages/botonic-react/src/components/message/message-feedback.tsx delete mode 100644 packages/botonic-react/src/components/system-debug-trace/events/knowledge-base.tsx diff --git a/packages/botonic-core/src/models/hubtype-analytics.ts b/packages/botonic-core/src/models/hubtype-analytics.ts index 125887b03d..930caca9a7 100644 --- a/packages/botonic-core/src/models/hubtype-analytics.ts +++ b/packages/botonic-core/src/models/hubtype-analytics.ts @@ -7,7 +7,6 @@ export enum EventAction { FeedbackCase = 'feedback_case', FeedbackMessage = 'feedback_message', FeedbackConversation = 'feedback_conversation', - FeedbackKnowledgebase = 'feedback_knowledgebase', FeedbackWebview = 'feedback_webview', FlowNode = 'flow_node', ConditionalCountry = 'conditional_country', @@ -21,7 +20,6 @@ export enum EventAction { HandoffFail = 'handoff_fail', Keyword = 'nlu_keyword', IntentSmart = 'nlu_intent_smart', - Knowledgebase = 'knowledgebase', Fallback = 'fallback', WebviewStep = 'webview_step', WebviewEnd = 'webview_end', @@ -59,19 +57,6 @@ export interface EventFeedback extends HtBaseEventProps { comment?: string } -export interface EventFeedbackKnowledgebase extends HtBaseEventProps { - action: EventAction.FeedbackKnowledgebase - knowledgebaseInferenceId: string - feedbackBotInteractionId: string - feedbackTargetId: string - feedbackGroupId: string - possibleOptions: string[] - possibleValues?: number[] - option: string - value?: number - comment?: string -} - export interface EventFlow extends HtBaseEventProps { action: EventAction.FlowNode flowThreadId: string @@ -164,25 +149,6 @@ export interface EventIntentSmart extends HtBaseEventProps { userInput: string } -export enum KnowledgebaseFailReason { - NoKnowledge = 'no_knowledge', - Hallucination = 'hallucination', -} -export interface EventKnowledgeBase extends HtBaseEventProps { - action: EventAction.Knowledgebase - flowThreadId: string - flowId: string - flowName: string - flowNodeId: string - flowNodeContentId: string - knowledgebaseInferenceId: string - knowledgebaseFailReason?: KnowledgebaseFailReason - knowledgebaseSourcesIds: string[] - knowledgebaseChunksIds: string[] - knowledgebaseMessageId: string - userInput: string -} - export interface EventWebviewActionTriggered extends HtBaseEventAllFlowProps { action: EventAction.WebviewActionTriggered webviewTargetId: string diff --git a/packages/botonic-plugin-hubtype-analytics/src/event-models/ht-event-feedback-knowledgebase.ts b/packages/botonic-plugin-hubtype-analytics/src/event-models/ht-event-feedback-knowledgebase.ts deleted file mode 100644 index 2606057fc0..0000000000 --- a/packages/botonic-plugin-hubtype-analytics/src/event-models/ht-event-feedback-knowledgebase.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - type EventAction, - type EventFeedbackKnowledgebase, - EventType, - type RequestData, -} from '../types' -import { HtEvent } from './ht-event' - -export class HtEventFeedbackKnowledgebase extends HtEvent { - action: EventAction.FeedbackKnowledgebase - knowledge_base_inference_id: string - feedback_target_bot_interaction_id: string - feedback_target_id: string - feedback_group_id: string - possible_options: string[] - possible_values?: number[] - option: string - value?: number - comment?: string - - constructor(event: EventFeedbackKnowledgebase, requestData: RequestData) { - super(event, requestData) - this.type = EventType.WebEvent - this.action = event.action - this.knowledge_base_inference_id = event.knowledgebaseInferenceId - this.feedback_target_bot_interaction_id = event.feedbackBotInteractionId - this.feedback_target_id = event.feedbackTargetId - this.feedback_group_id = event.feedbackGroupId - this.possible_options = event.possibleOptions - this.possible_values = event.possibleValues - this.option = event.option - this.value = event.value - this.comment = event.comment - } -} diff --git a/packages/botonic-plugin-hubtype-analytics/src/event-models/ht-event-knowledge-base.ts b/packages/botonic-plugin-hubtype-analytics/src/event-models/ht-event-knowledge-base.ts deleted file mode 100644 index 5a97093968..0000000000 --- a/packages/botonic-plugin-hubtype-analytics/src/event-models/ht-event-knowledge-base.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { - EventAction, - type EventKnowledgeBase, - EventType, - type RequestData, -} from '../types' -import { HtEvent } from './ht-event' - -export class HtEventKnowledgeBase extends HtEvent { - knowledgebase_inference_id: string - knowledgebase_fail_reason?: string - knowledgebase_sources_ids: string[] - knowledgebase_chunks_ids: string[] - knowledgebase_message_id: string - user_input: string - flow_thread_id: string - flow_id: string - flow_name: string - flow_node_id: string - flow_node_content_id: string - - constructor(event: EventKnowledgeBase, requestData: RequestData) { - super(event, requestData) - this.type = EventType.BotEvent - this.action = EventAction.Knowledgebase - this.knowledgebase_inference_id = event.knowledgebaseInferenceId - this.knowledgebase_fail_reason = event.knowledgebaseFailReason - this.knowledgebase_sources_ids = event.knowledgebaseSourcesIds - this.knowledgebase_chunks_ids = event.knowledgebaseChunksIds - this.knowledgebase_message_id = event.knowledgebaseMessageId - this.user_input = event.userInput - this.flow_thread_id = event.flowThreadId - this.flow_id = event.flowId - this.flow_name = event.flowName - this.flow_node_id = event.flowNodeId - this.flow_node_content_id = event.flowNodeContentId - } -} diff --git a/packages/botonic-plugin-hubtype-analytics/src/event-models/index.ts b/packages/botonic-plugin-hubtype-analytics/src/event-models/index.ts index d0f6588b24..f1c181d400 100644 --- a/packages/botonic-plugin-hubtype-analytics/src/event-models/index.ts +++ b/packages/botonic-plugin-hubtype-analytics/src/event-models/index.ts @@ -9,13 +9,11 @@ export { HtEventConditionalQueueStatus } from './ht-event-conditional-queue-stat export { HtEventCustom } from './ht-event-custom' export { HtEventFallback } from './ht-event-fallback' export { HtEventFeedback } from './ht-event-feedback' -export { HtEventFeedbackKnowledgebase } from './ht-event-feedback-knowledgebase' export { HtEventFlow } from './ht-event-flow' export { HtEventHandoff } from './ht-event-handoff' export { HtEventHandoffOption } from './ht-event-handoff-option' export { HtEventIntentSmart } from './ht-event-intent-smart' export { HtEventKeyword } from './ht-event-keyword' -export { HtEventKnowledgeBase } from './ht-event-knowledge-base' export { HtEventRedirectFlow } from './ht-event-redirect-flow' export { HtEventWebviewActionTriggered } from './ht-event-webview-action-triggered' export { HtEventWebviewEnd } from './ht-event-webview-end' diff --git a/packages/botonic-plugin-hubtype-analytics/src/types.ts b/packages/botonic-plugin-hubtype-analytics/src/types.ts index 9147bbcb85..229df8680b 100644 --- a/packages/botonic-plugin-hubtype-analytics/src/types.ts +++ b/packages/botonic-plugin-hubtype-analytics/src/types.ts @@ -12,18 +12,15 @@ import { EventCustom, EventFallback, EventFeedback, - EventFeedbackKnowledgebase, EventFlow, EventHandoff, EventHandoffOption, EventIntentSmart, EventKeyword, - EventKnowledgeBase, type EventRedirectFlow, EventWebviewActionTriggered, EventWebviewEnd, EventWebviewStep, - KnowledgebaseFailReason, ToolExecution, WebviewEndFailType, } from '@botonic/core' @@ -35,7 +32,6 @@ export enum EventType { export type HtEventProps = | EventFeedback - | EventFeedbackKnowledgebase | EventFlow | EventBotAction | EventConditionalChannel @@ -46,7 +42,6 @@ export type HtEventProps = | EventHandoffOption | EventKeyword | EventIntentSmart - | EventKnowledgeBase | EventWebviewActionTriggered | EventFallback | EventWebviewStep @@ -79,17 +74,14 @@ export { EventCustom, EventFallback, EventFeedback, - EventFeedbackKnowledgebase, EventFlow, EventHandoff, EventHandoffOption, EventIntentSmart, EventKeyword, - EventKnowledgeBase, EventWebviewActionTriggered, EventWebviewEnd, EventWebviewStep, - KnowledgebaseFailReason, ToolExecution, WebviewEndFailType, } diff --git a/packages/botonic-plugin-hubtype-analytics/src/utils.ts b/packages/botonic-plugin-hubtype-analytics/src/utils.ts index ee18eaee60..d35750aa38 100644 --- a/packages/botonic-plugin-hubtype-analytics/src/utils.ts +++ b/packages/botonic-plugin-hubtype-analytics/src/utils.ts @@ -11,13 +11,11 @@ import { HtEventCustom, HtEventFallback, HtEventFeedback, - HtEventFeedbackKnowledgebase, HtEventFlow, HtEventHandoff, HtEventHandoffOption, HtEventIntentSmart, HtEventKeyword, - HtEventKnowledgeBase, HtEventRedirectFlow, HtEventWebviewActionTriggered, HtEventWebviewEnd, @@ -37,9 +35,6 @@ export function createHtEvent( case EventAction.FeedbackWebview: return new HtEventFeedback(htEventProps, requestData) - case EventAction.FeedbackKnowledgebase: - return new HtEventFeedbackKnowledgebase(htEventProps, requestData) - case EventAction.FlowNode: return new HtEventFlow(htEventProps, requestData) @@ -56,9 +51,6 @@ export function createHtEvent( case EventAction.IntentSmart: return new HtEventIntentSmart(htEventProps, requestData) - case EventAction.Knowledgebase: - return new HtEventKnowledgeBase(htEventProps, requestData) - case EventAction.Fallback: return new HtEventFallback(htEventProps, requestData) diff --git a/packages/botonic-plugin-hubtype-analytics/tests/event-feedback-knowledgebase.test.ts b/packages/botonic-plugin-hubtype-analytics/tests/event-feedback-knowledgebase.test.ts deleted file mode 100644 index 110d2ce6f4..0000000000 --- a/packages/botonic-plugin-hubtype-analytics/tests/event-feedback-knowledgebase.test.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { createHtEvent, EventAction, EventType } from '../src' -import { getRequestData } from './helpers' - -describe('Create feedback knowledgebase event', () => { - test('A message generated for a knowledge base recive feedback', () => { - const requestData = getRequestData() - const htEvent = createHtEvent(requestData, { - action: EventAction.FeedbackKnowledgebase, - feedbackTargetId: 'messageIdTest', - feedbackGroupId: 'groupIdTest', - feedbackBotInteractionId: 'testInteractionId', - knowledgebaseInferenceId: 'knowledgebaseInferenceIdTest', - possibleOptions: ['thumbs_down', 'thumbs_up'], - possibleValues: [0, 1], - option: 'thumbs_down', - value: 0, - }) - - expect(htEvent).toEqual({ - chat_id: 'chatIdTest', - user_locale: 'es', - user_country: 'ES', - system_locale: 'es', - format_version: 5, - action: EventAction.FeedbackKnowledgebase, - feedback_target_id: 'messageIdTest', - feedback_group_id: 'groupIdTest', - feedback_target_bot_interaction_id: 'testInteractionId', - knowledge_base_inference_id: 'knowledgebaseInferenceIdTest', - possible_options: ['thumbs_down', 'thumbs_up'], - possible_values: [0, 1], - option: 'thumbs_down', - value: 0, - type: EventType.WebEvent, - bot_interaction_id: 'testInteractionId', - }) - }) -}) diff --git a/packages/botonic-plugin-hubtype-analytics/tests/event-knowledge-base.test.ts b/packages/botonic-plugin-hubtype-analytics/tests/event-knowledge-base.test.ts deleted file mode 100644 index 673ca742fc..0000000000 --- a/packages/botonic-plugin-hubtype-analytics/tests/event-knowledge-base.test.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { - createHtEvent, - EventAction, - EventType, - KnowledgebaseFailReason, -} from '../src' -import { getRequestData } from './helpers' - -describe('Create knowledge base events', () => { - const requestData = getRequestData() - test('The knowledge base is working correctly and the event has all the fields mens the knowledgebaseFailReason', () => { - const htEvent = createHtEvent(requestData, { - action: EventAction.Knowledgebase, - knowledgebaseInferenceId: 'knowledgebaseInferenceId', - knowledgebaseSourcesIds: ['sourceId1', 'sourceId2'], - knowledgebaseChunksIds: ['cunkId1', 'chunkId2', 'chunkId3'], - knowledgebaseMessageId: 'knowledgebaseMessageId', - userInput: 'What is Flow Builder?', - flowThreadId: 'flowThreadId', - flowId: 'flowId', - flowName: 'flowName', - flowNodeId: 'knowledgebaseNodeId', - flowNodeContentId: 'knowledgebaseNodeContentId', - }) - - expect(htEvent).toEqual({ - chat_id: 'chatIdTest', - user_locale: 'es', - user_country: 'ES', - system_locale: 'es', - format_version: 5, - action: EventAction.Knowledgebase, - knowledgebase_inference_id: 'knowledgebaseInferenceId', - knowledgebase_sources_ids: ['sourceId1', 'sourceId2'], - knowledgebase_chunks_ids: ['cunkId1', 'chunkId2', 'chunkId3'], - knowledgebase_message_id: 'knowledgebaseMessageId', - user_input: 'What is Flow Builder?', - flow_thread_id: 'flowThreadId', - flow_id: 'flowId', - flow_name: 'flowName', - flow_node_id: 'knowledgebaseNodeId', - flow_node_content_id: 'knowledgebaseNodeContentId', - bot_interaction_id: 'testInteractionId', - type: EventType.BotEvent, - }) - }) - - test('The knowledge base is not working properly and the error has a hallucination', () => { - const htEvent = createHtEvent(requestData, { - action: EventAction.Knowledgebase, - knowledgebaseInferenceId: 'knowledgebaseInferenceId', - knowledgebaseFailReason: KnowledgebaseFailReason.Hallucination, - knowledgebaseSourcesIds: ['sourceId1', 'sourceId2'], - knowledgebaseChunksIds: ['cunkId1', 'chunkId2', 'chunkId3'], - knowledgebaseMessageId: 'knowledgebaseMessageId', - userInput: 'What is Flow Builder?', - flowThreadId: 'flowThreadId', - flowId: 'flowId', - flowName: 'flowName', - flowNodeId: 'knowledgebaseNodeId', - flowNodeContentId: 'knowledgebaseNodeContentId', - }) - - expect(htEvent).toEqual({ - chat_id: 'chatIdTest', - user_locale: 'es', - user_country: 'ES', - system_locale: 'es', - format_version: 5, - action: EventAction.Knowledgebase, - knowledgebase_inference_id: 'knowledgebaseInferenceId', - knowledgebase_fail_reason: KnowledgebaseFailReason.Hallucination, - knowledgebase_sources_ids: ['sourceId1', 'sourceId2'], - knowledgebase_chunks_ids: ['cunkId1', 'chunkId2', 'chunkId3'], - knowledgebase_message_id: 'knowledgebaseMessageId', - user_input: 'What is Flow Builder?', - flow_thread_id: 'flowThreadId', - flow_id: 'flowId', - flow_name: 'flowName', - flow_node_id: 'knowledgebaseNodeId', - flow_node_content_id: 'knowledgebaseNodeContentId', - bot_interaction_id: 'testInteractionId', - type: EventType.BotEvent, - }) - }) -}) diff --git a/packages/botonic-react/src/components/index-types.ts b/packages/botonic-react/src/components/index-types.ts index a14c5952ca..e1bd56b612 100644 --- a/packages/botonic-react/src/components/index-types.ts +++ b/packages/botonic-react/src/components/index-types.ts @@ -28,8 +28,6 @@ export interface MessageProps { export interface TextProps extends MessageProps { // converts markdown syntax to HTML markdown?: boolean - feedbackEnabled?: boolean - inferenceId?: string botInteractionId?: string } diff --git a/packages/botonic-react/src/components/message/index.jsx b/packages/botonic-react/src/components/message/index.jsx index ea1ac29394..8bb4bcf0fa 100644 --- a/packages/botonic-react/src/components/message/index.jsx +++ b/packages/botonic-react/src/components/message/index.jsx @@ -38,8 +38,6 @@ export const Message = props => { style, imagestyle = props.imagestyle || props.imageStyle, isUnread = true, - feedbackEnabled, - inferenceId, botInteractionId, markdown, ...otherProps @@ -126,8 +124,6 @@ export const Message = props => { customTypeName: decomposedChildren.customTypeName, ack: ack, isUnread: isUnread === 1 || isUnread === true, - feedbackEnabled, - inferenceId, botInteractionId, } addMessage(message) @@ -276,14 +272,11 @@ export const Message = props => { {Boolean(blob) && hasBlobTick() && getBlobTick(5)} - {timestampsEnabled || feedbackEnabled ? ( + {timestampsEnabled ? ( ) : null} diff --git a/packages/botonic-react/src/components/message/message-feedback.tsx b/packages/botonic-react/src/components/message/message-feedback.tsx deleted file mode 100644 index 04bcdb7020..0000000000 --- a/packages/botonic-react/src/components/message/message-feedback.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { useContext, useEffect, useState } from 'react' - -import ThumbsDown from '../../assets/thumbs-down.svg' -import ThumbsUp from '../../assets/thumbs-up.svg' -import { resolveImage } from '../../util' -import { WebchatContext } from '../../webchat/context' -import { useTracking } from '../../webchat/tracking' -import { FeedbackButton, FeedbackMessageContainer } from './styles' - -interface ButtonsState { - positive: boolean - negative: boolean -} - -interface RatingProps { - botInteractionId?: string - inferenceId?: string - messageId: string -} - -export const MessageFeedback = ({ - botInteractionId, - inferenceId, - messageId, -}: RatingProps) => { - const { webchatState, updateMessage } = useContext(WebchatContext) - const { trackKnowledgebaseFeedback } = useTracking() - - const [className, setClassName] = useState('') - const [disabled, setDisabled] = useState({ - positive: false, - negative: false, - }) - - const updateMsgWithFeedback = (feedbackEnabled: boolean) => { - const message = webchatState.messagesJSON.find( - message => message.id === messageId - ) - const updatedMsg = { - ...message, - feedbackEnabled, - } - updateMessage(updatedMsg) - } - - useEffect(() => { - updateMsgWithFeedback(true) - }, []) - - useEffect(() => { - if (disabled.positive || disabled.negative) { - setClassName('clicked') - updateMsgWithFeedback(false) - } - }, [disabled]) - - const handleClick = async (isUseful: boolean) => { - if (isUseful) { - setDisabled({ positive: false, negative: true }) - } else { - setDisabled({ positive: true, negative: false }) - } - - await trackKnowledgebaseFeedback({ - messageId, - isUseful, - botInteractionId, - inferenceId, - }) - } - - return ( - - handleClick(true)} - > - - - handleClick(false)} - > - - - - ) -} diff --git a/packages/botonic-react/src/components/message/message-footer.tsx b/packages/botonic-react/src/components/message/message-footer.tsx index f9e97c725a..2392dc7e62 100644 --- a/packages/botonic-react/src/components/message/message-footer.tsx +++ b/packages/botonic-react/src/components/message/message-footer.tsx @@ -2,7 +2,6 @@ import { useContext } from 'react' import { SENDERS } from '../../index-types' import { WebchatContext } from '../../webchat/context' -import { MessageFeedback } from './message-feedback' import { MessageFooterContainer } from './styles' import { MessageTimestamp, resolveMessageTimestamps } from './timestamps' @@ -10,18 +9,12 @@ interface MessageFooterProps { enabletimestamps: boolean messageJSON: any sentBy: SENDERS - feedbackEnabled: boolean - inferenceId?: string - botInteractionId?: string } export const MessageFooter = ({ enabletimestamps, messageJSON, sentBy, - feedbackEnabled, - inferenceId, - botInteractionId, }: MessageFooterProps) => { const { getThemeProperty } = useContext(WebchatContext) @@ -46,13 +39,6 @@ export const MessageFooter = ({ timestamp={messageJSON.timestamp} /> ) : null} - {feedbackEnabled ? ( - - ) : null} ) } diff --git a/packages/botonic-react/src/components/system-debug-trace/debug-message.tsx b/packages/botonic-react/src/components/system-debug-trace/debug-message.tsx index 42cbad350e..c770dd90c1 100644 --- a/packages/botonic-react/src/components/system-debug-trace/debug-message.tsx +++ b/packages/botonic-react/src/components/system-debug-trace/debug-message.tsx @@ -14,7 +14,6 @@ import { getFallbackEventConfig, getHandoffSuccessEventConfig, getKeywordEventConfig, - getKnowledgeBaseEventConfig, getRedirectFlowEventConfig, getSmartIntentEventConfig, getWebviewActionTriggeredEventConfig, @@ -46,8 +45,6 @@ const getEventConfig = ( return getAiAgentEventConfig(debugEvent) case EventAction.AiAgentRouter: return getAiAgentRouterEventConfig(debugEvent) - case EventAction.Knowledgebase: - return getKnowledgeBaseEventConfig(debugEvent) case EventAction.Fallback: return getFallbackEventConfig(debugEvent) case EventAction.BotAction: diff --git a/packages/botonic-react/src/components/system-debug-trace/events/constants.ts b/packages/botonic-react/src/components/system-debug-trace/events/constants.ts index 4c3f7ef865..b3536820ed 100644 --- a/packages/botonic-react/src/components/system-debug-trace/events/constants.ts +++ b/packages/botonic-react/src/components/system-debug-trace/events/constants.ts @@ -1,6 +1,5 @@ export const LABELS = { GUARDRAIL_TRIGGERED: 'Guardrail triggered', - KNOWLEDGE_FOUND: 'Knowledge found', FAITHFUL_ANSWER: 'Faithful answer', QUERY: 'Query', SOURCES: 'Sources', @@ -16,7 +15,6 @@ export const LABELS = { QUEUE: 'Queue', AUTO_ASSIGN: 'Auto-assign', NOTE: 'Note', - KNOWLEDGE_BASE_FAIL_REASON: 'Knowledge Base Fail Reason', SEE_CHUNKS_BUTTON: 'See chunks', SEE_TOOL_DETAILS: 'Details', STATUS: 'Status', diff --git a/packages/botonic-react/src/components/system-debug-trace/events/index.ts b/packages/botonic-react/src/components/system-debug-trace/events/index.ts index e8a21ee45a..b6be133130 100644 --- a/packages/botonic-react/src/components/system-debug-trace/events/index.ts +++ b/packages/botonic-react/src/components/system-debug-trace/events/index.ts @@ -8,7 +8,6 @@ export * from './conditional-queue-status' export * from './fallback' export * from './handoff-success' export * from './keyword' -export * from './knowledge-base' export * from './knowledge-bases-types' export * from './redirect-flow' export * from './smart-intent' diff --git a/packages/botonic-react/src/components/system-debug-trace/events/knowledge-base.tsx b/packages/botonic-react/src/components/system-debug-trace/events/knowledge-base.tsx deleted file mode 100644 index 6d48a1c057..0000000000 --- a/packages/botonic-react/src/components/system-debug-trace/events/knowledge-base.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { EventAction } from '@botonic/core' -import { useContext } from 'react' - -import { WebchatContext } from '../../../webchat/context' -import { useKnowledgeBaseInfo } from '../hooks/use-knowledge-base-info' -import { CircleCheckSvg, WandSvg } from '../icons' -import { - StyledDebugDetail, - StyledDebugLabel, - StyledDebugValue, - StyledGuardrailItem, - StyledGuardrailLabel, -} from '../styles' -import type { DebugEventConfig } from '../types' -import { SourcesSection } from './components' -import { LABELS } from './constants' -import type { ChunkIdsGroupedBySourceData } from './knowledge-bases-types' - -export interface KnowledgeBaseDebugEvent { - action: EventAction.Knowledgebase - flow_id: string - flow_node_id: string - knowledgebase_inference_id: string - knowledgebase_fail_reason: string - knowledgebase_sources_ids: string[] - knowledgebase_chunks_ids: string[] - user_input: string - knowledge_base_chunks_with_sources?: ChunkIdsGroupedBySourceData[] - messageId?: string -} - -export const KnowledgeBase = (props: KnowledgeBaseDebugEvent) => { - const { previewUtils } = useContext(WebchatContext) - const { - sources, - chunks, - chunksWithSources, - getIconForSourceType, - hasKnowledge, - isFaithful, - } = useKnowledgeBaseInfo({ - sourceIds: props.knowledgebase_sources_ids, - chunkIds: props.knowledgebase_chunks_ids, - messageId: props.messageId, - existingChunksWithSources: props.knowledge_base_chunks_with_sources, - failReason: props.knowledgebase_fail_reason, - }) - - const showFailReason = !hasKnowledge || !isFaithful - - const handleSeeChunks = () => { - if (previewUtils?.onClickOpenChunks) { - previewUtils.onClickOpenChunks(chunksWithSources) - } - } - - return ( - <> - - {LABELS.QUERY} - "{props.user_input}" - - - {showFailReason ? ( - - - {LABELS.KNOWLEDGE_BASE_FAIL_REASON} - - {props.knowledgebase_fail_reason} - - ) : ( - <> - - - {hasKnowledge && ( - - - - {LABELS.KNOWLEDGE_FOUND} - - - )} - - {isFaithful && ( - - - - {LABELS.FAITHFUL_ANSWER} - - - )} - - )} - - ) -} - -export const getKnowledgeBaseEventConfig = ( - _data: KnowledgeBaseDebugEvent -): DebugEventConfig => { - const title = <>Knowledge Base triggered - - return { - action: EventAction.Knowledgebase, - title, - component: KnowledgeBase, - icon: , - collapsible: true, - } -} diff --git a/packages/botonic-react/src/components/system-debug-trace/hooks/use-knowledge-base-info.tsx b/packages/botonic-react/src/components/system-debug-trace/hooks/use-knowledge-base-info.tsx index 3ef40ba638..af8588ce22 100644 --- a/packages/botonic-react/src/components/system-debug-trace/hooks/use-knowledge-base-info.tsx +++ b/packages/botonic-react/src/components/system-debug-trace/hooks/use-knowledge-base-info.tsx @@ -1,5 +1,4 @@ -import { KnowledgebaseFailReason } from '@botonic/core' -import { useContext, useEffect, useMemo, useState } from 'react' +import { useContext, useEffect, useState } from 'react' import type { ChunkIdsGroupedBySourceData } from '../../../index-types' import { WebchatContext } from '../../../webchat/context' @@ -14,7 +13,6 @@ interface UseKnowledgeBaseInfoParams { chunkIds: string[] messageId?: string existingChunksWithSources?: ChunkIdsGroupedBySourceData[] - failReason?: string } export const useKnowledgeBaseInfo = ({ @@ -22,7 +20,6 @@ export const useKnowledgeBaseInfo = ({ chunkIds, messageId, existingChunksWithSources, - failReason, }: UseKnowledgeBaseInfoParams) => { const { updateMessage, webchatState, previewUtils } = useContext(WebchatContext) @@ -108,27 +105,6 @@ export const useKnowledgeBaseInfo = ({ } } - const { hasKnowledge, isFaithful } = useMemo(() => { - const typedFailReason = failReason as unknown as KnowledgebaseFailReason - - if (typedFailReason === KnowledgebaseFailReason.NoKnowledge) { - return { - hasKnowledge: false, - isFaithful: false, - } - } - if (typedFailReason === KnowledgebaseFailReason.Hallucination) { - return { - hasKnowledge: true, - isFaithful: false, - } - } - return { - hasKnowledge: true, - isFaithful: true, - } - }, [failReason]) - useEffect(() => { // If we already have cached data (even if empty), don't fetch again if (hasCachedData) { @@ -168,7 +144,5 @@ export const useKnowledgeBaseInfo = ({ chunksWithSources, isLoading, getIconForSourceType, - hasKnowledge, - isFaithful, } } diff --git a/packages/botonic-react/src/components/system-debug-trace/types.ts b/packages/botonic-react/src/components/system-debug-trace/types.ts index 60e093922e..84cb4cb1c3 100644 --- a/packages/botonic-react/src/components/system-debug-trace/types.ts +++ b/packages/botonic-react/src/components/system-debug-trace/types.ts @@ -11,7 +11,6 @@ import type { FallbackDebugEvent, HandoffSuccessDebugEvent, KeywordDebugEvent, - KnowledgeBaseDebugEvent, RedirectFlowDebugEvent, SmartIntentDebugEvent, WebviewActionTriggeredDebugEvent, @@ -26,7 +25,6 @@ export type DebugEvent = | KeywordDebugEvent | AiAgentDebugEvent | AiAgentRouterDebugEvent - | KnowledgeBaseDebugEvent | FallbackDebugEvent | SmartIntentDebugEvent | HandoffSuccessDebugEvent diff --git a/packages/botonic-react/src/components/text.tsx b/packages/botonic-react/src/components/text.tsx index f4450bfc54..74e14ddc69 100644 --- a/packages/botonic-react/src/components/text.tsx +++ b/packages/botonic-react/src/components/text.tsx @@ -34,8 +34,6 @@ const serialize = (textProps: TextProps) => { export const Text = (props: TextProps) => { const defaultTextProps = { markdown: props.markdown === undefined ? true : props.markdown, - feedbackEnabled: props.feedbackEnabled, - inferenceId: props.inferenceId, botInteractionId: props.botInteractionId, } diff --git a/packages/botonic-react/src/debug-system-messages.ts b/packages/botonic-react/src/debug-system-messages.ts index 24007c1f4a..8bdd046f5f 100644 --- a/packages/botonic-react/src/debug-system-messages.ts +++ b/packages/botonic-react/src/debug-system-messages.ts @@ -24,7 +24,6 @@ import type { FallbackDebugEvent, HandoffSuccessDebugEvent, KeywordDebugEvent, - KnowledgeBaseDebugEvent, RedirectFlowDebugEvent, SmartIntentDebugEvent, WebviewActionTriggeredDebugEvent, @@ -88,30 +87,6 @@ export const DEBUG_SYSTEM_MESSAGES = { payload: 'custom-action-result', } satisfies BotActionDebugEvent, - knowledgeBase: { - action: EventAction.Knowledgebase, - flow_id: 'flow-mock-001', - flow_node_id: 'node-mock-004', - knowledgebase_inference_id: 'inf-mock-001', - knowledgebase_fail_reason: '', - knowledgebase_sources_ids: ['src-mock-001'], - knowledgebase_chunks_ids: ['chunk-mock-001'], - user_input: 'How do I reset my password?', - knowledge_base_chunks_with_sources: mockChunksWithSources, - } satisfies KnowledgeBaseDebugEvent, - - knowledgeBaseFailed: { - action: EventAction.Knowledgebase, - flow_id: 'flow-mock-001', - flow_node_id: 'node-mock-004', - knowledgebase_inference_id: 'inf-mock-002', - knowledgebase_fail_reason: 'no_relevant_content', - knowledgebase_sources_ids: [], - knowledgebase_chunks_ids: [], - user_input: 'What is the meaning of life?', - knowledge_base_chunks_with_sources: [], - } satisfies KnowledgeBaseDebugEvent, - conditionalChannel: { action: EventAction.ConditionalChannel, channel: 'whatsapp', diff --git a/packages/botonic-react/src/webchat/tracking.ts b/packages/botonic-react/src/webchat/tracking.ts index 6f07906220..fc2e3c7e1d 100644 --- a/packages/botonic-react/src/webchat/tracking.ts +++ b/packages/botonic-react/src/webchat/tracking.ts @@ -1,36 +1,10 @@ -import type { - EventCustom, - EventFeedback, - EventFeedbackKnowledgebase, -} from '@botonic/core' +import type { EventCustom, EventFeedback } from '@botonic/core' import { useContext } from 'react' -import { v7 as uuidv7 } from 'uuid' import type { ActionRequest } from '../index-types' import { WebchatContext } from './context' -export enum EventAction { - FeedbackKnowledgebase = 'feedback_knowledgebase', -} -interface TrackKnowledgebaseFeedbackArgs { - messageId: string - isUseful: boolean - botInteractionId?: string - inferenceId?: string -} - -enum FeedbackOption { - ThumbsUp = 'thumbsUp', - ThumbsDown = 'thumbsDown', -} - interface UseTracking { - trackKnowledgebaseFeedback: ({ - messageId, - isUseful, - botInteractionId, - inferenceId, - }: TrackKnowledgebaseFeedbackArgs) => Promise trackCustomEvent: (event: EventCustom) => Promise trackFeedbackEvent: (event: EventFeedback) => Promise } @@ -53,34 +27,6 @@ export function useTracking(): UseTracking { return request } - const trackKnowledgebaseFeedback = async ({ - messageId, - isUseful, - botInteractionId, - inferenceId, - }: TrackKnowledgebaseFeedbackArgs) => { - if (!trackEvent) { - return - } - const request = getRequest() - - // inferenceId and botInteractionId are strings, but in local development they are undefined - const event: EventFeedbackKnowledgebase = { - action: EventAction.FeedbackKnowledgebase, - knowledgebaseInferenceId: inferenceId as string, - feedbackBotInteractionId: botInteractionId as string, - feedbackTargetId: messageId, - feedbackGroupId: uuidv7(), - possibleOptions: [FeedbackOption.ThumbsDown, FeedbackOption.ThumbsUp], - possibleValues: [0, 1], - option: isUseful ? FeedbackOption.ThumbsUp : FeedbackOption.ThumbsDown, - value: isUseful ? 1 : 0, - } - const { action, ...eventArgs } = event - - await trackEvent(request, action, eventArgs) - } - const trackCustomEvent = async (event: EventCustom) => { if (!trackEvent) { return @@ -101,5 +47,5 @@ export function useTracking(): UseTracking { await trackEvent(request, action, eventArgs) } - return { trackKnowledgebaseFeedback, trackCustomEvent, trackFeedbackEvent } + return { trackCustomEvent, trackFeedbackEvent } } diff --git a/packages/botonic-react/tests/components/system-debug-trace-events.test.jsx b/packages/botonic-react/tests/components/system-debug-trace-events.test.jsx index a67ef0ed64..d78d314e25 100644 --- a/packages/botonic-react/tests/components/system-debug-trace-events.test.jsx +++ b/packages/botonic-react/tests/components/system-debug-trace-events.test.jsx @@ -19,10 +19,6 @@ import { getHandoffSuccessEventConfig, HandoffSuccess, } from '../../src/components/system-debug-trace/events/handoff-success' -import { - getKnowledgeBaseEventConfig, - KnowledgeBase, -} from '../../src/components/system-debug-trace/events/knowledge-base' import { WebchatContext } from '../../src/webchat/context' const renderToJSON = sut => TestRenderer.create(sut).toJSON() @@ -274,125 +270,6 @@ describe('System Debug Trace - Event Components', () => { }) }) - describe('KnowledgeBase Component', () => { - test('renders without sources', async () => { - const props = { - action: EventAction.Knowledgebase, - flow_id: 'flow1', - flow_node_id: 'node1', - knowledgebase_inference_id: 'inf-1', - knowledgebase_fail_reason: '', - knowledgebase_sources_ids: [], - knowledgebase_chunks_ids: [], - user_input: 'What is your return policy?', - } - - let container - await act(async () => { - const result = render( - - - - ) - container = result.container - // eslint-disable-next-line @typescript-eslint/no-empty-function - await waitFor( - () => { - return - }, - { timeout: 100 } - ) - }) - - expect(container).toBeTruthy() - }) - - test('renders with fail reason', async () => { - const props = { - action: EventAction.Knowledgebase, - flow_id: 'flow1', - flow_node_id: 'node1', - knowledgebase_inference_id: 'inf-2', - knowledgebase_fail_reason: 'NOT_FAITHFUL', - knowledgebase_sources_ids: [], - knowledgebase_chunks_ids: [], - user_input: 'test query', - } - - let container - await act(async () => { - const result = render( - - - - ) - container = result.container - // eslint-disable-next-line @typescript-eslint/no-empty-function - await waitFor( - () => { - return - }, - { timeout: 100 } - ) - }) - - expect(container).toBeTruthy() - }) - - test('renders with sources and chunks', async () => { - const props = { - action: EventAction.Knowledgebase, - flow_id: 'flow1', - flow_node_id: 'node1', - knowledgebase_inference_id: 'inf-3', - knowledgebase_fail_reason: '', - knowledgebase_sources_ids: ['source-1', 'source-2'], - knowledgebase_chunks_ids: ['chunk-1', 'chunk-2', 'chunk-3'], - user_input: 'test query', - } - - let container - await act(async () => { - const result = render( - - - - ) - container = result.container - // eslint-disable-next-line @typescript-eslint/no-empty-function - await waitFor( - () => { - return - }, - { timeout: 100 } - ) - }) - - expect(container).toBeTruthy() - }) - - test('config has correct properties', () => { - const data = { - action: EventAction.Knowledgebase, - flow_id: 'flow1', - flow_node_id: 'node1', - knowledgebase_inference_id: 'inf-1', - knowledgebase_fail_reason: '', - knowledgebase_sources_ids: [], - knowledgebase_chunks_ids: [], - user_input: 'test', - } - - const config = getKnowledgeBaseEventConfig(data) - - expect(config.action).toBe(EventAction.Knowledgebase) - expect(config.component).toBe(KnowledgeBase) - expect(config.collapsible).toBe(true) - expect(config.icon).toBeTruthy() - expect(config.title).toBeTruthy() - }) - }) - describe('AiAgentRouter Component', () => { const baseRouterProps = { action: EventAction.AiAgentRouter, @@ -536,22 +413,6 @@ describe('System Debug Trace - Event Components', () => { expect(config.action).toBe(EventAction.HandoffSuccess) }) - test('KnowledgeBase title is correct', () => { - const data = { - action: EventAction.Knowledgebase, - flow_id: 'flow1', - flow_node_id: 'node1', - knowledgebase_inference_id: 'inf-1', - knowledgebase_fail_reason: '', - knowledgebase_sources_ids: [], - knowledgebase_chunks_ids: [], - user_input: 'test', - } - - const config = getKnowledgeBaseEventConfig(data) - expect(config.title).toBeTruthy() - }) - test('AiAgent title is correct', () => { const data = { action: EventAction.AiAgent, diff --git a/packages/botonic-react/tests/components/system-debug-trace-utils.test.jsx b/packages/botonic-react/tests/components/system-debug-trace-utils.test.jsx index 3094d02e8e..a05be8b4bd 100644 --- a/packages/botonic-react/tests/components/system-debug-trace-utils.test.jsx +++ b/packages/botonic-react/tests/components/system-debug-trace-utils.test.jsx @@ -606,77 +606,5 @@ describe('System Debug Trace - Utility Components', () => { expect(result.current.chunks).toHaveLength(0) expect(result.current.chunksWithSources).toHaveLength(0) }) - - test('calculates hasKnowledge and isFaithful correctly', () => { - const mockContext = createMockWebchatContext() - - const wrapper = ({ children }) => ( - - {children} - - ) - - const { result } = renderHook( - () => - useKnowledgeBaseInfo({ - sourceIds: ['src-1'], - chunkIds: ['chunk-1'], - existingChunksWithSources: mockChunksWithSources, - failReason: undefined, - }), - { wrapper } - ) - - expect(result.current.hasKnowledge).toBe(true) - expect(result.current.isFaithful).toBe(true) - }) - - test('handles no knowledge fail reason', () => { - const mockContext = createMockWebchatContext() - - const wrapper = ({ children }) => ( - - {children} - - ) - - const { result } = renderHook( - () => - useKnowledgeBaseInfo({ - sourceIds: [], - chunkIds: [], - existingChunksWithSources: [], - failReason: 'no_knowledge', - }), - { wrapper } - ) - - expect(result.current.hasKnowledge).toBe(false) - expect(result.current.isFaithful).toBe(false) - }) - - test('handles hallucination fail reason', () => { - const mockContext = createMockWebchatContext() - - const wrapper = ({ children }) => ( - - {children} - - ) - - const { result } = renderHook( - () => - useKnowledgeBaseInfo({ - sourceIds: ['src-1'], - chunkIds: ['chunk-1'], - existingChunksWithSources: mockChunksWithSources, - failReason: 'hallucination', - }), - { wrapper } - ) - - expect(result.current.hasKnowledge).toBe(true) - expect(result.current.isFaithful).toBe(false) - }) }) }) diff --git a/packages/botonic-react/tests/components/system-debug-trace.test.jsx b/packages/botonic-react/tests/components/system-debug-trace.test.jsx index 9b21d9f56c..389a8c8e0a 100644 --- a/packages/botonic-react/tests/components/system-debug-trace.test.jsx +++ b/packages/botonic-react/tests/components/system-debug-trace.test.jsx @@ -373,26 +373,6 @@ describe('SystemDebugTrace Component', () => { expect(config.title).toBeTruthy() }) - test('getKnowledgeBaseEventConfig returns collapsible config', () => { - const data = { - action: EventAction.Knowledgebase, - flow_id: 'flow1', - flow_node_id: 'node1', - knowledgebase_inference_id: 'inf-1', - knowledgebase_fail_reason: '', - knowledgebase_sources_ids: [], - knowledgebase_chunks_ids: [], - user_input: 'test query', - } - - const config = getKnowledgeBaseEventConfig(data) - - expect(config.action).toBe(EventAction.Knowledgebase) - expect(config.component).toBeTruthy() - expect(config.collapsible).toBe(true) - expect(config.icon).toBeTruthy() - }) - test('getAiAgentEventConfig returns collapsible config', () => { const data = { action: EventAction.AiAgent, From b503f4ca7195f33a5162c13be3c301f9f3b8fd50 Mon Sep 17 00:00:00 2001 From: Oriol Raventos Date: Tue, 28 Jul 2026 12:56:39 +0200 Subject: [PATCH 2/2] refactor: remove unused getKnowledgeBaseEventConfig import from system-debug-trace test --- .../botonic-react/tests/components/system-debug-trace.test.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/botonic-react/tests/components/system-debug-trace.test.jsx b/packages/botonic-react/tests/components/system-debug-trace.test.jsx index 389a8c8e0a..02aea354fc 100644 --- a/packages/botonic-react/tests/components/system-debug-trace.test.jsx +++ b/packages/botonic-react/tests/components/system-debug-trace.test.jsx @@ -19,7 +19,6 @@ import { getFallbackEventConfig, getHandoffSuccessEventConfig, getKeywordEventConfig, - getKnowledgeBaseEventConfig, getRedirectFlowEventConfig, getSmartIntentEventConfig, getWebviewActionTriggeredEventConfig,