assistant-stream 0.0.0-rc.0 → 0.0.0-rc.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.js CHANGED
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // src/index.ts
@@ -25,7 +35,8 @@ __export(src_exports, {
25
35
  DataStreamEncoder: () => DataStreamEncoder,
26
36
  PlainTextDecoder: () => PlainTextDecoder,
27
37
  PlainTextEncoder: () => PlainTextEncoder,
28
- createRun: () => createRun
38
+ createRun: () => createRun,
39
+ toAssistantMessageStream: () => toAssistantMessageStream
29
40
  });
30
41
  module.exports = __toCommonJS(src_exports);
31
42
 
@@ -53,20 +64,9 @@ var AssistantStream = class _AssistantStream {
53
64
  }
54
65
  };
55
66
 
56
- // ../../../node_modules/.pnpm/nanoid@5.0.7/node_modules/nanoid/non-secure/index.js
57
- var customAlphabet = (alphabet, defaultSize = 21) => {
58
- return (size = defaultSize) => {
59
- let id = "";
60
- let i = size;
61
- while (i--) {
62
- id += alphabet[Math.random() * alphabet.length | 0];
63
- }
64
- return id;
65
- };
66
- };
67
-
68
67
  // ../core/src/utils/generateId.tsx
69
- var generateId = customAlphabet(
68
+ var import_non_secure = require("nanoid/non-secure");
69
+ var generateId = (0, import_non_secure.customAlphabet)(
70
70
  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
71
71
  7
72
72
  );
@@ -490,6 +490,491 @@ var PlainTextDecoder = class {
490
490
  });
491
491
  }
492
492
  };
