Spaces:
Sleeping
Sleeping
import yaml | |
from litellm._logging import verbose_proxy_logger | |
def get_file_contents_from_s3(bucket_name, object_key): | |
try: | |
# v0 rely on boto3 for authentication - allowing boto3 to handle IAM credentials etc | |
import tempfile | |
import boto3 | |
from botocore.credentials import Credentials | |
from litellm.main import bedrock_converse_chat_completion | |
credentials: Credentials = bedrock_converse_chat_completion.get_credentials() | |
s3_client = boto3.client( | |
"s3", | |
aws_access_key_id=credentials.access_key, | |
aws_secret_access_key=credentials.secret_key, | |
aws_session_token=credentials.token, # Optional, if using temporary credentials | |
) | |
verbose_proxy_logger.debug( | |
f"Retrieving {object_key} from S3 bucket: {bucket_name}" | |
) | |
response = s3_client.get_object(Bucket=bucket_name, Key=object_key) | |
verbose_proxy_logger.debug(f"Response: {response}") | |
# Read the file contents | |
file_contents = response["Body"].read().decode("utf-8") | |
verbose_proxy_logger.debug("File contents retrieved from S3") | |
# Create a temporary file with YAML extension | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".yaml") as temp_file: | |
temp_file.write(file_contents.encode("utf-8")) | |
temp_file_path = temp_file.name | |
verbose_proxy_logger.debug(f"File stored temporarily at: {temp_file_path}") | |
# Load the YAML file content | |
with open(temp_file_path, "r") as yaml_file: | |
config = yaml.safe_load(yaml_file) | |
return config | |
except ImportError as e: | |
# this is most likely if a user is not using the litellm docker container | |
verbose_proxy_logger.error(f"ImportError: {str(e)}") | |
pass | |
except Exception as e: | |
verbose_proxy_logger.error(f"Error retrieving file contents: {str(e)}") | |
return None | |
async def get_config_file_contents_from_gcs(bucket_name, object_key): | |
try: | |
from litellm.integrations.gcs_bucket.gcs_bucket import GCSBucketLogger | |
gcs_bucket = GCSBucketLogger( | |
bucket_name=bucket_name, | |
) | |
file_contents = await gcs_bucket.download_gcs_object(object_key) | |
if file_contents is None: | |
raise Exception(f"File contents are None for {object_key}") | |
# file_contentis is a bytes object, so we need to convert it to yaml | |
file_contents = file_contents.decode("utf-8") | |
# convert to yaml | |
config = yaml.safe_load(file_contents) | |
return config | |
except Exception as e: | |
verbose_proxy_logger.error(f"Error retrieving file contents: {str(e)}") | |
return None | |
# # Example usage | |
# bucket_name = 'litellm-proxy' | |
# object_key = 'litellm_proxy_config.yaml' | |