npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@aeye/aws

v0.3.2

Published

@aeye AWS - AWS Bedrock integration for @aeye

Readme

@aeye/aws - AWS Bedrock Provider

AWS Bedrock integration for the @aeye framework, providing seamless access to Claude, Llama, Mistral, Cohere, Stability AI, and Amazon Titan models.

Features

  • 🤖 Multi-Model Support - Access to all AWS Bedrock foundation models
  • 🔐 Automatic Authentication - Uses AWS SDK credential chain for seamless authentication
  • 🌊 Streaming - Full streaming support for real-time responses
  • 🎨 Image Generation - Stability AI models for image creation
  • 📊 Embeddings - Amazon Titan embeddings for semantic search
  • 🔧 Type-Safe - Full TypeScript support with type inference
  • Regional Flexibility - Deploy across any AWS region with Bedrock

Supported Models

Chat Models

  • Anthropic Claude - Claude 3 Opus, Sonnet, Haiku, and Claude 3.5 Sonnet
  • Meta Llama - Llama 2, Llama 3, Llama 3.1, Llama 3.2
  • Mistral AI - Mistral 7B, Mixtral 8x7B, Mistral Large
  • Cohere - Command, Command Light, Command R, Command R+
  • AI21 Labs - Jurassic-2 models

Image Models

  • Stability AI - Stable Diffusion XL, Stable Diffusion 3

Embedding Models

  • Amazon Titan - Titan Text Embeddings v1 and v2

Installation

npm install @aeye/aws @aeye/ai @aeye/core zod

Prerequisites

AWS Credentials

The provider uses the AWS SDK v3 credential chain to automatically discover credentials:

  1. Environment variables - AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
  2. Shared credentials file - ~/.aws/credentials
  3. IAM roles - When running on EC2, ECS, Lambda, etc.

AWS Bedrock Access

Ensure you have:

  1. Access to AWS Bedrock in your target region
  2. Permissions to invoke foundation models
  3. Model access enabled in the AWS Bedrock console

Quick Start

Basic Chat Completion

import { AI } from '@aeye/ai';
import { AWSBedrockProvider } from '@aeye/aws';

// Create provider (credentials picked up automatically)
const aws = new AWSBedrockProvider({
  region: 'us-east-1',
});

// Create AI instance
const ai = AI.with()
  .providers({ aws })
  .create();

// Chat with Claude
const response = await ai.chat.get([
  { role: 'user', content: 'What is AWS Bedrock?' }
], {
  model: 'anthropic.claude-3-sonnet-20240229-v1:0'
});

console.log(response.content);

Streaming Responses

// Stream responses in real-time
for await (const chunk of ai.chat.stream([
  { role: 'user', content: 'Write a poem about AI' }
], {
  model: 'anthropic.claude-3-haiku-20240307-v1:0'
})) {
  if (chunk.content) {
    process.stdout.write(chunk.content);
  }
}

Image Generation

import { AWSBedrockProvider } from '@aeye/aws';

const aws = new AWSBedrockProvider({
  region: 'us-east-1',
  defaultModels: {
    imageGenerate: 'stability.stable-diffusion-xl-v1',
  },
});

const ai = AI.with()
  .providers({ aws })
  .create();

const result = await ai.image.generate({
  prompt: 'A serene mountain landscape at sunset',
  size: { width: 1024, height: 1024 },
});

console.log('Image URL:', result.images[0].url);

Text Embeddings

const aws = new AWSBedrockProvider({
  region: 'us-east-1',
  defaultModels: {
    embedding: 'amazon.titan-embed-text-v1',
  },
});

const ai = AI.with()
  .providers({ aws })
  .create();

const embeddings = await ai.embed.get({
  input: 'AWS Bedrock is a fully managed service',
  model: 'amazon.titan-embed-text-v1',
});

console.log('Embedding dimensions:', embeddings.embeddings[0].length);

Configuration

Provider Configuration

import { AWSBedrockProvider, type AWSBedrockConfig } from '@aeye/aws';

const config: AWSBedrockConfig = {
  // AWS region (defaults to AWS_REGION env var or 'us-east-1')
  region: 'us-west-2',
  
  // Optional: Explicit credentials (if not using default chain)
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
    sessionToken: process.env.AWS_SESSION_TOKEN, // Optional
  },
  
  // Optional: Default models for different capabilities
  defaultModels: {
    chat: 'anthropic.claude-3-sonnet-20240229-v1:0',
    imageGenerate: 'stability.stable-diffusion-xl-v1',
    embedding: 'amazon.titan-embed-text-v2:0',
  },
};

const provider = new AWSBedrockProvider(config);

Using with Multiple Providers

import { AI } from '@aeye/ai';
import { AWSBedrockProvider } from '@aeye/aws';
import { OpenAIProvider } from '@aeye/openai';

const aws = new AWSBedrockProvider({ region: 'us-east-1' });
const openai = new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY! });

const ai = AI.with()
  .providers({ aws, openai })
  .create({
    // Automatic model selection across all providers
    defaultMetadata: {
      required: ['chat', 'streaming'],
      weights: {
        cost: 0.5,
        speed: 0.3,
        quality: 0.2,
      },
    },
  });

