Skip to content

Commit

Permalink
Merge branch 'main' into feat/ollama-support
Browse files Browse the repository at this point in the history
  • Loading branch information
Taewan-P authored Oct 6, 2024
2 parents 8f5878d + ff53645 commit d24280e
Show file tree
Hide file tree
Showing 9 changed files with 300 additions and 15 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/debug-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}

- name: Setup JDK
uses: actions/setup-java@v4
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package dev.chungjungsoo.gptmobile.data

import dev.chungjungsoo.gptmobile.data.model.ApiType

object ModelConstants {
// LinkedHashSet should be used to guarantee item order
val openaiModels = linkedSetOf("gpt-4o", "gpt-4-turbo", "gpt-4", "gpt-3.5-turbo")
Expand All @@ -11,6 +13,12 @@ object ModelConstants {
const val ANTHROPIC_API_URL = "https://api.anthropic.com"
const val GOOGLE_API_URL = "https://generativelanguage.googleapis.com"

fun getDefaultAPIUrl(apiType: ApiType) = when (apiType) {
ApiType.OPENAI -> OPENAI_API_URL
ApiType.ANTHROPIC -> ANTHROPIC_API_URL
ApiType.GOOGLE -> GOOGLE_API_URL
}

const val ANTHROPIC_MAXIMUM_TOKEN = 4096

const val OPENAI_PROMPT =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package dev.chungjungsoo.gptmobile.data.dto

import dev.chungjungsoo.gptmobile.data.ModelConstants.getDefaultAPIUrl
import dev.chungjungsoo.gptmobile.data.model.ApiType

data class Platform(
val name: ApiType,
val selected: Boolean = false,
val enabled: Boolean = false,
val apiUrl: String = "",
val apiUrl: String = getDefaultAPIUrl(name),
val token: String? = null,
val model: String? = null,
val temperature: Float? = null,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.chungjungsoo.gptmobile.presentation.ui.setting

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.widthIn
Expand All @@ -27,6 +28,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.DialogProperties
import dev.chungjungsoo.gptmobile.R
import dev.chungjungsoo.gptmobile.data.ModelConstants.anthropicModels
import dev.chungjungsoo.gptmobile.data.ModelConstants.getDefaultAPIUrl
import dev.chungjungsoo.gptmobile.data.ModelConstants.googleModels
import dev.chungjungsoo.gptmobile.data.ModelConstants.ollamaModels
import dev.chungjungsoo.gptmobile.data.ModelConstants.openaiModels
Expand All @@ -45,17 +47,25 @@ import kotlin.math.roundToInt
fun APIUrlDialog(
dialogState: SettingViewModel.DialogState,
apiType: ApiType,
initialValue: String,
settingViewModel: SettingViewModel
) {
if (dialogState.isApiUrlDialogOpen) {
APIUrlDialog(
apiType = apiType,
onDismissRequest = settingViewModel::closeApiUrlDialog
) { apiUrl ->
settingViewModel.updateURL(apiType, apiUrl)
settingViewModel.savePlatformSettings()
settingViewModel.closeApiUrlDialog()
}
initialValue = initialValue,
onDismissRequest = settingViewModel::closeApiUrlDialog,
onResetRequest = {
settingViewModel.updateURL(apiType, getDefaultAPIUrl(apiType))
settingViewModel.savePlatformSettings()
settingViewModel.closeApiUrlDialog()
},
onConfirmRequest = { apiUrl ->
settingViewModel.updateURL(apiType, apiUrl)
settingViewModel.savePlatformSettings()
settingViewModel.closeApiUrlDialog()
}
)
}
}

Expand Down Expand Up @@ -159,10 +169,12 @@ fun SystemPromptDialog(
@Composable
private fun APIUrlDialog(
apiType: ApiType,
initialValue: String,
onDismissRequest: () -> Unit,
onResetRequest: () -> Unit,
onConfirmRequest: (url: String) -> Unit
) {
var apiUrl by remember { mutableStateOf("") }
var apiUrl by remember { mutableStateOf(initialValue) }
val configuration = LocalConfiguration.current

AlertDialog(
Expand All @@ -175,7 +187,7 @@ private fun APIUrlDialog(
.fillMaxWidth()
.padding(horizontal = 20.dp, vertical = 16.dp),
value = apiUrl,
isError = apiUrl.isValidUrl(),
isError = apiUrl.isValidUrl().not(),
onValueChange = { apiUrl = it },
label = {
Text(stringResource(R.string.api_url))
Expand All @@ -197,10 +209,16 @@ private fun APIUrlDialog(
}
},
dismissButton = {
TextButton(
onClick = onDismissRequest
) {
Text(stringResource(R.string.cancel))
Row {
TextButton(
modifier = Modifier.padding(end = 8.dp),
onClick = onResetRequest
) {
Text(stringResource(R.string.reset))
}
TextButton(onClick = onDismissRequest) {
Text(stringResource(R.string.cancel))
}
}
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ fun PlatformSettingScreen(
.verticalScroll(scrollState)
) {
val platform = platformState.firstOrNull { it.name == apiType }
val url = platform?.apiUrl ?: ModelConstants.getDefaultAPIUrl(apiType)
val enabled = platform?.enabled ?: false
val model = platform?.model
val token = platform?.token
Expand All @@ -99,7 +100,7 @@ fun PlatformSettingScreen(
SettingItem(
modifier = Modifier.height(64.dp),
title = stringResource(R.string.api_url),
description = "",
description = url,
enabled = enabled && platform?.name != ApiType.GOOGLE,
onItemClick = settingViewModel::openApiUrlDialog,
showTrailingIcon = false,
Expand Down Expand Up @@ -187,6 +188,7 @@ fun PlatformSettingScreen(
}
)

APIUrlDialog(dialogState, apiType, url, settingViewModel)
APIKeyDialog(dialogState, apiType, settingViewModel)
ModelDialog(dialogState, apiType, model, settingViewModel)
TemperatureDialog(dialogState, apiType, temperature, settingViewModel)
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-ko-rKR/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,5 @@
<string name="select_ollama_model">Ollama 모델 선택</string>
<string name="ollama_setting">Ollama 설정</string>
<string name="select_ollama_model_description">Ollama 모델을 선택해 주세요. 현재 Ollama에서 지원하는 모델과 태그가 너무 많으므로, 직접 모델 값을 설정할 수도 있습니다. 입력한 Endpoint에서 해당 모델이 실행되고 있는지 꼭 확인해주세요. 실행되고 있지 않은 모델을 입력시, 답변 생성 시에 오류가 발생할 수 있습니다.</string>
<string name="reset">초기화</string>
</resources>
140 changes: 140 additions & 0 deletions app/src/main/res/values-tr/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
<resources>
<string name="app_name">GPTMobil</string>
<string name="gpt_mobile_introduction_logo">GPT Mobil Tanıtım Logosu</string>
<string name="welcome_title">Akıllı telefonunuzdaki\nen iyi yapay zeka\nasistanı.</string>
<string name="welcome_description">Size en uygun modeli\nkullanın. İstediğiniz her şeyi sorun!</string>
<string name="get_started">Başlayın</string>
<string name="platform_select_description">Kullanmak istediğiniz platformu seçin. Bu ayarı daha sonra değiştirebilirsiniz. Daha fazla platform desteklenecek.</string>
<string name="sample_item_title">Öğe 1</string>
<string name="sample_item_description">Öğe açıklaması</string>
<string name="openai" translatable="false">OpenAI</string>
<string name="anthropic" translatable="false">Anthropic</string>
<string name="google" translatable="false">Google</string>
<string name="openai_description">ChatGPT\'nin yaratıcısı.</string>
<string name="anthropic_description">Claude burada doğdu.</string>
<string name="google_description">Gemini yolda.</string>
<string name="next">İleri</string>
<string name="enter_api_key">API Anahtarını Girin</string>
<string name="token_input_description">Seçtiğiniz platformun API Anahtarını girin. Bu uygulama bu verileri toplamaz. Bu anahtarlar ve sohbet verileri yalnızca cihazınızda saklanır ve API uç noktaları dışında diğer sunuculara gönderilmez.</string>
<string name="clear_token">Anahtarı temizle</string>
<string name="need_help">Yardıma mı ihtiyacınız var?</string>
<string name="openai_api_key">OpenAI API Anahtarı</string>
<string name="anthropic_api_key">Anthropic API Anahtarı</string>
<string name="google_api_key">Google API Anahtarı</string>
<string name="openai_api_help" translatable="false">https://platform.openai.com/account/api-keys</string>
<string name="anthropic_api_help" translatable="false">https://console.anthropic.com/settings/keys</string>
<string name="google_api_help" translatable="false">https://aistudio.google.com/app/apikey</string>
<string name="select_openai_model">OpenAI Sohbet Modelini Seçin</string>
<string name="select_openai_model_description">Lütfen OpenAI sohbet modelini seçin. Seçilen model çok modlu olsa bile, uygulama şu anda yalnızca metin girişlerini desteklemektedir. Gelecekte desteklenebilir.</string>
<string name="gpt_4o" translatable="false">GPT-4o</string>
<string name="gpt_4_turbo" translatable="false">GPT-4 Turbo</string>
<string name="gpt_4" translatable="false">GPT-4</string>
<string name="gpt_3_5_turbo" translatable="false">GPT-3.5 Turbo</string>
<string name="gpt_4o_description">En hızlı ve en uygun fiyatlı amiral gemisi modeli.</string>
<string name="gpt_4_turbo_description">Güvenilirlik, GPT-4\'ten 3 kat daha ucuz.</string>
<string name="gpt_4_description">Soyut problemleri çözmede en iyi performansı gösterir.</string>
<string name="gpt_3_5_description">Basit görevler için hızlı ve uygun fiyatlı bir model.</string>
<string name="select_anthropic_model">Anthropic Sohbet Modelini Seçin</string>
<string name="select_anthropic_model_description">Lütfen Anthropic sohbet modelini seçin. Şu anda yalnızca Claude 3 ailesi metin girişlerini destekliyor.</string>
<string name="claude_3_5_sonnet" translatable="false">Claude 3.5 Sonnet</string>
<string name="claude_3_opus" translatable="false">Claude 3 Opus</string>
<string name="claude_3_sonnet" translatable="false">Claude 3 Sonnet</string>
<string name="claude_3_haiku" translatable="false">Claude 3 Haiku</string>
<string name="claude_3_5_sonnet_description">Anthropic\'in en zeki modeli.</string>
<string name="claude_3_opus_description">Yazım ve karmaşık görevlerde mükemmel.</string>
<string name="claude_3_sonnet_description">Zeka ve hız arasında dengeli bir model.</string>
<string name="claude_3_haiku_description">Anthropic\'in en hızlı ve en kompakt modeli.</string>
<string name="select_google_model">Google Sohbet Modelini Seçin</string>
<string name="select_google_model_description">Gemini, Google tarafından oluşturulmuş jeneratif AI model ailesidir. Yalnızca metin girişleri desteklenir.</string>
<string name="gemini_1_5_pro" translatable="false">Gemini 1.5 Pro</string>
<string name="gemini_1_5_flash" translatable="false">Gemini 1.5 Flash</string>
<string name="gemini_1_0_pro" translatable="false">Gemini 1.0 Pro</string>
<string name="gemini_1_5_pro_description">Kod ve metin üretimi de dahil olmak üzere muhakeme görevleri için optimize edilmiştir.</string>
<string name="gemini_1_5_flash_description">Çeşitli görevlerde hızlı ve çok yönlü performans.</string>
<string name="gemini_1_0_pro_description">Doğal dil görevleri, çoklu metin ve kod sohbetleri ve kod üretimi.</string>
<string name="setup_complete">Her şey hazır!</string>
<string name="setup_complete_description">Haydi GPT Mobil\'i kullanmaya başlayalım!</string>
<string name="done">Tamamlandı</string>
<string name="setup_complete_logo">Kurulum Tamamlandı Logosu</string>
<string name="chats">Sohbetler</string>
<string name="settings">Ayarlar</string>
<string name="new_chat">Yeni Sohbet</string>
<string name="select_platform">Platform Seçin</string>
<string name="select_platform_description">Bu sohbette kullanmak istediğiniz platformları seçin. Sohbet oluşturulduktan sonra bu ayarı değiştiremezsiniz. Bunu değiştirmek isterseniz, lütfen yeni bir sohbet oluşturun.</string>
<string name="enable_at_leat_one_platform">Sohbet oluşturmak için lütfen en az bir platformu etkinleştirin.</string>
<string name="chat_icon">Sohbet Simgesi</string>
<string name="using_certain_platform">%s kullanılıyor</string>
<string name="confirm">Onayla</string>
<string name="cancel">İptal</string>
<string name="go_back">Geri dön</string>
<string name="arrow_icon">Ok Simgesi</string>
<string name="on">Açık</string>
<string name="off">Kapalı</string>
<string name="system_default">Sistem Varsayılanı</string>
<string name="theme_settings">Tema Ayarları</string>
<string name="supported_soon">Yakında Desteklenecek</string>
<string name="theme_description">Dinamik tema, Karanlık mod</string>
<string name="openai_setting">OpenAI Ayarları</string>
<string name="anthropic_setting">Anthropic Ayarları</string>
<string name="google_setting">Google Ayarları</string>
<string name="platform_setting_description">API Anahtarı, Model, Sistem İsteği</string>
<string name="enable_api">API\'yi Etkinleştir</string>
<string name="api_key">API Anahtarı</string>
<string name="api_model">API Modeli</string>
<string name="dynamic_theme">Dinamik Tema</string>
<string name="dark_mode">Karanlık Mod</string>
<string name="key_icon">Anahtar Simgesi</string>
<string name="model_icon">Model Simgesi</string>
<string name="send">Gönder</string>
<string name="copy_text">Metni Kopyala</string>
<string name="retry">Yeniden Dene</string>
<string name="ask_a_question">Bir soru sorun…</string>
<string name="some_platforms_disabled">Bazı API\'ler devre dışı</string>
<string name="openai_brand_text" translatable="false">OpenAI tarafından desteklenmektedir</string>
<string name="anthropic_brand_text" translatable="false">Claude tarafından desteklenmektedir</string>
<string name="google_brand_text" translatable="false">Gemini tarafından desteklenmektedir</string>
<string name="token_not_set">Token ayarlanmadı</string>
<string name="token_set">Token şu şekilde ayarlandı: %s*****</string>
<string name="close">Kapat</string>
<string name="delete">Sil</string>
<string name="chats_selected">%d seçildi</string>
<string name="deleted_chats">%d sohbet silindi.</string>
<string name="delete_selected_chats">Seçilen sohbetleri silmek istiyor musunuz?</string>
<string name="this_operation_can_t_be_undone">Bu işlem geri alınamaz.</string>
<string name="system_prompt">Sistem İsteği</string>
<string name="temperature">Sıcaklık</string>
<string name="top_p">Nükleus örnekleme (Top p)</string>
<string name="system_prompt_setting">Sistem İsteği Ayarı</string>
<string name="system_prompt_description">Bir sistem isteği, yapay zeka modellerine kullanıcı sorgularıyla etkileşime geçmeden önce verilen talimatlar, yönergeler ve bağlamsal bilgilerdir.</string>
<string name="temperature_icon">Sıcaklık Simgesi</string>
<string name="top_p_icon">Nükleus örnekleme simgesi</string>
<string name="system_prompt_icon">Sistem İsteği Simgesi</string>
<string name="temperature_setting">Sıcaklık Ayarı</string>
<string name="temperature_setting_description">Sıcaklık, yanıta rastgelelik ekleyen bir değişkendir. Genellikle varsayılan olarak 1.0\'dır.\nDaha odaklı ve belirleyici cevaplar için düşük sıcaklık, rastgele cevaplar için yüksek sıcaklık ayarlayın.</string>
<string name="top_p_setting">Nükleus Örnekleme Ayarı</string>
<string name="top_p_setting_description">Nükleus örnekleme sırasında, azalan olasılık sırasına göre her bir sonraki token için tüm seçenekler üzerinde kümülatif dağılım hesaplanır ve bu değere göre belirli bir olasılığa ulaştığında kesilir.\nÇoğu model genellikle bu ayar ile sıcaklık arasında bir değişiklik önerir ancak ikisini birden değil.</string>
<string name="about">Hakkında</string>
<string name="about_description">Sürüm, Lisans, Geri Bildirim</string>
<string name="version">Sürüm</string>
<string name="license">Lisans</string>
<string name="github" translatable="false">GitHub</string>
<string name="f_droid" translatable="false">F-Droid</string>
<string name="play_store" translatable="false">Play Store</string>
<string name="feedback">Geri Bildirim</string>
<string name="license_description">Açık Kaynak Lisansları</string>
<string name="feedback_description">Her türlü geri bildirime açığız!</string>
<string name="version_icon">Sürüm Simgesi</string>
<string name="license_icon">Lisans Simgesi</string>
<string name="feedback_icon">Geri Bildirim Simgesi</string>
<string name="github_icon">GitHub Simgesi</string>
<string name="f_droid_icon">F-Droid Simgesi</string>
<string name="play_store_icon">Play Store Simgesi</string>
<string name="github_link" translatable="false">https://github.com/Taewan-P/gpt_mobile</string>
<string name="f_droid_link" translatable="false">https://f-droid.org/packages/dev.chungjungsoo.gptmobile/</string>
<string name="play_store_link" translatable="false">https://play.google.com/store/apps/details?id=dev.chungjungsoo.gptmobile</string>
<string name="feedback_link" translatable="false">https://github.com/Taewan-P/gpt_mobile/issues/new</string>
<string name="api_url">API URL\'si</string>
<string name="url_icon">URL Simgesi</string>
<string name="invalid_api_url">Lütfen geçerli bir URL girin.</string>
<string name="reset">Sıfırla</string>
</resources>
Loading

0 comments on commit d24280e

Please sign in to comment.