@juspay/neurolink 1.5.3 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +241 -1
- package/README.md +113 -20
- package/dist/agent/direct-tools.d.ts +1203 -0
- package/dist/agent/direct-tools.js +387 -0
- package/dist/cli/commands/agent-generate.d.ts +2 -0
- package/dist/cli/commands/agent-generate.js +70 -0
- package/dist/cli/commands/config.d.ts +76 -9
- package/dist/cli/commands/config.js +358 -233
- package/dist/cli/commands/mcp.d.ts +2 -1
- package/dist/cli/commands/mcp.js +874 -146
- package/dist/cli/commands/ollama.d.ts +8 -0
- package/dist/cli/commands/ollama.js +333 -0
- package/dist/cli/index.js +591 -327
- package/dist/cli/utils/complete-setup.d.ts +19 -0
- package/dist/cli/utils/complete-setup.js +81 -0
- package/dist/cli/utils/env-manager.d.ts +44 -0
- package/dist/cli/utils/env-manager.js +226 -0
- package/dist/cli/utils/interactive-setup.d.ts +48 -0
- package/dist/cli/utils/interactive-setup.js +302 -0
- package/dist/core/dynamic-models.d.ts +208 -0
- package/dist/core/dynamic-models.js +250 -0
- package/dist/core/factory.d.ts +13 -6
- package/dist/core/factory.js +180 -50
- package/dist/core/types.d.ts +8 -3
- package/dist/core/types.js +7 -4
- package/dist/index.d.ts +16 -16
- package/dist/index.js +16 -16
- package/dist/lib/agent/direct-tools.d.ts +1203 -0
- package/dist/lib/agent/direct-tools.js +387 -0
- package/dist/lib/core/dynamic-models.d.ts +208 -0
- package/dist/lib/core/dynamic-models.js +250 -0
- package/dist/lib/core/factory.d.ts +13 -6
- package/dist/lib/core/factory.js +180 -50
- package/dist/lib/core/types.d.ts +8 -3
- package/dist/lib/core/types.js +7 -4
- package/dist/lib/index.d.ts +16 -16
- package/dist/lib/index.js +16 -16
- package/dist/lib/mcp/auto-discovery.d.ts +120 -0
- package/dist/lib/mcp/auto-discovery.js +793 -0
- package/dist/lib/mcp/client.d.ts +66 -0
- package/dist/lib/mcp/client.js +245 -0
- package/dist/lib/mcp/config.d.ts +31 -0
- package/dist/lib/mcp/config.js +74 -0
- package/dist/lib/mcp/context-manager.d.ts +4 -4
- package/dist/lib/mcp/context-manager.js +24 -18
- package/dist/lib/mcp/factory.d.ts +28 -11
- package/dist/lib/mcp/factory.js +36 -29
- package/dist/lib/mcp/function-calling.d.ts +51 -0
- package/dist/lib/mcp/function-calling.js +510 -0
- package/dist/lib/mcp/index.d.ts +190 -0
- package/dist/lib/mcp/index.js +156 -0
- package/dist/lib/mcp/initialize-tools.d.ts +28 -0
- package/dist/lib/mcp/initialize-tools.js +209 -0
- package/dist/lib/mcp/initialize.d.ts +17 -0
- package/dist/lib/mcp/initialize.js +51 -0
- package/dist/lib/mcp/logging.d.ts +71 -0
- package/dist/lib/mcp/logging.js +183 -0
- package/dist/lib/mcp/manager.d.ts +67 -0
- package/dist/lib/mcp/manager.js +176 -0
- package/dist/lib/mcp/neurolink-mcp-client.d.ts +96 -0
- package/dist/lib/mcp/neurolink-mcp-client.js +417 -0
- package/dist/lib/mcp/orchestrator.d.ts +3 -3
- package/dist/lib/mcp/orchestrator.js +46 -43
- package/dist/lib/mcp/registry.d.ts +2 -2
- package/dist/lib/mcp/registry.js +42 -33
- package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -1
- package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +205 -66
- package/dist/lib/mcp/servers/ai-providers/ai-core-server.js +143 -99
- package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.d.ts +6 -6
- package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.js +404 -251
- package/dist/lib/mcp/servers/utilities/utility-server.d.ts +8 -0
- package/dist/lib/mcp/servers/utilities/utility-server.js +326 -0
- package/dist/lib/mcp/tool-integration.d.ts +67 -0
- package/dist/lib/mcp/tool-integration.js +179 -0
- package/dist/lib/mcp/unified-registry.d.ts +269 -0
- package/dist/lib/mcp/unified-registry.js +1411 -0
- package/dist/lib/neurolink.d.ts +68 -6
- package/dist/lib/neurolink.js +314 -42
- package/dist/lib/providers/agent-enhanced-provider.d.ts +59 -0
- package/dist/lib/providers/agent-enhanced-provider.js +242 -0
- package/dist/lib/providers/amazonBedrock.d.ts +3 -3
- package/dist/lib/providers/amazonBedrock.js +54 -50
- package/dist/lib/providers/anthropic.d.ts +2 -2
- package/dist/lib/providers/anthropic.js +92 -84
- package/dist/lib/providers/azureOpenAI.d.ts +2 -2
- package/dist/lib/providers/azureOpenAI.js +97 -86
- package/dist/lib/providers/function-calling-provider.d.ts +70 -0
- package/dist/lib/providers/function-calling-provider.js +359 -0
- package/dist/lib/providers/googleAIStudio.d.ts +10 -5
- package/dist/lib/providers/googleAIStudio.js +60 -38
- package/dist/lib/providers/googleVertexAI.d.ts +3 -3
- package/dist/lib/providers/googleVertexAI.js +96 -86
- package/dist/lib/providers/huggingFace.d.ts +31 -0
- package/dist/lib/providers/huggingFace.js +362 -0
- package/dist/lib/providers/index.d.ts +14 -8
- package/dist/lib/providers/index.js +18 -12
- package/dist/lib/providers/mcp-provider.d.ts +62 -0
- package/dist/lib/providers/mcp-provider.js +183 -0
- package/dist/lib/providers/mistralAI.d.ts +32 -0
- package/dist/lib/providers/mistralAI.js +223 -0
- package/dist/lib/providers/ollama.d.ts +51 -0
- package/dist/lib/providers/ollama.js +508 -0
- package/dist/lib/providers/openAI.d.ts +7 -3
- package/dist/lib/providers/openAI.js +45 -33
- package/dist/lib/utils/logger.js +2 -2
- package/dist/lib/utils/providerUtils.js +59 -22
- package/dist/mcp/auto-discovery.d.ts +120 -0
- package/dist/mcp/auto-discovery.js +794 -0
- package/dist/mcp/client.d.ts +66 -0
- package/dist/mcp/client.js +245 -0
- package/dist/mcp/config.d.ts +31 -0
- package/dist/mcp/config.js +74 -0
- package/dist/mcp/context-manager.d.ts +4 -4
- package/dist/mcp/context-manager.js +24 -18
- package/dist/mcp/factory.d.ts +28 -11
- package/dist/mcp/factory.js +36 -29
- package/dist/mcp/function-calling.d.ts +51 -0
- package/dist/mcp/function-calling.js +510 -0
- package/dist/mcp/index.d.ts +190 -0
- package/dist/mcp/index.js +156 -0
- package/dist/mcp/initialize-tools.d.ts +28 -0
- package/dist/mcp/initialize-tools.js +210 -0
- package/dist/mcp/initialize.d.ts +17 -0
- package/dist/mcp/initialize.js +51 -0
- package/dist/mcp/logging.d.ts +71 -0
- package/dist/mcp/logging.js +183 -0
- package/dist/mcp/manager.d.ts +67 -0
- package/dist/mcp/manager.js +176 -0
- package/dist/mcp/neurolink-mcp-client.d.ts +96 -0
- package/dist/mcp/neurolink-mcp-client.js +417 -0
- package/dist/mcp/orchestrator.d.ts +3 -3
- package/dist/mcp/orchestrator.js +46 -43
- package/dist/mcp/registry.d.ts +2 -2
- package/dist/mcp/registry.js +42 -33
- package/dist/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -1
- package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +205 -66
- package/dist/mcp/servers/ai-providers/ai-core-server.js +143 -99
- package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +6 -6
- package/dist/mcp/servers/ai-providers/ai-workflow-tools.js +404 -253
- package/dist/mcp/servers/utilities/utility-server.d.ts +8 -0
- package/dist/mcp/servers/utilities/utility-server.js +326 -0
- package/dist/mcp/tool-integration.d.ts +67 -0
- package/dist/mcp/tool-integration.js +179 -0
- package/dist/mcp/unified-registry.d.ts +269 -0
- package/dist/mcp/unified-registry.js +1411 -0
- package/dist/neurolink.d.ts +68 -6
- package/dist/neurolink.js +314 -42
- package/dist/providers/agent-enhanced-provider.d.ts +59 -0
- package/dist/providers/agent-enhanced-provider.js +242 -0
- package/dist/providers/amazonBedrock.d.ts +3 -3
- package/dist/providers/amazonBedrock.js +54 -50
- package/dist/providers/anthropic.d.ts +2 -2
- package/dist/providers/anthropic.js +92 -84
- package/dist/providers/azureOpenAI.d.ts +2 -2
- package/dist/providers/azureOpenAI.js +97 -86
- package/dist/providers/function-calling-provider.d.ts +70 -0
- package/dist/providers/function-calling-provider.js +359 -0
- package/dist/providers/googleAIStudio.d.ts +10 -5
- package/dist/providers/googleAIStudio.js +60 -38
- package/dist/providers/googleVertexAI.d.ts +3 -3
- package/dist/providers/googleVertexAI.js +96 -86
- package/dist/providers/huggingFace.d.ts +31 -0
- package/dist/providers/huggingFace.js +362 -0
- package/dist/providers/index.d.ts +14 -8
- package/dist/providers/index.js +18 -12
- package/dist/providers/mcp-provider.d.ts +62 -0
- package/dist/providers/mcp-provider.js +183 -0
- package/dist/providers/mistralAI.d.ts +32 -0
- package/dist/providers/mistralAI.js +223 -0
- package/dist/providers/ollama.d.ts +51 -0
- package/dist/providers/ollama.js +508 -0
- package/dist/providers/openAI.d.ts +7 -3
- package/dist/providers/openAI.js +45 -33
- package/dist/utils/logger.js +2 -2
- package/dist/utils/providerUtils.js +59 -22
- package/package.json +28 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createVertex } from
|
|
1
|
+
import { createVertex, } from "@ai-sdk/google-vertex";
|
|
2
2
|
// Cache for anthropic module to avoid repeated imports
|
|
3
3
|
let _createVertexAnthropic = null;
|
|
4
4
|
let _anthropicImportAttempted = false;
|
|
@@ -10,33 +10,33 @@ async function getCreateVertexAnthropic() {
|
|
|
10
10
|
_anthropicImportAttempted = true;
|
|
11
11
|
try {
|
|
12
12
|
// Try to import the anthropic module - available in @ai-sdk/google-vertex ^2.2.0+
|
|
13
|
-
const anthropicModule = await import(
|
|
13
|
+
const anthropicModule = await import("@ai-sdk/google-vertex/anthropic");
|
|
14
14
|
_createVertexAnthropic = anthropicModule.createVertexAnthropic;
|
|
15
|
-
logger.debug(
|
|
15
|
+
logger.debug("[GoogleVertexAI] Anthropic module successfully loaded");
|
|
16
16
|
return _createVertexAnthropic;
|
|
17
17
|
}
|
|
18
18
|
catch (error) {
|
|
19
19
|
// Anthropic module not available
|
|
20
|
-
logger.warn(
|
|
20
|
+
logger.warn("[GoogleVertexAI] Anthropic module not available. Install @ai-sdk/google-vertex ^2.2.0 for Anthropic model support.");
|
|
21
21
|
return null;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
import { streamText, generateText, Output } from
|
|
25
|
-
import { logger } from
|
|
24
|
+
import { streamText, generateText, Output, } from "ai";
|
|
25
|
+
import { logger } from "../utils/logger.js";
|
|
26
26
|
// Default system context
|
|
27
27
|
const DEFAULT_SYSTEM_CONTEXT = {
|
|
28
|
-
systemPrompt:
|
|
28
|
+
systemPrompt: "You are a helpful AI assistant.",
|
|
29
29
|
};
|
|
30
30
|
// Configuration helpers
|
|
31
31
|
const getGCPVertexBreezeProjectId = () => {
|
|
32
32
|
const projectId = process.env.GOOGLE_VERTEX_PROJECT;
|
|
33
33
|
if (!projectId) {
|
|
34
|
-
throw new Error(
|
|
34
|
+
throw new Error("GOOGLE_VERTEX_PROJECT environment variable is not set");
|
|
35
35
|
}
|
|
36
36
|
return projectId;
|
|
37
37
|
};
|
|
38
38
|
const getGCPVertexBreezeLocation = () => {
|
|
39
|
-
return process.env.GOOGLE_VERTEX_LOCATION ||
|
|
39
|
+
return process.env.GOOGLE_VERTEX_LOCATION || "us-east5";
|
|
40
40
|
};
|
|
41
41
|
const getGoogleApplicationCredentials = () => {
|
|
42
42
|
return process.env.GOOGLE_APPLICATION_CREDENTIALS;
|
|
@@ -51,7 +51,7 @@ const getGooglePrivateKey = () => {
|
|
|
51
51
|
return process.env.GOOGLE_AUTH_PRIVATE_KEY;
|
|
52
52
|
};
|
|
53
53
|
const getVertexModelId = () => {
|
|
54
|
-
return process.env.VERTEX_MODEL_ID ||
|
|
54
|
+
return process.env.VERTEX_MODEL_ID || "claude-sonnet-4@20250514";
|
|
55
55
|
};
|
|
56
56
|
const hasPrincipalAccountAuth = () => {
|
|
57
57
|
return !!getGoogleApplicationCredentials();
|
|
@@ -63,126 +63,132 @@ const hasServiceAccountEnvAuth = () => {
|
|
|
63
63
|
return !!(getGoogleClientEmail() && getGooglePrivateKey());
|
|
64
64
|
};
|
|
65
65
|
const hasValidAuth = () => {
|
|
66
|
-
return hasPrincipalAccountAuth() ||
|
|
66
|
+
return (hasPrincipalAccountAuth() ||
|
|
67
|
+
hasServiceAccountKeyAuth() ||
|
|
68
|
+
hasServiceAccountEnvAuth());
|
|
67
69
|
};
|
|
68
70
|
// Setup environment for Google authentication
|
|
69
71
|
const setupGoogleAuth = async () => {
|
|
70
|
-
const functionTag =
|
|
72
|
+
const functionTag = "setupGoogleAuth";
|
|
71
73
|
// Method 2: Service Account Key (JSON string) - Create temporary file
|
|
72
74
|
if (hasServiceAccountKeyAuth() && !hasPrincipalAccountAuth()) {
|
|
73
75
|
const serviceAccountKey = getGoogleServiceAccountKey();
|
|
74
76
|
logger.debug(`[${functionTag}] Service account key auth (JSON string)`, {
|
|
75
77
|
hasServiceAccountKey: !!serviceAccountKey,
|
|
76
|
-
authMethod:
|
|
78
|
+
authMethod: "service_account_key",
|
|
77
79
|
});
|
|
78
80
|
try {
|
|
79
81
|
// Parse to validate JSON
|
|
80
82
|
JSON.parse(serviceAccountKey);
|
|
81
83
|
// Write to temporary file and set environment variable using dynamic imports
|
|
82
|
-
const { writeFileSync } = await import(
|
|
83
|
-
const { join } = await import(
|
|
84
|
-
const { tmpdir } = await import(
|
|
84
|
+
const { writeFileSync } = await import("fs");
|
|
85
|
+
const { join } = await import("path");
|
|
86
|
+
const { tmpdir } = await import("os");
|
|
85
87
|
const tempFile = join(tmpdir(), `gcp-credentials-${Date.now()}.json`);
|
|
86
88
|
writeFileSync(tempFile, serviceAccountKey);
|
|
87
89
|
process.env.GOOGLE_APPLICATION_CREDENTIALS = tempFile;
|
|
88
90
|
logger.debug(`[${functionTag}] Created temporary credentials file`, {
|
|
89
|
-
tempFile:
|
|
90
|
-
authMethod:
|
|
91
|
+
tempFile: "[CREATED]",
|
|
92
|
+
authMethod: "service_account_key_temp_file",
|
|
91
93
|
});
|
|
92
94
|
}
|
|
93
95
|
catch (error) {
|
|
94
96
|
logger.error(`[${functionTag}] Failed to parse service account key`, {
|
|
95
|
-
error: error instanceof Error ? error.message : String(error)
|
|
97
|
+
error: error instanceof Error ? error.message : String(error),
|
|
96
98
|
});
|
|
97
|
-
throw new Error(
|
|
99
|
+
throw new Error("Invalid GOOGLE_SERVICE_ACCOUNT_KEY format. Must be valid JSON.");
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
102
|
// Method 3: Service Account Environment Variables - Set as individual env vars
|
|
101
|
-
if (hasServiceAccountEnvAuth() &&
|
|
103
|
+
if (hasServiceAccountEnvAuth() &&
|
|
104
|
+
!hasPrincipalAccountAuth() &&
|
|
105
|
+
!hasServiceAccountKeyAuth()) {
|
|
102
106
|
const clientEmail = getGoogleClientEmail();
|
|
103
107
|
const privateKey = getGooglePrivateKey();
|
|
104
108
|
logger.debug(`[${functionTag}] Service account env auth (separate variables)`, {
|
|
105
109
|
hasClientEmail: !!clientEmail,
|
|
106
110
|
hasPrivateKey: !!privateKey,
|
|
107
|
-
authMethod:
|
|
111
|
+
authMethod: "service_account_env",
|
|
108
112
|
});
|
|
109
113
|
// Create service account object and write to temporary file
|
|
110
114
|
const serviceAccount = {
|
|
111
|
-
type:
|
|
115
|
+
type: "service_account",
|
|
112
116
|
project_id: getGCPVertexBreezeProjectId(),
|
|
113
117
|
client_email: clientEmail,
|
|
114
|
-
private_key: privateKey.replace(/\\n/g,
|
|
115
|
-
auth_uri:
|
|
116
|
-
token_uri:
|
|
118
|
+
private_key: privateKey.replace(/\\n/g, "\n"),
|
|
119
|
+
auth_uri: "https://accounts.google.com/o/oauth2/auth",
|
|
120
|
+
token_uri: "https://oauth2.googleapis.com/token",
|
|
117
121
|
};
|
|
118
122
|
try {
|
|
119
123
|
// Use dynamic imports for ESM compatibility
|
|
120
|
-
const { writeFileSync } = await import(
|
|
121
|
-
const { join } = await import(
|
|
122
|
-
const { tmpdir } = await import(
|
|
124
|
+
const { writeFileSync } = await import("fs");
|
|
125
|
+
const { join } = await import("path");
|
|
126
|
+
const { tmpdir } = await import("os");
|
|
123
127
|
const tempFile = join(tmpdir(), `gcp-credentials-env-${Date.now()}.json`);
|
|
124
128
|
writeFileSync(tempFile, JSON.stringify(serviceAccount, null, 2));
|
|
125
129
|
process.env.GOOGLE_APPLICATION_CREDENTIALS = tempFile;
|
|
126
130
|
logger.debug(`[${functionTag}] Created temporary credentials file from env vars`, {
|
|
127
|
-
tempFile:
|
|
128
|
-
authMethod:
|
|
131
|
+
tempFile: "[CREATED]",
|
|
132
|
+
authMethod: "service_account_env_temp_file",
|
|
129
133
|
});
|
|
130
134
|
}
|
|
131
135
|
catch (error) {
|
|
132
136
|
logger.error(`[${functionTag}] Failed to create service account file from env vars`, {
|
|
133
|
-
error: error instanceof Error ? error.message : String(error)
|
|
137
|
+
error: error instanceof Error ? error.message : String(error),
|
|
134
138
|
});
|
|
135
|
-
throw new Error(
|
|
139
|
+
throw new Error("Failed to create temporary service account file from environment variables.");
|
|
136
140
|
}
|
|
137
141
|
}
|
|
138
142
|
};
|
|
139
143
|
// Vertex AI setup with multiple authentication support
|
|
140
144
|
const createVertexSettings = async () => {
|
|
141
|
-
const functionTag =
|
|
145
|
+
const functionTag = "createVertexSettings";
|
|
142
146
|
// Setup authentication first
|
|
143
147
|
await setupGoogleAuth();
|
|
144
148
|
const baseSettings = {
|
|
145
149
|
project: getGCPVertexBreezeProjectId(),
|
|
146
|
-
location: getGCPVertexBreezeLocation()
|
|
150
|
+
location: getGCPVertexBreezeLocation(),
|
|
147
151
|
};
|
|
148
152
|
// Method 1: Principal Account Authentication (file path) - Recommended for production
|
|
149
153
|
if (hasPrincipalAccountAuth()) {
|
|
150
154
|
const credentialsPath = getGoogleApplicationCredentials();
|
|
151
155
|
logger.debug(`[${functionTag}] Principal account auth (file path)`, {
|
|
152
|
-
credentialsPath: credentialsPath ?
|
|
153
|
-
authMethod:
|
|
156
|
+
credentialsPath: credentialsPath ? "[PROVIDED]" : "[NOT_PROVIDED]",
|
|
157
|
+
authMethod: "principal_account_file",
|
|
154
158
|
});
|
|
155
159
|
return baseSettings;
|
|
156
160
|
}
|
|
157
161
|
// Method 2 & 3: Other methods now set GOOGLE_APPLICATION_CREDENTIALS in setupGoogleAuth()
|
|
158
162
|
if (hasServiceAccountKeyAuth() || hasServiceAccountEnvAuth()) {
|
|
159
163
|
logger.debug(`[${functionTag}] Alternative auth method configured`, {
|
|
160
|
-
authMethod: hasServiceAccountKeyAuth()
|
|
161
|
-
|
|
164
|
+
authMethod: hasServiceAccountKeyAuth()
|
|
165
|
+
? "service_account_key"
|
|
166
|
+
: "service_account_env",
|
|
167
|
+
credentialsSet: !!process.env.GOOGLE_APPLICATION_CREDENTIALS,
|
|
162
168
|
});
|
|
163
169
|
return baseSettings;
|
|
164
170
|
}
|
|
165
171
|
// No valid authentication found
|
|
166
172
|
logger.error(`[${functionTag}] No valid authentication method found`, {
|
|
167
|
-
authMethod:
|
|
173
|
+
authMethod: "none",
|
|
168
174
|
hasPrincipalAccount: hasPrincipalAccountAuth(),
|
|
169
175
|
hasServiceAccountKey: hasServiceAccountKeyAuth(),
|
|
170
176
|
hasServiceAccountEnv: hasServiceAccountEnvAuth(),
|
|
171
177
|
availableMethods: [
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
]
|
|
178
|
+
"GOOGLE_APPLICATION_CREDENTIALS (file path)",
|
|
179
|
+
"GOOGLE_SERVICE_ACCOUNT_KEY (JSON string)",
|
|
180
|
+
"GOOGLE_AUTH_CLIENT_EMAIL + GOOGLE_AUTH_PRIVATE_KEY (env vars)",
|
|
181
|
+
],
|
|
176
182
|
});
|
|
177
|
-
throw new Error(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
183
|
+
throw new Error("No valid Google Vertex AI authentication found. Please provide one of:\n" +
|
|
184
|
+
"1. GOOGLE_APPLICATION_CREDENTIALS (path to service account file)\n" +
|
|
185
|
+
"2. GOOGLE_SERVICE_ACCOUNT_KEY (JSON string of service account)\n" +
|
|
186
|
+
"3. GOOGLE_AUTH_CLIENT_EMAIL + GOOGLE_AUTH_PRIVATE_KEY (environment variables)");
|
|
181
187
|
};
|
|
182
188
|
// Helper function to determine if a model is an Anthropic model
|
|
183
189
|
const isAnthropicModel = (modelName) => {
|
|
184
190
|
// Anthropic models in Vertex AI contain "claude" anywhere in the model name
|
|
185
|
-
return modelName.toLowerCase().includes(
|
|
191
|
+
return modelName.toLowerCase().includes("claude");
|
|
186
192
|
};
|
|
187
193
|
// Lazy initialization cache
|
|
188
194
|
let _vertex = null;
|
|
@@ -201,45 +207,45 @@ export class GoogleVertexAI {
|
|
|
201
207
|
* @param modelName - Optional model name to override the default from config
|
|
202
208
|
*/
|
|
203
209
|
constructor(modelName) {
|
|
204
|
-
const functionTag =
|
|
210
|
+
const functionTag = "GoogleVertexAI.constructor";
|
|
205
211
|
this.modelName = modelName || getVertexModelId();
|
|
206
212
|
try {
|
|
207
213
|
logger.debug(`[${functionTag}] Initialization started`, {
|
|
208
214
|
modelName: this.modelName,
|
|
209
|
-
isAnthropic: isAnthropicModel(this.modelName)
|
|
215
|
+
isAnthropic: isAnthropicModel(this.modelName),
|
|
210
216
|
});
|
|
211
217
|
const hasPrincipal = hasPrincipalAccountAuth();
|
|
212
218
|
logger.debug(`[${functionTag}] Authentication validation`, {
|
|
213
219
|
hasPrincipalAccountAuth: hasPrincipal,
|
|
214
|
-
projectId: getGCPVertexBreezeProjectId() ||
|
|
215
|
-
location: getGCPVertexBreezeLocation() ||
|
|
220
|
+
projectId: getGCPVertexBreezeProjectId() || "MISSING",
|
|
221
|
+
location: getGCPVertexBreezeLocation() || "MISSING",
|
|
216
222
|
});
|
|
217
223
|
if (hasPrincipal) {
|
|
218
224
|
logger.debug(`[${functionTag}] Auth method selected`, {
|
|
219
|
-
authMethod:
|
|
220
|
-
hasGoogleApplicationCredentials: !!getGoogleApplicationCredentials()
|
|
225
|
+
authMethod: "principal_account",
|
|
226
|
+
hasGoogleApplicationCredentials: !!getGoogleApplicationCredentials(),
|
|
221
227
|
});
|
|
222
228
|
}
|
|
223
229
|
else {
|
|
224
230
|
logger.warn(`[${functionTag}] Auth method missing`, {
|
|
225
|
-
authMethod:
|
|
226
|
-
hasPrincipalAccountAuth: hasPrincipal
|
|
231
|
+
authMethod: "none",
|
|
232
|
+
hasPrincipalAccountAuth: hasPrincipal,
|
|
227
233
|
});
|
|
228
234
|
}
|
|
229
235
|
logger.debug(`[${functionTag}] Initialization completed`, {
|
|
230
236
|
modelName: this.modelName,
|
|
231
237
|
isAnthropic: isAnthropicModel(this.modelName),
|
|
232
|
-
authMethod: hasPrincipalAccountAuth() ?
|
|
233
|
-
success: true
|
|
238
|
+
authMethod: hasPrincipalAccountAuth() ? "principal_account" : "none",
|
|
239
|
+
success: true,
|
|
234
240
|
});
|
|
235
241
|
}
|
|
236
242
|
catch (err) {
|
|
237
243
|
logger.error(`[${functionTag}] Initialization failed`, {
|
|
238
|
-
message:
|
|
244
|
+
message: "Error in initializing Google Vertex AI",
|
|
239
245
|
modelName: this.modelName,
|
|
240
246
|
isAnthropic: isAnthropicModel(this.modelName),
|
|
241
247
|
error: err instanceof Error ? err.message : String(err),
|
|
242
|
-
stack: err instanceof Error ? err.stack : undefined
|
|
248
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
243
249
|
});
|
|
244
250
|
}
|
|
245
251
|
}
|
|
@@ -249,13 +255,13 @@ export class GoogleVertexAI {
|
|
|
249
255
|
*/
|
|
250
256
|
async getModel() {
|
|
251
257
|
if (isAnthropicModel(this.modelName)) {
|
|
252
|
-
logger.debug(
|
|
253
|
-
modelName: this.modelName
|
|
258
|
+
logger.debug("GoogleVertexAI.getModel - Anthropic model selected", {
|
|
259
|
+
modelName: this.modelName,
|
|
254
260
|
});
|
|
255
261
|
const createVertexAnthropic = await getCreateVertexAnthropic();
|
|
256
262
|
if (!createVertexAnthropic) {
|
|
257
263
|
throw new Error(`Anthropic model "${this.modelName}" requested but @ai-sdk/google-vertex/anthropic is not available. ` +
|
|
258
|
-
|
|
264
|
+
"Please install @ai-sdk/google-vertex ^2.2.0 or use a Google model instead.");
|
|
259
265
|
}
|
|
260
266
|
const settings = await createVertexSettings();
|
|
261
267
|
const vertexAnthropic = createVertexAnthropic(settings);
|
|
@@ -271,15 +277,15 @@ export class GoogleVertexAI {
|
|
|
271
277
|
* @returns Promise resolving to StreamTextResult or null if operation fails
|
|
272
278
|
*/
|
|
273
279
|
async streamText(optionsOrPrompt, analysisSchema) {
|
|
274
|
-
const functionTag =
|
|
275
|
-
const provider =
|
|
280
|
+
const functionTag = "GoogleVertexAI.streamText";
|
|
281
|
+
const provider = "vertex";
|
|
276
282
|
let chunkCount = 0;
|
|
277
283
|
try {
|
|
278
284
|
// Parse parameters - support both string and options object
|
|
279
|
-
const options = typeof optionsOrPrompt ===
|
|
285
|
+
const options = typeof optionsOrPrompt === "string"
|
|
280
286
|
? { prompt: optionsOrPrompt }
|
|
281
287
|
: optionsOrPrompt;
|
|
282
|
-
const { prompt, temperature = 0.7, maxTokens = 500, systemPrompt = DEFAULT_SYSTEM_CONTEXT.systemPrompt, schema } = options;
|
|
288
|
+
const { prompt, temperature = 0.7, maxTokens = 500, systemPrompt = DEFAULT_SYSTEM_CONTEXT.systemPrompt, schema, } = options;
|
|
283
289
|
// Use schema from options or fallback parameter
|
|
284
290
|
const finalSchema = schema || analysisSchema;
|
|
285
291
|
logger.debug(`[${functionTag}] Stream request started`, {
|
|
@@ -289,7 +295,7 @@ export class GoogleVertexAI {
|
|
|
289
295
|
promptLength: prompt.length,
|
|
290
296
|
temperature,
|
|
291
297
|
maxTokens,
|
|
292
|
-
hasSchema: !!finalSchema
|
|
298
|
+
hasSchema: !!finalSchema,
|
|
293
299
|
});
|
|
294
300
|
const model = await this.getModel();
|
|
295
301
|
const streamOptions = {
|
|
@@ -308,7 +314,7 @@ export class GoogleVertexAI {
|
|
|
308
314
|
error: errorMessage,
|
|
309
315
|
stack: errorStack,
|
|
310
316
|
promptLength: prompt.length,
|
|
311
|
-
chunkCount
|
|
317
|
+
chunkCount,
|
|
312
318
|
});
|
|
313
319
|
},
|
|
314
320
|
onFinish: (event) => {
|
|
@@ -319,7 +325,7 @@ export class GoogleVertexAI {
|
|
|
319
325
|
usage: event.usage,
|
|
320
326
|
totalChunks: chunkCount,
|
|
321
327
|
promptLength: prompt.length,
|
|
322
|
-
responseLength: event.text?.length || 0
|
|
328
|
+
responseLength: event.text?.length || 0,
|
|
323
329
|
});
|
|
324
330
|
},
|
|
325
331
|
onChunk: (event) => {
|
|
@@ -329,12 +335,14 @@ export class GoogleVertexAI {
|
|
|
329
335
|
modelName: this.modelName,
|
|
330
336
|
chunkNumber: chunkCount,
|
|
331
337
|
chunkLength: event.chunk.text?.length || 0,
|
|
332
|
-
chunkType: event.chunk.type
|
|
338
|
+
chunkType: event.chunk.type,
|
|
333
339
|
});
|
|
334
|
-
}
|
|
340
|
+
},
|
|
335
341
|
};
|
|
336
342
|
if (analysisSchema) {
|
|
337
|
-
streamOptions.experimental_output = Output.object({
|
|
343
|
+
streamOptions.experimental_output = Output.object({
|
|
344
|
+
schema: analysisSchema,
|
|
345
|
+
});
|
|
338
346
|
}
|
|
339
347
|
const result = streamText(streamOptions);
|
|
340
348
|
return result;
|
|
@@ -343,9 +351,9 @@ export class GoogleVertexAI {
|
|
|
343
351
|
logger.error(`[${functionTag}] Exception`, {
|
|
344
352
|
provider,
|
|
345
353
|
modelName: this.modelName,
|
|
346
|
-
message:
|
|
354
|
+
message: "Error in streaming text",
|
|
347
355
|
err: String(err),
|
|
348
|
-
promptLength: prompt.length
|
|
356
|
+
promptLength: prompt.length,
|
|
349
357
|
});
|
|
350
358
|
throw err; // Re-throw error to trigger fallback
|
|
351
359
|
}
|
|
@@ -357,14 +365,14 @@ export class GoogleVertexAI {
|
|
|
357
365
|
* @returns Promise resolving to GenerateTextResult or null if operation fails
|
|
358
366
|
*/
|
|
359
367
|
async generateText(optionsOrPrompt, analysisSchema) {
|
|
360
|
-
const functionTag =
|
|
361
|
-
const provider =
|
|
368
|
+
const functionTag = "GoogleVertexAI.generateText";
|
|
369
|
+
const provider = "vertex";
|
|
362
370
|
try {
|
|
363
371
|
// Parse parameters - support both string and options object
|
|
364
|
-
const options = typeof optionsOrPrompt ===
|
|
372
|
+
const options = typeof optionsOrPrompt === "string"
|
|
365
373
|
? { prompt: optionsOrPrompt }
|
|
366
374
|
: optionsOrPrompt;
|
|
367
|
-
const { prompt, temperature = 0.7, maxTokens = 500, systemPrompt = DEFAULT_SYSTEM_CONTEXT.systemPrompt, schema } = options;
|
|
375
|
+
const { prompt, temperature = 0.7, maxTokens = 500, systemPrompt = DEFAULT_SYSTEM_CONTEXT.systemPrompt, schema, } = options;
|
|
368
376
|
// Use schema from options or fallback parameter
|
|
369
377
|
const finalSchema = schema || analysisSchema;
|
|
370
378
|
logger.debug(`[${functionTag}] Generate request started`, {
|
|
@@ -373,7 +381,7 @@ export class GoogleVertexAI {
|
|
|
373
381
|
isAnthropic: isAnthropicModel(this.modelName),
|
|
374
382
|
promptLength: prompt.length,
|
|
375
383
|
temperature,
|
|
376
|
-
maxTokens
|
|
384
|
+
maxTokens,
|
|
377
385
|
});
|
|
378
386
|
const model = await this.getModel();
|
|
379
387
|
const generateOptions = {
|
|
@@ -381,10 +389,12 @@ export class GoogleVertexAI {
|
|
|
381
389
|
prompt: prompt,
|
|
382
390
|
system: systemPrompt,
|
|
383
391
|
temperature,
|
|
384
|
-
maxTokens
|
|
392
|
+
maxTokens,
|
|
385
393
|
};
|
|
386
394
|
if (finalSchema) {
|
|
387
|
-
generateOptions.experimental_output = Output.object({
|
|
395
|
+
generateOptions.experimental_output = Output.object({
|
|
396
|
+
schema: finalSchema,
|
|
397
|
+
});
|
|
388
398
|
}
|
|
389
399
|
const result = await generateText(generateOptions);
|
|
390
400
|
logger.debug(`[${functionTag}] Generate text completed`, {
|
|
@@ -392,7 +402,7 @@ export class GoogleVertexAI {
|
|
|
392
402
|
modelName: this.modelName,
|
|
393
403
|
usage: result.usage,
|
|
394
404
|
finishReason: result.finishReason,
|
|
395
|
-
responseLength: result.text?.length || 0
|
|
405
|
+
responseLength: result.text?.length || 0,
|
|
396
406
|
});
|
|
397
407
|
return result;
|
|
398
408
|
}
|
|
@@ -400,8 +410,8 @@ export class GoogleVertexAI {
|
|
|
400
410
|
logger.error(`[${functionTag}] Exception`, {
|
|
401
411
|
provider,
|
|
402
412
|
modelName: this.modelName,
|
|
403
|
-
message:
|
|
404
|
-
err: String(err)
|
|
413
|
+
message: "Error in generating text",
|
|
414
|
+
err: String(err),
|
|
405
415
|
});
|
|
406
416
|
throw err; // Re-throw error to trigger fallback
|
|
407
417
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
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 } from "../core/types.js";
|
|
4
|
+
export declare class HuggingFace implements AIProvider {
|
|
5
|
+
private modelName;
|
|
6
|
+
private client;
|
|
7
|
+
/**
|
|
8
|
+
* Initializes a new instance of HuggingFace
|
|
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
|
+
}
|