Lior-0618 commited on
Commit
468f785
Β·
1 Parent(s): cc028c9

fix: pin onnxruntime==1.24.2 + cache-bust Dockerfile for FER

Browse files
Files changed (3) hide show
  1. Dockerfile +2 -0
  2. api/requirements.txt +1 -1
  3. web/src/app/studio/page.tsx +36 -29
Dockerfile CHANGED
@@ -17,6 +17,8 @@ RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
17
  WORKDIR /app
18
 
19
  # ─── API layer: Python dependencies ──────────────────────────────────────────
 
 
20
  COPY api/requirements.txt api/requirements.txt
21
  RUN pip install --no-cache-dir -r api/requirements.txt
22
 
 
17
  WORKDIR /app
18
 
19
  # ─── API layer: Python dependencies ──────────────────────────────────────────
20
+ # CACHE_BUST: force pip layer rebuild when bumping onnxruntime version
21
+ ARG CACHE_BUST=20260302
22
  COPY api/requirements.txt api/requirements.txt
23
  RUN pip install --no-cache-dir -r api/requirements.txt
24
 
api/requirements.txt CHANGED
@@ -14,5 +14,5 @@ mistral-common
14
  safetensors
15
  sentencepiece
16
  # FER inference β€” model uses ONNX IR v10, requires ort>=1.19.0
17
- onnxruntime>=1.19.0
18
  opencv-python-headless>=4.8.0
 
14
  safetensors
15
  sentencepiece
16
  # FER inference β€” model uses ONNX IR v10, requires ort>=1.19.0
17
+ onnxruntime==1.24.2
18
  opencv-python-headless>=4.8.0
web/src/app/studio/page.tsx CHANGED
@@ -713,37 +713,44 @@ function StudioContent() {
713
  throw new Error(errData.error ?? "Submit failed")
714
  }
715
 
716
- const { job_id } = await submitRes.json() as { job_id: string }
717
-
718
- // 2. Poll until done (every 3s)
719
- const POLL_INTERVAL = 3000
720
- const MAX_POLLS = 60 * 20 // 60 min max
721
- let polls = 0
722
-
723
- const data = await new Promise<DiarizeResult>((resolve, reject) => {
724
- const tick = async () => {
725
- polls++
726
- if (polls > MAX_POLLS) {
727
- reject(new Error("Processing timed out after 60 minutes"))
728
- return
729
- }
730
- try {
731
- const pollRes = await fetch(`${API_BASE}/api/job/${job_id}`)
732
- const pollData = await pollRes.json()
733
- if (pollData.status === "done") {
734
- resolve(pollData.data as DiarizeResult)
735
- } else if (pollData.status === "error") {
736
- reject(new Error(pollData.error ?? "Processing failed"))
737
- } else {
738
- // still pending β€” keep polling
739
- setTimeout(tick, POLL_INTERVAL)
 
 
 
 
 
 
740
  }
741
- } catch (e) {
742
- reject(e)
743
  }
744
- }
745
- setTimeout(tick, POLL_INTERVAL)
746
- })
 
 
 
747
 
748
  updateSession(session.id, data)
749
  const updated = getSession(session.id)
 
713
  throw new Error(errData.error ?? "Submit failed")
714
  }
715
 
716
+ const submitJson = await submitRes.json() as { job_id?: string } & Partial<DiarizeResult>
717
+
718
+ let data: DiarizeResult
719
+
720
+ if (submitJson.job_id) {
721
+ // New async format: poll for result
722
+ const job_id = submitJson.job_id
723
+ const POLL_INTERVAL = 3000
724
+ const MAX_POLLS = 60 * 20 // 60 min max
725
+ let polls = 0
726
+
727
+ data = await new Promise<DiarizeResult>((resolve, reject) => {
728
+ const tick = async () => {
729
+ polls++
730
+ if (polls > MAX_POLLS) {
731
+ reject(new Error("Processing timed out after 60 minutes"))
732
+ return
733
+ }
734
+ try {
735
+ const pollRes = await fetch(`${API_BASE}/api/job/${job_id}`)
736
+ const pollData = await pollRes.json()
737
+ if (pollData.status === "done") {
738
+ resolve(pollData.data as DiarizeResult)
739
+ } else if (pollData.status === "error") {
740
+ reject(new Error(pollData.error ?? "Processing failed"))
741
+ } else {
742
+ setTimeout(tick, POLL_INTERVAL)
743
+ }
744
+ } catch (e) {
745
+ reject(e)
746
  }
 
 
747
  }
748
+ setTimeout(tick, POLL_INTERVAL)
749
+ })
750
+ } else {
751
+ // Fallback: old proxy / local dev returned result directly
752
+ data = submitJson as DiarizeResult
753
+ }
754
 
755
  updateSession(session.id, data)
756
  const updated = getSession(session.id)