@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
@@ -1,519 +0,0 @@
1
- import { createVertex, } from "@ai-sdk/google-vertex";
2
- // Cache for anthropic module to avoid repeated imports
3
- let _createVertexAnthropic = null;
4
- let _anthropicImportAttempted = false;
5
- // Function to dynamically import anthropic support
6
- async function getCreateVertexAnthropic() {
7
- if (_anthropicImportAttempted) {
8
- return _createVertexAnthropic;
9
- }
10
- _anthropicImportAttempted = true;
11
- try {
12
- // Try to import the anthropic module - available in @ai-sdk/google-vertex ^2.2.0+
13
- const anthropicModule = await import("@ai-sdk/google-vertex/anthropic");
14
- _createVertexAnthropic = anthropicModule.createVertexAnthropic;
15
- logger.debug("[GoogleVertexAI] Anthropic module successfully loaded");
16
- return _createVertexAnthropic;
17
- }
18
- catch (error) {
19
- // Anthropic module not available
20
- logger.warn("[GoogleVertexAI] Anthropic module not available. Install @ai-sdk/google-vertex ^2.2.0 for Anthropic model support.");
21
- return null;
22
- }
23
- }
24
- import { streamText, generateText, Output, } from "ai";
25
- import { logger } from "../utils/logger.js";
26
- import { createTimeoutController, TimeoutError, getDefaultTimeout, } from "../utils/timeout.js";
27
- import { DEFAULT_MAX_TOKENS } from "../core/constants.js";
28
- import { createProxyFetch } from "../proxy/proxy-fetch.js";
29
- import { evaluateResponse } from "../core/evaluation.js";
30
- // Default system context
31
- const DEFAULT_SYSTEM_CONTEXT = {
32
- systemPrompt: "You are a helpful AI assistant.",
33
- };
34
- // Configuration helpers
35
- const getGCPVertexBreezeProjectId = () => {
36
- const projectId = process.env.GOOGLE_VERTEX_PROJECT;
37
- if (!projectId) {
38
- // 🔧 FIX: Enhanced error message with setup instructions
39
- throw new Error(`❌ VERTEX Provider Configuration Error
40
-
41
- Missing required environment variables: GOOGLE_VERTEX_PROJECT
42
-
43
- 🔧 Step 1: Get Credentials
44
- Set up Google Cloud project and download service account JSON
45
-
46
- 💡 Step 2: Add to your .env file (or export in CLI):
47
- GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json"
48
- GOOGLE_VERTEX_PROJECT="your-gcp-project-id"
49
- GOOGLE_VERTEX_LOCATION="us-central1"
50
- # Optional:
51
- VERTEX_MODEL="gemini-2.5-pro"
52
-
53
- 🚀 Step 3: Test the setup:
54
- npx neurolink generate "Hello" --provider vertex
55
-
56
- 📖 Full setup guide: https://docs.neurolink.ai/providers/vertex`);
57
- }
58
- return projectId;
59
- };
60
- const getGCPVertexBreezeLocation = () => {
61
- return process.env.GOOGLE_VERTEX_LOCATION || "us-east5";
62
- };
63
- const getGoogleApplicationCredentials = () => {
64
- return process.env.GOOGLE_APPLICATION_CREDENTIALS;
65
- };
66
- const getGoogleServiceAccountKey = () => {
67
- return process.env.GOOGLE_SERVICE_ACCOUNT_KEY;
68
- };
69
- const getGoogleClientEmail = () => {
70
- return process.env.GOOGLE_AUTH_CLIENT_EMAIL;
71
- };
72
- const getGooglePrivateKey = () => {
73
- return process.env.GOOGLE_AUTH_PRIVATE_KEY;
74
- };
75
- const getVertexModelId = () => {
76
- return process.env.VERTEX_MODEL_ID || "claude-sonnet-4@20250514";
77
- };
78
- const hasPrincipalAccountAuth = () => {
79
- return !!getGoogleApplicationCredentials();
80
- };
81
- const hasServiceAccountKeyAuth = () => {
82
- return !!getGoogleServiceAccountKey();
83
- };
84
- const hasServiceAccountEnvAuth = () => {
85
- return !!(getGoogleClientEmail() && getGooglePrivateKey());
86
- };
87
- const hasValidAuth = () => {
88
- return (hasPrincipalAccountAuth() ||
89
- hasServiceAccountKeyAuth() ||
90
- hasServiceAccountEnvAuth());
91
- };
92
- // Setup environment for Google authentication
93
- const setupGoogleAuth = async () => {
94
- const functionTag = "setupGoogleAuth";
95
- // Method 2: Service Account Key (JSON string) - Create temporary file
96
- if (hasServiceAccountKeyAuth() && !hasPrincipalAccountAuth()) {
97
- const serviceAccountKey = getGoogleServiceAccountKey();
98
- logger.debug(`[${functionTag}] Service account key auth (JSON string)`, {
99
- hasServiceAccountKey: !!serviceAccountKey,
100
- authMethod: "service_account_key",
101
- });
102
- try {
103
- // Parse to validate JSON
104
- JSON.parse(serviceAccountKey);
105
- // Write to temporary file and set environment variable using dynamic imports
106
- const { writeFileSync } = await import("fs");
107
- const { join } = await import("path");
108
- const { tmpdir } = await import("os");
109
- const tempFile = join(tmpdir(), `gcp-credentials-${Date.now()}.json`);
110
- writeFileSync(tempFile, serviceAccountKey);
111
- process.env.GOOGLE_APPLICATION_CREDENTIALS = tempFile;
112
- logger.debug(`[${functionTag}] Created temporary credentials file`, {
113
- tempFile: "[CREATED]",
114
- authMethod: "service_account_key_temp_file",
115
- });
116
- }
117
- catch (error) {
118
- logger.error(`[${functionTag}] Failed to parse service account key`, {
119
- error: error instanceof Error ? error.message : String(error),
120
- });
121
- throw new Error("Invalid GOOGLE_SERVICE_ACCOUNT_KEY format. Must be valid JSON.");
122
- }
123
- }
124
- // Method 3: Service Account Environment Variables - Set as individual env vars
125
- if (hasServiceAccountEnvAuth() &&
126
- !hasPrincipalAccountAuth() &&
127
- !hasServiceAccountKeyAuth()) {
128
- const clientEmail = getGoogleClientEmail();
129
- const privateKey = getGooglePrivateKey();
130
- logger.debug(`[${functionTag}] Service account env auth (separate variables)`, {
131
- hasClientEmail: !!clientEmail,
132
- hasPrivateKey: !!privateKey,
133
- authMethod: "service_account_env",
134
- });
135
- // Create service account object and write to temporary file
136
- const serviceAccount = {
137
- type: "service_account",
138
- project_id: getGCPVertexBreezeProjectId(),
139
- client_email: clientEmail,
140
- private_key: privateKey.replace(/\\n/g, "\n"),
141
- auth_uri: "https://accounts.google.com/o/oauth2/auth",
142
- token_uri: "https://oauth2.googleapis.com/token",
143
- };
144
- try {
145
- // Use dynamic imports for ESM compatibility
146
- const { writeFileSync } = await import("fs");
147
- const { join } = await import("path");
148
- const { tmpdir } = await import("os");
149
- const tempFile = join(tmpdir(), `gcp-credentials-env-${Date.now()}.json`);
150
- writeFileSync(tempFile, JSON.stringify(serviceAccount, null, 2));
151
- process.env.GOOGLE_APPLICATION_CREDENTIALS = tempFile;
152
- logger.debug(`[${functionTag}] Created temporary credentials file from env vars`, {
153
- tempFile: "[CREATED]",
154
- authMethod: "service_account_env_temp_file",
155
- });
156
- }
157
- catch (error) {
158
- logger.error(`[${functionTag}] Failed to create service account file from env vars`, {
159
- error: error instanceof Error ? error.message : String(error),
160
- });
161
- throw new Error("Failed to create temporary service account file from environment variables.");
162
- }
163
- }
164
- };
165
- // Vertex AI setup with multiple authentication support
166
- const createVertexSettings = async () => {
167
- const functionTag = "createVertexSettings";
168
- // Setup authentication first
169
- await setupGoogleAuth();
170
- const proxyFetch = createProxyFetch();
171
- const baseSettings = {
172
- project: getGCPVertexBreezeProjectId(),
173
- location: getGCPVertexBreezeLocation(),
174
- fetch: proxyFetch,
175
- };
176
- // Method 1: Principal Account Authentication (file path) - Recommended for production
177
- if (hasPrincipalAccountAuth()) {
178
- const credentialsPath = getGoogleApplicationCredentials();
179
- logger.debug(`[${functionTag}] Principal account auth (file path)`, {
180
- credentialsPath: credentialsPath ? "[PROVIDED]" : "[NOT_PROVIDED]",
181
- authMethod: "principal_account_file",
182
- });
183
- return baseSettings;
184
- }
185
- // Method 2 & 3: Other methods now set GOOGLE_APPLICATION_CREDENTIALS in setupGoogleAuth()
186
- if (hasServiceAccountKeyAuth() || hasServiceAccountEnvAuth()) {
187
- logger.debug(`[${functionTag}] Alternative auth method configured`, {
188
- authMethod: hasServiceAccountKeyAuth()
189
- ? "service_account_key"
190
- : "service_account_env",
191
- credentialsSet: !!process.env.GOOGLE_APPLICATION_CREDENTIALS,
192
- });
193
- return baseSettings;
194
- }
195
- // No valid authentication found
196
- logger.error(`[${functionTag}] No valid authentication method found`, {
197
- authMethod: "none",
198
- hasPrincipalAccount: hasPrincipalAccountAuth(),
199
- hasServiceAccountKey: hasServiceAccountKeyAuth(),
200
- hasServiceAccountEnv: hasServiceAccountEnvAuth(),
201
- availableMethods: [
202
- "GOOGLE_APPLICATION_CREDENTIALS (file path)",
203
- "GOOGLE_SERVICE_ACCOUNT_KEY (JSON string)",
204
- "GOOGLE_AUTH_CLIENT_EMAIL + GOOGLE_AUTH_PRIVATE_KEY (env vars)",
205
- ],
206
- });
207
- throw new Error("No valid Google Vertex AI authentication found. Please provide one of:\n" +
208
- "1. GOOGLE_APPLICATION_CREDENTIALS (path to service account file)\n" +
209
- "2. GOOGLE_SERVICE_ACCOUNT_KEY (JSON string of service account)\n" +
210
- "3. GOOGLE_AUTH_CLIENT_EMAIL + GOOGLE_AUTH_PRIVATE_KEY (environment variables)");
211
- };
212
- // Helper function to determine if a model is an Anthropic model
213
- const isAnthropicModel = (modelName) => {
214
- // Anthropic models in Vertex AI contain "claude" anywhere in the model name
215
- return modelName.toLowerCase().includes("claude");
216
- };
217
- // Lazy initialization cache
218
- let _vertex = null;
219
- async function getVertexInstance() {
220
- if (!_vertex) {
221
- const settings = await createVertexSettings();
222
- _vertex = createVertex(settings);
223
- }
224
- return _vertex;
225
- }
226
- // Google Vertex AI class with enhanced error handling and Anthropic model support
227
- export class GoogleVertexAI {
228
- modelName;
229
- /**
230
- * Initializes a new instance of GoogleVertexAI
231
- * @param modelName - Optional model name to override the default from config
232
- */
233
- constructor(modelName) {
234
- const functionTag = "GoogleVertexAI.constructor";
235
- this.modelName = modelName || getVertexModelId();
236
- try {
237
- logger.debug(`[${functionTag}] Initialization started`, {
238
- modelName: this.modelName,
239
- isAnthropic: isAnthropicModel(this.modelName),
240
- });
241
- const hasPrincipal = hasPrincipalAccountAuth();
242
- logger.debug(`[${functionTag}] Authentication validation`, {
243
- hasPrincipalAccountAuth: hasPrincipal,
244
- projectId: getGCPVertexBreezeProjectId() || "MISSING",
245
- location: getGCPVertexBreezeLocation() || "MISSING",
246
- });
247
- if (hasPrincipal) {
248
- logger.debug(`[${functionTag}] Auth method selected`, {
249
- authMethod: "principal_account",
250
- hasGoogleApplicationCredentials: !!getGoogleApplicationCredentials(),
251
- });
252
- }
253
- else {
254
- logger.warn(`[${functionTag}] Auth method missing`, {
255
- authMethod: "none",
256
- hasPrincipalAccountAuth: hasPrincipal,
257
- });
258
- }
259
- logger.debug(`[${functionTag}] Initialization completed`, {
260
- modelName: this.modelName,
261
- isAnthropic: isAnthropicModel(this.modelName),
262
- authMethod: hasPrincipalAccountAuth() ? "principal_account" : "none",
263
- success: true,
264
- });
265
- }
266
- catch (err) {
267
- logger.error(`[${functionTag}] Initialization failed`, {
268
- message: "Error in initializing Google Vertex AI",
269
- modelName: this.modelName,
270
- isAnthropic: isAnthropicModel(this.modelName),
271
- error: err instanceof Error ? err.message : String(err),
272
- stack: err instanceof Error ? err.stack : undefined,
273
- });
274
- }
275
- }
276
- /**
277
- * Gets the appropriate model instance (Google or Anthropic)
278
- * @private
279
- */
280
- async getModel() {
281
- if (isAnthropicModel(this.modelName)) {
282
- logger.debug("GoogleVertexAI.getModel - Anthropic model selected", {
283
- modelName: this.modelName,
284
- });
285
- const createVertexAnthropic = await getCreateVertexAnthropic();
286
- if (!createVertexAnthropic) {
287
- throw new Error(`Anthropic model "${this.modelName}" requested but @ai-sdk/google-vertex/anthropic is not available. ` +
288
- "Please install @ai-sdk/google-vertex ^2.2.0 or use a Google model instead.");
289
- }
290
- const settings = await createVertexSettings();
291
- const vertexAnthropic = createVertexAnthropic(settings);
292
- return vertexAnthropic(this.modelName);
293
- }
294
- const vertex = await getVertexInstance();
295
- return vertex(this.modelName);
296
- }
297
- /**
298
- * Processes text using streaming approach with enhanced error handling callbacks
299
- * @param prompt - The input text prompt to analyze
300
- * @param analysisSchema - Optional Zod schema or Schema object for output validation
301
- * @returns Promise resolving to StreamTextResult or null if operation fails
302
- */
303
- async streamText(optionsOrPrompt, analysisSchema) {
304
- const functionTag = "GoogleVertexAI.streamText";
305
- const provider = "vertex";
306
- let chunkCount = 0;
307
- try {
308
- // Parse parameters - support both string and options object
309
- const options = typeof optionsOrPrompt === "string"
310
- ? { prompt: optionsOrPrompt }
311
- : optionsOrPrompt;
312
- const { prompt, temperature = 0.7, maxTokens = DEFAULT_MAX_TOKENS, systemPrompt = DEFAULT_SYSTEM_CONTEXT.systemPrompt, schema, timeout = getDefaultTimeout(provider, "stream"), } = options;
313
- // Use schema from options or fallback parameter
314
- const finalSchema = schema || analysisSchema;
315
- logger.debug(`[${functionTag}] Stream request started`, {
316
- provider,
317
- modelName: this.modelName,
318
- isAnthropic: isAnthropicModel(this.modelName),
319
- promptLength: prompt.length,
320
- temperature,
321
- maxTokens,
322
- hasSchema: !!finalSchema,
323
- timeout,
324
- });
325
- const model = await this.getModel();
326
- // Create timeout controller if timeout is specified
327
- const timeoutController = createTimeoutController(timeout, provider, "stream");
328
- const streamOptions = {
329
- model: model,
330
- prompt: prompt,
331
- system: systemPrompt,
332
- temperature,
333
- maxTokens,
334
- // Add abort signal if available
335
- ...(timeoutController && {
336
- abortSignal: timeoutController.controller.signal,
337
- }),
338
- onError: (event) => {
339
- const error = event.error;
340
- const errorMessage = error instanceof Error ? error.message : String(error);
341
- const errorStack = error instanceof Error ? error.stack : undefined;
342
- logger.error(`[${functionTag}] Stream text error`, {
343
- provider,
344
- modelName: this.modelName,
345
- error: errorMessage,
346
- stack: errorStack,
347
- promptLength: prompt.length,
348
- chunkCount,
349
- });
350
- },
351
- onFinish: (event) => {
352
- logger.debug(`[${functionTag}] Stream text finished`, {
353
- provider,
354
- modelName: this.modelName,
355
- finishReason: event.finishReason,
356
- usage: event.usage,
357
- totalChunks: chunkCount,
358
- promptLength: prompt.length,
359
- responseLength: event.text?.length || 0,
360
- });
361
- },
362
- onChunk: (event) => {
363
- chunkCount++;
364
- logger.debug(`[${functionTag}] Stream text chunk`, {
365
- provider,
366
- modelName: this.modelName,
367
- chunkNumber: chunkCount,
368
- chunkLength: event.chunk.text?.length || 0,
369
- chunkType: event.chunk.type,
370
- });
371
- },
372
- };
373
- if (analysisSchema) {
374
- streamOptions.experimental_output = Output.object({
375
- schema: analysisSchema,
376
- });
377
- }
378
- const result = streamText(streamOptions);
379
- // For streaming, we can't clean up immediately, but the timeout will auto-clean
380
- // The user should handle the stream and any timeout errors
381
- return result;
382
- }
383
- catch (err) {
384
- // Log timeout errors specifically
385
- if (err instanceof TimeoutError) {
386
- logger.error(`[${functionTag}] Timeout error`, {
387
- provider,
388
- modelName: this.modelName,
389
- isAnthropic: isAnthropicModel(this.modelName),
390
- timeout: err.timeout,
391
- message: err.message,
392
- });
393
- }
394
- else {
395
- logger.error(`[${functionTag}] Exception`, {
396
- provider,
397
- modelName: this.modelName,
398
- message: "Error in streaming text",
399
- err: String(err),
400
- promptLength: prompt.length,
401
- });
402
- }
403
- throw err; // Re-throw error to trigger fallback
404
- }
405
- }
406
- /**
407
- * Processes text using non-streaming approach with optional schema validation
408
- * @param prompt - The input text prompt to analyze
409
- * @param analysisSchema - Optional Zod schema or Schema object for output validation
410
- * @returns Promise resolving to GenerateTextResult or null if operation fails
411
- */
412
- async generateText(optionsOrPrompt, analysisSchema) {
413
- const functionTag = "GoogleVertexAI.generateText";
414
- const provider = "vertex";
415
- const startTime = Date.now();
416
- try {
417
- // Parse parameters - support both string and options object
418
- const options = typeof optionsOrPrompt === "string"
419
- ? { prompt: optionsOrPrompt }
420
- : optionsOrPrompt;
421
- const { prompt, temperature = 0.7, maxTokens = DEFAULT_MAX_TOKENS, systemPrompt = DEFAULT_SYSTEM_CONTEXT.systemPrompt, schema, timeout = getDefaultTimeout(provider, "generate"), } = options;
422
- // Use schema from options or fallback parameter
423
- const finalSchema = schema || analysisSchema;
424
- logger.debug(`[${functionTag}] Generate request started`, {
425
- provider,
426
- modelName: this.modelName,
427
- isAnthropic: isAnthropicModel(this.modelName),
428
- promptLength: prompt.length,
429
- temperature,
430
- maxTokens,
431
- timeout,
432
- });
433
- const model = await this.getModel();
434
- // Create timeout controller if timeout is specified
435
- const timeoutController = createTimeoutController(timeout, provider, "generate");
436
- const generateOptions = {
437
- model: model,
438
- prompt: prompt,
439
- system: systemPrompt,
440
- temperature,
441
- maxTokens,
442
- // Add abort signal if available
443
- ...(timeoutController && {
444
- abortSignal: timeoutController.controller.signal,
445
- }),
446
- };
447
- if (finalSchema) {
448
- generateOptions.experimental_output = Output.object({
449
- schema: finalSchema,
450
- });
451
- }
452
- try {
453
- const result = await generateText(generateOptions);
454
- // Clean up timeout if successful
455
- timeoutController?.cleanup();
456
- logger.debug(`[${functionTag}] Generate text completed`, {
457
- provider,
458
- modelName: this.modelName,
459
- usage: result.usage,
460
- finishReason: result.finishReason,
461
- responseLength: result.text?.length || 0,
462
- timeout,
463
- });
464
- // Add analytics if enabled
465
- if (options.enableAnalytics) {
466
- result.analytics = {
467
- provider,
468
- model: this.modelName,
469
- tokens: result.usage,
470
- responseTime: Date.now() - startTime,
471
- context: options.context,
472
- };
473
- }
474
- // Add evaluation if enabled
475
- if (options.enableEvaluation) {
476
- result.evaluation = await evaluateResponse(prompt, result.text, options.context);
477
- }
478
- return result;
479
- }
480
- finally {
481
- // Always cleanup timeout
482
- timeoutController?.cleanup();
483
- }
484
- }
485
- catch (err) {
486
- // Log timeout errors specifically
487
- if (err instanceof TimeoutError) {
488
- logger.error(`[${functionTag}] Timeout error`, {
489
- provider,
490
- modelName: this.modelName,
491
- isAnthropic: isAnthropicModel(this.modelName),
492
- timeout: err.timeout,
493
- message: err.message,
494
- });
495
- }
496
- else {
497
- logger.error(`[${functionTag}] Exception`, {
498
- provider,
499
- modelName: this.modelName,
500
- message: "Error in generating text",
501
- err: String(err),
502
- });
503
- }
504
- throw err; // Re-throw error to trigger fallback
505
- }
506
- }
507
- /**
508
- * Alias for generateText() - CLI-SDK consistency
509
- */
510
- async generate(optionsOrPrompt, analysisSchema) {
511
- return this.generateText(optionsOrPrompt, analysisSchema);
512
- }
513
- /**
514
- * Short alias for generateText() - CLI-SDK consistency
515
- */
516
- async gen(optionsOrPrompt, analysisSchema) {
517
- return this.generateText(optionsOrPrompt, analysisSchema);
518
- }
519
- }
@@ -1,34 +0,0 @@
1
- import type { ZodType, ZodTypeDef } from "zod";
2
- import { type StreamTextResult, type ToolSet, type Schema, type GenerateTextResult } from "ai";
3
- import type { AIProvider, TextGenerationOptions, StreamTextOptions, EnhancedGenerateTextResult } from "../core/types.js";
4
- export declare class MistralAI implements AIProvider {
5
- private modelName;
6
- private client;
7
- /**
8
- * Initializes a new instance of MistralAI
9
- * @param modelName - Optional model name to override the default from config
10
- */
11
- constructor(modelName?: string | null);
12
- /**
13
- * Gets the appropriate model instance
14
- * @private
15
- */
16
- private getModel;
17
- /**
18
- * Processes text using streaming approach with enhanced error handling callbacks
19
- * @param prompt - The input text prompt to analyze
20
- * @param analysisSchema - Optional Zod schema or Schema object for output validation
21
- * @returns Promise resolving to StreamTextResult or null if operation fails
22
- */
23
- streamText(optionsOrPrompt: StreamTextOptions | string, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<StreamTextResult<ToolSet, unknown> | null>;
24
- /**
25
- * Processes text using non-streaming approach with optional schema validation
26
- * @param prompt - The input text prompt to analyze
27
- * @param analysisSchema - Optional Zod schema or Schema object for output validation
28
- * @returns Promise resolving to GenerateTextResult or null if operation fails
29
- */
30
- generateText(optionsOrPrompt: TextGenerationOptions | string, analysisSchema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>): Promise<GenerateTextResult<ToolSet, unknown> | null>;
31
- generate(optionsOrPrompt: TextGenerationOptions | string, analysisSchema?: any): Promise<EnhancedGenerateTextResult | null>;
32
- gen(optionsOrPrompt: TextGenerationOptions | string, analysisSchema?: any): Promise<EnhancedGenerateTextResult | null>;
33
- }
34
- export default MistralAI;