From last Thursday until just now (Saturday), two issues confused me a lot:
forEach
is synchronous, not asynchronous
This is a fundamental concept, but problems can arise when you assume a block of code will execute synchronously while using forEach
. For some reason, if that block of code becomes asynchronous, it could lead to unexpected issues.
slice
creates a shallow copy
shortConversation = […systemPrompt, …chatThread.current.slice(-(memoryLength + 2 - 1))];
The slice
method causes shortConversation
and chatThread
to share part of the memory, which led to unexpected behaviors.
The corrected code is as follows:
shortConversation = [...systemPrompt, ...structuredClone(chatThread.current.slice(-(memoryLength + 2 - 1)))];
Using structuredClone
ensures that shortConversation
and chatThread
are completely independent.