@agentica/core 0.23.0 → 0.25.0

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.
Files changed (191) hide show
  1. package/README.md +1 -1
  2. package/lib/Agentica.d.ts +7 -2
  3. package/lib/Agentica.js +12 -7
  4. package/lib/Agentica.js.map +1 -1
  5. package/lib/MicroAgentica.d.ts +2 -2
  6. package/lib/MicroAgentica.js +4 -4
  7. package/lib/MicroAgentica.js.map +1 -1
  8. package/lib/context/AgenticaContext.d.ts +6 -2
  9. package/lib/context/MicroAgenticaContext.d.ts +2 -2
  10. package/lib/context/index.d.ts +5 -0
  11. package/lib/{structures/mcp → context}/index.js +5 -1
  12. package/lib/context/index.js.map +1 -0
  13. package/lib/events/AgenticaAssistantMessageEvent.d.ts +9 -0
  14. package/lib/{histories/AgenticaUserInputHistory.js → events/AgenticaAssistantMessageEvent.js} +1 -1
  15. package/lib/events/AgenticaAssistantMessageEvent.js.map +1 -0
  16. package/lib/events/AgenticaEvent.d.ts +9 -9
  17. package/lib/events/AgenticaUserMessageEvent.d.ts +9 -0
  18. package/lib/events/{AgenticaUserInputEvent.js → AgenticaUserMessageEvent.js} +1 -1
  19. package/lib/events/AgenticaUserMessageEvent.js.map +1 -0
  20. package/lib/events/MicroAgenticaEvent.d.ts +6 -6
  21. package/lib/events/index.d.ts +14 -0
  22. package/lib/events/index.js +31 -0
  23. package/lib/events/index.js.map +1 -0
  24. package/lib/factory/events.d.ts +8 -8
  25. package/lib/factory/events.js +23 -38
  26. package/lib/factory/events.js.map +1 -1
  27. package/lib/factory/histories.d.ts +1 -36
  28. package/lib/factory/histories.js +77 -24
  29. package/lib/factory/histories.js.map +1 -1
  30. package/lib/functional/assertHttpController.js +6 -6
  31. package/lib/functional/assertHttpLlmApplication.js +6 -6
  32. package/lib/functional/assertMcpController.d.ts +1 -2
  33. package/lib/functional/assertMcpController.js +6 -6
  34. package/lib/functional/assertMcpController.js.map +1 -1
  35. package/lib/functional/index.d.ts +6 -0
  36. package/lib/functional/index.js +23 -0
  37. package/lib/functional/index.js.map +1 -0
  38. package/lib/functional/validateHttpController.js +5 -5
  39. package/lib/functional/validateHttpLlmApplication.js +5 -5
  40. package/lib/functional/validateMcpController.d.ts +1 -2
  41. package/lib/functional/validateMcpController.js +11 -11
  42. package/lib/functional/validateMcpController.js.map +1 -1
  43. package/lib/histories/{AgenticaTextHistory.d.ts → AgenticaAssistantMessageHistory.d.ts} +1 -2
  44. package/lib/histories/AgenticaAssistantMessageHistory.js +3 -0
  45. package/lib/histories/AgenticaAssistantMessageHistory.js.map +1 -0
  46. package/lib/histories/AgenticaHistory.d.ts +7 -7
  47. package/lib/histories/AgenticaUserMessageHistory.d.ts +6 -0
  48. package/lib/{events/AgenticaTextEvent.js → histories/AgenticaUserMessageHistory.js} +1 -1
  49. package/lib/histories/AgenticaUserMessageHistory.js.map +1 -0
  50. package/lib/histories/MicroAgenticaHistory.d.ts +5 -4
  51. package/lib/histories/contents/AgenticaUserMessageAudioContent.d.ts +19 -0
  52. package/lib/histories/contents/AgenticaUserMessageAudioContent.js +3 -0
  53. package/lib/histories/contents/AgenticaUserMessageAudioContent.js.map +1 -0
  54. package/lib/histories/contents/AgenticaUserMessageContent.d.ts +14 -0
  55. package/lib/histories/{AgenticaTextHistory.js → contents/AgenticaUserMessageContent.js} +1 -1
  56. package/lib/histories/contents/AgenticaUserMessageContent.js.map +1 -0
  57. package/lib/histories/contents/AgenticaUserMessageContentBase.d.ts +6 -0
  58. package/lib/histories/contents/AgenticaUserMessageContentBase.js +3 -0
  59. package/lib/histories/contents/AgenticaUserMessageContentBase.js.map +1 -0
  60. package/lib/histories/contents/AgenticaUserMessageFileContent.d.ts +26 -0
  61. package/lib/histories/contents/AgenticaUserMessageFileContent.js +3 -0
  62. package/lib/histories/contents/AgenticaUserMessageFileContent.js.map +1 -0
  63. package/lib/histories/contents/AgenticaUserMessageImageContent.d.ts +20 -0
  64. package/lib/histories/contents/AgenticaUserMessageImageContent.js +3 -0
  65. package/lib/histories/contents/AgenticaUserMessageImageContent.js.map +1 -0
  66. package/lib/histories/contents/AgenticaUserMessageTextContent.d.ts +14 -0
  67. package/lib/histories/contents/AgenticaUserMessageTextContent.js +3 -0
  68. package/lib/histories/contents/AgenticaUserMessageTextContent.js.map +1 -0
  69. package/lib/histories/contents/index.d.ts +5 -0
  70. package/lib/histories/contents/index.js +22 -0
  71. package/lib/histories/contents/index.js.map +1 -0
  72. package/lib/histories/index.d.ts +9 -0
  73. package/lib/histories/index.js +26 -0
  74. package/lib/histories/index.js.map +1 -0
  75. package/lib/index.d.ts +6 -45
  76. package/lib/index.js +6 -46
  77. package/lib/index.js.map +1 -1
  78. package/lib/index.mjs +155 -135
  79. package/lib/index.mjs.map +1 -1
  80. package/lib/json/IAgenticaEventJson.d.ts +29 -23
  81. package/lib/json/IAgenticaHistoryJson.d.ts +24 -19
  82. package/lib/json/IMicroAgenticaEventJson.d.ts +1 -1
  83. package/lib/json/IMicroAgenticaHistoryJson.d.ts +1 -1
  84. package/lib/json/index.d.ts +7 -0
  85. package/lib/json/index.js +24 -0
  86. package/lib/json/index.js.map +1 -0
  87. package/lib/orchestrate/call.js +4 -4
  88. package/lib/orchestrate/call.js.map +1 -1
  89. package/lib/orchestrate/cancel.js +1 -1
  90. package/lib/orchestrate/cancel.js.map +1 -1
  91. package/lib/orchestrate/initialize.js +4 -4
  92. package/lib/orchestrate/initialize.js.map +1 -1
  93. package/lib/orchestrate/select.js +3 -3
  94. package/lib/orchestrate/select.js.map +1 -1
  95. package/lib/structures/IAgenticaController.d.ts +1 -2
  96. package/lib/structures/index.d.ts +10 -0
  97. package/lib/structures/index.js +27 -0
  98. package/lib/structures/index.js.map +1 -0
  99. package/lib/transformers/transformEvent.d.ts +1 -0
  100. package/lib/transformers/{AgenticaEventTransformer.js → transformEvent.js} +74 -31
  101. package/lib/transformers/transformEvent.js.map +1 -0
  102. package/lib/transformers/transformHistory.d.ts +1 -0
  103. package/lib/transformers/{AgenticaHistoryTransformer.js → transformHistory.js} +24 -23
  104. package/lib/transformers/transformHistory.js.map +1 -0
  105. package/lib/utils/ChatGptCompletionMessageUtil.js +2 -2
  106. package/lib/utils/ChatGptCompletionMessageUtil.spec.d.ts +1 -0
  107. package/lib/utils/ChatGptCompletionMessageUtil.spec.js +288 -0
  108. package/lib/utils/ChatGptCompletionMessageUtil.spec.js.map +1 -0
  109. package/lib/utils/ChatGptTokenUsageAggregator.spec.d.ts +1 -0
  110. package/lib/utils/ChatGptTokenUsageAggregator.spec.js +199 -0
  111. package/lib/utils/ChatGptTokenUsageAggregator.spec.js.map +1 -0
  112. package/lib/utils/Singleton.js +18 -0
  113. package/lib/utils/Singleton.js.map +1 -1
  114. package/lib/utils/Singleton.spec.d.ts +1 -0
  115. package/lib/utils/Singleton.spec.js +106 -0
  116. package/lib/utils/Singleton.spec.js.map +1 -0
  117. package/lib/utils/__map_take.spec.d.ts +1 -0
  118. package/lib/utils/__map_take.spec.js +108 -0
  119. package/lib/utils/__map_take.spec.js.map +1 -0
  120. package/package.json +5 -6
  121. package/src/Agentica.ts +25 -10
  122. package/src/MicroAgentica.ts +12 -9
  123. package/src/context/AgenticaContext.ts +7 -2
  124. package/src/context/MicroAgenticaContext.ts +2 -2
  125. package/src/context/index.ts +5 -0
  126. package/src/events/AgenticaAssistantMessageEvent.ts +12 -0
  127. package/src/events/AgenticaEvent.ts +15 -15
  128. package/src/events/AgenticaUserMessageEvent.ts +12 -0
  129. package/src/events/MicroAgenticaEvent.ts +9 -9
  130. package/src/events/index.ts +14 -0
  131. package/src/factory/events.ts +29 -34
  132. package/src/factory/histories.ts +81 -32
  133. package/src/functional/assertMcpController.ts +4 -2
  134. package/src/functional/index.ts +7 -0
  135. package/src/functional/validateMcpController.ts +4 -2
  136. package/src/histories/{AgenticaTextHistory.ts → AgenticaAssistantMessageHistory.ts} +4 -2
  137. package/src/histories/AgenticaHistory.ts +8 -8
  138. package/src/histories/AgenticaUserMessageHistory.ts +11 -0
  139. package/src/histories/MicroAgenticaHistory.ts +6 -5
  140. package/src/histories/contents/AgenticaUserMessageAudioContent.ts +21 -0
  141. package/src/histories/contents/AgenticaUserMessageContent.ts +19 -0
  142. package/src/histories/contents/AgenticaUserMessageContentBase.ts +6 -0
  143. package/src/histories/contents/AgenticaUserMessageFileContent.ts +27 -0
  144. package/src/histories/contents/AgenticaUserMessageImageContent.ts +23 -0
  145. package/src/histories/contents/AgenticaUserMessageTextContent.ts +15 -0
  146. package/src/histories/contents/index.ts +5 -0
  147. package/src/histories/index.ts +9 -0
  148. package/src/index.ts +6 -54
  149. package/src/json/IAgenticaEventJson.ts +36 -28
  150. package/src/json/IAgenticaHistoryJson.ts +28 -22
  151. package/src/json/IMicroAgenticaEventJson.ts +2 -1
  152. package/src/json/IMicroAgenticaHistoryJson.ts +2 -1
  153. package/src/json/index.ts +7 -0
  154. package/src/orchestrate/call.ts +8 -8
  155. package/src/orchestrate/cancel.ts +2 -2
  156. package/src/orchestrate/initialize.ts +5 -5
  157. package/src/orchestrate/select.ts +5 -5
  158. package/src/structures/IAgenticaController.ts +4 -2
  159. package/src/structures/index.ts +10 -0
  160. package/src/transformers/{AgenticaEventTransformer.ts → transformEvent.ts} +94 -42
  161. package/src/transformers/{AgenticaHistoryTransformer.ts → transformHistory.ts} +30 -26
  162. package/src/utils/ChatGptCompletionMessageUtil.spec.ts +320 -0
  163. package/src/utils/ChatGptTokenUsageAggregator.spec.ts +226 -0
  164. package/src/utils/Singleton.spec.ts +138 -0
  165. package/src/utils/Singleton.ts +18 -0
  166. package/src/utils/__map_take.spec.ts +140 -0
  167. package/lib/events/AgenticaTextEvent.d.ts +0 -10
  168. package/lib/events/AgenticaTextEvent.js.map +0 -1
  169. package/lib/events/AgenticaUserInputEvent.d.ts +0 -10
  170. package/lib/events/AgenticaUserInputEvent.js.map +0 -1
  171. package/lib/histories/AgenticaTextHistory.js.map +0 -1
  172. package/lib/histories/AgenticaUserInputHistory.d.ts +0 -80
  173. package/lib/histories/AgenticaUserInputHistory.js.map +0 -1
  174. package/lib/structures/mcp/IMcpLlmTransportProps.d.ts +0 -11
  175. package/lib/structures/mcp/IMcpLlmTransportProps.js +0 -3
  176. package/lib/structures/mcp/IMcpLlmTransportProps.js.map +0 -1
  177. package/lib/structures/mcp/index.d.ts +0 -1
  178. package/lib/structures/mcp/index.js.map +0 -1
  179. package/lib/transformers/AgenticaEventTransformer.d.ts +0 -63
  180. package/lib/transformers/AgenticaEventTransformer.js.map +0 -1
  181. package/lib/transformers/AgenticaHistoryTransformer.d.ts +0 -41
  182. package/lib/transformers/AgenticaHistoryTransformer.js.map +0 -1
  183. package/lib/utils/MathUtil.d.ts +0 -3
  184. package/lib/utils/MathUtil.js +0 -8
  185. package/lib/utils/MathUtil.js.map +0 -1
  186. package/src/events/AgenticaTextEvent.ts +0 -12
  187. package/src/events/AgenticaUserInputEvent.ts +0 -12
  188. package/src/histories/AgenticaUserInputHistory.ts +0 -88
  189. package/src/structures/mcp/IMcpLlmTransportProps.ts +0 -13
  190. package/src/structures/mcp/index.ts +0 -1
  191. package/src/utils/MathUtil.ts +0 -3
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ChatGptTokenUsageAggregator_1 = require("./ChatGptTokenUsageAggregator");
4
+ describe("chatGptTokenUsageAggregator", () => {
5
+ describe("sum", () => {
6
+ it("should sum basic token usage", () => {
7
+ const usage1 = {
8
+ prompt_tokens: 10,
9
+ completion_tokens: 5,
10
+ total_tokens: 15,
11
+ };
12
+ const usage2 = {
13
+ prompt_tokens: 20,
14
+ completion_tokens: 10,
15
+ total_tokens: 30,
16
+ };
17
+ const result = ChatGptTokenUsageAggregator_1.ChatGptTokenUsageAggregator.sum(usage1, usage2);
18
+ expect(result).toEqual({
19
+ prompt_tokens: 30,
20
+ completion_tokens: 15,
21
+ total_tokens: 45,
22
+ completion_tokens_details: {
23
+ accepted_prediction_tokens: 0,
24
+ reasoning_tokens: 0,
25
+ rejected_prediction_tokens: 0,
26
+ },
27
+ prompt_tokens_details: {
28
+ audio_tokens: 0,
29
+ cached_tokens: 0,
30
+ },
31
+ });
32
+ });
33
+ it("should handle undefined values", () => {
34
+ const usage1 = {
35
+ prompt_tokens: 10,
36
+ completion_tokens: 5,
37
+ total_tokens: 15,
38
+ };
39
+ const usage2 = {
40
+ // @ts-expect-error - intended to be undefined
41
+ prompt_tokens: undefined,
42
+ // @ts-expect-error - intended to be undefined
43
+ completion_tokens: undefined,
44
+ // @ts-expect-error - intended to be undefined
45
+ total_tokens: undefined,
46
+ };
47
+ const result = ChatGptTokenUsageAggregator_1.ChatGptTokenUsageAggregator.sum(usage1, usage2);
48
+ expect(result).toEqual({
49
+ prompt_tokens: 10,
50
+ completion_tokens: 5,
51
+ total_tokens: 15,
52
+ completion_tokens_details: {
53
+ accepted_prediction_tokens: 0,
54
+ reasoning_tokens: 0,
55
+ rejected_prediction_tokens: 0,
56
+ },
57
+ prompt_tokens_details: {
58
+ audio_tokens: 0,
59
+ cached_tokens: 0,
60
+ },
61
+ });
62
+ });
63
+ it("should sum completion token details", () => {
64
+ const usage1 = {
65
+ prompt_tokens: 10,
66
+ completion_tokens: 5,
67
+ total_tokens: 15,
68
+ completion_tokens_details: {
69
+ accepted_prediction_tokens: 3,
70
+ reasoning_tokens: 1,
71
+ rejected_prediction_tokens: 1,
72
+ },
73
+ };
74
+ const usage2 = {
75
+ prompt_tokens: 20,
76
+ completion_tokens: 10,
77
+ total_tokens: 30,
78
+ completion_tokens_details: {
79
+ accepted_prediction_tokens: 7,
80
+ reasoning_tokens: 2,
81
+ rejected_prediction_tokens: 1,
82
+ },
83
+ };
84
+ const result = ChatGptTokenUsageAggregator_1.ChatGptTokenUsageAggregator.sum(usage1, usage2);
85
+ expect(result.completion_tokens_details).toEqual({
86
+ accepted_prediction_tokens: 10,
87
+ reasoning_tokens: 3,
88
+ rejected_prediction_tokens: 2,
89
+ });
90
+ });
91
+ it("should handle undefined completion token details", () => {
92
+ const usage1 = {
93
+ prompt_tokens: 10,
94
+ completion_tokens: 5,
95
+ total_tokens: 15,
96
+ completion_tokens_details: {
97
+ accepted_prediction_tokens: 3,
98
+ reasoning_tokens: 1,
99
+ rejected_prediction_tokens: 1,
100
+ },
101
+ };
102
+ const usage2 = {
103
+ prompt_tokens: 20,
104
+ completion_tokens: 10,
105
+ total_tokens: 30,
106
+ };
107
+ const result = ChatGptTokenUsageAggregator_1.ChatGptTokenUsageAggregator.sum(usage1, usage2);
108
+ expect(result.completion_tokens_details).toEqual({
109
+ accepted_prediction_tokens: 3,
110
+ reasoning_tokens: 1,
111
+ rejected_prediction_tokens: 1,
112
+ });
113
+ });
114
+ it("should sum prompt token details", () => {
115
+ const usage1 = {
116
+ prompt_tokens: 10,
117
+ completion_tokens: 5,
118
+ total_tokens: 15,
119
+ prompt_tokens_details: {
120
+ audio_tokens: 3,
121
+ cached_tokens: 2,
122
+ },
123
+ };
124
+ const usage2 = {
125
+ prompt_tokens: 20,
126
+ completion_tokens: 10,
127
+ total_tokens: 30,
128
+ prompt_tokens_details: {
129
+ audio_tokens: 7,
130
+ cached_tokens: 3,
131
+ },
132
+ };
133
+ const result = ChatGptTokenUsageAggregator_1.ChatGptTokenUsageAggregator.sum(usage1, usage2);
134
+ expect(result.prompt_tokens_details).toEqual({
135
+ audio_tokens: 10,
136
+ cached_tokens: 5,
137
+ });
138
+ });
139
+ it("should handle undefined prompt token details", () => {
140
+ const usage1 = {
141
+ prompt_tokens: 10,
142
+ completion_tokens: 5,
143
+ total_tokens: 15,
144
+ prompt_tokens_details: {
145
+ audio_tokens: 3,
146
+ cached_tokens: 2,
147
+ },
148
+ };
149
+ const usage2 = {
150
+ prompt_tokens: 20,
151
+ completion_tokens: 10,
152
+ total_tokens: 30,
153
+ };
154
+ const result = ChatGptTokenUsageAggregator_1.ChatGptTokenUsageAggregator.sum(usage1, usage2);
155
+ expect(result.prompt_tokens_details).toEqual({
156
+ audio_tokens: 3,
157
+ cached_tokens: 2,
158
+ });
159
+ });
160
+ it("should handle all undefined values", () => {
161
+ const usage1 = {
162
+ // @ts-expect-error - intended to be undefined
163
+ prompt_tokens: undefined,
164
+ // @ts-expect-error - intended to be undefined
165
+ completion_tokens: undefined,
166
+ // @ts-expect-error - intended to be undefined
167
+ total_tokens: undefined,
168
+ completion_tokens_details: undefined,
169
+ prompt_tokens_details: undefined,
170
+ };
171
+ const usage2 = {
172
+ // @ts-expect-error - intended to be undefined
173
+ prompt_tokens: undefined,
174
+ // @ts-expect-error - intended to be undefined
175
+ completion_tokens: undefined,
176
+ // @ts-expect-error - intended to be undefined
177
+ total_tokens: undefined,
178
+ completion_tokens_details: undefined,
179
+ prompt_tokens_details: undefined,
180
+ };
181
+ const result = ChatGptTokenUsageAggregator_1.ChatGptTokenUsageAggregator.sum(usage1, usage2);
182
+ expect(result).toEqual({
183
+ prompt_tokens: 0,
184
+ completion_tokens: 0,
185
+ total_tokens: 0,
186
+ completion_tokens_details: {
187
+ accepted_prediction_tokens: 0,
188
+ reasoning_tokens: 0,
189
+ rejected_prediction_tokens: 0,
190
+ },
191
+ prompt_tokens_details: {
192
+ audio_tokens: 0,
193
+ cached_tokens: 0,
194
+ },
195
+ });
196
+ });
197
+ });
198
+ });
199
+ //# sourceMappingURL=ChatGptTokenUsageAggregator.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatGptTokenUsageAggregator.spec.js","sourceRoot":"","sources":["../../src/utils/ChatGptTokenUsageAggregator.spec.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,24 @@ exports.Singleton = void 0;
7
7
  const NOT_MOUNTED_YET = {};
