@letta-ai/letta-react 0.0.6 → 0.0.7

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.
@@ -46,6 +46,14 @@ function dedupeMessages(messages) {
46
46
  return false;
47
47
  }, []);
48
48
  }
49
+ function messageCreateToMessageUnion(messages) {
50
+ return messages.map((message, idx) => ({
51
+ messageType: message.role === 'user' ? 'user_message' : 'system_message',
52
+ content: message.content,
53
+ date: new Date(),
54
+ id: `autogenerated_${Date.now()}_${idx}`,
55
+ }));
56
+ }
49
57
  export function useAgentMessages(options) {
50
58
  const { client = {}, method = 'stream', messageOptions = {}, limit = 20, agentId, } = options;
51
59
  const localClient = useLettaClient(client);
@@ -60,26 +68,39 @@ export function useAgentMessages(options) {
60
68
  const [sendingError, setSendingError] = useState(null);
61
69
  const sendNonStreamedMessage = useCallback(function sendNonStreamedMessage(sendMessagePayload) {
62
70
  return __awaiter(this, void 0, void 0, function* () {
71
+ let originalMessageState = localMessages;
63
72
  try {
64
73
  setIsSending(true);
65
74
  setSendingError(null);
75
+ const newMessages = messageCreateToMessageUnion(sendMessagePayload.messages);
76
+ setLocalMessages((prevState) => {
77
+ originalMessageState = prevState;
78
+ return Object.assign(Object.assign({}, prevState), { messages: [...prevState.messages, ...newMessages] });
79
+ });
66
80
  const response = yield localClient.agents.messages.create(agentId, Object.assign(Object.assign({}, sendMessagePayload), messageOptions));
67
- setLocalMessages((prevState) => (Object.assign(Object.assign({}, prevState), { messages: [...response.messages, ...prevState.messages] })));
81
+ setLocalMessages((prevState) => (Object.assign(Object.assign({}, prevState), { messages: [...prevState.messages, ...response.messages] })));
68
82
  }
69
83
  catch (e) {
84
+ setLocalMessages(originalMessageState);
70
85
  setSendingError(e);
71
86
  }
72
87
  finally {
73
88
  setIsSending(false);
74
89
  }
75
90
  });
76
- }, [localClient]);
91
+ }, [localClient, localMessages]);
77
92
  const sendStreamedMessage = useCallback(function sendStreamedMessage(sendMessagePayload) {
78
93
  return __awaiter(this, void 0, void 0, function* () {
79
94
  var _a, e_1, _b, _c;
95
+ let originalMessageState = localMessages;
80
96
  try {
81
97
  setIsSending(true);
82
98
  setSendingError(null);
99
+ const newMessages = messageCreateToMessageUnion(sendMessagePayload.messages);
100
+ setLocalMessages((prevState) => {
101
+ originalMessageState = prevState;
102
+ return Object.assign(Object.assign({}, prevState), { messages: [...prevState.messages, ...newMessages] });
103
+ });
83
104
  const response = yield localClient.agents.messages.createStream(agentId, Object.assign(Object.assign(Object.assign({}, sendMessagePayload), messageOptions), { streamTokens: true }));
84
105
  try {
85
106
  for (var _d = true, response_1 = __asyncValues(response), response_1_1; response_1_1 = yield response_1.next(), _a = response_1_1.done, !_a; _d = true) {
@@ -167,13 +188,17 @@ export function useAgentMessages(options) {
167
188
  });
168
189
  }, [localClient]);
169
190
  const sendMessage = useCallback(function sendMessage(payload) {
191
+ const filteredPayload = Object.assign(Object.assign({}, payload), { messages: payload.messages.filter((e) => !!e.content) });
192
+ if (filteredPayload.messages.length === 0) {
193
+ return;
194
+ }
170
195
  if (isSending) {
171
196
  return;
172
197
  }
173
198
  if (method === 'stream') {
174
- return sendStreamedMessage(payload);
199
+ return sendStreamedMessage(filteredPayload);
175
200
  }
176
- return sendNonStreamedMessage(payload);
201
+ return sendNonStreamedMessage(filteredPayload);
177
202
  }, [method, isSending, sendStreamedMessage, sendNonStreamedMessage]);
178
203
  const getMessages = useCallback(function getMessages(before) {
179
204
  return __awaiter(this, void 0, void 0, function* () {
@@ -57,7 +57,6 @@ function App() {
57
57
  return (
58
58
  <li key={`${message.id}${message.messageType}`}>
59
59
  {message.content}
60
- {message.id}
61
60
  </li>
62
61
  );
63
62
  }
@@ -46,6 +46,14 @@ function dedupeMessages(messages) {
46
46
  return false;
47
47
  }, []);
48
48
  }
49
+ function messageCreateToMessageUnion(messages) {
50
+ return messages.map((message, idx) => ({
51
+ messageType: message.role === 'user' ? 'user_message' : 'system_message',
52
+ content: message.content,
53
+ date: new Date(),
54
+ id: `autogenerated_${Date.now()}_${idx}`,
55
+ }));
56
+ }
49
57
  export function useAgentMessages(options) {
50
58
  const { client = {}, method = 'stream', messageOptions = {}, limit = 20, agentId, } = options;
51
59
  const localClient = useLettaClient(client);
@@ -60,26 +68,39 @@ export function useAgentMessages(options) {
60
68
  const [sendingError, setSendingError] = useState(null);
61
69
  const sendNonStreamedMessage = useCallback(function sendNonStreamedMessage(sendMessagePayload) {
62
70
  return __awaiter(this, void 0, void 0, function* () {
71
+ let originalMessageState = localMessages;
63
72
  try {
64
73
  setIsSending(true);
65
74
  setSendingError(null);
75
+ const newMessages = messageCreateToMessageUnion(sendMessagePayload.messages);
76
+ setLocalMessages((prevState) => {
77
+ originalMessageState = prevState;
78
+ return Object.assign(Object.assign({}, prevState), { messages: [...prevState.messages, ...newMessages] });
79
+ });
66
80
  const response = yield localClient.agents.messages.create(agentId, Object.assign(Object.assign({}, sendMessagePayload), messageOptions));
67
- setLocalMessages((prevState) => (Object.assign(Object.assign({}, prevState), { messages: [...response.messages, ...prevState.messages] })));
81
+ setLocalMessages((prevState) => (Object.assign(Object.assign({}, prevState), { messages: [...prevState.messages, ...response.messages] })));
68
82
  }
69
83
  catch (e) {
84
+ setLocalMessages(originalMessageState);
70
85
  setSendingError(e);
71
86
  }
72
87
  finally {
73
88
  setIsSending(false);
74
89
  }
75
90
  });
76
- }, [localClient]);
91
+ }, [localClient, localMessages]);
77
92
  const sendStreamedMessage = useCallback(function sendStreamedMessage(sendMessagePayload) {
78
93
  return __awaiter(this, void 0, void 0, function* () {
79
94
  var _a, e_1, _b, _c;
95
+ let originalMessageState = localMessages;
80
96
  try {
81
97
  setIsSending(true);
82
98
  setSendingError(null);
99
+ const newMessages = messageCreateToMessageUnion(sendMessagePayload.messages);
100
+ setLocalMessages((prevState) => {
101
+ originalMessageState = prevState;
102
+ return Object.assign(Object.assign({}, prevState), { messages: [...prevState.messages, ...newMessages] });
103
+ });
83
104
  const response = yield localClient.agents.messages.createStream(agentId, Object.assign(Object.assign(Object.assign({}, sendMessagePayload), messageOptions), { streamTokens: true }));
84
105
  try {
85
106
  for (var _d = true, response_1 = __asyncValues(response), response_1_1; response_1_1 = yield response_1.next(), _a = response_1_1.done, !_a; _d = true) {
@@ -167,13 +188,17 @@ export function useAgentMessages(options) {
167
188
  });
168
189
  }, [localClient]);
169
190
  const sendMessage = useCallback(function sendMessage(payload) {
191
+ const filteredPayload = Object.assign(Object.assign({}, payload), { messages: payload.messages.filter((e) => !!e.content) });
192
+ if (filteredPayload.messages.length === 0) {
193
+ return;
194
+ }
170
195
  if (isSending) {
171
196
  return;
172
197
  }
173
198
  if (method === 'stream') {
174
- return sendStreamedMessage(payload);
199
+ return sendStreamedMessage(filteredPayload);
175
200
  }
176
- return sendNonStreamedMessage(payload);
201
+ return sendNonStreamedMessage(filteredPayload);
177
202
  }, [method, isSending, sendStreamedMessage, sendNonStreamedMessage]);
178
203
  const getMessages = useCallback(function getMessages(before) {
179
204
  return __awaiter(this, void 0, void 0, function* () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letta-ai/letta-react",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Letta's react library",
5
5
  "private": false,
6
6
  "main": "./index.js",
@@ -6,6 +6,7 @@ import { useGlobalLettaConfig } from '../useGlobalLettaConfig/useGlobalLettaConf
6
6
  import type { LocalMessagesState } from '../../types';
7
7
  import { useCachedState } from '../useCachedState/useCachedState';
8
8
  import { useLettaClient } from '../useLettaClient/useLettaClient';
9
+ import { LettaMessageUnion, MessageCreate } from '@letta-ai/letta-client/api';
9
10
 
10
11
  interface UseAgentOptions {
11
12
  client?: LettaClient.Options;
@@ -52,6 +53,17 @@ function dedupeMessages(
52
53
  }, []);
53
54
  }
54
55
 
56
+ function messageCreateToMessageUnion(
57
+ messages: MessageCreate[]
58
+ ): LettaMessageUnion[] {
59
+ return messages.map((message, idx) => ({
60
+ messageType: message.role === 'user' ? 'user_message' : 'system_message',
61
+ content: message.content,
62
+ date: new Date(),
63
+ id: `autogenerated_${Date.now()}_${idx}`,
64
+ }));
65
+ }
66
+
55
67
  interface SendMessagePayload {
56
68
  messages: LettaRequest['messages'];
57
69
  }
@@ -86,10 +98,24 @@ export function useAgentMessages(options: UseAgentOptions) {
86
98
  async function sendNonStreamedMessage(
87
99
  sendMessagePayload: SendMessagePayload
88
100
  ) {
101
+ let originalMessageState: LocalMessagesState = localMessages;
89
102
  try {
90
103
  setIsSending(true);
91
104
  setSendingError(null);
92
105
 
106
+ const newMessages = messageCreateToMessageUnion(
107
+ sendMessagePayload.messages
108
+ );
109
+
110
+ setLocalMessages((prevState) => {
111
+ originalMessageState = prevState;
112
+
113
+ return {
114
+ ...prevState,
115
+ messages: [...prevState.messages, ...newMessages],
116
+ };
117
+ });
118
+
93
119
  const response = await localClient.agents.messages.create(agentId, {
94
120
  ...sendMessagePayload,
95
121
  ...messageOptions,
@@ -97,23 +123,39 @@ export function useAgentMessages(options: UseAgentOptions) {
97
123
 
98
124
  setLocalMessages((prevState) => ({
99
125
  ...prevState,
100
- messages: [...response.messages, ...prevState.messages],
126
+ messages: [...prevState.messages, ...response.messages],
101
127
  }));
102
128
  } catch (e) {
129
+ setLocalMessages(originalMessageState);
103
130
  setSendingError(e);
104
131
  } finally {
105
132
  setIsSending(false);
106
133
  }
107
134
  },
108
- [localClient]
135
+ [localClient, localMessages]
109
136
  );
110
137
 
111
138
  const sendStreamedMessage = useCallback(
112
139
  async function sendStreamedMessage(sendMessagePayload: SendMessagePayload) {
140
+ let originalMessageState: LocalMessagesState = localMessages;
141
+
113
142
  try {
114
143
  setIsSending(true);
115
144
  setSendingError(null);
116
145
 
146
+ const newMessages = messageCreateToMessageUnion(
147
+ sendMessagePayload.messages
148
+ );
149
+
150
+ setLocalMessages((prevState) => {
151
+ originalMessageState = prevState;
152
+
153
+ return {
154
+ ...prevState,
155
+ messages: [...prevState.messages, ...newMessages],
156
+ };
157
+ });
158
+
117
159
  const response = await localClient.agents.messages.createStream(
118
160
  agentId,
119
161
  {
@@ -262,15 +304,24 @@ export function useAgentMessages(options: UseAgentOptions) {
262
304
 
263
305
  const sendMessage = useCallback(
264
306
  function sendMessage(payload: SendMessagePayload) {
307
+ const filteredPayload = {
308
+ ...payload,
309
+ messages: payload.messages.filter((e) => !!e.content),
310
+ };
311
+
312
+ if (filteredPayload.messages.length === 0) {
313
+ return;
314
+ }
315
+
265
316
  if (isSending) {
266
317
  return;
267
318
  }
268
319
 
269
320
  if (method === 'stream') {
270
- return sendStreamedMessage(payload);
321
+ return sendStreamedMessage(filteredPayload);
271
322
  }
272
323
 
273
- return sendNonStreamedMessage(payload);
324
+ return sendNonStreamedMessage(filteredPayload);
274
325
  },
275
326
  [method, isSending, sendStreamedMessage, sendNonStreamedMessage]
276
327
  );