Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion fastdeploy/entrypoints/chat_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"""

import os
import time
import uuid
from copy import deepcopy
from pathlib import Path
Expand All @@ -32,6 +33,7 @@

from fastdeploy.multimodal.image import ImageMediaIO
from fastdeploy.multimodal.video import VideoMediaIO
from fastdeploy.utils import api_server_logger


class VideoURL(TypedDict, total=False):
Expand Down Expand Up @@ -90,12 +92,32 @@ def parse_video(self, video_url):
"""Parse Video"""
return self.load_from_url(video_url, self.video_io)

def http_get_with_retry(self, url, max_retries=3, retry_delay=1, backoff_factor=2):
"""HTTP GET retry"""

retry_cnt = 0
delay = retry_delay

while retry_cnt < max_retries:
try:
response = requests.get(url)
response.raise_for_status()
return response.content
except Exception as e:
retry_cnt += 1
if retry_cnt >= max_retries:
api_server_logger.error(f"HTTP GET failed: {e}. Max retries reached")
raise
api_server_logger.info(f"HTTP GET failed: {e}. Start retry {retry_cnt}")
time.sleep(delay)
delay *= backoff_factor

def load_from_url(self, url, media_io):
"""Load media from URL"""

parsed = urlparse(url)
if parsed.scheme.startswith("http"):
media_bytes = requests.get(url).content
media_bytes = self.http_get_with_retry(url)
return media_io.load_bytes(media_bytes)

if parsed.scheme.startswith("data"):
Expand Down
Loading