Add live transcription progress and Docker Whisper.

Surface stage, percent, and elapsed time while jobs run, and ship Compose so local confidential transcription can use faster-whisper on port 8090.
This commit is contained in:
ben
2026-08-12 14:32:56 +02:00
parent 67c1941833
commit e0400aadef
14 changed files with 695 additions and 177 deletions
@@ -14,7 +14,7 @@ class TranscribeController extends Controller
*/
public function __invoke(TranscribeRecordingRequest $request, Recording $recording): RedirectResponse
{
if (in_array($recording->transcription_status, ['processing'], true)) {
if ($recording->transcription_status === 'processing') {
return back()->with('error', 'Transcription is already in progress.');
}
@@ -24,12 +24,16 @@ class TranscribeController extends Controller
'transcription_driver' => $driver,
'ollama_url' => $driver === 'ollama' ? rtrim($request->validated('ollama_url'), '/') : null,
'transcription_status' => 'pending',
'transcription_progress' => 'Queued — waiting to start…',
'transcription_percent' => 5,
'transcription_started_at' => now(),
'transcription_error' => null,
'transcript' => null,
'transcribed_at' => null,
]);
TranscribeRecording::dispatch($recording->fresh());
return back()->with('success', 'Transcription started. Refresh in a moment to see the result.');
return back()->with('success', 'Transcription started. Progress updates below.');
}
}
@@ -0,0 +1,17 @@
<?php
namespace App\Http\Controllers;
use App\Models\Recording;
use Illuminate\Http\JsonResponse;
class TranscriptionStatusController extends Controller
{
/**
* Live transcription progress for polling.
*/
public function __invoke(Recording $recording): JsonResponse
{
return response()->json($recording->fresh()->transcriptionStatusPayload());
}
}