@smythos/sre 1.7.20 → 1.7.41

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 (78) hide show
  1. package/dist/index.js +134 -89
  2. package/dist/index.js.map +1 -1
  3. package/dist/types/Components/AgentPlugin.class.d.ts +1 -1
  4. package/dist/types/Components/DataSourceIndexer.class.d.ts +4 -12
  5. package/dist/types/Components/GenAILLM.class.d.ts +5 -5
  6. package/dist/types/Components/RAG/DataSourceCleaner.class.d.ts +4 -4
  7. package/dist/types/Components/RAG/DataSourceComponent.class.d.ts +5 -1
  8. package/dist/types/Components/index.d.ts +3 -3
  9. package/dist/types/config.d.ts +1 -0
  10. package/dist/types/helpers/Conversation.helper.d.ts +10 -13
  11. package/dist/types/helpers/TemplateString.helper.d.ts +1 -1
  12. package/dist/types/index.d.ts +4 -3
  13. package/dist/types/subsystems/IO/VectorDB.service/VectorDBConnector.d.ts +1 -0
  14. package/dist/types/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.d.ts +1 -0
  15. package/dist/types/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.d.ts +11 -4
  16. package/dist/types/subsystems/IO/VectorDB.service/embed/index.d.ts +5 -0
  17. package/dist/types/subsystems/LLMManager/LLM.helper.d.ts +19 -0
  18. package/dist/types/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.d.ts +15 -10
  19. package/dist/types/subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class.d.ts +35 -0
  20. package/dist/types/subsystems/Security/Account.service/AccountConnector.d.ts +2 -2
  21. package/dist/types/subsystems/Security/Vault.service/connectors/SecretsManager.class.d.ts +2 -3
  22. package/dist/types/types/LLM.types.d.ts +23 -0
  23. package/dist/types/types/VectorDB.types.d.ts +4 -0
  24. package/dist/types/utils/string.utils.d.ts +1 -0
  25. package/package.json +3 -3
  26. package/src/Components/APIEndpoint.class.ts +1 -6
  27. package/src/Components/AgentPlugin.class.ts +20 -3
  28. package/src/Components/Classifier.class.ts +79 -16
  29. package/src/Components/Component.class.ts +14 -1
  30. package/src/Components/ForEach.class.ts +34 -6
  31. package/src/Components/GenAILLM.class.ts +75 -34
  32. package/src/Components/LLMAssistant.class.ts +56 -21
  33. package/src/Components/RAG/DataSourceCleaner.class.ts +180 -0
  34. package/src/Components/RAG/DataSourceComponent.class.ts +137 -0
  35. package/src/Components/RAG/DataSourceIndexer.class.ts +260 -0
  36. package/src/Components/{DataSourceLookup.class.ts → RAG/DataSourceLookup.class.ts} +96 -3
  37. package/src/Components/ScrapflyWebScrape.class.ts +7 -0
  38. package/src/Components/ServerlessCode.class.ts +1 -4
  39. package/src/Components/index.ts +3 -3
  40. package/src/config.ts +1 -0
  41. package/src/helpers/Conversation.helper.ts +112 -26
  42. package/src/helpers/S3Cache.helper.ts +2 -1
  43. package/src/helpers/TemplateString.helper.ts +6 -5
  44. package/src/index.ts +213 -212
  45. package/src/index.ts.bak +213 -212
  46. package/src/subsystems/IO/NKV.service/connectors/NKVRedis.class.ts +3 -1
  47. package/src/subsystems/IO/VectorDB.service/VectorDBConnector.ts +1 -0
  48. package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +145 -19
  49. package/src/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.ts +67 -22
  50. package/src/subsystems/IO/VectorDB.service/embed/GoogleEmbedding.ts +1 -0
  51. package/src/subsystems/IO/VectorDB.service/embed/OpenAIEmbedding.ts +2 -1
  52. package/src/subsystems/IO/VectorDB.service/embed/index.ts +16 -0
  53. package/src/subsystems/LLMManager/LLM.helper.ts +25 -0
  54. package/src/subsystems/LLMManager/LLM.service/LLMConnector.ts +1 -1
  55. package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +35 -10
  56. package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +12 -4
  57. package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +4 -4
  58. package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +192 -139
  59. package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +17 -5
  60. package/src/subsystems/LLMManager/LLM.service/connectors/Ollama.class.ts +18 -3
  61. package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +14 -5
  62. package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +6 -4
  63. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.ts +5 -5
  64. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +8 -3
  65. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/utils.ts +1 -1
  66. package/src/subsystems/LLMManager/LLM.service/connectors/xAI.class.ts +9 -8
  67. package/src/subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class.ts +92 -1
  68. package/src/subsystems/ObservabilityManager/Telemetry.service/connectors/OTel/OTel.class.ts +260 -17
  69. package/src/subsystems/Security/Account.service/AccountConnector.ts +3 -3
  70. package/src/subsystems/Security/Vault.service/connectors/SecretsManager.class.ts +8 -63
  71. package/src/types/LLM.types.ts +24 -0
  72. package/src/types/VectorDB.types.ts +4 -0
  73. package/src/utils/array.utils.ts +11 -0
  74. package/src/utils/base64.utils.ts +1 -1
  75. package/src/utils/data.utils.ts +6 -4
  76. package/src/utils/string.utils.ts +3 -192
  77. package/src/Components/DataSourceCleaner.class.ts +0 -92
  78. package/src/Components/DataSourceIndexer.class.ts +0 -181
