@dudousxd/nestjs-agent-react 0.4.2 → 0.5.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.
- package/dist/index.cjs +71 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +90 -1
- package/dist/index.d.ts +90 -1
- package/dist/index.js +70 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -43,6 +43,7 @@ __export(src_exports, {
|
|
|
43
43
|
loadStoredSpeechLang: () => loadStoredSpeechLang,
|
|
44
44
|
persistSpeechLang: () => persistSpeechLang,
|
|
45
45
|
storedMessageToUiMessage: () => storedMessageToUiMessage,
|
|
46
|
+
storedThreadToUiMessages: () => storedThreadToUiMessages,
|
|
46
47
|
useAgentChat: () => useAgentChat,
|
|
47
48
|
useSpeechRecognition: () => useSpeechRecognition
|
|
48
49
|
});
|
|
@@ -70,6 +71,7 @@ var AgentChatTransport = class {
|
|
|
70
71
|
return this.currentThreadId;
|
|
71
72
|
}
|
|
72
73
|
async sendMessages(options) {
|
|
74
|
+
this.options.onAttemptStart?.();
|
|
73
75
|
const lastMessage = options.messages.at(-1);
|
|
74
76
|
const message = lastMessage ? extractText(lastMessage) : "";
|
|
75
77
|
const body = {
|
|
@@ -102,6 +104,7 @@ var AgentChatTransport = class {
|
|
|
102
104
|
return this.toChunkStream(response.body);
|
|
103
105
|
}
|
|
104
106
|
async reconnectToStream(options) {
|
|
107
|
+
this.options.onAttemptStart?.();
|
|
105
108
|
const runId = this.options.getResumeRunId?.();
|
|
106
109
|
if (runId === void 0) return null;
|
|
107
110
|
const response = await this.fetchImpl()(`${this.baseUrl()}/agent/chat/${encodeURIComponent(runId)}/stream`, {
|
|
@@ -611,6 +614,59 @@ function storedMessageToUiMessage(message) {
|
|
|
611
614
|
}
|
|
612
615
|
__name(storedMessageToUiMessage, "storedMessageToUiMessage");
|
|
613
616
|
|
|
617
|
+
// src/stored-thread-to-ui-messages.ts
|
|
618
|
+
function storedThreadToUiMessages(messages) {
|
|
619
|
+
const turns = [];
|
|
620
|
+
for (const message of messages) {
|
|
621
|
+
const currentTurn = turns.at(-1);
|
|
622
|
+
const previousRow = currentTurn?.at(-1);
|
|
623
|
+
if (message.role === "assistant" && previousRow?.role === "assistant" && currentTurn) {
|
|
624
|
+
currentTurn.push(message);
|
|
625
|
+
} else {
|
|
626
|
+
turns.push([
|
|
627
|
+
message
|
|
628
|
+
]);
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
return turns.map(mergeTurn);
|
|
632
|
+
}
|
|
633
|
+
__name(storedThreadToUiMessages, "storedThreadToUiMessages");
|
|
634
|
+
function mergeTurn(rows) {
|
|
635
|
+
const lastRow = rows.at(-1);
|
|
636
|
+
if (lastRow === void 0) {
|
|
637
|
+
throw new Error("storedThreadToUiMessages: encountered an empty turn");
|
|
638
|
+
}
|
|
639
|
+
if (rows.length === 1) {
|
|
640
|
+
return storedMessageToUiMessage(lastRow);
|
|
641
|
+
}
|
|
642
|
+
const parts = rows.flatMap((row) => storedMessageToUiMessage(row).parts);
|
|
643
|
+
const usage = sumUsage(rows);
|
|
644
|
+
return {
|
|
645
|
+
id: lastRow.id,
|
|
646
|
+
role: lastRow.role,
|
|
647
|
+
parts,
|
|
648
|
+
...usage !== void 0 ? {
|
|
649
|
+
metadata: {
|
|
650
|
+
usage
|
|
651
|
+
}
|
|
652
|
+
} : {}
|
|
653
|
+
};
|
|
654
|
+
}
|
|
655
|
+
__name(mergeTurn, "mergeTurn");
|
|
656
|
+
function sumUsage(rows) {
|
|
657
|
+
const usages = rows.map((row) => row.usage).filter((usage) => usage !== void 0);
|
|
658
|
+
if (usages.length === 0) {
|
|
659
|
+
return void 0;
|
|
660
|
+
}
|
|
661
|
+
const allCostsUnknown = usages.every((usage) => usage.costUsd === null || usage.costUsd === void 0);
|
|
662
|
+
return {
|
|
663
|
+
inputTokens: usages.reduce((sum, usage) => sum + usage.inputTokens, 0),
|
|
664
|
+
outputTokens: usages.reduce((sum, usage) => sum + usage.outputTokens, 0),
|
|
665
|
+
costUsd: allCostsUnknown ? null : usages.reduce((sum, usage) => sum + (usage.costUsd ?? 0), 0)
|
|
666
|
+
};
|
|
667
|
+
}
|
|
668
|
+
__name(sumUsage, "sumUsage");
|
|
669
|
+
|
|
614
670
|
// src/use-agent-chat.ts
|
|
615
671
|
var import_react = require("@ai-sdk/react");
|
|
616
672
|
var import_react2 = require("react");
|
|
@@ -620,6 +676,7 @@ function useAgentChat(options) {
|
|
|
620
676
|
const [runId, setRunId] = (0, import_react2.useState)(options.resumeRunId);
|
|
621
677
|
const runIdRef = (0, import_react2.useRef)(runId);
|
|
622
678
|
runIdRef.current = runId;
|
|
679
|
+
const settlingRunIdRef = (0, import_react2.useRef)(void 0);
|
|
623
680
|
const autoResumeRunIdRef = (0, import_react2.useRef)(void 0);
|
|
624
681
|
const [autoResume, setAutoResume] = (0, import_react2.useState)(false);
|
|
625
682
|
const [activeRunId, setActiveRunId] = (0, import_react2.useState)(null);
|
|
@@ -662,6 +719,7 @@ function useAgentChat(options) {
|
|
|
662
719
|
]);
|
|
663
720
|
const transport = (0, import_react2.useMemo)(() => {
|
|
664
721
|
function onMeta(meta) {
|
|
722
|
+
settlingRunIdRef.current = meta.runId;
|
|
665
723
|
setRunId(meta.runId);
|
|
666
724
|
if (latest.current.threadId === void 0 && meta.threadId && createdThreadId.current !== meta.threadId) {
|
|
667
725
|
createdThreadId.current = meta.threadId;
|
|
@@ -702,7 +760,10 @@ function useAgentChat(options) {
|
|
|
702
760
|
};
|
|
703
761
|
}, "getBody"),
|
|
704
762
|
getResumeRunId: /* @__PURE__ */ __name(() => latest.current.resumeRunId ?? autoResumeRunIdRef.current, "getResumeRunId"),
|
|
705
|
-
onMeta
|
|
763
|
+
onMeta,
|
|
764
|
+
onAttemptStart: /* @__PURE__ */ __name(() => {
|
|
765
|
+
settlingRunIdRef.current = void 0;
|
|
766
|
+
}, "onAttemptStart")
|
|
706
767
|
});
|
|
707
768
|
}, []);
|
|
708
769
|
const chat = (0, import_react.useChat)({
|
|
@@ -714,8 +775,15 @@ function useAgentChat(options) {
|
|
|
714
775
|
...options.initialMessages !== void 0 ? {
|
|
715
776
|
messages: options.initialMessages
|
|
716
777
|
} : {},
|
|
717
|
-
onFinish: /* @__PURE__ */ __name(() => {
|
|
778
|
+
onFinish: /* @__PURE__ */ __name(({ isError }) => {
|
|
718
779
|
latest.current.onFinish?.();
|
|
780
|
+
const settledRunId = settlingRunIdRef.current;
|
|
781
|
+
if (settledRunId !== void 0) {
|
|
782
|
+
latest.current.onRunSettled?.({
|
|
783
|
+
runId: settledRunId,
|
|
784
|
+
status: isError ? "failed" : "completed"
|
|
785
|
+
});
|
|
786
|
+
}
|
|
719
787
|
}, "onFinish")
|
|
720
788
|
});
|
|
721
789
|
const chatRef = (0, import_react2.useRef)(chat);
|
|
@@ -1421,6 +1489,7 @@ __name(persistSpeechLang, "persistSpeechLang");
|
|
|
1421
1489
|
loadStoredSpeechLang,
|
|
1422
1490
|
persistSpeechLang,
|
|
1423
1491
|
storedMessageToUiMessage,
|
|
1492
|
+
storedThreadToUiMessages,
|
|
1424
1493
|
useAgentChat,
|
|
1425
1494
|
useSpeechRecognition
|
|
1426
1495
|
});
|