8
8
  /**
9
9
  * @internal
10
+ *
11
+ * @description
12
+ * A singleton class that creates a single instance of a class.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const singleton = new Singleton((name: string) => new SomeClass(name));
17
+ * const instance = singleton.get("test");
18
+ * ```
19
+ *
20
+ * but next case is not work
21
+ * ```ts
22
+ * const singleton = new Singleton((name: string) => new SomeClass(name));
23
+ * const instance = singleton.get("test");
24
+ * const instance2 = singleton.get("test2");
25
+ *
26
+ * expect(instance).toBe(instance2); // true
27
+ * ```
10
28
  */
11
29
  class Singleton {
12
30
  constructor(closure) {
@@ -1 +1 @@
1
- {"version":3,"file":"Singleton.js","sourceRoot":"","sources":["../../src/utils/Singleton.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;GAEG;AACH,MAAa,SAAS;IAIpB,YAAmB,OAA6B;QAC9C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;IAChC,CAAC;IAEM,GAAG,CAAC,GAAG,IAAU;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC,MAAW,CAAC;IAC1B,CAAC;CACF;AAfD,8BAeC"}
1
+ {"version":3,"file":"Singleton.js","sourceRoot":"","sources":["../../src/utils/Singleton.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAa,SAAS;IAIpB,YAAmB,OAA6B;QAC9C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;IAChC,CAAC;IAEM,GAAG,CAAC,GAAG,IAAU;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC,MAAW,CAAC;IAC1B,CAAC;CACF;AAfD,8BAeC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Singleton_1 = require("./Singleton");
4
+ describe("singleton", () => {
5
+ describe("basic functionality", () => {
6
+ it("should create instance only once", () => {
7
+ const factory = () => ({ value: 42 });
8
+ const singleton = new Singleton_1.Singleton(factory);
9
+ const instance1 = singleton.get();
10
+ const instance2 = singleton.get();
11
+ expect(instance1).toBe(instance2);
12
+ expect(instance1.value).toBe(42);
13
+ });
14
+ it("should create different instances for different singletons", () => {
15
+ const factory1 = () => ({ value: 42 });
16
+ const factory2 = () => ({ value: 24 });
17
+ const singleton1 = new Singleton_1.Singleton(factory1);
18
+ const singleton2 = new Singleton_1.Singleton(factory2);
19
+ const instance1 = singleton1.get();
20
+ const instance2 = singleton2.get();
21
+ expect(instance1).not.toBe(instance2);
22
+ expect(instance1.value).toBe(42);
23
+ expect(instance2.value).toBe(24);
24
+ });
25
+ });
26
+ describe("constructor arguments", () => {
27
+ it("should pass constructor arguments to factory", () => {
28
+ const factory = (value) => ({ value });
29
+ const singleton = new Singleton_1.Singleton(factory);
30
+ const instance = singleton.get(42);
31
+ expect(instance.value).toBe(42);
32
+ });
33
+ it("should use same instance with same constructor arguments", () => {
34
+ const factory = (value) => ({ value });
35
+ const singleton = new Singleton_1.Singleton(factory);
36
+ const instance1 = singleton.get(42);
37
+ const instance2 = singleton.get(42);
38
+ expect(instance1).toBe(instance2);
39
+ expect(instance1.value).toBe(42);
40
+ });
41
+ it("should return same instance even with different constructor arguments", () => {
42
+ const factory = (value) => ({ value });
43
+ const singleton = new Singleton_1.Singleton(factory);
44
+ const instance1 = singleton.get(42);
45
+ const instance2 = singleton.get(24);
46
+ expect(instance1).toBe(instance2);
47
+ expect(instance1.value).toBe(42);
48
+ expect(instance2.value).toBe(42);
49
+ });
50
+ });
51
+ describe("complex object types", () => {
52
+ it("should handle complex objects", () => {
53
+ const factory = (id, name, value) => ({
54
+ id,
55
+ data: { name, value },
56
+ timestamp: new Date(),
57
+ });
58
+ const singleton = new Singleton_1.Singleton(factory);
59
+ const instance = singleton.get(1, "test", 42);
60
+ expect(instance.id).toBe(1);
61
+ expect(instance.data.name).toBe("test");
62
+ expect(instance.data.value).toBe(42);
63
+ expect(instance.timestamp).toBeInstanceOf(Date);
64
+ });
65
+ it("should maintain same complex object instance", () => {
66
+ const factory = () => ({
67
+ data: new Map([["key", 42]]),
68
+ array: [1, 2, 3],
69
+ });
70
+ const singleton = new Singleton_1.Singleton(factory);
71
+ const instance1 = singleton.get();
72
+ const instance2 = singleton.get();
73
+ expect(instance1).toBe(instance2);
74
+ expect(instance1.data).toBe(instance2.data);
75
+ expect(instance1.array).toBe(instance2.array);
76
+ });
77
+ });
78
+ describe("edge cases", () => {
79
+ it("should handle null factory return", () => {
80
+ const factory = () => null;
81
+ const singleton = new Singleton_1.Singleton(factory);
82
+ const instance = singleton.get();
83
+ expect(instance).toBeNull();
84
+ });
85
+ it("should handle undefined factory return", () => {
86
+ const factory = () => undefined;
87
+ const singleton = new Singleton_1.Singleton(factory);
88
+ const instance = singleton.get();
89
+ expect(instance).toBeUndefined();
90
+ });
91
+ it("should handle primitive values", () => {
92
+ const factory = () => 42;
93
+ const singleton = new Singleton_1.Singleton(factory);
94
+ const instance = singleton.get();
95
+ expect(instance).toBe(42);
96
+ });
97
+ it("should handle factory throwing error", () => {
98
+ const factory = () => {
99
+ throw new Error("Factory error");
100
+ };
101
+ const singleton = new Singleton_1.Singleton(factory);
102
+ expect(() => singleton.get()).toThrow("Factory error");
103
+ });
104
+ });
105
+ });
106
+ //# sourceMappingURL=Singleton.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Singleton.spec.js","sourceRoot":"","sources":["../../src/utils/Singleton.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const __map_take_1 = require("./__map_take");
4
+ describe("__map_take", () => {
5
+ describe("basic functionality", () => {
6
+ it("should generate value for new key", () => {
7
+ const map = new Map();
8
+ const generator = () => 42;
9
+ const result = (0, __map_take_1.__map_take)(map, "test", generator);
10
+ expect(result).toBe(42);
11
+ expect(map.get("test")).toBe(42);
12
+ });
13
+ it("should return existing value for existing key", () => {
14
+ const map = new Map();
15
+ map.set("test", 100);
16
+ const generator = () => 42;
17
+ const result = (0, __map_take_1.__map_take)(map, "test", generator);
18
+ expect(result).toBe(100);
19
+ expect(map.get("test")).toBe(100);
20
+ });
21
+ });
22
+ describe("various type tests", () => {
23
+ it("should handle object type", () => {
24
+ const map = new Map();
25
+ const generator = () => ({ value: 42 });
26
+ const result = (0, __map_take_1.__map_take)(map, "test", generator);
27
+ expect(result).toEqual({ value: 42 });
28
+ expect(map.get("test")).toEqual({ value: 42 });
29
+ });
30
+ it("should handle array type", () => {
31
+ const map = new Map();
32
+ const generator = () => [1, 2, 3];
33
+ const result = (0, __map_take_1.__map_take)(map, "test", generator);
34
+ expect(result).toEqual([1, 2, 3]);
35
+ expect(map.get("test")).toEqual([1, 2, 3]);
36
+ });
37
+ it("should handle function type", () => {
38
+ var _a;
39
+ const map = new Map();
40
+ const generator = () => () => 42;
41
+ const result = (0, __map_take_1.__map_take)(map, "test", generator);
42
+ expect(result()).toBe(42);
43
+ expect((_a = map.get("test")) === null || _a === void 0 ? void 0 : _a()).toBe(42);
44
+ });
45
+ });
46
+ describe("edge cases", () => {
47
+ it("should handle null key", () => {
48
+ const map = new Map();
49
+ const generator = () => "test";
50
+ const result = (0, __map_take_1.__map_take)(map, null, generator);
51
+ expect(result).toBe("test");
52
+ expect(map.get(null)).toBe("test");
53
+ });
54
+ it("should handle undefined key", () => {
55
+ const map = new Map();
56
+ const generator = () => "test";
57
+ const result = (0, __map_take_1.__map_take)(map, undefined, generator);
58
+ expect(result).toBe("test");
59
+ expect(map.get(undefined)).toBe("test");
60
+ });
61
+ it("should handle empty string key", () => {
62
+ const map = new Map();
63
+ const generator = () => "test";
64
+ const result = (0, __map_take_1.__map_take)(map, "", generator);
65
+ expect(result).toBe("test");
66
+ expect(map.get("")).toBe("test");
67
+ });
68
+ });
69
+ describe("generator function tests", () => {
70
+ it("should not call generator multiple times", () => {
71
+ const map = new Map();
72
+ let callCount = 0;
73
+ const generator = () => {
74
+ callCount++;
75
+ return 42;
76
+ };
77
+ (0, __map_take_1.__map_take)(map, "test", generator);
78
+ (0, __map_take_1.__map_take)(map, "test", generator);
79
+ expect(callCount).toBe(1);
80
+ });
81
+ it("should handle generator throwing error", () => {
82
+ const map = new Map();
83
+ const generator = () => {
84
+ throw new Error("Generator error");
85
+ };
86
+ expect(() => (0, __map_take_1.__map_take)(map, "test", generator)).toThrow("Generator error");
87
+ });
88
+ it("should handle generator returning undefined", () => {
89
+ const map = new Map();
90
+ const generator = () => undefined;
91
+ const result = (0, __map_take_1.__map_take)(map, "test", generator);
92
+ expect(result).toBeUndefined();
93
+ expect(map.get("test")).toBeUndefined();
94
+ });
95
+ });
96
+ describe("concurrency tests", () => {
97
+ it("should handle concurrent access to same key", () => {
98
+ const map = new Map();
99
+ const generator = () => 42;
100
+ const result1 = (0, __map_take_1.__map_take)(map, "test", generator);
101
+ const result2 = (0, __map_take_1.__map_take)(map, "test", generator);
102
+ expect(result1).toBe(42);
103
+ expect(result2).toBe(42);
104
+ expect(map.get("test")).toBe(42);
105
+ });
106
+ });
107
+ });
108
+ //# sourceMappingURL=__map_take.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"__map_take.spec.js","sourceRoot":"","sources":["../../src/utils/__map_take.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentica/core",
3
- "version": "0.23.0",
3
+ "version": "0.25.0",
4
4
  "description": "Agentic AI Library specialized in LLM Function Calling",
5
5
  "author": "Wrtn Technologies",
6
6
  "license": "MIT",
@@ -36,14 +36,13 @@
36
36
  "access": "public"
37
37
  },
38
38
  "peerDependencies": {
39
- "@modelcontextprotocol/sdk": "^1.9.0",
40
- "@samchon/openapi": "^4.2.0",
39
+ "@samchon/openapi": "^4.3.0",
41
40
  "openai": "^4.80.0",
42
- "typia": "^9.0.1"
41
+ "typia": "^9.3.0"
43
42
  },
44
43
  "dependencies": {
45
- "@samchon/openapi": "^4.2.0",
46
- "typia": "^9.0.1",
44
+ "@samchon/openapi": "^4.3.0",
45
+ "typia": "^9.3.0",
47
46
  "uuid": "^11.0.4"
48
47
  },
49
48
  "devDependencies": {
package/src/Agentica.ts CHANGED
@@ -6,8 +6,9 @@ import type { AgenticaOperationCollection } from "./context/AgenticaOperationCol
6
6
  import type { AgenticaOperationSelection } from "./context/AgenticaOperationSelection";
7
7
  import type { AgenticaEvent } from "./events/AgenticaEvent";
8
8
  import type { AgenticaRequestEvent } from "./events/AgenticaRequestEvent";
9
+ import type { AgenticaUserMessageContent } from "./histories";
9
10
  import type { AgenticaHistory } from "./histories/AgenticaHistory";
10
- import type { AgenticaUserInputHistory } from "./histories/AgenticaUserInputHistory";
11
+ import type { AgenticaUserMessageHistory } from "./histories/AgenticaUserMessageHistory";
11
12
  import type { IAgenticaConfig } from "./structures/IAgenticaConfig";
12
13
  import type { IAgenticaController } from "./structures/IAgenticaController";
13
14
  import type { IAgenticaProps } from "./structures/IAgenticaProps";
@@ -16,10 +17,10 @@ import type { IAgenticaVendor } from "./structures/IAgenticaVendor";
16
17
  import { AgenticaTokenUsage } from "./context/AgenticaTokenUsage";
17
18
  import { AgenticaOperationComposer } from "./context/internal/AgenticaOperationComposer";
18
19
  import { AgenticaTokenUsageAggregator } from "./context/internal/AgenticaTokenUsageAggregator";
19
- import { createUserInputHistory } from "./factory";
20
- import { createInitializeEvent, createRequestEvent, createUserInputEvent } from "./factory/events";
20
+ import { createUserMessageHistory } from "./factory";
21
+ import { createInitializeEvent, createRequestEvent, createUserMessageEvent } from "./factory/events";
21
22
  import { execute } from "./orchestrate/execute";
22
- import { AgenticaHistoryTransformer } from "./transformers/AgenticaHistoryTransformer";
23
+ import { transformHistory } from "./transformers/transformHistory";
23
24
  import { __map_take } from "./utils/__map_take";
24
25
  import { ChatGptCompletionMessageUtil } from "./utils/ChatGptCompletionMessageUtil";
25
26
  import { streamDefaultReaderToAsyncGenerator, StreamUtil } from "./utils/StreamUtil";
@@ -86,7 +87,7 @@ export class Agentica<Model extends ILlmSchema.Model> {
86
87
  this.stack_ = [];
87
88
  this.listeners_ = new Map();
88
89
  this.histories_ = (props.histories ?? []).map(input =>
89
- AgenticaHistoryTransformer.transform({
90
+ transformHistory({
90
91
  operations: this.operations_.group,
91
92
  history: input,
92
93
  }),
@@ -124,10 +125,18 @@ export class Agentica<Model extends ILlmSchema.Model> {
124
125
  * function calling information like {@link AgenticaExecuteHistory}.
125
126
  *
126
127
  * @param content The content to talk
128
+ * @param options Options
129
+ * @param options.abortSignal Abort signal
130
+ * @throws AbortError
127
131
  * @returns List of newly created chat prompts
128
132
  */
129
- public async conversate(content: string | AgenticaUserInputHistory.Contents | Array<AgenticaUserInputHistory.Contents>): Promise<AgenticaHistory<Model>[]> {
130
- const prompt: AgenticaUserInputHistory = createUserInputHistory({
133
+ public async conversate(
134
+ content: string | AgenticaUserMessageContent | Array<AgenticaUserMessageContent>,
135
+ options: {
136
+ abortSignal?: AbortSignal;
137
+ } = {},
138
+ ): Promise<AgenticaHistory<Model>[]> {
139
+ const prompt: AgenticaUserMessageHistory = createUserMessageHistory({
131
140
  contents: Array.isArray(content)
132
141
  ? content
133
142
  : typeof content === "string"
@@ -139,7 +148,7 @@ export class Agentica<Model extends ILlmSchema.Model> {
139
148
  });
140
149
 
141
150
  this.dispatch(
142
- createUserInputEvent({
151
+ createUserMessageEvent({
143
152
  contents: prompt.contents,
144
153
  }),
145
154
  ).catch(() => {});
@@ -147,6 +156,7 @@ export class Agentica<Model extends ILlmSchema.Model> {
147
156
  const newbie: AgenticaHistory<Model>[] = await this.executor_(
148
157
  this.getContext({
149
158
  prompt,
159
+ abortSignal: options.abortSignal,
150
160
  usage: this.token_usage_,
151
161
  }),
152
162
  );
@@ -217,8 +227,9 @@ export class Agentica<Model extends ILlmSchema.Model> {
217
227
  * @internal
218
228
  */
219
229
  public getContext(props: {
220
- prompt: AgenticaUserInputHistory;
230
+ prompt: AgenticaUserMessageHistory;
221
231
  usage: AgenticaTokenUsage;
232
+ abortSignal?: AbortSignal;
222
233
  }): AgenticaContext<Model> {
223
234
  const dispatch = async (event: AgenticaEvent<Model>) => this.dispatch(event);
224
235
  return {
@@ -231,6 +242,7 @@ export class Agentica<Model extends ILlmSchema.Model> {
231
242
  stack: this.stack_,
232
243
  ready: () => this.ready_,
233
244
  prompt: props.prompt,
245
+ abortSignal: props.abortSignal,
234
246
 
235
247
  // HANDLERS
236
248
  dispatch: async event => this.dispatch(event),
@@ -246,7 +258,10 @@ export class Agentica<Model extends ILlmSchema.Model> {
246
258
  include_usage: true,
247
259
  },
248
260
  },
249
- options: this.props.vendor.options,
261
+ options: {
262
+ ...this.props.vendor.options,
263
+ signal: props.abortSignal,
264
+ },
250
265
  });
251
266
  await dispatch(event);
252
267