@aj-archipelago/cortex 1.3.62 → 1.3.63

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 (211) hide show
  1. package/.github/workflows/cortex-file-handler-test.yml +61 -0
  2. package/README.md +31 -7
  3. package/config/default.example.json +15 -0
  4. package/config.js +133 -12
  5. package/helper-apps/cortex-autogen2/DigiCertGlobalRootCA.crt.pem +22 -0
  6. package/helper-apps/cortex-autogen2/Dockerfile +31 -0
  7. package/helper-apps/cortex-autogen2/Dockerfile.worker +41 -0
  8. package/helper-apps/cortex-autogen2/README.md +183 -0
  9. package/helper-apps/cortex-autogen2/__init__.py +1 -0
  10. package/helper-apps/cortex-autogen2/agents.py +131 -0
  11. package/helper-apps/cortex-autogen2/docker-compose.yml +20 -0
  12. package/helper-apps/cortex-autogen2/function_app.py +55 -0
  13. package/helper-apps/cortex-autogen2/host.json +15 -0
  14. package/helper-apps/cortex-autogen2/main.py +126 -0
  15. package/helper-apps/cortex-autogen2/poetry.lock +3652 -0
  16. package/helper-apps/cortex-autogen2/pyproject.toml +36 -0
  17. package/helper-apps/cortex-autogen2/requirements.txt +20 -0
  18. package/helper-apps/cortex-autogen2/send_task.py +105 -0
  19. package/helper-apps/cortex-autogen2/services/__init__.py +1 -0
  20. package/helper-apps/cortex-autogen2/services/azure_queue.py +85 -0
  21. package/helper-apps/cortex-autogen2/services/redis_publisher.py +153 -0
  22. package/helper-apps/cortex-autogen2/task_processor.py +488 -0
  23. package/helper-apps/cortex-autogen2/tools/__init__.py +24 -0
  24. package/helper-apps/cortex-autogen2/tools/azure_blob_tools.py +175 -0
  25. package/helper-apps/cortex-autogen2/tools/azure_foundry_agents.py +601 -0
  26. package/helper-apps/cortex-autogen2/tools/coding_tools.py +72 -0
  27. package/helper-apps/cortex-autogen2/tools/download_tools.py +48 -0
  28. package/helper-apps/cortex-autogen2/tools/file_tools.py +545 -0
  29. package/helper-apps/cortex-autogen2/tools/search_tools.py +646 -0
  30. package/helper-apps/cortex-azure-cleaner/README.md +36 -0
  31. package/helper-apps/cortex-file-converter/README.md +93 -0
  32. package/helper-apps/cortex-file-converter/key_to_pdf.py +104 -0
  33. package/helper-apps/cortex-file-converter/list_blob_extensions.py +89 -0
  34. package/helper-apps/cortex-file-converter/process_azure_keynotes.py +181 -0
  35. package/helper-apps/cortex-file-converter/requirements.txt +1 -0
  36. package/helper-apps/cortex-file-handler/.env.test.azure.ci +7 -0
  37. package/helper-apps/cortex-file-handler/.env.test.azure.sample +1 -1
  38. package/helper-apps/cortex-file-handler/.env.test.gcs.ci +10 -0
  39. package/helper-apps/cortex-file-handler/.env.test.gcs.sample +2 -2
  40. package/helper-apps/cortex-file-handler/INTERFACE.md +41 -0
  41. package/helper-apps/cortex-file-handler/package.json +1 -1
  42. package/helper-apps/cortex-file-handler/scripts/setup-azure-container.js +41 -17
  43. package/helper-apps/cortex-file-handler/scripts/setup-test-containers.js +30 -15
  44. package/helper-apps/cortex-file-handler/scripts/test-azure.sh +32 -6
  45. package/helper-apps/cortex-file-handler/scripts/test-gcs.sh +24 -2
  46. package/helper-apps/cortex-file-handler/scripts/validate-env.js +128 -0
  47. package/helper-apps/cortex-file-handler/src/blobHandler.js +161 -51
  48. package/helper-apps/cortex-file-handler/src/constants.js +3 -0
  49. package/helper-apps/cortex-file-handler/src/fileChunker.js +10 -8
  50. package/helper-apps/cortex-file-handler/src/index.js +116 -9
  51. package/helper-apps/cortex-file-handler/src/redis.js +61 -1
  52. package/helper-apps/cortex-file-handler/src/services/ConversionService.js +11 -8
  53. package/helper-apps/cortex-file-handler/src/services/FileConversionService.js +2 -2
  54. package/helper-apps/cortex-file-handler/src/services/storage/AzureStorageProvider.js +88 -6
  55. package/helper-apps/cortex-file-handler/src/services/storage/GCSStorageProvider.js +58 -0
  56. package/helper-apps/cortex-file-handler/src/services/storage/StorageFactory.js +25 -5
  57. package/helper-apps/cortex-file-handler/src/services/storage/StorageProvider.js +9 -0
  58. package/helper-apps/cortex-file-handler/src/services/storage/StorageService.js +120 -16
  59. package/helper-apps/cortex-file-handler/src/start.js +27 -17
  60. package/helper-apps/cortex-file-handler/tests/FileConversionService.test.js +52 -1
  61. package/helper-apps/cortex-file-handler/tests/blobHandler.test.js +40 -0
  62. package/helper-apps/cortex-file-handler/tests/checkHashShortLived.test.js +553 -0
  63. package/helper-apps/cortex-file-handler/tests/cleanup.test.js +46 -52
  64. package/helper-apps/cortex-file-handler/tests/containerConversionFlow.test.js +451 -0
  65. package/helper-apps/cortex-file-handler/tests/containerNameParsing.test.js +229 -0
  66. package/helper-apps/cortex-file-handler/tests/containerParameterFlow.test.js +392 -0
  67. package/helper-apps/cortex-file-handler/tests/conversionResilience.test.js +7 -2
  68. package/helper-apps/cortex-file-handler/tests/deleteOperations.test.js +348 -0
  69. package/helper-apps/cortex-file-handler/tests/fileChunker.test.js +23 -2
  70. package/helper-apps/cortex-file-handler/tests/fileUpload.test.js +11 -5
  71. package/helper-apps/cortex-file-handler/tests/getOperations.test.js +58 -24
  72. package/helper-apps/cortex-file-handler/tests/postOperations.test.js +11 -4
  73. package/helper-apps/cortex-file-handler/tests/shortLivedUrlConversion.test.js +225 -0
  74. package/helper-apps/cortex-file-handler/tests/start.test.js +8 -12
  75. package/helper-apps/cortex-file-handler/tests/storage/StorageFactory.test.js +80 -0
  76. package/helper-apps/cortex-file-handler/tests/storage/StorageService.test.js +388 -22
  77. package/helper-apps/cortex-file-handler/tests/testUtils.helper.js +74 -0
  78. package/lib/cortexResponse.js +153 -0
  79. package/lib/entityConstants.js +21 -3
  80. package/lib/logger.js +21 -4
  81. package/lib/pathwayTools.js +28 -9
  82. package/lib/util.js +49 -0
  83. package/package.json +1 -1
  84. package/pathways/basePathway.js +1 -0
  85. package/pathways/bing_afagent.js +54 -1
  86. package/pathways/call_tools.js +2 -3
  87. package/pathways/chat_jarvis.js +1 -1
  88. package/pathways/google_cse.js +27 -0
  89. package/pathways/grok_live_search.js +18 -0
  90. package/pathways/system/entity/memory/sys_memory_lookup_required.js +1 -0
  91. package/pathways/system/entity/memory/sys_memory_required.js +1 -0
  92. package/pathways/system/entity/memory/sys_search_memory.js +1 -0
  93. package/pathways/system/entity/sys_entity_agent.js +56 -4
  94. package/pathways/system/entity/sys_generator_quick.js +1 -0
  95. package/pathways/system/entity/tools/sys_tool_bing_search_afagent.js +26 -0
  96. package/pathways/system/entity/tools/sys_tool_google_search.js +141 -0
  97. package/pathways/system/entity/tools/sys_tool_grok_x_search.js +237 -0
  98. package/pathways/system/entity/tools/sys_tool_image.js +1 -1
  99. package/pathways/system/rest_streaming/sys_claude_37_sonnet.js +21 -0
  100. package/pathways/system/rest_streaming/sys_claude_41_opus.js +21 -0
  101. package/pathways/system/rest_streaming/sys_claude_4_sonnet.js +21 -0
  102. package/pathways/system/rest_streaming/sys_google_gemini_25_flash.js +25 -0
  103. package/pathways/system/rest_streaming/{sys_google_gemini_chat.js → sys_google_gemini_25_pro.js} +6 -4
  104. package/pathways/system/rest_streaming/sys_grok_4.js +23 -0
  105. package/pathways/system/rest_streaming/sys_grok_4_fast_non_reasoning.js +23 -0
  106. package/pathways/system/rest_streaming/sys_grok_4_fast_reasoning.js +23 -0
  107. package/pathways/system/rest_streaming/sys_openai_chat.js +3 -0
  108. package/pathways/system/rest_streaming/sys_openai_chat_gpt41.js +22 -0
  109. package/pathways/system/rest_streaming/sys_openai_chat_gpt41_mini.js +21 -0
  110. package/pathways/system/rest_streaming/sys_openai_chat_gpt41_nano.js +21 -0
  111. package/pathways/system/rest_streaming/{sys_claude_35_sonnet.js → sys_openai_chat_gpt4_omni.js} +6 -4
  112. package/pathways/system/rest_streaming/sys_openai_chat_gpt4_omni_mini.js +21 -0
  113. package/pathways/system/rest_streaming/{sys_claude_3_haiku.js → sys_openai_chat_gpt5.js} +7 -5
  114. package/pathways/system/rest_streaming/sys_openai_chat_gpt5_chat.js +21 -0
  115. package/pathways/system/rest_streaming/sys_openai_chat_gpt5_mini.js +21 -0
  116. package/pathways/system/rest_streaming/sys_openai_chat_gpt5_nano.js +21 -0
  117. package/pathways/system/rest_streaming/{sys_openai_chat_o1.js → sys_openai_chat_o3.js} +6 -3
  118. package/pathways/system/rest_streaming/sys_openai_chat_o3_mini.js +3 -0
  119. package/pathways/system/workspaces/run_workspace_prompt.js +99 -0
  120. package/pathways/vision.js +1 -1
  121. package/server/graphql.js +1 -1
  122. package/server/modelExecutor.js +8 -0
  123. package/server/pathwayResolver.js +166 -16
  124. package/server/pathwayResponseParser.js +16 -8
  125. package/server/plugins/azureFoundryAgentsPlugin.js +1 -1
  126. package/server/plugins/claude3VertexPlugin.js +193 -45
  127. package/server/plugins/gemini15ChatPlugin.js +21 -0
  128. package/server/plugins/gemini15VisionPlugin.js +360 -0
  129. package/server/plugins/googleCsePlugin.js +94 -0
  130. package/server/plugins/grokVisionPlugin.js +365 -0
  131. package/server/plugins/modelPlugin.js +3 -1
  132. package/server/plugins/openAiChatPlugin.js +106 -13
  133. package/server/plugins/openAiVisionPlugin.js +42 -30
  134. package/server/resolver.js +28 -4
  135. package/server/rest.js +270 -53
  136. package/server/typeDef.js +1 -0
  137. package/tests/{mocks.js → helpers/mocks.js} +5 -2
  138. package/tests/{server.js → helpers/server.js} +2 -2
  139. package/tests/helpers/sseAssert.js +23 -0
  140. package/tests/helpers/sseClient.js +73 -0
  141. package/tests/helpers/subscriptionAssert.js +11 -0
  142. package/tests/helpers/subscriptions.js +113 -0
  143. package/tests/{sublong.srt → integration/features/translate/sublong.srt} +4543 -4543
  144. package/tests/integration/features/translate/translate_chunking_stream.test.js +100 -0
  145. package/tests/{translate_srt.test.js → integration/features/translate/translate_srt.test.js} +2 -2
  146. package/tests/integration/graphql/async/stream/agentic.test.js +477 -0
  147. package/tests/integration/graphql/async/stream/subscription_streaming.test.js +62 -0
  148. package/tests/integration/graphql/async/stream/sys_entity_start_streaming.test.js +71 -0
  149. package/tests/integration/graphql/async/stream/vendors/claude_streaming.test.js +56 -0
  150. package/tests/integration/graphql/async/stream/vendors/gemini_streaming.test.js +66 -0
  151. package/tests/integration/graphql/async/stream/vendors/grok_streaming.test.js +56 -0
  152. package/tests/integration/graphql/async/stream/vendors/openai_streaming.test.js +72 -0
  153. package/tests/integration/graphql/features/google/sysToolGoogleSearch.test.js +96 -0
  154. package/tests/integration/graphql/features/grok/grok.test.js +688 -0
  155. package/tests/integration/graphql/features/grok/grok_x_search_tool.test.js +354 -0
  156. package/tests/{main.test.js → integration/graphql/features/main.test.js} +1 -1
  157. package/tests/{call_tools.test.js → integration/graphql/features/tools/call_tools.test.js} +2 -2
  158. package/tests/{vision.test.js → integration/graphql/features/vision/vision.test.js} +1 -1
  159. package/tests/integration/graphql/subscriptions/connection.test.js +26 -0
  160. package/tests/{openai_api.test.js → integration/rest/oai/openai_api.test.js} +63 -238
  161. package/tests/integration/rest/oai/tool_calling_api.test.js +343 -0
  162. package/tests/integration/rest/oai/tool_calling_streaming.test.js +85 -0
  163. package/tests/integration/rest/vendors/claude_streaming.test.js +47 -0
  164. package/tests/integration/rest/vendors/claude_tool_calling_streaming.test.js +75 -0
  165. package/tests/integration/rest/vendors/gemini_streaming.test.js +47 -0
  166. package/tests/integration/rest/vendors/gemini_tool_calling_streaming.test.js +75 -0
  167. package/tests/integration/rest/vendors/grok_streaming.test.js +55 -0
  168. package/tests/integration/rest/vendors/grok_tool_calling_streaming.test.js +75 -0
  169. package/tests/{azureAuthTokenHelper.test.js → unit/core/azureAuthTokenHelper.test.js} +1 -1
  170. package/tests/{chunkfunction.test.js → unit/core/chunkfunction.test.js} +2 -2
  171. package/tests/{config.test.js → unit/core/config.test.js} +3 -3
  172. package/tests/{encodeCache.test.js → unit/core/encodeCache.test.js} +1 -1
  173. package/tests/{fastLruCache.test.js → unit/core/fastLruCache.test.js} +1 -1
  174. package/tests/{handleBars.test.js → unit/core/handleBars.test.js} +1 -1
  175. package/tests/{memoryfunction.test.js → unit/core/memoryfunction.test.js} +2 -2
  176. package/tests/unit/core/mergeResolver.test.js +952 -0
  177. package/tests/{parser.test.js → unit/core/parser.test.js} +3 -3
  178. package/tests/unit/core/pathwayResolver.test.js +187 -0
  179. package/tests/{requestMonitor.test.js → unit/core/requestMonitor.test.js} +1 -1
  180. package/tests/{requestMonitorDurationEstimator.test.js → unit/core/requestMonitorDurationEstimator.test.js} +1 -1
  181. package/tests/{truncateMessages.test.js → unit/core/truncateMessages.test.js} +3 -3
  182. package/tests/{util.test.js → unit/core/util.test.js} +1 -1
  183. package/tests/{apptekTranslatePlugin.test.js → unit/plugins/apptekTranslatePlugin.test.js} +3 -3
  184. package/tests/{azureFoundryAgents.test.js → unit/plugins/azureFoundryAgents.test.js} +136 -1
  185. package/tests/{claude3VertexPlugin.test.js → unit/plugins/claude3VertexPlugin.test.js} +32 -10
  186. package/tests/{claude3VertexToolConversion.test.js → unit/plugins/claude3VertexToolConversion.test.js} +3 -3
  187. package/tests/unit/plugins/googleCsePlugin.test.js +111 -0
  188. package/tests/unit/plugins/grokVisionPlugin.test.js +1392 -0
  189. package/tests/{modelPlugin.test.js → unit/plugins/modelPlugin.test.js} +3 -3
  190. package/tests/{multimodal_conversion.test.js → unit/plugins/multimodal_conversion.test.js} +4 -4
  191. package/tests/{openAiChatPlugin.test.js → unit/plugins/openAiChatPlugin.test.js} +13 -4
  192. package/tests/{openAiToolPlugin.test.js → unit/plugins/openAiToolPlugin.test.js} +35 -27
  193. package/tests/{tokenHandlingTests.test.js → unit/plugins/tokenHandlingTests.test.js} +5 -5
  194. package/tests/{translate_apptek.test.js → unit/plugins/translate_apptek.test.js} +3 -3
  195. package/tests/{streaming.test.js → unit/plugins.streaming/plugin_stream_events.test.js} +19 -58
  196. package/helper-apps/mogrt-handler/tests/test-files/test.gif +0 -1
  197. package/helper-apps/mogrt-handler/tests/test-files/test.mogrt +0 -1
  198. package/helper-apps/mogrt-handler/tests/test-files/test.mp4 +0 -1
  199. package/pathways/system/rest_streaming/sys_openai_chat_gpt4.js +0 -19
  200. package/pathways/system/rest_streaming/sys_openai_chat_gpt4_32.js +0 -19
  201. package/pathways/system/rest_streaming/sys_openai_chat_gpt4_turbo.js +0 -19
  202. package/pathways/system/workspaces/run_claude35_sonnet.js +0 -21
  203. package/pathways/system/workspaces/run_claude3_haiku.js +0 -20
  204. package/pathways/system/workspaces/run_gpt35turbo.js +0 -20
  205. package/pathways/system/workspaces/run_gpt4.js +0 -20
  206. package/pathways/system/workspaces/run_gpt4_32.js +0 -20
  207. package/tests/agentic.test.js +0 -256
  208. package/tests/pathwayResolver.test.js +0 -78
  209. package/tests/subscription.test.js +0 -387
  210. /package/tests/{subchunk.srt → integration/features/translate/subchunk.srt} +0 -0
  211. /package/tests/{subhorizontal.srt → integration/features/translate/subhorizontal.srt} +0 -0
