Research_Agent / phidata /phi /tools /replicate.py
zykrix
Re-added phidata as a normal folder (final fix)
c96b98a
Raw
History Blame Contribute Delete
2.48 kB
import os
from os import getenv
from typing import Optional
from urllib.parse import urlparse
from uuid import uuid4
from phi.agent import Agent
from phi.model.content import Video, Image
from phi.tools import Toolkit
from phi.utils.log import logger
try:
import replicate
from replicate.helpers import FileOutput
except ImportError:
raise ImportError("`replicate` not installed. Please install using `pip install replicate`.")
class ReplicateTools(Toolkit):
def __init__(
self,
api_key: Optional[str] = None,
model: str = "minimax/video-01",
):
super().__init__(name="replicate_toolkit")
self.api_key = api_key or getenv("REPLICATE_API_TOKEN")
if not self.api_key:
logger.error("REPLICATE_API_TOKEN not set. Please set the REPLICATE_API_TOKEN environment variable.")
self.model = model
self.register(self.generate_media)
def generate_media(self, agent: Agent, prompt: str) -> str:
"""
Use this function to generate an image or a video using a replicate model.
Args:
prompt (str): A text description of the content.
Returns:
str: Return a URI to the generated video or image.
"""
output: FileOutput = replicate.run(ref=self.model, input={"prompt": prompt})
# Parse the URL to extract the file extension
parsed_url = urlparse(output.url)
path = parsed_url.path
_, ext = os.path.splitext(path)
ext = ext.lower()
# Define supported extensions
image_extensions = {".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".webp"}
video_extensions = {".mp4", ".mov", ".avi", ".mkv", ".flv", ".wmv", ".webm"}
media_id = str(uuid4())
if ext in image_extensions:
agent.add_image(
Image(
id=media_id,
url=output.url,
)
)
media_type = "image"
elif ext in video_extensions:
agent.add_video(
Video(
id=media_id,
url=output.url,
)
)
media_type = "video"
else:
logger.error(f"Unsupported media type with extension '{ext}' for URL: {output.url}")
return f"Unsupported media type with extension '{ext}'."
return f"{media_type.capitalize()} generated successfully at {output.url}"