@chatbotkit/react 1.7.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +198 -9
  2. package/dist/cjs/actions/complete.cjs +90 -24
  3. package/dist/cjs/actions/complete.d.ts +21 -7
  4. package/dist/cjs/components/AutoScroller.cjs +1 -0
  5. package/dist/cjs/components/AutoTextarea.cjs +1 -0
  6. package/dist/cjs/components/ChatInput.cjs +1 -0
  7. package/dist/cjs/components/ChatMessage.cjs +1 -0
  8. package/dist/cjs/components/ChatMessages.cjs +1 -0
  9. package/dist/cjs/components/ConversationManager.cjs +7 -21
  10. package/dist/cjs/hooks/useConversationManager.cjs +88 -148
  11. package/dist/cjs/hooks/useConversationManager.d.ts +16 -54
  12. package/dist/cjs/hooks/useConversationManagerRemote.cjs +84 -0
  13. package/dist/cjs/hooks/useConversationManagerRemote.d.ts +20 -0
  14. package/dist/cjs/hooks/useConversationManagerState.cjs +33 -0
  15. package/dist/cjs/hooks/useConversationManagerState.d.ts +10 -0
  16. package/dist/cjs/hooks/useConversationManagerStateReducer.cjs +113 -0
  17. package/dist/cjs/hooks/useConversationManagerStateReducer.d.ts +42 -0
  18. package/dist/cjs/utils/it.cjs +9 -0
  19. package/dist/cjs/utils/it.d.ts +1 -0
  20. package/dist/esm/actions/complete.d.ts +21 -7
  21. package/dist/esm/actions/complete.js +86 -20
  22. package/dist/esm/components/AutoScroller.js +1 -0
  23. package/dist/esm/components/AutoTextarea.js +1 -0
  24. package/dist/esm/components/ChatInput.js +1 -0
  25. package/dist/esm/components/ChatMessage.js +1 -0
  26. package/dist/esm/components/ChatMessages.js +1 -0
  27. package/dist/esm/components/ConversationManager.js +7 -21
  28. package/dist/esm/hooks/useConversationManager.d.ts +16 -54
  29. package/dist/esm/hooks/useConversationManager.js +88 -148
  30. package/dist/esm/hooks/useConversationManagerRemote.d.ts +20 -0
  31. package/dist/esm/hooks/useConversationManagerRemote.js +79 -0
  32. package/dist/esm/hooks/useConversationManagerState.d.ts +10 -0
  33. package/dist/esm/hooks/useConversationManagerState.js +28 -0
  34. package/dist/esm/hooks/useConversationManagerStateReducer.d.ts +42 -0
  35. package/dist/esm/hooks/useConversationManagerStateReducer.js +106 -0
  36. package/dist/esm/utils/it.d.ts +1 -0
  37. package/dist/esm/utils/it.js +5 -0
  38. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  39. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  40. package/package.json +82 -2
@@ -1,191 +1,131 @@
1
+ 'use client';
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.useConversationManager = void 0;
5
+ const tslib_1 = require("tslib");
4
6
  const react_1 = require("react");
