UNPKG

@juspay/neurolink

Version:

Universal AI Development Platform with working MCP integration, multi-provider support, and professional CLI. Built-in tools operational, 58+ external MCP servers discoverable. Connect to filesystem, GitHub, database operations, and more. Build, test, and

123 lines (122 loc) • 5.65 kB
import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock"; import { streamText } from "ai"; import { BaseProvider } from "../core/baseProvider.js"; import { logger } from "../utils/logger.js"; import { TimeoutError, } from "../utils/timeout.js"; import { DEFAULT_MAX_TOKENS } from "../core/constants.js"; import { validateApiKey, createAWSAccessKeyConfig, createAWSSecretConfig, getAWSRegion, getAWSSessionToken, } from "../utils/providerConfig.js"; import { buildMessagesArray } from "../utils/messageBuilder.js"; // Configuration helpers const getBedrockModelId = () => { return (process.env.BEDROCK_MODEL || process.env.BEDROCK_MODEL_ID || "arn:aws:bedrock:us-east-2:225681119357:inference-profile/us.anthropic.claude-3-7-sonnet-20250219-v1:0"); }; // Configuration helpers - now using consolidated utility const getAWSAccessKeyId = () => { return validateApiKey(createAWSAccessKeyConfig()); }; const getAWSSecretAccessKey = () => { return validateApiKey(createAWSSecretConfig()); }; // Note: getAWSRegion and getAWSSessionToken are now directly imported from consolidated utility const getAppEnvironment = () => { return process.env.PUBLIC_APP_ENVIRONMENT || "production"; }; /** * Amazon Bedrock Provider v2 - BaseProvider Implementation * * PHASE 3.3: Simple BaseProvider wrap around existing @ai-sdk/amazon-bedrock implementation * * Features: * - Extends BaseProvider for shared functionality * - Preserves existing AWS credential configuration * - Maintains inference profile ARN support * - Uses pre-initialized Bedrock instance for efficiency * - Enhanced error handling with setup guidance */ export class AmazonBedrockProvider extends BaseProvider { bedrock; model; constructor(modelName) { super(modelName, "bedrock"); // Initialize AWS configuration const awsConfig = { accessKeyId: getAWSAccessKeyId(), secretAccessKey: getAWSSecretAccessKey(), region: getAWSRegion(), }; // Add session token for development environment if (getAppEnvironment() === "dev") { const sessionToken = getAWSSessionToken(); if (sessionToken) { awsConfig.sessionToken = sessionToken; } } // Create Bedrock provider instance this.bedrock = createAmazonBedrock(awsConfig); // Pre-initialize model for efficiency this.model = this.bedrock(this.modelName || getBedrockModelId()); logger.debug("Amazon Bedrock BaseProvider v2 initialized", { modelName: this.modelName, region: awsConfig.region, hasSessionToken: !!awsConfig.sessionToken, provider: this.providerName, }); } getProviderName() { return "bedrock"; } getDefaultModel() { return getBedrockModelId(); } /** * Returns the Vercel AI SDK model instance for AWS Bedrock */ getAISDKModel() { return this.model; } // executeGenerate removed - BaseProvider handles all generation with tools async executeStream(options, analysisSchema) { try { this.validateStreamOptions(options); // Build message array from options const messages = buildMessagesArray(options); const result = await streamText({ model: this.model, messages: messages, maxTokens: options.maxTokens || DEFAULT_MAX_TOKENS, temperature: options.temperature, }); return { stream: (async function* () { for await (const chunk of result.textStream) { yield { content: chunk }; } })(), provider: this.providerName, model: this.modelName, }; } catch (error) { throw this.handleProviderError(error); } } handleProviderError(error) { if (error instanceof Error && error.name === "TimeoutError") { return new TimeoutError(`Amazon Bedrock request timed out. Consider increasing timeout or using a lighter model.`, this.defaultTimeout); } const errorMessage = error instanceof Error ? error.message : String(error); if (errorMessage.includes("InvalidRequestException")) { return new Error(`āŒ Amazon Bedrock Request Error\n\nThe request was invalid: ${errorMessage}\n\nšŸ”§ Common Solutions:\n1. Check your model ID format\n2. Verify your request parameters\n3. Ensure your AWS account has Bedrock access`); } if (errorMessage.includes("AccessDeniedException")) { return new Error(`āŒ Amazon Bedrock Access Denied\n\nYour AWS credentials don't have permission to access Bedrock.\n\nšŸ”§ Required Steps:\n1. Ensure your IAM user has bedrock:InvokeModel permission\n2. Check if Bedrock is available in your region\n3. Verify model access is enabled in Bedrock console`); } if (errorMessage.includes("ValidationException")) { return new Error(`āŒ Amazon Bedrock Validation Error\n\n${errorMessage}\n\nšŸ”§ Check:\n1. Model ID format (should be ARN or model identifier)\n2. Request parameters are within limits\n3. Region configuration is correct`); } return new Error(`āŒ Amazon Bedrock Provider Error\n\n${errorMessage || "Unknown error occurred"}\n\nšŸ”§ Troubleshooting:\n1. Check AWS credentials and permissions\n2. Verify model availability\n3. Check network connectivity`); } } export default AmazonBedrockProvider;