litellm / services /whisper /utils /batch_queue.py
Ava2lon's picture
Upload 205 files
1425afc verified
Raw
History Blame Contribute Delete
1.87 kB
import threading
from queue import Queue
import uuid
import time
from .job_queue import jobs, update, notify_webhook
from .transcription import transcribe_video
from .render import render_video
from .highlights import detect_highlights
batch_queue = Queue()
def create_batch_job(video_path, webhook=None):
job_id = str(uuid.uuid4())
jobs[job_id] = {
"id": job_id,
"status": "queued",
"progress": 0,
"clips": [],
"video": video_path,
"webhook": webhook,
}
batch_queue.put(job_id)
return job_id
def worker():
while True:
job_id = batch_queue.get()
job = jobs[job_id]
try:
update(job_id, status="processing", progress=5)
# 1. TRANSCRIBE
words = transcribe_video(job["video"])
update(job_id, progress=30)
# 2. DETECT HIGHLIGHTS
highlights = detect_highlights(words)
update(job_id, progress=50)
outputs = []
# 3. RENDER MULTIPLE CLIPS
for i, segment in enumerate(highlights):
start = segment[0]["start"]
end = segment[-1]["end"]
clip_path = render_video(job["video"], words)
outputs.append(clip_path)
update(job_id, progress=50 + int((i+1)/len(highlights)*40))
# 4. FINALIZE
update(job_id,
status="completed",
progress=100,
clips=outputs)
notify_webhook(job_id)
except Exception as e:
update(job_id,
status="failed",
error=str(e))
notify_webhook(job_id)
batch_queue.task_done()
def start_batch_worker():
t = threading.Thread(target=worker, daemon=True)
t.start()