@copilotz/chat-adapter 0.9.31 → 0.9.32

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.js CHANGED
@@ -1605,15 +1605,36 @@ var prepareHydratedMessages = async (rawMessages, options = {}) => {
1605
1605
  };
1606
1606
  };
1607
1607
 
1608
+ // src/streamEvents.ts
1609
+ var isRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1610
+ var hasValues = (value) => Array.isArray(value) && value.length > 0;
1611
+ var getStreamEventPayload = (event) => {
1612
+ if (!isRecord2(event)) return event;
1613
+ return "payload" in event ? event.payload : event;
1614
+ };
1615
+ var isTerminalEmptyLlmResultEvent = (event) => {
1616
+ if (!isRecord2(event) || event.type !== "LLM_RESULT") return false;
1617
+ const payload = getStreamEventPayload(event);
1618
+ if (!isRecord2(payload)) return false;
1619
+ if (payload.answer !== "") return false;
1620
+ if (payload.finishReason === "tool_calls") return false;
1621
+ if (hasValues(payload.toolCalls)) return false;
1622
+ const metadata = isRecord2(event.metadata) ? event.metadata : {};
1623
+ const routing = isRecord2(metadata.routing) ? metadata.routing : {};
1624
+ if (hasValues(routing.routeTo) || hasValues(routing.askTo)) return false;
1625
+ if (hasValues(metadata.targetQueue)) return false;
1626
+ return true;
1627
+ };
1628
+
1608
1629
  // src/useCopilotzChat.ts
1609
1630
  var nowTs = () => Date.now();
1610
1631
  var generateId = () => globalThis.crypto?.randomUUID?.() ?? `id-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
1611
1632
  var isAbortError = (error) => error instanceof DOMException && error.name === "AbortError" || typeof error === "object" && error !== null && "name" in error && error.name === "AbortError";
1612
- var getEventPayload = (event) => event?.payload ?? event;
1633
+ var getEventPayload = (event) => getStreamEventPayload(event);
1613
1634
  var getEventSenderType = (payload) => payload?.senderType || payload?.sender?.type;
1614
- var isRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1635
+ var isRecord3 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1615
1636
  var normalizeThreadTag = (value) => {
1616
- if (!isRecord2(value)) return null;
1637
+ if (!isRecord3(value)) return null;
1617
1638
  const id = typeof value.id === "string" ? value.id.trim() : "";
1618
1639
  const name = typeof value.name === "string" ? value.name.trim() : "";
1619
1640
  const color = typeof value.color === "string" && value.color.trim() ? value.color.trim() : void 0;
@@ -1621,7 +1642,7 @@ var normalizeThreadTag = (value) => {
1621
1642
  return color ? { id, name, color } : { id, name };
1622
1643
  };
1623
1644
  var getThreadTagsFromMetadata = (metadata) => {
1624
- if (!isRecord2(metadata) || !isRecord2(metadata.public)) return [];
1645
+ if (!isRecord3(metadata) || !isRecord3(metadata.public)) return [];
1625
1646
  const tags = metadata.public.tags;
1626
1647
  if (!Array.isArray(tags)) return [];
1627
1648
  return tags.map(normalizeThreadTag).filter((tag) => !!tag);
@@ -1629,7 +1650,7 @@ var getThreadTagsFromMetadata = (metadata) => {
1629
1650
  var patchMetadataPublicTags = (metadata, tags) => ({
1630
1651
  ...metadata ?? {},
1631
1652
  public: {
1632
- ...isRecord2(metadata?.public) ? metadata.public : {},
1653
+ ...isRecord3(metadata?.public) ? metadata.public : {},
1633
1654
  tags
1634
1655
  }
1635
1656
  });
@@ -2519,6 +2540,9 @@ function useCopilotz({ userId, userName, userAvatar, assistantName, agentOptions
2519
2540
  if (type === "LLM_RESULT") {
2520
2541
  const finalAnswer = typeof payload?.answer === "string" ? payload.answer : void 0;
2521
2542
  finalizeActiveAssistantTurn(finalAnswer);
2543
+ if (isTerminalEmptyLlmResultEvent(event)) {
2544
+ finalizeStreamingPlaceholders();
2545
+ }
2522
2546
  return;
2523
2547
  }
2524
2548
  if (type === "MESSAGE" || type === "NEW_MESSAGE") {