@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.
- package/dist/index.js +134 -89
- package/dist/index.js.map +1 -1
- package/dist/types/Components/AgentPlugin.class.d.ts +1 -1
- package/dist/types/Components/DataSourceIndexer.class.d.ts +4 -12
- package/dist/types/Components/GenAILLM.class.d.ts +5 -5
- package/dist/types/Components/RAG/DataSourceCleaner.class.d.ts +4 -4
- package/dist/types/Components/RAG/DataSourceComponent.class.d.ts +5 -1
- package/dist/types/Components/index.d.ts +3 -3
- package/dist/types/config.d.ts +1 -0
- package/dist/types/helpers/Conversation.helper.d.ts +10 -13
- package/dist/types/helpers/TemplateString.helper.d.ts +1 -1
- package/dist/types/index.d.ts +4 -3
- package/dist/types/subsystems/IO/VectorDB.service/VectorDBConnector.d.ts +1 -0
- package/dist/types/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.d.ts +1 -0
- package/dist/types/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.d.ts +11 -4
- package/dist/types/subsystems/IO/VectorDB.service/embed/index.d.ts +5 -0
- package/dist/types/subsystems/LLMManager/LLM.helper.d.ts +19 -0
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.d.ts +15 -10
- package/dist/types/subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class.d.ts +35 -0
- package/dist/types/subsystems/Security/Account.service/AccountConnector.d.ts +2 -2
- package/dist/types/subsystems/Security/Vault.service/connectors/SecretsManager.class.d.ts +2 -3
- package/dist/types/types/LLM.types.d.ts +23 -0
- package/dist/types/types/VectorDB.types.d.ts +4 -0
- package/dist/types/utils/string.utils.d.ts +1 -0
- package/package.json +3 -3
- package/src/Components/APIEndpoint.class.ts +1 -6
- package/src/Components/AgentPlugin.class.ts +20 -3
- package/src/Components/Classifier.class.ts +79 -16
- package/src/Components/Component.class.ts +14 -1
- package/src/Components/ForEach.class.ts +34 -6
- package/src/Components/GenAILLM.class.ts +75 -34
- package/src/Components/LLMAssistant.class.ts +56 -21
- package/src/Components/RAG/DataSourceCleaner.class.ts +180 -0
- package/src/Components/RAG/DataSourceComponent.class.ts +137 -0
- package/src/Components/RAG/DataSourceIndexer.class.ts +260 -0
- package/src/Components/{DataSourceLookup.class.ts → RAG/DataSourceLookup.class.ts} +96 -3
- package/src/Components/ScrapflyWebScrape.class.ts +7 -0
- package/src/Components/ServerlessCode.class.ts +1 -4
- package/src/Components/index.ts +3 -3
- package/src/config.ts +1 -0
- package/src/helpers/Conversation.helper.ts +112 -26
- package/src/helpers/S3Cache.helper.ts +2 -1
- package/src/helpers/TemplateString.helper.ts +6 -5
- package/src/index.ts +213 -212
- package/src/index.ts.bak +213 -212
- package/src/subsystems/IO/NKV.service/connectors/NKVRedis.class.ts +3 -1
- package/src/subsystems/IO/VectorDB.service/VectorDBConnector.ts +1 -0
- package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +145 -19
- package/src/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.ts +67 -22
- package/src/subsystems/IO/VectorDB.service/embed/GoogleEmbedding.ts +1 -0
- package/src/subsystems/IO/VectorDB.service/embed/OpenAIEmbedding.ts +2 -1
- package/src/subsystems/IO/VectorDB.service/embed/index.ts +16 -0
- package/src/subsystems/LLMManager/LLM.helper.ts +25 -0
- package/src/subsystems/LLMManager/LLM.service/LLMConnector.ts +1 -1
- package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +35 -10
- package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +12 -4
- package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +4 -4
- package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +192 -139
- package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +17 -5
- package/src/subsystems/LLMManager/LLM.service/connectors/Ollama.class.ts +18 -3
- package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +14 -5
- package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +6 -4
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.ts +5 -5
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +8 -3
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/utils.ts +1 -1
- package/src/subsystems/LLMManager/LLM.service/connectors/xAI.class.ts +9 -8
- package/src/subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class.ts +92 -1
- package/src/subsystems/ObservabilityManager/Telemetry.service/connectors/OTel/OTel.class.ts +260 -17
- package/src/subsystems/Security/Account.service/AccountConnector.ts +3 -3
- package/src/subsystems/Security/Vault.service/connectors/SecretsManager.class.ts +8 -63
- package/src/types/LLM.types.ts +24 -0
- package/src/types/VectorDB.types.ts +4 -0
- package/src/utils/array.utils.ts +11 -0
- package/src/utils/base64.utils.ts +1 -1
- package/src/utils/data.utils.ts +6 -4
- package/src/utils/string.utils.ts +3 -192
- package/src/Components/DataSourceCleaner.class.ts +0 -92
- 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(
|
|
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(
|
|
162
|
+
stream.on(AnthropicStreamEvent.error, (error) => {
|
|
142
163
|
//console.log('error', error);
|
|
143
164
|
|
|
144
|
-
emitter.emit(
|
|
165
|
+
emitter.emit(TLLMEvent.Error, error);
|
|
145
166
|
});
|
|
146
167
|
|
|
147
|
-
stream.on(
|
|
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(
|
|
179
|
+
emitter.emit(TLLMEvent.Content, text);
|
|
155
180
|
});
|
|
156
181
|
|
|
157
|
-
stream.on(
|
|
182
|
+
stream.on(AnthropicStreamEvent.thinking, (thinking) => {
|
|
158
183
|
// Handle thinking blocks during streaming
|
|
159
|
-
emitter.emit(
|
|
184
|
+
emitter.emit(TLLMEvent.Thinking, thinking);
|
|
160
185
|
});
|
|
161
186
|
|
|
162
|
-
stream.on(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
136
|
-
emitter.emit(
|
|
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
|
-
|
|
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(
|
|
58
|
-
emitter.emit(
|
|
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(
|
|
63
|
+
emitter.emit(TLLMEvent.End, [], [], 'stop'); // Empty arrays for toolsData and usage_data, with finishReason
|
|
64
64
|
}, 100);
|
|
65
65
|
})();
|
|
66
66
|
|