// AI instance will automatically select the best model across AWS and OpenAI
const response = await ai.chat.get([
  { role: 'user', content: 'Hello!' }
]);

Model IDs

Anthropic Claude Models

// Claude 3.5
'anthropic.claude-3-5-sonnet-20240620-v1:0'
'anthropic.claude-3-5-sonnet-20241022-v2:0'

// Claude 3
'anthropic.claude-3-opus-20240229-v1:0'
'anthropic.claude-3-sonnet-20240229-v1:0'
'anthropic.claude-3-haiku-20240307-v1:0'

// Claude 2.x
'anthropic.claude-v2:1'
'anthropic.claude-v2'
'anthropic.claude-instant-v1'

Meta Llama Models

'meta.llama3-2-1b-instruct-v1:0'
'meta.llama3-2-3b-instruct-v1:0'
'meta.llama3-2-11b-instruct-v1:0'
'meta.llama3-2-90b-instruct-v1:0'
'meta.llama3-1-8b-instruct-v1:0'
'meta.llama3-1-70b-instruct-v1:0'
'meta.llama3-1-405b-instruct-v1:0'
'meta.llama3-8b-instruct-v1:0'
'meta.llama3-70b-instruct-v1:0'
'meta.llama2-13b-chat-v1'
'meta.llama2-70b-chat-v1'

Mistral AI Models

'mistral.mistral-7b-instruct-v0:2'
'mistral.mixtral-8x7b-instruct-v0:1'
'mistral.mistral-large-2402-v1:0'
'mistral.mistral-large-2407-v1:0'

Cohere Models

'cohere.command-text-v14'
'cohere.command-light-text-v14'
'cohere.command-r-v1:0'
'cohere.command-r-plus-v1:0'

Stability AI Models

'stability.stable-diffusion-xl-v1'
'stability.sd3-large-v1:0'

Amazon Titan Models

// Embeddings
'amazon.titan-embed-text-v1'
'amazon.titan-embed-text-v2:0'

// Image Generation
'amazon.titan-image-generator-v1'
'amazon.titan-image-generator-v2:0'

Advanced Features

Vision with Claude 3

const response = await ai.chat.get([
  {
    role: 'user',
    content: [
      { type: 'text', content: 'What do you see in this image?' },
      { type: 'image', content: 'https://example.com/image.jpg' },
    ],
  },
], {
  model: 'anthropic.claude-3-sonnet-20240229-v1:0',
});

Custom Request Parameters

const response = await ai.chat.get([
  { role: 'user', content: 'Hello!' }
], {
  model: 'anthropic.claude-3-haiku-20240307-v1:0',
  temperature: 0.7,
  maxTokens: 2048,
  topP: 0.9,
  stop: ['Human:', 'Assistant:'],
});

Multi-Region Setup

// Primary region
const awsEast = new AWSBedrockProvider({
  region: 'us-east-1',
});

// Fallback region
const awsWest = new AWSBedrockProvider({
  region: 'us-west-2',
});

const ai = AI.with()
  .providers({ awsEast, awsWest })
  .create();

Error Handling

import {
  AWSError,
  AWSAuthError,
  AWSRateLimitError,
  AWSQuotaError,
  AWSContextWindowError,
} from '@aeye/aws';

try {
  const response = await ai.chat.get([
    { role: 'user', content: 'Hello!' }
  ]);
} catch (error) {
  if (error instanceof AWSAuthError) {
    console.error('Authentication failed. Check your AWS credentials.');
  } else if (error instanceof AWSRateLimitError) {
    console.error('Rate limit exceeded. Retry after:', error.retryAfter);
  } else if (error instanceof AWSQuotaError) {
    console.error('AWS quota exceeded. Request quota increase.');
  } else if (error instanceof AWSContextWindowError) {
    console.error('Input too long for model context window.');
  } else if (error instanceof AWSError) {
    console.error('AWS Bedrock error:', error.message);
  }
}

Health Check

const isHealthy = await aws.checkHealth();
console.log('AWS Bedrock is accessible:', isHealthy);

List Available Models

const models = await aws.listModels();
console.log('Available models:', models.map(m => m.id));

// Filter by capability
const chatModels = models.filter(m => m.capabilities.has('chat'));
const imageModels = models.filter(m => m.capabilities.has('image'));
const embeddingModels = models.filter(m => m.capabilities.has('embedding'));

Best Practices

  1. Use IAM Roles - When running on AWS infrastructure (EC2, ECS, Lambda), use IAM roles instead of hardcoded credentials
  2. Region Selection - Choose regions close to your users for lower latency
  3. Model Selection - Use smaller models (Haiku, 7B) for faster, cheaper responses when appropriate
  4. Streaming - Enable streaming for better user experience with long responses
  5. Error Handling - Implement proper error handling and retry logic for production use
  6. Cost Management - Monitor usage through AWS Cost Explorer and set up billing alerts

Environment Variables

# AWS credentials (if not using IAM roles)
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_SESSION_TOKEN=your_session_token  # Optional

# AWS region
AWS_REGION=us-east-1

Links

License

GPL-3.0 - See LICENSE file for details.

Contributing

Issues and pull requests are welcome! See the main repository for contribution guidelines.