@juspay/neurolink 7.7.1 → 7.9.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.
- package/CHANGELOG.md +25 -2
- package/README.md +34 -2
- package/dist/cli/commands/config.d.ts +3 -3
- package/dist/cli/commands/sagemaker.d.ts +11 -0
- package/dist/cli/commands/sagemaker.js +778 -0
- package/dist/cli/factories/commandFactory.js +7 -2
- package/dist/cli/index.js +3 -0
- package/dist/cli/utils/interactiveSetup.js +28 -0
- package/dist/core/baseProvider.d.ts +2 -2
- package/dist/core/types.d.ts +16 -4
- package/dist/core/types.js +24 -3
- package/dist/factories/providerFactory.js +10 -1
- package/dist/factories/providerRegistry.js +6 -1
- package/dist/lib/core/baseProvider.d.ts +2 -2
- package/dist/lib/core/types.d.ts +16 -4
- package/dist/lib/core/types.js +24 -3
- package/dist/lib/factories/providerFactory.js +10 -1
- package/dist/lib/factories/providerRegistry.js +6 -1
- package/dist/lib/neurolink.d.ts +15 -0
- package/dist/lib/neurolink.js +73 -1
- package/dist/lib/providers/amazonSagemaker.d.ts +67 -0
- package/dist/lib/providers/amazonSagemaker.js +149 -0
- package/dist/lib/providers/googleVertex.d.ts +4 -0
- package/dist/lib/providers/googleVertex.js +44 -3
- package/dist/lib/providers/index.d.ts +4 -0
- package/dist/lib/providers/index.js +4 -0
- package/dist/lib/providers/sagemaker/adaptive-semaphore.d.ts +86 -0
- package/dist/lib/providers/sagemaker/adaptive-semaphore.js +212 -0
- package/dist/lib/providers/sagemaker/client.d.ts +156 -0
- package/dist/lib/providers/sagemaker/client.js +462 -0
- package/dist/lib/providers/sagemaker/config.d.ts +73 -0
- package/dist/lib/providers/sagemaker/config.js +308 -0
- package/dist/lib/providers/sagemaker/detection.d.ts +176 -0
- package/dist/lib/providers/sagemaker/detection.js +596 -0
- package/dist/lib/providers/sagemaker/diagnostics.d.ts +37 -0
- package/dist/lib/providers/sagemaker/diagnostics.js +137 -0
- package/dist/lib/providers/sagemaker/error-constants.d.ts +78 -0
- package/dist/lib/providers/sagemaker/error-constants.js +227 -0
- package/dist/lib/providers/sagemaker/errors.d.ts +83 -0
- package/dist/lib/providers/sagemaker/errors.js +216 -0
- package/dist/lib/providers/sagemaker/index.d.ts +35 -0
- package/dist/lib/providers/sagemaker/index.js +67 -0
- package/dist/lib/providers/sagemaker/language-model.d.ts +182 -0
- package/dist/lib/providers/sagemaker/language-model.js +755 -0
- package/dist/lib/providers/sagemaker/parsers.d.ts +136 -0
- package/dist/lib/providers/sagemaker/parsers.js +625 -0
- package/dist/lib/providers/sagemaker/streaming.d.ts +39 -0
- package/dist/lib/providers/sagemaker/streaming.js +320 -0
- package/dist/lib/providers/sagemaker/structured-parser.d.ts +117 -0
- package/dist/lib/providers/sagemaker/structured-parser.js +625 -0
- package/dist/lib/providers/sagemaker/types.d.ts +456 -0
- package/dist/lib/providers/sagemaker/types.js +7 -0
- package/dist/lib/sdk/toolRegistration.d.ts +1 -1
- package/dist/lib/sdk/toolRegistration.js +13 -5
- package/dist/lib/types/cli.d.ts +36 -1
- package/dist/lib/utils/providerHealth.js +19 -4
- package/dist/neurolink.d.ts +15 -0
- package/dist/neurolink.js +73 -1
- package/dist/providers/amazonSagemaker.d.ts +67 -0
- package/dist/providers/amazonSagemaker.js +149 -0
- package/dist/providers/googleVertex.d.ts +4 -0
- package/dist/providers/googleVertex.js +44 -3
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.js +4 -0
- package/dist/providers/sagemaker/adaptive-semaphore.d.ts +86 -0
- package/dist/providers/sagemaker/adaptive-semaphore.js +212 -0
- package/dist/providers/sagemaker/client.d.ts +156 -0
- package/dist/providers/sagemaker/client.js +462 -0
- package/dist/providers/sagemaker/config.d.ts +73 -0
- package/dist/providers/sagemaker/config.js +308 -0
- package/dist/providers/sagemaker/detection.d.ts +176 -0
- package/dist/providers/sagemaker/detection.js +596 -0
- package/dist/providers/sagemaker/diagnostics.d.ts +37 -0
- package/dist/providers/sagemaker/diagnostics.js +137 -0
- package/dist/providers/sagemaker/error-constants.d.ts +78 -0
- package/dist/providers/sagemaker/error-constants.js +227 -0
- package/dist/providers/sagemaker/errors.d.ts +83 -0
- package/dist/providers/sagemaker/errors.js +216 -0
- package/dist/providers/sagemaker/index.d.ts +35 -0
- package/dist/providers/sagemaker/index.js +67 -0
- package/dist/providers/sagemaker/language-model.d.ts +182 -0
- package/dist/providers/sagemaker/language-model.js +755 -0
- package/dist/providers/sagemaker/parsers.d.ts +136 -0
- package/dist/providers/sagemaker/parsers.js +625 -0
- package/dist/providers/sagemaker/streaming.d.ts +39 -0
- package/dist/providers/sagemaker/streaming.js +320 -0
- package/dist/providers/sagemaker/structured-parser.d.ts +117 -0
- package/dist/providers/sagemaker/structured-parser.js +625 -0
- package/dist/providers/sagemaker/types.d.ts +456 -0
- package/dist/providers/sagemaker/types.js +7 -0
- package/dist/sdk/toolRegistration.d.ts +1 -1
- package/dist/sdk/toolRegistration.js +13 -5
- package/dist/types/cli.d.ts +36 -1
- package/dist/utils/providerHealth.js +19 -4
- package/package.json +8 -2
|
@@ -28,6 +28,7 @@ export class CLICommandFactory {
|
|
|
28
28
|
"ollama",
|
|
29
29
|
"mistral",
|
|
30
30
|
"litellm",
|
|
31
|
+
"sagemaker",
|
|
31
32
|
],
|
|
32
33
|
default: "auto",
|
|
33
34
|
description: "AI provider to use (auto-selects best available)",
|
|
@@ -287,8 +288,12 @@ export class CLICommandFactory {
|
|
|
287
288
|
let analyticsText = "\n\n📊 Analytics:\n";
|
|
288
289
|
// Provider and model info
|
|
289
290
|
analyticsText += ` Provider: ${analytics.provider}`;
|
|
290
|
-
|
|
291
|
-
|
|
291
|
+
// Check for model in multiple locations: result.model, analytics.model, or any model property
|
|
292
|
+
const modelName = result.model ||
|
|
293
|
+
analytics.model ||
|
|
294
|
+
analytics.modelName;
|
|
295
|
+
if (modelName) {
|
|
296
|
+
analyticsText += ` (${modelName})`;
|
|
292
297
|
}
|
|
293
298
|
analyticsText += "\n";
|
|
294
299
|
// Token usage
|
package/dist/cli/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import yargs from "yargs";
|
|
|
9
9
|
import { hideBin } from "yargs/helpers";
|
|
10
10
|
import chalk from "chalk";
|
|
11
11
|
import { addOllamaCommands } from "./commands/ollama.js";
|
|
12
|
+
import { addSageMakerCommands } from "./commands/sagemaker.js";
|
|
12
13
|
import { CLICommandFactory } from "./factories/commandFactory.js";
|
|
13
14
|
import { logger } from "../lib/utils/logger.js";
|
|
14
15
|
// Load environment variables from .env file
|
|
@@ -228,6 +229,8 @@ const cli = yargs(args)
|
|
|
228
229
|
.command(CLICommandFactory.createCompletionCommand());
|
|
229
230
|
// Add Ollama Commands
|
|
230
231
|
addOllamaCommands(cli);
|
|
232
|
+
// Add SageMaker Commands
|
|
233
|
+
addSageMakerCommands(cli);
|
|
231
234
|
// Execute CLI
|
|
232
235
|
(async () => {
|
|
233
236
|
try {
|
|
@@ -176,6 +176,34 @@ export const PROVIDER_CONFIGS = [
|
|
|
176
176
|
},
|
|
177
177
|
],
|
|
178
178
|
},
|
|
179
|
+
{
|
|
180
|
+
id: AIProviderName.SAGEMAKER,
|
|
181
|
+
name: "Amazon SageMaker",
|
|
182
|
+
description: "Custom models deployed on Amazon SageMaker endpoints",
|
|
183
|
+
envVars: [
|
|
184
|
+
{
|
|
185
|
+
key: "AWS_ACCESS_KEY_ID",
|
|
186
|
+
prompt: "AWS Access Key ID",
|
|
187
|
+
secure: true,
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
key: "AWS_SECRET_ACCESS_KEY",
|
|
191
|
+
prompt: "AWS Secret Access Key",
|
|
192
|
+
secure: true,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
key: "AWS_REGION",
|
|
196
|
+
prompt: "AWS Region",
|
|
197
|
+
default: "us-east-1",
|
|
198
|
+
secure: false,
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
key: "SAGEMAKER_DEFAULT_ENDPOINT",
|
|
202
|
+
prompt: "SageMaker Endpoint Name",
|
|
203
|
+
secure: false,
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
},
|
|
179
207
|
];
|
|
180
208
|
/**
|
|
181
209
|
* Run the interactive setup wizard
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ZodType, ZodTypeDef } from "zod";
|
|
2
2
|
import type { Schema } from "ai";
|
|
3
|
-
import type { Tool,
|
|
3
|
+
import type { Tool, LanguageModelV1 } from "ai";
|
|
4
4
|
import type { AIProvider, TextGenerationOptions, EnhancedGenerateResult, AnalyticsData, AIProviderName, EvaluationData } from "../core/types.js";
|
|
5
5
|
import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
|
|
6
6
|
import type { JsonValue, UnknownRecord } from "../types/common.js";
|
|
@@ -419,7 +419,7 @@ export declare abstract class BaseProvider implements AIProvider {
|
|
|
419
419
|
* REQUIRED: Every provider MUST implement this method
|
|
420
420
|
* Returns the Vercel AI SDK model instance for this provider
|
|
421
421
|
*/
|
|
422
|
-
protected abstract getAISDKModel():
|
|
422
|
+
protected abstract getAISDKModel(): LanguageModelV1 | Promise<LanguageModelV1>;
|
|
423
423
|
/**
|
|
424
424
|
* Get all available tools - direct tools are ALWAYS available
|
|
425
425
|
* MCP tools are added when available (without blocking)
|
package/dist/core/types.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ export declare enum AIProviderName {
|
|
|
51
51
|
OLLAMA = "ollama",
|
|
52
52
|
MISTRAL = "mistral",
|
|
53
53
|
LITELLM = "litellm",
|
|
54
|
+
SAGEMAKER = "sagemaker",
|
|
54
55
|
AUTO = "auto"
|
|
55
56
|
}
|
|
56
57
|
/**
|
|
@@ -77,19 +78,30 @@ export declare enum OpenAIModels {
|
|
|
77
78
|
*/
|
|
78
79
|
export declare enum VertexModels {
|
|
79
80
|
CLAUDE_4_0_SONNET = "claude-sonnet-4@20250514",
|
|
80
|
-
|
|
81
|
+
CLAUDE_4_0_OPUS = "claude-opus-4@20250514",
|
|
82
|
+
CLAUDE_3_5_SONNET = "claude-3-5-sonnet-20241022",
|
|
83
|
+
CLAUDE_3_5_HAIKU = "claude-3-5-haiku-20241022",
|
|
84
|
+
CLAUDE_3_SONNET = "claude-3-sonnet-20240229",
|
|
85
|
+
CLAUDE_3_OPUS = "claude-3-opus-20240229",
|
|
86
|
+
CLAUDE_3_HAIKU = "claude-3-haiku-20240307",
|
|
81
87
|
GEMINI_2_5_PRO = "gemini-2.5-pro",
|
|
82
88
|
GEMINI_2_5_FLASH = "gemini-2.5-flash",
|
|
83
|
-
GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite"
|
|
89
|
+
GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite",
|
|
90
|
+
GEMINI_2_0_FLASH_001 = "gemini-2.0-flash-001",
|
|
91
|
+
GEMINI_1_5_PRO = "gemini-1.5-pro",
|
|
92
|
+
GEMINI_1_5_FLASH = "gemini-1.5-flash"
|
|
84
93
|
}
|
|
85
94
|
/**
|
|
86
95
|
* Supported Models for Google AI Studio
|
|
87
96
|
*/
|
|
88
97
|
export declare enum GoogleAIModels {
|
|
89
|
-
GEMINI_2_0_FLASH_001 = "gemini-2.0-flash-001",
|
|
90
98
|
GEMINI_2_5_PRO = "gemini-2.5-pro",
|
|
91
99
|
GEMINI_2_5_FLASH = "gemini-2.5-flash",
|
|
92
|
-
|
|
100
|
+
GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite",
|
|
101
|
+
GEMINI_2_0_FLASH_001 = "gemini-2.0-flash-001",
|
|
102
|
+
GEMINI_1_5_PRO = "gemini-1.5-pro",
|
|
103
|
+
GEMINI_1_5_FLASH = "gemini-1.5-flash",
|
|
104
|
+
GEMINI_1_5_FLASH_LITE = "gemini-1.5-flash-lite"
|
|
93
105
|
}
|
|
94
106
|
/**
|
|
95
107
|
* Union type of all supported model names
|
package/dist/core/types.js
CHANGED
|
@@ -14,6 +14,7 @@ export var AIProviderName;
|
|
|
14
14
|
AIProviderName["OLLAMA"] = "ollama";
|
|
15
15
|
AIProviderName["MISTRAL"] = "mistral";
|
|
16
16
|
AIProviderName["LITELLM"] = "litellm";
|
|
17
|
+
AIProviderName["SAGEMAKER"] = "sagemaker";
|
|
17
18
|
AIProviderName["AUTO"] = "auto";
|
|
18
19
|
})(AIProviderName || (AIProviderName = {}));
|
|
19
20
|
/**
|
|
@@ -42,21 +43,41 @@ export var OpenAIModels;
|
|
|
42
43
|
*/
|
|
43
44
|
export var VertexModels;
|
|
44
45
|
(function (VertexModels) {
|
|
46
|
+
// Claude 4 Series (Latest - May 2025)
|
|
45
47
|
VertexModels["CLAUDE_4_0_SONNET"] = "claude-sonnet-4@20250514";
|
|
46
|
-
VertexModels["
|
|
48
|
+
VertexModels["CLAUDE_4_0_OPUS"] = "claude-opus-4@20250514";
|
|
49
|
+
// Claude 3.5 Series (Still supported)
|
|
50
|
+
VertexModels["CLAUDE_3_5_SONNET"] = "claude-3-5-sonnet-20241022";
|
|
51
|
+
VertexModels["CLAUDE_3_5_HAIKU"] = "claude-3-5-haiku-20241022";
|
|
52
|
+
// Claude 3 Series (Legacy support)
|
|
53
|
+
VertexModels["CLAUDE_3_SONNET"] = "claude-3-sonnet-20240229";
|
|
54
|
+
VertexModels["CLAUDE_3_OPUS"] = "claude-3-opus-20240229";
|
|
55
|
+
VertexModels["CLAUDE_3_HAIKU"] = "claude-3-haiku-20240307";
|
|
56
|
+
// Gemini 2.5 Series (Latest - 2025)
|
|
47
57
|
VertexModels["GEMINI_2_5_PRO"] = "gemini-2.5-pro";
|
|
48
58
|
VertexModels["GEMINI_2_5_FLASH"] = "gemini-2.5-flash";
|
|
49
59
|
VertexModels["GEMINI_2_5_FLASH_LITE"] = "gemini-2.5-flash-lite";
|
|
60
|
+
// Gemini 2.0 Series
|
|
61
|
+
VertexModels["GEMINI_2_0_FLASH_001"] = "gemini-2.0-flash-001";
|
|
62
|
+
// Gemini 1.5 Series (Legacy support)
|
|
63
|
+
VertexModels["GEMINI_1_5_PRO"] = "gemini-1.5-pro";
|
|
64
|
+
VertexModels["GEMINI_1_5_FLASH"] = "gemini-1.5-flash";
|
|
50
65
|
})(VertexModels || (VertexModels = {}));
|
|
51
66
|
/**
|
|
52
67
|
* Supported Models for Google AI Studio
|
|
53
68
|
*/
|
|
54
69
|
export var GoogleAIModels;
|
|
55
70
|
(function (GoogleAIModels) {
|
|
56
|
-
|
|
71
|
+
// Gemini 2.5 Series (Latest - 2025)
|
|
57
72
|
GoogleAIModels["GEMINI_2_5_PRO"] = "gemini-2.5-pro";
|
|
58
73
|
GoogleAIModels["GEMINI_2_5_FLASH"] = "gemini-2.5-flash";
|
|
59
|
-
GoogleAIModels["
|
|
74
|
+
GoogleAIModels["GEMINI_2_5_FLASH_LITE"] = "gemini-2.5-flash-lite";
|
|
75
|
+
// Gemini 2.0 Series
|
|
76
|
+
GoogleAIModels["GEMINI_2_0_FLASH_001"] = "gemini-2.0-flash-001";
|
|
77
|
+
// Gemini 1.5 Series (Legacy support)
|
|
78
|
+
GoogleAIModels["GEMINI_1_5_PRO"] = "gemini-1.5-pro";
|
|
79
|
+
GoogleAIModels["GEMINI_1_5_FLASH"] = "gemini-1.5-flash";
|
|
80
|
+
GoogleAIModels["GEMINI_1_5_FLASH_LITE"] = "gemini-1.5-flash-lite";
|
|
60
81
|
})(GoogleAIModels || (GoogleAIModels = {}));
|
|
61
82
|
/**
|
|
62
83
|
* Default provider configurations
|
|
@@ -35,7 +35,16 @@ export class ProviderFactory {
|
|
|
35
35
|
if (!registration) {
|
|
36
36
|
throw new Error(`Unknown provider: ${providerName}. Available providers: ${this.getAvailableProviders().join(", ")}`);
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
// Respect environment variables before falling back to registry default
|
|
39
|
+
let model = modelName;
|
|
40
|
+
if (!model) {
|
|
41
|
+
// Check for provider-specific environment variables
|
|
42
|
+
if (providerName.toLowerCase().includes("vertex")) {
|
|
43
|
+
model = process.env.VERTEX_MODEL;
|
|
44
|
+
}
|
|
45
|
+
// Fallback to registry default if no env var
|
|
46
|
+
model = model || registration.defaultModel;
|
|
47
|
+
}
|
|
39
48
|
try {
|
|
40
49
|
// Try calling as factory function first, then fallback to constructor
|
|
41
50
|
let result;
|
|
@@ -55,7 +55,7 @@ export class ProviderRegistry {
|
|
|
55
55
|
ProviderFactory.registerProvider(AIProviderName.VERTEX, async (modelName) => {
|
|
56
56
|
const { GoogleVertexProvider } = await import("../providers/googleVertex.js");
|
|
57
57
|
return new GoogleVertexProvider(modelName);
|
|
58
|
-
}, "
|
|
58
|
+
}, "claude-sonnet-4@20250514", ["vertex", "googleVertex"]);
|
|
59
59
|
// Register Hugging Face provider (Unified Router implementation)
|
|
60
60
|
ProviderFactory.registerProvider(AIProviderName.HUGGINGFACE, async (modelName) => {
|
|
61
61
|
const { HuggingFaceProvider } = await import("../providers/huggingFace.js");
|
|
@@ -82,6 +82,11 @@ export class ProviderRegistry {
|
|
|
82
82
|
return new OpenAICompatibleProvider(modelName, sdk);
|
|
83
83
|
}, process.env.OPENAI_COMPATIBLE_MODEL || undefined, // Enable auto-discovery when no model specified
|
|
84
84
|
["openai-compatible", "openrouter", "vllm", "compatible"]);
|
|
85
|
+
// Register Amazon SageMaker provider
|
|
86
|
+
ProviderFactory.registerProvider(AIProviderName.SAGEMAKER, async (modelName, providerName, sdk) => {
|
|
87
|
+
const { AmazonSageMakerProvider } = await import("../providers/amazonSagemaker.js");
|
|
88
|
+
return new AmazonSageMakerProvider(modelName);
|
|
89
|
+
}, process.env.SAGEMAKER_MODEL || "sagemaker-model", ["sagemaker", "aws-sagemaker"]);
|
|
85
90
|
logger.debug("All providers registered successfully");
|
|
86
91
|
this.registered = true;
|
|
87
92
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ZodType, ZodTypeDef } from "zod";
|
|
2
2
|
import type { Schema } from "ai";
|
|
3
|
-
import type { Tool,
|
|
3
|
+
import type { Tool, LanguageModelV1 } from "ai";
|
|
4
4
|
import type { AIProvider, TextGenerationOptions, EnhancedGenerateResult, AnalyticsData, AIProviderName, EvaluationData } from "../core/types.js";
|
|
5
5
|
import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
|
|
6
6
|
import type { JsonValue, UnknownRecord } from "../types/common.js";
|
|
@@ -419,7 +419,7 @@ export declare abstract class BaseProvider implements AIProvider {
|
|
|
419
419
|
* REQUIRED: Every provider MUST implement this method
|
|
420
420
|
* Returns the Vercel AI SDK model instance for this provider
|
|
421
421
|
*/
|
|
422
|
-
protected abstract getAISDKModel():
|
|
422
|
+
protected abstract getAISDKModel(): LanguageModelV1 | Promise<LanguageModelV1>;
|
|
423
423
|
/**
|
|
424
424
|
* Get all available tools - direct tools are ALWAYS available
|
|
425
425
|
* MCP tools are added when available (without blocking)
|
package/dist/lib/core/types.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ export declare enum AIProviderName {
|
|
|
51
51
|
OLLAMA = "ollama",
|
|
52
52
|
MISTRAL = "mistral",
|
|
53
53
|
LITELLM = "litellm",
|
|
54
|
+
SAGEMAKER = "sagemaker",
|
|
54
55
|
AUTO = "auto"
|
|
55
56
|
}
|
|
56
57
|
/**
|
|
@@ -77,19 +78,30 @@ export declare enum OpenAIModels {
|
|
|
77
78
|
*/
|
|
78
79
|
export declare enum VertexModels {
|
|
79
80
|
CLAUDE_4_0_SONNET = "claude-sonnet-4@20250514",
|
|
80
|
-
|
|
81
|
+
CLAUDE_4_0_OPUS = "claude-opus-4@20250514",
|
|
82
|
+
CLAUDE_3_5_SONNET = "claude-3-5-sonnet-20241022",
|
|
83
|
+
CLAUDE_3_5_HAIKU = "claude-3-5-haiku-20241022",
|
|
84
|
+
CLAUDE_3_SONNET = "claude-3-sonnet-20240229",
|
|
85
|
+
CLAUDE_3_OPUS = "claude-3-opus-20240229",
|
|
86
|
+
CLAUDE_3_HAIKU = "claude-3-haiku-20240307",
|
|
81
87
|
GEMINI_2_5_PRO = "gemini-2.5-pro",
|
|
82
88
|
GEMINI_2_5_FLASH = "gemini-2.5-flash",
|
|
83
|
-
GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite"
|
|
89
|
+
GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite",
|
|
90
|
+
GEMINI_2_0_FLASH_001 = "gemini-2.0-flash-001",
|
|
91
|
+
GEMINI_1_5_PRO = "gemini-1.5-pro",
|
|
92
|
+
GEMINI_1_5_FLASH = "gemini-1.5-flash"
|
|
84
93
|
}
|
|
85
94
|
/**
|
|
86
95
|
* Supported Models for Google AI Studio
|
|
87
96
|
*/
|
|
88
97
|
export declare enum GoogleAIModels {
|
|
89
|
-
GEMINI_2_0_FLASH_001 = "gemini-2.0-flash-001",
|
|
90
98
|
GEMINI_2_5_PRO = "gemini-2.5-pro",
|
|
91
99
|
GEMINI_2_5_FLASH = "gemini-2.5-flash",
|
|
92
|
-
|
|
100
|
+
GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite",
|
|
101
|
+
GEMINI_2_0_FLASH_001 = "gemini-2.0-flash-001",
|
|
102
|
+
GEMINI_1_5_PRO = "gemini-1.5-pro",
|
|
103
|
+
GEMINI_1_5_FLASH = "gemini-1.5-flash",
|
|
104
|
+
GEMINI_1_5_FLASH_LITE = "gemini-1.5-flash-lite"
|
|
93
105
|
}
|
|
94
106
|
/**
|
|
95
107
|
* Union type of all supported model names
|
package/dist/lib/core/types.js
CHANGED
|
@@ -14,6 +14,7 @@ export var AIProviderName;
|
|
|
14
14
|
AIProviderName["OLLAMA"] = "ollama";
|
|
15
15
|
AIProviderName["MISTRAL"] = "mistral";
|
|
16
16
|
AIProviderName["LITELLM"] = "litellm";
|
|
17
|
+
AIProviderName["SAGEMAKER"] = "sagemaker";
|
|
17
18
|
AIProviderName["AUTO"] = "auto";
|
|
18
19
|
})(AIProviderName || (AIProviderName = {}));
|
|
19
20
|
/**
|
|
@@ -42,21 +43,41 @@ export var OpenAIModels;
|
|
|
42
43
|
*/
|
|
43
44
|
export var VertexModels;
|
|
44
45
|
(function (VertexModels) {
|
|
46
|
+
// Claude 4 Series (Latest - May 2025)
|
|
45
47
|
VertexModels["CLAUDE_4_0_SONNET"] = "claude-sonnet-4@20250514";
|
|
46
|
-
VertexModels["
|
|
48
|
+
VertexModels["CLAUDE_4_0_OPUS"] = "claude-opus-4@20250514";
|
|
49
|
+
// Claude 3.5 Series (Still supported)
|
|
50
|
+
VertexModels["CLAUDE_3_5_SONNET"] = "claude-3-5-sonnet-20241022";
|
|
51
|
+
VertexModels["CLAUDE_3_5_HAIKU"] = "claude-3-5-haiku-20241022";
|
|
52
|
+
// Claude 3 Series (Legacy support)
|
|
53
|
+
VertexModels["CLAUDE_3_SONNET"] = "claude-3-sonnet-20240229";
|
|
54
|
+
VertexModels["CLAUDE_3_OPUS"] = "claude-3-opus-20240229";
|
|
55
|
+
VertexModels["CLAUDE_3_HAIKU"] = "claude-3-haiku-20240307";
|
|
56
|
+
// Gemini 2.5 Series (Latest - 2025)
|
|
47
57
|
VertexModels["GEMINI_2_5_PRO"] = "gemini-2.5-pro";
|
|
48
58
|
VertexModels["GEMINI_2_5_FLASH"] = "gemini-2.5-flash";
|
|
49
59
|
VertexModels["GEMINI_2_5_FLASH_LITE"] = "gemini-2.5-flash-lite";
|
|
60
|
+
// Gemini 2.0 Series
|
|
61
|
+
VertexModels["GEMINI_2_0_FLASH_001"] = "gemini-2.0-flash-001";
|
|
62
|
+
// Gemini 1.5 Series (Legacy support)
|
|
63
|
+
VertexModels["GEMINI_1_5_PRO"] = "gemini-1.5-pro";
|
|
64
|
+
VertexModels["GEMINI_1_5_FLASH"] = "gemini-1.5-flash";
|
|
50
65
|
})(VertexModels || (VertexModels = {}));
|
|
51
66
|
/**
|
|
52
67
|
* Supported Models for Google AI Studio
|
|
53
68
|
*/
|
|
54
69
|
export var GoogleAIModels;
|
|
55
70
|
(function (GoogleAIModels) {
|
|
56
|
-
|
|
71
|
+
// Gemini 2.5 Series (Latest - 2025)
|
|
57
72
|
GoogleAIModels["GEMINI_2_5_PRO"] = "gemini-2.5-pro";
|
|
58
73
|
GoogleAIModels["GEMINI_2_5_FLASH"] = "gemini-2.5-flash";
|
|
59
|
-
GoogleAIModels["
|
|
74
|
+
GoogleAIModels["GEMINI_2_5_FLASH_LITE"] = "gemini-2.5-flash-lite";
|
|
75
|
+
// Gemini 2.0 Series
|
|
76
|
+
GoogleAIModels["GEMINI_2_0_FLASH_001"] = "gemini-2.0-flash-001";
|
|
77
|
+
// Gemini 1.5 Series (Legacy support)
|
|
78
|
+
GoogleAIModels["GEMINI_1_5_PRO"] = "gemini-1.5-pro";
|
|
79
|
+
GoogleAIModels["GEMINI_1_5_FLASH"] = "gemini-1.5-flash";
|
|
80
|
+
GoogleAIModels["GEMINI_1_5_FLASH_LITE"] = "gemini-1.5-flash-lite";
|
|
60
81
|
})(GoogleAIModels || (GoogleAIModels = {}));
|
|
61
82
|
/**
|
|
62
83
|
* Default provider configurations
|
|
@@ -35,7 +35,16 @@ export class ProviderFactory {
|
|
|
35
35
|
if (!registration) {
|
|
36
36
|
throw new Error(`Unknown provider: ${providerName}. Available providers: ${this.getAvailableProviders().join(", ")}`);
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
// Respect environment variables before falling back to registry default
|
|
39
|
+
let model = modelName;
|
|
40
|
+
if (!model) {
|
|
41
|
+
// Check for provider-specific environment variables
|
|
42
|
+
if (providerName.toLowerCase().includes("vertex")) {
|
|
43
|
+
model = process.env.VERTEX_MODEL;
|
|
44
|
+
}
|
|
45
|
+
// Fallback to registry default if no env var
|
|
46
|
+
model = model || registration.defaultModel;
|
|
47
|
+
}
|
|
39
48
|
try {
|
|
40
49
|
// Try calling as factory function first, then fallback to constructor
|
|
41
50
|
let result;
|
|
@@ -55,7 +55,7 @@ export class ProviderRegistry {
|
|
|
55
55
|
ProviderFactory.registerProvider(AIProviderName.VERTEX, async (modelName) => {
|
|
56
56
|
const { GoogleVertexProvider } = await import("../providers/googleVertex.js");
|
|
57
57
|
return new GoogleVertexProvider(modelName);
|
|
58
|
-
}, "
|
|
58
|
+
}, "claude-sonnet-4@20250514", ["vertex", "googleVertex"]);
|
|
59
59
|
// Register Hugging Face provider (Unified Router implementation)
|
|
60
60
|
ProviderFactory.registerProvider(AIProviderName.HUGGINGFACE, async (modelName) => {
|
|
61
61
|
const { HuggingFaceProvider } = await import("../providers/huggingFace.js");
|
|
@@ -82,6 +82,11 @@ export class ProviderRegistry {
|
|
|
82
82
|
return new OpenAICompatibleProvider(modelName, sdk);
|
|
83
83
|
}, process.env.OPENAI_COMPATIBLE_MODEL || undefined, // Enable auto-discovery when no model specified
|
|
84
84
|
["openai-compatible", "openrouter", "vllm", "compatible"]);
|
|
85
|
+
// Register Amazon SageMaker provider
|
|
86
|
+
ProviderFactory.registerProvider(AIProviderName.SAGEMAKER, async (modelName, providerName, sdk) => {
|
|
87
|
+
const { AmazonSageMakerProvider } = await import("../providers/amazonSagemaker.js");
|
|
88
|
+
return new AmazonSageMakerProvider(modelName);
|
|
89
|
+
}, process.env.SAGEMAKER_MODEL || "sagemaker-model", ["sagemaker", "aws-sagemaker"]);
|
|
85
90
|
logger.debug("All providers registered successfully");
|
|
86
91
|
this.registered = true;
|
|
87
92
|
}
|
package/dist/lib/neurolink.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type { GenerateOptions, GenerateResult } from "./types/generateTypes.js";
|
|
|
10
10
|
import type { StreamOptions, StreamResult } from "./types/streamTypes.js";
|
|
11
11
|
import type { SimpleTool } from "./sdk/toolRegistration.js";
|
|
12
12
|
import type { InMemoryMCPServerConfig } from "./types/mcpTypes.js";
|
|
13
|
+
import { EventEmitter } from "events";
|
|
13
14
|
export interface ProviderStatus {
|
|
14
15
|
provider: string;
|
|
15
16
|
status: "working" | "failed" | "not-configured";
|
|
@@ -41,10 +42,19 @@ export interface MCPServerInfo {
|
|
|
41
42
|
}
|
|
42
43
|
export declare class NeuroLink {
|
|
43
44
|
private mcpInitialized;
|
|
45
|
+
private emitter;
|
|
44
46
|
private customTools;
|
|
45
47
|
private inMemoryServers;
|
|
46
48
|
private toolCircuitBreakers;
|
|
47
49
|
private toolExecutionMetrics;
|
|
50
|
+
/**
|
|
51
|
+
* Helper method to emit tool end event in a consistent way
|
|
52
|
+
* Used by executeTool in both success and error paths
|
|
53
|
+
* @param toolName - Name of the tool
|
|
54
|
+
* @param startTime - Timestamp when tool execution started
|
|
55
|
+
* @param success - Whether the tool execution was successful
|
|
56
|
+
*/
|
|
57
|
+
private emitToolEndEvent;
|
|
48
58
|
constructor();
|
|
49
59
|
/**
|
|
50
60
|
* Initialize MCP registry with enhanced error handling and resource cleanup
|
|
@@ -101,6 +111,11 @@ export declare class NeuroLink {
|
|
|
101
111
|
* Future-ready for multi-modal capabilities with current text focus
|
|
102
112
|
*/
|
|
103
113
|
stream(options: StreamOptions): Promise<StreamResult>;
|
|
114
|
+
/**
|
|
115
|
+
* Get the EventEmitter to listen to NeuroLink events
|
|
116
|
+
* @returns EventEmitter instance
|
|
117
|
+
*/
|
|
118
|
+
getEventEmitter(): EventEmitter<[never]>;
|
|
104
119
|
/**
|
|
105
120
|
* Register a custom tool that will be available to all AI providers
|
|
106
121
|
* @param name - Unique name for the tool
|
package/dist/lib/neurolink.js
CHANGED
|
@@ -26,15 +26,32 @@ import { validateTool, createMCPServerFromTools, } from "./sdk/toolRegistration.
|
|
|
26
26
|
import { processFactoryOptions, enhanceTextGenerationOptions, validateFactoryConfig, processStreamingFactoryOptions, createCleanStreamOptions, } from "./utils/factoryProcessing.js";
|
|
27
27
|
// Enhanced error handling imports
|
|
28
28
|
import { ErrorFactory, NeuroLinkError, withTimeout, withRetry, isRetriableError, logStructuredError, CircuitBreaker, } from "./utils/errorHandling.js";
|
|
29
|
+
import { EventEmitter } from "events";
|
|
29
30
|
// Core types imported from core/types.js
|
|
30
31
|
export class NeuroLink {
|
|
31
32
|
mcpInitialized = false;
|
|
33
|
+
emitter = new EventEmitter();
|
|
32
34
|
// Tool registration support
|
|
33
35
|
customTools = new Map();
|
|
34
36
|
inMemoryServers = new Map();
|
|
35
37
|
// Enhanced error handling support
|
|
36
38
|
toolCircuitBreakers = new Map();
|
|
37
39
|
toolExecutionMetrics = new Map();
|
|
40
|
+
/**
|
|
41
|
+
* Helper method to emit tool end event in a consistent way
|
|
42
|
+
* Used by executeTool in both success and error paths
|
|
43
|
+
* @param toolName - Name of the tool
|
|
44
|
+
* @param startTime - Timestamp when tool execution started
|
|
45
|
+
* @param success - Whether the tool execution was successful
|
|
46
|
+
*/
|
|
47
|
+
emitToolEndEvent(toolName, startTime, success) {
|
|
48
|
+
this.emitter.emit("tool:end", {
|
|
49
|
+
toolName,
|
|
50
|
+
responseTime: Date.now() - startTime,
|
|
51
|
+
success,
|
|
52
|
+
timestamp: Date.now(),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
38
55
|
constructor() {
|
|
39
56
|
// SDK always disables manual MCP config for security
|
|
40
57
|
ProviderRegistry.setOptions({
|
|
@@ -91,7 +108,6 @@ export class NeuroLink {
|
|
|
91
108
|
* Replaces both generateText and legacy methods
|
|
92
109
|
*/
|
|
93
110
|
async generate(optionsOrPrompt) {
|
|
94
|
-
const startTime = Date.now();
|
|
95
111
|
// Convert string prompt to full options
|
|
96
112
|
const options = typeof optionsOrPrompt === "string"
|
|
97
113
|
? { input: { text: optionsOrPrompt } }
|
|
@@ -100,6 +116,12 @@ export class NeuroLink {
|
|
|
100
116
|
if (!options.input?.text || typeof options.input.text !== "string") {
|
|
101
117
|
throw new Error("Input text is required and must be a non-empty string");
|
|
102
118
|
}
|
|
119
|
+
const startTime = Date.now();
|
|
120
|
+
// Emit generation start event
|
|
121
|
+
this.emitter.emit("generation:start", {
|
|
122
|
+
provider: options.provider || "auto",
|
|
123
|
+
timestamp: startTime,
|
|
124
|
+
});
|
|
103
125
|
// Process factory configuration
|
|
104
126
|
const factoryResult = processFactoryOptions(options);
|
|
105
127
|
// Validate factory configuration if present
|
|
@@ -142,6 +164,13 @@ export class NeuroLink {
|
|
|
142
164
|
}
|
|
143
165
|
// Use redesigned generation logic
|
|
144
166
|
const textResult = await this.generateTextInternal(textOptions);
|
|
167
|
+
// Emit generation completion event
|
|
168
|
+
this.emitter.emit("generation:end", {
|
|
169
|
+
provider: textResult.provider,
|
|
170
|
+
responseTime: Date.now() - startTime,
|
|
171
|
+
toolsUsed: textResult.toolsUsed,
|
|
172
|
+
timestamp: Date.now(),
|
|
173
|
+
});
|
|
145
174
|
// Convert back to GenerateResult
|
|
146
175
|
const generateResult = {
|
|
147
176
|
content: textResult.content,
|
|
@@ -509,6 +538,11 @@ export class NeuroLink {
|
|
|
509
538
|
options.input.text.trim() === "") {
|
|
510
539
|
throw new Error("Stream options must include input.text as a non-empty string");
|
|
511
540
|
}
|
|
541
|
+
// Emit stream start event
|
|
542
|
+
this.emitter.emit("stream:start", {
|
|
543
|
+
provider: options.provider || "auto",
|
|
544
|
+
timestamp: startTime,
|
|
545
|
+
});
|
|
512
546
|
// Process factory configuration for streaming
|
|
513
547
|
const factoryResult = processFactoryOptions(options);
|
|
514
548
|
const streamingResult = processStreamingFactoryOptions(options);
|
|
@@ -576,6 +610,11 @@ export class NeuroLink {
|
|
|
576
610
|
responseTime,
|
|
577
611
|
provider: providerName,
|
|
578
612
|
});
|
|
613
|
+
// Emit stream completion event
|
|
614
|
+
this.emitter.emit("stream:end", {
|
|
615
|
+
provider: providerName,
|
|
616
|
+
responseTime,
|
|
617
|
+
});
|
|
579
618
|
// Convert to StreamResult format - Include analytics and evaluation from provider
|
|
580
619
|
return {
|
|
581
620
|
stream,
|
|
@@ -615,6 +654,12 @@ export class NeuroLink {
|
|
|
615
654
|
const cleanOptions = createCleanStreamOptions(enhancedOptions);
|
|
616
655
|
const streamResult = await provider.stream(cleanOptions);
|
|
617
656
|
const responseTime = Date.now() - startTime;
|
|
657
|
+
// Emit stream completion event for fallback
|
|
658
|
+
this.emitter.emit("stream:end", {
|
|
659
|
+
provider: providerName,
|
|
660
|
+
responseTime,
|
|
661
|
+
fallback: true,
|
|
662
|
+
});
|
|
618
663
|
return {
|
|
619
664
|
stream: streamResult.stream,
|
|
620
665
|
provider: providerName,
|
|
@@ -643,6 +688,13 @@ export class NeuroLink {
|
|
|
643
688
|
};
|
|
644
689
|
}
|
|
645
690
|
}
|
|
691
|
+
/**
|
|
692
|
+
* Get the EventEmitter to listen to NeuroLink events
|
|
693
|
+
* @returns EventEmitter instance
|
|
694
|
+
*/
|
|
695
|
+
getEventEmitter() {
|
|
696
|
+
return this.emitter;
|
|
697
|
+
}
|
|
646
698
|
// ========================================
|
|
647
699
|
// Tool Registration API
|
|
648
700
|
// ========================================
|
|
@@ -652,6 +704,11 @@ export class NeuroLink {
|
|
|
652
704
|
* @param tool - Tool configuration
|
|
653
705
|
*/
|
|
654
706
|
registerTool(name, tool) {
|
|
707
|
+
// Emit tool registration start event
|
|
708
|
+
this.emitter.emit("tools-register:start", {
|
|
709
|
+
toolName: name,
|
|
710
|
+
timestamp: Date.now(),
|
|
711
|
+
});
|
|
655
712
|
try {
|
|
656
713
|
// Validate tool configuration
|
|
657
714
|
validateTool(name, tool);
|
|
@@ -666,6 +723,12 @@ export class NeuroLink {
|
|
|
666
723
|
// Store as in-memory server
|
|
667
724
|
this.inMemoryServers.set(serverId, mcpServer);
|
|
668
725
|
logger.info(`Registered custom tool: ${name}`);
|
|
726
|
+
// Emit tool registration success event
|
|
727
|
+
this.emitter.emit("tools-register:end", {
|
|
728
|
+
toolName: name,
|
|
729
|
+
success: true,
|
|
730
|
+
timestamp: Date.now(),
|
|
731
|
+
});
|
|
669
732
|
}
|
|
670
733
|
catch (error) {
|
|
671
734
|
logger.error(`Failed to register tool ${name}:`, error);
|
|
@@ -758,6 +821,11 @@ export class NeuroLink {
|
|
|
758
821
|
async executeTool(toolName, params = {}, options) {
|
|
759
822
|
const functionTag = "NeuroLink.executeTool";
|
|
760
823
|
const executionStartTime = Date.now();
|
|
824
|
+
// Emit tool start event
|
|
825
|
+
this.emitter.emit("tool:start", {
|
|
826
|
+
toolName,
|
|
827
|
+
timestamp: executionStartTime,
|
|
828
|
+
});
|
|
761
829
|
// Set default options
|
|
762
830
|
const finalOptions = {
|
|
763
831
|
timeout: options?.timeout || 30000, // 30 second default timeout
|
|
@@ -832,6 +900,8 @@ export class NeuroLink {
|
|
|
832
900
|
memoryDelta,
|
|
833
901
|
circuitBreakerState: circuitBreaker.getState(),
|
|
834
902
|
});
|
|
903
|
+
// Emit tool end event using the helper method
|
|
904
|
+
this.emitToolEndEvent(toolName, executionStartTime, true);
|
|
835
905
|
return result;
|
|
836
906
|
}
|
|
837
907
|
catch (error) {
|
|
@@ -867,6 +937,8 @@ export class NeuroLink {
|
|
|
867
937
|
else {
|
|
868
938
|
structuredError = ErrorFactory.toolExecutionFailed(toolName, new Error(String(error)));
|
|
869
939
|
}
|
|
940
|
+
// Emit tool end event using the helper method
|
|
941
|
+
this.emitToolEndEvent(toolName, executionStartTime, false);
|
|
870
942
|
// Add execution context to structured error
|
|
871
943
|
structuredError = new NeuroLinkError({
|
|
872
944
|
...structuredError,
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Amazon SageMaker Provider Implementation (Simplified)
|
|
3
|
+
*
|
|
4
|
+
* This module provides a simplified SageMaker provider that extends BaseProvider
|
|
5
|
+
* and integrates with the NeuroLink ecosystem using existing patterns.
|
|
6
|
+
*/
|
|
7
|
+
import type { ZodType, ZodTypeDef } from "zod";
|
|
8
|
+
import type { Schema, LanguageModelV1 } from "ai";
|
|
9
|
+
import type { AIProviderName } from "../core/types.js";
|
|
10
|
+
import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
|
|
11
|
+
import { BaseProvider } from "../core/baseProvider.js";
|
|
12
|
+
/**
|
|
13
|
+
* Amazon SageMaker Provider extending BaseProvider
|
|
14
|
+
*/
|
|
15
|
+
export declare class AmazonSageMakerProvider extends BaseProvider {
|
|
16
|
+
private sagemakerModel;
|
|
17
|
+
private sagemakerConfig;
|
|
18
|
+
private modelConfig;
|
|
19
|
+
constructor(modelName?: string, endpointName?: string);
|
|
20
|
+
protected getProviderName(): AIProviderName;
|
|
21
|
+
protected getDefaultModel(): string;
|
|
22
|
+
protected getAISDKModel(): LanguageModelV1;
|
|
23
|
+
protected executeStream(options: StreamOptions, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<StreamResult>;
|
|
24
|
+
protected handleProviderError(error: unknown): Error;
|
|
25
|
+
/**
|
|
26
|
+
* Get SageMaker-specific provider information
|
|
27
|
+
*/
|
|
28
|
+
getSageMakerInfo(): {
|
|
29
|
+
endpointName: string;
|
|
30
|
+
modelType: string;
|
|
31
|
+
region: string;
|
|
32
|
+
configured: boolean;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Test basic configuration
|
|
36
|
+
*/
|
|
37
|
+
testConnection(): Promise<{
|
|
38
|
+
connected: boolean;
|
|
39
|
+
error?: string;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Public method to get the AI SDK model for CLI and external usage
|
|
43
|
+
*/
|
|
44
|
+
getModel(): Promise<LanguageModelV1>;
|
|
45
|
+
/**
|
|
46
|
+
* Test connectivity to the SageMaker endpoint
|
|
47
|
+
*/
|
|
48
|
+
testConnectivity(): Promise<{
|
|
49
|
+
success: boolean;
|
|
50
|
+
error?: string;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Get model capabilities and information
|
|
54
|
+
*/
|
|
55
|
+
getModelCapabilities(): {
|
|
56
|
+
capabilities: {
|
|
57
|
+
streaming: boolean;
|
|
58
|
+
toolCalling: boolean;
|
|
59
|
+
structuredOutput: boolean;
|
|
60
|
+
batchInference: boolean;
|
|
61
|
+
supportedResponseFormats: string[];
|
|
62
|
+
supportedToolTypes: string[];
|
|
63
|
+
maxBatchSize: number;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export default AmazonSageMakerProvider;
|