-
Notifications
You must be signed in to change notification settings - Fork 162
Expand file tree
/
Copy pathTranscribeFileJob.php
More file actions
79 lines (67 loc) · 2.69 KB
/
Copy pathTranscribeFileJob.php
File metadata and controls
79 lines (67 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
namespace App\Jobs;
use App\Enum\TranscriptStatus;
use App\Models\Transcript;
use App\Support\LocalWhisperTranscriber;
use App\Support\MockTranscriptFactory;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Storage;
use OpenAI\Laravel\Facades\OpenAI;
class TranscribeFileJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(protected Transcript $transcript)
{
}
public function handle(LocalWhisperTranscriber $localWhisperTranscriber)
{
$transcriptDisk = config('writeout.transcript_disk');
$driver = config('writeout.transcription_driver');
$this->transcript->update([
'status' => TranscriptStatus::TRANSCRIBING,
]);
try {
if ($driver === 'mock') {
$transcriptionResults = [
'language' => 'English',
'duration' => 14,
'transcript' => MockTranscriptFactory::makeVtt($this->transcript),
];
} elseif ($driver === 'local_whisper') {
$transcriptionResults = $localWhisperTranscriber->transcribe($this->transcript);
} else {
$openAiResults = OpenAI::audio()->transcribe([
'model' => 'whisper-1',
'file' => fopen(storage_path('app/'.$this->transcript->hash), 'r'),
'prompt' => $this->transcript->prompt,
'temperature' => 0.2,
'response_format' => 'vtt',
]);
$transcriptionResults = [
'language' => $openAiResults->language,
'duration' => $openAiResults->duration,
'transcript' => $openAiResults->text,
];
}
$this->transcript->update([
'source_language' => $transcriptionResults['language'],
'status' => TranscriptStatus::COMPLETED,
'duration' => $transcriptionResults['duration'],
'transcript' => $transcriptionResults['transcript'],
'error' => null,
]);
} catch (\Throwable $e) {
report($e);
Storage::disk($transcriptDisk)->delete($this->transcript->hash);
$this->transcript->update([
'status' => TranscriptStatus::FAILED,
'error' => $e->getMessage(),
]);
}
Storage::disk('local')->delete($this->transcript->hash);
}
}