Skip to content

Commit 4541336

Browse files
committed
add carousel default tool
1 parent 49f28d6 commit 4541336

File tree

3 files changed

+38
-41
lines changed

3 files changed

+38
-41
lines changed

examples/react/e-commerce/App.tsx

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -93,26 +93,6 @@ export function App() {
9393
<Chat
9494
agentId="5bc03a4f-4e25-400c-9f52-a7b969d7f3da"
9595
itemComponent={ItemComponent}
96-
tools={[
97-
{
98-
type: 'tool-algolia_search_index',
99-
component: ({ message }) => {
100-
console.log(message);
101-
message.parts;
102-
// const items =
103-
// (
104-
// part.output as {
105-
// hits?: Array<{
106-
// objectID: string;
107-
// __position: number;
108-
// }>;
109-
// }
110-
// )?.hits || [];
111-
112-
return <span>Test</span>;
113-
},
114-
},
115-
]}
11696
/>
11797
<header className="header" ref={headerRef}>
11898
<p className="header-logo">

packages/instantsearch-ui-components/src/components/chat/ChatMessage.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,15 @@ export type ChatMessageActionProps = {
7070
onClick?: (message: ChatMessageBase) => void;
7171
};
7272

73+
export type ChatToolMessage = Extract<
74+
ChatMessageBase['parts'][number],
75+
{ type: `tool-${string}` }
76+
>;
77+
7378
export type Tools = Array<{
7479
type: string;
7580
component: (props: {
76-
message: ChatMessageBase['parts'][number];
81+
message: ChatToolMessage;
7782
indexUiState: object;
7883
setIndexUiState: (state: object) => void;
7984
}) => JSX.Element;
@@ -223,6 +228,9 @@ export function createChatMessageComponent({
223228
});
224229
return <span key={`${message.id}-${index}`}>{markdown}</span>;
225230
}
231+
if (part.type === 'tool-start') {
232+
part;
233+
}
226234
if (part.type.startsWith('tool-')) {
227235
const tool = tools.find((t) => t.type === part.type);
228236
if (tool) {
@@ -233,7 +241,7 @@ export function createChatMessageComponent({
233241
className="ais-ChatMessage-tool"
234242
>
235243
<ToolComponent
236-
message={part}
244+
message={part as ChatToolMessage}
237245
indexUiState={indexUiState}
238246
setIndexUiState={setIndexUiState}
239247
/>

packages/react-instantsearch/src/widgets/Chat/Chat.tsx

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import React, { createElement, Fragment } from 'react';
44
import { useChat, useInstantSearch } from 'react-instantsearch-core';
55

66
import type { Pragma, Tools } from 'instantsearch-ui-components';
7+
import { Carousel } from '../../components';
78

89
const ChatUiComponent = createChatComponent({
910
createElement: createElement as Pragma,
@@ -16,26 +17,34 @@ export type ChatProps = {
1617
tools?: Tools;
1718
};
1819

19-
export const defaultTools: Tools = [
20-
{
21-
type: 'tool-algolia_search_index',
22-
component: ({ message }) => {
23-
console.log(message);
24-
message.parts;
25-
// const items =
26-
// (
27-
// part.output as {
28-
// hits?: Array<{
29-
// objectID: string;
30-
// __position: number;
31-
// }>;
32-
// }
33-
// )?.hits || [];
20+
const createDefaultTools = (
21+
itemComponent?: (props: { item: Record<string, unknown> }) => JSX.Element
22+
): Tools => {
23+
return [
24+
{
25+
type: 'tool-algolia_search_index',
26+
component: ({ message }) => {
27+
const items =
28+
(
29+
message.output as {
30+
hits?: Array<{
31+
objectID: string;
32+
__position: number;
33+
}>;
34+
}
35+
)?.hits || [];
3436

35-
return <span>Test</span>;
37+
return (
38+
<Carousel
39+
items={items}
40+
itemComponent={itemComponent}
41+
sendEvent={() => {}}
42+
/>
43+
);
44+
},
3645
},
37-
},
38-
];
46+
];
47+
};
3948

4049
export function Chat({ agentId, tools: userTools, itemComponent }: ChatProps) {
4150
const { indexUiState, setIndexUiState } = useInstantSearch();
@@ -44,7 +53,7 @@ export function Chat({ agentId, tools: userTools, itemComponent }: ChatProps) {
4453
const [input, setInput] = React.useState('');
4554

4655
const tools = React.useMemo(() => {
47-
return [...defaultTools, ...(userTools ?? [])];
56+
return [...createDefaultTools(itemComponent), ...(userTools ?? [])];
4857
}, [userTools]);
4958

5059
const { messages, sendMessage } = useChat({

0 commit comments

Comments
 (0)