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..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,
@@ -373,26 +372,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,