@letta-ai/letta-react 0.0.5 → 0.0.6

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.
@@ -35,6 +35,17 @@ function extendContent(content, nextContent) {
35
35
  }
36
36
  }
37
37
  }
38
+ function dedupeMessages(messages) {
39
+ const messageIndex = new Set(messages.map((message) => `${message.id}${message.messageType}`));
40
+ return messages.filter((message) => {
41
+ // if we have seen this message before, return false
42
+ if (messageIndex.has(`${message.id}${message.messageType}`)) {
43
+ messageIndex.delete(`${message.id}${message.messageType}`);
44
+ return true;
45
+ }
46
+ return false;
47
+ }, []);
48
+ }
38
49
  export function useAgentMessages(options) {
39
50
  const { client = {}, method = 'stream', messageOptions = {}, limit = 20, agentId, } = options;
40
51
  const localClient = useLettaClient(client);
@@ -175,7 +186,7 @@ export function useAgentMessages(options) {
175
186
  const messages = yield localClient.agents.messages.list(agentId, Object.assign({ before, limit: limit + 1 }, messageOptions));
176
187
  const messagesToAdd = messages.slice(1, messages.length);
177
188
  const nextCursor = messages.length > limit ? messages[0] : undefined;
178
- setLocalMessages((prevState) => (Object.assign(Object.assign({}, prevState), { messages: [...messagesToAdd, ...prevState.messages], nextCursor: nextCursor === null || nextCursor === void 0 ? void 0 : nextCursor.id })));
189
+ setLocalMessages((prevState) => (Object.assign(Object.assign({}, prevState), { messages: dedupeMessages([...messagesToAdd, ...prevState.messages]), nextCursor: nextCursor === null || nextCursor === void 0 ? void 0 : nextCursor.id })));
179
190
  }
180
191
  catch (e) {
181
192
  setLoadingError(e);
@@ -35,6 +35,17 @@ function extendContent(content, nextContent) {
35
35
  }
36
36
  }
37
37
  }
38
+ function dedupeMessages(messages) {
39
+ const messageIndex = new Set(messages.map((message) => `${message.id}${message.messageType}`));
40
+ return messages.filter((message) => {
41
+ // if we have seen this message before, return false
42
+ if (messageIndex.has(`${message.id}${message.messageType}`)) {
43
+ messageIndex.delete(`${message.id}${message.messageType}`);
44
+ return true;
45
+ }
46
+ return false;
47
+ }, []);
48
+ }
38
49
  export function useAgentMessages(options) {
39
50
  const { client = {}, method = 'stream', messageOptions = {}, limit = 20, agentId, } = options;
40
51
  const localClient = useLettaClient(client);
@@ -175,7 +186,7 @@ export function useAgentMessages(options) {
175
186
  const messages = yield localClient.agents.messages.list(agentId, Object.assign({ before, limit: limit + 1 }, messageOptions));
176
187
  const messagesToAdd = messages.slice(1, messages.length);
177
188
  const nextCursor = messages.length > limit ? messages[0] : undefined;
178
- setLocalMessages((prevState) => (Object.assign(Object.assign({}, prevState), { messages: [...messagesToAdd, ...prevState.messages], nextCursor: nextCursor === null || nextCursor === void 0 ? void 0 : nextCursor.id })));
189
+ setLocalMessages((prevState) => (Object.assign(Object.assign({}, prevState), { messages: dedupeMessages([...messagesToAdd, ...prevState.messages]), nextCursor: nextCursor === null || nextCursor === void 0 ? void 0 : nextCursor.id })));
179
190
  }
180
191
  catch (e) {
181
192
  setLoadingError(e);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letta-ai/letta-react",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "Letta's react library",
5
5
  "private": false,
6
6
  "main": "./index.js",
@@ -34,6 +34,24 @@ function extendContent(
34
34
  }
35
35
  }
36
36
 
37
+ function dedupeMessages(
38
+ messages: LocalMessagesState['messages']
39
+ ): LocalMessagesState['messages'] {
40
+ const messageIndex = new Set(
41
+ messages.map((message) => `${message.id}${message.messageType}`)
42
+ );
43
+
44
+ return messages.filter((message) => {
45
+ // if we have seen this message before, return false
46
+ if (messageIndex.has(`${message.id}${message.messageType}`)) {
47
+ messageIndex.delete(`${message.id}${message.messageType}`);
48
+ return true;
49
+ }
50
+
51
+ return false;
52
+ }, []);
53
+ }
54
+
37
55
  interface SendMessagePayload {
38
56
  messages: LettaRequest['messages'];
39
57
  }
@@ -278,7 +296,7 @@ export function useAgentMessages(options: UseAgentOptions) {
278
296
 
279
297
  setLocalMessages((prevState) => ({
280
298
  ...prevState,
281
- messages: [...messagesToAdd, ...prevState.messages],
299
+ messages: dedupeMessages([...messagesToAdd, ...prevState.messages]),
282
300
  nextCursor: nextCursor?.id,
283
301
  }));
284
302
  } catch (e) {