@zenning/ai 5.3.1 → 5.3.2

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.mjs CHANGED
@@ -711,7 +711,7 @@ import {
711
711
  } from "@zenning/provider-utils";
712
712
 
713
713
  // src/version.ts
714
- var VERSION = true ? "5.3.1" : "0.0.0-test";
714
+ var VERSION = true ? "5.3.2" : "0.0.0-test";
715
715
 
716
716
  // src/util/download/download.ts
717
717
  var download = async ({ url }) => {
@@ -3439,7 +3439,8 @@ function createStreamingUIMessageState({
3439
3439
  activeReasoningParts: {},
3440
3440
  partialToolCalls: {},
3441
3441
  isFinalized: false,
3442
- messageQueue: []
3442
+ messageQueue: [],
3443
+ seenAnnotations: /* @__PURE__ */ new Set()
3443
3444
  };
3444
3445
  }
3445
3446
  function processUIMessageStream({
@@ -3455,7 +3456,7 @@ function processUIMessageStream({
3455
3456
  new TransformStream({
3456
3457
  async transform(chunk, controller) {
3457
3458
  await runUpdateMessageJob(async ({ state, write }) => {
3458
- var _a17, _b, _c, _d;
3459
+ var _a17, _b;
3459
3460
  function getToolInvocation(toolCallId) {
3460
3461
  const toolInvocations = state.message.parts.filter(isToolUIPart);
3461
3462
  const toolInvocation = toolInvocations.find(
@@ -3559,12 +3560,39 @@ function processUIMessageStream({
3559
3560
  state.message.metadata = mergedMetadata;
3560
3561
  }
3561
3562
  }
3563
+ function filterDuplicateAnnotations(providerMetadata) {
3564
+ var _a18;
3565
+ if (!((_a18 = providerMetadata == null ? void 0 : providerMetadata.openai) == null ? void 0 : _a18.annotations) || !state.seenAnnotations) {
3566
+ return providerMetadata;
3567
+ }
3568
+ const filtered = { ...providerMetadata };
3569
+ if (filtered.openai) {
3570
+ filtered.openai = { ...filtered.openai };
3571
+ const uniqueAnnotations = filtered.openai.annotations.filter((annotation) => {
3572
+ const key = JSON.stringify(annotation);
3573
+ if (state.seenAnnotations.has(key)) {
3574
+ return false;
3575
+ }
3576
+ state.seenAnnotations.add(key);
3577
+ return true;
3578
+ });
3579
+ if (uniqueAnnotations.length > 0) {
3580
+ filtered.openai.annotations = uniqueAnnotations;
3581
+ } else {
3582
+ delete filtered.openai.annotations;
3583
+ if (Object.keys(filtered.openai).length === 0) {
3584
+ delete filtered.openai;
3585
+ }
3586
+ }
3587
+ }
3588
+ return Object.keys(filtered).length > 0 ? filtered : void 0;
3589
+ }
3562
3590
  switch (chunk.type) {
3563
3591
  case "text-start": {
3564
3592
  const textPart = {
3565
3593
  type: "text",
3566
3594
  text: "",
3567
- providerMetadata: chunk.providerMetadata,
3595
+ providerMetadata: filterDuplicateAnnotations(chunk.providerMetadata),
3568
3596
  state: "streaming"
3569
3597
  };
3570
3598
  state.activeTextParts[chunk.id] = textPart;
@@ -3575,14 +3603,20 @@ function processUIMessageStream({
3575
3603
  case "text-delta": {
3576
3604
  const textPart = state.activeTextParts[chunk.id];
3577
3605
  textPart.text += chunk.delta;
3578
- textPart.providerMetadata = (_a17 = chunk.providerMetadata) != null ? _a17 : textPart.providerMetadata;
3606
+ const filteredMetadata = filterDuplicateAnnotations(chunk.providerMetadata);
3607
+ if (filteredMetadata && !textPart.providerMetadata) {
3608
+ textPart.providerMetadata = filteredMetadata;
3609
+ }
3579
3610
  write();
3580
3611
  break;
3581
3612
  }
3582
3613
  case "text-end": {
3583
3614
  const textPart = state.activeTextParts[chunk.id];
3584
3615
  textPart.state = "done";
3585
- textPart.providerMetadata = (_b = chunk.providerMetadata) != null ? _b : textPart.providerMetadata;
3616
+ const filteredMetadata = filterDuplicateAnnotations(chunk.providerMetadata);
3617
+ if (filteredMetadata && !textPart.providerMetadata) {
3618
+ textPart.providerMetadata = filteredMetadata;
3619
+ }
3586
3620
  delete state.activeTextParts[chunk.id];
3587
3621
  write();
3588
3622
  break;
@@ -3602,13 +3636,13 @@ function processUIMessageStream({
3602
3636
  case "reasoning-delta": {
3603
3637
  const reasoningPart = state.activeReasoningParts[chunk.id];
3604
3638
  reasoningPart.text += chunk.delta;
3605
- reasoningPart.providerMetadata = (_c = chunk.providerMetadata) != null ? _c : reasoningPart.providerMetadata;
3639
+ reasoningPart.providerMetadata = (_a17 = chunk.providerMetadata) != null ? _a17 : reasoningPart.providerMetadata;
3606
3640
  write();
3607
3641
  break;
3608
3642
  }
3609
3643
  case "reasoning-end": {
3610
3644
  const reasoningPart = state.activeReasoningParts[chunk.id];
3611
- reasoningPart.providerMetadata = (_d = chunk.providerMetadata) != null ? _d : reasoningPart.providerMetadata;
3645
+ reasoningPart.providerMetadata = (_b = chunk.providerMetadata) != null ? _b : reasoningPart.providerMetadata;
3612
3646
  reasoningPart.state = "done";
3613
3647
  delete state.activeReasoningParts[chunk.id];
3614
3648
  write();
@@ -3856,6 +3890,7 @@ function processUIMessageStream({
3856
3890
  state.activeReasoningParts = {};
3857
3891
  state.partialToolCalls = {};
3858
3892
  state.isFinalized = false;
3893
+ state.seenAnnotations = /* @__PURE__ */ new Set();
3859
3894
  write();
3860
3895
  } else if (!state.message.id) {
3861
3896
  state.message.id = chunk.messageId;