@@ -1,256 +0,0 @@
1
- // agentic.test.js
2
- // Tests for the agentic entity system
3
-
4
- import test from 'ava';
5
- import serverFactory from '../index.js';
6
- import { createClient } from 'graphql-ws';
7
- import ws from 'ws';
8
-
9
- let testServer;
10
- let wsClient;
11
-
12
- test.before(async () => {
13
- process.env.CORTEX_ENABLE_REST = 'true';
14
- const { server, startServer } = await serverFactory();
15
- startServer && await startServer();
16
- testServer = server;
17
-
18
- // Create WebSocket client for subscriptions
19
- wsClient = createClient({
20
- url: 'ws://localhost:4000/graphql',
21
- webSocketImpl: ws,
22
- retryAttempts: 3,
23
- connectionParams: {},
24
- on: {
25
- error: (error) => {
26
- console.error('WS connection error:', error);
27
- }
28
- }
29
- });
30
-
31
- // Test the connection by making a simple subscription
32
- try {
33
- await new Promise((resolve, reject) => {
34
- const subscription = wsClient.subscribe(
35
- {
36
- query: `
37
- subscription TestConnection {
38
- requestProgress(requestIds: ["test"]) {
39
- requestId
40
- }
41
- }
42
- `
43
- },
44
- {
45
- next: () => {
46
- resolve();
47
- },
48
- error: reject,
49
- complete: () => {
50
- resolve();
51
- }
52
- }
53
- );
54
-
55
- // Add a timeout to avoid hanging
56
- setTimeout(() => {
57
- resolve();
58
- }, 2000);
59
- });
60
- } catch (error) {
61
- console.error('Failed to establish WebSocket connection:', error);
62
- throw error;
63
- }
64
- });
65
-
66
- test.after.always('cleanup', async () => {
67
- if (wsClient) {
68
- wsClient.dispose();
69
- }
70
- if (testServer) {
71
- await testServer.stop();
72
- }
73
- });
74
-
75
- // Helper function to collect subscription events
76
- async function collectSubscriptionEvents(subscription, timeout = 30000) {
77
- const events = [];
78
-
79
- return new Promise((resolve, reject) => {
80
- const timeoutId = setTimeout(() => {
81
- if (events.length > 0) {
82
- resolve(events);
83
- } else {
84
- reject(new Error('Subscription timed out with no events'));
85
- }
86
- }, timeout);
87
-
88
- const unsubscribe = wsClient.subscribe(
89
- {
90
- query: subscription.query,
91
- variables: subscription.variables
92
- },
93
- {
94
- next: (event) => {
95
- events.push(event);
96
- if (event?.data?.requestProgress?.progress === 1) {
97
- clearTimeout(timeoutId);
98
- unsubscribe();
99
- resolve(events);
100
- }
101
- },
102
- error: (error) => {
103
- clearTimeout(timeoutId);
104
- reject(error);
105
- },
106
- complete: () => {
107
- clearTimeout(timeoutId);
108
- resolve(events);
109
- }
110
- }
111
- );
112
- });
113
- }
114
-
115
- // Test basic single-step task
116
- test.serial('sys_entity_agent handles single-step task', async (t) => {
117
- t.timeout(30000); // 30 second timeout
118
- const response = await testServer.executeOperation({
119
- query: `
120
- query TestAgentSingleStep(
121
- $text: String!,
122
- $chatHistory: [MultiMessage]!
123
- ) {
124
- sys_entity_agent(
125
- text: $text,
126
- chatHistory: $chatHistory,
127
- stream: true
128
- ) {
129
- result
130
- contextId
131
- tool
132
- warnings
133
- errors
134
- }
135
- }
136
- `,
137
- variables: {
138
- text: 'What is the current time?',
139
- chatHistory: [{
140
- role: "user",
141
- content: ["What is the current time?"]
142
- }]
143
- }
144
- });
145
-
146
- console.log('Single-step Agent Response:', JSON.stringify(response, null, 2));
147
-
148
- // Check for successful response
149
- t.falsy(response.body?.singleResult?.errors, 'Should not have GraphQL errors');
150
- const requestId = response.body?.singleResult?.data?.sys_entity_agent?.result;
151
- t.truthy(requestId, 'Should have a requestId in the result field');
152
-
153
- // Collect events
154
- const events = await collectSubscriptionEvents({
155
- query: `
156
- subscription OnRequestProgress($requestId: String!) {
157
- requestProgress(requestIds: [$requestId]) {
158
- requestId
159
- progress
160
- data
161
- info
162
- }
163
- }
164
- `,
165
- variables: { requestId }
166
- });
167
-
168
- console.log(`Received ${events.length} events for single-step task`);
169
- t.true(events.length > 0, 'Should have received events');
170
-
171
- // Verify we got a completion event
172
- const completionEvent = events.find(event =>
173
- event.data.requestProgress.progress === 1
174
- );
175
- t.truthy(completionEvent, 'Should have received a completion event');
176
- });
177
-
178
- // Test multi-step task with tool usage
179
- test.serial('sys_entity_agent handles multi-step task with tools', async (t) => {
180
- t.timeout(120000); // 120 second timeout for multi-step task
181
- const response = await testServer.executeOperation({
182
- query: `
183
- query TestAgentMultiStep(
184
- $text: String!,
185
- $chatHistory: [MultiMessage]!
186
- ) {
187
- sys_entity_agent(
188
- text: $text,
189
- chatHistory: $chatHistory,
190
- stream: true
191
- ) {
192
- result
193
- contextId
194
- tool
195
- warnings
196
- errors
197
- }
198
- }
199
- `,
200
- variables: {
201
- text: 'Research the latest developments in renewable energy and summarize the key trends.',
202
- chatHistory: [{
203
- role: "user",
204
- content: ["Research the latest developments in renewable energy and summarize the key trends."]
205
- }]
206
- }
207
- });
208
-
209
- console.log('Multi-step Agent Response:', JSON.stringify(response, null, 2));
210
-
211
- // Check for successful response
212
- t.falsy(response.body?.singleResult?.errors, 'Should not have GraphQL errors');
213
- const requestId = response.body?.singleResult?.data?.sys_entity_agent?.result;
214
- t.truthy(requestId, 'Should have a requestId in the result field');
215
-
216
- // Collect events with a longer timeout since this is a multi-step operation
217
- const events = await collectSubscriptionEvents({
218
- query: `
219
- subscription OnRequestProgress($requestId: String!) {
220
- requestProgress(requestIds: [$requestId]) {
221
- requestId
222
- progress
223
- data
224
- info
225
- }
226
- }
227
- `,
228
- variables: { requestId }
229
- }, 60000);
230
-
231
- console.log(`Received ${events.length} events for multi-step task`);
232
- t.true(events.length > 0, 'Should have received events');
233
-
234
- // Verify we got a completion event
235
- const completionEvent = events.find(event =>
236
- event.data.requestProgress.progress === 1
237
- );
238
- t.truthy(completionEvent, 'Should have received a completion event');
239
-
240
- // Check for tool usage in the events
241
- let foundToolUsage = false;
242
- for (const event of events) {
243
- if (event.data.requestProgress.info) {
244
- try {
245
- const info = JSON.parse(event.data.requestProgress.info);
246
- if (info.toolUsed) {
247
- foundToolUsage = true;
248
- break;
249
- }
250
- } catch (e) {
251
- // Some info might not be JSON, which is fine
252
- }
253
- }
254
- }
255
- t.true(foundToolUsage, 'Should have used tools during execution');
256
- });
@@ -1,78 +0,0 @@
1
- import test from 'ava';
2
- import { PathwayResolver } from '../server/pathwayResolver.js';
3
- import sinon from 'sinon';
4
- import { mockConfig, mockPathwayString, mockModelEndpoints } from './mocks.js';
5
-
6
- const mockPathway = mockPathwayString;
7
- mockPathway.useInputChunking = false;
8
- mockPathway.prompt = 'What is AI?';
9
-
10
- const mockArgs = {
11
- text: 'Artificial intelligence',
12
- };
13
-
14
- test.beforeEach((t) => {
15
- t.context.pathwayResolver = new PathwayResolver({
16
- config: mockConfig,
17
- pathway: mockPathway,
18
- args: mockArgs,
19
- endpoints: mockModelEndpoints,
20
- });
21
- });
22
-
23
- test('constructor initializes properties correctly', (t) => {
24
- const resolver = t.context.pathwayResolver;
25
- t.deepEqual(resolver.config, mockConfig);
26
- t.deepEqual(resolver.pathway, mockPathway);
27
- t.deepEqual(resolver.args, mockArgs);
28
- t.is(resolver.useInputChunking, mockPathway.useInputChunking);
29
- t.is(typeof resolver.requestId, 'string');
30
- });
31
-
32
- test('resolve returns request id when async is true', async (t) => {
33
- const resolver = t.context.pathwayResolver;
34
- const requestId = await resolver.resolve({ ...mockArgs, async: true });
35
- t.is(typeof requestId, 'string');
36
- t.is(requestId, resolver.requestId);
37
- });
38
-
39
- test('resolve calls promptAndParse when async is false', async (t) => {
40
- const resolver = t.context.pathwayResolver;
41
- const promptAndParseStub = sinon.stub(resolver, 'promptAndParse').returns(Promise.resolve('test-result'));
42
-
43
- const result = await resolver.resolve(mockArgs);
44
- t.true(promptAndParseStub.calledOnce);
45
- t.is(result, 'test-result');
46
- });
47
-
48
- test('processInputText returns input text if no chunking', (t) => {
49
- const resolver = t.context.pathwayResolver;
50
- const text = 'This is a test input text';
51
- const result = resolver.processInputText(text);
52
- t.deepEqual(result, [text]);
53
- });
54
-
55
- test('applyPromptsSerially returns result of last prompt', async (t) => {
56
- const resolver = t.context.pathwayResolver;
57
- const text = 'This is a test input text';
58
- const applyPromptStub = sinon.stub(resolver, 'applyPrompt');
59
- applyPromptStub.onCall(0).returns(Promise.resolve('result1'));
60
- applyPromptStub.onCall(1).returns(Promise.resolve('result2'));
61
-
62
- resolver.pathwayPrompt = ['prompt1', 'prompt2'];
63
- const result = await resolver.applyPromptsSerially(text, mockArgs);
64
-
65
- t.is(result, 'result2');
66
- });
67
-
68
- test('processRequest returns empty result when input text is empty', async (t) => {
69
- const resolver = t.context.pathwayResolver;
70
- const text = '';
71
- const processRequestStub = sinon.stub(resolver, 'processRequest').returns(Promise.resolve(''));
72
-
73
- await resolver.resolve({ ...mockArgs, text });
74
-
75
- t.true(processRequestStub.calledOnce);
76
- const returnValue = await processRequestStub.firstCall.returnValue;
77
- t.is(returnValue, text);
78
- });