@m4trix/core 0.12.0 → 0.12.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 CHANGED
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var messages = require('@langchain/core/messages');
4
3
  var effect = require('effect');
5
4
  var crypto$1 = require('crypto');
6
5
 
@@ -809,275 +808,6 @@ var SocketIoFactory = class _SocketIoFactory {
809
808
  return this.prefix ? `${this.prefix}:${event}` : event;
810
809
  }
811
810
  };
812
- var humanAndAI = (message) => message instanceof messages.HumanMessage || message instanceof messages.AIMessage;
813
- var humanOnly = (message) => message instanceof messages.HumanMessage;
814
- var aiOnly = (message) => message instanceof messages.AIMessage;
815
- var includingTags = (message, tags) => {
816
- if (tags) {
817
- return tags.some(
818
- (tag) => Array.isArray(message.additional_kwargs?.tags) ? message.additional_kwargs?.tags.includes(tag) : false
819
- );
820
- }
821
- return true;
822
- };
823
- var excludingTags = (message, tags) => {
824
- if (tags) {
825
- return !tags.some(
826
- (tag) => Array.isArray(message.additional_kwargs?.tags) ? message.additional_kwargs?.tags.includes(tag) : false
827
- );
828
- }
829
- return true;
830
- };
831
- var typeOnFilter = {
832
- ["HumanAndAI" /* HumanAndAI */]: humanAndAI,
833
- ["HumanOnly" /* HumanOnly */]: humanOnly,
834
- ["AIOnly" /* AIOnly */]: aiOnly,
835
- ["IncludingTags" /* IncludingTags */]: includingTags,
836
- ["ExcludingTags" /* ExcludingTags */]: excludingTags
837
- };
838
- function concise(messages$1) {
839
- return messages$1.map((message) => {
840
- const prefix = message instanceof messages.AIMessage ? "AI" : "Human";
841
- return `${prefix}: ${message.content}`;
842
- }).join("\n");
843
- }
844
- function verbose(messages$1) {
845
- return messages$1.map((message) => {
846
- const prefix = message instanceof messages.AIMessage ? "AI" : "Human";
847
- return `${prefix}:
848
- ${message.content}`;
849
- }).join("\n-------------------\n");
850
- }
851
- function redactAi(messages$1) {
852
- return messages$1.map((message) => {
853
- const prefix = message instanceof messages.AIMessage ? "AI" : "Human";
854
- const content = message instanceof messages.AIMessage ? "[...]" : message.content;
855
- return `${prefix}: ${content}`;
856
- }).join("\n");
857
- }
858
- function redactHuman(messages$1) {
859
- return messages$1.map((message) => {
860
- const prefix = message instanceof messages.AIMessage ? "AI" : "Human";
861
- const content = message instanceof messages.AIMessage ? "[...]" : message.content;
862
- return `${prefix}: ${content}`;
863
- }).join("\n");
864
- }
865
- var typeOnFormatter = {
866
- ["concise" /* Concise */]: concise,
867
- ["verbose" /* Verbose */]: verbose,
868
- ["redact-ai" /* RedactAi */]: redactAi,
869
- ["redact-human" /* RedactHuman */]: redactHuman
870
- };
871
-
872
- // src/helper/transform-messages/TransformMessages.ts
873
- var TransformMessages = class _TransformMessages {
874
- constructor(effect) {
875
- this.effect = effect;
876
- }
877
- /**
878
- * Create a new TransformMessages from an array of messages.
879
- */
880
- static from(messages) {
881
- return new _TransformMessages(effect.Effect.succeed(messages));
882
- }
883
- /**
884
- * Filter messages based on a predicate function
885
- */
886
- filter(predicate, tags) {
887
- let finalPredicate;
888
- if (typeof predicate === "string") {
889
- finalPredicate = typeOnFilter[predicate];
890
- } else {
891
- finalPredicate = predicate;
892
- }
893
- return new _TransformMessages(
894
- effect.pipe(
895
- this.effect,
896
- effect.Effect.map(
897
- (messages) => messages.filter((message) => finalPredicate(message, tags))
898
- )
899
- )
900
- );
901
- }
902
- /**
903
- * Take only the last n messages, but safely.
904
- * Tool calls should not be separated from the last human message.
905
- * Ensures all tool call conversations in the last n messages are complete.
906
- */
907
- safelyTakeLast(n, pruneAfterNOvershootingMessages = 0) {
908
- return new _TransformMessages(
909
- effect.pipe(
910
- this.effect,
911
- effect.Effect.map((messages$1) => {
912
- const total = messages$1.length;
913
- if (n <= 0 || total === 0)
914
- return [];
915
- const start = Math.max(0, total - n);
916
- const end = total;
917
- const lastSlice = messages$1.slice(start, end);
918
- if (lastSlice[0] instanceof messages.ToolMessage && lastSlice[0].tool_call_id) {
919
- let messagesToInclude = [];
920
- const remainingMessages = messages$1.slice(0, start);
921
- for (let i = remainingMessages.length - 1; i >= 0; i--) {
922
- const msg = remainingMessages[i];
923
- if (pruneAfterNOvershootingMessages > 0 && messagesToInclude.length - 1 >= pruneAfterNOvershootingMessages) {
924
- messagesToInclude = [];
925
- const filteredSlice = [];
926
- let foundFirstNonToolMessage = false;
927
- for (let i2 = 0; i2 < lastSlice.length; i2++) {
928
- const msg2 = lastSlice[i2];
929
- if (msg2 instanceof messages.ToolMessage) {
930
- if (foundFirstNonToolMessage) {
931
- filteredSlice.push(msg2);
932
- }
933
- } else {
934
- foundFirstNonToolMessage = true;
935
- filteredSlice.push(msg2);
936
- }
937
- }
938
- return filteredSlice;
939
- }
940
- if (msg instanceof messages.AIMessage && Array.isArray(msg.tool_calls)) {
941
- messagesToInclude.push(msg);
942
- break;
943
- } else if (msg instanceof messages.ToolMessage) {
944
- messagesToInclude.push(msg);
945
- } else {
946
- throw new Error(
947
- "Messages array invalid no adjacent AI message found"
948
- );
949
- }
950
- }
951
- return [...messagesToInclude.reverse(), ...lastSlice];
952
- } else {
953
- return lastSlice;
954
- }
955
- })
956
- )
957
- );
958
- }
959
- /**
960
- * Take only the last n messages
961
- */
962
- last(n) {
963
- return new _TransformMessages(
964
- effect.pipe(
965
- this.effect,
966
- effect.Effect.map((messages) => messages.slice(-n))
967
- )
968
- );
969
- }
970
- /**
971
- * Take only the first n messages
972
- */
973
- first(n) {
974
- return new _TransformMessages(
975
- effect.pipe(
976
- this.effect,
977
- effect.Effect.map((messages) => messages.slice(0, n))
978
- )
979
- );
980
- }
981
- /**
982
- * Skip the first n messages
983
- */
984
- skip(n) {
985
- return new _TransformMessages(
986
- effect.pipe(
987
- this.effect,
988
- effect.Effect.map((messages) => messages.slice(n))
989
- )
990
- );
991
- }
992
- /**
993
- * Reverse the order of messages
994
- */
995
- reverse() {
996
- return new _TransformMessages(
997
- effect.pipe(
998
- this.effect,
999
- effect.Effect.map((messages) => [...messages].reverse())
1000
- )
1001
- );
1002
- }
1003
- /**
1004
- * Map over messages with a transformation function
1005
- */
1006
- map(fn) {
1007
- return new _TransformMessages(
1008
- effect.pipe(
1009
- this.effect,
1010
- effect.Effect.map((messages) => messages.map(fn))
1011
- )
1012
- );
1013
- }
1014
- /**
1015
- * Format messages according to the specified format type
1016
- */
1017
- format(formatType) {
1018
- const result = effect.Effect.runSync(
1019
- effect.pipe(
1020
- this.effect,
1021
- effect.Effect.map((messages) => {
1022
- if (formatType === "json" /* JSON */) {
1023
- return JSON.stringify(messages, null, 2);
1024
- }
1025
- const formatter = typeOnFormatter[formatType];
1026
- return formatter(messages);
1027
- })
1028
- )
1029
- );
1030
- return result;
1031
- }
1032
- // Sink methods
1033
- /**
1034
- * Convert to array - runs the effect and returns the result
1035
- return pipe(
1036
- this.effect,
1037
- Effect.map((messages) => {
1038
- if (formatType === FormatType.JSON) {
1039
- return JSON.stringify(messages, null, 2);
1040
- }
1041
-
1042
- const formatter = typeOnFormatter[formatType];
1043
- return formatter(messages);
1044
- })
1045
- );
1046
- }
1047
-
1048
- // Sink methods
1049
-
1050
- /**
1051
- * Convert to array - runs the effect and returns the result
1052
- */
1053
- toArray() {
1054
- return effect.Effect.runSync(this.effect);
1055
- }
1056
- /**
1057
- * Convert to string - runs the effect and returns JSON string
1058
- */
1059
- toString() {
1060
- const result = effect.Effect.runSync(
1061
- effect.pipe(
1062
- this.effect,
1063
- effect.Effect.map((messages) => JSON.stringify(messages, null, 2))
1064
- )
1065
- );
1066
- return result;
1067
- }
1068
- /**
1069
- * Get the count of messages
1070
- */
1071
- count() {
1072
- const result = effect.Effect.runSync(
1073
- effect.pipe(
1074
- this.effect,
1075
- effect.Effect.map((messages) => messages.length)
1076
- )
1077
- );
1078
- return result;
1079
- }
1080
- };
1081
811
  var KEBAB_CASE_REGEX = /^[a-z0-9]+(-[a-z0-9]+)*$/;
1082
812
  var ChannelName = effect.Brand.refined(
1083
813
  (s) => typeof s === "string" && KEBAB_CASE_REGEX.test(s),
@@ -2206,7 +1936,6 @@ exports.Pump = Pump;
2206
1936
  exports.Sink = Sink;
2207
1937
  exports.Skill = Skill;
2208
1938
  exports.SocketIoFactory = SocketIoFactory;
2209
- exports.TransformMessages = TransformMessages;
2210
1939
  exports.consoleTracer = consoleTracer;
2211
1940
  exports.consoleTracerLayer = consoleTracerLayer;
2212
1941
  exports.ensureFullWords = ensureFullWords;