import time
def wait_for_run_completion(run_id, max_attempts=10, initial_delay=5):
"""
Waits for a Lume run to complete using exponential backoff.
"""
delay = initial_delay
for attempt in range(max_attempts):
run = lume.run_status(run_id)
if run.status in ["SUCCEEDED", "PARTIAL_FAILED", "FAILED", "CRASHED"]:
print(f"Run {run.id} finished with status: {run.status}")
return run
print(f"Attempt {attempt + 1}: Status is {run.status}. Retrying in {delay}s...")
time.sleep(delay)
delay = min(delay * 2, 60) # Double the delay, capped at 60 seconds
raise TimeoutError(f"Run {run.id} did not complete after {max_attempts} attempts.")
# Usage:
initial_run = lume.run(...)
try:
final_run = wait_for_run_completion(initial_run.id)
# Now you can inspect the final metadata
print(final_run.metadata)
except TimeoutError as e:
print(e)