Skip to content

Commit

Permalink
Simplify the base run but include Bedrock by default
Browse files Browse the repository at this point in the history
  • Loading branch information
jwalsh committed Nov 2, 2024
1 parent 3a1ef34 commit 30192d5
Showing 1 changed file with 13 additions and 193 deletions.
206 changes: 13 additions & 193 deletions computer-use-demo/_.sh
Original file line number Diff line number Diff line change
@@ -1,193 +1,13 @@
#!/usr/bin/env bash

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Required configurations
declare -r REQUIRED_MODEL="anthropic.claude-3-5-sonnet-20241022-v2:0"
declare -r IMAGE_NAME="ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest"

# Logging functions
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1" >&2; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }

# Function to setup and start Docker daemon
setup_docker() {
log_info "Setting up Docker environment..."

# Check if docker socket directory exists
if [ ! -d "/var/run" ]; then
log_info "Creating /var/run directory..."
sudo mkdir -p /var/run
fi

# # Check if Docker daemon is running
# if ! docker info &>/dev/null; then
# log_warning "Docker daemon not running. Starting dockerd..."

# # Kill any existing dockerd processes
# sudo killall dockerd &>/dev/null || true

# # Start Docker daemon in background
# sudo dockerd &>/dev/null &

# # Wait for Docker daemon to start
# log_info "Waiting for Docker daemon to start..."
# for i in {1..30}; do
# if docker info &>/dev/null; then
# log_success "Docker daemon started successfully"
# return 0
# fi
# sleep 1
# done

# log_error "Failed to start Docker daemon"
# return 1
# fi

log_success "Docker daemon is running"
return 0
}

# Function to validate AWS credentials
validate_aws_setup() {
log_info "Validating AWS credentials..."

# Check required environment variables
local required_vars=("AWS_ACCESS_KEY_ID" "AWS_SECRET_ACCESS_KEY" "AWS_REGION")
local missing_vars=()

for var in "${required_vars[@]}"; do
if [[ -z "${!var}" ]]; then
missing_vars+=("$var")
fi
done

if [[ ${#missing_vars[@]} -gt 0 ]]; then
log_error "Missing required environment variables: ${missing_vars[*]}"
log_error "Please add these to your Replit Secrets"
return 1
fi

# Validate credentials using STS
local identity
if ! identity=$(aws sts get-caller-identity 2>/dev/null); then
log_error "Invalid AWS credentials"
return 1
fi

local account_id=$(echo "$identity" | jq -r .Account)
local arn=$(echo "$identity" | jq -r .Arn)

log_success "Authenticated as: $arn"
log_success "Account ID: $account_id"

# Validate Bedrock model access
log_info "Validating Bedrock model access..."
if ! aws bedrock list-foundation-models | jq -r '.modelSummaries[].modelId' | grep -q "^${REQUIRED_MODEL}$"; then
log_error "Required model ${REQUIRED_MODEL} not found in region ${AWS_REGION}"
return 1
fi

log_success "Model ${REQUIRED_MODEL} is available in region ${AWS_REGION}"
return 0
}

# Function to launch demo in Replit
launch_demo() {
log_info "Launching Computer Use Demo in Replit..."

# Pull the image first
log_info "Pulling Docker image..."
echo docker pull "${IMAGE_NAME}"
if ! docker pull "${IMAGE_NAME}"; then
log_error "Failed to pull Docker image"
return 1
fi

# Build docker run command for Replit environment
cmd="docker run"
cmd+=" -e API_PROVIDER=bedrock"
cmd+=" -e AWS_REGION=${AWS_REGION}"
cmd+=" -e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}"
cmd+=" -e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}"
[[ -n "${AWS_SESSION_TOKEN}" ]] && cmd+=" -e AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN}"

# Add common configuration
cmd+=" -v ${HOME}/.anthropic:/home/computeruse/.anthropic"

# Use Replit's port forwarding
cmd+=" -p 443:8080" # Main interface
cmd+=" -p 80:8501" # Streamlit
cmd+=" -p 5900:5900" # VNC
cmd+=" -p 6080:6080" # noVNC

# Set reasonable screen resolution for Replit
cmd+=" -e WIDTH=1024"
cmd+=" -e HEIGHT=768"

cmd+=" -it ${IMAGE_NAME}"

log_info "Starting container..."
eval "$cmd"

if [[ $? -eq 0 ]]; then
log_success "Container started successfully"
log_info "Access points in Replit:"
log_info "• Use the 'Webview' tab to access the interface"
log_info "• The container is running with default ports mapped to Replit's forwarding"
else
log_error "Failed to start container"
return 1
fi
}

# Function to cleanup on exit
cleanup() {
log_info "Cleaning up..."
# sudo killall dockerd &>/dev/null || true
docker stop anthropic-computer-use
docker rm anthropic-computer-use
}

# Set cleanup trap
trap cleanup EXIT

# Main function
main() {
log_info "Starting Computer Use Demo setup in Replit"
echo "----------------------------------------"

# Step 1: Setup Docker
if ! setup_docker; then
log_error "Docker setup failed"
exit 1
fi

# Step 2: Validate AWS setup
if ! validate_aws_setup; then
log_error "AWS validation failed"
exit 1
fi

# Step 3: Launch demo
if ! launch_demo; then
log_error "Demo launch failed"
exit 1
fi

log_success "Demo is ready!"
echo "----------------------------------------"
log_info "Open the 'Webview' tab in Replit to access the interface"

exit 0
}

# Run main function
main "$@"
docker run \
-e GITHUB_TOKEN=$GITHUB_TOKEN \
-e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-e AWS_REGION=$AWS_REGION \
-e PROVIDER=bedrock \
-v $HOME/.anthropic:/home/computeruse/.anthropic \
-p 5900:5900 \
-p 8501:8501 \
-p 6080:6080 \
-p 8080:8080 \
-it ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest

0 comments on commit 30192d5

Please sign in to comment.