Files

1 line
23 KiB
JSON

{"repo": "amgadghozzy/lingolens", "files": {"core/data/src/main/java/com/venom/data/repo/OnlineTranslationRepositoryImpl.kt": {"ae48a10d46f56e83063449043157dbcd63d7733f": {"t": 1785745732.5097635, "n": 7360, "h": "7ea43cc816721cad", "c": "package com.venom.data.repo\n\nimport com.venom.data.BuildConfig\nimport com.venom.data.api.ChatGPTMessage\nimport com.venom.data.api.ChatGPTRequestBody\nimport com.venom.data.api.ChatGPTService\nimport com.venom.data.api.DeepSeekMessage\nimport com.venom.data.api.DeepSeekRequestBody\nimport com.venom.data.api.DeepSeekService\nimport com.venom.data.api.GeminiContent\nimport com.venom.data.api.GeminiPart\nimport com.venom.data.api.GeminiRequest\nimport com.venom.data.api.GeminiService\nimport com.venom.data.api.GoogleTranslateService\nimport com.venom.data.api.GroqMessage\nimport com.venom.data.api.GroqRequestBody\nimport com.venom.data.api.GroqService\nimport com.venom.data.api.HuggingFaceParameters\nimport com.venom.data.api.HuggingFaceRequestBody\nimport com.venom.data.api.HuggingFaceService\nimport com.venom.data.mapper.TranslateMapper\nimport com.venom.domain.model.TranslationResult\nimport com.venom.domain.repo.IOnlineTranslation\nimport com.venom.utils.Extensions.preprocessText\nimport kotlinx.coroutines.delay\nimport retrofit2.HttpException\nimport java.io.IOException\nimport java.net.SocketTimeoutException\nimport javax.inject.Inject\n\nclass OnlineTranslationRepositoryImpl @Inject constructor(\n private val translationService: GoogleTranslateService,\n private val chatGPTService: ChatGPTService,\n private val geminiService: GeminiService,\n private val groqService: GroqService,\n private val deepSeekService: DeepSeekService,\n private val huggingFaceService: HuggingFaceService\n) : IOnlineTranslation {\n\n override suspend fun getGoogleTranslation(source: String, target: String, query: String): TranslationResult {\n return safeCall {\n val response = translationService.translateWithGoogle(\n sourceLanguage = source,\n targetLanguage = target,\n query = query.preprocessText()\n )\n val result = TranslateMapper.mapGoogleResponseToTranslationResult(response, query)\n result.copy(\n sourceLang = source,\n targetLang = target,\n providerId = \"google\"\n )\n }\n }\n\n override suspend fun getChatGPTTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = ChatGPTRequestBody(\n messages = listOf(\n ChatGPTMessage(\"system\", \"You are a professional translation assistant.\"),\n ChatGPTMessage(\"user\", prompt)\n )\n )\n return safeCall {\n val response = chatGPTService.translate(BuildConfig.OPENAI_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.choices?.firstOrNull()?.message?.content,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"chatgpt\"\n )\n }\n }\n\n override suspend fun getGeminiTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = GeminiRequest(contents = listOf(GeminiContent(parts = listOf(GeminiPart(text = prompt)))))\n return safeCall {\n val response = geminiService.generate(GeminiService.FLASH_MODEL, BuildConfig.GEMINI_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.candidates.firstOrNull()?.content?.parts?.firstOrNull()?.text,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"gemini\"\n )\n }\n }\n\n override suspend fun getGroqTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = GroqRequestBody(\n messages = listOf(\n GroqMessage(\"system\", \"You are a professional translation assistant.\"),\n GroqMessage(\"user\", prompt)\n )\n )\n return safeCall {\n val response = groqService.translate(BuildConfig.GROQ_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.choices?.firstOrNull()?.message?.content,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"groq\"\n )\n }\n }\n\n override suspend fun getDeepSeekTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = DeepSeekRequestBody(\n messages = listOf(\n DeepSeekMessage(\"system\", \"You are a professional translation assistant.\"),\n DeepSeekMessage(\"user\", prompt)\n )\n )\n return safeCall {\n val response = deepSeekService.translate(BuildConfig.DEEPSEEK_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.choices?.firstOrNull()?.message?.content,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"deepseek\"\n )\n }\n }\n\n override suspend fun getHuggingFaceTranslation(source: String, target: String, query: String): TranslationResult {\n val request = HuggingFaceRequestBody(\n inputs = query,\n parameters = HuggingFaceParameters(\n srcLang = mapLanguageCode(source),\n tgtLang = mapLanguageCode(target)\n )\n )\n return safeCall {\n val response = huggingFaceService.translate(HuggingFaceService.getModelUrl(), BuildConfig.HUGGINGFACE_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.firstOrNull()?.translationText,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"huggingface\"\n )\n }\n }\n\n private suspend fun <T> safeCall(call: suspend () -> T): T {\n repeat(3) { attempt ->\n try {\n return call()\n } catch (e: Exception) {\n if (!shouldRetry(e) || attempt == 2) throw e\n delay(1000L * (attempt + 1))\n }\n }\n throw Exception(\"Max retries exceeded\")\n }\n\n private fun shouldRetry(e: Exception): Boolean = when (e) {\n is SocketTimeoutException, is IOException -> true\n is HttpException -> e.code() >= 500\n else -> false\n }\n\n private fun buildPrompt(source: String, target: String, query: String): String =\n \"Translate from $source to $target: \\\"$query\\\". Only provide the translation.\"\n\n private fun mapLanguageCode(code: String): String = when (code.lowercase()) {\n \"en\", \"au\" -> \"en_XX\"\n \"ar\" -> \"ar_AR\"\n \"es\" -> \"es_XX\"\n \"fr\" -> \"fr_XX\"\n \"de\" -> \"de_DE\"\n \"it\" -> \"it_IT\"\n \"pt\" -> \"pt_XX\"\n \"ru\" -> \"ru_RU\"\n \"ja\" -> \"ja_XX\"\n \"ko\" -> \"ko_KR\"\n \"zh\" -> \"zh_CN\"\n \"hi\" -> \"hi_IN\"\n else -> \"en_XX\"\n }\n}"}, "e8f6a578a4ded51a424bda5431ced356f38f7f01": {"t": 1785755971.043262, "n": 7360, "h": "7ea43cc816721cad", "c": "package com.venom.data.repo\n\nimport com.venom.data.BuildConfig\nimport com.venom.data.api.ChatGPTMessage\nimport com.venom.data.api.ChatGPTRequestBody\nimport com.venom.data.api.ChatGPTService\nimport com.venom.data.api.DeepSeekMessage\nimport com.venom.data.api.DeepSeekRequestBody\nimport com.venom.data.api.DeepSeekService\nimport com.venom.data.api.GeminiContent\nimport com.venom.data.api.GeminiPart\nimport com.venom.data.api.GeminiRequest\nimport com.venom.data.api.GeminiService\nimport com.venom.data.api.GoogleTranslateService\nimport com.venom.data.api.GroqMessage\nimport com.venom.data.api.GroqRequestBody\nimport com.venom.data.api.GroqService\nimport com.venom.data.api.HuggingFaceParameters\nimport com.venom.data.api.HuggingFaceRequestBody\nimport com.venom.data.api.HuggingFaceService\nimport com.venom.data.mapper.TranslateMapper\nimport com.venom.domain.model.TranslationResult\nimport com.venom.domain.repo.IOnlineTranslation\nimport com.venom.utils.Extensions.preprocessText\nimport kotlinx.coroutines.delay\nimport retrofit2.HttpException\nimport java.io.IOException\nimport java.net.SocketTimeoutException\nimport javax.inject.Inject\n\nclass OnlineTranslationRepositoryImpl @Inject constructor(\n private val translationService: GoogleTranslateService,\n private val chatGPTService: ChatGPTService,\n private val geminiService: GeminiService,\n private val groqService: GroqService,\n private val deepSeekService: DeepSeekService,\n private val huggingFaceService: HuggingFaceService\n) : IOnlineTranslation {\n\n override suspend fun getGoogleTranslation(source: String, target: String, query: String): TranslationResult {\n return safeCall {\n val response = translationService.translateWithGoogle(\n sourceLanguage = source,\n targetLanguage = target,\n query = query.preprocessText()\n )\n val result = TranslateMapper.mapGoogleResponseToTranslationResult(response, query)\n result.copy(\n sourceLang = source,\n targetLang = target,\n providerId = \"google\"\n )\n }\n }\n\n override suspend fun getChatGPTTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = ChatGPTRequestBody(\n messages = listOf(\n ChatGPTMessage(\"system\", \"You are a professional translation assistant.\"),\n ChatGPTMessage(\"user\", prompt)\n )\n )\n return safeCall {\n val response = chatGPTService.translate(BuildConfig.OPENAI_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.choices?.firstOrNull()?.message?.content,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"chatgpt\"\n )\n }\n }\n\n override suspend fun getGeminiTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = GeminiRequest(contents = listOf(GeminiContent(parts = listOf(GeminiPart(text = prompt)))))\n return safeCall {\n val response = geminiService.generate(GeminiService.FLASH_MODEL, BuildConfig.GEMINI_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.candidates.firstOrNull()?.content?.parts?.firstOrNull()?.text,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"gemini\"\n )\n }\n }\n\n override suspend fun getGroqTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = GroqRequestBody(\n messages = listOf(\n GroqMessage(\"system\", \"You are a professional translation assistant.\"),\n GroqMessage(\"user\", prompt)\n )\n )\n return safeCall {\n val response = groqService.translate(BuildConfig.GROQ_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.choices?.firstOrNull()?.message?.content,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"groq\"\n )\n }\n }\n\n override suspend fun getDeepSeekTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = DeepSeekRequestBody(\n messages = listOf(\n DeepSeekMessage(\"system\", \"You are a professional translation assistant.\"),\n DeepSeekMessage(\"user\", prompt)\n )\n )\n return safeCall {\n val response = deepSeekService.translate(BuildConfig.DEEPSEEK_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.choices?.firstOrNull()?.message?.content,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"deepseek\"\n )\n }\n }\n\n override suspend fun getHuggingFaceTranslation(source: String, target: String, query: String): TranslationResult {\n val request = HuggingFaceRequestBody(\n inputs = query,\n parameters = HuggingFaceParameters(\n srcLang = mapLanguageCode(source),\n tgtLang = mapLanguageCode(target)\n )\n )\n return safeCall {\n val response = huggingFaceService.translate(HuggingFaceService.getModelUrl(), BuildConfig.HUGGINGFACE_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.firstOrNull()?.translationText,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"huggingface\"\n )\n }\n }\n\n private suspend fun <T> safeCall(call: suspend () -> T): T {\n repeat(3) { attempt ->\n try {\n return call()\n } catch (e: Exception) {\n if (!shouldRetry(e) || attempt == 2) throw e\n delay(1000L * (attempt + 1))\n }\n }\n throw Exception(\"Max retries exceeded\")\n }\n\n private fun shouldRetry(e: Exception): Boolean = when (e) {\n is SocketTimeoutException, is IOException -> true\n is HttpException -> e.code() >= 500\n else -> false\n }\n\n private fun buildPrompt(source: String, target: String, query: String): String =\n \"Translate from $source to $target: \\\"$query\\\". Only provide the translation.\"\n\n private fun mapLanguageCode(code: String): String = when (code.lowercase()) {\n \"en\", \"au\" -> \"en_XX\"\n \"ar\" -> \"ar_AR\"\n \"es\" -> \"es_XX\"\n \"fr\" -> \"fr_XX\"\n \"de\" -> \"de_DE\"\n \"it\" -> \"it_IT\"\n \"pt\" -> \"pt_XX\"\n \"ru\" -> \"ru_RU\"\n \"ja\" -> \"ja_XX\"\n \"ko\" -> \"ko_KR\"\n \"zh\" -> \"zh_CN\"\n \"hi\" -> \"hi_IN\"\n else -> \"en_XX\"\n }\n}"}, "f3f0f77cc04a3c7460110ea8786d3af8fbb892cb": {"t": 1785755972.4662397, "n": 7361, "h": "b884b028d51dcae8", "c": "package com.venom.data.repo\n\nimport com.venom.data.BuildConfig\nimport com.venom.data.api.ChatGPTMessage\nimport com.venom.data.api.ChatGPTRequestBody\nimport com.venom.data.api.ChatGPTService\nimport com.venom.data.api.DeepSeekMessage\nimport com.venom.data.api.DeepSeekRequestBody\nimport com.venom.data.api.DeepSeekService\nimport com.venom.data.api.GeminiContent\nimport com.venom.data.api.GeminiPart\nimport com.venom.data.api.GeminiRequest\nimport com.venom.data.api.GeminiService\nimport com.venom.data.api.GoogleTranslateService\nimport com.venom.data.api.GroqMessage\nimport com.venom.data.api.GroqRequestBody\nimport com.venom.data.api.GroqService\nimport com.venom.data.api.HuggingFaceParameters\nimport com.venom.data.api.HuggingFaceRequestBody\nimport com.venom.data.api.HuggingFaceService\nimport com.venom.data.mapper.TranslateMapper\nimport com.venom.domain.model.TranslationResult\nimport com.venom.domain.repo.IOnlineTranslation\nimport com.venom.utils.Extensions.preprocessText\nimport kotlinx.coroutines.delay\nimport retrofit2.HttpException\nimport java.io.IOException\nimport java.net.SocketTimeoutException\nimport javax.inject.Inject\n\nclass OnlineTranslationRepositoryImpl @Inject constructor(\n private val translationService: GoogleTranslateService,\n private val chatGPTService: ChatGPTService,\n private val geminiService: GeminiService,\n private val groqService: GroqService,\n private val deepSeekService: DeepSeekService,\n private val huggingFaceService: HuggingFaceService\n) : IOnlineTranslation {\n\n override suspend fun getGoogleTranslation(source: String, target: String, query: String): TranslationResult {\n return safeCall {\n val response = translationService.translateWithGoogle(\n sourceLanguage = source,\n targetLanguage = target,\n query = query.preprocessText()\n )\n val result = TranslateMapper.mapGoogleResponseToTranslationResult(response, query)\n result.copy(\n sourceLang = source,\n targetLang = target,\n providerId = \"google\"\n )\n }\n }\n\n override suspend fun getChatGPTTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = ChatGPTRequestBody(\n messages = listOf(\n ChatGPTMessage(\"system\", \"You are a professional translation assistant.\"),\n ChatGPTMessage(\"user\", prompt)\n )\n )\n return safeCall {\n val response = chatGPTService.translate(BuildConfig.OPENAI_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.choices?.firstOrNull()?.message?.content,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"chatgpt\"\n )\n }\n }\n\n override suspend fun getGeminiTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = GeminiRequest(contents = listOf(GeminiContent(parts = listOf(GeminiPart(text = prompt)))))\n return safeCall {\n val response = geminiService.translate(GeminiService.FLASH_MODEL, BuildConfig.GEMINI_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.candidates.firstOrNull()?.content?.parts?.firstOrNull()?.text,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"gemini\"\n )\n }\n }\n\n override suspend fun getGroqTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = GroqRequestBody(\n messages = listOf(\n GroqMessage(\"system\", \"You are a professional translation assistant.\"),\n GroqMessage(\"user\", prompt)\n )\n )\n return safeCall {\n val response = groqService.translate(BuildConfig.GROQ_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.choices?.firstOrNull()?.message?.content,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"groq\"\n )\n }\n }\n\n override suspend fun getDeepSeekTranslation(source: String, target: String, query: String): TranslationResult {\n val prompt = buildPrompt(source, target, query)\n val request = DeepSeekRequestBody(\n messages = listOf(\n DeepSeekMessage(\"system\", \"You are a professional translation assistant.\"),\n DeepSeekMessage(\"user\", prompt)\n )\n )\n return safeCall {\n val response = deepSeekService.translate(BuildConfig.DEEPSEEK_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.choices?.firstOrNull()?.message?.content,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"deepseek\"\n )\n }\n }\n\n override suspend fun getHuggingFaceTranslation(source: String, target: String, query: String): TranslationResult {\n val request = HuggingFaceRequestBody(\n inputs = query,\n parameters = HuggingFaceParameters(\n srcLang = mapLanguageCode(source),\n tgtLang = mapLanguageCode(target)\n )\n )\n return safeCall {\n val response = huggingFaceService.translate(HuggingFaceService.DEFAULT_MODEL, BuildConfig.HUGGINGFACE_API_KEY, request)\n TranslateMapper.mapAIProviderResponse(\n translatedText = response.firstOrNull()?.translationText,\n sourceText = query,\n sourceLang = source,\n targetLang = target,\n providerId = \"huggingface\"\n )\n }\n }\n\n private suspend fun <T> safeCall(call: suspend () -> T): T {\n repeat(3) { attempt ->\n try {\n return call()\n } catch (e: Exception) {\n if (!shouldRetry(e) || attempt == 2) throw e\n delay(1000L * (attempt + 1))\n }\n }\n throw Exception(\"Max retries exceeded\")\n }\n\n private fun shouldRetry(e: Exception): Boolean = when (e) {\n is SocketTimeoutException, is IOException -> true\n is HttpException -> e.code() >= 500\n else -> false\n }\n\n private fun buildPrompt(source: String, target: String, query: String): String =\n \"Translate from $source to $target: \\\"$query\\\". Only provide the translation.\"\n\n private fun mapLanguageCode(code: String): String = when (code.lowercase()) {\n \"en\", \"au\" -> \"en_XX\"\n \"ar\" -> \"ar_AR\"\n \"es\" -> \"es_XX\"\n \"fr\" -> \"fr_XX\"\n \"de\" -> \"de_DE\"\n \"it\" -> \"it_IT\"\n \"pt\" -> \"pt_XX\"\n \"ru\" -> \"ru_RU\"\n \"ja\" -> \"ja_XX\"\n \"ko\" -> \"ko_KR\"\n \"zh\" -> \"zh_CN\"\n \"hi\" -> \"hi_IN\"\n else -> \"en_XX\"\n }\n}"}}}}