SIGN IN SIGN UP

Make audio separator async with Firestore + GCS (#280)

* feat: add Firestore-backed job status store

Introduces FirestoreJobStore to replace the in-memory job_status_store dict,
enabling any Cloud Run instance to read/write job status for multi-instance GPU scaling.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add GCS output store for cross-instance file serving

Implements GCSOutputStore to upload separation results to GCS so any
Cloud Run instance can serve download requests, replacing local disk storage.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Make /separate endpoint async with GPU semaphore and external stores

Convert the /separate endpoint from synchronous (await) to fire-and-forget
pattern so it returns immediately while separation runs in background.
Replace in-memory job_status_store with Firestore reads/writes and local
file downloads with GCS, enabling cross-instance status polling and file
serving. Add GPU semaphore to serialize concurrent separation requests on
a single instance.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* cleanup: remove dead job_status_store dict

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: reduce POST timeout from 300s to 60s (server is now async)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add google-cloud-firestore to Dockerfile for async job store

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: lazy imports + add GCP test deps for CI compatibility

Move google.cloud imports inside __init__ methods so modules can be
imported without the packages installed. Add google-cloud-firestore and
google-cloud-storage to dev dependencies so CI has them available.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: update poetry.lock for GCP test dependencies

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: skip deploy_cloudrun tests when uvicorn not installed

The TestLazyInit tests import deploy_cloudrun.py which requires uvicorn
and fastapi - server-only dependencies not in the test environment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
A
Andrew Beveridge ☄️ committed
349ba98c85645a112f257fcb59861d519a1b2316
Parent: db43a42
Committed by GitHub <noreply@github.com> on 3/26/2026, 4:41:49 AM