zaldivards's picture
Add functions to invoke Bedrock and OpenAI models
694a9b2
raw
history blame
3.5 kB
import os
import json
from io import BytesIO
import boto3
import requests
from openai import OpenAI
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
BEDROCK_MODEL_ID = "anthropic.claude-3-5-sonnet-20240620-v1:0"
OPENAI_MODEL_ID = "o4-mini"
OPENAI_MODEL_IMAGE_MODEL_ID = "gpt-4.1-mini"
bedrock_runtime = boto3.client("bedrock-runtime", region_name=os.getenv("AWS_REGION"))
openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def invoke_bedrock_model(messages: list[dict]) -> str:
"""Invokes a Bedrock model with the provided messages."""
response = bedrock_runtime.invoke_model(
modelId=BEDROCK_MODEL_ID,
body=json.dumps({"anthropic_version": "bedrock-2023-05-31", "max_tokens": 4096, "messages": messages}),
)["body"].read()
return json.loads(response)["content"][0]["text"]
def invoke_openai_model(messages: list[dict]) -> str:
"""Invokes an OpenAI model with the provided messages."""
response = openai_client.responses.create(
model=OPENAI_MODEL_IMAGE_MODEL_ID,
input=messages,
)
return response.output_text
def get_file(task_id: str) -> BytesIO:
"""Fetches a file associated with a task ID from the default API URL.
Parameters
----------
task_id : str
The ID of the task for which the file is to be fetched.
Returns
-------
BytesIO
A BytesIO object containing the file content.
Raises
------
requests.exceptions.RequestException
If there is an error during the HTTP request.
Exception
For any other unexpected errors that may occur.
"""
url = f"{DEFAULT_API_URL}/files/{task_id}"
try:
response = requests.get(url, timeout=15)
response.raise_for_status()
return BytesIO(response.content)
except requests.exceptions.RequestException as e:
print(f"Error fetching file for task {task_id}: {e}")
raise
except Exception as e:
print(f"An unexpected error occurred fetching file for task {task_id}: {e}")
raise
def s3_upload_file(file_content: BytesIO, bucket_name: str, object_name: str) -> None:
"""Uploads a file to an S3 bucket.
Parameters
----------
file_content : BytesIO
The content of the file to upload.
bucket_name : str
The name of the S3 bucket.
object_name : str
The name of the object in the S3 bucket.
Raises
------
Exception
If there is an error during the upload process.
"""
try:
s3_client = boto3.client("s3")
s3_client.put_object(Bucket=bucket_name, Key=object_name, Body=file_content.getvalue())
except Exception as e:
print(f"Error uploading file to S3: {e}")
raise
def s3_download_file(bucket_name: str, object_name: str) -> BytesIO:
"""Downloads a file from an S3 bucket.
Parameters
----------
bucket_name : str
The name of the S3 bucket.
object_name : str
The name of the object in the S3 bucket.
Returns
-------
BytesIO
A BytesIO object containing the downloaded file content.
Raises
------
Exception
If there is an error during the download process.
"""
try:
s3_client = boto3.client("s3")
response = s3_client.get_object(Bucket=bucket_name, Key=object_name)
return BytesIO(response["Body"].read())
except Exception as e:
print(f"Error downloading file from S3: {e}")
raise