5
- const object_js_1 = require("../utils/object.cjs");
6
- const stream_js_1 = require("../utils/stream.cjs");
7
- const string_js_1 = require("../utils/string.cjs");
8
- const sdk_1 = require("@chatbotkit/sdk");
9
- function useConversationManager(options) {
10
- const { client: _client, endpoint, token: _token, conversationId: _conversationId, botId: _botId, backstory: _backstory, model: _model, datasetId: _datasetId, skillsetId: _skillsetId, ...rest } = options;
11
- const [token, setToken] = (0, react_1.useState)(_token);
12
- const [conversationId, setConversationId] = (0, react_1.useState)(_conversationId);
13
- const [botId, setBotId] = (0, react_1.useState)(_botId);
14
- const [backstory, setBackstory] = (0, react_1.useState)(_backstory);
15
- const [model, setModel] = (0, react_1.useState)(_model);
16
- const [datasetId, setDatasetId] = (0, react_1.useState)(_datasetId);
17
- const [skillsetId, setSkillsetId] = (0, react_1.useState)(_skillsetId);
18
- const client = (0, react_1.useMemo)(() => {
19
- var _a, _b;
20
- if (typeof endpoint === 'function') {
21
- return {
22
- complete(conversationId, options) {
23
- return {
24
- async *stream() {
25
- yield* (0, stream_js_1.consume)(endpoint(conversationId, options));
26
- },
27
- };
28
- },
29
- };
30
- }
31
- const options = { ...rest, secret: token || '' };
32
- let thisClient = _client || new sdk_1.ConversationClient(options);
33
- const extension = {};
34
- if (typeof endpoint === 'string') {
35
- extension.url = new URL(((_b = (_a = globalThis.window) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.origin) || 'about:blank');
36
- extension.endpoints = {
37
- '/api/v1/conversation/complete': endpoint,
38
- };
39
- }
40
- if (token) {
41
- extension.secret = token;
42
- }
43
- if (Object.keys(extension).length === 0) {
44
- return thisClient;
45
- }
46
- else {
47
- return (0, object_js_1.cloneAndExtend)(thisClient, extension);
48
- }
49
- }, [_client, endpoint, token]);
7
+ const useConversationManagerRemote_js_1 = tslib_1.__importDefault(require("./useConversationManagerRemote.cjs"));
8
+ const useConversationManagerState_js_1 = require("./useConversationManagerState.cjs");
9
+ function useConversationManager({ ...conversationManagerRemoteOptions }) {
10
+ const remote = (0, useConversationManagerRemote_js_1.default)(conversationManagerRemoteOptions);
11
+ const [{ thinking, typing, message, messages, }, { setThinking, setTyping, appendText, appendMessage, },] = (0, useConversationManagerState_js_1.useConversationManagerState)();
50
12
  const [text, setText] = (0, react_1.useState)((''));
51
- const [messages, setMessages] = (0, react_1.useState)(([]));
52
- const [thinking, setThinking] = (0, react_1.useState)(false);
53
- const [typing, setTyping] = (0, react_1.useState)(false);
54
13
  const [error, setError] = (0, react_1.useState)((null));
55
14
  async function stream(newMessages) {
56
- setThinking(true);
57
- let it;
58
- try {
59
- if (conversationId) {
60
- it = client.complete(conversationId, { text });
61
- }
62
- else {
63
- it = client.complete(null, {
64
- backstory: backstory,
65
- model: model,
66
- datasetId: datasetId,
67
- skillsetId: skillsetId,
68
- messages: newMessages
69
- .slice(-100)
70
- .map(({ type, text, meta }) => ({ type, text, meta })),
71
- });
72
- }
73
- }
74
- catch (e) {
75
- setThinking(false);
76
- setError(e);
77
- return;
78
- }
79
- const botMessage = {
80
- id: (0, string_js_1.getRandomId)('message-'),
81
- type: 'bot',
82
- text: '',
83
- };
84
- let alreadyStreaming = false;
15
+ const allMessages = [
16
+ ...messages.map(({ type, text, meta }) => {
17
+ return {
18
+ type,
19
+ text,
20
+ meta,
21
+ };
22
+ }),
23
+ ...((newMessages === null || newMessages === void 0 ? void 0 : newMessages.map(({ type, text, meta }) => {
24
+ return {
25
+ type,
26
+ text,
27
+ meta,
28
+ };
29
+ })) || []),
30
+ ].slice(-100);
85
31
  try {
86
- for await (const event of it.stream()) {
87
- switch (event.type) {
32
+ setThinking(true);
33
+ setError(null);
34
+ for await (const item of remote(allMessages)) {
35
+ switch (item.type) {
88
36
  case 'token': {
89
- if (!alreadyStreaming) {
90
- alreadyStreaming = true;
91
- newMessages = [...newMessages, botMessage];
92
- setMessages(newMessages);
93
- setThinking(false);
94
- setTyping(true);
95
- }
96
- botMessage.text += event.data.token;
97
- setMessages([...newMessages]);
37
+ appendText(item.data.token);
98
38
  break;
99
39
  }
100
40
  case 'message': {
101
- const message = event.data;
102
- if (botMessage.text !== message.text ||
103
- message.type === 'activity' ||
104
- typeof message.children !== 'undefined') {
105
- const newMessage = {
106
- id: (0, string_js_1.getRandomId)('message-'),
107
- ...event.data,
108
- };
109
- newMessages = [...newMessages, newMessage];
110
- setMessages([...newMessages]);
111
- }
41
+ appendMessage(item.data);
112
42
  break;
113
43
  }
114
- case 'result': {
115
- setThinking(false);
116
- setTyping(false);
117
- }
118
44
  }
119
45
  }
120
46
  }
121
47
  catch (e) {
122
48
  setError(e);
49
+ if (typeof process !== 'undefined' &&
50
+ process.env.NODE_ENV === 'development') {
51
+ console.error(e);
52
+ }
123
53
  }
124
54
  finally {
55
+ setThinking(false);
125
56
  setTyping(false);
126
57
  }
127
58
  }
128
- async function submit() {
129
- if (!text) {
130
- return;
59
+ async function submit(thisText) {
60
+ if (thinking || typing) {
61
+ return false;
62
+ }
63
+ if (!thisText) {
64
+ if (!text) {
65
+ return false;
66
+ }
67
+ thisText = text;
68
+ setText('');
131
69
  }
132
- setText('');
133
70
  const userMessage = {
134
- id: (0, string_js_1.getRandomId)('message-'),
135
71
  type: 'user',
136
- text: text,
72
+ text: thisText,
137
73
  };
138
- let newMessages = messages.slice(0);
139
- newMessages = [...newMessages, userMessage];
140
- setMessages([...newMessages]);
141
- await stream(newMessages);
74
+ appendMessage(userMessage);
75
+ await stream([userMessage]);
76
+ return true;
142
77
  }
143
- async function trigger(name, ...args) {
144
- const newMessages = [
145
- ...messages,
146
- ({
147
- type: 'activity',
148
- text: '',
149
- meta: {
150
- activity: {
151
- type: 'trigger',
152
- function: {
153
- name: name,
154
- arguments: args,
155
- },
78
+ async function trigger(name) {
79
+ if (thinking || typing) {
80
+ return false;
81
+ }
82
+ const activityMessage = {
83
+ type: 'activity',
84
+ text: '',
85
+ meta: {
86
+ activity: {
87
+ type: 'trigger',
88
+ function: {
89
+ name: name,
156
90
  },
157
91
  },
158
- }),
159
- ];
160
- await stream(newMessages);
92
+ },
93
+ };
94
+ await stream([activityMessage]);
95
+ return true;
96
+ }
97
+ async function request(name, args) {
98
+ if (thinking || typing) {
99
+ return false;
100
+ }
101
+ const activityMessage = {
102
+ type: 'activity',
103
+ text: '',
104
+ meta: {
105
+ activity: {
106
+ type: 'request',
107
+ function: {
108
+ name: name,
109
+ arguments: args,
110
+ },
111
+ },
112
+ },
113
+ };
114
+ await stream([activityMessage]);
115
+ return true;
161
116
  }
162
117
  return {
163
- token,
164
- setToken,
165
- conversationId,
166
- setConversationId,
167
- botId,
168
- setBotId,
169
- backstory,
170
- setBackstory,
171
- model,
172
- setModel,
173
- datasetId,
174
- setDatasetId,
175
- skillsetId,
176
- setSkillsetId,
177
- text,
178
- setText,
118
+ message,
179
119
  messages,
180
- setMessages,
181
120
  thinking,
182
- setThinking,
183
121
  typing,
184
- setTyping,
122
+ text,
123
+ setText,
185
124
  error,
186
125
  setError,
187
126
  submit,
188
127
  trigger,
128
+ request,
189
129
  };
190
130
  }
191
131
  exports.useConversationManager = useConversationManager;
@@ -1,63 +1,25 @@
1
- export function useConversationManager(options: UseConversationManagerOptions): UseConversationManagerResult;
1
+ export function useConversationManager({ ...conversationManagerRemoteOptions }: UseConversationManagerOptions): UseConversationManagerResult;
2
2
  export default useConversationManager;
3
- export type ModelConfig = {
4
- maxTokens?: number;
5
- temperature?: number;
6
- frequencyPenalty?: number;
7
- presencePenalty?: number;
8
- seed?: number;
9
- interactionMaxMessages?: number;
10
- region?: 'us' | 'eu';
3
+ export type Message = any;
4
+ export type SimpleMessage = Message & {
5
+ id: string;
11
6
  };
12
- export type Model = string | {
13
- name: string;
14
- config?: ModelConfig;
15
- };
16
- export type Message = {
17
- id?: string;
18
- type: 'bot' | 'user' | 'context' | 'instruction' | 'backstory' | 'activity';
19
- text: string;
20
- meta?: Record<string, any>;
21
- };
22
- export type EndpointURL = string;
23
- export type EndpointFunction = (conversationId: any, request: any) => AsyncGenerator<any>;
24
- export type UseConversationManagerOptions = {
25
- [key: string]: any;
26
- client?: ConversationClient;
27
- endpoint?: EndpointURL | EndpointFunction;
28
- token?: string;
29
- conversationId?: string;
30
- backstory?: string;
31
- Model?: string;
32
- datasetId?: string;
33
- skillsetId?: string;
7
+ export type ComplexMessage = Message & {
8
+ id: string;
9
+ children?: import('react').ReactNode;
34
10
  };
11
+ export type UseConversationManagerRemoteOptions = import('./useConversationManagerRemote.cjs').UseConversationManagerRemoteOptions;
12
+ export type UseConversationManagerOptions = UseConversationManagerRemoteOptions & {};
35
13
  export type UseConversationManagerResult = {
36
- token?: string;
37
- setToken: (token: string) => void;
38
- conversationId?: string;
39
- setConversationId: (conversationId: string) => void;
40
- botId?: string;
41
- setBotId: (botId: string) => void;
42
- backstory?: string;
43
- setBackstory: (backstory: string) => void;
44
- model?: Model;
45
- setModel: (model: Model) => void;
46
- datasetId?: string;
47
- setDatasetId: (datasetId: string) => void;
48
- skillsetId?: string;
49
- setSkillsetId: (skillsetId: string) => void;
50
- text: string;
51
- setText: (text: string) => void;
52
- messages: Message[];
53
- setMessages: (messages: Message[]) => void;
14
+ message: SimpleMessage | null;
15
+ messages: ComplexMessage[];
54
16
  thinking: boolean;
55
- setThinking: (thinking: boolean) => void;
56
17
  typing: boolean;
57
- setTyping: (typing: boolean) => void;
18
+ text: string;
19
+ setText: (text: string) => void;
58
20
  error: any;
59
21
  setError: (error: any) => void;
60
- submit: () => void;
61
- trigger: (name: string, ...args: any) => void;
22
+ submit: () => Promise<boolean>;
23
+ trigger: (name: string) => Promise<boolean>;
24
+ request: (name: string, args: any) => Promise<boolean>;
62
25
  };
63
- import { ConversationClient } from '@chatbotkit/sdk';
@@ -0,0 +1,84 @@
1
+ 'use any';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useConversationManagerRemote = void 0;
5
+ const react_1 = require("react");
6
+ const object_js_1 = require("../utils/object.cjs");
7
+ const stream_js_1 = require("../utils/stream.cjs");
8
+ const sdk_1 = require("@chatbotkit/sdk");
9
+ function useConversationManagerRemote({ client: _client, endpoint, conversationId, token, backstory, model, datasetId, skillsetId, privacy, moderation, ...rest }) {
10
+ const client = (0, react_1.useMemo)(() => {
11
+ var _a, _b;
12
+ if (typeof endpoint === 'function') {
13
+ return {
14
+ complete(conversationId, options) {
15
+ return {
16
+ async *stream() {
17
+ yield* (0, stream_js_1.consume)(endpoint(options));
18
+ },
19
+ };
20
+ },
21
+ };
22
+ }
23
+ const options = { ...rest, secret: token || '' };
24
+ let thisClient = _client || new sdk_1.ConversationClient(options);
25
+ const extension = {};
26
+ if (typeof endpoint === 'string') {
27
+ extension.url = new URL(((_b = (_a = globalThis.window) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.origin) || 'about:blank');
28
+ extension.endpoints = {
29
+ '/api/v1/conversation/complete': endpoint,
30
+ };
31
+ }
32
+ if (token) {
33
+ extension.secret = token;
34
+ }
35
+ if (Object.keys(extension).length === 0) {
36
+ return thisClient;
37
+ }
38
+ else {
39
+ return (0, object_js_1.cloneAndExtend)(thisClient, extension);
40
+ }
41
+ }, [_client, endpoint, token]);
42
+ const remote = (0, react_1.useMemo)(() => {
43
+ if (conversationId) {
44
+ return (async function* (messages) {
45
+ const lastUserMessage = [...messages]
46
+ .reverse()
47
+ .find((message) => message.type === 'user');
48
+ if (!lastUserMessage) {
49
+ throw new Error('No user message found');
50
+ }
51
+ yield* client
52
+ .complete(conversationId, { text: lastUserMessage.text })
53
+ .stream();
54
+ });
55
+ }
56
+ else {
57
+ return (async function* (messages) {
58
+ yield* client
59
+ .complete(null, {
60
+ backstory: backstory,
61
+ model: model,
62
+ datasetId: datasetId,
63
+ skillsetId: skillsetId,
64
+ privacy: privacy,
65
+ moderation: moderation,
66
+ messages: messages,
67
+ })
68
+ .stream();
69
+ });
70
+ }
71
+ }, [
72
+ client,
73
+ conversationId,
74
+ backstory,
75
+ model,
76
+ datasetId,
77
+ skillsetId,
78
+ privacy,
79
+ moderation,
80
+ ]);
81
+ return remote;
82
+ }
83
+ exports.useConversationManagerRemote = useConversationManagerRemote;
84
+ exports.default = useConversationManagerRemote;
@@ -0,0 +1,20 @@
1
+ export function useConversationManagerRemote({ client: _client, endpoint, conversationId, token, backstory, model, datasetId, skillsetId, privacy, moderation, ...rest }: UseConversationManagerRemoteOptions): UseConversationManagerRemoteResult;
2
+ export default useConversationManagerRemote;
3
+ export type Message = any;
4
+ export type Model = any;
5
+ export type EndpointURL = string;
6
+ export type EndpointFunction = (options: any) => AsyncGenerator<any>;
7
+ export type UseConversationManagerRemoteOptions = {
8
+ client?: ConversationClient;
9
+ endpoint?: EndpointURL | EndpointFunction;
10
+ conversationId?: string;
11
+ token?: string;
12
+ backstory?: string;
13
+ model?: Model;
14
+ datasetId?: string;
15
+ skillsetId?: string;
16
+ privacy?: boolean;
17
+ moderation?: boolean;
18
+ };
19
+ export type UseConversationManagerRemoteResult = (messages: Message[]) => AsyncGenerator<any, void, any>;
20
+ import { ConversationClient } from '@chatbotkit/sdk';
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useConversationManagerState = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const react_1 = require("react");
7
+ const useConversationManagerStateReducer_js_1 = tslib_1.__importDefault(require("./useConversationManagerStateReducer.cjs"));
8
+ function useConversationManagerState(state) {
9
+ const [_, dispatch] = (0, useConversationManagerStateReducer_js_1.default)(state);
10
+ const setThinking = (0, react_1.useCallback)((thinking) => {
11
+ dispatch({ type: 'setThinking', data: { thinking } });
12
+ }, [dispatch]);
13
+ const setTyping = (0, react_1.useCallback)((typing) => {
14
+ dispatch({ type: 'setTyping', data: { typing } });
15
+ }, [dispatch]);
16
+ const appendText = (0, react_1.useCallback)((text) => {
17
+ dispatch({ type: 'appendText', data: { text } });
18
+ }, [dispatch]);
19
+ const appendMessage = (0, react_1.useCallback)((message) => {
20
+ dispatch({ type: 'appendMessage', data: { message } });
21
+ }, [dispatch]);
22
+ return [
23
+ _,
24
+ {
25
+ setThinking,
26
+ setTyping,
27
+ appendText,
28
+ appendMessage,
29
+ },
30
+ ];
31
+ }
32
+ exports.useConversationManagerState = useConversationManagerState;
33
+ exports.default = useConversationManagerState;
@@ -0,0 +1,10 @@
1
+ export function useConversationManagerState(state?: Partial<State>): [State, StateFunctions];
2
+ export default useConversationManagerState;
3
+ export type Message = any;
4
+ export type State = import('./useConversationManagerStateReducer.cjs').State;
5
+ export type StateFunctions = {
6
+ setThinking: (thinking: boolean) => void;
7
+ setTyping: (typing: boolean) => void;
8
+ appendText: (text: string) => void;
9
+ appendMessage: (message: any) => void;
10
+ };
@@ -0,0 +1,113 @@
1
+ 'use client';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useConversationManagerStateReducer = exports.conversationManagerStateInitial = exports.conversationManagerStateReducer = void 0;
5
+ const react_1 = require("react");
6
+ const string_js_1 = require("../utils/string.cjs");
7
+ function conversationManagerStateReducer(state, action) {
8
+ var _a;
9
+ switch (action.type) {
10
+ case 'setThinking': {
11
+ const { thinking } = action.data;
12
+ const extra = {};
13
+ if (thinking) {
14
+ extra.typing = false;
15
+ extra.message = null;
16
+ }
17
+ return {
18
+ ...state,
19
+ ...extra,
20
+ thinking,
21
+ };
22
+ }
23
+ case 'setTyping': {
24
+ const { typing } = action.data;
25
+ const extra = {};
26
+ if (typing) {
27
+ extra.thinking = false;
28
+ extra.message = null;
29
+ }
30
+ return {
31
+ ...state,
32
+ ...extra,
33
+ typing,
34
+ };
35
+ }
36
+ case 'appendText': {
37
+ const { text } = action.data;
38
+ const extra = {
39
+ thinking: false,
40
+ typing: true,
41
+ };
42
+ const message = state.message
43
+ ? ({ ...state.message })
44
+ : ({
45
+ id: (0, string_js_1.getRandomId)('tmp-'),
46
+ type: 'bot',
47
+ text: '',
48
+ });
49
+ message.text += text;
50
+ return {
51
+ ...state,
52
+ ...extra,
53
+ message,
54
+ };
55
+ }
56
+ case 'appendMessage': {
57
+ const { message } = action.data;
58
+ const extra = {};
59
+ if (message.type === 'bot') {
60
+ if (message.text === ((_a = state.message) === null || _a === void 0 ? void 0 : _a.text)) {
61
+ extra.typing = false;
62
+ extra.message = null;
63
+ }
64
+ }
65
+ const messages = state.messages.slice(0);
66
+ if (message.id) {
67
+ const index = messages.findIndex((m) => m.id === message.id);
68
+ if (index !== -1) {
69
+ messages[index] = {
70
+ ...messages[index],
71
+ ...message,
72
+ };
73
+ }
74
+ else {
75
+ messages.push({
76
+ ...message,
77
+ id: message.id || (0, string_js_1.getRandomId)('tmp-'),
78
+ });
79
+ }
80
+ }
81
+ else {
82
+ messages.push({
83
+ ...message,
84
+ id: (0, string_js_1.getRandomId)('tmp-'),
85
+ });
86
+ }
87
+ return {
88
+ ...state,
89
+ ...extra,
90
+ messages,
91
+ };
92
+ }
93
+ default: {
94
+ throw new Error(`Unhandled action`);
95
+ }
96
+ }
97
+ }
98
+ exports.conversationManagerStateReducer = conversationManagerStateReducer;
99
+ function conversationManagerStateInitial(state) {
100
+ return {
101
+ message: null,
102
+ messages: [],
103
+ thinking: false,
104
+ typing: false,
105
+ ...state,
106
+ };
107
+ }
108
+ exports.conversationManagerStateInitial = conversationManagerStateInitial;
109
+ function useConversationManagerStateReducer(state) {
110
+ return (0, react_1.useReducer)(conversationManagerStateReducer, state, conversationManagerStateInitial);
111
+ }
112
+ exports.useConversationManagerStateReducer = useConversationManagerStateReducer;
113
+ exports.default = useConversationManagerStateReducer;
@@ -0,0 +1,42 @@
1
+ export function conversationManagerStateReducer(state: State, action: Action): State;
2
+ export function conversationManagerStateInitial(state?: Partial<State>): State;
3
+ export function useConversationManagerStateReducer(state?: Partial<State>): [State, import('react').Dispatch<Action>];
4
+ export default useConversationManagerStateReducer;
5
+ export type Message = any;
6
+ export type MessageWithId = {
7
+ id: string;
8
+ } & Message;
9
+ export type MessageWithOptionalId = {
10
+ id?: string;
11
+ } & Message;
12
+ export type State = {
13
+ thinking: boolean;
14
+ typing: boolean;
15
+ message: MessageWithId | null;
16
+ messages: MessageWithId[];
17
+ };
18
+ export type SetThinkingAction = {
19
+ type: 'setThinking';
20
+ data: {
21
+ thinking: boolean;
22
+ };
23
+ };
24
+ export type SetTypingAction = {
25
+ type: 'setTyping';
26
+ data: {
27
+ typing: boolean;
28
+ };
29
+ };
30
+ export type AppendTextAction = {
31
+ type: 'appendText';
32
+ data: {
33
+ text: string;
34
+ };
35
+ };
36
+ export type AppendMessageAction = {
37
+ type: 'appendMessage';
38
+ data: {
39
+ message: MessageWithOptionalId;
40
+ };
41
+ };
42
+ export type Action = SetThinkingAction | SetTypingAction | AppendTextAction | AppendMessageAction;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isAsyncGenerator = void 0;
4
+ function isAsyncGenerator(value) {
5
+ return (typeof value === 'object' &&
6
+ value !== null &&
7
+ typeof value[Symbol.asyncIterator] === 'function');
8
+ }
9
+ exports.isAsyncGenerator = isAsyncGenerator;
@@ -0,0 +1 @@
1
+ export function isAsyncGenerator(value: any): boolean;