diff --git a/katrain/KataGo/analysis_config.cfg b/katrain/KataGo/analysis_config.cfg index 203b267..7d34321 100644 --- a/katrain/KataGo/analysis_config.cfg +++ b/katrain/KataGo/analysis_config.cfg @@ -1,11 +1,17 @@ # Example config for C++ (non-python) gtp bot # SEE NOTES ABOUT PERFORMANCE AND MEMORY USAGE IN gtp_example.cfg +# SEE NOTES ABOUT numSearchThreads AND OTHER IMPORTANT PARAMS BELOW! # Logs------------------------------------------------------------------------------------ # Where to output log? logFile = "~/.katrain/katago_log.txt" +# logFile = analysis.log # Use this instead of logDir to just specify a single file directly +# logToStderr = true # Echo everything output to log file to stderr as well +# logAllRequests = false # Log all input lines received to the analysis engine. +# logAllResponses = false # Log all lines output to stdout from the analysis engine. +# logSearchInfo = false # Log debug info for every search performed # Controls the number of moves after the first move in a variation. # analysisPVLen = 15 @@ -47,20 +53,56 @@ maxVisits = 500 # If provided, cap search time at this many seconds # maxTime = 60 -# Number of threads to use in each search in parallel for any SINGLE position. -# NOTE: Analysis engine can specify number of POSITIONS to be able to search in parallel via command line argument -# so this number does not necessarily need to be larger than 1, although you can still set it larger if you prefer -# to analyze fewer positions in parallel but spend more threads on each position. -# Generally, having more threads on a single position will worsen the quality of search slightly, holding fixed the -# number of visits, and thread contention will reduce efficiency, so cross-position parallelization is preferable -# to numSearchThreads, but numSearchThreads is preferable if you want to reduce latency, and have individual -# searches complete faster by doing fewer of them at a time. -numSearchThreads = 6 -# GPU Settings------------------------------------------------------------------------------- +# numSearchThreads is the number of threads to use in each MCTS tree search in parallel for any individual position. +# But NOTE: Analysis engine also specifies max number of POSITIONS to be able to search in parallel via command line +# argument, -num-analysis-threads. + +# Parallelization across positions is more efficient since the threads on different positions operate +# on different MCTS trees so they don't have to synchronize with each other. Also, multiple threads on the same MCTS +# tree weakens the search (holding playouts fixed) due to out of date statistics on nodes and suboptimal exploration, +# although the loss is still quite small for only 2,4,8 threads. So you often want to keep numSearchThreads small, +# unlike in GTP. + +# But obviously you only get the benefit of parallelization across positions when you actually have lots of positions +# that you are querying at once. + +# Therefore: +# * If you plan to use the analysis engine only for batch processing large numbers of positions, +# it's preferable to set this to only a small number (e.g. 1,2,4) and use a higher -num-analysis-threads. +# * But if you sometimes plan to query the analysis engine for single positions, or otherwise in smaller quantities +# than -num-analysis-threads, or if you plan to be user-interactive such that the response time on some individual +# analysis requests is important to keep low, then set this to a larger number and use somewhat fewer analysis threads, +# That way, individual searches complete faster due to having more threads on each one and doing fewer other ones at a time. + +# For 19x19 boards, weaker GPUs probably want a TOTAL number of threads (numSearchThreads * num-analysis-threads) +# between 4 and 32. Mid-tier GPUs probably between 16 and 64. Strong GPUs probably between 32 and 256. +# But there's no substitute for experimenting and seeing what's best for your hardware and your usage case. +# Keep in mind that the number of threads you want doesn't necessarily have much to do with how many cores you +# have on your system, and could easily exceed the number of cores. GPU batching is (usually) the dominant consideration. +numSearchThreads = 10 + + +# nnMaxBatchSize is the max number of positions to send to a single GPU at once. Generally, it should be the case that: +# (number of GPUs you will use * nnMaxBatchSize) >= (numSearchThreads * num-analysis-threads) +# That way, when each threads tries to request a GPU eval, your batch size summed across GPUs is large enough to handle them +# all at once. However, it can be sensible to set this a little smaller if you are limited on GPU memory, +# too large a number may fail if the GPU doesn't have enough memory. +nnMaxBatchSize = 96 + +# Uncomment and set these smaller if you ONLY are going to use the analysis engine for smaller boards (or plan to +# run multiple instances, with some instances only handling smaller boards). It should improve performance. +# It may also mean you can use more threads profitably. +# maxBoardXSizeForNNBuffer = 19 +# maxBoardYSizeForNNBuffer = 19 + +# TO USE MULTIPLE GPUS: +# Uncomment and set this to the number of GPUs you have and/or would like to use... +# AND if it is more than 1, uncomment the appropriate CUDA or OpenCL section below. +# numNNServerThreadsPerModel = 1 + +# Other General GPU Settings------------------------------------------------------------------------------- -# Maximum number of positions to send to GPU at once. -nnMaxBatchSize = 72 # Cache up to 2 ** this many neural net evaluations in case of transpositions in the tree. nnCacheSizePowerOfTwo = 19 # Size of mutex pool for nnCache is 2 ** this @@ -99,7 +141,6 @@ nnRandomize = true # cudaUseFP16 = auto # cudaUseNHWC = auto - # OpenCL GPU settings-------------------------------------- # These only apply when using the OpenCL version of KataGo. diff --git a/katrain/KataGo/katago b/katrain/KataGo/katago index 6516368..d582034 100755 Binary files a/katrain/KataGo/katago and b/katrain/KataGo/katago differ diff --git a/katrain/KataGo/katago-cpu b/katrain/KataGo/katago-cpu deleted file mode 100755 index c2f2956..0000000 Binary files a/katrain/KataGo/katago-cpu and /dev/null differ diff --git a/katrain/config.json b/katrain/config.json index c5770b4..fad22c9 100644 --- a/katrain/config.json +++ b/katrain/config.json @@ -1,6 +1,7 @@ { "engine": { "katago": "", + "altcommand": "", "model": "katrain/models/g170e-b15c192-s1672170752-d466197061.bin.gz", "config": "katrain/KataGo/analysis_config.cfg", "threads": 12, @@ -16,7 +17,7 @@ "anim_pv_time": 0.5, "debug_level": 0, "lang": "en", - "version": "1.3.5" + "version": "1.4.0" }, "timer": { "byo_length": 30, diff --git a/katrain/core/constants.py b/katrain/core/constants.py index 2b86515..d37d410 100644 --- a/katrain/core/constants.py +++ b/katrain/core/constants.py @@ -1,6 +1,6 @@ -VERSION = "1.3.5" +VERSION = "1.4.0" HOMEPAGE = "https://github.com/sanderland/katrain" -CONFIG_MIN_VERSION = "1.3.3" # keep config files from this version +CONFIG_MIN_VERSION = "1.4.0" # keep config files from this version OUTPUT_ERROR = -1 OUTPUT_KATAGO_STDERR = -0.5 diff --git a/katrain/gui/popups.py b/katrain/gui/popups.py index e5860f2..6c275da 100644 --- a/katrain/gui/popups.py +++ b/katrain/gui/popups.py @@ -2,6 +2,7 @@ import glob import os import re from typing import Any, Dict, List, Tuple, Union +from zipfile import ZipFile from kivy.clock import Clock from kivy.metrics import dp @@ -10,6 +11,7 @@ from kivy.uix.anchorlayout import AnchorLayout from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.uix.popup import Popup +from kivy.utils import platform from kivymd.app import MDApp from kivymd.uix.boxlayout import MDBoxLayout from kivymd.uix.selectioncontrol import MDCheckbox @@ -374,12 +376,14 @@ class ConfigPopup(QuickConfigGui): def __init__(self, katrain): super().__init__(katrain) self.paths = [self.katrain.config("engine/model"), "katrain/models", "~/.katrain"] + self.katago_paths = [self.katrain.config("engine/katago"), "katrain/KataGo", "~/.katrain"] MDApp.get_running_app().bind(language=self.check_models) + MDApp.get_running_app().bind(language=self.check_katas) def build_and_set_properties(self, *_args): super().build_and_set_properties() - def check_models(self, *args): # WIP + def check_models(self, *args): done = set() model_files = [] for path in self.paths + [self.model_path.text]: @@ -405,12 +409,55 @@ class ConfigPopup(QuickConfigGui): self.model_files.values = [models_available_msg] + model_files self.model_files.text = models_available_msg + def check_katas(self, *args): + done = set() + model_files = [] + for path in self.katago_paths + [self.katago_path.text]: + path = path.rstrip("/\\") + if path.startswith("katrain"): + path = path.replace("katrain", PATHS["PACKAGE"].rstrip("/\\"), 1) + path = os.path.expanduser(path) + if not os.path.isdir(path): + path, _file = os.path.split(path) + slashpath = path.replace("\\", "/") + if slashpath in done or not os.path.isdir(path): + continue + done.add(slashpath) + files = [ + f.replace("/", os.path.sep).replace(PATHS["PACKAGE"], "katrain") + for ftype in ["katago*"] + for f in glob.glob(slashpath + "/" + ftype) + if os.path.isfile(f) and not f.endswith(".zip") + ] + if files and path not in self.paths: + self.paths.append(path) # persistent on paths with models found + model_files += files + katas_available_msg = i18n._("katago binaries available").format(num=len(model_files)) + self.katago_files.values = [katas_available_msg, i18n._("default katago option")] + model_files + self.katago_files.text = katas_available_msg + MODELS = { "latest 20b": "https://github.com/lightvector/KataGo/releases/download/v1.4.5/g170e-b20c256x2-s5303129600-d1228401921.bin.gz", "latest 30b": "https://github.com/lightvector/KataGo/releases/download/v1.4.5/g170-b30c320x2-s4824661760-d1229536699.bin.gz", "latest 40b": "https://github.com/lightvector/KataGo/releases/download/v1.4.5/g170-b40c256x2-s5095420928-d1229425124.bin.gz", } + KATAGOS = { + "windows": { + "Official OpenCL v1.6.0": "https://github.com/lightvector/KataGo/releases/download/v1.6.0/katago-v1.6.0-gpu-opencl-windows-x64.zip", + "Official OpenCL v1.6.0 (32 bit)": "https://github.com/lightvector/KataGo/releases/download/v1.6.0/katago-v1.6.0-gpu-opencl-windows-x32-dont-use-unless-actually-32bit-windows.zip", + "Official CUDA v1.6.0 (New NVIDIA cards)": "https://github.com/lightvector/KataGo/releases/download/v1.6.0/katago-v1.6.0-gpu-cuda10.2-windows-x64.zip", + "Eigen AVX2 (Modern CPUs) v1.6.0": "https://github.com/lightvector/KataGo/releases/download/v1.6.0/katago-v1.6.0-cpu-eigen-avx2-windows-x64.zip", + "Eigen (CPU, Non-optimized) v1.6.0": "https://github.com/lightvector/KataGo/releases/download/v1.6.0/katago-v1.6.0-cpu-eigen-windows-x64.zip", + }, + "linux": { + "Official OpenCL v1.6.0": "https://github.com/lightvector/KataGo/releases/download/v1.6.0/katago-v1.6.0-gpu-opencl-linux-x64.zip", + "Official CUDA v1.6.0 (New NVIDIA cards)": "https://github.com/lightvector/KataGo/releases/download/v1.6.0/katago-v1.6.0-gpu-cuda10.2-linux-x64.zip", + "Eigen AVX2 (Modern CPUs) v1.6.0": "https://github.com/lightvector/KataGo/releases/download/v1.6.0/katago-v1.6.0-cpu-eigen-avx2-linux-x64.zip", + "Eigen (CPU, Non-optimized) v1.6.0": "https://github.com/lightvector/KataGo/releases/download/v1.6.0/katago-v1.6.0-cpu-eigen-linux-x64.zip", + }, + } + def download_models(self, *_largs): def download_complete(req, tmp_path, path, model): try: @@ -452,6 +499,72 @@ class ConfigPopup(QuickConfigGui): self.download_progress_box.add_widget(Label(text=i18n._("All models downloaded"), text_size=(None, dp(50)))) print("x") + def download_katas(self, *_largs): + def unzipped_name(zipfile): + if platform == "windows": + return zipfile.replace(".zip", ".exe") + else: + return zipfile.replace(".zip", "") + + def download_complete(req, tmp_path, path, binary): + try: + if tmp_path.endswith(".zip"): + with ZipFile(tmp_path, "r") as zipObj: + exes = [f for f in zipObj.namelist() if f.startswith("katago")] + if len(exes) != 1: + raise FileNotFoundError( + f"Zip file {tmp_path} does not contain exactly 1 file starting with 'katago' (contents: {zipObj.namelist()})" + ) + with open(path, "wb") as fout: + fout.write(zipObj.read(exes[0])) + else: + os.rename(tmp_path, path) + self.katrain.log(f"Download of katago binary {binary} model complete -> {path}", OUTPUT_INFO) + except Exception as e: + self.katrain.log( + f"Download of katago binary {binary} complete, but could not move file: {e}", OUTPUT_ERROR + ) + self.check_katas() + + for c in self.download_progress_box.children: + if isinstance(c, ProgressLoader) and c.request: + c.request.cancel() + self.katago_download_progress_box.clear_widgets() + downloading = False + for name, url in self.KATAGOS.get(platform, {}).items(): + filename = os.path.split(url)[1] + exe_name = unzipped_name(filename) + if not any(os.path.split(f)[1] == exe_name for f in self.katago_files.values): + savepath_tmp = os.path.expanduser(os.path.join("~/.katrain", filename)) + exe_path_name = os.path.expanduser(os.path.join("~/.katrain", exe_name)) + self.katrain.log(f"Downloading binary {name} from {url} to {savepath_tmp}", OUTPUT_INFO) + progress = ProgressLoader( + download_url=url, + path_to_file=savepath_tmp, + downloading_text=f"Downloading {name}: " + "{}", + label_downloading_text=f"Starting download for {name}", + download_complete=lambda req, tmp=savepath_tmp, path=exe_path_name, model=name: download_complete( + req, tmp, path, model + ), + download_redirected=lambda req, mname=name: self.katrain.log( + f"Download {mname} redirected {req.resp_headers}", OUTPUT_DEBUG + ), + download_error=lambda req, error, mname=name: self.katrain.log( + f"Download of {mname} failed or cancelled ({error})", OUTPUT_ERROR + ), + ) + progress.start(self.katago_download_progress_box) + downloading = True + if not downloading: + if not self.KATAGOS.get(platform): + self.katago_download_progress_box.add_widget( + Label(text=f"No binaries available for platform {platform}", text_size=(None, dp(50))) + ) + else: + self.katago_download_progress_box.add_widget( + Label(text=i18n._("All binaries downloaded"), text_size=(None, dp(50))) + ) + def update_config(self, save_to_file=True): updated = super().update_config(save_to_file=save_to_file) self.katrain.debug_level = self.katrain.config("general/debug_level", OUTPUT_INFO) diff --git a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo index b27b724..e1f980a 100644 Binary files a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po index 478f96d..ad57043 100644 --- a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po @@ -617,3 +617,19 @@ msgstr "" #. TODO msgid "engine:altcommand" msgstr "Override Engine Command" + +#. TODO - button in general settings for downloading models +msgid "download katago button" +msgstr "Download KataGo versions" + +#. TODO - shown on on the model select dropdown +msgid "katago binaries available" +msgstr "{num} available binaries found" + +#. TODO - shown on on the katago binary select dropdown +msgid "default katago option" +msgstr "Detect platform and use provided binary" + +#. TODO - error message on trying to download models when already done +msgid "All binaries downloaded" +msgstr "All available binaries already downloaded" diff --git a/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo index 7273c16..f4fe993 100644 Binary files a/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/de/LC_MESSAGES/katrain.po b/katrain/i18n/locales/de/LC_MESSAGES/katrain.po index 0ec100f..739b9b4 100644 --- a/katrain/i18n/locales/de/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/de/LC_MESSAGES/katrain.po @@ -655,9 +655,25 @@ msgstr "Colour Theme" #. TODO msgid "engine:altcommand:hint" msgstr "" -"Full command used to start the engine, for e.g. using plink to connect to a " -"remote engine. All other model options will be ignored." +"Full command used to start the engine. All other model options will be " +"ignored." #. TODO msgid "engine:altcommand" msgstr "Override Engine Command" + +#. TODO - button in general settings for downloading models +msgid "download katago button" +msgstr "Download KataGo versions" + +#. TODO - shown on on the model select dropdown +msgid "katago binaries available" +msgstr "{num} available binaries found" + +#. TODO - shown on on the katago binary select dropdown +msgid "default katago option" +msgstr "Detect platform and use provided binary" + +#. TODO - error message on trying to download models when already done +msgid "All binaries downloaded" +msgstr "All available binaries already downloaded" diff --git a/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo index b39c496..e74eca9 100644 Binary files a/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/en/LC_MESSAGES/katrain.po b/katrain/i18n/locales/en/LC_MESSAGES/katrain.po index f12ee12..a037d63 100644 --- a/katrain/i18n/locales/en/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/en/LC_MESSAGES/katrain.po @@ -416,8 +416,8 @@ msgstr "Override Engine Command" msgid "engine:altcommand:hint" msgstr "" -"Full command used to start the engine, for e.g. using plink to connect to a " -"remote engine. All other model options will be ignored." +"Full command used to start the engine. All other model options will be " +"ignored." msgid "engine:max_visits" msgstr "Maximum number of visits in analysis" @@ -636,14 +636,30 @@ msgstr "Estimated Strength" msgid "download models button" msgstr "Download Models" +#. button in general settings for downloading models +msgid "download katago button" +msgstr "Download KataGo versions" + #. shown on on the model select dropdown msgid "models available" msgstr "{num} available model(s) found" +#. shown on on the katago binary select dropdown +msgid "default katago option" +msgstr "Detect platform and use provided binary" + +#. shown on on the model select dropdown +msgid "katago binaries available" +msgstr "{num} available binaries found" + #. error message on trying to download models when already done msgid "All models downloaded" msgstr "All available models already downloaded" +#. error message on trying to download models when already done +msgid "All binaries downloaded" +msgstr "All available binaries already downloaded" + #. label in little popup for analyzing entire game msgid "reanalyze max visits" msgstr "Number of visits per move" diff --git a/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo index ed214c1..6837415 100644 Binary files a/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/es/LC_MESSAGES/katrain.po b/katrain/i18n/locales/es/LC_MESSAGES/katrain.po index f4f7bde..8f67996 100644 --- a/katrain/i18n/locales/es/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/es/LC_MESSAGES/katrain.po @@ -657,3 +657,19 @@ msgstr "" #. TODO msgid "engine:altcommand" msgstr "Override Engine Command" + +#. TODO - button in general settings for downloading models +msgid "download katago button" +msgstr "Download KataGo versions" + +#. TODO - shown on on the model select dropdown +msgid "katago binaries available" +msgstr "{num} available binaries found" + +#. TODO - shown on on the katago binary select dropdown +msgid "default katago option" +msgstr "Detect platform and use provided binary" + +#. TODO - error message on trying to download models when already done +msgid "All binaries downloaded" +msgstr "All available binaries already downloaded" diff --git a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo index c9788cf..c4c9d8e 100644 Binary files a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po index 1b13684..63e2398 100644 --- a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po @@ -692,9 +692,25 @@ msgstr "Colour Theme" #. TODO msgid "engine:altcommand:hint" msgstr "" -"Full command used to start the engine, for e.g. using plink to connect to a " -"remote engine. All other model options will be ignored." +"Full command used to start the engine. All other model options will be " +"ignored." #. TODO msgid "engine:altcommand" msgstr "Override Engine Command" + +#. TODO - button in general settings for downloading models +msgid "download katago button" +msgstr "Download KataGo versions" + +#. TODO - shown on on the model select dropdown +msgid "katago binaries available" +msgstr "{num} available binaries found" + +#. TODO - shown on on the katago binary select dropdown +msgid "default katago option" +msgstr "Detect platform and use provided binary" + +#. TODO - error message on trying to download models when already done +msgid "All binaries downloaded" +msgstr "All available binaries already downloaded" diff --git a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo index d8bd697..137636b 100644 Binary files a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po index 0a8fd2a..1b54ec4 100644 --- a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po @@ -640,3 +640,19 @@ msgstr "エンジン起動コマンド全体 (plinkでリモートエンジン msgid "engine:altcommand" msgstr "エンジンコマンドの上書き" + +#. TODO - button in general settings for downloading models +msgid "download katago button" +msgstr "Download KataGo versions" + +#. TODO - shown on on the model select dropdown +msgid "katago binaries available" +msgstr "{num} available binaries found" + +#. TODO - shown on on the katago binary select dropdown +msgid "default katago option" +msgstr "Detect platform and use provided binary" + +#. TODO - error message on trying to download models when already done +msgid "All binaries downloaded" +msgstr "All available binaries already downloaded" diff --git a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo index d00fe44..9e1d668 100644 Binary files a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po index 365249d..4c94584 100644 --- a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po @@ -627,9 +627,25 @@ msgstr "Colour Theme" #. TODO msgid "engine:altcommand:hint" msgstr "" -"Full command used to start the engine, for e.g. using plink to connect to a " -"remote engine. All other model options will be ignored." +"Full command used to start the engine. All other model options will be " +"ignored." #. TODO msgid "engine:altcommand" msgstr "Override Engine Command" + +#. TODO - button in general settings for downloading models +msgid "download katago button" +msgstr "Download KataGo versions" + +#. TODO - shown on on the model select dropdown +msgid "katago binaries available" +msgstr "{num} available binaries found" + +#. TODO - shown on on the katago binary select dropdown +msgid "default katago option" +msgstr "Detect platform and use provided binary" + +#. TODO - error message on trying to download models when already done +msgid "All binaries downloaded" +msgstr "All available binaries already downloaded" diff --git a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo index 65e1612..4f6d8af 100644 Binary files a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo and b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo differ diff --git a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po index 951ca3a..769ac1c 100644 --- a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po @@ -652,9 +652,25 @@ msgstr "Colour Theme" #. TODO msgid "engine:altcommand:hint" msgstr "" -"Full command used to start the engine, for e.g. using plink to connect to a " -"remote engine. All other model options will be ignored." +"Full command used to start the engine. All other model options will be " +"ignored." #. TODO msgid "engine:altcommand" msgstr "Override Engine Command" + +#. TODO - button in general settings for downloading models +msgid "download katago button" +msgstr "Download KataGo versions" + +#. TODO - shown on on the model select dropdown +msgid "katago binaries available" +msgstr "{num} available binaries found" + +#. TODO - shown on on the katago binary select dropdown +msgid "default katago option" +msgstr "Detect platform and use provided binary" + +#. TODO - error message on trying to download models when already done +msgid "All binaries downloaded" +msgstr "All available binaries already downloaded" diff --git a/katrain/popups.kv b/katrain/popups.kv index 9f18548..e1b0f04 100644 --- a/katrain/popups.kv +++ b/katrain/popups.kv @@ -80,23 +80,45 @@ : configfile: configfile model_path: model_path + katago_path: katago_path model_files: model_files + katago_files: katago_files download_progress_box: download_progress_box + katago_download_progress_box: katago_download_progress_box DescriptionLabel: text: i18n._('katago settings') font_size: DESC_FONT_SIZE * 1.5 GridLayout: cols: 2 - rows: 5 - size_hint: 1,5 + rows: 6 + size_hint: 1,6 spacing: CP_SPACING DescriptionLabel: text: i18n._("engine:katago") size_hint: 0.33, 1 AnchorLayout: LabelledPathInput: + id: katago_path input_property: "engine/katago" hint_text: i18n._("engine:katago:hint") + on_text: root.check_katas() + AnchorLayout: + size_hint: 0.33, 1 + AutoSizedRoundedRectangleButton: + text: i18n._("download katago button") + on_press: root.download_katas() + size_hint_y: 0.7 + AnchorLayout: + Spinner: + id: katago_files + text: '' + on_text: + if self.text and self.text == self.values[1]: katago_path.text = '' + elif self.text and self.text != self.values[0]: katago_path.text = args[1] + size_hint_y: 0.7 + sync_height_frac: 1.0 + -font_size: self.height * 0.5 + -background_color: [*[c*255/88 for c in BOX_BACKGROUND_COLOR[:3]], 1] # compensate for texture DescriptionLabel: text: i18n._("engine:config") size_hint: 0.33, 1 @@ -207,9 +229,13 @@ orientation: 'horizontal' size_hint: 1,1.5 MDBoxLayout: - size_hint_x: 4 if self.children else 0.0001 + size_hint_x: 3.5 if self.children else 0.0001 orientation: 'vertical' id: download_progress_box + MDBoxLayout: + size_hint_x: 3.5 if self.children else 0.0001 + orientation: 'vertical' + id: katago_download_progress_box AnchorLayout: AutoSizedRoundedRectangleButton: padding_x: 15