experiments/veo-app/models/lyria.py (56 lines of code) (raw):
import base64
import shortuuid
import vertexai
from google.api_core.exceptions import GoogleAPIError
from google.cloud import aiplatform, storage
from config.default import Default
# Initialize Configuration
cfg = Default()
vertexai.init(project=cfg.PROJECT_ID, location=cfg.LOCATION)
aiplatform.init(project=cfg.PROJECT_ID, location=cfg.LOCATION)
def generate_music_with_lyria(prompt: str):
"""generates music with lyria"""
LOCATION = cfg.LOCATION
MODEL_VERSION = cfg.LYRIA_MODEL_VERSION
PROJECT_ID = cfg.LYRIA_PROJECT_ID
LYRIA_ENDPOINT = f"projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_VERSION}"
aiplatform.init(project=PROJECT_ID, location=LOCATION)
instances = []
instances.append({"prompt": prompt})
parameters = {"sampleCount": 1}
api_regional_endpoint = f"{LOCATION}-aiplatform.googleapis.com"
client_options = {"api_endpoint": api_regional_endpoint}
client = aiplatform.gapic.PredictionServiceClient(client_options=client_options)
print(
f"Prediction client initiated on project {PROJECT_ID} in {LOCATION}: {LYRIA_ENDPOINT}."
)
try:
response = client.predict(
endpoint=LYRIA_ENDPOINT,
instances=instances,
parameters=parameters,
)
contents = response.predictions[0]["bytesBase64Encoded"]
# create a file name
my_uuid = shortuuid.uuid()
file_name = f"lyria_generation_{my_uuid}.wav"
# store on gcs
destination_blob_name = store_to_gcs(
"music", file_name, "audio/wav", contents, True
)
print(
f"{destination_blob_name} with contents len {len(contents)} uploaded to {cfg.MEDIA_BUCKET}."
)
except GoogleAPIError as e:
print(f"Error: {e}")
print(e)
return destination_blob_name
def store_to_gcs(
folder: str, file_name: str, mime_type: str, contents: str, decode: bool = False
):
"""store contents to GCS"""
client = storage.Client(project=cfg.PROJECT_ID)
bucket = client.get_bucket(cfg.MEDIA_BUCKET)
destination_blob_name = f"{folder}/{file_name}"
blob = bucket.blob(destination_blob_name)
if decode:
contents_bytes = base64.b64decode(contents)
blob.upload_from_string(contents_bytes, content_type=mime_type)
else:
blob.upload_from_string(contents, content_type=mime_type)
return f"{cfg.MEDIA_BUCKET}/{destination_blob_name}"