baseUrl = rtrim(config('speech2text.ollama.base_url'), '/'); $this->model = config('speech2text.ollama.model'); } /** * Clean and improve raw transcript text using a local Ollama model. * Returns corrected text, or null if Ollama is unavailable. */ public function cleanTranscript(string $rawText, string $language = 'ms'): ?string { $langLabel = $language === 'ms' ? 'Bahasa Melayu' : 'English'; $prompt = <<post("{$this->baseUrl}/api/generate", [ 'model' => $this->model, 'prompt' => $prompt, 'stream' => false, ]); if (! $response->successful()) { Log::warning("OllamaService: HTTP {$response->status()} dari {$this->baseUrl}"); return null; } $text = trim($response->json('response') ?? ''); return $text !== '' ? $text : null; } catch (\Throwable $e) { Log::warning("OllamaService tidak tersedia: {$e->getMessage()}"); return null; } } public function isAvailable(): bool { try { return Http::timeout(5)->get("{$this->baseUrl}/api/tags")->successful(); } catch (\Throwable) { return false; } } }