Skip to main content

OpenInference Bedrock Instrumentation

Project description

OpenInference AWS Bedrock Instrumentation

Python autoinstrumentation library for AWS Bedrock calls made using boto3.

This package implements OpenInference tracing for invoke_model, invoke_agent and converse calls made using the boto3 bedrock-runtime and bedrock-agent-runtime clients. These traces are fully OpenTelemetry compatible and can be sent to an OpenTelemetry collector for viewing, such as Arize phoenix.

pypi

[!NOTE]
The Converse API was introduced in botocore v1.34.116. Please use v1.34.116 or above to utilize converse.

Supported Models

Find the list of Bedrock-supported models and their IDs here. Future testing is planned for additional models.

Model Supported Methods
Anthropic Claude 2.0 converse, invoke
Anthropic Claude 2.1 converse, invoke
Anthropic Claude 3 Sonnet 1.0 converse
Anthropic Claude 3.5 Sonnet converse
Anthropic Claude 3 Haiku converse
Meta Llama 3 8b Instruct converse
Meta Llama 3 70b Instruct converse
Mistral AI Mistral 7B Instruct converse
Mistral AI Mixtral 8X7B Instruct converse
Mistral AI Mistral Large converse
Mistral AI Mistral Small converse

Installation

pip install openinference-instrumentation-bedrock 

Quickstart

[!IMPORTANT]
OpenInference for AWS Bedrock supports both invoke_model and converse. For models that use the Messages API, such as Anthropic Claude 3 and Anthropic Claude 3.5, use the Converse API instead.

In a notebook environment (jupyter, colab, etc.) install openinference-instrumentation-bedrock, arize-phoenix and boto3.

You can test out this quickstart guide in Google Colab!

pip install openinference-instrumentation-bedrock arize-phoenix boto3 

Ensure that boto3 is configured with AWS credentials.

First, import dependencies required to autoinstrument AWS Bedrock and set up phoenix as an collector for OpenInference traces.

from urllib.parse import urljoin import boto3 import phoenix as px from openinference.instrumentation.bedrock import BedrockInstrumentor from opentelemetry import trace as trace_api from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from opentelemetry.sdk import trace as trace_sdk from opentelemetry.sdk.trace.export import SimpleSpanProcessor 

Next, we'll start a phoenix server and set it as a collector.

px.launch_app() session_url = px.active_session().url phoenix_otlp_endpoint = urljoin(session_url, "v1/traces") phoenix_exporter = OTLPSpanExporter(endpoint=phoenix_otlp_endpoint) tracer_provider = trace_sdk.TracerProvider() tracer_provider.add_span_processor(SimpleSpanProcessor(span_exporter=phoenix_exporter)) trace_api.set_tracer_provider(tracer_provider=tracer_provider) 

Instrumenting boto3 is simple:

BedrockInstrumentor().instrument() 

Now, all calls to invoke_model are instrumented and can be viewed in the phoenix UI.

session = boto3.session.Session() client = session.client("bedrock-runtime") prompt = b'{"prompt": "Human: Hello there, how are you? Assistant:", "max_tokens_to_sample": 1024}' response = client.invoke_model(modelId="anthropic.claude-v2", body=prompt) response_body = json.loads(response.get("body").read()) print(response_body["completion"]) 

Alternatively, all calls to converse are instrumented and can be viewed in the phoenix UI.

session = boto3.session.Session() client = session.client("bedrock-runtime") message1 = { "role": "user", "content": [{"text": "Create a list of 3 pop songs."}] } message2 = { "role": "user", "content": [{"text": "Make sure the songs are by artists from the United Kingdom."}] } messages = [] messages.append(message1) response = client.converse( modelId="anthropic.claude-3-5-sonnet-20240620-v1:0", messages=messages ) out = response["output"]["message"] messages.append(out) print(out.get("content")[-1].get("text")) messages.append(message2) response = client.converse( modelId="anthropic.claude-v2:1", messages=messages ) out = response['output']['message'] print(out.get("content")[-1].get("text")) 

All calls to invoke_agent are instrumented and can be viewed in the phoenix UI. You can enable the agent traces by passing enableTrace=True argument.

session = boto3.session.Session() client = session.client("bedrock-agent-runtime") agent_id = '<AgentId>' agent_alias_id = '<AgentAliasId>' session_id = f"default-session1_{int(time.time())}" attributes = dict( inputText="When is a good time to visit the Taj Mahal?", agentId=agent_id, agentAliasId=agent_alias_id, sessionId=session_id, enableTrace=True ) response = client.invoke_agent(**attributes) for idx, event in enumerate(response['completion']): if 'chunk' in event: chunk_data = event['chunk'] if 'bytes' in chunk_data: output_text = chunk_data['bytes'].decode('utf8') print(output_text) elif 'trace' in event: print(event['trace']) 

More Info

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openinference_instrumentation_bedrock-0.1.32.tar.gz (199.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file openinference_instrumentation_bedrock-0.1.32.tar.gz.

File metadata

File hashes

Hashes for openinference_instrumentation_bedrock-0.1.32.tar.gz
Algorithm Hash digest
SHA256 273520591b034464022615ab810408175df5986da538df1dd1752500d7acc6d1
MD5 28cb1066570f7196c5af8e9d65535a13
BLAKE2b-256 28bf8901768ae7bb52219faf030126325ede6a00b2fc2b3897bdf41cdae88416

See more details on using hashes here.

File details

Details for the file openinference_instrumentation_bedrock-0.1.32-py3-none-any.whl.

File metadata

File hashes

Hashes for openinference_instrumentation_bedrock-0.1.32-py3-none-any.whl
Algorithm Hash digest
SHA256 634ebe1fb144d897b261b196ec6d01d5ea491df0527c7b915c0840d03f684400
MD5 2be90839172865e868b42c58374c6da6
BLAKE2b-256 7147183740c4eb33e393358e98d5a943b01a4513b0d3d38e0591b2e90e47c9db

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page