@@ -1,5 +1,6 @@
1
1
  import EventEmitter from 'events';
2
2
  import Anthropic from '@anthropic-ai/sdk';
3
+ import type { MessageStreamEvents } from '@anthropic-ai/sdk/lib/MessageStream';
3
4
 
4
5
  import { JSON_RESPONSE_INSTRUCTION, BUILT_IN_MODEL_PREFIX } from '@sre/constants';
5
6
  import { BinaryInput } from '@sre/helpers/BinaryInput.helper';
@@ -35,6 +36,26 @@ const LEGACY_THINKING_MODELS = ['smythos/claude-3.7-sonnet-thinking', 'claude-3.
35
36
 
36
37
  // Type aliases
37
38
  type AnthropicMessageParams = Anthropic.MessageCreateParamsNonStreaming | Anthropic.Messages.MessageStreamParams;
39
+ type AnthropicStreamEventType = keyof MessageStreamEvents;
40
+
41
+ // Event names automatically validated against MessageStreamEvents type
42
+ // TypeScript will error if any events are missing or incorrect
43
+ // This ensures we always use the correct event names as defined by Anthropic SDK
44
+ const AnthropicStreamEvent = {
45
+ connect: 'connect',
46
+ streamEvent: 'streamEvent',
47
+ text: 'text',
48
+ citation: 'citation',
49
+ inputJson: 'inputJson',
50
+ thinking: 'thinking',
51
+ signature: 'signature',
52
+ message: 'message',
53
+ contentBlock: 'contentBlock',
54
+ finalMessage: 'finalMessage',
55
+ error: 'error',
56
+ abort: 'abort',
57
+ end: 'end',
58
+ } satisfies Record<keyof MessageStreamEvents, AnthropicStreamEventType>;
38
59
 
39
60
  // TODO [Forhad]: implement proper typing
40
61
 
@@ -132,34 +153,38 @@ export class AnthropicConnector extends LLMConnector {
132
153
  const needsPrefillInjection = this.hasPrefillText(body.messages);
133
154
  let prefillInjected = false;
134
155
 
135
- stream.on('streamEvent', (event: any) => {
156
+ stream.on(AnthropicStreamEvent.streamEvent, (event: any) => {
136
157
  if (event.message?.usage) {
137
158
  //console.log('usage', event.message?.usage);
138
159
  }
139
160
  });
140
161
 
141
- stream.on('error', (error) => {
162
+ stream.on(AnthropicStreamEvent.error, (error) => {
142
163
  //console.log('error', error);
143
164
 
144
- emitter.emit('error', error);
165
+ emitter.emit(TLLMEvent.Error, error);
145
166
  });
146
167
 
147
- stream.on('text', (text: string) => {
168
+ stream.on(AnthropicStreamEvent.message, (message) => {
169
+ emitter.emit(TLLMEvent.Data, message);
170
+ });
171
+
172
+ stream.on(AnthropicStreamEvent.text, (text: string) => {
148
173
  // Inject prefill text only once at the very beginning if needed
149
174
  if (needsPrefillInjection && !prefillInjected) {
150
175
  text = `${PREFILL_TEXT_FOR_JSON_RESPONSE}${text}`;
151
176
  prefillInjected = true;
152
177
  }
153
178
 
154
- emitter.emit('content', text);
179
+ emitter.emit(TLLMEvent.Content, text);
155
180
  });
156
181
 
157
- stream.on('thinking', (thinking) => {
182
+ stream.on(AnthropicStreamEvent.thinking, (thinking) => {
158
183
  // Handle thinking blocks during streaming
159
- emitter.emit('thinking', thinking);
184
+ emitter.emit(TLLMEvent.Thinking, thinking);
160
185
  });
161
186
 
162
- stream.on('finalMessage', (finalMessage) => {
187
+ stream.on(AnthropicStreamEvent.finalMessage, (finalMessage) => {
163
188
  let finishReason = 'stop';
164
189
  // Preserve thinking blocks for subsequent tool interactions
165
190
  thinkingBlocks = finalMessage.content.filter((block) => block.type === 'thinking' || block.type === 'redacted_thinking');
@@ -197,12 +222,12 @@ export class AnthropicConnector extends LLMConnector {
197
222
  usage_data.push(reportedUsage);
198
223
  }
199
224
  if (finishReason !== 'stop' && finishReason !== 'end_turn') {
200
- emitter.emit('interrupted', finishReason);
225
+ emitter.emit(TLLMEvent.Interrupted, finishReason);
201
226
  }
202
227
 
203
228
  //only emit end event after processing the final message
204
229
  setTimeout(() => {
205
- emitter.emit('end', toolsData, usage_data, finishReason);
230
+ emitter.emit(TLLMEvent.End, toolsData, usage_data, finishReason);
206
231
  }, 100);
207
232
  });
208
233
 
@@ -126,14 +126,14 @@ export class BedrockConnector extends LLMConnector {
126
126
  // Handle message start
127
127
  if (chunk.messageStart) {
128
128
  currentMessage.role = chunk.messageStart.role || '';
129
- emitter.emit('data', { role: currentMessage.role });
129
+ emitter.emit(TLLMEvent.Data, { role: currentMessage.role });
130
130
  }
131
131
 
132
132
  // Handle content deltas
133
133
  if (chunk.contentBlockDelta?.delta?.text) {
134
134
  currentMessage.content += chunk.contentBlockDelta.delta.text;
135
- emitter.emit('data', chunk.contentBlockDelta.delta.text);
136
- emitter.emit('content', chunk.contentBlockDelta.delta.text, currentMessage.role);
135
+ emitter.emit(TLLMEvent.Data, chunk.contentBlockDelta.delta.text);
136
+ emitter.emit(TLLMEvent.Content, chunk.contentBlockDelta.delta.text, currentMessage.role);
137
137
  }
138
138
 
139
139
  // Handle tool use start
@@ -175,10 +175,18 @@ export class BedrockConnector extends LLMConnector {
175
175
 
176
176
  // Handle message completion
177
177
  if (chunk.messageStop) {
178
+ const finishReason = chunk.messageStop.stopReason || 'stop';
179
+
178
180
  if (currentMessage.toolCalls.length > 0) {
179
181
  emitter.emit(TLLMEvent.ToolInfo, currentMessage.toolCalls);
180
182
  }
181
- emitter.emit(TLLMEvent.End, currentMessage.toolCalls);
183
+
184
+ // Emit interrupted event if finishReason is not 'stop'
185
+ if (finishReason !== 'stop' && finishReason !== 'end_turn') {
186
+ emitter.emit(TLLMEvent.Interrupted, finishReason);
187
+ }
188
+
189
+ emitter.emit(TLLMEvent.End, currentMessage.toolCalls, [], finishReason);
182
190
  }
183
191
 
184
192
  if (chunk?.metadata?.usage) {
@@ -1,7 +1,7 @@
1
1
  import { JSONContent } from '@sre/helpers/JsonContent.helper';
2
2
  import { LLMConnector } from '../LLMConnector';
3
3
  import EventEmitter from 'events';
4
- import { APIKeySource, ILLMRequestFuncParams, TLLMChatResponse, TLLMPreparedParams } from '@sre/types/LLM.types';
4
+ import { APIKeySource, ILLMRequestFuncParams, TLLMChatResponse, TLLMEvent, TLLMPreparedParams } from '@sre/types/LLM.types';
5
5
  import { Logger } from '@sre/helpers/Log.helper';
6
6
  import { delay } from '@sre/utils/index';
7
7
  import { hookAsync } from '@sre/Core/HookService';
@@ -54,13 +54,13 @@ export class EchoConnector extends LLMConnector {
54
54
  const isLastChunk = i === chunks.length - 1;
55
55
  // Add space between chunks except for the last one to avoid trailing space in file URLs
56
56
  const delta = { content: chunks[i] + (isLastChunk ? '' : ' ') };
57
- emitter.emit('data', delta);
58
- emitter.emit('content', delta.content);
57
+ emitter.emit(TLLMEvent.Data, delta);
58
+ emitter.emit(TLLMEvent.Content, delta.content);
59
59
  }
60
60
 
61
61
  // Emit end event after all chunks are processed
62
62
  setTimeout(() => {
63
- emitter.emit('end', [], []); // Empty arrays for toolsData and usage_data
63
+ emitter.emit(TLLMEvent.End, [], [], 'stop'); // Empty arrays for toolsData and usage_data, with finishReason
64
64
  }, 100);
65
65
  })();
66
66