493
+
494
+ // ../core/src/reducers/partial-json/parse-partial-json.ts
495
+ var import_secure_json_parse = __toESM(require("secure-json-parse"), 1);
496
+
497
+ // ../core/src/reducers/partial-json/fix-json.ts
498
+ function fixJson(input) {
499
+ const stack = ["ROOT"];
500
+ let lastValidIndex = -1;
501
+ let literalStart = null;
502
+ function processValueStart(char, i, swapState) {
503
+ {
504
+ switch (char) {
505
+ case '"': {
506
+ lastValidIndex = i;
507
+ stack.pop();
508
+ stack.push(swapState);
509
+ stack.push("INSIDE_STRING");
510
+ break;
511
+ }
512
+ case "f":
513
+ case "t":
514
+ case "n": {
515
+ lastValidIndex = i;
516
+ literalStart = i;
517
+ stack.pop();
518
+ stack.push(swapState);
519
+ stack.push("INSIDE_LITERAL");
520
+ break;
521
+ }
522
+ case "-": {
523
+ stack.pop();
524
+ stack.push(swapState);
525
+ stack.push("INSIDE_NUMBER");
526
+ break;
527
+ }
528
+ case "0":
529
+ case "1":
530
+ case "2":
531
+ case "3":
532
+ case "4":
533
+ case "5":
534
+ case "6":
535
+ case "7":
536
+ case "8":
537
+ case "9": {
538
+ lastValidIndex = i;
539
+ stack.pop();
540
+ stack.push(swapState);
541
+ stack.push("INSIDE_NUMBER");
542
+ break;
543
+ }
544
+ case "{": {
545
+ lastValidIndex = i;
546
+ stack.pop();
547
+ stack.push(swapState);
548
+ stack.push("INSIDE_OBJECT_START");
549
+ break;
550
+ }
551
+ case "[": {
552
+ lastValidIndex = i;
553
+ stack.pop();
554
+ stack.push(swapState);
555
+ stack.push("INSIDE_ARRAY_START");
556
+ break;
557
+ }
558
+ }
559
+ }
560
+ }
561
+ function processAfterObjectValue(char, i) {
562
+ switch (char) {
563
+ case ",": {
564
+ stack.pop();
565
+ stack.push("INSIDE_OBJECT_AFTER_COMMA");
566
+ break;
567
+ }
568
+ case "}": {
569
+ lastValidIndex = i;
570
+ stack.pop();
571
+ break;
572
+ }
573
+ }
574
+ }
575
+ function processAfterArrayValue(char, i) {
576
+ switch (char) {
577
+ case ",": {
578
+ stack.pop();
579
+ stack.push("INSIDE_ARRAY_AFTER_COMMA");
580
+ break;
581
+ }
582
+ case "]": {
583
+ lastValidIndex = i;
584
+ stack.pop();
585
+ break;
586
+ }
587
+ }
588
+ }
589
+ for (let i = 0; i < input.length; i++) {
590
+ const char = input[i];
591
+ const currentState = stack[stack.length - 1];
592
+ switch (currentState) {
593
+ case "ROOT":
594
+ processValueStart(char, i, "FINISH");
595
+ break;
596
+ case "INSIDE_OBJECT_START": {
597
+ switch (char) {
598
+ case '"': {
599
+ stack.pop();
600
+ stack.push("INSIDE_OBJECT_KEY");
601
+ break;
602
+ }
603
+ case "}": {
604
+ lastValidIndex = i;
605
+ stack.pop();
606
+ break;
607
+ }
608
+ }
609
+ break;
610
+ }
611
+ case "INSIDE_OBJECT_AFTER_COMMA": {
612
+ switch (char) {
613
+ case '"': {
614
+ stack.pop();
615
+ stack.push("INSIDE_OBJECT_KEY");
616
+ break;
617
+ }
618
+ }
619
+ break;
620
+ }
621
+ case "INSIDE_OBJECT_KEY": {
622
+ switch (char) {
623
+ case '"': {
624
+ stack.pop();
625
+ stack.push("INSIDE_OBJECT_AFTER_KEY");
626
+ break;
627
+ }
628
+ }
629
+ break;
630
+ }
631
+ case "INSIDE_OBJECT_AFTER_KEY": {
632
+ switch (char) {
633
+ case ":": {
634
+ stack.pop();
635
+ stack.push("INSIDE_OBJECT_BEFORE_VALUE");
636
+ break;
637
+ }
638
+ }
639
+ break;
640
+ }
641
+ case "INSIDE_OBJECT_BEFORE_VALUE": {
642
+ processValueStart(char, i, "INSIDE_OBJECT_AFTER_VALUE");
643
+ break;
644
+ }
645
+ case "INSIDE_OBJECT_AFTER_VALUE": {
646
+ processAfterObjectValue(char, i);
647
+ break;
648
+ }
649
+ case "INSIDE_STRING": {
650
+ switch (char) {
651
+ case '"': {
652
+ stack.pop();
653
+ lastValidIndex = i;
654
+ break;
655
+ }
656
+ case "\\": {
657
+ stack.push("INSIDE_STRING_ESCAPE");
658
+ break;
659
+ }
660
+ default: {
661
+ lastValidIndex = i;
662
+ }
663
+ }
664
+ break;
665
+ }
666
+ case "INSIDE_ARRAY_START": {
667
+ switch (char) {
668
+ case "]": {
669
+ lastValidIndex = i;
670
+ stack.pop();
671
+ break;
672
+ }
673
+ default: {
674
+ lastValidIndex = i;
675
+ processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
676
+ break;
677
+ }
678
+ }
679
+ break;
680
+ }
681
+ case "INSIDE_ARRAY_AFTER_VALUE": {
682
+ switch (char) {
683
+ case ",": {
684
+ stack.pop();
685
+ stack.push("INSIDE_ARRAY_AFTER_COMMA");
686
+ break;
687
+ }
688
+ case "]": {
689
+ lastValidIndex = i;
690
+ stack.pop();
691
+ break;
692
+ }
693
+ default: {
694
+ lastValidIndex = i;
695
+ break;
696
+ }
697
+ }
698
+ break;
699
+ }
700
+ case "INSIDE_ARRAY_AFTER_COMMA": {
701
+ processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
702
+ break;
703
+ }
704
+ case "INSIDE_STRING_ESCAPE": {
705
+ stack.pop();
706
+ lastValidIndex = i;
707
+ break;
708
+ }
709
+ case "INSIDE_NUMBER": {
710
+ switch (char) {
711
+ case "0":
712
+ case "1":
713
+ case "2":
714
+ case "3":
715
+ case "4":
716
+ case "5":
717
+ case "6":
718
+ case "7":
719
+ case "8":
720
+ case "9": {
721
+ lastValidIndex = i;
722
+ break;
723
+ }
724
+ case "e":
725
+ case "E":
726
+ case "-":
727
+ case ".": {
728
+ break;
729
+ }
730
+ case ",": {
731
+ stack.pop();
732
+ if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
733
+ processAfterArrayValue(char, i);
734
+ }
735
+ if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
736
+ processAfterObjectValue(char, i);
737
+ }
738
+ break;
739
+ }
740
+ case "}": {
741
+ stack.pop();
742
+ if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
743
+ processAfterObjectValue(char, i);
744
+ }
745
+ break;
746
+ }
747
+ case "]": {
748
+ stack.pop();
749
+ if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
750
+ processAfterArrayValue(char, i);
751
+ }
752
+ break;
753
+ }
754
+ default: {
755
+ stack.pop();
756
+ break;
757
+ }
758
+ }
759
+ break;
760
+ }
761
+ case "INSIDE_LITERAL": {
762
+ const partialLiteral = input.substring(literalStart, i + 1);
763
+ if (!"false".startsWith(partialLiteral) && !"true".startsWith(partialLiteral) && !"null".startsWith(partialLiteral)) {
764
+ stack.pop();
765
+ if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
766
+ processAfterObjectValue(char, i);
767
+ } else if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
768
+ processAfterArrayValue(char, i);
769
+ }
770
+ } else {
771
+ lastValidIndex = i;
772
+ }
773
+ break;
774
+ }
775
+ }
776
+ }
777
+ let result = input.slice(0, lastValidIndex + 1);
778
+ for (let i = stack.length - 1; i >= 0; i--) {
779
+ const state = stack[i];
780
+ switch (state) {
781
+ case "INSIDE_STRING": {
782
+ result += '"';
783
+ break;
784
+ }
785
+ case "INSIDE_OBJECT_KEY":
786
+ case "INSIDE_OBJECT_AFTER_KEY":
787
+ case "INSIDE_OBJECT_AFTER_COMMA":
788
+ case "INSIDE_OBJECT_START":
789
+ case "INSIDE_OBJECT_BEFORE_VALUE":
790
+ case "INSIDE_OBJECT_AFTER_VALUE": {
791
+ result += "}";
792
+ break;
793
+ }
794
+ case "INSIDE_ARRAY_START":
795
+ case "INSIDE_ARRAY_AFTER_COMMA":
796
+ case "INSIDE_ARRAY_AFTER_VALUE": {
797
+ result += "]";
798
+ break;
799
+ }
800
+ case "INSIDE_LITERAL": {
801
+ const partialLiteral = input.substring(literalStart, input.length);
802
+ if ("true".startsWith(partialLiteral)) {
803
+ result += "true".slice(partialLiteral.length);
804
+ } else if ("false".startsWith(partialLiteral)) {
805
+ result += "false".slice(partialLiteral.length);
806
+ } else if ("null".startsWith(partialLiteral)) {
807
+ result += "null".slice(partialLiteral.length);
808
+ }
809
+ }
810
+ }
811
+ }
812
+ return result;
813
+ }
814
+
815
+ // ../core/src/reducers/partial-json/parse-partial-json.ts
816
+ var parsePartialJson = (json) => {
817
+ try {
818
+ return import_secure_json_parse.default.parse(json);
819
+ } catch {
820
+ try {
821
+ return import_secure_json_parse.default.parse(fixJson(json));
822
+ } catch {
823
+ return void 0;
824
+ }
825
+ }
826
+ };
827
+
828
+ // ../core/src/reducers/assistant-message.ts
829
+ function createAsyncIterableStream(source, transform) {
830
+ const transformedStream = source.pipeThrough(transform);
831
+ transformedStream[Symbol.asyncIterator] = () => {
832
+ const reader = transformedStream.getReader();
833
+ return {
834
+ async next() {
835
+ const { done, value } = await reader.read();
836
+ return done ? { done: true, value: void 0 } : { done: false, value };
837
+ }
838
+ };
839
+ };
840
+ return transformedStream;
841
+ }
842
+ var toAssistantMessageStream = (stream) => {
843
+ let message = {
844
+ role: "assistant",
845
+ content: [],
846
+ status: { type: "running" },
847
+ metadata: {
848
+ steps: [],
849
+ custom: {}
850
+ }
851
+ };
852
+ const transformer = new TransformStream({
853
+ transform(chunk, controller) {
854
+ const { type } = chunk;
855
+ switch (type) {
856
+ case "text-delta": {
857
+ message = appendOrUpdateText(message, chunk.textDelta);
858
+ controller.enqueue(message);
859
+ break;
860
+ }
861
+ case "tool-call-begin": {
862
+ const { toolCallId, toolName } = chunk;
863
+ message = appendToolCall(message, toolCallId, toolName);
864
+ controller.enqueue(message);
865
+ break;
866
+ }
867
+ case "tool-call-delta": {
868
+ const { toolCallId, argsTextDelta } = chunk;
869
+ message = appendToolArgsTextDelta(message, toolCallId, argsTextDelta);
870
+ controller.enqueue(message);
871
+ break;
872
+ }
873
+ case "tool-result": {
874
+ const { toolCallId, result } = chunk;
875
+ message = setToolResult(message, toolCallId, result);
876
+ controller.enqueue(message);
877
+ break;
878
+ }
879
+ }
880
+ },
881
+ flush(controller) {
882
+ message = appendOrUpdateFinish(message);
883
+ controller.enqueue(message);
884
+ }
885
+ });
886
+ return createAsyncIterableStream(stream.readable, transformer);
887
+ };
888
+ var appendOrUpdateText = (message, textDelta) => {
889
+ let contentParts = message.content ?? [];
890
+ let contentPart = message.content?.at(-1);
891
+ if (contentPart?.type !== "text") {
892
+ contentPart = {
893
+ type: "text",
894
+ text: textDelta,
895
+ status: { type: "running" }
896
+ };
897
+ } else {
898
+ contentParts = contentParts.slice(0, -1);
899
+ contentPart = {
900
+ type: "text",
901
+ text: contentPart.text + textDelta,
902
+ status: { type: "running" }
903
+ };
904
+ }
905
+ return {
906
+ ...message,
907
+ content: contentParts.concat([contentPart])
908
+ };
909
+ };
910
+ var appendToolCall = (message, toolCallId, toolName) => {
911
+ return {
912
+ ...message,
913
+ content: [
914
+ ...message.content,
915
+ {
916
+ type: "tool-call",
917
+ toolCallId,
918
+ toolName,
919
+ argsText: "",
920
+ args: {},
921
+ status: { type: "running", isArgsComplete: false }
922
+ }
923
+ ]
924
+ };
925
+ };
926
+ var appendToolArgsTextDelta = (message, toolCallId, argsTextDelta) => {
927
+ const contentPartIdx = message.content.findIndex(
928
+ (part) => part.type === "tool-call" && part.toolCallId === toolCallId
929
+ );
930
+ if (contentPartIdx === -1)
931
+ throw new Error(
932
+ `Received tool call delta for unknown tool call "${toolCallId}".`
933
+ );
934
+ const contentPart = message.content[contentPartIdx];
935
+ const newArgsText = contentPart.argsText + argsTextDelta;
936
+ return {
937
+ ...message,
938
+ content: [
939
+ ...message.content.slice(0, contentPartIdx),
940
+ {
941
+ ...contentPart,
942
+ argsText: newArgsText,
943
+ args: parsePartialJson(newArgsText)
944
+ },
945
+ ...message.content.slice(contentPartIdx + 1)
946
+ ]
947
+ };
948
+ };
949
+ var setToolResult = (message, toolCallId, result) => {
950
+ let found = false;
951
+ const newContentParts = message.content?.map((part) => {
952
+ if (part.type !== "tool-call" || part.toolCallId !== toolCallId)
953
+ return part;
954
+ found = true;
955
+ return {
956
+ ...part,
957
+ result
958
+ };
959
+ });
960
+ if (!found)
961
+ throw new Error(
962
+ `Received tool result for unknown tool call "${toolCallId}". This is likely an internal bug in assistant-ui.`
963
+ );
964
+ return {
965
+ ...message,
966
+ content: newContentParts
967
+ };
968
+ };
969
+ var appendOrUpdateFinish = (message) => {
970
+ return {
971
+ ...message,
972
+ status: {
973
+ type: "complete",
974
+ reason: "unknown"
975
+ }
976
+ };
977
+ };
493
978
  // Annotate the CommonJS export names for ESM import in node:
494
979
  0 && (module.exports = {
495
980
  AssistantStream,
@@ -497,6 +982,7 @@ var PlainTextDecoder = class {
497
982
  DataStreamEncoder,
498
983
  PlainTextDecoder,
499
984
  PlainTextEncoder,
500
- createRun
985
+ createRun,
986
+ toAssistantMessageStream
501
987
  });
502
988
  //# sourceMappingURL=index.js.map