@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: [...
|
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(
|
199
|
+
return sendStreamedMessage(filteredPayload);
|
175
200
|
}
|
176
|
-
return sendNonStreamedMessage(
|
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* () {
|
@@ -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: [...
|
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(
|
199
|
+
return sendStreamedMessage(filteredPayload);
|
175
200
|
}
|
176
|
-
return sendNonStreamedMessage(
|
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
@@ -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: [...
|
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(
|
321
|
+
return sendStreamedMessage(filteredPayload);
|
271
322
|
}
|
272
323
|
|
273
|
-
return sendNonStreamedMessage(
|
324
|
+
return sendNonStreamedMessage(filteredPayload);
|
274
325
|
},
|
275
326
|
[method, isSending, sendStreamedMessage, sendNonStreamedMessage]
|
276
327
|
);
|