@juspay/neurolink 5.0.0 → 5.2.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 (214) hide show
  1. package/CHANGELOG.md +20 -7
  2. package/README.md +160 -172
  3. package/dist/agent/direct-tools.d.ts +6 -6
  4. package/dist/chat/sse-handler.js +5 -4
  5. package/dist/chat/websocket-chat-handler.js +9 -9
  6. package/dist/cli/commands/config.d.ts +3 -3
  7. package/dist/cli/commands/mcp.js +9 -8
  8. package/dist/cli/commands/ollama.js +3 -3
  9. package/dist/cli/factories/command-factory.d.ts +18 -0
  10. package/dist/cli/factories/command-factory.js +183 -0
  11. package/dist/cli/index.js +105 -157
  12. package/dist/cli/utils/interactive-setup.js +2 -2
  13. package/dist/core/base-provider.d.ts +423 -0
  14. package/dist/core/base-provider.js +365 -0
  15. package/dist/core/constants.d.ts +1 -1
  16. package/dist/core/constants.js +1 -1
  17. package/dist/core/dynamic-models.d.ts +6 -6
  18. package/dist/core/evaluation.d.ts +19 -80
  19. package/dist/core/evaluation.js +185 -484
  20. package/dist/core/factory.d.ts +3 -3
  21. package/dist/core/factory.js +31 -91
  22. package/dist/core/service-registry.d.ts +47 -0
  23. package/dist/core/service-registry.js +112 -0
  24. package/dist/core/types.d.ts +49 -49
  25. package/dist/core/types.js +1 -0
  26. package/dist/factories/compatibility-factory.d.ts +20 -0
  27. package/dist/factories/compatibility-factory.js +69 -0
  28. package/dist/factories/provider-factory.d.ts +72 -0
  29. package/dist/factories/provider-factory.js +144 -0
  30. package/dist/factories/provider-generate-factory.d.ts +20 -0
  31. package/dist/factories/provider-generate-factory.js +87 -0
  32. package/dist/factories/provider-registry.d.ts +38 -0
  33. package/dist/factories/provider-registry.js +107 -0
  34. package/dist/index.d.ts +8 -5
  35. package/dist/index.js +5 -5
  36. package/dist/lib/agent/direct-tools.d.ts +6 -6
  37. package/dist/lib/chat/sse-handler.js +5 -4
  38. package/dist/lib/chat/websocket-chat-handler.js +9 -9
  39. package/dist/lib/core/base-provider.d.ts +423 -0
  40. package/dist/lib/core/base-provider.js +365 -0
  41. package/dist/lib/core/constants.d.ts +1 -1
  42. package/dist/lib/core/constants.js +1 -1
  43. package/dist/lib/core/dynamic-models.d.ts +6 -6
  44. package/dist/lib/core/evaluation.d.ts +19 -80
  45. package/dist/lib/core/evaluation.js +185 -484
  46. package/dist/lib/core/factory.d.ts +3 -3
  47. package/dist/lib/core/factory.js +30 -91
  48. package/dist/lib/core/service-registry.d.ts +47 -0
  49. package/dist/lib/core/service-registry.js +112 -0
  50. package/dist/lib/core/types.d.ts +49 -49
  51. package/dist/lib/core/types.js +1 -0
  52. package/dist/lib/factories/compatibility-factory.d.ts +20 -0
  53. package/dist/lib/factories/compatibility-factory.js +69 -0
  54. package/dist/lib/factories/provider-factory.d.ts +72 -0
  55. package/dist/lib/factories/provider-factory.js +144 -0
  56. package/dist/lib/factories/provider-generate-factory.d.ts +20 -0
  57. package/dist/lib/factories/provider-generate-factory.js +87 -0
  58. package/dist/lib/factories/provider-registry.d.ts +38 -0
  59. package/dist/lib/factories/provider-registry.js +107 -0
  60. package/dist/lib/index.d.ts +8 -5
  61. package/dist/lib/index.js +5 -5
  62. package/dist/lib/mcp/client.js +5 -5
  63. package/dist/lib/mcp/config.js +28 -3
  64. package/dist/lib/mcp/dynamic-orchestrator.js +8 -8
  65. package/dist/lib/mcp/external-client.js +2 -2
  66. package/dist/lib/mcp/factory.d.ts +1 -1
  67. package/dist/lib/mcp/factory.js +1 -1
  68. package/dist/lib/mcp/function-calling.js +1 -1
  69. package/dist/lib/mcp/initialize-tools.d.ts +1 -1
  70. package/dist/lib/mcp/initialize-tools.js +45 -1
  71. package/dist/lib/mcp/initialize.js +16 -6
  72. package/dist/lib/mcp/neurolink-mcp-client.js +10 -10
  73. package/dist/lib/mcp/orchestrator.js +4 -4
  74. package/dist/lib/mcp/servers/agent/direct-tools-server.d.ts +8 -0
  75. package/dist/lib/mcp/servers/agent/direct-tools-server.js +109 -0
  76. package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +10 -10
  77. package/dist/lib/mcp/servers/ai-providers/ai-core-server.js +8 -6
  78. package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.d.ts +2 -2
  79. package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.js +16 -16
  80. package/dist/lib/mcp/unified-registry.d.ts +4 -0
  81. package/dist/lib/mcp/unified-registry.js +42 -9
  82. package/dist/lib/neurolink.d.ts +161 -174
  83. package/dist/lib/neurolink.js +723 -397
  84. package/dist/lib/providers/amazon-bedrock.d.ts +32 -0
  85. package/dist/lib/providers/amazon-bedrock.js +143 -0
  86. package/dist/lib/providers/analytics-helper.js +7 -4
  87. package/dist/lib/providers/anthropic-baseprovider.d.ts +23 -0
  88. package/dist/lib/providers/anthropic-baseprovider.js +114 -0
  89. package/dist/lib/providers/anthropic.d.ts +19 -39
  90. package/dist/lib/providers/anthropic.js +84 -378
  91. package/dist/lib/providers/azure-openai.d.ts +20 -0
  92. package/dist/lib/providers/azure-openai.js +89 -0
  93. package/dist/lib/providers/function-calling-provider.d.ts +14 -12
  94. package/dist/lib/providers/function-calling-provider.js +114 -64
  95. package/dist/lib/providers/google-ai-studio.d.ts +23 -0
  96. package/dist/lib/providers/google-ai-studio.js +107 -0
  97. package/dist/lib/providers/google-vertex.d.ts +47 -0
  98. package/dist/lib/providers/google-vertex.js +205 -0
  99. package/dist/lib/providers/huggingFace.d.ts +33 -27
  100. package/dist/lib/providers/huggingFace.js +103 -400
  101. package/dist/lib/providers/index.d.ts +9 -9
  102. package/dist/lib/providers/index.js +9 -9
  103. package/dist/lib/providers/mcp-provider.d.ts +13 -8
  104. package/dist/lib/providers/mcp-provider.js +63 -18
  105. package/dist/lib/providers/mistral.d.ts +42 -0
  106. package/dist/lib/providers/mistral.js +160 -0
  107. package/dist/lib/providers/ollama.d.ts +52 -35
  108. package/dist/lib/providers/ollama.js +297 -477
  109. package/dist/lib/providers/openAI.d.ts +21 -21
  110. package/dist/lib/providers/openAI.js +81 -245
  111. package/dist/lib/sdk/tool-extension.d.ts +181 -0
  112. package/dist/lib/sdk/tool-extension.js +283 -0
  113. package/dist/lib/sdk/tool-registration.d.ts +95 -0
  114. package/dist/lib/sdk/tool-registration.js +167 -0
  115. package/dist/lib/types/generate-types.d.ts +80 -0
  116. package/dist/lib/types/generate-types.js +1 -0
  117. package/dist/lib/types/mcp-types.d.ts +116 -0
  118. package/dist/lib/types/mcp-types.js +5 -0
  119. package/dist/lib/types/stream-types.d.ts +95 -0
  120. package/dist/lib/types/stream-types.js +1 -0
  121. package/dist/lib/types/universal-provider-options.d.ts +87 -0
  122. package/dist/lib/types/universal-provider-options.js +53 -0
  123. package/dist/lib/utils/providerUtils-fixed.js +1 -1
  124. package/dist/lib/utils/streaming-utils.d.ts +14 -2
  125. package/dist/lib/utils/streaming-utils.js +0 -3
  126. package/dist/mcp/client.js +5 -5
  127. package/dist/mcp/config.js +28 -3
  128. package/dist/mcp/dynamic-orchestrator.js +8 -8
  129. package/dist/mcp/external-client.js +2 -2
  130. package/dist/mcp/factory.d.ts +1 -1
  131. package/dist/mcp/factory.js +1 -1
  132. package/dist/mcp/function-calling.js +1 -1
  133. package/dist/mcp/initialize-tools.d.ts +1 -1
  134. package/dist/mcp/initialize-tools.js +45 -1
  135. package/dist/mcp/initialize.js +16 -6
  136. package/dist/mcp/neurolink-mcp-client.js +10 -10
  137. package/dist/mcp/orchestrator.js +4 -4
  138. package/dist/mcp/servers/agent/direct-tools-server.d.ts +8 -0
  139. package/dist/mcp/servers/agent/direct-tools-server.js +109 -0
  140. package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +10 -10
  141. package/dist/mcp/servers/ai-providers/ai-core-server.js +8 -6
  142. package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +2 -2
  143. package/dist/mcp/servers/ai-providers/ai-workflow-tools.js +16 -16
  144. package/dist/mcp/unified-registry.d.ts +4 -0
  145. package/dist/mcp/unified-registry.js +42 -9
  146. package/dist/neurolink.d.ts +161 -174
  147. package/dist/neurolink.js +723 -397
  148. package/dist/providers/amazon-bedrock.d.ts +32 -0
  149. package/dist/providers/amazon-bedrock.js +143 -0
  150. package/dist/providers/analytics-helper.js +7 -4
  151. package/dist/providers/anthropic-baseprovider.d.ts +23 -0
  152. package/dist/providers/anthropic-baseprovider.js +114 -0
  153. package/dist/providers/anthropic.d.ts +19 -39
  154. package/dist/providers/anthropic.js +83 -377
  155. package/dist/providers/azure-openai.d.ts +20 -0
  156. package/dist/providers/azure-openai.js +89 -0
  157. package/dist/providers/function-calling-provider.d.ts +14 -12
  158. package/dist/providers/function-calling-provider.js +114 -64
  159. package/dist/providers/google-ai-studio.d.ts +23 -0
  160. package/dist/providers/google-ai-studio.js +108 -0
  161. package/dist/providers/google-vertex.d.ts +47 -0
  162. package/dist/providers/google-vertex.js +205 -0
  163. package/dist/providers/huggingFace.d.ts +33 -27
  164. package/dist/providers/huggingFace.js +102 -399
  165. package/dist/providers/index.d.ts +9 -9
  166. package/dist/providers/index.js +9 -9
  167. package/dist/providers/mcp-provider.d.ts +13 -8
  168. package/dist/providers/mcp-provider.js +63 -18
  169. package/dist/providers/mistral.d.ts +42 -0
  170. package/dist/providers/mistral.js +160 -0
  171. package/dist/providers/ollama.d.ts +52 -35
  172. package/dist/providers/ollama.js +297 -476
  173. package/dist/providers/openAI.d.ts +21 -21
  174. package/dist/providers/openAI.js +81 -246
  175. package/dist/sdk/tool-extension.d.ts +181 -0
  176. package/dist/sdk/tool-extension.js +283 -0
  177. package/dist/sdk/tool-registration.d.ts +95 -0
  178. package/dist/sdk/tool-registration.js +168 -0
  179. package/dist/types/generate-types.d.ts +80 -0
  180. package/dist/types/generate-types.js +1 -0
  181. package/dist/types/mcp-types.d.ts +116 -0
  182. package/dist/types/mcp-types.js +5 -0
  183. package/dist/types/stream-types.d.ts +95 -0
  184. package/dist/types/stream-types.js +1 -0
  185. package/dist/types/universal-provider-options.d.ts +87 -0
  186. package/dist/types/universal-provider-options.js +53 -0
  187. package/dist/utils/providerUtils-fixed.js +1 -1
  188. package/dist/utils/streaming-utils.d.ts +14 -2
  189. package/dist/utils/streaming-utils.js +0 -3
  190. package/package.json +15 -10
  191. package/dist/lib/providers/agent-enhanced-provider.d.ts +0 -89
  192. package/dist/lib/providers/agent-enhanced-provider.js +0 -614
  193. package/dist/lib/providers/amazonBedrock.d.ts +0 -19
  194. package/dist/lib/providers/amazonBedrock.js +0 -334
  195. package/dist/lib/providers/azureOpenAI.d.ts +0 -39
  196. package/dist/lib/providers/azureOpenAI.js +0 -436
  197. package/dist/lib/providers/googleAIStudio.d.ts +0 -49
  198. package/dist/lib/providers/googleAIStudio.js +0 -333
  199. package/dist/lib/providers/googleVertexAI.d.ts +0 -38
  200. package/dist/lib/providers/googleVertexAI.js +0 -519
  201. package/dist/lib/providers/mistralAI.d.ts +0 -34
  202. package/dist/lib/providers/mistralAI.js +0 -294
  203. package/dist/providers/agent-enhanced-provider.d.ts +0 -89
  204. package/dist/providers/agent-enhanced-provider.js +0 -614
  205. package/dist/providers/amazonBedrock.d.ts +0 -19
  206. package/dist/providers/amazonBedrock.js +0 -334
  207. package/dist/providers/azureOpenAI.d.ts +0 -39
  208. package/dist/providers/azureOpenAI.js +0 -437
  209. package/dist/providers/googleAIStudio.d.ts +0 -49
  210. package/dist/providers/googleAIStudio.js +0 -333
  211. package/dist/providers/googleVertexAI.d.ts +0 -38
  212. package/dist/providers/googleVertexAI.js +0 -519
  213. package/dist/providers/mistralAI.d.ts +0 -34
  214. package/dist/providers/mistralAI.js +0 -294
