|
| 1 | +#!/usr/bin/env bash |
| 2 | +set -e |
| 3 | + |
| 4 | +function add_model() { |
| 5 | + [ -z "$ACCESS_KEY_ID" ] && ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} |
| 6 | + [ -z "$SECRET_ACCESS_KEY" ] && SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} |
| 7 | + [ -z "$SESSION_TOKEN" ] && SESSION_TOKEN=${AWS_SESSION_TOKEN} |
| 8 | + |
| 9 | + ENDPOINT=https://admin:${CREDENTIAL}@${BIND_ADDRESS}:${BIND_PORT} |
| 10 | + |
| 11 | + curl -s -k "${ENDPOINT}/_cluster/settings" -XPUT -H 'Content-Type: application/json' -d '{ |
| 12 | + "persistent" : { |
| 13 | + "plugins.ml_commons.trusted_connector_endpoints_regex": |
| 14 | + [ "^https://runtime\\.sagemaker\\..*[a-z0-9-]\\.amazonaws\\.com/.*$", |
| 15 | + "^https://api\\.openai\\.com/.*$", |
| 16 | + "^https://api\\.cohere\\.ai/.*$", |
| 17 | + "^https://bedrock-runtime\\.[a-z0-9-]+\\.amazonaws\\.com/.*$" |
| 18 | + ] |
| 19 | + } |
| 20 | + }' | jq |
| 21 | + |
| 22 | + # shellcheck disable=2016 |
| 23 | + CONNECTOR=$(curl -s -k "${ENDPOINT}/_plugins/_ml/connectors/_create" -XPOST -H 'Content-Type: application/json' -d '{ |
| 24 | + "name": "BedRock test claude Connector", |
| 25 | + "description": "The connector to BedRock service for claude model", |
| 26 | + "version": 1, |
| 27 | + "protocol": "aws_sigv4", |
| 28 | + "parameters": { |
| 29 | + "region": "'$REGION'", |
| 30 | + "service_name": "bedrock", |
| 31 | + "anthropic_version": "bedrock-2023-05-31", |
| 32 | + "endpoint": "bedrock.'$REGION'.amazonaws.com", |
| 33 | + "auth": "Sig_V4", |
| 34 | + "content_type": "application/json" |
| 35 | + }, |
| 36 | + "credential": { |
| 37 | + "access_key": "'$ACCESS_KEY_ID'", |
| 38 | + "secret_key": "'$SECRET_ACCESS_KEY'", |
| 39 | + "session_token": "'$SESSION_TOKEN'" |
| 40 | + }, |
| 41 | + "actions": [ |
| 42 | + { |
| 43 | + "action_type": "predict", |
| 44 | + "method": "POST", |
| 45 | + "url": "https://bedrock-runtime.'"$REGION"'.amazonaws.com/model/anthropic.claude-v1/invoke", |
| 46 | + "headers": { |
| 47 | + "content-type": "application/json", |
| 48 | + "x-amz-content-sha256": "required" |
| 49 | + }, |
| 50 | + "request_body": "{\"prompt\":\"${parameters.prompt}\", \"max_tokens_to_sample\":${parameters.max_tokens_to_sample}, \"temperature\":${parameters.temperature}, \"anthropic_version\":\"${parameters.anthropic_version}\" }" |
| 51 | + } |
| 52 | + ] |
| 53 | + }' | jq -r '.connector_id') |
| 54 | + echo "❗connector: ${CONNECTOR}" |
| 55 | + |
| 56 | + GROUP=$(curl -s -k "${ENDPOINT}/_plugins/_ml/model_groups/_register" -XPOST -H 'Content-Type: application/json' -d '{ |
| 57 | + "name": "test_model_group_public", |
| 58 | + "description": "This is a public model group" |
| 59 | + }' | jq | grep -oP '(?<=ID: )(.+)(?=\.)|(?<=model_group_id": ")(.+)(?=",)' | head -n 1) |
| 60 | + echo "❗group: ${GROUP}" |
| 61 | + |
| 62 | + EMBEDDINGS_TASK=$(curl -s -k "${ENDPOINT}/_plugins/_ml/models/_register?deploy=true" -XPOST -H 'Content-Type: application/json' -d '{ |
| 63 | + "name": "huggingface/sentence-transformers/all-mpnet-base-v2", |
| 64 | + "version": "1.0.1", |
| 65 | + "model_group_id": "'$GROUP'", |
| 66 | + "model_format": "TORCH_SCRIPT" |
| 67 | + }' | jq -r '.task_id') |
| 68 | + echo "❗embeddings_task: ${EMBEDDINGS_TASK}" |
| 69 | + |
| 70 | + MODEL=$(curl -s -k "${ENDPOINT}/_plugins/_ml/models/_register?deploy=true" -XPOST -H 'Content-Type: application/json' -d '{ |
| 71 | + "name": "Claude model on bedrock", |
| 72 | + "model_group_id": "'$GROUP'", |
| 73 | + "function_name": "remote", |
| 74 | + "version": "1.0.0", |
| 75 | + "connector_id": "'$CONNECTOR'", |
| 76 | + "description": "test model" |
| 77 | + }' | jq -r '.model_id') |
| 78 | + |
| 79 | + echo "❗model: ${MODEL}" |
| 80 | + sleep 40 |
| 81 | + EMBEDDINGS_MODEL=$(curl -s -k "${ENDPOINT}/_plugins/_ml/tasks/${EMBEDDINGS_TASK}" | jq -r '.model_id') |
| 82 | + echo "❗embeddings_model: ${EMBEDDINGS_MODEL}" |
| 83 | + |
| 84 | + curl -s -k "${ENDPOINT}/.chat-assistant-config/_doc/model-config" -XPOST -H 'Content-Type: application/json' -d '{ |
| 85 | + "model_type":"claude_bedrock", |
| 86 | + "embeddings_model_id":"'$EMBEDDINGS_MODEL'", |
| 87 | + "model_id":"'$MODEL'" |
| 88 | + }' | jq |
| 89 | +} |
0 commit comments