From f8f7a28c728fc6d4c940020f327f865db1b469a1 Mon Sep 17 00:00:00 2001
From: Subliminal Guy <subliminal_kid@posteo.de>
Date: Sun, 20 Apr 2025 20:10:46 +0200
Subject: [PATCH] Add transcription status route

---
 app/asr_models/asr_model.py             | 3 ++-
 app/asr_models/faster_whisper_engine.py | 5 +++++
 app/asr_models/mbain_whisperx_engine.py | 5 +++++
 app/asr_models/openai_whisper_engine.py | 5 +++++
 app/webservice.py                       | 7 +++++++
 5 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/app/asr_models/asr_model.py b/app/asr_models/asr_model.py
index 8c625ec..76b7b85 100644
--- a/app/asr_models/asr_model.py
+++ b/app/asr_models/asr_model.py
@@ -19,7 +19,8 @@ class ASRModel(ABC):
     last_activity_time = time.time()
 
     def __init__(self):
-        pass
+        # Flag indicating if a transcription is currently running
+        self.transcription_active = False
 
     @abstractmethod
     def load_model(self):
diff --git a/app/asr_models/faster_whisper_engine.py b/app/asr_models/faster_whisper_engine.py
index d7c3c44..3c9c8b5 100644
--- a/app/asr_models/faster_whisper_engine.py
+++ b/app/asr_models/faster_whisper_engine.py
@@ -35,6 +35,9 @@ class FasterWhisperASR(ASRModel):
             options: Union[dict, None],
             output,
     ):
+        # Mark transcription as active
+        self.transcription_active = True
+        # Update last activity timestamp
         self.last_activity_time = time.time()
 
         with self.model_lock:
@@ -62,6 +65,8 @@ class FasterWhisperASR(ASRModel):
         output_file = StringIO()
         self.write_result(result, output_file, output)
         output_file.seek(0)
+        # Mark transcription as completed
+        self.transcription_active = False
 
         return output_file
 
diff --git a/app/asr_models/mbain_whisperx_engine.py b/app/asr_models/mbain_whisperx_engine.py
index 87494a3..458b5bc 100644
--- a/app/asr_models/mbain_whisperx_engine.py
+++ b/app/asr_models/mbain_whisperx_engine.py
@@ -48,6 +48,9 @@ class WhisperXASR(ASRModel):
         options: Union[dict, None],
         output,
     ):
+        # Mark transcription as active
+        self.transcription_active = True
+        # Update last activity timestamp
         self.last_activity_time = time.time()
         with self.model_lock:
             if self.model is None:
@@ -88,6 +91,8 @@ class WhisperXASR(ASRModel):
         output_file = StringIO()
         self.write_result(result, output_file, output)
         output_file.seek(0)
+        # Mark transcription as completed
+        self.transcription_active = False
 
         return output_file
 
diff --git a/app/asr_models/openai_whisper_engine.py b/app/asr_models/openai_whisper_engine.py
index 655d682..a82ec7f 100644
--- a/app/asr_models/openai_whisper_engine.py
+++ b/app/asr_models/openai_whisper_engine.py
@@ -33,6 +33,9 @@ class OpenAIWhisperASR(ASRModel):
         options: Union[dict, None],
         output,
     ):
+        # Mark transcription as active
+        self.transcription_active = True
+        # Update last activity timestamp
         self.last_activity_time = time.time()
 
         with self.model_lock:
@@ -52,6 +55,8 @@ class OpenAIWhisperASR(ASRModel):
         output_file = StringIO()
         self.write_result(result, output_file, output)
         output_file.seek(0)
+        # Mark transcription as completed
+        self.transcription_active = False
 
         return output_file
 
diff --git a/app/webservice.py b/app/webservice.py
index 8f4fa6a..24fe05d 100644
--- a/app/webservice.py
+++ b/app/webservice.py
@@ -119,6 +119,13 @@ async def detect_language(
         "language_code": detected_lang_code,
         "confidence": confidence,
     }
+ 
+@app.get("/transcription/status", tags=["Endpoints"])
+async def transcription_status():
+    """
+    Return whether a transcription is currently running.
+    """
+    return {"active": asr_model.transcription_active}
 
 
 @click.command()
-- 
GitLab