@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.
Files changed (186) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +19 -0
  3. package/dist/agent/directTools.d.ts +2 -2
  4. package/dist/auth/errors.d.ts +1 -1
  5. package/dist/auth/middleware/AuthMiddleware.d.ts +1 -1
  6. package/dist/auth/providers/BaseAuthProvider.d.ts +1 -1
  7. package/dist/autoresearch/config.d.ts +11 -0
  8. package/dist/autoresearch/config.js +108 -0
  9. package/dist/autoresearch/errors.d.ts +40 -0
  10. package/dist/autoresearch/errors.js +20 -0
  11. package/dist/autoresearch/index.d.ts +23 -0
  12. package/dist/autoresearch/index.js +34 -0
  13. package/dist/autoresearch/phasePolicy.d.ts +9 -0
  14. package/dist/autoresearch/phasePolicy.js +69 -0
  15. package/dist/autoresearch/promptCompiler.d.ts +15 -0
  16. package/dist/autoresearch/promptCompiler.js +120 -0
  17. package/dist/autoresearch/repoPolicy.d.ts +32 -0
  18. package/dist/autoresearch/repoPolicy.js +128 -0
  19. package/dist/autoresearch/resultRecorder.d.ts +20 -0
  20. package/dist/autoresearch/resultRecorder.js +130 -0
  21. package/dist/autoresearch/runner.d.ts +10 -0
  22. package/dist/autoresearch/runner.js +102 -0
  23. package/dist/autoresearch/stateStore.d.ts +12 -0
  24. package/dist/autoresearch/stateStore.js +163 -0
  25. package/dist/autoresearch/summaryParser.d.ts +16 -0
  26. package/dist/autoresearch/summaryParser.js +94 -0
  27. package/dist/autoresearch/tools.d.ts +257 -0
  28. package/dist/autoresearch/tools.js +617 -0
  29. package/dist/autoresearch/worker.d.ts +71 -0
  30. package/dist/autoresearch/worker.js +417 -0
  31. package/dist/browser/neurolink.min.js +340 -324
  32. package/dist/cli/commands/autoresearch.d.ts +41 -0
  33. package/dist/cli/commands/autoresearch.js +487 -0
  34. package/dist/cli/commands/config.d.ts +1 -1
  35. package/dist/cli/commands/task.d.ts +2 -0
  36. package/dist/cli/commands/task.js +32 -3
  37. package/dist/cli/loop/optionsSchema.d.ts +1 -1
  38. package/dist/cli/parser.js +4 -1
  39. package/dist/core/baseProvider.js +18 -0
  40. package/dist/core/factory.d.ts +2 -2
  41. package/dist/core/factory.js +4 -4
  42. package/dist/evaluation/errors/EvaluationError.d.ts +1 -1
  43. package/dist/factories/providerFactory.d.ts +4 -4
  44. package/dist/factories/providerFactory.js +20 -7
  45. package/dist/factories/providerRegistry.d.ts +5 -0
  46. package/dist/factories/providerRegistry.js +45 -26
  47. package/dist/lib/agent/directTools.d.ts +2 -2
  48. package/dist/lib/auth/errors.d.ts +1 -1
  49. package/dist/lib/auth/middleware/AuthMiddleware.d.ts +1 -1
  50. package/dist/lib/auth/providers/BaseAuthProvider.d.ts +1 -1
  51. package/dist/lib/autoresearch/config.d.ts +11 -0
  52. package/dist/lib/autoresearch/config.js +109 -0
  53. package/dist/lib/autoresearch/errors.d.ts +40 -0
  54. package/dist/lib/autoresearch/errors.js +21 -0
  55. package/dist/lib/autoresearch/index.d.ts +23 -0
  56. package/dist/lib/autoresearch/index.js +35 -0
  57. package/dist/lib/autoresearch/phasePolicy.d.ts +9 -0
  58. package/dist/lib/autoresearch/phasePolicy.js +70 -0
  59. package/dist/lib/autoresearch/promptCompiler.d.ts +15 -0
  60. package/dist/lib/autoresearch/promptCompiler.js +121 -0
  61. package/dist/lib/autoresearch/repoPolicy.d.ts +32 -0
  62. package/dist/lib/autoresearch/repoPolicy.js +129 -0
  63. package/dist/lib/autoresearch/resultRecorder.d.ts +20 -0
  64. package/dist/lib/autoresearch/resultRecorder.js +131 -0
  65. package/dist/lib/autoresearch/runner.d.ts +10 -0
  66. package/dist/lib/autoresearch/runner.js +103 -0
  67. package/dist/lib/autoresearch/stateStore.d.ts +12 -0
  68. package/dist/lib/autoresearch/stateStore.js +164 -0
  69. package/dist/lib/autoresearch/summaryParser.d.ts +16 -0
  70. package/dist/lib/autoresearch/summaryParser.js +95 -0
  71. package/dist/lib/autoresearch/tools.d.ts +257 -0
  72. package/dist/lib/autoresearch/tools.js +618 -0
  73. package/dist/lib/autoresearch/worker.d.ts +71 -0
  74. package/dist/lib/autoresearch/worker.js +418 -0
  75. package/dist/lib/core/baseProvider.js +18 -0
  76. package/dist/lib/core/factory.d.ts +2 -2
  77. package/dist/lib/core/factory.js +4 -4
  78. package/dist/lib/evaluation/errors/EvaluationError.d.ts +1 -1
  79. package/dist/lib/factories/providerFactory.d.ts +4 -4
  80. package/dist/lib/factories/providerFactory.js +20 -7
  81. package/dist/lib/factories/providerRegistry.d.ts +5 -0
  82. package/dist/lib/factories/providerRegistry.js +45 -26
  83. package/dist/lib/files/fileTools.d.ts +1 -1
  84. package/dist/lib/neurolink.d.ts +21 -0
  85. package/dist/lib/neurolink.js +91 -8
  86. package/dist/lib/providers/amazonBedrock.d.ts +6 -1
  87. package/dist/lib/providers/amazonBedrock.js +14 -2
  88. package/dist/lib/providers/amazonSagemaker.d.ts +7 -1
  89. package/dist/lib/providers/amazonSagemaker.js +21 -3
  90. package/dist/lib/providers/anthropic.d.ts +4 -1
  91. package/dist/lib/providers/anthropic.js +18 -5
  92. package/dist/lib/providers/azureOpenai.d.ts +2 -1
  93. package/dist/lib/providers/azureOpenai.js +10 -5
  94. package/dist/lib/providers/googleAiStudio.d.ts +4 -1
  95. package/dist/lib/providers/googleAiStudio.js +6 -7
  96. package/dist/lib/providers/googleVertex.d.ts +3 -1
  97. package/dist/lib/providers/googleVertex.js +96 -17
  98. package/dist/lib/providers/huggingFace.d.ts +2 -1
  99. package/dist/lib/providers/huggingFace.js +4 -4
  100. package/dist/lib/providers/litellm.d.ts +5 -1
  101. package/dist/lib/providers/litellm.js +16 -11
  102. package/dist/lib/providers/mistral.d.ts +2 -1
  103. package/dist/lib/providers/mistral.js +2 -2
  104. package/dist/lib/providers/ollama.d.ts +3 -1
  105. package/dist/lib/providers/ollama.js +2 -2
  106. package/dist/lib/providers/openAI.d.ts +5 -1
  107. package/dist/lib/providers/openAI.js +15 -5
  108. package/dist/lib/providers/openRouter.d.ts +5 -1
  109. package/dist/lib/providers/openRouter.js +19 -7
  110. package/dist/lib/providers/openaiCompatible.d.ts +4 -1
  111. package/dist/lib/providers/openaiCompatible.js +18 -4
  112. package/dist/lib/tasks/autoresearchTaskExecutor.d.ts +32 -0
  113. package/dist/lib/tasks/autoresearchTaskExecutor.js +303 -0
  114. package/dist/lib/tasks/errors.d.ts +3 -1
  115. package/dist/lib/tasks/errors.js +1 -0
  116. package/dist/lib/tasks/taskExecutor.d.ts +4 -2
  117. package/dist/lib/tasks/taskExecutor.js +8 -1
  118. package/dist/lib/tasks/taskManager.js +27 -3
  119. package/dist/lib/tasks/tools/taskTools.d.ts +1 -1
  120. package/dist/lib/telemetry/attributes.d.ts +15 -0
  121. package/dist/lib/telemetry/attributes.js +16 -0
  122. package/dist/lib/telemetry/tracers.d.ts +1 -0
  123. package/dist/lib/telemetry/tracers.js +1 -0
  124. package/dist/lib/types/autoresearchTypes.d.ts +194 -0
  125. package/dist/lib/types/autoresearchTypes.js +18 -0
  126. package/dist/lib/types/common.d.ts +11 -0
  127. package/dist/lib/types/configTypes.d.ts +7 -0
  128. package/dist/lib/types/generateTypes.d.ts +13 -0
  129. package/dist/lib/types/index.d.ts +16 -14
  130. package/dist/lib/types/index.js +21 -17
  131. package/dist/lib/types/providers.d.ts +75 -0
  132. package/dist/lib/types/streamTypes.d.ts +7 -1
  133. package/dist/lib/types/taskTypes.d.ts +38 -0
  134. package/dist/lib/workflow/config.d.ts +3 -3
  135. package/dist/neurolink.d.ts +21 -0
  136. package/dist/neurolink.js +91 -8
  137. package/dist/providers/amazonBedrock.d.ts +6 -1
  138. package/dist/providers/amazonBedrock.js +14 -2
  139. package/dist/providers/amazonSagemaker.d.ts +7 -1
  140. package/dist/providers/amazonSagemaker.js +21 -3
  141. package/dist/providers/anthropic.d.ts +4 -1
  142. package/dist/providers/anthropic.js +18 -5
  143. package/dist/providers/azureOpenai.d.ts +2 -1
  144. package/dist/providers/azureOpenai.js +10 -5
  145. package/dist/providers/googleAiStudio.d.ts +4 -1
  146. package/dist/providers/googleAiStudio.js +6 -7
  147. package/dist/providers/googleVertex.d.ts +3 -1
  148. package/dist/providers/googleVertex.js +96 -17
  149. package/dist/providers/huggingFace.d.ts +2 -1
  150. package/dist/providers/huggingFace.js +4 -4
  151. package/dist/providers/litellm.d.ts +5 -1
  152. package/dist/providers/litellm.js +16 -11
  153. package/dist/providers/mistral.d.ts +2 -1
  154. package/dist/providers/mistral.js +2 -2
  155. package/dist/providers/ollama.d.ts +3 -1
  156. package/dist/providers/ollama.js +2 -2
  157. package/dist/providers/openAI.d.ts +5 -1
  158. package/dist/providers/openAI.js +15 -5
  159. package/dist/providers/openRouter.d.ts +5 -1
  160. package/dist/providers/openRouter.js +19 -7
  161. package/dist/providers/openaiCompatible.d.ts +4 -1
  162. package/dist/providers/openaiCompatible.js +18 -4
  163. package/dist/rag/errors/RAGError.d.ts +1 -1
  164. package/dist/tasks/autoresearchTaskExecutor.d.ts +32 -0
  165. package/dist/tasks/autoresearchTaskExecutor.js +302 -0
  166. package/dist/tasks/errors.d.ts +3 -1
  167. package/dist/tasks/errors.js +1 -0
  168. package/dist/tasks/taskExecutor.d.ts +4 -2
  169. package/dist/tasks/taskExecutor.js +8 -1
  170. package/dist/tasks/taskManager.js +27 -3
  171. package/dist/tasks/tools/taskTools.d.ts +1 -1
  172. package/dist/telemetry/attributes.d.ts +15 -0
  173. package/dist/telemetry/attributes.js +16 -0
  174. package/dist/telemetry/tracers.d.ts +1 -0
  175. package/dist/telemetry/tracers.js +1 -0
  176. package/dist/types/autoresearchTypes.d.ts +194 -0
  177. package/dist/types/autoresearchTypes.js +17 -0
  178. package/dist/types/common.d.ts +11 -0
  179. package/dist/types/configTypes.d.ts +7 -0
  180. package/dist/types/generateTypes.d.ts +13 -0
  181. package/dist/types/index.d.ts +16 -14
  182. package/dist/types/index.js +21 -17
  183. package/dist/types/providers.d.ts +75 -0
  184. package/dist/types/streamTypes.d.ts +7 -1
  185. package/dist/types/taskTypes.d.ts +38 -0
  186. package/package.json +3 -2
@@ -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;
@@ -173,7 +173,7 @@ export declare function createFileTools(registry: FileReferenceRegistry): {
173
173
  } | undefined;
174
174
  columns?: string[] | undefined;
175
175
  entry_path?: string | undefined;
176
- format?: "detailed" | "text" | "summary" | undefined;
176
+ format?: "text" | "detailed" | "summary" | undefined;
177
177
  }, {
178
178
  success: false;
179
179
  error: string | undefined;
@@ -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;
@@ -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
- enhancedWithTools: false,
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 = region || process.env.AWS_REGION || "us-east-1";
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
- this.sagemakerConfig = getSageMakerConfig(region);
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
- const oauthToken = config?.oauthToken ?? getOAuthToken();
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 = config?.authMethod ?? detectAuthMethod(oauthToken);
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
- this.resourceName = endpoint
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
- modelName ||
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 = process.env.AZURE_API_VERSION || APIVersions.AZURE_LATEST;
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
- constructor(modelName?: string, sdk?: unknown);
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
- constructor(modelName, sdk) {
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 = process.env.GOOGLE_AI_API_KEY || process.env.GOOGLE_GENERATIVE_AI_API_KEY;
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
  /**