AmmarFahmy
adding all files
105b369
from pathlib import Path
from typing import Any, Optional
from phi.assistant.openai.file import File
from phi.utils.log import logger
class UrlFile(File):
url: str
# Manually provide a filename
name: Optional[str] = None
def get_filename(self) -> Optional[str]:
return self.name or self.url.split("/")[-1] or self.filename
def read(self) -> Any:
try:
import httpx
except ImportError:
raise ImportError("`httpx` not installed")
try:
from tempfile import TemporaryDirectory
logger.debug(f"Downloading url: {self.url}")
with httpx.Client() as client:
response = client.get(self.url)
# This will raise an exception for HTTP errors.
response.raise_for_status()
# Create a temporary directory
with TemporaryDirectory() as temp_dir:
file_name = self.get_filename()
if file_name is None:
raise ValueError("Could not determine a file name, please set `name`")
file_path = Path(temp_dir).joinpath(file_name)
# Write the PDF to a temporary file
file_path.write_bytes(response.content)
logger.debug(f"PDF downloaded and saved to {file_path.name}")
# Read the temporary file
return file_path.open("rb")
except Exception as e:
logger.error(f"Could not read url: {e}")