@@ -5,7 +5,7 @@ declare const componentIdentifier = "aiProviderFactory";
5
5
  */
6
6
  export declare class AIProviderFactory {
7
7
  /**
8
- * Normalize provider name to match dynamic model registry keys
8
+ * Normalize provider name using ProviderFactory
9
9
  */
10
10
  private static normalizeProviderName;
11
11
  /**
@@ -15,7 +15,7 @@ export declare class AIProviderFactory {
15
15
  * @param enableMCP - Optional flag to enable MCP integration (default: true)
16
16
  * @returns AIProvider instance
17
17
  */
18
- static createProvider(providerName: string, modelName?: string | null, enableMCP?: boolean): Promise<AIProvider>;
18
+ static createProvider(providerName: string, modelName?: string | null, enableMCP?: boolean, sdk?: any): Promise<AIProvider>;
19
19
  /**
20
20
  * Create a provider instance with specific provider enum and model
21
21
  * @param provider - Provider enum value
@@ -30,7 +30,7 @@ export declare class AIProviderFactory {
30
30
  * @param enableMCP - Optional flag to enable MCP integration (default: true)
31
31
  * @returns AIProvider instance
32
32
  */
33
- static createBestProvider(requestedProvider?: string, modelName?: string | null, enableMCP?: boolean): Promise<AIProvider>;
33
+ static createBestProvider(requestedProvider?: string, modelName?: string | null, enableMCP?: boolean, sdk?: any): Promise<AIProvider>;
34
34
  /**
35
35
  * Create primary and fallback provider instances
36
36
  * @param primaryProvider - Primary provider name
@@ -1,4 +1,7 @@
1
- import { GoogleVertexAI, AmazonBedrock, OpenAI, AnthropicProvider, AzureOpenAIProvider, GoogleAIStudio, HuggingFace, Ollama, MistralAI, } from "../providers/index.js";
1
+ // CIRCULAR DEPENDENCY FIX: Remove barrel export import
2
+ // Providers are now managed via ProviderFactory instead of direct imports
3
+ import { ProviderFactory } from "../factories/provider-factory.js";
4
+ import { ProviderRegistry } from "../factories/provider-registry.js";
2
5
  import { getBestProvider } from "../utils/providerUtils.js";
3
6
  import { logger } from "../utils/logger.js";
4
7
  import { dynamicModelProvider } from "./dynamic-models.js";
@@ -8,45 +11,16 @@ const componentIdentifier = "aiProviderFactory";
8
11
  */
9
12
  export class AIProviderFactory {
10
13
  /**
11
- * Normalize provider name to match dynamic model registry keys
14
+ * Normalize provider name using ProviderFactory
12
15
  */
13
16
  static normalizeProviderName(providerName) {
14
- switch (providerName.toLowerCase()) {
15
- case "vertex":
16
- case "google":
17
- case "gemini":
18
- return "google";
19
- case "bedrock":
20
- case "amazon":
21
- case "aws":
22
- return "bedrock";
23
- case "openai":
24
- case "gpt":
25
- return "openai";
26
- case "anthropic":
27
- case "claude":
28
- return "anthropic";
29
- case "azure":
30
- case "azure-openai":
31
- return "openai"; // Azure uses OpenAI models
32
- case "google-ai":
33
- case "google-studio":
34
- return "google";
35
- case "huggingface":
36
- case "hugging-face":
37
- case "hf":
38
- return "huggingface";
39
- case "ollama":
40
- case "local":
41
- case "local-ollama":
42
- return "ollama";
43
- case "mistral":
44
- case "mistral-ai":
45
- case "mistralai":
46
- return "mistral";
47
- default:
48
- return providerName.toLowerCase();
17
+ // Use ProviderFactory registration - no more legacy switch statements
18
+ const normalized = ProviderFactory.normalizeProviderName(providerName);
19
+ if (normalized) {
20
+ return normalized;
49
21
  }
22
+ // If not found in factory, return as-is (will be handled by factory error handling)
23
+ return providerName.toLowerCase();
50
24
  }
51
25
  /**
52
26
  * Create a provider instance for the specified provider type
@@ -55,8 +29,9 @@ export class AIProviderFactory {
55
29
  * @param enableMCP - Optional flag to enable MCP integration (default: true)
56
30
  * @returns AIProvider instance
57
31
  */
58
- static async createProvider(providerName, modelName, enableMCP = true) {
59
- const functionTag = "AIProviderFactory.createProvider";
32
+ static async createProvider(providerName, modelName, enableMCP = true, sdk) {
33
+ const functionTag = "AIawait ProviderFactory.createProvider";
34
+ // Providers are registered via ProviderFactory.initialize() on first use
60
35
  logger.debug(`[${functionTag}] Provider creation started`, {
61
36
  providerName,
62
37
  modelName: modelName || "default",
@@ -115,53 +90,18 @@ export class AIProviderFactory {
115
90
  // }
116
91
  // }
117
92
  let provider;
118
- switch (providerName.toLowerCase()) {
119
- case "vertex":
120
- case "google":
121
- case "gemini":
122
- provider = new GoogleVertexAI(resolvedModelName === "default" ? null : resolvedModelName);
123
- break;
124
- case "bedrock":
125
- case "amazon":
126
- case "aws":
127
- provider = new AmazonBedrock(resolvedModelName === "default" ? null : resolvedModelName);
128
- break;
129
- case "openai":
130
- case "gpt":
131
- provider = new OpenAI(resolvedModelName === "default" ? null : resolvedModelName);
132
- break;
133
- case "anthropic":
134
- case "claude":
135
- provider = new AnthropicProvider();
136
- break;
137
- case "azure":
138
- case "azure-openai":
139
- provider = new AzureOpenAIProvider();
140
- break;
141
- case "google-ai":
142
- case "google-studio":
143
- provider = new GoogleAIStudio(resolvedModelName === "default" ? null : resolvedModelName);
144
- break;
145
- case "huggingface":
146
- case "hugging-face":
147
- case "hf":
148
- provider = new HuggingFace(resolvedModelName === "default" ? null : resolvedModelName);
149
- break;
150
- case "ollama":
151
- case "local":
152
- case "local-ollama":
153
- provider = new Ollama(resolvedModelName === "default"
154
- ? undefined
155
- : resolvedModelName || undefined);
156
- break;
157
- case "mistral":
158
- case "mistral-ai":
159
- case "mistralai":
160
- provider = new MistralAI(resolvedModelName === "default" ? null : resolvedModelName);
161
- break;
162
- default:
163
- throw new Error(`Unknown provider: ${providerName}. Supported providers: vertex, bedrock, openai, anthropic, azure, google-ai, huggingface, ollama, mistral`);
164
- }
93
+ // PURE FACTORY PATTERN: No switch statements - use ProviderFactory exclusively
94
+ const normalizedName = this.normalizeProviderName(providerName);
95
+ const finalModelName = resolvedModelName === "default" || resolvedModelName === null
96
+ ? undefined
97
+ : resolvedModelName;
98
+ provider = await ProviderFactory.createProvider(normalizedName, finalModelName, sdk);
99
+ logger.debug(componentIdentifier, "Pure factory pattern provider created", {
100
+ providerName: normalizedName,
101
+ modelName: finalModelName,
102
+ factoryUsed: true,
103
+ });
104
+ // PURE FACTORY PATTERN: All providers handled by ProviderFactory - no switch statements needed
165
105
  // Wrap with MCP if enabled
166
106
  if (enableMCP) {
167
107
  try {
@@ -183,7 +123,7 @@ export class AIProviderFactory {
183
123
  }
184
124
  logger.debug(`[${functionTag}] Provider creation succeeded`, {
185
125
  providerName,
186
- modelName: modelName || "default",
126
+ modelName: finalModelName || "default",
187
127
  providerType: provider.constructor.name,
188
128
  mcpEnabled: enableMCP,
189
129
  });
@@ -206,7 +146,7 @@ export class AIProviderFactory {
206
146
  * @returns AIProvider instance
207
147
  */
208
148
  static async createProviderWithModel(provider, model) {
209
- const functionTag = "AIProviderFactory.createProviderWithModel";
149
+ const functionTag = "AIawait ProviderFactory.createProviderWithModel";
210
150
  logger.debug(`[${functionTag}] Provider model creation started`, {
211
151
  provider,
212
152
  model,
@@ -237,7 +177,7 @@ export class AIProviderFactory {
237
177
  * @param enableMCP - Optional flag to enable MCP integration (default: true)
238
178
  * @returns AIProvider instance
239
179
  */
240
- static async createBestProvider(requestedProvider, modelName, enableMCP = true) {
180
+ static async createBestProvider(requestedProvider, modelName, enableMCP = true, sdk) {
241
181
  const functionTag = "AIProviderFactory.createBestProvider";
242
182
  try {
243
183
  const bestProvider = await getBestProvider(requestedProvider);
@@ -247,7 +187,7 @@ export class AIProviderFactory {
247
187
  modelName: modelName || "default",
248
188
  enableMCP,
249
189
  });
250
- return await this.createProvider(bestProvider, modelName, enableMCP);
190
+ return await this.createProvider(bestProvider, modelName, enableMCP, sdk);
251
191
  }
252
192
  catch (error) {
253
193
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -267,7 +207,7 @@ export class AIProviderFactory {
267
207
  * @returns Object with primary and fallback providers
268
208
  */
269
209
  static async createProviderWithFallback(primaryProvider, fallbackProvider, modelName, enableMCP = true) {
270
- const functionTag = "AIProviderFactory.createProviderWithFallback";
210
+ const functionTag = "AIawait ProviderFactory.createProviderWithFallback";
271
211
  logger.debug(`[${functionTag}] Fallback provider setup started`, {
272
212
  primaryProvider,
273
213
  fallbackProvider,
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Service Registry for Dependency Injection
3
+ * Breaks circular dependencies by providing lazy loading and centralized service management
4
+ */
5
+ export interface ServiceFactory<T = any> {
6
+ (): T | Promise<T>;
7
+ }
8
+ export interface ServiceRegistration {
9
+ factory: ServiceFactory;
10
+ singleton: boolean;
11
+ instance?: any;
12
+ }
13
+ export declare class ServiceRegistry {
14
+ private static services;
15
+ private static initializing;
16
+ /**
17
+ * Register a service with optional singleton behavior
18
+ */
19
+ static register<T>(name: string, factory: ServiceFactory<T>, options?: {
20
+ singleton?: boolean;
21
+ }): void;
22
+ /**
23
+ * Get a service instance with circular dependency detection
24
+ */
25
+ static get<T>(name: string): Promise<T>;
26
+ /**
27
+ * Get a service synchronously (throws if async initialization required)
28
+ */
29
+ static getSync<T>(name: string): T;
30
+ /**
31
+ * Check if a service is registered
32
+ */
33
+ static has(name: string): boolean;
34
+ /**
35
+ * Clear all services (useful for testing)
36
+ */
37
+ static clear(): void;
38
+ /**
39
+ * Get all registered service names
40
+ */
41
+ static getRegisteredServices(): string[];
42
+ /**
43
+ * Register multiple services at once
44
+ */
45
+ static registerBatch(services: Record<string, ServiceFactory>): void;
46
+ }
47
+ export declare const serviceRegistry: typeof ServiceRegistry;
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Service Registry for Dependency Injection
3
+ * Breaks circular dependencies by providing lazy loading and centralized service management
4
+ */
5
+ import { logger } from "../utils/logger.js";
6
+ export class ServiceRegistry {
7
+ static services = new Map();
8
+ static initializing = new Set();
9
+ /**
10
+ * Register a service with optional singleton behavior
11
+ */
12
+ static register(name, factory, options = {}) {
13
+ if (this.services.has(name)) {
14
+ logger.warn(`Service ${name} is already registered. Overwriting.`);
15
+ }
16
+ this.services.set(name, {
17
+ factory,
18
+ singleton: options.singleton ?? true,
19
+ instance: undefined,
20
+ });
21
+ logger.debug(`Service registered: ${name} (singleton: ${options.singleton ?? true})`);
22
+ }
23
+ /**
24
+ * Get a service instance with circular dependency detection
25
+ */
26
+ static async get(name) {
27
+ const registration = this.services.get(name);
28
+ if (!registration) {
29
+ throw new Error(`Service ${name} not registered. Available services: ${Array.from(this.services.keys()).join(", ")}`);
30
+ }
31
+ // Check for circular dependency
32
+ if (this.initializing.has(name)) {
33
+ throw new Error(`Circular dependency detected: ${name} is already being initialized. Chain: ${Array.from(this.initializing).join(" -> ")} -> ${name}`);
34
+ }
35
+ // Return existing singleton instance if available
36
+ if (registration.singleton && registration.instance !== undefined) {
37
+ return registration.instance;
38
+ }
39
+ try {
40
+ // Mark as initializing to detect circular dependencies
41
+ this.initializing.add(name);
42
+ logger.debug(`Initializing service: ${name}`);
43
+ // Create new instance
44
+ const instance = await registration.factory();
45
+ // Store singleton instance
46
+ if (registration.singleton) {
47
+ registration.instance = instance;
48
+ }
49
+ logger.debug(`Service initialized: ${name}`);
50
+ return instance;
51
+ }
52
+ catch (error) {
53
+ logger.error(`Failed to initialize service ${name}:`, error);
54
+ throw error;
55
+ }
56
+ finally {
57
+ // Remove from initializing set
58
+ this.initializing.delete(name);
59
+ }
60
+ }
61
+ /**
62
+ * Get a service synchronously (throws if async initialization required)
63
+ */
64
+ static getSync(name) {
65
+ const registration = this.services.get(name);
66
+ if (!registration) {
67
+ throw new Error(`Service ${name} not registered`);
68
+ }
69
+ if (registration.singleton && registration.instance !== undefined) {
70
+ return registration.instance;
71
+ }
72
+ // Try synchronous initialization
73
+ const result = registration.factory();
74
+ if (result instanceof Promise) {
75
+ throw new Error(`Service ${name} requires asynchronous initialization. Use get() instead.`);
76
+ }
77
+ if (registration.singleton) {
78
+ registration.instance = result;
79
+ }
80
+ return result;
81
+ }
82
+ /**
83
+ * Check if a service is registered
84
+ */
85
+ static has(name) {
86
+ return this.services.has(name);
87
+ }
88
+ /**
89
+ * Clear all services (useful for testing)
90
+ */
91
+ static clear() {
92
+ this.services.clear();
93
+ this.initializing.clear();
94
+ logger.debug("Service registry cleared");
95
+ }
96
+ /**
97
+ * Get all registered service names
98
+ */
99
+ static getRegisteredServices() {
100
+ return Array.from(this.services.keys());
101
+ }
102
+ /**
103
+ * Register multiple services at once
104
+ */
105
+ static registerBatch(services) {
106
+ for (const [name, factory] of Object.entries(services)) {
107
+ this.register(name, factory);
108
+ }
109
+ }
110
+ }
111
+ // Export singleton instance for convenience
112
+ export const serviceRegistry = ServiceRegistry;
@@ -1,5 +1,34 @@
1
1
  import type { ZodType, ZodTypeDef } from "zod";
2
- import type { StreamTextResult, ToolSet, Schema, GenerateTextResult, Tool } from "ai";
2
+ import type { Schema, Tool } from "ai";
3
+ import type { GenerateResult } from "../types/generate-types.js";
4
+ import type { StreamOptions, StreamResult } from "../types/stream-types.js";
5
+ export interface TextGenerationResult {
6
+ content: string;
7
+ provider?: string;
8
+ model?: string;
9
+ usage?: {
10
+ promptTokens?: number;
11
+ completionTokens?: number;
12
+ totalTokens?: number;
13
+ };
14
+ responseTime?: number;
15
+ toolsUsed?: string[];
16
+ toolExecutions?: Array<{
17
+ toolName: string;
18
+ executionTime: number;
19
+ success: boolean;
20
+ serverId?: string;
21
+ }>;
22
+ enhancedWithTools?: boolean;
23
+ availableTools?: Array<{
24
+ name: string;
25
+ description: string;
26
+ server: string;
27
+ category?: string;
28
+ }>;
29
+ analytics?: any;
30
+ evaluation?: any;
31
+ }
3
32
  /**
4
33
  * Supported AI Provider Names
5
34
  */
@@ -12,7 +41,8 @@ export declare enum AIProviderName {
12
41
  GOOGLE_AI = "google-ai",
13
42
  HUGGINGFACE = "huggingface",
14
43
  OLLAMA = "ollama",
15
- MISTRAL = "mistral"
44
+ MISTRAL = "mistral",
45
+ AUTO = "auto"
16
46
  }
17
47
  /**
18
48
  * Supported Models for Amazon Bedrock
@@ -72,29 +102,11 @@ export interface StreamingOptions {
72
102
  * Text generation options interface
73
103
  */
74
104
  export interface TextGenerationOptions {
75
- prompt: string;
76
- model?: string;
77
- temperature?: number;
78
- maxTokens?: number;
79
- systemPrompt?: string;
80
- schema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>;
81
- tools?: Record<string, Tool>;
82
- timeout?: number | string;
83
- enableEvaluation?: boolean;
84
- enableAnalytics?: boolean;
85
- context?: Record<string, any>;
86
- evaluationDomain?: string;
87
- toolUsageContext?: string;
88
- conversationHistory?: Array<{
89
- role: string;
90
- content: string;
91
- }>;
92
- }
93
- /**
94
- * Stream text options interface
95
- */
96
- export interface StreamTextOptions {
97
- prompt: string;
105
+ prompt?: string;
106
+ input?: {
107
+ text: string;
108
+ };
109
+ provider?: AIProviderName;
98
110
  model?: string;
99
111
  temperature?: number;
100
112
  maxTokens?: number;
@@ -102,6 +114,8 @@ export interface StreamTextOptions {
102
114
  schema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>;
103
115
  tools?: Record<string, Tool>;
104
116
  timeout?: number | string;
117
+ disableTools?: boolean;
118
+ maxSteps?: number;
105
119
  enableEvaluation?: boolean;
106
120
  enableAnalytics?: boolean;
107
121
  context?: Record<string, any>;
@@ -133,10 +147,13 @@ export interface AnalyticsData {
133
147
  * Updated to match Lighthouse's exact evaluation interface for consistency
134
148
  */
135
149
  export interface EvaluationData {
136
- relevanceScore: number;
137
- accuracyScore: number;
138
- completenessScore: number;
150
+ relevance: number;
151
+ accuracy: number;
152
+ completeness: number;
139
153
  overall: number;
154
+ domainAlignment?: number;
155
+ terminologyAccuracy?: number;
156
+ toolEffectiveness?: number;
140
157
  isOffTopic: boolean;
141
158
  alertSeverity: "low" | "medium" | "high" | "none";
142
159
  reasoning: string;
@@ -207,11 +224,7 @@ export interface ProviderModelConfig {
207
224
  /**
208
225
  * Enhanced result interfaces with optional analytics/evaluation
209
226
  */
210
- export interface EnhancedGenerateTextResult extends GenerateTextResult<ToolSet, unknown> {
211
- analytics?: AnalyticsData;
212
- evaluation?: EvaluationData;
213
- }
214
- export interface EnhancedStreamTextResult extends StreamTextResult<ToolSet, unknown> {
227
+ export interface EnhancedGenerateResult extends GenerateResult {
215
228
  analytics?: AnalyticsData;
216
229
  evaluation?: EvaluationData;
217
230
  }
@@ -240,26 +253,13 @@ export interface StreamingMetadata {
240
253
  modelUsed: string;
241
254
  }
242
255
  export type ProgressCallback = (progress: StreamingProgressData) => void;
243
- export interface EnhancedStreamTextOptions extends StreamTextOptions {
244
- enableProgressTracking?: boolean;
245
- progressCallback?: ProgressCallback;
246
- includeStreamingMetadata?: boolean;
247
- streamingBufferSize?: number;
248
- enableStreamingHeaders?: boolean;
249
- customStreamingConfig?: {
250
- chunkDelayMs?: number;
251
- maxConcurrentChunks?: number;
252
- compressionEnabled?: boolean;
253
- };
254
- }
255
256
  /**
256
257
  * AI Provider interface with flexible parameter support
257
258
  */
258
259
  export interface AIProvider {
259
- streamText(optionsOrPrompt: StreamTextOptions | string, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<EnhancedStreamTextResult | null>;
260
- generateText(optionsOrPrompt: TextGenerationOptions | string, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<EnhancedGenerateTextResult | null>;
261
- generate(optionsOrPrompt: TextGenerationOptions | string, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<EnhancedGenerateTextResult | null>;
262
- gen(optionsOrPrompt: TextGenerationOptions | string, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<EnhancedGenerateTextResult | null>;
260
+ stream(optionsOrPrompt: StreamOptions | string, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<StreamResult>;
261
+ generate(optionsOrPrompt: TextGenerationOptions | string, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<EnhancedGenerateResult | null>;
262
+ gen(optionsOrPrompt: TextGenerationOptions | string, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<EnhancedGenerateResult | null>;
263
263
  }
264
264
  /**
265
265
  * Provider attempt result for iteration tracking
@@ -12,6 +12,7 @@ export var AIProviderName;
12
12
  AIProviderName["HUGGINGFACE"] = "huggingface";
13
13
  AIProviderName["OLLAMA"] = "ollama";
14
14
  AIProviderName["MISTRAL"] = "mistral";
15
+ AIProviderName["AUTO"] = "auto";
15
16
  })(AIProviderName || (AIProviderName = {}));
16
17
  /**
17
18
  * Supported Models for Amazon Bedrock
@@ -0,0 +1,20 @@
1
+ import type { GenerateOptions, GenerateResult } from "../types/generate-types.js";
2
+ import type { TextGenerationOptions } from "../core/types.js";
3
+ /**
4
+ * Compatibility conversion factory for seamless migration
5
+ * between generateText and generate functions
6
+ */
7
+ export declare class CompatibilityConversionFactory {
8
+ /**
9
+ * Convert TextGenerationOptions to GenerateOptions
10
+ */
11
+ static convertTextToGenerate(options: TextGenerationOptions): GenerateOptions;
12
+ /**
13
+ * Convert GenerateResult to legacy TextGenerationResult format
14
+ */
15
+ static convertGenerateToText(result: GenerateResult): any;
16
+ /**
17
+ * Convert GenerateOptions to TextGenerationOptions
18
+ */
19
+ static convertGenerateToText_Options(options: GenerateOptions): TextGenerationOptions;
20
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Compatibility conversion factory for seamless migration
3
+ * between generateText and generate functions
4
+ */
5
+ export class CompatibilityConversionFactory {
6
+ /**
7
+ * Convert TextGenerationOptions to GenerateOptions
8
+ */
9
+ static convertTextToGenerate(options) {
10
+ const { prompt, ...rest } = options;
11
+ return {
12
+ input: { text: prompt || "" },
13
+ output: { format: "text" },
14
+ provider: rest.provider,
15
+ model: rest.model,
16
+ temperature: rest.temperature,
17
+ maxTokens: rest.maxTokens,
18
+ systemPrompt: rest.systemPrompt,
19
+ schema: rest.schema,
20
+ tools: rest.tools,
21
+ timeout: rest.timeout,
22
+ enableEvaluation: rest.enableEvaluation,
23
+ enableAnalytics: rest.enableAnalytics,
24
+ context: rest.context,
25
+ evaluationDomain: rest.evaluationDomain,
26
+ toolUsageContext: rest.toolUsageContext,
27
+ conversationHistory: rest.conversationHistory,
28
+ };
29
+ }
30
+ /**
31
+ * Convert GenerateResult to legacy TextGenerationResult format
32
+ */
33
+ static convertGenerateToText(result) {
34
+ return {
35
+ content: result.content,
36
+ provider: result.provider,
37
+ model: result.model,
38
+ usage: result.usage,
39
+ responseTime: result.responseTime,
40
+ toolsUsed: result.toolsUsed,
41
+ toolExecutions: result.toolExecutions,
42
+ enhancedWithTools: result.enhancedWithTools,
43
+ availableTools: result.availableTools,
44
+ analytics: result.analytics,
45
+ evaluation: result.evaluation,
46
+ };
47
+ }
48
+ /**
49
+ * Convert GenerateOptions to TextGenerationOptions
50
+ */
51
+ static convertGenerateToText_Options(options) {
52
+ return {
53
+ prompt: options.input.text,
54
+ model: options.model,
55
+ temperature: options.temperature,
56
+ maxTokens: options.maxTokens,
57
+ systemPrompt: options.systemPrompt,
58
+ schema: options.schema,
59
+ tools: options.tools,
60
+ timeout: options.timeout,
61
+ enableEvaluation: options.enableEvaluation,
62
+ enableAnalytics: options.enableAnalytics,
63
+ context: options.context,
64
+ evaluationDomain: options.evaluationDomain,
65
+ toolUsageContext: options.toolUsageContext,
66
+ conversationHistory: options.conversationHistory,
67
+ };
68
+ }
69
+ }