diff --git a/src/Views/ConversationView.tsx b/src/Views/ConversationView.tsx index 2fce3be..3762f17 100644 --- a/src/Views/ConversationView.tsx +++ b/src/Views/ConversationView.tsx @@ -7,6 +7,8 @@ import { Waveform } from '@/components/Waveform'; import { JSONErrorMessage } from '@humeai/voice'; import type { AssistantTranscriptMessage, + ToolCall, + ToolResponse, UserTranscriptMessage, } from '@humeai/voice-react'; import { useVoice } from '@humeai/voice-react'; @@ -23,7 +25,7 @@ export const ConversationView: FC = ({ onDisconnect, onReconnect, }) => { - const { lastVoiceMessage, messages, toolStatusStore, status } = useVoice(); + const { lastVoiceMessage, messages, status } = useVoice(); const filteredMessages = useMemo(() => { return messages @@ -33,11 +35,15 @@ export const ConversationView: FC = ({ ): message is | UserTranscriptMessage | AssistantTranscriptMessage - | JSONErrorMessage => { + | JSONErrorMessage + | ToolCall + | ToolResponse => { return ( message.type === 'assistant_message' || message.type === 'user_message' || - message.type === 'error' + message.type === 'error' || + message.type === 'tool_call' || + message.type === 'tool_response' ); }, ) @@ -49,12 +55,6 @@ export const ConversationView: FC = ({ }); }, [messages]); - const pendingTools = useMemo(() => { - return Object.keys(toolStatusStore).filter((toolId) => { - return !toolStatusStore[toolId].resolved; - }); - }, [toolStatusStore]); - return ( <> @@ -72,7 +72,6 @@ export const ConversationView: FC = ({ {filteredMessages.length > 0 ? ( 0} status={status} onReconnect={onReconnect} /> diff --git a/src/components/Messages/_.stories.tsx b/src/components/Messages/_.stories.tsx index 90c04a6..1ff118c 100644 --- a/src/components/Messages/_.stories.tsx +++ b/src/components/Messages/_.stories.tsx @@ -71,7 +71,6 @@ const Template: StoryFn = () => {
= () => { export const Default = Template.bind({}); Default.args = { messages: [], - hasPendingTools: false, status: { value: 'connected' }, onReconnect: () => {}, } satisfies MessagesProps; diff --git a/src/components/Messages/index.tsx b/src/components/Messages/index.tsx index 407e686..ae56e1a 100644 --- a/src/components/Messages/index.tsx +++ b/src/components/Messages/index.tsx @@ -1,30 +1,32 @@ import { AgentMessage } from '@/components/AgentMessage'; import { ErrorMessage } from '@/components/ErrorMessage'; import { SearchInProgress } from '@/components/SearchInProgress'; +import { SearchSucceeded } from '@/components/SearchSucceeded'; import { UserMessage } from '@/components/UserMessage'; import { cn } from '@/utils'; -import { JSONErrorMessage } from '@humeai/voice'; +import { JSONErrorMessage, ToolCall, ToolResponse } from '@humeai/voice'; import { type AssistantTranscriptMessage, type UserTranscriptMessage, useVoice, } from '@humeai/voice-react'; import type { ElementRef, FC } from 'react'; -import { Fragment, useEffect, useRef } from 'react'; -import { match } from 'ts-pattern'; +import { useEffect, useRef } from 'react'; export type MessagesProps = { messages: Array< - UserTranscriptMessage | AssistantTranscriptMessage | JSONErrorMessage + | UserTranscriptMessage + | AssistantTranscriptMessage + | JSONErrorMessage + | ToolCall + | ToolResponse >; - hasPendingTools: boolean; status: ReturnType['status']; onReconnect: () => void; }; export const Messages: FC = ({ messages, - hasPendingTools, status, onReconnect, }) => { @@ -74,35 +76,51 @@ export const Messages: FC = ({ ref={messagesWrapper} > {messages.map((message) => { - return ( - - {match(message.type) - .with('user_message', () => { - let messageContent = - typeof message.message !== 'string' - ? message.message.content - : ''; - return ; - }) - .with('assistant_message', () => { - let messageContent = - typeof message.message !== 'string' - ? message.message.content - : ''; - return ; - }) - .with('error', () => { - let messageContent = - typeof message.message === 'string' - ? message.message - : 'An unexpected error occurred.'; - return ; - }) - .exhaustive()} - - ); + if (message.type === 'user_message') { + return ( + + ); + } + + if (message.type === 'assistant_message') { + return ( + + ); + } + + if (message.type === 'error') { + return ( + + ); + } + + if (message.type === 'tool_call') { + return ( + + ); + } + + if (message.type === 'tool_response') { + return ( + + ); + } })} - {hasPendingTools ? : null} {status.value === 'error' && (