@juspay/neurolink 9.51.4 → 9.53.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 +12 -0
- package/README.md +19 -0
- package/dist/agent/directTools.d.ts +2 -2
- package/dist/auth/errors.d.ts +1 -1
- package/dist/auth/middleware/AuthMiddleware.d.ts +1 -1
- package/dist/auth/providers/BaseAuthProvider.d.ts +1 -1
- package/dist/autoresearch/config.d.ts +11 -0
- package/dist/autoresearch/config.js +108 -0
- package/dist/autoresearch/errors.d.ts +40 -0
- package/dist/autoresearch/errors.js +20 -0
- package/dist/autoresearch/index.d.ts +23 -0
- package/dist/autoresearch/index.js +34 -0
- package/dist/autoresearch/phasePolicy.d.ts +9 -0
- package/dist/autoresearch/phasePolicy.js +69 -0
- package/dist/autoresearch/promptCompiler.d.ts +15 -0
- package/dist/autoresearch/promptCompiler.js +120 -0
- package/dist/autoresearch/repoPolicy.d.ts +32 -0
- package/dist/autoresearch/repoPolicy.js +128 -0
- package/dist/autoresearch/resultRecorder.d.ts +20 -0
- package/dist/autoresearch/resultRecorder.js +130 -0
- package/dist/autoresearch/runner.d.ts +10 -0
- package/dist/autoresearch/runner.js +102 -0
- package/dist/autoresearch/stateStore.d.ts +12 -0
- package/dist/autoresearch/stateStore.js +163 -0
- package/dist/autoresearch/summaryParser.d.ts +16 -0
- package/dist/autoresearch/summaryParser.js +94 -0
- package/dist/autoresearch/tools.d.ts +257 -0
- package/dist/autoresearch/tools.js +617 -0
- package/dist/autoresearch/worker.d.ts +71 -0
- package/dist/autoresearch/worker.js +417 -0
- package/dist/browser/neurolink.min.js +340 -324
- package/dist/cli/commands/autoresearch.d.ts +41 -0
- package/dist/cli/commands/autoresearch.js +487 -0
- package/dist/cli/commands/config.d.ts +1 -1
- package/dist/cli/commands/task.d.ts +2 -0
- package/dist/cli/commands/task.js +32 -3
- package/dist/cli/loop/optionsSchema.d.ts +1 -1
- package/dist/cli/parser.js +4 -1
- package/dist/core/baseProvider.js +18 -0
- package/dist/core/factory.d.ts +2 -2
- package/dist/core/factory.js +4 -4
- package/dist/evaluation/errors/EvaluationError.d.ts +1 -1
- 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/agent/directTools.d.ts +2 -2
- package/dist/lib/auth/errors.d.ts +1 -1
- package/dist/lib/auth/middleware/AuthMiddleware.d.ts +1 -1
- package/dist/lib/auth/providers/BaseAuthProvider.d.ts +1 -1
- package/dist/lib/autoresearch/config.d.ts +11 -0
- package/dist/lib/autoresearch/config.js +109 -0
- package/dist/lib/autoresearch/errors.d.ts +40 -0
- package/dist/lib/autoresearch/errors.js +21 -0
- package/dist/lib/autoresearch/index.d.ts +23 -0
- package/dist/lib/autoresearch/index.js +35 -0
- package/dist/lib/autoresearch/phasePolicy.d.ts +9 -0
- package/dist/lib/autoresearch/phasePolicy.js +70 -0
- package/dist/lib/autoresearch/promptCompiler.d.ts +15 -0
- package/dist/lib/autoresearch/promptCompiler.js +121 -0
- package/dist/lib/autoresearch/repoPolicy.d.ts +32 -0
- package/dist/lib/autoresearch/repoPolicy.js +129 -0
- package/dist/lib/autoresearch/resultRecorder.d.ts +20 -0
- package/dist/lib/autoresearch/resultRecorder.js +131 -0
- package/dist/lib/autoresearch/runner.d.ts +10 -0
- package/dist/lib/autoresearch/runner.js +103 -0
- package/dist/lib/autoresearch/stateStore.d.ts +12 -0
- package/dist/lib/autoresearch/stateStore.js +164 -0
- package/dist/lib/autoresearch/summaryParser.d.ts +16 -0
- package/dist/lib/autoresearch/summaryParser.js +95 -0
- package/dist/lib/autoresearch/tools.d.ts +257 -0
- package/dist/lib/autoresearch/tools.js +618 -0
- package/dist/lib/autoresearch/worker.d.ts +71 -0
- package/dist/lib/autoresearch/worker.js +418 -0
- package/dist/lib/core/baseProvider.js +18 -0
- package/dist/lib/core/factory.d.ts +2 -2
- package/dist/lib/core/factory.js +4 -4
- package/dist/lib/evaluation/errors/EvaluationError.d.ts +1 -1
- 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/files/fileTools.d.ts +1 -1
- package/dist/lib/neurolink.d.ts +21 -0
- package/dist/lib/neurolink.js +91 -8
- 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 +16 -11
- 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 +19 -7
- package/dist/lib/providers/openaiCompatible.d.ts +4 -1
- package/dist/lib/providers/openaiCompatible.js +18 -4
- package/dist/lib/tasks/autoresearchTaskExecutor.d.ts +32 -0
- package/dist/lib/tasks/autoresearchTaskExecutor.js +303 -0
- package/dist/lib/tasks/errors.d.ts +3 -1
- package/dist/lib/tasks/errors.js +1 -0
- package/dist/lib/tasks/taskExecutor.d.ts +4 -2
- package/dist/lib/tasks/taskExecutor.js +8 -1
- package/dist/lib/tasks/taskManager.js +27 -3
- package/dist/lib/tasks/tools/taskTools.d.ts +1 -1
- package/dist/lib/telemetry/attributes.d.ts +15 -0
- package/dist/lib/telemetry/attributes.js +16 -0
- package/dist/lib/telemetry/tracers.d.ts +1 -0
- package/dist/lib/telemetry/tracers.js +1 -0
- package/dist/lib/types/autoresearchTypes.d.ts +194 -0
- package/dist/lib/types/autoresearchTypes.js +18 -0
- package/dist/lib/types/common.d.ts +11 -0
- package/dist/lib/types/configTypes.d.ts +7 -0
- package/dist/lib/types/generateTypes.d.ts +13 -0
- package/dist/lib/types/index.d.ts +16 -14
- package/dist/lib/types/index.js +21 -17
- package/dist/lib/types/providers.d.ts +75 -0
- package/dist/lib/types/streamTypes.d.ts +7 -1
- package/dist/lib/types/taskTypes.d.ts +38 -0
- package/dist/lib/workflow/config.d.ts +3 -3
- package/dist/neurolink.d.ts +21 -0
- package/dist/neurolink.js +91 -8
- 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 +16 -11
- 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 +19 -7
- package/dist/providers/openaiCompatible.d.ts +4 -1
- package/dist/providers/openaiCompatible.js +18 -4
- package/dist/rag/errors/RAGError.d.ts +1 -1
- package/dist/tasks/autoresearchTaskExecutor.d.ts +32 -0
- package/dist/tasks/autoresearchTaskExecutor.js +302 -0
- package/dist/tasks/errors.d.ts +3 -1
- package/dist/tasks/errors.js +1 -0
- package/dist/tasks/taskExecutor.d.ts +4 -2
- package/dist/tasks/taskExecutor.js +8 -1
- package/dist/tasks/taskManager.js +27 -3
- package/dist/tasks/tools/taskTools.d.ts +1 -1
- package/dist/telemetry/attributes.d.ts +15 -0
- package/dist/telemetry/attributes.js +16 -0
- package/dist/telemetry/tracers.d.ts +1 -0
- package/dist/telemetry/tracers.js +1 -0
- package/dist/types/autoresearchTypes.d.ts +194 -0
- package/dist/types/autoresearchTypes.js +17 -0
- package/dist/types/common.d.ts +11 -0
- package/dist/types/configTypes.d.ts +7 -0
- package/dist/types/generateTypes.d.ts +13 -0
- package/dist/types/index.d.ts +16 -14
- package/dist/types/index.js +21 -17
- package/dist/types/providers.d.ts +75 -0
- package/dist/types/streamTypes.d.ts +7 -1
- package/dist/types/taskTypes.d.ts +38 -0
- package/package.json +3 -2
package/dist/neurolink.js
CHANGED
|
@@ -28,9 +28,9 @@ import { getContextOverflowProvider, isContextOverflowError, parseProviderOverfl
|
|
|
28
28
|
import { ContextBudgetExceededError } from "./context/errors.js";
|
|
29
29
|
import { repairToolPairs } from "./context/toolPairRepair.js";
|
|
30
30
|
import { SYSTEM_LIMITS } from "./core/constants.js";
|
|
31
|
-
import { createToolEventPayload } from "./core/toolEvents.js";
|
|
32
31
|
import { ConversationMemoryManager } from "./core/conversationMemoryManager.js";
|
|
33
32
|
import { AIProviderFactory } from "./core/factory.js";
|
|
33
|
+
import { createToolEventPayload } from "./core/toolEvents.js";
|
|
34
34
|
import { ProviderRegistry } from "./factories/providerRegistry.js";
|
|
35
35
|
import { FileReferenceRegistry } from "./files/fileReferenceRegistry.js";
|
|
36
36
|
import { createFileTools } from "./files/fileTools.js";
|
|
@@ -259,6 +259,60 @@ export class NeuroLink {
|
|
|
259
259
|
authProvider;
|
|
260
260
|
pendingAuthConfig;
|
|
261
261
|
authInitPromise;
|
|
262
|
+
// Per-provider credential overrides (instance-level default)
|
|
263
|
+
credentials;
|
|
264
|
+
/**
|
|
265
|
+
* Merge instance-level credentials with per-call credentials.
|
|
266
|
+
*
|
|
267
|
+
* Semantics: **deep merge at the provider level.** For each provider key
|
|
268
|
+
* present in both `this.credentials` and `callCredentials`, the per-call
|
|
269
|
+
* fields are merged ON TOP of the instance-level fields, so fields not
|
|
270
|
+
* mentioned in the per-call slice are preserved.
|
|
271
|
+
*
|
|
272
|
+
* Example:
|
|
273
|
+
* ```
|
|
274
|
+
* instance: { openai: { apiKey: "key1", baseURL: "url1" } }
|
|
275
|
+
* per-call: { openai: { apiKey: "key2" } }
|
|
276
|
+
* merged: { openai: { apiKey: "key2", baseURL: "url1" } } // baseURL preserved
|
|
277
|
+
* ```
|
|
278
|
+
*
|
|
279
|
+
* Providers present only in one source are carried through unchanged.
|
|
280
|
+
* Unrelated providers (not overridden in callCredentials) are carried through
|
|
281
|
+
* from instance credentials unchanged.
|
|
282
|
+
*/
|
|
283
|
+
resolveCredentials(callCredentials) {
|
|
284
|
+
if (!this.credentials && !callCredentials) {
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
287
|
+
if (!this.credentials) {
|
|
288
|
+
return callCredentials;
|
|
289
|
+
}
|
|
290
|
+
if (!callCredentials) {
|
|
291
|
+
return this.credentials;
|
|
292
|
+
}
|
|
293
|
+
// Per-provider deep merge: for each provider key in the per-call
|
|
294
|
+
// override, merge its fields on top of the instance-level slice so
|
|
295
|
+
// individual fields (e.g. baseURL) are preserved when only apiKey
|
|
296
|
+
// is overridden per-call.
|
|
297
|
+
const merged = { ...this.credentials };
|
|
298
|
+
for (const key of Object.keys(callCredentials)) {
|
|
299
|
+
const instanceSlice = this.credentials[key];
|
|
300
|
+
const callSlice = callCredentials[key];
|
|
301
|
+
if (instanceSlice &&
|
|
302
|
+
callSlice &&
|
|
303
|
+
typeof instanceSlice === "object" &&
|
|
304
|
+
typeof callSlice === "object") {
|
|
305
|
+
merged[key] = {
|
|
306
|
+
...instanceSlice,
|
|
307
|
+
...callSlice,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
merged[key] = callSlice ?? instanceSlice;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return merged;
|
|
315
|
+
}
|
|
262
316
|
// HITL (Human-in-the-Loop) support
|
|
263
317
|
hitlManager;
|
|
264
318
|
// Accumulated cost in USD across all generate() calls on this instance
|
|
@@ -599,6 +653,10 @@ export class NeuroLink {
|
|
|
599
653
|
if (config?.auth) {
|
|
600
654
|
this.pendingAuthConfig = config.auth;
|
|
601
655
|
}
|
|
656
|
+
// Store per-provider credential overrides
|
|
657
|
+
if (config?.credentials) {
|
|
658
|
+
this.credentials = config.credentials;
|
|
659
|
+
}
|
|
602
660
|
// Store task config for lazy initialization
|
|
603
661
|
this._taskManagerConfig = config?.tasks;
|
|
604
662
|
// Eagerly create TaskManager and register tools if config is provided
|
|
@@ -2122,6 +2180,7 @@ Current user's request: ${currentInput}`;
|
|
|
2122
2180
|
}
|
|
2123
2181
|
}
|
|
2124
2182
|
logger.debug("[NeuroLink] Graceful shutdown completed");
|
|
2183
|
+
this.credentials = undefined;
|
|
2125
2184
|
}
|
|
2126
2185
|
catch (error) {
|
|
2127
2186
|
logger.error("[NeuroLink] Shutdown failed:", error);
|
|
@@ -2646,10 +2705,12 @@ Current user's request: ${currentInput}`;
|
|
|
2646
2705
|
region: options.region,
|
|
2647
2706
|
tts: options.tts,
|
|
2648
2707
|
fileRegistry: this.fileRegistry,
|
|
2708
|
+
timeout: options.timeout,
|
|
2649
2709
|
abortSignal: options.abortSignal,
|
|
2650
2710
|
skipToolPromptInjection: options.skipToolPromptInjection,
|
|
2651
2711
|
middleware: options.middleware,
|
|
2652
2712
|
conversationMessages: options.conversationMessages,
|
|
2713
|
+
credentials: options.credentials,
|
|
2653
2714
|
};
|
|
2654
2715
|
const extraContext = options;
|
|
2655
2716
|
if (extraContext.sessionId || extraContext.userId) {
|
|
@@ -2784,7 +2845,7 @@ Current user's request: ${currentInput}`;
|
|
|
2784
2845
|
const { extractPPTContext, getEffectivePPTProvider } = await import("./features/ppt/utils.js");
|
|
2785
2846
|
// Get provider instance for content planning
|
|
2786
2847
|
const requestedProvider = (options.provider || "vertex");
|
|
2787
|
-
const provider = await AIProviderFactory.createProvider(requestedProvider, options.model, true, this);
|
|
2848
|
+
const provider = await AIProviderFactory.createProvider(requestedProvider, options.model, true, this, undefined, this.resolveCredentials(options.credentials));
|
|
2788
2849
|
// Resolve effective PPT provider (may auto-select if current is not PPT-compatible)
|
|
2789
2850
|
const effectiveProvider = await getEffectivePPTProvider(provider, requestedProvider, options.model || "default", this);
|
|
2790
2851
|
// Extract PPT context from options
|
|
@@ -3818,7 +3879,7 @@ Current user's request: ${currentInput}`;
|
|
|
3818
3879
|
}
|
|
3819
3880
|
async generateWithMCPProvider(context) {
|
|
3820
3881
|
const { options, requestId, functionTag, tryMCPStartTime, providerName, availableTools, enhancedSystemPrompt, conversationMessages, } = context;
|
|
3821
|
-
const provider = await AIProviderFactory.createProvider(providerName, options.model, !options.disableTools, this, options.region);
|
|
3882
|
+
const provider = await AIProviderFactory.createProvider(providerName, options.model, !options.disableTools, this, options.region, this.resolveCredentials(options.credentials));
|
|
3822
3883
|
provider.setTraceContext(this._metricsTraceContext);
|
|
3823
3884
|
this.emitter.emit("connected");
|
|
3824
3885
|
this.emitter.emit("message", `${providerName} provider initialized successfully`);
|
|
@@ -4014,7 +4075,8 @@ Current user's request: ${currentInput}`;
|
|
|
4014
4075
|
}
|
|
4015
4076
|
const provider = await AIProviderFactory.createProvider(providerName, options.model, !options.disableTools, // Pass disableTools as inverse of enableMCP
|
|
4016
4077
|
this, // Pass SDK instance
|
|
4017
|
-
options.region
|
|
4078
|
+
options.region, // Pass region parameter
|
|
4079
|
+
this.resolveCredentials(options.credentials));
|
|
4018
4080
|
// Propagate trace context for parent-child span hierarchy
|
|
4019
4081
|
provider.setTraceContext(this._metricsTraceContext);
|
|
4020
4082
|
// ADD: Emit connection events for successful provider creation (Bedrock-compatible)
|
|
@@ -4047,7 +4109,26 @@ Current user's request: ${currentInput}`;
|
|
|
4047
4109
|
responseTime,
|
|
4048
4110
|
finishReason: result.finishReason,
|
|
4049
4111
|
toolsUsed: result.toolsUsed || [],
|
|
4050
|
-
|
|
4112
|
+
// Map toolExecutions from EnhancedGenerateResult shape ({name,input,output})
|
|
4113
|
+
// to TextGenerationResult shape ({toolName,executionTime,success}).
|
|
4114
|
+
// Preserve original timing/status when present, fall back to safe defaults.
|
|
4115
|
+
toolExecutions: result.toolExecutions?.map((te) => {
|
|
4116
|
+
const t = te;
|
|
4117
|
+
return {
|
|
4118
|
+
// Spread original fields first so normalized fields take precedence
|
|
4119
|
+
...te,
|
|
4120
|
+
toolName: te.name,
|
|
4121
|
+
executionTime: typeof t.executionTime === "number"
|
|
4122
|
+
? t.executionTime
|
|
4123
|
+
: typeof t.duration === "number"
|
|
4124
|
+
? t.duration
|
|
4125
|
+
: 0,
|
|
4126
|
+
success: typeof t.success === "boolean"
|
|
4127
|
+
? t.success
|
|
4128
|
+
: t.status === "success",
|
|
4129
|
+
};
|
|
4130
|
+
}),
|
|
4131
|
+
enhancedWithTools: !!result.toolExecutions?.length,
|
|
4051
4132
|
analytics: result.analytics,
|
|
4052
4133
|
evaluation: result.evaluation,
|
|
4053
4134
|
audio: result.audio,
|
|
@@ -4762,7 +4843,7 @@ Current user's request: ${currentInput}`;
|
|
|
4762
4843
|
reason: errorMsg,
|
|
4763
4844
|
});
|
|
4764
4845
|
try {
|
|
4765
|
-
const fallbackProvider = await AIProviderFactory.createProvider(fallbackRoute.provider, fallbackRoute.model);
|
|
4846
|
+
const fallbackProvider = await AIProviderFactory.createProvider(fallbackRoute.provider, fallbackRoute.model, true, undefined, undefined, this.resolveCredentials(enhancedOptions.credentials));
|
|
4766
4847
|
// Ensure fallback provider can execute tools
|
|
4767
4848
|
fallbackProvider.setupToolExecutor({
|
|
4768
4849
|
customTools: this.getCustomTools(),
|
|
@@ -4925,7 +5006,8 @@ Current user's request: ${currentInput}`;
|
|
|
4925
5006
|
const providerName = await getBestProvider(options.provider);
|
|
4926
5007
|
const provider = await AIProviderFactory.createProvider(providerName, options.model, !options.disableTools, // Pass disableTools as inverse of enableMCP
|
|
4927
5008
|
this, // Pass SDK instance
|
|
4928
|
-
options.region
|
|
5009
|
+
options.region, // Pass region parameter
|
|
5010
|
+
this.resolveCredentials(options.credentials));
|
|
4929
5011
|
// Propagate trace context for parent-child span hierarchy
|
|
4930
5012
|
provider.setTraceContext(this._metricsTraceContext);
|
|
4931
5013
|
// Enable tool execution for the provider using BaseProvider method
|
|
@@ -5140,7 +5222,7 @@ Current user's request: ${currentInput}`;
|
|
|
5140
5222
|
const originalPrompt = options.input.text;
|
|
5141
5223
|
const responseTime = Date.now() - startTime;
|
|
5142
5224
|
const providerName = await getBestProvider(options.provider);
|
|
5143
|
-
const provider = await AIProviderFactory.createProvider(providerName, options.model);
|
|
5225
|
+
const provider = await AIProviderFactory.createProvider(providerName, options.model, true, undefined, undefined, this.resolveCredentials(options.credentials));
|
|
5144
5226
|
const fallbackStreamResult = await provider.stream({
|
|
5145
5227
|
input: { text: options.input.text },
|
|
5146
5228
|
model: options.model,
|
|
@@ -8502,6 +8584,7 @@ Current user's request: ${currentInput}`;
|
|
|
8502
8584
|
this.mcpInitialized = false;
|
|
8503
8585
|
this.mcpInitPromise = null;
|
|
8504
8586
|
this.conversationMemoryNeedsInit = false;
|
|
8587
|
+
this.credentials = undefined;
|
|
8505
8588
|
logger.debug("[NeuroLink] Initialization state reset successfully");
|
|
8506
8589
|
}
|
|
8507
8590
|
catch (error) {
|
|
@@ -8,7 +8,12 @@ export declare class AmazonBedrockProvider extends BaseProvider {
|
|
|
8
8
|
private bedrockClient;
|
|
9
9
|
private conversationHistory;
|
|
10
10
|
private region;
|
|
11
|
-
constructor(modelName?: string, neurolink?: NeuroLink, region?: string
|
|
11
|
+
constructor(modelName?: string, neurolink?: NeuroLink, region?: string, credentials?: {
|
|
12
|
+
accessKeyId?: string;
|
|
13
|
+
secretAccessKey?: string;
|
|
14
|
+
sessionToken?: string;
|
|
15
|
+
region?: string;
|
|
16
|
+
});
|
|
12
17
|
/**
|
|
13
18
|
* Perform initial health check to catch credential/connectivity issues early
|
|
14
19
|
* This prevents the health check failure we saw in production logs
|
|
@@ -18,9 +18,10 @@ export class AmazonBedrockProvider extends BaseProvider {
|
|
|
18
18
|
bedrockClient;
|
|
19
19
|
conversationHistory = [];
|
|
20
20
|
region;
|
|
21
|
-
constructor(modelName, neurolink, region) {
|
|
21
|
+
constructor(modelName, neurolink, region, credentials) {
|
|
22
22
|
super(modelName, "bedrock", neurolink);
|
|
23
|
-
this.region =
|
|
23
|
+
this.region =
|
|
24
|
+
credentials?.region || region || process.env.AWS_REGION || "us-east-1";
|
|
24
25
|
logger.debug("[AmazonBedrockProvider] Starting constructor with extensive logging for debugging");
|
|
25
26
|
// Log environment variables for debugging
|
|
26
27
|
logger.debug(`[AmazonBedrockProvider] Environment check: AWS_REGION=${process.env.AWS_REGION || "undefined"}, AWS_ACCESS_KEY_ID=${process.env.AWS_ACCESS_KEY_ID ? "SET" : "undefined"}, AWS_SECRET_ACCESS_KEY=${process.env.AWS_SECRET_ACCESS_KEY ? "SET" : "undefined"}`);
|
|
@@ -35,6 +36,17 @@ export class AmazonBedrockProvider extends BaseProvider {
|
|
|
35
36
|
// 2. Environment variables
|
|
36
37
|
// 3. AWS config files
|
|
37
38
|
// 4. Instance metadata
|
|
39
|
+
...(credentials?.accessKeyId && credentials?.secretAccessKey
|
|
40
|
+
? {
|
|
41
|
+
credentials: {
|
|
42
|
+
accessKeyId: credentials.accessKeyId,
|
|
43
|
+
secretAccessKey: credentials.secretAccessKey,
|
|
44
|
+
...(credentials.sessionToken
|
|
45
|
+
? { sessionToken: credentials.sessionToken }
|
|
46
|
+
: {}),
|
|
47
|
+
},
|
|
48
|
+
}
|
|
49
|
+
: {}),
|
|
38
50
|
});
|
|
39
51
|
logger.debug(`[AmazonBedrockProvider] Successfully created BedrockRuntimeClient with model: ${this.modelName}, region: ${this.region}`);
|
|
40
52
|
}
|
|
@@ -17,7 +17,13 @@ export declare class AmazonSageMakerProvider extends BaseProvider {
|
|
|
17
17
|
private sagemakerModel;
|
|
18
18
|
private sagemakerConfig;
|
|
19
19
|
private modelConfig;
|
|
20
|
-
constructor(modelName?: string, endpointName?: string, region?: string, neurolink?: NeuroLink
|
|
20
|
+
constructor(modelName?: string, endpointName?: string, region?: string, neurolink?: NeuroLink, credentials?: {
|
|
21
|
+
accessKeyId?: string;
|
|
22
|
+
secretAccessKey?: string;
|
|
23
|
+
sessionToken?: string;
|
|
24
|
+
region?: string;
|
|
25
|
+
endpoint?: string;
|
|
26
|
+
});
|
|
21
27
|
protected getProviderName(): AIProviderName;
|
|
22
28
|
protected getDefaultModel(): string;
|
|
23
29
|
protected getAISDKModel(): LanguageModel;
|
|
@@ -17,11 +17,29 @@ export class AmazonSageMakerProvider extends BaseProvider {
|
|
|
17
17
|
sagemakerModel;
|
|
18
18
|
sagemakerConfig;
|
|
19
19
|
modelConfig;
|
|
20
|
-
constructor(modelName, endpointName, region, neurolink) {
|
|
20
|
+
constructor(modelName, endpointName, region, neurolink, credentials) {
|
|
21
21
|
super(modelName, "sagemaker", neurolink);
|
|
22
22
|
try {
|
|
23
|
-
// Load and validate configuration
|
|
24
|
-
|
|
23
|
+
// Load and validate configuration, then overlay per-request credentials
|
|
24
|
+
const baseConfig = getSageMakerConfig(credentials?.region ?? region);
|
|
25
|
+
this.sagemakerConfig = {
|
|
26
|
+
...baseConfig,
|
|
27
|
+
...(credentials?.region !== undefined && {
|
|
28
|
+
region: credentials.region,
|
|
29
|
+
}),
|
|
30
|
+
...(credentials?.accessKeyId !== undefined && {
|
|
31
|
+
accessKeyId: credentials.accessKeyId,
|
|
32
|
+
}),
|
|
33
|
+
...(credentials?.secretAccessKey !== undefined && {
|
|
34
|
+
secretAccessKey: credentials.secretAccessKey,
|
|
35
|
+
}),
|
|
36
|
+
...(credentials?.sessionToken !== undefined && {
|
|
37
|
+
sessionToken: credentials.sessionToken,
|
|
38
|
+
}),
|
|
39
|
+
...(credentials?.endpoint !== undefined && {
|
|
40
|
+
endpoint: credentials.endpoint,
|
|
41
|
+
}),
|
|
42
|
+
};
|
|
25
43
|
this.modelConfig = getSageMakerModelConfig(endpointName || getDefaultSageMakerEndpoint());
|
|
26
44
|
// Create the SageMaker LanguageModel implementation.
|
|
27
45
|
// SageMakerLanguageModel implements SageMakerAsLanguageModel which is
|
|
@@ -41,7 +41,10 @@ export declare class AnthropicProvider extends BaseProvider {
|
|
|
41
41
|
* @param sdk - Optional NeuroLink SDK instance
|
|
42
42
|
* @param config - Optional configuration options for auth, subscription tier, and beta features
|
|
43
43
|
*/
|
|
44
|
-
constructor(modelName?: string, sdk?: unknown, config?: AnthropicProviderConfig
|
|
44
|
+
constructor(modelName?: string, sdk?: unknown, config?: AnthropicProviderConfig, credentials?: {
|
|
45
|
+
apiKey?: string;
|
|
46
|
+
oauthToken?: string;
|
|
47
|
+
});
|
|
45
48
|
/**
|
|
46
49
|
* Get authentication headers based on current auth method and configuration.
|
|
47
50
|
*
|
|
@@ -219,14 +219,27 @@ export class AnthropicProvider extends BaseProvider {
|
|
|
219
219
|
* @param sdk - Optional NeuroLink SDK instance
|
|
220
220
|
* @param config - Optional configuration options for auth, subscription tier, and beta features
|
|
221
221
|
*/
|
|
222
|
-
constructor(modelName, sdk, config) {
|
|
223
|
-
// Pre-compute effective model with tier validation before calling super
|
|
224
|
-
|
|
222
|
+
constructor(modelName, sdk, config, credentials) {
|
|
223
|
+
// Pre-compute effective model with tier validation before calling super.
|
|
224
|
+
//
|
|
225
|
+
// When per-request credentials supply an apiKey (without oauthToken),
|
|
226
|
+
// force api_key auth — skip OAuth detection entirely so the caller's
|
|
227
|
+
// key is used rather than a stale OAuth token from ~/.neurolink/.
|
|
228
|
+
const forceApiKey = !!(credentials?.apiKey && !credentials?.oauthToken);
|
|
229
|
+
const oauthToken = forceApiKey
|
|
230
|
+
? null
|
|
231
|
+
: ((credentials?.oauthToken
|
|
232
|
+
? { accessToken: credentials.oauthToken }
|
|
233
|
+
: null) ??
|
|
234
|
+
config?.oauthToken ??
|
|
235
|
+
getOAuthToken());
|
|
225
236
|
// Resolve auth method FIRST so that tier detection uses the chosen method.
|
|
226
237
|
// If ANTHROPIC_AUTH_METHOD=api_key wins over an existing OAuth token, the
|
|
227
238
|
// tier must reflect api_key mode (full model access) rather than the OAuth
|
|
228
239
|
// token's subscription level.
|
|
229
|
-
const authMethod =
|
|
240
|
+
const authMethod = forceApiKey
|
|
241
|
+
? "api_key"
|
|
242
|
+
: (config?.authMethod ?? detectAuthMethod(oauthToken));
|
|
230
243
|
const subscriptionTier = config?.subscriptionTier ??
|
|
231
244
|
(authMethod === "oauth" ? detectSubscriptionTier(oauthToken) : "api");
|
|
232
245
|
const targetModel = modelName || getDefaultAnthropicModel();
|
|
@@ -306,7 +319,7 @@ export class AnthropicProvider extends BaseProvider {
|
|
|
306
319
|
}
|
|
307
320
|
else {
|
|
308
321
|
// Traditional API key authentication
|
|
309
|
-
const apiKeyToUse = config?.apiKey ?? getAnthropicApiKey();
|
|
322
|
+
const apiKeyToUse = credentials?.apiKey ?? config?.apiKey ?? getAnthropicApiKey();
|
|
310
323
|
anthropic = createAnthropic({
|
|
311
324
|
apiKey: apiKeyToUse,
|
|
312
325
|
headers,
|
|
@@ -2,13 +2,14 @@ import { type LanguageModel } from "ai";
|
|
|
2
2
|
import { type AIProviderName } from "../constants/enums.js";
|
|
3
3
|
import { BaseProvider } from "../core/baseProvider.js";
|
|
4
4
|
import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
|
|
5
|
+
import type { NeurolinkCredentials } from "../types/providers.js";
|
|
5
6
|
export declare class AzureOpenAIProvider extends BaseProvider {
|
|
6
7
|
private apiKey;
|
|
7
8
|
private resourceName;
|
|
8
9
|
private deployment;
|
|
9
10
|
private apiVersion;
|
|
10
11
|
private azureProvider;
|
|
11
|
-
constructor(modelName?: string, sdk?: unknown);
|
|
12
|
+
constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["azure"]);
|
|
12
13
|
getProviderName(): AIProviderName;
|
|
13
14
|
getDefaultModel(): string;
|
|
14
15
|
/**
|
|
@@ -14,22 +14,27 @@ export class AzureOpenAIProvider extends BaseProvider {
|
|
|
14
14
|
deployment;
|
|
15
15
|
apiVersion;
|
|
16
16
|
azureProvider;
|
|
17
|
-
constructor(modelName, sdk) {
|
|
17
|
+
constructor(modelName, sdk, _region, credentials) {
|
|
18
18
|
super(modelName, "azure", sdk);
|
|
19
|
-
this.apiKey = process.env.AZURE_OPENAI_API_KEY || "";
|
|
19
|
+
this.apiKey = credentials?.apiKey || process.env.AZURE_OPENAI_API_KEY || "";
|
|
20
20
|
const endpoint = process.env.AZURE_OPENAI_ENDPOINT || "";
|
|
21
|
-
|
|
21
|
+
const envResourceName = endpoint
|
|
22
22
|
.replace("https://", "")
|
|
23
23
|
.replace(/\/+$/, "") // Remove trailing slashes
|
|
24
24
|
.replace(".openai.azure.com", "")
|
|
25
25
|
.replace(".cognitiveservices.azure.com", "");
|
|
26
|
+
this.resourceName = credentials?.resourceName || envResourceName;
|
|
26
27
|
this.deployment =
|
|
27
|
-
|
|
28
|
+
credentials?.deploymentName ||
|
|
29
|
+
modelName ||
|
|
28
30
|
process.env.AZURE_OPENAI_MODEL ||
|
|
29
31
|
process.env.AZURE_OPENAI_DEPLOYMENT ||
|
|
30
32
|
process.env.AZURE_OPENAI_DEPLOYMENT_ID ||
|
|
31
33
|
"gpt-4o";
|
|
32
|
-
this.apiVersion =
|
|
34
|
+
this.apiVersion =
|
|
35
|
+
credentials?.apiVersion ||
|
|
36
|
+
process.env.AZURE_API_VERSION ||
|
|
37
|
+
APIVersions.AZURE_LATEST;
|
|
33
38
|
// Configuration validation - now using consolidated utility
|
|
34
39
|
if (!this.apiKey) {
|
|
35
40
|
validateApiKey(createAzureAPIKeyConfig());
|
|
@@ -36,7 +36,10 @@ import type { ZodUnknownSchema } from "../types/typeAliases.js";
|
|
|
36
36
|
* Solution: Simplify schema or use disableTools: true
|
|
37
37
|
*/
|
|
38
38
|
export declare class GoogleAIStudioProvider extends BaseProvider {
|
|
39
|
-
|
|
39
|
+
private credentials?;
|
|
40
|
+
constructor(modelName?: string, sdk?: unknown, credentials?: {
|
|
41
|
+
apiKey?: string;
|
|
42
|
+
});
|
|
40
43
|
getProviderName(): AIProviderName;
|
|
41
44
|
getDefaultModel(): string;
|
|
42
45
|
/**
|
|
@@ -65,8 +65,10 @@ async function createGoogleGenAIClient(apiKey) {
|
|
|
65
65
|
* Solution: Simplify schema or use disableTools: true
|
|
66
66
|
*/
|
|
67
67
|
export class GoogleAIStudioProvider extends BaseProvider {
|
|
68
|
-
|
|
68
|
+
credentials;
|
|
69
|
+
constructor(modelName, sdk, credentials) {
|
|
69
70
|
super(modelName, "google-ai", sdk);
|
|
71
|
+
this.credentials = credentials;
|
|
70
72
|
logger.debug("GoogleAIStudioProvider initialized", {
|
|
71
73
|
model: this.modelName,
|
|
72
74
|
provider: this.providerName,
|
|
@@ -432,11 +434,6 @@ export class GoogleAIStudioProvider extends BaseProvider {
|
|
|
432
434
|
}
|
|
433
435
|
this.validateStreamOptions(options);
|
|
434
436
|
const startTime = Date.now();
|
|
435
|
-
const apiKey = this.getApiKey();
|
|
436
|
-
// Ensure environment variable is set for @ai-sdk/google
|
|
437
|
-
if (!process.env.GOOGLE_GENERATIVE_AI_API_KEY) {
|
|
438
|
-
process.env.GOOGLE_GENERATIVE_AI_API_KEY = apiKey;
|
|
439
|
-
}
|
|
440
437
|
const model = await this.getAISDKModelWithMiddleware(options);
|
|
441
438
|
const timeout = this.getTimeout(options);
|
|
442
439
|
const timeoutController = createTimeoutController(timeout, this.providerName, "stream");
|
|
@@ -1214,7 +1211,9 @@ export class GoogleAIStudioProvider extends BaseProvider {
|
|
|
1214
1211
|
}
|
|
1215
1212
|
}
|
|
1216
1213
|
getApiKey() {
|
|
1217
|
-
const apiKey =
|
|
1214
|
+
const apiKey = this.credentials?.apiKey ||
|
|
1215
|
+
process.env.GOOGLE_AI_API_KEY ||
|
|
1216
|
+
process.env.GOOGLE_GENERATIVE_AI_API_KEY;
|
|
1218
1217
|
if (!apiKey) {
|
|
1219
1218
|
throw new AuthenticationError("GOOGLE_AI_API_KEY or GOOGLE_GENERATIVE_AI_API_KEY environment variable is not set", this.providerName);
|
|
1220
1219
|
}
|
|
@@ -3,6 +3,7 @@ import type { ZodType } from "zod";
|
|
|
3
3
|
import { type AIProviderName } from "../constants/enums.js";
|
|
4
4
|
import { BaseProvider } from "../core/baseProvider.js";
|
|
5
5
|
import type { EnhancedGenerateResult, TextGenerationOptions } from "../types/generateTypes.js";
|
|
6
|
+
import type { NeurolinkCredentials } from "../types/providers.js";
|
|
6
7
|
import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
|
|
7
8
|
/**
|
|
8
9
|
* Vertex Model Aliases
|
|
@@ -70,13 +71,14 @@ export declare class GoogleVertexProvider extends BaseProvider {
|
|
|
70
71
|
private location;
|
|
71
72
|
private registeredTools;
|
|
72
73
|
private toolContext;
|
|
74
|
+
private credentials;
|
|
73
75
|
private static modelConfigCache;
|
|
74
76
|
private static modelConfigCacheTime;
|
|
75
77
|
private static readonly CACHE_DURATION;
|
|
76
78
|
private static readonly MAX_CACHE_SIZE;
|
|
77
79
|
private static maxTokensCache;
|
|
78
80
|
private static maxTokensCacheTime;
|
|
79
|
-
constructor(modelName?: string, _providerName?: string, sdk?: unknown, region?: string);
|
|
81
|
+
constructor(modelName?: string, _providerName?: string, sdk?: unknown, region?: string, credentials?: NeurolinkCredentials["vertex"]);
|
|
80
82
|
protected getProviderName(): AIProviderName;
|
|
81
83
|
protected getDefaultModel(): string;
|
|
82
84
|
/**
|