From 462b762ab6fb5c521c359eb02827c95dcb290356 Mon Sep 17 00:00:00 2001 From: Beingpax Date: Sun, 23 Mar 2025 11:09:37 +0545 Subject: [PATCH] Added support for popular languages whisper prompt --- VoiceInk/Whisper/LibWhisper.swift | 6 ++-- VoiceInk/Whisper/WhisperPrompt.swift | 51 +++++++++++++++++++++++++--- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/VoiceInk/Whisper/LibWhisper.swift b/VoiceInk/Whisper/LibWhisper.swift index b57e445..38f8976 100644 --- a/VoiceInk/Whisper/LibWhisper.swift +++ b/VoiceInk/Whisper/LibWhisper.swift @@ -53,13 +53,13 @@ actor WhisperContext { logger.notice("🌐 Using auto language detection") } - // Only use prompt for English language - if selectedLanguage == "en" && prompt != nil { + // Use prompt for all languages + if prompt != nil { promptCString = Array(prompt!.utf8CString) params.initial_prompt = promptCString?.withUnsafeBufferPointer { ptr in ptr.baseAddress } - logger.notice("💬 Using prompt for transcription") + logger.notice("💬 Using prompt for transcription in language: \(selectedLanguage)") } else { promptCString = nil params.initial_prompt = nil diff --git a/VoiceInk/Whisper/WhisperPrompt.swift b/VoiceInk/Whisper/WhisperPrompt.swift index 3f9b3f8..6afee73 100644 --- a/VoiceInk/Whisper/WhisperPrompt.swift +++ b/VoiceInk/Whisper/WhisperPrompt.swift @@ -7,10 +7,46 @@ class WhisperPrompt: ObservableObject { private var dictionaryWords: [String] = [] private let saveKey = "CustomDictionaryItems" - private let basePrompt = """ - Hey, How are you doing? Are you good? It's nice to meet after so long. - - """ + // Language-specific base prompts + private let languagePrompts: [String: String] = [ + // English + "en": "Hey, How are you doing? Are you good? It's nice to meet after so long.", + + // Asian Languages + "hi": "नमस्ते, कैसे हैं आप? सब ठीक है? इतने समय बाद मिलकर बहुत अच्छा लगा।", + "bn": "নমস্কার, কেমন আছেন? সব ঠিক আছে? এত দিন পর দেখা হয়ে খুব ভালো লাগছে।", + "ja": "こんにちは、お元気ですか?調子はいかがですか?久しぶりにお会いできて嬉しいです。", + "ko": "안녕하세요, 잘 지내시나요? 괜찮으신가요? 오랜만에 만나서 반갑습니다.", + "zh": "你好,最近好吗?你还好吗?好久不见了,很高兴见到你。", + "th": "สวัสดีครับ/ค่ะ สบายดีไหม? เป็นอย่างไรบ้าง? ดีใจที่ได้เจอกันหลังจากนานมาก", + "vi": "Xin chào, bạn khỏe không? Dạo này bạn thế nào? Rất vui được gặp lại bạn sau thời gian dài.", + + // European Languages + "es": "¡Hola! ¿Cómo estás? ¿Todo bien? ¡Qué gusto verte después de tanto tiempo!", + "fr": "Bonjour! Comment allez-vous? Vous vous portez bien? C'est un plaisir de vous revoir après si longtemps!", + "de": "Hallo! Wie geht es dir? Alles in Ordnung? Schön, dich nach so langer Zeit wiederzusehen!", + "it": "Ciao! Come stai? Tutto bene? È bello rivederti dopo tanto tempo!", + "pt": "Olá! Como você está? Tudo bem? É muito bom te ver depois de tanto tempo!", + "ru": "Здравствуйте! Как у вас дела? Всё хорошо? Приятно встретиться после долгого времени!", + "pl": "Cześć! Jak się masz? Wszystko w porządku? Miło cię widzieć po tak długim czasie!", + "nl": "Hallo! Hoe gaat het met je? Alles goed? Fijn om je na zo'n lange tijd weer te zien!", + "tr": "Merhaba! Nasılsın? İyi misin? Uzun zaman sonra görüşmek çok güzel!", + + // Middle Eastern Languages + "ar": "مرحباً! كيف حالك؟ هل أنت بخير؟ من الجميل أن نلتقي بعد كل هذا الوقت!", + "fa": "سلام! حال شما چطور است؟ خوب هستید؟ خیلی خوشحالم که بعد از مدت‌ها می‌بینمتان!", + "he": "!שלום! מה שלומך? הכל בסדר? כל כך נעים לראות אותך אחרי זמן רב", + + // South Asian Languages + "ta": "வணக்கம், எப்படி இருக்கிறீர்கள்? நலமா? நீண்ட நாட்களுக்குப் பிறகு சந்திப்பது மகிழ்ச்சியாக இருக்கிறது.", + "te": "నమస్కారం, ఎలా ఉన్నారు? బాగున్నారా? ఇంత కాలం తర్వాత కలుసుకోవడం చాలా సంతోషంగా ఉంది.", + "ml": "നമസ്കാരം, സുഖമാണോ? എല്ലാം ശരിയാണോ? ഇത്രയും കാലത്തിനു ശേഷം കാണുന്നതിൽ സന്തോഷം.", + "kn": "ನಮಸ್ಕಾರ, ಹೇಗಿದ್ದೀರಾ? ಎಲ್ಲಾ ಚೆನ್ನಾಗಿದೆಯಾ? ಇಷ್ಟು ದಿನಗಳ ನಂತರ ನಿಮ್ಮನ್ನು ನೋಡಿ ತುಂಬಾ ಸಂತೋಷವಾಗಿದೆ.", + "ur": "السلام علیکم! کیسے ہیں آپ؟ سب ٹھیک ہے؟ اتنے عرصے بعد آپ سے مل کر بہت خوشی ہوئی۔", + + // Default prompt for unsupported languages + "default": "Hello. How are you? Nice to meet you after so long." + ] init() { loadDictionaryItems() @@ -33,11 +69,18 @@ class WhisperPrompt: ObservableObject { } private func updateTranscriptionPrompt() { + // Get the currently selected language from UserDefaults + let selectedLanguage = UserDefaults.standard.string(forKey: "SelectedLanguage") ?? "en" + + // Get the appropriate base prompt for the selected language + let basePrompt = languagePrompts[selectedLanguage] ?? languagePrompts["default"]! + var prompt = basePrompt var allWords = ["VoiceInk"] allWords.append(contentsOf: dictionaryWords) if !allWords.isEmpty { + // Keep Important words section in English for all languages prompt += "\nImportant words: " + allWords.joined(separator: ", ") }