@juspay/neurolink 9.51.4 → 9.52.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 +6 -0
- package/dist/browser/neurolink.min.js +227 -225
- package/dist/cli/loop/optionsSchema.d.ts +1 -1
- package/dist/core/factory.d.ts +2 -2
- package/dist/core/factory.js +4 -4
- package/dist/factories/providerFactory.d.ts +4 -4
- package/dist/factories/providerFactory.js +20 -7
- package/dist/factories/providerRegistry.d.ts +5 -0
- package/dist/factories/providerRegistry.js +45 -26
- package/dist/lib/core/factory.d.ts +2 -2
- package/dist/lib/core/factory.js +4 -4
- package/dist/lib/factories/providerFactory.d.ts +4 -4
- package/dist/lib/factories/providerFactory.js +20 -7
- package/dist/lib/factories/providerRegistry.d.ts +5 -0
- package/dist/lib/factories/providerRegistry.js +45 -26
- package/dist/lib/neurolink.d.ts +21 -0
- package/dist/lib/neurolink.js +69 -6
- package/dist/lib/providers/amazonBedrock.d.ts +6 -1
- package/dist/lib/providers/amazonBedrock.js +14 -2
- package/dist/lib/providers/amazonSagemaker.d.ts +7 -1
- package/dist/lib/providers/amazonSagemaker.js +21 -3
- package/dist/lib/providers/anthropic.d.ts +4 -1
- package/dist/lib/providers/anthropic.js +18 -5
- package/dist/lib/providers/azureOpenai.d.ts +2 -1
- package/dist/lib/providers/azureOpenai.js +10 -5
- package/dist/lib/providers/googleAiStudio.d.ts +4 -1
- package/dist/lib/providers/googleAiStudio.js +6 -7
- package/dist/lib/providers/googleVertex.d.ts +3 -1
- package/dist/lib/providers/googleVertex.js +96 -17
- package/dist/lib/providers/huggingFace.d.ts +2 -1
- package/dist/lib/providers/huggingFace.js +4 -4
- package/dist/lib/providers/litellm.d.ts +5 -1
- package/dist/lib/providers/litellm.js +14 -9
- package/dist/lib/providers/mistral.d.ts +2 -1
- package/dist/lib/providers/mistral.js +2 -2
- package/dist/lib/providers/ollama.d.ts +3 -1
- package/dist/lib/providers/ollama.js +2 -2
- package/dist/lib/providers/openAI.d.ts +5 -1
- package/dist/lib/providers/openAI.js +15 -5
- package/dist/lib/providers/openRouter.d.ts +5 -1
- package/dist/lib/providers/openRouter.js +17 -5
- package/dist/lib/providers/openaiCompatible.d.ts +4 -1
- package/dist/lib/providers/openaiCompatible.js +15 -3
- package/dist/lib/types/configTypes.d.ts +7 -0
- package/dist/lib/types/generateTypes.d.ts +13 -0
- package/dist/lib/types/providers.d.ts +75 -0
- package/dist/lib/types/streamTypes.d.ts +7 -1
- package/dist/neurolink.d.ts +21 -0
- package/dist/neurolink.js +69 -6
- package/dist/providers/amazonBedrock.d.ts +6 -1
- package/dist/providers/amazonBedrock.js +14 -2
- package/dist/providers/amazonSagemaker.d.ts +7 -1
- package/dist/providers/amazonSagemaker.js +21 -3
- package/dist/providers/anthropic.d.ts +4 -1
- package/dist/providers/anthropic.js +18 -5
- package/dist/providers/azureOpenai.d.ts +2 -1
- package/dist/providers/azureOpenai.js +10 -5
- package/dist/providers/googleAiStudio.d.ts +4 -1
- package/dist/providers/googleAiStudio.js +6 -7
- package/dist/providers/googleVertex.d.ts +3 -1
- package/dist/providers/googleVertex.js +96 -17
- package/dist/providers/huggingFace.d.ts +2 -1
- package/dist/providers/huggingFace.js +4 -4
- package/dist/providers/litellm.d.ts +5 -1
- package/dist/providers/litellm.js +14 -9
- package/dist/providers/mistral.d.ts +2 -1
- package/dist/providers/mistral.js +2 -2
- package/dist/providers/ollama.d.ts +3 -1
- package/dist/providers/ollama.js +2 -2
- package/dist/providers/openAI.d.ts +5 -1
- package/dist/providers/openAI.js +15 -5
- package/dist/providers/openRouter.d.ts +5 -1
- package/dist/providers/openRouter.js +17 -5
- package/dist/providers/openaiCompatible.d.ts +4 -1
- package/dist/providers/openaiCompatible.js +15 -3
- package/dist/types/configTypes.d.ts +7 -0
- package/dist/types/generateTypes.d.ts +13 -0
- package/dist/types/providers.d.ts +75 -0
- package/dist/types/streamTypes.d.ts +7 -1
- package/package.json +3 -2
|
@@ -5,4 +5,4 @@ import type { TextGenerationOptions } from "../../lib/types/index.js";
|
|
|
5
5
|
* This object provides metadata for validation and help text in the CLI loop.
|
|
6
6
|
* It is derived from the main TextGenerationOptions interface to ensure consistency.
|
|
7
7
|
*/
|
|
8
|
-
export declare const textGenerationOptionsSchema: Record<keyof Omit<TextGenerationOptions, "prompt" | "input" | "schema" | "tools" | "context" | "conversationHistory" | "conversationMessages" | "conversationMemoryConfig" | "originalPrompt" | "middleware" | "expectedOutcome" | "evaluationCriteria" | "region" | "csvOptions" | "tts" | "thinkingConfig" | "requestId" | "fileRegistry" | "abortSignal" | "toolFilter" | "excludeTools" | "toolChoice" | "prepareStep">, OptionSchema>;
|
|
8
|
+
export declare const textGenerationOptionsSchema: Record<keyof Omit<TextGenerationOptions, "prompt" | "input" | "schema" | "tools" | "context" | "conversationHistory" | "conversationMessages" | "conversationMemoryConfig" | "originalPrompt" | "middleware" | "expectedOutcome" | "evaluationCriteria" | "region" | "csvOptions" | "tts" | "thinkingConfig" | "requestId" | "fileRegistry" | "abortSignal" | "toolFilter" | "excludeTools" | "toolChoice" | "prepareStep" | "credentials">, OptionSchema>;
|
package/dist/core/factory.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AIProvider, SupportedModelName } from "../types/index.js";
|
|
1
|
+
import type { AIProvider, SupportedModelName, NeurolinkCredentials } from "../types/index.js";
|
|
2
2
|
import { AIProviderName } from "../constants/enums.js";
|
|
3
3
|
import type { UnknownRecord } from "../types/common.js";
|
|
4
4
|
import type { ProviderPairResult } from "../types/typeAliases.js";
|
|
@@ -27,7 +27,7 @@ export declare class AIProviderFactory {
|
|
|
27
27
|
* @param region - Optional region override for cloud providers
|
|
28
28
|
* @returns AIProvider instance
|
|
29
29
|
*/
|
|
30
|
-
static createProvider(providerName: string, modelName?: string | null, enableMCP?: boolean, sdk?: UnknownRecord, region?: string): Promise<AIProvider>;
|
|
30
|
+
static createProvider(providerName: string, modelName?: string | null, enableMCP?: boolean, sdk?: UnknownRecord, region?: string, credentials?: NeurolinkCredentials): Promise<AIProvider>;
|
|
31
31
|
/**
|
|
32
32
|
* Create a provider instance with specific provider enum and model
|
|
33
33
|
* @param provider - Provider enum value
|
package/dist/core/factory.js
CHANGED
|
@@ -167,7 +167,7 @@ export class AIProviderFactory {
|
|
|
167
167
|
return resolvedModelName;
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
|
-
static async createResolvedProvider(providerName, resolvedModelName, sdk, region, functionTag) {
|
|
170
|
+
static async createResolvedProvider(providerName, resolvedModelName, sdk, region, functionTag, credentials) {
|
|
171
171
|
await withTimeout(ProviderRegistry.registerAllProviders(), 30_000, ErrorFactory.toolTimeout("provider-registration", 30_000));
|
|
172
172
|
const normalizedName = this.normalizeProviderName(providerName);
|
|
173
173
|
const finalModelName = resolvedModelName === "default" || resolvedModelName === null
|
|
@@ -179,7 +179,7 @@ export class AIProviderFactory {
|
|
|
179
179
|
resolvedModelName: resolvedModelName || "not resolved",
|
|
180
180
|
finalModelName: finalModelName || "using provider default",
|
|
181
181
|
});
|
|
182
|
-
const provider = await withTimeout(ProviderFactory.createProvider(normalizedName, finalModelName, sdk, region), 30_000, ErrorFactory.toolTimeout(`provider-creation:${normalizedName}`, 30_000));
|
|
182
|
+
const provider = await withTimeout(ProviderFactory.createProvider(normalizedName, finalModelName, sdk, region, credentials), 30_000, ErrorFactory.toolTimeout(`provider-creation:${normalizedName}`, 30_000));
|
|
183
183
|
return { normalizedName, finalModelName, provider };
|
|
184
184
|
}
|
|
185
185
|
/**
|
|
@@ -191,7 +191,7 @@ export class AIProviderFactory {
|
|
|
191
191
|
* @param region - Optional region override for cloud providers
|
|
192
192
|
* @returns AIProvider instance
|
|
193
193
|
*/
|
|
194
|
-
static async createProvider(providerName, modelName, enableMCP = true, sdk, region) {
|
|
194
|
+
static async createProvider(providerName, modelName, enableMCP = true, sdk, region, credentials) {
|
|
195
195
|
const functionTag = "AIProviderFactory.createProvider";
|
|
196
196
|
// Providers are registered via ProviderFactory.initialize() on first use
|
|
197
197
|
return factoryTracer.startActiveSpan("neurolink.factory.createProvider", {
|
|
@@ -225,7 +225,7 @@ export class AIProviderFactory {
|
|
|
225
225
|
// The dynamic model provider now provides reliable functionality without hanging
|
|
226
226
|
let resolvedModelName = this.resolveModelFromEnvironment(providerName, modelName, functionTag);
|
|
227
227
|
resolvedModelName = await this.resolveDynamicModelName(providerName, modelName, resolvedModelName, functionTag);
|
|
228
|
-
const { normalizedName, finalModelName, provider } = await this.createResolvedProvider(providerName, resolvedModelName, sdk, region, functionTag);
|
|
228
|
+
const { normalizedName, finalModelName, provider } = await this.createResolvedProvider(providerName, resolvedModelName, sdk, region, functionTag, credentials);
|
|
229
229
|
// Summary logging in format expected by debugging tools
|
|
230
230
|
logger.debug(`[AIProviderFactory] Provider creation completed { providerName: '${normalizedName}', modelName: '${finalModelName}' }`);
|
|
231
231
|
logger.debug(`[AIProviderFactory] Resolved model: ${finalModelName}`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AIProviderName } from "../constants/enums.js";
|
|
2
2
|
import type { UnknownRecord } from "../types/common.js";
|
|
3
|
-
import type { AIProvider } from "../types/index.js";
|
|
3
|
+
import type { AIProvider, NeurolinkCredentials } from "../types/index.js";
|
|
4
4
|
/**
|
|
5
5
|
* Provider constructor interface - supports both sync constructors and async factory functions
|
|
6
6
|
*/
|
|
@@ -33,7 +33,7 @@ export declare class ProviderFactory {
|
|
|
33
33
|
* @param providerName - Provider name (optional, uses NEUROLINK_PROVIDER env var or 'vertex' as default)
|
|
34
34
|
* @param modelName - Model name (optional, uses provider-specific env var or registry default)
|
|
35
35
|
*/
|
|
36
|
-
static createProvider(providerName?: AIProviderName | string, modelName?: string, sdk?: UnknownRecord, region?: string): Promise<AIProvider>;
|
|
36
|
+
static createProvider(providerName?: AIProviderName | string, modelName?: string, sdk?: UnknownRecord, region?: string, credentials?: NeurolinkCredentials): Promise<AIProvider>;
|
|
37
37
|
/**
|
|
38
38
|
* Check if a provider is registered
|
|
39
39
|
*/
|
|
@@ -67,10 +67,10 @@ export declare class ProviderFactory {
|
|
|
67
67
|
* Create the best available provider for the given name
|
|
68
68
|
* Used by NeuroLink SDK for streaming and generation
|
|
69
69
|
*/
|
|
70
|
-
static createBestProvider(providerName: AIProviderName | string, modelName?: string, enableMCP?: boolean, sdk?: UnknownRecord): Promise<AIProvider>;
|
|
70
|
+
static createBestProvider(providerName: AIProviderName | string, modelName?: string, enableMCP?: boolean, sdk?: UnknownRecord, credentials?: NeurolinkCredentials): Promise<AIProvider>;
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
73
73
|
* Helper function to create providers with backward compatibility
|
|
74
74
|
*/
|
|
75
|
-
export declare function createAIProvider(providerName: AIProviderName | string, modelName?: string): Promise<AIProvider>;
|
|
75
|
+
export declare function createAIProvider(providerName: AIProviderName | string, modelName?: string, credentials?: NeurolinkCredentials): Promise<AIProvider>;
|
|
76
76
|
export {};
|
|
@@ -30,7 +30,7 @@ export class ProviderFactory {
|
|
|
30
30
|
* @param providerName - Provider name (optional, uses NEUROLINK_PROVIDER env var or 'vertex' as default)
|
|
31
31
|
* @param modelName - Model name (optional, uses provider-specific env var or registry default)
|
|
32
32
|
*/
|
|
33
|
-
static async createProvider(providerName, modelName, sdk, region) {
|
|
33
|
+
static async createProvider(providerName, modelName, sdk, region, credentials) {
|
|
34
34
|
// Note: Providers are registered explicitly by ProviderRegistry to avoid circular dependencies
|
|
35
35
|
// Use environment variable or default if not specified
|
|
36
36
|
const resolvedProviderName = providerName ||
|
|
@@ -56,13 +56,26 @@ export class ProviderFactory {
|
|
|
56
56
|
// Fallback to registry default if no env var
|
|
57
57
|
model = model || registration.defaultModel;
|
|
58
58
|
}
|
|
59
|
+
// Map registered provider names to NeurolinkCredentials keys.
|
|
60
|
+
// Most names match (openai, anthropic, vertex, bedrock, etc.)
|
|
61
|
+
// but some differ (google-ai → googleAiStudio, openai-compatible → openaiCompatible).
|
|
62
|
+
const credentialKeyMap = {
|
|
63
|
+
"google-ai": "googleAiStudio",
|
|
64
|
+
"openai-compatible": "openaiCompatible",
|
|
65
|
+
huggingface: "huggingFace",
|
|
66
|
+
};
|
|
67
|
+
const credKey = credentialKeyMap[normalizedName] ?? normalizedName;
|
|
68
|
+
// Extract provider-scoped credential slice (e.g. credentials.openai for OpenAI)
|
|
69
|
+
const scopedCredentials = credentials
|
|
70
|
+
? credentials[credKey]
|
|
71
|
+
: undefined;
|
|
59
72
|
try {
|
|
60
73
|
if (typeof registration.constructor !== "function") {
|
|
61
74
|
throw new Error(`Invalid constructor for provider ${providerName}: not a function`);
|
|
62
75
|
}
|
|
63
76
|
let result;
|
|
64
77
|
try {
|
|
65
|
-
const factoryResult = registration.constructor(model, resolvedProviderName, sdk, region);
|
|
78
|
+
const factoryResult = registration.constructor(model, resolvedProviderName, sdk, region, scopedCredentials);
|
|
66
79
|
// Handle both sync and async results
|
|
67
80
|
result =
|
|
68
81
|
factoryResult instanceof Promise
|
|
@@ -74,7 +87,7 @@ export class ProviderFactory {
|
|
|
74
87
|
registration.constructor.prototype.constructor ===
|
|
75
88
|
registration.constructor) {
|
|
76
89
|
try {
|
|
77
|
-
result = new registration.constructor(model, resolvedProviderName, sdk, region);
|
|
90
|
+
result = new registration.constructor(model, resolvedProviderName, sdk, region, scopedCredentials);
|
|
78
91
|
}
|
|
79
92
|
catch (constructorError) {
|
|
80
93
|
throw new Error(`Both factory function and constructor failed. Factory error: ${factoryError}. Constructor error: ${constructorError}`, { cause: constructorError });
|
|
@@ -154,13 +167,13 @@ export class ProviderFactory {
|
|
|
154
167
|
* Create the best available provider for the given name
|
|
155
168
|
* Used by NeuroLink SDK for streaming and generation
|
|
156
169
|
*/
|
|
157
|
-
static async createBestProvider(providerName, modelName, enableMCP, sdk) {
|
|
158
|
-
return await ProviderFactory.createProvider(providerName, modelName, sdk);
|
|
170
|
+
static async createBestProvider(providerName, modelName, enableMCP, sdk, credentials) {
|
|
171
|
+
return await ProviderFactory.createProvider(providerName, modelName, sdk, undefined, credentials);
|
|
159
172
|
}
|
|
160
173
|
}
|
|
161
174
|
/**
|
|
162
175
|
* Helper function to create providers with backward compatibility
|
|
163
176
|
*/
|
|
164
|
-
export async function createAIProvider(providerName, modelName) {
|
|
165
|
-
return await ProviderFactory.createProvider(providerName, modelName);
|
|
177
|
+
export async function createAIProvider(providerName, modelName, credentials) {
|
|
178
|
+
return await ProviderFactory.createProvider(providerName, modelName, undefined, undefined, credentials);
|
|
166
179
|
}
|
|
@@ -13,6 +13,11 @@ export declare class ProviderRegistry {
|
|
|
13
13
|
static registerAllProviders(): Promise<void>;
|
|
14
14
|
/**
|
|
15
15
|
* Internal registration implementation
|
|
16
|
+
*
|
|
17
|
+
* This method is a flat list of 13 provider registrations. Each registration
|
|
18
|
+
* is self-contained and extracting helpers would add indirection without
|
|
19
|
+
* reducing complexity — the function is long because there are many providers,
|
|
20
|
+
* not because any single registration is complex.
|
|
16
21
|
*/
|
|
17
22
|
private static _doRegister;
|
|
18
23
|
/**
|
|
@@ -32,82 +32,101 @@ export class ProviderRegistry {
|
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Internal registration implementation
|
|
35
|
+
*
|
|
36
|
+
* This method is a flat list of 13 provider registrations. Each registration
|
|
37
|
+
* is self-contained and extracting helpers would add indirection without
|
|
38
|
+
* reducing complexity — the function is long because there are many providers,
|
|
39
|
+
* not because any single registration is complex.
|
|
35
40
|
*/
|
|
41
|
+
// eslint-disable-next-line max-lines-per-function
|
|
36
42
|
static async _doRegister() {
|
|
37
43
|
try {
|
|
38
44
|
// Register providers with dynamic import factory functions
|
|
39
45
|
const { ProviderFactory } = await import("./providerFactory.js");
|
|
40
46
|
// Register Google AI Studio Provider (our validated baseline)
|
|
41
|
-
ProviderFactory.registerProvider(AIProviderName.GOOGLE_AI, async (modelName, _providerName, sdk) => {
|
|
47
|
+
ProviderFactory.registerProvider(AIProviderName.GOOGLE_AI, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
48
|
+
const googleAiCreds = credentials;
|
|
42
49
|
const { GoogleAIStudioProvider } = await import("../providers/googleAiStudio.js");
|
|
43
|
-
return new GoogleAIStudioProvider(modelName, sdk);
|
|
50
|
+
return new GoogleAIStudioProvider(modelName, sdk, googleAiCreds);
|
|
44
51
|
}, GoogleAIModels.GEMINI_2_5_FLASH, ["googleAiStudio", "google", "gemini", "google-ai", "google-ai-studio"]);
|
|
45
52
|
// Register OpenAI provider
|
|
46
|
-
ProviderFactory.registerProvider(AIProviderName.OPENAI, async (modelName, _providerName, sdk) => {
|
|
53
|
+
ProviderFactory.registerProvider(AIProviderName.OPENAI, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
54
|
+
const openaiCreds = credentials;
|
|
47
55
|
const { OpenAIProvider } = await import("../providers/openAI.js");
|
|
48
|
-
return new OpenAIProvider(modelName, sdk);
|
|
56
|
+
return new OpenAIProvider(modelName, sdk, undefined, openaiCreds);
|
|
49
57
|
}, OpenAIModels.GPT_4O_MINI, ["gpt", "chatgpt"]);
|
|
50
58
|
// Register Anthropic provider
|
|
51
|
-
ProviderFactory.registerProvider(AIProviderName.ANTHROPIC, async (modelName, _providerName, sdk) => {
|
|
59
|
+
ProviderFactory.registerProvider(AIProviderName.ANTHROPIC, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
60
|
+
const anthropicCreds = credentials;
|
|
52
61
|
const { AnthropicProvider } = await import("../providers/anthropic.js");
|
|
53
|
-
return new AnthropicProvider(modelName, sdk);
|
|
62
|
+
return new AnthropicProvider(modelName, sdk, undefined, anthropicCreds);
|
|
54
63
|
}, AnthropicModels.CLAUDE_SONNET_4_6, ["claude", "anthropic"]);
|
|
55
64
|
// Register Amazon Bedrock provider
|
|
56
|
-
ProviderFactory.registerProvider(AIProviderName.BEDROCK, async (modelName, _providerName, sdk, region) => {
|
|
65
|
+
ProviderFactory.registerProvider(AIProviderName.BEDROCK, async (modelName, _providerName, sdk, region, credentials) => {
|
|
66
|
+
const bedrockCreds = credentials;
|
|
57
67
|
const { AmazonBedrockProvider } = await import("../providers/amazonBedrock.js");
|
|
58
|
-
return new AmazonBedrockProvider(modelName, sdk, region);
|
|
68
|
+
return new AmazonBedrockProvider(modelName, sdk, region, bedrockCreds);
|
|
59
69
|
}, undefined, // Let provider read BEDROCK_MODEL from .env
|
|
60
70
|
["bedrock", "aws"]);
|
|
61
71
|
// Register Azure OpenAI provider
|
|
62
|
-
ProviderFactory.registerProvider(AIProviderName.AZURE, async (modelName, _providerName, sdk) => {
|
|
72
|
+
ProviderFactory.registerProvider(AIProviderName.AZURE, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
73
|
+
const azureCreds = credentials;
|
|
63
74
|
const { AzureOpenAIProvider } = await import("../providers/azureOpenai.js");
|
|
64
|
-
return new AzureOpenAIProvider(modelName, sdk);
|
|
75
|
+
return new AzureOpenAIProvider(modelName, sdk, undefined, azureCreds);
|
|
65
76
|
}, process.env.AZURE_MODEL ||
|
|
66
77
|
process.env.AZURE_OPENAI_MODEL ||
|
|
67
78
|
process.env.AZURE_OPENAI_DEPLOYMENT ||
|
|
68
79
|
process.env.AZURE_OPENAI_DEPLOYMENT_ID ||
|
|
69
80
|
"gpt-4o-mini", ["azure", "azureOpenai"]);
|
|
70
81
|
// Register Google Vertex AI provider
|
|
71
|
-
ProviderFactory.registerProvider(AIProviderName.VERTEX, async (modelName, providerName, sdk, region) => {
|
|
82
|
+
ProviderFactory.registerProvider(AIProviderName.VERTEX, async (modelName, providerName, sdk, region, credentials) => {
|
|
83
|
+
const vertexCreds = credentials;
|
|
72
84
|
const { GoogleVertexProvider } = await import("../providers/googleVertex.js");
|
|
73
|
-
return new GoogleVertexProvider(modelName, providerName, sdk, region);
|
|
85
|
+
return new GoogleVertexProvider(modelName, providerName, sdk, region, vertexCreds);
|
|
74
86
|
}, VertexModels.CLAUDE_4_6_SONNET, ["vertex", "googleVertex"]);
|
|
75
87
|
// Register Hugging Face provider (Unified Router implementation)
|
|
76
|
-
ProviderFactory.registerProvider(AIProviderName.HUGGINGFACE, async (modelName) => {
|
|
88
|
+
ProviderFactory.registerProvider(AIProviderName.HUGGINGFACE, async (modelName, _providerName, _sdk, _region, credentials) => {
|
|
89
|
+
const hfCreds = credentials;
|
|
77
90
|
const { HuggingFaceProvider } = await import("../providers/huggingFace.js");
|
|
78
|
-
return new HuggingFaceProvider(modelName);
|
|
91
|
+
return new HuggingFaceProvider(modelName, undefined, hfCreds);
|
|
79
92
|
}, process.env.HUGGINGFACE_MODEL ||
|
|
80
93
|
HuggingFaceModels.QWEN_2_5_72B_INSTRUCT, ["huggingface", "hf"]);
|
|
81
94
|
// Register Mistral AI provider
|
|
82
|
-
ProviderFactory.registerProvider(AIProviderName.MISTRAL, async (modelName, _providerName, sdk) => {
|
|
95
|
+
ProviderFactory.registerProvider(AIProviderName.MISTRAL, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
96
|
+
const mistralCreds = credentials;
|
|
83
97
|
const { MistralProvider } = await import("../providers/mistral.js");
|
|
84
|
-
return new MistralProvider(modelName, sdk);
|
|
98
|
+
return new MistralProvider(modelName, sdk, undefined, mistralCreds);
|
|
85
99
|
}, MistralModels.MISTRAL_LARGE_LATEST, ["mistral"]);
|
|
86
100
|
// Register Ollama provider
|
|
87
|
-
ProviderFactory.registerProvider(AIProviderName.OLLAMA, async (modelName) => {
|
|
101
|
+
ProviderFactory.registerProvider(AIProviderName.OLLAMA, async (modelName, _providerName, _sdk, _region, credentials) => {
|
|
102
|
+
const ollamaCreds = credentials;
|
|
88
103
|
const { OllamaProvider } = await import("../providers/ollama.js");
|
|
89
|
-
return new OllamaProvider(modelName);
|
|
104
|
+
return new OllamaProvider(modelName, ollamaCreds);
|
|
90
105
|
}, process.env.OLLAMA_MODEL || OllamaModels.LLAMA3_2_LATEST, ["ollama", "local"]);
|
|
91
106
|
// Register LiteLLM provider
|
|
92
|
-
ProviderFactory.registerProvider(AIProviderName.LITELLM, async (modelName, _providerName, sdk) => {
|
|
107
|
+
ProviderFactory.registerProvider(AIProviderName.LITELLM, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
108
|
+
const litellmCreds = credentials;
|
|
93
109
|
const { LiteLLMProvider } = await import("../providers/litellm.js");
|
|
94
|
-
return new LiteLLMProvider(modelName, sdk);
|
|
110
|
+
return new LiteLLMProvider(modelName, sdk, undefined, litellmCreds);
|
|
95
111
|
}, process.env.LITELLM_MODEL || LiteLLMModels.OPENAI_GPT_4O_MINI, ["litellm"]);
|
|
96
112
|
// Register OpenAI Compatible provider
|
|
97
|
-
ProviderFactory.registerProvider(AIProviderName.OPENAI_COMPATIBLE, async (modelName, _providerName, sdk) => {
|
|
113
|
+
ProviderFactory.registerProvider(AIProviderName.OPENAI_COMPATIBLE, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
114
|
+
const openaiCompatCreds = credentials;
|
|
98
115
|
const { OpenAICompatibleProvider } = await import("../providers/openaiCompatible.js");
|
|
99
|
-
return new OpenAICompatibleProvider(modelName, sdk);
|
|
116
|
+
return new OpenAICompatibleProvider(modelName, sdk, undefined, openaiCompatCreds);
|
|
100
117
|
}, process.env.OPENAI_COMPATIBLE_MODEL || undefined, // Enable auto-discovery when no model specified
|
|
101
118
|
["openai-compatible", "vllm", "compatible"]);
|
|
102
119
|
// Register OpenRouter provider (300+ models from 60+ providers)
|
|
103
|
-
ProviderFactory.registerProvider(AIProviderName.OPENROUTER, async (modelName, _providerName, sdk) => {
|
|
120
|
+
ProviderFactory.registerProvider(AIProviderName.OPENROUTER, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
121
|
+
const openrouterCreds = credentials;
|
|
104
122
|
const { OpenRouterProvider } = await import("../providers/openRouter.js");
|
|
105
|
-
return new OpenRouterProvider(modelName, sdk);
|
|
123
|
+
return new OpenRouterProvider(modelName, sdk, undefined, openrouterCreds);
|
|
106
124
|
}, process.env.OPENROUTER_MODEL || "anthropic/claude-3-5-sonnet", ["openrouter", "or"]);
|
|
107
125
|
// Register Amazon SageMaker provider
|
|
108
|
-
ProviderFactory.registerProvider(AIProviderName.SAGEMAKER, async (modelName, _providerName, _sdk, region) => {
|
|
126
|
+
ProviderFactory.registerProvider(AIProviderName.SAGEMAKER, async (modelName, _providerName, _sdk, region, credentials) => {
|
|
127
|
+
const sagemakerCreds = credentials;
|
|
109
128
|
const { AmazonSageMakerProvider } = await import("../providers/amazonSagemaker.js");
|
|
110
|
-
return new AmazonSageMakerProvider(modelName, undefined, region);
|
|
129
|
+
return new AmazonSageMakerProvider(modelName, undefined, region, undefined, sagemakerCreds);
|
|
111
130
|
}, process.env.SAGEMAKER_MODEL || "sagemaker-model", ["sagemaker", "aws-sagemaker"]);
|
|
112
131
|
logger.debug("All providers registered successfully");
|
|
113
132
|
this.registered = true;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AIProvider, SupportedModelName } from "../types/index.js";
|
|
1
|
+
import type { AIProvider, SupportedModelName, NeurolinkCredentials } from "../types/index.js";
|
|
2
2
|
import { AIProviderName } from "../constants/enums.js";
|
|
3
3
|
import type { UnknownRecord } from "../types/common.js";
|
|
4
4
|
import type { ProviderPairResult } from "../types/typeAliases.js";
|
|
@@ -27,7 +27,7 @@ export declare class AIProviderFactory {
|
|
|
27
27
|
* @param region - Optional region override for cloud providers
|
|
28
28
|
* @returns AIProvider instance
|
|
29
29
|
*/
|
|
30
|
-
static createProvider(providerName: string, modelName?: string | null, enableMCP?: boolean, sdk?: UnknownRecord, region?: string): Promise<AIProvider>;
|
|
30
|
+
static createProvider(providerName: string, modelName?: string | null, enableMCP?: boolean, sdk?: UnknownRecord, region?: string, credentials?: NeurolinkCredentials): Promise<AIProvider>;
|
|
31
31
|
/**
|
|
32
32
|
* Create a provider instance with specific provider enum and model
|
|
33
33
|
* @param provider - Provider enum value
|
package/dist/lib/core/factory.js
CHANGED
|
@@ -168,7 +168,7 @@ export class AIProviderFactory {
|
|
|
168
168
|
return resolvedModelName;
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
static async createResolvedProvider(providerName, resolvedModelName, sdk, region, functionTag) {
|
|
171
|
+
static async createResolvedProvider(providerName, resolvedModelName, sdk, region, functionTag, credentials) {
|
|
172
172
|
await withTimeout(ProviderRegistry.registerAllProviders(), 30_000, ErrorFactory.toolTimeout("provider-registration", 30_000));
|
|
173
173
|
const normalizedName = this.normalizeProviderName(providerName);
|
|
174
174
|
const finalModelName = resolvedModelName === "default" || resolvedModelName === null
|
|
@@ -180,7 +180,7 @@ export class AIProviderFactory {
|
|
|
180
180
|
resolvedModelName: resolvedModelName || "not resolved",
|
|
181
181
|
finalModelName: finalModelName || "using provider default",
|
|
182
182
|
});
|
|
183
|
-
const provider = await withTimeout(ProviderFactory.createProvider(normalizedName, finalModelName, sdk, region), 30_000, ErrorFactory.toolTimeout(`provider-creation:${normalizedName}`, 30_000));
|
|
183
|
+
const provider = await withTimeout(ProviderFactory.createProvider(normalizedName, finalModelName, sdk, region, credentials), 30_000, ErrorFactory.toolTimeout(`provider-creation:${normalizedName}`, 30_000));
|
|
184
184
|
return { normalizedName, finalModelName, provider };
|
|
185
185
|
}
|
|
186
186
|
/**
|
|
@@ -192,7 +192,7 @@ export class AIProviderFactory {
|
|
|
192
192
|
* @param region - Optional region override for cloud providers
|
|
193
193
|
* @returns AIProvider instance
|
|
194
194
|
*/
|
|
195
|
-
static async createProvider(providerName, modelName, enableMCP = true, sdk, region) {
|
|
195
|
+
static async createProvider(providerName, modelName, enableMCP = true, sdk, region, credentials) {
|
|
196
196
|
const functionTag = "AIProviderFactory.createProvider";
|
|
197
197
|
// Providers are registered via ProviderFactory.initialize() on first use
|
|
198
198
|
return factoryTracer.startActiveSpan("neurolink.factory.createProvider", {
|
|
@@ -226,7 +226,7 @@ export class AIProviderFactory {
|
|
|
226
226
|
// The dynamic model provider now provides reliable functionality without hanging
|
|
227
227
|
let resolvedModelName = this.resolveModelFromEnvironment(providerName, modelName, functionTag);
|
|
228
228
|
resolvedModelName = await this.resolveDynamicModelName(providerName, modelName, resolvedModelName, functionTag);
|
|
229
|
-
const { normalizedName, finalModelName, provider } = await this.createResolvedProvider(providerName, resolvedModelName, sdk, region, functionTag);
|
|
229
|
+
const { normalizedName, finalModelName, provider } = await this.createResolvedProvider(providerName, resolvedModelName, sdk, region, functionTag, credentials);
|
|
230
230
|
// Summary logging in format expected by debugging tools
|
|
231
231
|
logger.debug(`[AIProviderFactory] Provider creation completed { providerName: '${normalizedName}', modelName: '${finalModelName}' }`);
|
|
232
232
|
logger.debug(`[AIProviderFactory] Resolved model: ${finalModelName}`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AIProviderName } from "../constants/enums.js";
|
|
2
2
|
import type { UnknownRecord } from "../types/common.js";
|
|
3
|
-
import type { AIProvider } from "../types/index.js";
|
|
3
|
+
import type { AIProvider, NeurolinkCredentials } from "../types/index.js";
|
|
4
4
|
/**
|
|
5
5
|
* Provider constructor interface - supports both sync constructors and async factory functions
|
|
6
6
|
*/
|
|
@@ -33,7 +33,7 @@ export declare class ProviderFactory {
|
|
|
33
33
|
* @param providerName - Provider name (optional, uses NEUROLINK_PROVIDER env var or 'vertex' as default)
|
|
34
34
|
* @param modelName - Model name (optional, uses provider-specific env var or registry default)
|
|
35
35
|
*/
|
|
36
|
-
static createProvider(providerName?: AIProviderName | string, modelName?: string, sdk?: UnknownRecord, region?: string): Promise<AIProvider>;
|
|
36
|
+
static createProvider(providerName?: AIProviderName | string, modelName?: string, sdk?: UnknownRecord, region?: string, credentials?: NeurolinkCredentials): Promise<AIProvider>;
|
|
37
37
|
/**
|
|
38
38
|
* Check if a provider is registered
|
|
39
39
|
*/
|
|
@@ -67,10 +67,10 @@ export declare class ProviderFactory {
|
|
|
67
67
|
* Create the best available provider for the given name
|
|
68
68
|
* Used by NeuroLink SDK for streaming and generation
|
|
69
69
|
*/
|
|
70
|
-
static createBestProvider(providerName: AIProviderName | string, modelName?: string, enableMCP?: boolean, sdk?: UnknownRecord): Promise<AIProvider>;
|
|
70
|
+
static createBestProvider(providerName: AIProviderName | string, modelName?: string, enableMCP?: boolean, sdk?: UnknownRecord, credentials?: NeurolinkCredentials): Promise<AIProvider>;
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
73
73
|
* Helper function to create providers with backward compatibility
|
|
74
74
|
*/
|
|
75
|
-
export declare function createAIProvider(providerName: AIProviderName | string, modelName?: string): Promise<AIProvider>;
|
|
75
|
+
export declare function createAIProvider(providerName: AIProviderName | string, modelName?: string, credentials?: NeurolinkCredentials): Promise<AIProvider>;
|
|
76
76
|
export {};
|
|
@@ -30,7 +30,7 @@ export class ProviderFactory {
|
|
|
30
30
|
* @param providerName - Provider name (optional, uses NEUROLINK_PROVIDER env var or 'vertex' as default)
|
|
31
31
|
* @param modelName - Model name (optional, uses provider-specific env var or registry default)
|
|
32
32
|
*/
|
|
33
|
-
static async createProvider(providerName, modelName, sdk, region) {
|
|
33
|
+
static async createProvider(providerName, modelName, sdk, region, credentials) {
|
|
34
34
|
// Note: Providers are registered explicitly by ProviderRegistry to avoid circular dependencies
|
|
35
35
|
// Use environment variable or default if not specified
|
|
36
36
|
const resolvedProviderName = providerName ||
|
|
@@ -56,13 +56,26 @@ export class ProviderFactory {
|
|
|
56
56
|
// Fallback to registry default if no env var
|
|
57
57
|
model = model || registration.defaultModel;
|
|
58
58
|
}
|
|
59
|
+
// Map registered provider names to NeurolinkCredentials keys.
|
|
60
|
+
// Most names match (openai, anthropic, vertex, bedrock, etc.)
|
|
61
|
+
// but some differ (google-ai → googleAiStudio, openai-compatible → openaiCompatible).
|
|
62
|
+
const credentialKeyMap = {
|
|
63
|
+
"google-ai": "googleAiStudio",
|
|
64
|
+
"openai-compatible": "openaiCompatible",
|
|
65
|
+
huggingface: "huggingFace",
|
|
66
|
+
};
|
|
67
|
+
const credKey = credentialKeyMap[normalizedName] ?? normalizedName;
|
|
68
|
+
// Extract provider-scoped credential slice (e.g. credentials.openai for OpenAI)
|
|
69
|
+
const scopedCredentials = credentials
|
|
70
|
+
? credentials[credKey]
|
|
71
|
+
: undefined;
|
|
59
72
|
try {
|
|
60
73
|
if (typeof registration.constructor !== "function") {
|
|
61
74
|
throw new Error(`Invalid constructor for provider ${providerName}: not a function`);
|
|
62
75
|
}
|
|
63
76
|
let result;
|
|
64
77
|
try {
|
|
65
|
-
const factoryResult = registration.constructor(model, resolvedProviderName, sdk, region);
|
|
78
|
+
const factoryResult = registration.constructor(model, resolvedProviderName, sdk, region, scopedCredentials);
|
|
66
79
|
// Handle both sync and async results
|
|
67
80
|
result =
|
|
68
81
|
factoryResult instanceof Promise
|
|
@@ -74,7 +87,7 @@ export class ProviderFactory {
|
|
|
74
87
|
registration.constructor.prototype.constructor ===
|
|
75
88
|
registration.constructor) {
|
|
76
89
|
try {
|
|
77
|
-
result = new registration.constructor(model, resolvedProviderName, sdk, region);
|
|
90
|
+
result = new registration.constructor(model, resolvedProviderName, sdk, region, scopedCredentials);
|
|
78
91
|
}
|
|
79
92
|
catch (constructorError) {
|
|
80
93
|
throw new Error(`Both factory function and constructor failed. Factory error: ${factoryError}. Constructor error: ${constructorError}`, { cause: constructorError });
|
|
@@ -154,14 +167,14 @@ export class ProviderFactory {
|
|
|
154
167
|
* Create the best available provider for the given name
|
|
155
168
|
* Used by NeuroLink SDK for streaming and generation
|
|
156
169
|
*/
|
|
157
|
-
static async createBestProvider(providerName, modelName, enableMCP, sdk) {
|
|
158
|
-
return await ProviderFactory.createProvider(providerName, modelName, sdk);
|
|
170
|
+
static async createBestProvider(providerName, modelName, enableMCP, sdk, credentials) {
|
|
171
|
+
return await ProviderFactory.createProvider(providerName, modelName, sdk, undefined, credentials);
|
|
159
172
|
}
|
|
160
173
|
}
|
|
161
174
|
/**
|
|
162
175
|
* Helper function to create providers with backward compatibility
|
|
163
176
|
*/
|
|
164
|
-
export async function createAIProvider(providerName, modelName) {
|
|
165
|
-
return await ProviderFactory.createProvider(providerName, modelName);
|
|
177
|
+
export async function createAIProvider(providerName, modelName, credentials) {
|
|
178
|
+
return await ProviderFactory.createProvider(providerName, modelName, undefined, undefined, credentials);
|
|
166
179
|
}
|
|
167
180
|
//# sourceMappingURL=providerFactory.js.map
|
|
@@ -13,6 +13,11 @@ export declare class ProviderRegistry {
|
|
|
13
13
|
static registerAllProviders(): Promise<void>;
|
|
14
14
|
/**
|
|
15
15
|
* Internal registration implementation
|
|
16
|
+
*
|
|
17
|
+
* This method is a flat list of 13 provider registrations. Each registration
|
|
18
|
+
* is self-contained and extracting helpers would add indirection without
|
|
19
|
+
* reducing complexity — the function is long because there are many providers,
|
|
20
|
+
* not because any single registration is complex.
|
|
16
21
|
*/
|
|
17
22
|
private static _doRegister;
|
|
18
23
|
/**
|
|
@@ -32,82 +32,101 @@ export class ProviderRegistry {
|
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Internal registration implementation
|
|
35
|
+
*
|
|
36
|
+
* This method is a flat list of 13 provider registrations. Each registration
|
|
37
|
+
* is self-contained and extracting helpers would add indirection without
|
|
38
|
+
* reducing complexity — the function is long because there are many providers,
|
|
39
|
+
* not because any single registration is complex.
|
|
35
40
|
*/
|
|
41
|
+
// eslint-disable-next-line max-lines-per-function
|
|
36
42
|
static async _doRegister() {
|
|
37
43
|
try {
|
|
38
44
|
// Register providers with dynamic import factory functions
|
|
39
45
|
const { ProviderFactory } = await import("./providerFactory.js");
|
|
40
46
|
// Register Google AI Studio Provider (our validated baseline)
|
|
41
|
-
ProviderFactory.registerProvider(AIProviderName.GOOGLE_AI, async (modelName, _providerName, sdk) => {
|
|
47
|
+
ProviderFactory.registerProvider(AIProviderName.GOOGLE_AI, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
48
|
+
const googleAiCreds = credentials;
|
|
42
49
|
const { GoogleAIStudioProvider } = await import("../providers/googleAiStudio.js");
|
|
43
|
-
return new GoogleAIStudioProvider(modelName, sdk);
|
|
50
|
+
return new GoogleAIStudioProvider(modelName, sdk, googleAiCreds);
|
|
44
51
|
}, GoogleAIModels.GEMINI_2_5_FLASH, ["googleAiStudio", "google", "gemini", "google-ai", "google-ai-studio"]);
|
|
45
52
|
// Register OpenAI provider
|
|
46
|
-
ProviderFactory.registerProvider(AIProviderName.OPENAI, async (modelName, _providerName, sdk) => {
|
|
53
|
+
ProviderFactory.registerProvider(AIProviderName.OPENAI, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
54
|
+
const openaiCreds = credentials;
|
|
47
55
|
const { OpenAIProvider } = await import("../providers/openAI.js");
|
|
48
|
-
return new OpenAIProvider(modelName, sdk);
|
|
56
|
+
return new OpenAIProvider(modelName, sdk, undefined, openaiCreds);
|
|
49
57
|
}, OpenAIModels.GPT_4O_MINI, ["gpt", "chatgpt"]);
|
|
50
58
|
// Register Anthropic provider
|
|
51
|
-
ProviderFactory.registerProvider(AIProviderName.ANTHROPIC, async (modelName, _providerName, sdk) => {
|
|
59
|
+
ProviderFactory.registerProvider(AIProviderName.ANTHROPIC, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
60
|
+
const anthropicCreds = credentials;
|
|
52
61
|
const { AnthropicProvider } = await import("../providers/anthropic.js");
|
|
53
|
-
return new AnthropicProvider(modelName, sdk);
|
|
62
|
+
return new AnthropicProvider(modelName, sdk, undefined, anthropicCreds);
|
|
54
63
|
}, AnthropicModels.CLAUDE_SONNET_4_6, ["claude", "anthropic"]);
|
|
55
64
|
// Register Amazon Bedrock provider
|
|
56
|
-
ProviderFactory.registerProvider(AIProviderName.BEDROCK, async (modelName, _providerName, sdk, region) => {
|
|
65
|
+
ProviderFactory.registerProvider(AIProviderName.BEDROCK, async (modelName, _providerName, sdk, region, credentials) => {
|
|
66
|
+
const bedrockCreds = credentials;
|
|
57
67
|
const { AmazonBedrockProvider } = await import("../providers/amazonBedrock.js");
|
|
58
|
-
return new AmazonBedrockProvider(modelName, sdk, region);
|
|
68
|
+
return new AmazonBedrockProvider(modelName, sdk, region, bedrockCreds);
|
|
59
69
|
}, undefined, // Let provider read BEDROCK_MODEL from .env
|
|
60
70
|
["bedrock", "aws"]);
|
|
61
71
|
// Register Azure OpenAI provider
|
|
62
|
-
ProviderFactory.registerProvider(AIProviderName.AZURE, async (modelName, _providerName, sdk) => {
|
|
72
|
+
ProviderFactory.registerProvider(AIProviderName.AZURE, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
73
|
+
const azureCreds = credentials;
|
|
63
74
|
const { AzureOpenAIProvider } = await import("../providers/azureOpenai.js");
|
|
64
|
-
return new AzureOpenAIProvider(modelName, sdk);
|
|
75
|
+
return new AzureOpenAIProvider(modelName, sdk, undefined, azureCreds);
|
|
65
76
|
}, process.env.AZURE_MODEL ||
|
|
66
77
|
process.env.AZURE_OPENAI_MODEL ||
|
|
67
78
|
process.env.AZURE_OPENAI_DEPLOYMENT ||
|
|
68
79
|
process.env.AZURE_OPENAI_DEPLOYMENT_ID ||
|
|
69
80
|
"gpt-4o-mini", ["azure", "azureOpenai"]);
|
|
70
81
|
// Register Google Vertex AI provider
|
|
71
|
-
ProviderFactory.registerProvider(AIProviderName.VERTEX, async (modelName, providerName, sdk, region) => {
|
|
82
|
+
ProviderFactory.registerProvider(AIProviderName.VERTEX, async (modelName, providerName, sdk, region, credentials) => {
|
|
83
|
+
const vertexCreds = credentials;
|
|
72
84
|
const { GoogleVertexProvider } = await import("../providers/googleVertex.js");
|
|
73
|
-
return new GoogleVertexProvider(modelName, providerName, sdk, region);
|
|
85
|
+
return new GoogleVertexProvider(modelName, providerName, sdk, region, vertexCreds);
|
|
74
86
|
}, VertexModels.CLAUDE_4_6_SONNET, ["vertex", "googleVertex"]);
|
|
75
87
|
// Register Hugging Face provider (Unified Router implementation)
|
|
76
|
-
ProviderFactory.registerProvider(AIProviderName.HUGGINGFACE, async (modelName) => {
|
|
88
|
+
ProviderFactory.registerProvider(AIProviderName.HUGGINGFACE, async (modelName, _providerName, _sdk, _region, credentials) => {
|
|
89
|
+
const hfCreds = credentials;
|
|
77
90
|
const { HuggingFaceProvider } = await import("../providers/huggingFace.js");
|
|
78
|
-
return new HuggingFaceProvider(modelName);
|
|
91
|
+
return new HuggingFaceProvider(modelName, undefined, hfCreds);
|
|
79
92
|
}, process.env.HUGGINGFACE_MODEL ||
|
|
80
93
|
HuggingFaceModels.QWEN_2_5_72B_INSTRUCT, ["huggingface", "hf"]);
|
|
81
94
|
// Register Mistral AI provider
|
|
82
|
-
ProviderFactory.registerProvider(AIProviderName.MISTRAL, async (modelName, _providerName, sdk) => {
|
|
95
|
+
ProviderFactory.registerProvider(AIProviderName.MISTRAL, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
96
|
+
const mistralCreds = credentials;
|
|
83
97
|
const { MistralProvider } = await import("../providers/mistral.js");
|
|
84
|
-
return new MistralProvider(modelName, sdk);
|
|
98
|
+
return new MistralProvider(modelName, sdk, undefined, mistralCreds);
|
|
85
99
|
}, MistralModels.MISTRAL_LARGE_LATEST, ["mistral"]);
|
|
86
100
|
// Register Ollama provider
|
|
87
|
-
ProviderFactory.registerProvider(AIProviderName.OLLAMA, async (modelName) => {
|
|
101
|
+
ProviderFactory.registerProvider(AIProviderName.OLLAMA, async (modelName, _providerName, _sdk, _region, credentials) => {
|
|
102
|
+
const ollamaCreds = credentials;
|
|
88
103
|
const { OllamaProvider } = await import("../providers/ollama.js");
|
|
89
|
-
return new OllamaProvider(modelName);
|
|
104
|
+
return new OllamaProvider(modelName, ollamaCreds);
|
|
90
105
|
}, process.env.OLLAMA_MODEL || OllamaModels.LLAMA3_2_LATEST, ["ollama", "local"]);
|
|
91
106
|
// Register LiteLLM provider
|
|
92
|
-
ProviderFactory.registerProvider(AIProviderName.LITELLM, async (modelName, _providerName, sdk) => {
|
|
107
|
+
ProviderFactory.registerProvider(AIProviderName.LITELLM, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
108
|
+
const litellmCreds = credentials;
|
|
93
109
|
const { LiteLLMProvider } = await import("../providers/litellm.js");
|
|
94
|
-
return new LiteLLMProvider(modelName, sdk);
|
|
110
|
+
return new LiteLLMProvider(modelName, sdk, undefined, litellmCreds);
|
|
95
111
|
}, process.env.LITELLM_MODEL || LiteLLMModels.OPENAI_GPT_4O_MINI, ["litellm"]);
|
|
96
112
|
// Register OpenAI Compatible provider
|
|
97
|
-
ProviderFactory.registerProvider(AIProviderName.OPENAI_COMPATIBLE, async (modelName, _providerName, sdk) => {
|
|
113
|
+
ProviderFactory.registerProvider(AIProviderName.OPENAI_COMPATIBLE, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
114
|
+
const openaiCompatCreds = credentials;
|
|
98
115
|
const { OpenAICompatibleProvider } = await import("../providers/openaiCompatible.js");
|
|
99
|
-
return new OpenAICompatibleProvider(modelName, sdk);
|
|
116
|
+
return new OpenAICompatibleProvider(modelName, sdk, undefined, openaiCompatCreds);
|
|
100
117
|
}, process.env.OPENAI_COMPATIBLE_MODEL || undefined, // Enable auto-discovery when no model specified
|
|
101
118
|
["openai-compatible", "vllm", "compatible"]);
|
|
102
119
|
// Register OpenRouter provider (300+ models from 60+ providers)
|
|
103
|
-
ProviderFactory.registerProvider(AIProviderName.OPENROUTER, async (modelName, _providerName, sdk) => {
|
|
120
|
+
ProviderFactory.registerProvider(AIProviderName.OPENROUTER, async (modelName, _providerName, sdk, _region, credentials) => {
|
|
121
|
+
const openrouterCreds = credentials;
|
|
104
122
|
const { OpenRouterProvider } = await import("../providers/openRouter.js");
|
|
105
|
-
return new OpenRouterProvider(modelName, sdk);
|
|
123
|
+
return new OpenRouterProvider(modelName, sdk, undefined, openrouterCreds);
|
|
106
124
|
}, process.env.OPENROUTER_MODEL || "anthropic/claude-3-5-sonnet", ["openrouter", "or"]);
|
|
107
125
|
// Register Amazon SageMaker provider
|
|
108
|
-
ProviderFactory.registerProvider(AIProviderName.SAGEMAKER, async (modelName, _providerName, _sdk, region) => {
|
|
126
|
+
ProviderFactory.registerProvider(AIProviderName.SAGEMAKER, async (modelName, _providerName, _sdk, region, credentials) => {
|
|
127
|
+
const sagemakerCreds = credentials;
|
|
109
128
|
const { AmazonSageMakerProvider } = await import("../providers/amazonSagemaker.js");
|
|
110
|
-
return new AmazonSageMakerProvider(modelName, undefined, region);
|
|
129
|
+
return new AmazonSageMakerProvider(modelName, undefined, region, undefined, sagemakerCreds);
|
|
111
130
|
}, process.env.SAGEMAKER_MODEL || "sagemaker-model", ["sagemaker", "aws-sagemaker"]);
|
|
112
131
|
logger.debug("All providers registered successfully");
|
|
113
132
|
this.registered = true;
|
package/dist/lib/neurolink.d.ts
CHANGED
|
@@ -73,6 +73,27 @@ export declare class NeuroLink {
|
|
|
73
73
|
private authProvider?;
|
|
74
74
|
private pendingAuthConfig?;
|
|
75
75
|
private authInitPromise?;
|
|
76
|
+
private credentials?;
|
|
77
|
+
/**
|
|
78
|
+
* Merge instance-level credentials with per-call credentials.
|
|
79
|
+
*
|
|
80
|
+
* Semantics: **deep merge at the provider level.** For each provider key
|
|
81
|
+
* present in both `this.credentials` and `callCredentials`, the per-call
|
|
82
|
+
* fields are merged ON TOP of the instance-level fields, so fields not
|
|
83
|
+
* mentioned in the per-call slice are preserved.
|
|
84
|
+
*
|
|
85
|
+
* Example:
|
|
86
|
+
* ```
|
|
87
|
+
* instance: { openai: { apiKey: "key1", baseURL: "url1" } }
|
|
88
|
+
* per-call: { openai: { apiKey: "key2" } }
|
|
89
|
+
* merged: { openai: { apiKey: "key2", baseURL: "url1" } } // baseURL preserved
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* Providers present only in one source are carried through unchanged.
|
|
93
|
+
* Unrelated providers (not overridden in callCredentials) are carried through
|
|
94
|
+
* from instance credentials unchanged.
|
|
95
|
+
*/
|
|
96
|
+
private resolveCredentials;
|
|
76
97
|
private hitlManager?;
|
|
77
98
|
private _sessionCostUsd;
|
|
78
99
|
private fileRegistry;
|