bitpull 0.1.15 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/bitpull.cjs +239 -197
- package/package.json +8 -2
package/bitpull.cjs
CHANGED
|
@@ -38,7 +38,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
38
38
|
var define_BITPULL_UI_I18N_default;
|
|
39
39
|
var init_define_BITPULL_UI_I18N = __esm({
|
|
40
40
|
"<define:__BITPULL_UI_I18N__>"() {
|
|
41
|
-
define_BITPULL_UI_I18N_default = { ar: { "lang.name": "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", "app.title": "BitPull", "locked.text": "\u0627\u0641\u062A\u062D \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u062D\u0643\u0645 \u0645\u0646 \u062A\u0637\u0628\u064A\u0642 BitPull: \u0631\u0627\u0628\u0637\u0647\u0627 \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0648\u0635\u0648\u0644.", "pill.online": "\u0645\u062A\u0635\u0644", "pill.offline": "\u063A\u064A\u0631 \u0645\u062A\u0635\u0644", "pill.direct": "\u0639\u0646\u0648\u0627\u0646 \u0645\u0628\u0627\u0634\u0631", "pill.relay_on": "\u0627\u0644\u0645\u064F\u0631\u062D\u0650\u0651\u0644 \u0645\u062A\u0635\u0644", "pill.relay_off": "\u0627\u0644\u0645\u064F\u0631\u062D\u0650\u0651\u0644 \u063A\u064A\u0631 \u0645\u062A\u0635\u0644", "pill.cached": "{n} \u0646\u0633\u062E \u0645\u062E\u0632\u0646\u0629 \u0645\u0624\u0642\u062A\u064B\u0627", "net.title": "\u0627\u0644\u0634\u0628\u0643\u0629 \u0627\u0644\u0622\u0646", "net.online": "{n} \u062D\u0648\u0627\u0633\u064A\u0628 \u0645\u062A\u0635\u0644\u0629", "net.lending": "{n} \u062A\u064F\u0639\u064A\u0631 \u0627\u0644\u0622\u0646", "net.cpu": "{n} \u0623\u0646\u0648\u064A\u0629 CPU", "net.ram": "{n} GB \u0645\u0646 RAM", "net.gpu": "{n} GPU", "net.models": "{n} \u0646\u0645\u0627\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A", "net.jobs": "{n} \u0645\u0647\u0627\u0645 \u0642\u064A\u062F \u0627\u0644\u062A\u0634\u063A\u064A\u0644", "credits.title": "\u0631\u0635\u064A\u062F \u0627\u0644\u0623\u0631\u0635\u062F\u0629", "credits.plan": "\u062E\u0637\u0629 {plan} \xB7 \u064A\u0645\u0643\u0646 \u0623\u0646 \u064A\u0646\u062E\u0641\u0636 \u062D\u062A\u0649 {n}", "plan.free": "\u0645\u062C\u0627\u0646\u064A\u0629", "plan.base": "\u0623\u0633\u0627\u0633\u064A\u0629", "plan.pro": "\u0627\u062D\u062A\u0631\u0627\u0641\u064A\u0629", "buy.base": "\u0623\u0633\u0627\u0633\u064A\u0629 \u200E\u20AC4.50", "buy.pro": "\u0627\u062D\u062A\u0631\u0627\u0641\u064A\u0629 \u200E\u20AC9.90", "buy.recharge": "\u0634\u062D\u0646 \u200E\u20AC5", "buy.ok": "\u0641\u064F\u062A\u062D\u062A \u0635\u0641\u062D\u0629 \u0627\u0644\u062F\u0641\u0639 \u0641\u064A \u0645\u062A\u0635\u0641\u062D\u0643.", "lend.title": "\u0625\u0639\u0627\u0631\u0629 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "lend.hint": "\u062A\u0639\u0645\u0644 \u0627\u0644\u0645\u0647\u0627\u0645 \u0645\u0634\u0641\u0631\u0629 \u0645\u0646 \u0637\u0631\u0641 \u0625\u0644\u0649 \u0637\u0631\u0641 \u0641\u064A \u0628\u064A\u0626\u0627\u062A \u0645\u0639\u0632\u0648\u0644\u0629\u060C \u062F\u0648\u0646 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A\u0643. \u0648\u062A\u0643\u0633\u0628 \u0623\u0631\u0635\u062F\u0629.", "lend.state.off": "\u0645\u062A\u0648\u0642\u0641", "lend.state.waiting": "\u0641\u064A \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631", "lend.state.working": "\u064A\u0639\u0645\u0644", "lend.reason.lending_off": "\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u062A\u0648\u0642\u0641\u0629", "lend.reason.paused": "\u0645\u064F\u0639\u0644\u0651\u0642\u0629 \u0645\u0624\u0642\u062A\u064B\u0627", "lend.reason.outside_hours": "\u062E\u0627\u0631\u062C \u0633\u0627\u0639\u0627\u062A\u0643", "lend.reason.on_battery": "\u064A\u0639\u0645\u0644 \u0639\u0644\u0649 \u0627\u0644\u0628\u0637\u0627\u0631\u064A\u0629", "lend.reason.computer_in_use": "\u0623\u0646\u062A \u062A\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "lend.reason.no_jobs": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u0647\u0627\u0645 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631", "lend.running": "\u064A\u0634\u063A\u0651\u0644 \u0645\u0647\u0645\u0629 {kind} \u0645\u0646\u0630 {time}", "lend.detail": "{reason} \xB7 {n} \u0645\u0647\u0627\u0645 \u0645\u0646\u062C\u0632\u0629 \xB7 \u064A\u0648\u0641\u0631 {cpus} CPU \u0648{ram} GB", "lend.detail.sandbox": "\u060C \u0628\u064A\u0626\u0629 \u0645\u0639\u0632\u0648\u0644\u0629 {name}", "lend.detail.models": "\u060C {n} \u0646\u0645\u0627\u0630\u062C", "lend.pause": "\u0625\u064A\u0642\u0627\u0641 \u0645\u0624\u0642\u062A", "lend.resume": "\u0627\u0633\u062A\u0626\u0646\u0627\u0641", "lend.paused_ok": "\u0623\u064F\u0648\u0642\u0641\u062A \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u0624\u0642\u062A\u064B\u0627. \u0633\u064F\u0644\u0651\u0645\u062A \u0623\u064A \u0645\u0647\u0645\u0629 \u062C\u0627\u0631\u064A\u0629 \u0625\u0644\u0649 \u062D\u0627\u0633\u0648\u0628 \u0622\u062E\u0631.", "lend.resumed_ok": "\u0627\u0633\u062A\u0624\u0646\u0641\u062A \u0627\u0644\u0625\u0639\u0627\u0631\u0629.", "setup.title": "\u0625\u0639\u062F\u0627\u062F \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "setup.hint": "\u0645\u0627 \u064A\u062D\u062A\u0627\u062C\u0647 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0644\u0625\u0639\u0627\u0631\u0629. \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0634\u0628\u0643\u0629 \u0644\u0627 \u064A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0634\u064A\u0621 \u0622\u062E\u0631. \u0628\u0631\u0627\u0645\u062C \u0627\u0644\u062A\u062B\u0628\u064A\u062A \u062A\u0623\u062A\u064A \u0645\u0646 \u0627\u0644\u0645\u0648\u0627\u0642\u0639 \u0627\u0644\u0631\u0633\u0645\u064A\u0629\u060C \u0648\u0633\u064A\u0637\u0644\u0628 \u0645\u0646\u0643 \u0646\u0638\u0627\u0645\u0643 \u0627\u0644\u062A\u0623\u0643\u064A\u062F.", "setup.checking": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0642\u0642\u2026", "setup.docker.help": "\u064A\u0634\u063A\u0651\u0644 \u0645\u0647\u0627\u0645 \u0627\u0644\u0622\u062E\u0631\u064A\u0646 \u0641\u064A \u0628\u064A\u0626\u0627\u062A \u0645\u0639\u0632\u0648\u0644\u0629. \u0645\u0637\u0644\u0648\u0628 \u0644\u0645\u0647\u0627\u0645 \u0627\u0644\u062D\u0627\u0648\u064A\u0627\u062A. \u0645\u062C\u0627\u0646\u064A \u0644\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0634\u062E\u0635\u064A \u0648\u0627\u0644\u0634\u0631\u0643\u0627\u062A \u0627\u0644\u0635\u063A\u064A\u0631\u0629.", "setup.docker.download": "\u062A\u0646\u0632\u064A\u0644 Docker", "setup.docker.start": "\u062A\u0634\u063A\u064A\u0644 Docker", "setup.apple.title": "Apple Container (\u0627\u062E\u062A\u064A\u0627\u0631\u064A)", "setup.apple.help": "\u0639\u0632\u0644 \u0623\u0642\u0648\u0649: \u0643\u0644 \u0645\u0647\u0645\u0629 \u0641\u064A \u062C\u0647\u0627\u0632\u0647\u0627 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A \u0627\u0644\u062E\u0627\u0635. \u0627\u062E\u062A\u064A\u0627\u0631\u064A\u061B Docker \u064A\u0643\u0641\u064A \u0644\u0644\u0628\u062F\u0621.", "setup.apple.get": "\u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 Apple Container", "setup.ollama.help": "\u064A\u0634\u063A\u0651\u0644 \u0646\u0645\u0627\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0645\u0641\u062A\u0648\u062D\u0629 (Qwen \u0648Llama \u0648Mistral\u2026). \u0645\u0637\u0644\u0648\u0628 \u0644\u0625\u0639\u0627\u0631\u0629 \u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A.", "setup.ollama.download": "\u062A\u0646\u0632\u064A\u0644 Ollama", "setup.ollama.start": "\u062A\u0634\u063A\u064A\u0644 Ollama", "setup.model.title": "\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A", "setup.model.help": "\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0630\u064A \u064A\u0642\u062F\u0645\u0647 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0644\u0622\u062E\u0631\u064A\u0646. \u0627\u0644\u0645\u0642\u062A\u0631\u062D \u0644\u0630\u0627\u0643\u0631\u0629 {ram} GB: {model}.", "setup.model.download": "\u062A\u0646\u0632\u064A\u0644 {model} ({size} GB)", "setup.model.none": "\u0644\u0627 \u0634\u064A\u0621 \u0628\u0639\u062F", "setup.model.need_ollama": "\u062B\u0628\u0651\u062A Ollama \u0648\u0634\u063A\u0651\u0644\u0647 \u0623\u0648\u0644\u064B\u0627", "setup.nvidia.title": "\u062A\u0639\u0631\u064A\u0641\u0627\u062A NVIDIA GPU (\u0627\u062E\u062A\u064A\u0627\u0631\u064A)", "setup.nvidia.help": "\u0641\u0642\u0637 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0628\u0637\u0627\u0642\u0629 \u0631\u0633\u0648\u0645\u0627\u062A NVIDIA \u062A\u0631\u064A\u062F \u0625\u0639\u0627\u0631\u062A\u0647\u0627.", "setup.nvidia.get": "\u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u062A\u0639\u0631\u064A\u0641\u0627\u062A NVIDIA", "setup.status.running": "\u0645\u062B\u0628\u0651\u062A \u0648\u064A\u0639\u0645\u0644", "setup.status.installed": "\u0645\u062B\u0628\u0651\u062A", "setup.status.stopped": "\u0645\u062B\u0628\u0651\u062A\u060C \u0644\u0627 \u064A\u0639\u0645\u0644", "setup.status.missing": "\u063A\u064A\u0631 \u0645\u062B\u0628\u0651\u062A", "setup.status.found": "\u0645\u0648\u062C\u0648\u062F", "setup.status.not_found": "\u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F", "setup.terminal": "\u0634\u063A\u0651\u0644 \u0641\u064A \u0627\u0644\u0637\u0631\u0641\u064A\u0629:", "setup.done": "\u062A\u0645", "setup.opened": "\u062A\u0645: \u0641\u064F\u062A\u062D {file}\u060C \u0627\u062A\u0628\u0639 \u062E\u0637\u0648\u0627\u062A\u0647", "setup.recheck": "\u062A\u062D\u0642\u0642 \u0645\u062C\u062F\u062F\u064B\u0627", "setup.ok.download": "\u0628\u062F\u0623 \u0627\u0644\u062A\u0646\u0632\u064A\u0644. \u0633\u064A\u0641\u062A\u062D \u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u062A\u062B\u0628\u064A\u062A \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0639\u0646\u062F \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621: \u0627\u062A\u0628\u0639 \u062E\u0637\u0648\u0627\u062A\u0647.", "setup.ok.start": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u0634\u063A\u064A\u0644\u2026 \u0642\u062F \u064A\u0633\u062A\u063A\u0631\u0642 \u0630\u0644\u0643 \u062D\u062A\u0649 \u062F\u0642\u064A\u0642\u0629. \u062A\u062A\u062D\u062F\u062B \u0647\u0630\u0647 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627.", "setup.ok.pull": "\u0628\u062F\u0623 \u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062C. \u064A\u0638\u0647\u0631 \u0627\u0644\u062A\u0642\u062F\u0645 \u0641\u064A \u0627\u0644\u0623\u0639\u0644\u0649.", "setup.ok.page": "\u0641\u064F\u062A\u062D\u062A \u0627\u0644\u0635\u0641\u062D\u0629 \u0641\u064A \u0645\u062A\u0635\u0641\u062D\u0643.", "setup.ok.recheck": "\u062A\u0645 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u062C\u062F\u062F\u064B\u0627.", "rules.title": "\u0642\u0648\u0627\u0639\u062F \u0627\u0644\u0625\u0639\u0627\u0631\u0629", "rules.enabled": "\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u0641\u0639\u0651\u0644\u0629", "rules.enabled.help": "\u0627\u0644\u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0631\u0626\u064A\u0633\u064A. \u0639\u0646\u062F \u0625\u064A\u0642\u0627\u0641\u0647\u060C \u0644\u0627 \u064A\u0634\u063A\u0651\u0644 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0645\u0647\u0627\u0645 \u0627\u0644\u0622\u062E\u0631\u064A\u0646 \u0623\u0628\u062F\u064B\u0627. \u0648\u064A\u0638\u0644 \u0628\u0625\u0645\u0643\u0627\u0646\u0643 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0634\u0628\u0643\u0629 \u0628\u0646\u0641\u0633\u0643.", "rules.cpus": "\u0623\u0642\u0635\u0649 \u0639\u062F\u062F CPU", "rules.cpus.help": "\u0623\u0642\u0635\u0649 \u0639\u062F\u062F \u0645\u0646 \u0623\u0646\u0648\u064A\u0629 \u0627\u0644\u0645\u0639\u0627\u0644\u062C \u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0633\u062A\u062E\u062F\u0645\u0647 \u0627\u0644\u0645\u0647\u0645\u0629. \u0645\u062B\u0627\u0644: \u0639\u0644\u0649 \u062D\u0627\u0633\u0648\u0628 \u0628\u06408 \u0623\u0646\u0648\u064A\u0629\u060C \u0627\u0644\u0642\u064A\u0645\u0629 2 \u062A\u062A\u0631\u0643 \u0644\u0643 6 \u0623\u0646\u0648\u064A\u0629 \u062D\u0631\u0629.", "rules.memory": "\u0623\u0642\u0635\u0649 \u0630\u0627\u0643\u0631\u0629 (MB)", "rules.memory.help": "\u0630\u0627\u0643\u0631\u0629 RAM \u0627\u0644\u062A\u064A \u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0633\u062A\u062E\u062F\u0645\u0647\u0627 \u0627\u0644\u0645\u0647\u0645\u0629\u060C \u0628\u0627\u0644\u0645\u064A\u063A\u0627\u0628\u0627\u064A\u062A (1024 MB = 1 GB). \u0644\u0627 \u064A\u0639\u0631\u0636 BitPull \u0623\u0628\u062F\u064B\u0627 \u0623\u0643\u062B\u0631 \u0645\u0646 \u0646\u0635\u0641 \u0630\u0627\u0643\u0631\u0629 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628.", "rules.gpu": "GPU", "rules.gpu.none": "\u0644\u0627 \u0634\u064A\u0621", "rules.gpu.consumer": "\u0627\u0633\u062A\u0647\u0644\u0627\u0643\u064A\u0629 (8\u201312 GB)", "rules.gpu.high": "\u0645\u062A\u0642\u062F\u0645\u0629 (16\u201324 GB)", "rules.gpu.datacenter": "\u0645\u0631\u0627\u0643\u0632 \u0628\u064A\u0627\u0646\u0627\u062A (40 GB+)", "rules.gpu.help": "\u0628\u0637\u0627\u0642\u0629 \u0627\u0644\u0631\u0633\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0639\u064A\u0631\u0647\u0627\u060C \u062D\u0633\u0628 \u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u0641\u064A\u062F\u064A\u0648. \u0627\u062A\u0631\u0643 \xAB\u0644\u0627 \u0634\u064A\u0621\xBB \u0625\u0646 \u0644\u0645 \u064A\u0643\u0646 \u0644\u062F\u064A\u0643 GPU \u0645\u062E\u0635\u0635 \u0623\u0648 \u0644\u0627 \u062A\u0631\u064A\u062F \u0625\u0639\u0627\u0631\u062A\u0647. \u0627\u0644\u0640GPU \u064A\u0643\u0633\u0628 \u0623\u0643\u062B\u0631 \u0627\u0644\u0623\u0631\u0635\u062F\u0629.", "rules.containers": "\u0645\u0647\u0627\u0645 \u0627\u0644\u062D\u0627\u0648\u064A\u0627\u062A", "rules.containers.help": "\u062A\u0634\u063A\u064A\u0644 \u0639\u0645\u0644\u064A\u0627\u062A \u0627\u0644\u0628\u0646\u0627\u0621 \u0648\u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631\u0627\u062A \u0648\u0627\u0644\u0633\u0643\u0631\u0628\u062A\u0627\u062A \u0644\u0644\u0622\u062E\u0631\u064A\u0646 \u0641\u064A \u0628\u064A\u0626\u0629 \u0645\u0639\u0632\u0648\u0644\u0629 \u062F\u0648\u0646 \u0625\u0646\u062A\u0631\u0646\u062A \u0648\u062F\u0648\u0646 \u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A\u0643. \u064A\u062A\u0637\u0644\u0628 Docker (\u0623\u0648 Apple Container): \u0631\u0627\u062C\u0639 \xAB\u0625\u0639\u062F\u0627\u062F \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628\xBB.", "rules.models": "\u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629 (Ollama)", "rules.models.help": "\u0627\u0644\u0631\u062F \u0639\u0644\u0649 \u0637\u0644\u0628\u0627\u062A \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0628\u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629 \u0627\u0644\u0645\u062B\u0628\u062A\u0629 \u0641\u064A Ollama \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628. \u064A\u062A\u0637\u0644\u0628 Ollama \u0648\u0646\u0645\u0648\u0630\u062C\u064B\u0627 \u0648\u0627\u062D\u062F\u064B\u0627 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", "rules.idle": "\u0641\u0642\u0637 \u0628\u0639\u062F \u062F\u0642\u0627\u0626\u0642 \u0645\u0646 \u0627\u0644\u062E\u0645\u0648\u0644", "rules.idle.help": "\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u0642\u0637 \u0625\u0630\u0627 \u0644\u0645 \u062A\u0644\u0645\u0633 \u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0641\u0627\u062A\u064A\u062D \u0623\u0648 \u0627\u0644\u0641\u0623\u0631\u0629 \u0637\u0648\u0627\u0644 \u0647\u0630\u0627 \u0627\u0644\u0639\u062F\u062F \u0645\u0646 \u0627\u0644\u062F\u0642\u0627\u0626\u0642. 0 = \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u062D\u062A\u0649 \u0623\u062B\u0646\u0627\u0621 \u0639\u0645\u0644\u0643.", "rules.ac": "\u0641\u0642\u0637 \u0639\u0646\u062F \u0627\u0644\u062A\u0648\u0635\u064A\u0644 \u0628\u0627\u0644\u0643\u0647\u0631\u0628\u0627\u0621", "rules.ac.help": "\u0639\u0644\u0649 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0627\u0644\u0645\u062D\u0645\u0648\u0644\u060C \u062A\u062A\u0648\u0642\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0639\u0646\u062F \u0627\u0644\u0639\u0645\u0644 \u0639\u0644\u0649 \u0627\u0644\u0628\u0637\u0627\u0631\u064A\u0629\u060C \u0641\u0644\u0627 \u062A\u0633\u062A\u0646\u0632\u0641\u0647\u0627 \u0623\u0628\u062F\u064B\u0627.", "rules.hours": "\u0641\u0642\u0637 \u0645\u0646 / \u0625\u0644\u0649 \u0633\u0627\u0639\u0629 (\u0641\u0627\u0631\u063A = \u062F\u0627\u0626\u0645\u064B\u0627)", "rules.hours.help": "\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u0642\u0637 \u0641\u064A \u0647\u0630\u0647 \u0627\u0644\u0641\u062A\u0631\u0629\u060C \u0628\u0646\u0638\u0627\u0645 24 \u0633\u0627\u0639\u0629. \u0645\u062B\u0627\u0644: 22 \u06488 = \u0645\u0646 10 \u0645\u0633\u0627\u0621\u064B \u0625\u0644\u0649 8 \u0635\u0628\u0627\u062D\u064B\u0627. \u0627\u062A\u0631\u0643 \u0627\u0644\u062D\u0642\u0644\u064A\u0646 \u0641\u0627\u0631\u063A\u064A\u0646 \u0644\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u064A \u0623\u064A \u0633\u0627\u0639\u0629.", "rules.cache": "\u0646\u0633\u062E \u0645\u062E\u0632\u0646\u0629 \u0645\u0646 \u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A \u0627\u0644\u0622\u062E\u0631\u064A\u0646", "rules.cache.help": "\u0639\u062F\u062F \u0627\u0644\u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A \u0627\u0644\u0639\u0627\u0645\u0629 \u0644\u0645\u0633\u062A\u062E\u062F\u0645\u064A\u0646 \u0622\u062E\u0631\u064A\u0646 \u0627\u0644\u062A\u064A \u064A\u062D\u062A\u0641\u0638 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0628\u0646\u0633\u062E\u0629 \u0645\u0646\u0647\u0627\u060C \u0644\u062A\u0628\u0642\u0649 \u0645\u062A\u0627\u062D\u0629 \u0639\u0646\u062F\u0645\u0627 \u064A\u0643\u0648\u0646 \u0623\u0635\u062D\u0627\u0628\u0647\u0627 \u063A\u064A\u0631 \u0645\u062A\u0635\u0644\u064A\u0646. \u064A\u0633\u062A\u062E\u062F\u0645 \u0645\u0633\u0627\u062D\u0629 \u0642\u0631\u0635 \u0635\u063A\u064A\u0631\u0629 \u0648\u064A\u0643\u0633\u0628 \u0623\u0631\u0635\u062F\u0629. 0 = \u0644\u0627 \u0634\u064A\u0621.", "rules.save": "\u062D\u0641\u0638 \u0627\u0644\u0642\u0648\u0627\u0639\u062F", "rules.saved": "\u062D\u064F\u0641\u0638\u062A \u0627\u0644\u0642\u0648\u0627\u0639\u062F. \u062A\u064F\u0637\u0628\u0651\u0642 \u062E\u0644\u0627\u0644 \u062B\u0648\u0627\u0646\u064D.", "rules.hours_both": "\u0627\u0645\u0644\u0623 \u0627\u0644\u0633\u0627\u0639\u062A\u064A\u0646\u060C \u0623\u0648 \u0627\u062A\u0631\u0643\u0647\u0645\u0627 \u0641\u0627\u0631\u063A\u062A\u064A\u0646 \u0644\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u064A \u0623\u064A \u0633\u0627\u0639\u0629.", "folders.title": "\u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0635\u0631\u0651\u062D \u0628\u0647\u0627", "folders.hint": "\u064A\u0642\u0631\u0623 BitPull \u0647\u0630\u0647 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0641\u0642\u0637. \u0644\u0646\u0634\u0631 \u0623\u062D\u062F\u0647\u0627 \u064A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0645\u0644\u0641 bitpull.json \u0645\u0643\u062A\u0645\u0644.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u062A\u0635\u0631\u064A\u062D", "folders.none": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u062C\u0644\u062F\u0627\u062A \u0645\u0635\u0631\u0651\u062D \u0628\u0647\u0627.", "folders.draft": "\u0645\u0633\u0648\u062F\u0629", "folders.publish": "\u0646\u0634\u0631", "folders.remove": "\u0625\u0632\u0627\u0644\u0629", "folders.need_path": "\u0627\u0643\u062A\u0628 \u0623\u0648\u0644\u064B\u0627 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0643\u0627\u0645\u0644 \u0644\u0645\u062C\u0644\u062F\u060C \u0645\u062B\u0644 /Users/you/projects/my-library.", "folders.added": "\u062A\u0645 \u0627\u0644\u062A\u0635\u0631\u064A\u062D \u0628\u0627\u0644\u0645\u062C\u0644\u062F.", "folders.removed": "\u0623\u064F\u0632\u064A\u0644 \u0627\u0644\u0645\u062C\u0644\u062F. \u0644\u0645 \u064A\u0639\u062F BitPull \u064A\u0642\u0631\u0624\u0647.", "folders.drafted": "\u0627\u0644\u0645\u0633\u0648\u062F\u0629 \u062C\u0627\u0647\u0632\u0629: \u0639\u064F\u062B\u0631 \u0639\u0644\u0649 {n} \u0645\u0644\u0641\u0627\u062A. \u062F\u0639 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0644\u062F\u064A\u0643 \u064A\u0645\u0644\u0623 \u0627\u0644\u0645\u0644\u062E\u0635 \u0648\u0627\u0644\u0623\u0648\u0635\u0627\u0641 (\u0623\u062F\u0627\u0629 prepare_publish)\u060C \u062B\u0645 \u0627\u0636\u063A\u0637 \xAB\u0646\u0634\u0631\xBB.", "folders.published": "\u0646\u064F\u0634\u0631 \xAB{name}\xBB \u0645\u0639 {n} \u0645\u0644\u0641\u0627\u062A.", "folders.secrets_in": "\u0639\u064F\u062B\u0631 \u0639\u0644\u064A\u0647 \u0641\u064A: {where}", "folders.line": "{file} \u0627\u0644\u0633\u0637\u0631 {line}", "repos.title": "\u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A\u0643 \u0627\u0644\u0645\u0646\u0634\u0648\u0631\u0629", "repos.hint": "\u062A\u062A\u062D\u062F\u062B \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0639\u0646\u062F \u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0645\u0644\u0641\u0627\u062A (\u0643\u0644 5 \u062F\u0642\u0627\u0626\u0642).", "repos.none": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A \u0645\u0646\u0634\u0648\u0631\u0629.", "repos.withdraw": "\u0633\u062D\u0628", "repos.withdrawn": "\u0633\u064F\u062D\u0628 \u0627\u0644\u0645\u0633\u062A\u0648\u062F\u0639 \u0645\u0646 \u0627\u0644\u0634\u0628\u0643\u0629.", "ask.title": "\u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629", "ask.offers": "\u064A\u0642\u062F\u0645 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628: {models}.", "ask.offers_none": "\u0644\u0627 \u0646\u0645\u0627\u0630\u062C (\u062B\u0628\u0651\u062A Ollama \u0644\u062A\u0642\u062F\u064A\u0645 \u0628\u0639\u0636\u0647\u0627)", "ask.placeholder": "\u0627\u0633\u0623\u0644 \u0646\u0645\u0648\u0630\u062C\u064B\u0627 \u0645\u0641\u062A\u0648\u062D\u064B\u0627 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629\u2026", "ask.small": "\u0635\u063A\u064A\u0631", "ask.medium": "\u0645\u062A\u0648\u0633\u0637", "ask.large": "\u0643\u0628\u064A\u0631", "ask.button": "\u0627\u0633\u0623\u0644", "ask.empty": "\u0627\u0643\u062A\u0628 \u0633\u0624\u0627\u0644\u064B\u0627 \u0623\u0648\u0644\u064B\u0627.", "ask.waiting": "\u062C\u0627\u0631\u064D \u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u062D\u0627\u0633\u0648\u0628 \u0644\u062F\u064A\u0647 \u0627\u0644\u0646\u0645\u0648\u0630\u062C\u2026 \u0642\u062F \u064A\u0633\u062A\u063A\u0631\u0642 \u0630\u0644\u0643 \u062D\u062A\u0649 \u062F\u0642\u064A\u0642\u0629.", "ask.credits": "{n} \u0623\u0631\u0635\u062F\u0629", "tools.title": "\u0627\u0631\u0628\u0637 \u0623\u062F\u0648\u0627\u062A\u0643", "tools.mcp": "\u0644\u0640Claude Code \u0648\u0639\u0645\u0644\u0627\u0621 MCP\u060C \u0634\u063A\u0651\u0644 \u0641\u064A \u0627\u0644\u0637\u0631\u0641\u064A\u0629:", "tools.openai": "\u0644\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u0645\u062A\u0648\u0627\u0641\u0642\u0629 \u0645\u0639 OpenAI: \u0639\u0646\u0648\u0627\u0646 URL \u0627\u0644\u0623\u0633\u0627\u0633\u064A", "tools.key": "\u0645\u0641\u062A\u0627\u062D API", "tools.show": "\u0625\u0638\u0647\u0627\u0631", "jobs.title": "\u0645\u0647\u0627\u0645\u0643 \u0627\u0644\u0623\u062E\u064A\u0631\u0629", "jobs.none": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u0647\u0627\u0645.", "jobs.model": "\u0646\u0645\u0648\u0630\u062C", "jobs.container": "\u062D\u0627\u0648\u064A\u0629", "jobs.status.queued": "\u0641\u064A \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631", "jobs.status.running": "\u0642\u064A\u062F \u0627\u0644\u062A\u0634\u063A\u064A\u0644", "jobs.status.done": "\u0645\u0643\u062A\u0645\u0644\u0629", "jobs.status.failed": "\u0641\u0634\u0644\u062A", "jobs.status.canceled": "\u0623\u064F\u0644\u063A\u064A\u062A", "jobs.cost": "{n} \u0623\u0631\u0635\u062F\u0629", working: "\u062C\u0627\u0631\u064D \u0627\u0644\u0639\u0645\u0644\u2026", "err.agent_down": "BitPull \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0627 \u064A\u0633\u062A\u062C\u064A\u0628. \u0633\u064A\u064F\u0639\u0627\u062F \u062A\u0634\u063A\u064A\u0644\u0647 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u062E\u0644\u0627\u0644 30 \u062B\u0627\u0646\u064A\u0629: \u062D\u0627\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627 \u0628\u0639\u062F \u0642\u0644\u064A\u0644.", "err.server": "\u062A\u0639\u0630\u0651\u0631 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u062E\u0627\u062F\u0645 BitPull. \u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u062A\u0635\u0627\u0644\u0643 \u0628\u0627\u0644\u0625\u0646\u062A\u0631\u0646\u062A \u0648\u062D\u0627\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627.", "err.session": "\u0627\u0646\u062A\u0647\u062A \u062C\u0644\u0633\u0629 \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u062D\u0643\u0645 \u0647\u0630\u0647. \u0623\u0639\u062F \u0641\u062A\u062D\u0647\u0627 \u0645\u0646 \u062A\u0637\u0628\u064A\u0642 BitPull.", "err.billing": "\u0627\u0644\u0645\u062F\u0641\u0648\u0639\u0627\u062A \u063A\u064A\u0631 \u0645\u0641\u0639\u0651\u0644\u0629 \u0628\u0639\u062F.", "err.no_folder": "\u0647\u0630\u0627 \u0627\u0644\u0645\u062C\u0644\u062F \u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628. \u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0645\u0633\u0627\u0631.", "err.not_folder": "\u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0631 \u0645\u0644\u0641 \u0648\u0644\u064A\u0633 \u0645\u062C\u0644\u062F\u064B\u0627.", "err.credits": "\u0627\u0644\u0623\u0631\u0635\u062F\u0629 \u063A\u064A\u0631 \u0643\u0627\u0641\u064A\u0629.", "err.device": "\u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u063A\u064A\u0631 \u0645\u062A\u0635\u0644 \u0628\u0639\u062F. \u0623\u0628\u0642\u0650 \u062A\u0637\u0628\u064A\u0642 BitPull \u0645\u0641\u062A\u0648\u062D\u064B\u0627 \u0648\u062D\u0627\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627 \u0628\u0639\u062F \u062F\u0642\u064A\u0642\u0629.", "err.no_model": "\u0644\u0627 \u064A\u0648\u062C\u062F \u062D\u0627\u0633\u0648\u0628 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u064A\u0642\u062F\u0645 \u0646\u0645\u0648\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u062D\u0627\u0644\u064A\u064B\u0627. \u062D\u0627\u0648\u0644 \u0644\u0627\u062D\u0642\u064B\u0627.", "err.invalid": "\u0628\u0639\u0636 \u0627\u0644\u0642\u064A\u0645 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D\u0629. \u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062D\u0642\u0648\u0644 \u0648\u062D\u0627\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627.", "tip.lang": "\u0644\u063A\u0629 \u0627\u0644\u062A\u0637\u0628\u064A\u0642. \u064A\u064F\u062D\u0641\u0638 \u0627\u062E\u062A\u064A\u0627\u0631\u0643 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628.", "tip.buy.base": "\u064A\u0641\u062A\u062D \u0635\u0641\u062D\u0629 \u0627\u0644\u062F\u0641\u0639 \u0627\u0644\u0622\u0645\u0646\u0629 \u0644\u0644\u062E\u0637\u0629 \u0627\u0644\u0623\u0633\u0627\u0633\u064A\u0629: \u200E\u20AC4.50 \u0634\u0647\u0631\u064A\u064B\u0627 \u0645\u0639 80 \u0631\u0635\u064A\u062F\u064B\u0627 \u0643\u0644 \u0634\u0647\u0631. \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0625\u0644\u063A\u0627\u0621 \u0641\u064A \u0623\u064A \u0648\u0642\u062A.", "tip.buy.pro": "\u064A\u0641\u062A\u062D \u0635\u0641\u062D\u0629 \u0627\u0644\u062F\u0641\u0639 \u0627\u0644\u0622\u0645\u0646\u0629 \u0644\u0644\u062E\u0637\u0629 \u0627\u0644\u0627\u062D\u062A\u0631\u0627\u0641\u064A\u0629: \u200E\u20AC9.90 \u0634\u0647\u0631\u064A\u064B\u0627 \u0645\u0639 200 \u0631\u0635\u064A\u062F \u0643\u0644 \u0634\u0647\u0631\u060C \u0648\u0623\u0639\u0644\u0649 \u0623\u0648\u0644\u0648\u064A\u0629 \u0648\u062C\u0645\u064A\u0639 \u0648\u062D\u062F\u0627\u062A GPU. \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0625\u0644\u063A\u0627\u0621 \u0641\u064A \u0623\u064A \u0648\u0642\u062A.", "tip.buy.recharge": "\u064A\u0641\u062A\u062D \u0635\u0641\u062D\u0629 \u0627\u0644\u062F\u0641\u0639 \u0627\u0644\u0622\u0645\u0646\u0629 \u0644\u0634\u0631\u0627\u0621 80 \u0631\u0635\u064A\u062F\u064B\u0627 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0645\u0642\u0627\u0628\u0644 \u200E\u20AC5. \u0644\u0627 \u062A\u0646\u062A\u0647\u064A \u0635\u0644\u0627\u062D\u064A\u062A\u0647\u0627 \u0623\u0628\u062F\u064B\u0627.", "tip.pause": "\u064A\u0648\u0642\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u0648\u0631\u064B\u0627. \u062A\u064F\u0633\u0644\u064E\u0651\u0645 \u0623\u064A \u0645\u0647\u0645\u0629 \u062C\u0627\u0631\u064A\u0629 \u0641\u064A \u0647\u0630\u0647 \u0627\u0644\u0644\u062D\u0638\u0629 \u0625\u0644\u0649 \u062D\u0627\u0633\u0648\u0628 \u0622\u062E\u0631. \u0627\u0636\u063A\u0637 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0644\u0644\u0627\u0633\u062A\u0626\u0646\u0627\u0641.", "tip.resume": "\u064A\u0633\u062A\u0623\u0646\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0648\u0641\u0642 \u0642\u0648\u0627\u0639\u062F \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643.", "tip.rules.save": "\u064A\u062D\u0641\u0638 \u0642\u0648\u0627\u0639\u062F \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0623\u0639\u0644\u0627\u0647. \u062A\u064F\u0637\u0628\u064E\u0651\u0642 \u062E\u0644\u0627\u0644 \u062B\u0648\u0627\u0646\u064D \u0642\u0644\u064A\u0644\u0629\u061B \u0648\u0644\u0627 \u064A\u062A\u063A\u064A\u0631 \u0634\u064A\u0621 \u062D\u062A\u0649 \u062A\u0636\u063A\u0637 \u0647\u0630\u0627 \u0627\u0644\u0632\u0631.", "tip.folder.add": "\u064A\u0633\u0645\u062D \u0644\u0640 BitPull \u0628\u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0645\u0643\u062A\u0648\u0628 \u0639\u0644\u0649 \u0627\u0644\u064A\u0633\u0627\u0631. \u0644\u0627 \u062A\u064F\u0642\u0631\u0623 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u062E\u0627\u0631\u062C \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0635\u0631\u0651\u062D \u0628\u0647\u0627 \u0648\u0644\u0627 \u062A\u064F\u0634\u0627\u0631\u0643 \u0623\u0628\u062F\u064B\u0627.", "tip.folder.draft": "\u064A\u064F\u0646\u0634\u0626 bitpull.json \u0641\u064A \u0627\u0644\u0645\u062C\u0644\u062F: \u0642\u0627\u0626\u0645\u0629 \u0628\u0645\u0644\u0641\u0627\u062A\u0647 \u0645\u0639 \u0623\u0648\u0635\u0627\u0641 \u0641\u0627\u0631\u063A\u0629 \u0644\u064A\u0643\u0645\u0644\u0647\u0627 \u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0627\u0644\u062E\u0627\u0635 \u0628\u0643. \u0644\u0627 \u064A\u064F\u0646\u0634\u0631 \u0634\u064A\u0621 \u0628\u0639\u062F.", "tip.folder.publish": "\u064A\u0634\u0627\u0631\u0643 \u0647\u0630\u0627 \u0627\u0644\u0645\u062C\u0644\u062F \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0643\u0645\u0633\u062A\u0648\u062F\u0639 \u0639\u0627\u0645 \u0645\u0648\u0642\u0651\u0639 \u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628. \u064A\u064F\u0645\u0646\u0639 \u0627\u0644\u0646\u0634\u0631 \u0625\u0630\u0627 \u0648\u064F\u062C\u062F\u062A \u0645\u0641\u0627\u062A\u064A\u062D \u0623\u0648 \u0643\u0644\u0645\u0627\u062A \u0645\u0631\u0648\u0631 \u0641\u064A \u0627\u0644\u0645\u0644\u0641\u0627\u062A.", "tip.folder.remove": "\u064A\u062A\u0648\u0642\u0641 BitPull \u0639\u0646 \u0642\u0631\u0627\u0621\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u062C\u0644\u062F. \u062A\u0628\u0642\u0649 \u0627\u0644\u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A \u0627\u0644\u0645\u0646\u0634\u0648\u0631\u0629 \u0645\u0646\u0647 \u0645\u062A\u0627\u062D\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u062D\u062A\u0649 \u062A\u0633\u062D\u0628\u0647\u0627.", "tip.repo.withdraw": "\u064A\u0632\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u062A\u0648\u062F\u0639 \u0645\u0646 \u0627\u0644\u0634\u0628\u0643\u0629. \u0644\u0646 \u064A\u062A\u0645\u0643\u0646 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u0648\u0646 \u0627\u0644\u0622\u062E\u0631\u0648\u0646 \u0645\u0646 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u064A\u0647 \u0623\u0648 \u062A\u0646\u0632\u064A\u0644\u0647 \u0628\u0639\u062F \u0627\u0644\u0622\u0646. \u062A\u0628\u0642\u0649 \u0645\u0644\u0641\u0627\u062A\u0643 \u0639\u0644\u0649 \u062D\u0627\u0633\u0648\u0628\u0643.", "tip.ask": "\u064A\u0631\u0633\u0644 \u0633\u0624\u0627\u0644\u0643 \u0645\u0634\u0641\u0631\u064B\u0627 \u0645\u0646 \u0637\u0631\u0641 \u0625\u0644\u0649 \u0637\u0631\u0641 \u0625\u0644\u0649 \u062D\u0627\u0633\u0648\u0628 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u064A\u0634\u063A\u0651\u0644 \u0646\u0645\u0648\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0645\u0641\u062A\u0648\u062D\u064B\u0627. \u064A\u0643\u0644\u0651\u0641 \u0628\u0636\u0639\u0629 \u0623\u0631\u0635\u062F\u0629.", "tip.tier": "\u062D\u062C\u0645 \u0627\u0644\u0646\u0645\u0648\u0630\u062C: \u0627\u0644\u0635\u063A\u064A\u0631 \u0633\u0631\u064A\u0639 \u0648\u0631\u062E\u064A\u0635\u060C \u0648\u0627\u0644\u0643\u0628\u064A\u0631 \u0623\u0630\u0643\u0649 \u0648\u064A\u0643\u0644\u0651\u0641 \u0623\u0631\u0635\u062F\u0629 \u0623\u0643\u062B\u0631.", "tip.show_key": "\u064A\u0639\u0631\u0636 \u0627\u0644\u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0630\u064A \u062A\u0633\u062A\u062E\u062F\u0645\u0647 \u0623\u062F\u0648\u0627\u062A \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0644\u062A\u0648\u0627\u0635\u0644 \u0645\u0639 BitPull. \u0644\u0627 \u062A\u0634\u0627\u0631\u0643\u0647 \u0645\u0639 \u0623\u062D\u062F.", "tip.setup.download": "\u064A\u0646\u0632\u0651\u0644 \u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u062A\u062B\u0628\u064A\u062A \u0627\u0644\u0631\u0633\u0645\u064A \u0644\u0640 {name} \u0644\u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0625\u0644\u0649 \u0645\u062C\u0644\u062F \u0627\u0644\u062A\u0646\u0632\u064A\u0644\u0627\u062A \u0648\u064A\u0641\u062A\u062D\u0647. \u0627\u062A\u0628\u0639 \u062E\u0637\u0648\u0627\u062A\u0647 \u0644\u0625\u0643\u0645\u0627\u0644 \u0627\u0644\u062A\u062B\u0628\u064A\u062A.", "tip.setup.start": "\u064A\u0634\u063A\u0651\u0644 {name}\u060C \u0648\u0647\u0648 \u0645\u062B\u0628\u0651\u062A \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0643\u0646\u0647 \u0644\u0627 \u064A\u0639\u0645\u0644.", "tip.setup.pull": "\u064A\u0646\u0632\u0651\u0644 \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u200F{model} \u200F({size} GB) \u0625\u0644\u0649 Ollama\u060C \u0644\u064A\u062A\u0645\u0643\u0646 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0645\u0646 \u062A\u0642\u062F\u064A\u0645\u0647 \u0644\u0644\u0622\u062E\u0631\u064A\u0646.", "tip.setup.open": "\u064A\u0641\u062A\u062D \u0635\u0641\u062D\u0629 {name} \u0627\u0644\u0631\u0633\u0645\u064A\u0629 \u0641\u064A \u0645\u062A\u0635\u0641\u062D\u0643.", "tip.setup.recheck": "\u064A\u062A\u062D\u0642\u0642 \u0645\u062C\u062F\u062F\u064B\u0627 \u0645\u0645\u0627 \u0647\u0648 \u0645\u062B\u0628\u0651\u062A \u0648\u064A\u0639\u0645\u0644 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628.", "update.title": "\u062A\u062D\u062F\u064A\u062B\u0627\u062A \u0627\u0644\u062A\u0637\u0628\u064A\u0642", "update.current": "\u0627\u0644\u0625\u0635\u062F\u0627\u0631 \u0627\u0644\u0645\u062B\u0628\u0651\u062A: {v}", "update.latest": "\u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631: {v}", "update.button": "\u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062A\u062D\u062F\u064A\u062B\u0627\u062A", "update.install": "\u062B\u0628\u0651\u062A \u0627\u0644\u0625\u0635\u062F\u0627\u0631 {v} \u0627\u0644\u0622\u0646", "update.available": "\u0627\u0644\u0625\u0635\u062F\u0627\u0631 {v} \u0645\u062A\u0627\u062D.", "update.not_in_app": "\u064A\u062B\u0628\u0651\u062A \u062A\u0637\u0628\u064A\u0642 BitPull \u0627\u0644\u062A\u062D\u062F\u064A\u062B\u0627\u062A. \u0627\u0641\u062A\u062D \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u062D\u0643\u0645 \u0647\u0630\u0647 \u0645\u0646 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0644\u0644\u062A\u062D\u062F\u064A\u062B.", "update.state.requested": "\u062C\u0627\u0631\u064D \u0637\u0644\u0628 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062A\u0637\u0628\u064A\u0642\u2026", "update.state.checking": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062A\u062D\u062F\u064A\u062B\u0627\u062A\u2026", "update.state.up_to_date": "\u0644\u062F\u064A\u0643 \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631.", "update.state.installing": "\u062C\u0627\u0631\u064D \u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0625\u0635\u062F\u0627\u0631 {v} \u0648\u062A\u062B\u0628\u064A\u062A\u0647\u2026 \u0633\u064A\u064F\u0639\u0627\u062F \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627.", "update.state.restarting": "\u062C\u0627\u0631\u064D \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0634\u063A\u064A\u0644 \u0628\u0627\u0644\u0625\u0635\u062F\u0627\u0631 {v}\u2026", "update.state.error": "\u0644\u0645 \u064A\u0646\u062C\u062D \u0627\u0644\u062A\u062D\u062F\u064A\u062B: {msg}. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0644\u0627\u062D\u0642\u064B\u0627.", "tip.update": "\u064A\u062A\u062D\u0642\u0642 \u0645\u0646 \u0648\u062C\u0648\u062F \u0625\u0635\u062F\u0627\u0631 \u0623\u062D\u062F\u062B \u0645\u0646 BitPull. \u0625\u0646 \u0648\u064F\u062C\u062F\u060C \u064A\u0646\u0632\u0651\u0644\u0647 \u0648\u064A\u062A\u062D\u0642\u0642 \u0645\u0646 \u062A\u0648\u0642\u064A\u0639\u0647 \u0648\u064A\u062B\u0628\u0651\u062A\u0647 \u0648\u064A\u0639\u064A\u062F \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u0637\u0628\u064A\u0642. \u062A\u062A\u0648\u0642\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0644\u0628\u0636\u0639 \u062B\u0648\u0627\u0646\u064D.", "tools.hint": "\u062F\u0639 \u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0644\u062F\u064A\u0643 \u064A\u0628\u062D\u062B \u0641\u064A \u0627\u0644\u0634\u064A\u0641\u0631\u0629 \u0627\u0644\u0645\u0634\u062A\u0631\u0643\u0629 \u0648\u064A\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629 \u0648\u0627\u0644\u062D\u0648\u0627\u0633\u064A\u0628 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629. \u0627\u062E\u062A\u0631 \u0623\u062F\u0627\u062A\u0643:", "tools.connect": "\u0627\u0631\u0628\u0637", "tools.connected": "\u0645\u0631\u062A\u0628\u0637", "tools.copy": "\u0627\u0646\u0633\u062E", "tools.copied": "\u062A\u0645 \u0627\u0644\u0646\u0633\u062E.", "tools.installed": "\u0645\u062B\u0628\u0651\u062A", "tools.not_found": "\u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "tools.done": "\u062A\u0645. \u0623\u0639\u062F \u062A\u0634\u063A\u064A\u0644 {name} \u0644\u062A\u0628\u062F\u0623 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 BitPull.", "tools.manual": "\u0644\u0625\u0636\u0627\u0641\u062A\u0647 \u064A\u062F\u0648\u064A\u064B\u0627:", "tools.config_invalid": "\u0645\u0644\u0641 \u0625\u0639\u062F\u0627\u062F\u0627\u062A {name} \u0644\u064A\u0633 JSON \u0635\u0627\u0644\u062D\u064B\u0627\u060C \u0644\u0630\u0627 \u0644\u0645 \u064A\u0644\u0645\u0633\u0647 BitPull. \u0623\u0635\u0644\u062D \u0627\u0644\u0645\u0644\u0641 \u0623\u0648 \u0623\u0636\u0641 BitPull \u064A\u062F\u0648\u064A\u064B\u0627 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \xAB\u0627\u0646\u0633\u062E\xBB.", "tip.tools.connect": "\u064A\u0636\u064A\u0641 BitPull \u0625\u0644\u0649 \u0625\u0639\u062F\u0627\u062F\u0627\u062A {name} \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627. \u062A\u064F\u062D\u0641\u0638 \u0646\u0633\u062E\u0629 \u0627\u062D\u062A\u064A\u0627\u0637\u064A\u0629 \u0645\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0633\u0627\u0628\u0642\u0629 \u0628\u062C\u0627\u0646\u0628\u0647\u0627.", "tip.tools.copy": "\u064A\u0646\u0633\u062E \u0627\u0644\u0623\u0645\u0631 \u0623\u0648 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0625\u0644\u0649 \u0627\u0644\u062D\u0627\u0641\u0638\u0629\u060C \u0644\u062A\u0636\u064A\u0641 BitPull \u0625\u0644\u0649 {name} \u0628\u0646\u0641\u0633\u0643.", "models.title": "\u0646\u0645\u0627\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0644\u0644\u0645\u0634\u0627\u0631\u0643\u0629", "models.hint": "\u0646\u0645\u0627\u0630\u062C \u0645\u0641\u062A\u0648\u062D\u0629 \u0645\u0646 \u0643\u0644 \u0627\u0644\u0623\u0646\u0648\u0627\u0639 \u064A\u0645\u0643\u0646 \u0644\u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0625\u0639\u0627\u0631\u062A\u0647\u0627. \u0644\u0627 \u062A\u064F\u0639\u0631\u0636 \u0625\u0644\u0627 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u062A\u064A \u062A\u0633\u0645\u062D \u0631\u062E\u0635\u062A\u0647\u0627 \u0628\u062A\u0642\u062F\u064A\u0645\u0647\u0627 \u0644\u0644\u0622\u062E\u0631\u064A\u0646. \u062A\u064F\u0639\u0631\u0636 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u062A\u064A \u0646\u0632\u0651\u0644\u062A\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0645\u0627 \u062F\u0627\u0645\u062A \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u0641\u0639\u0651\u0644\u0629.", "models.engine.title": "\u0645\u062D\u0631\u0643 \u0627\u0644\u0635\u0648\u0631 \u0648\u0627\u0644\u0635\u0648\u062A \u0648\u0627\u0644\u0645\u0648\u0633\u064A\u0642\u0649", "models.engine.help": "Lemonade (\u0645\u0641\u062A\u0648\u062D \u0627\u0644\u0645\u0635\u062F\u0631): \u062A\u0648\u0644\u064A\u062F \u0627\u0644\u0635\u0648\u0631\u060C \u0648\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0643\u0644\u0627\u0645 \u0625\u0644\u0649 \u0646\u0635\u060C \u0648\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0646\u0635 \u0625\u0644\u0649 \u0643\u0644\u0627\u0645\u060C \u0648\u0627\u0644\u0645\u0648\u0633\u064A\u0642\u0649\u060C \u0648\u0625\u0639\u0627\u062F\u0629 \u062A\u0631\u062A\u064A\u0628 \u0627\u0644\u0645\u0633\u062A\u0646\u062F\u0627\u062A\u060C \u0648\u062A\u0643\u0628\u064A\u0631 \u0627\u0644\u0635\u0648\u0631. \u064A\u064F\u062B\u0628\u064E\u0651\u062A \u062F\u0627\u062E\u0644 BitPull \u062F\u0648\u0646 \u0635\u0644\u0627\u062D\u064A\u0627\u062A \u0627\u0644\u0645\u0633\u0624\u0648\u0644.", "models.engine.install": "\u062A\u062B\u0628\u064A\u062A \u0627\u0644\u0645\u062D\u0631\u0643", "models.engine.repair": "\u0625\u0639\u0627\u062F\u0629 \u062A\u062B\u0628\u064A\u062A \u0627\u0644\u0645\u062D\u0631\u0643", "models.engine.unsupported": "\u063A\u064A\u0631 \u0645\u062A\u0627\u062D \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 (\u064A\u062A\u0637\u0644\u0628 Apple silicon\u060C \u0623\u0648 Windows/Linux x64)", "models.need_engine": "\u062B\u0628\u0651\u062A \u0627\u0644\u0645\u062D\u0631\u0643 \u0623\u0648\u0644\u064B\u0627", "models.not_here": "\u063A\u064A\u0631 \u0645\u062A\u0627\u062D \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "models.shared": "\u062A\u0645 \u0627\u0644\u062A\u0646\u0632\u064A\u0644 \xB7 \u0645\u064F\u0634\u0627\u0631\u0643", "models.download": "\u062A\u0646\u0632\u064A\u0644 ({size} \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A)", "models.needs_ram": "\u064A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0646\u062D\u0648 {ram} \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A \u0645\u0646 \u0627\u0644\u0630\u0627\u0643\u0631\u0629: \u0642\u062F \u064A\u0643\u0648\u0646 \u0628\u0637\u064A\u0626\u064B\u0627 \u0647\u0646\u0627", "models.recommended": "\u0645\u0648\u0635\u0649 \u0628\u0647", "models.license": "\u0627\u0644\u0631\u062E\u0635\u0629", "models.ok.engine": "\u062C\u0627\u0631\u064D \u062A\u062B\u0628\u064A\u062A \u0627\u0644\u0645\u062D\u0631\u0643\u2026", "task.chat": "\u0627\u0644\u0646\u0635 \u0648\u0627\u0644\u0628\u0631\u0645\u062C\u0629", "task.vision": "\u0627\u0644\u0635\u0648\u0631 \u2190 \u0646\u0635", "task.ocr": "\u0627\u0644\u0645\u0633\u062A\u0646\u062F\u0627\u062A (OCR)", "task.translate": "\u0627\u0644\u062A\u0631\u062C\u0645\u0629", "task.embed": "\u0627\u0644\u062A\u0636\u0645\u064A\u0646\u0627\u062A (\u0627\u0644\u0628\u062D\u062B)", "task.rerank": "\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0631\u062A\u064A\u0628", "task.image": "\u062A\u0648\u0644\u064A\u062F \u0627\u0644\u0635\u0648\u0631", "task.upscale": "\u062A\u0643\u0628\u064A\u0631 \u0627\u0644\u0635\u0648\u0631", "task.stt": "\u0627\u0644\u0643\u0644\u0627\u0645 \u0625\u0644\u0649 \u0646\u0635", "task.tts": "\u0627\u0644\u0646\u0635 \u0625\u0644\u0649 \u0643\u0644\u0627\u0645", "task.music": "\u0627\u0644\u0645\u0648\u0633\u064A\u0642\u0649", "limits.title": "\u062D\u062F\u0648\u062F\u0643 \u0644\u0644\u0622\u062E\u0631\u064A\u0646", "limits.hint": "\u0645\u0642\u062F\u0627\u0631 \u0639\u0645\u0644 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0627\u0644\u0630\u064A \u064A\u0646\u062C\u0632\u0647 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0644\u0622\u062E\u0631\u064A\u0646. \u0627\u062A\u0631\u0643\u0647 \u0641\u0627\u0631\u063A\u064B\u0627 \u0644\u0639\u062F\u0645 \u0648\u0636\u0639 \u062D\u062F. \u0639\u0646\u062F \u0628\u0644\u0648\u063A \u062D\u062F\u064D\u0651 \u0645\u0627\u060C \u062A\u062A\u0648\u0642\u0641 \u0646\u0645\u0627\u0630\u062C\u0643 \u0639\u0646 \u0627\u0644\u0639\u0631\u0636 \u062D\u062A\u0649 \u0628\u062F\u0627\u064A\u0629 \u0627\u0644\u0641\u062A\u0631\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629.", "limits.save": "\u062D\u0641\u0638 \u0627\u0644\u062D\u062F\u0648\u062F", "limits.requests": "\u0627\u0644\u0637\u0644\u0628\u0627\u062A", "limits.tokens": "\u0627\u0644\u0631\u0645\u0648\u0632", "limits.used": "\u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645", "limits.day": "\u064A\u0648\u0645\u064A\u064B\u0627", "limits.week": "\u0623\u0633\u0628\u0648\u0639\u064A\u064B\u0627", "limits.month": "\u0634\u0647\u0631\u064A\u064B\u0627", "limits.none": "\u0628\u0644\u0627 \u062D\u062F", "limits.usage": "{requests} \u0637\u0644\u0628\u0627\u062A \xB7 {tokens} \u0631\u0645\u0632", "limits.saved": "\u062A\u0645 \u062D\u0641\u0638 \u0627\u0644\u062D\u062F\u0648\u062F.", "tip.models.engine": "\u064A\u0646\u0632\u0651\u0644 \u0645\u062D\u0631\u0643 Lemonade \u0645\u0641\u062A\u0648\u062D \u0627\u0644\u0645\u0635\u062F\u0631 \u062F\u0627\u062E\u0644 BitPull\u060C \u0644\u064A\u062A\u0645\u0643\u0646 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0645\u0646 \u0625\u0639\u0627\u0631\u0629 \u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0635\u0648\u0631 \u0648\u0627\u0644\u0635\u0648\u062A \u0648\u0627\u0644\u0645\u0648\u0633\u064A\u0642\u0649.", "tip.models.download": "\u064A\u0646\u0632\u0651\u0644 {model} ({size} \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A) \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0639\u0631\u0636\u0647 \u0639\u0644\u0649 \u0627\u0644\u0622\u062E\u0631\u064A\u0646. \u064A\u0645\u0643\u0646\u0643 \u062D\u0630\u0641\u0647 \u0644\u0627\u062D\u0642\u064B\u0627.", "tip.limits.save": "\u064A\u062D\u0641\u0638 \u0627\u0644\u062D\u062F\u0648\u062F \u0627\u0644\u064A\u0648\u0645\u064A\u0629 \u0648\u0627\u0644\u0623\u0633\u0628\u0648\u0639\u064A\u0629 \u0648\u0627\u0644\u0634\u0647\u0631\u064A\u0629 \u0644\u0639\u0645\u0644 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0644\u0644\u0622\u062E\u0631\u064A\u0646.", "lend.visible": "\u2713 \u062A\u0631\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628: {cpus} \u0645\u0639\u0627\u0644\u062C \u0648{ram} \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A \u0645\u062A\u0627\u062D\u0629 \u0644\u0644\u0622\u062E\u0631\u064A\u0646.", "lend.invisible": "\u0644\u0627 \u062A\u0631\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0628\u0639\u062F: \u0627\u0646\u062A\u0638\u0631 \u062D\u062A\u0649 \u062F\u0642\u064A\u0642\u0629\u061B \u0648\u0625\u0646 \u0628\u0642\u064A \u0627\u0644\u0623\u0645\u0631 \u0643\u0630\u0644\u0643 \u0641\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0627\u062A\u0635\u0627\u0644 \u0628\u0627\u0644\u0625\u0646\u062A\u0631\u0646\u062A.", "lend.unusable": "\u26A0 \u0644\u0627 \u064A\u0645\u0643\u0646 \u0644\u0623\u062D\u062F \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0628\u0639\u062F: \u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0634\u063A\u064A\u0644 \u0623\u064A \u0645\u0647\u0645\u0629 \u0647\u0646\u0627. {reason}", "lend.unusable.docker": '\u0644\u0627 \u064A\u062C\u062A\u0627\u0632 Docker \u0641\u062D\u0635 \u0627\u0644\u0639\u0632\u0644 \u0641\u064A BitPull: \u0631\u0627\u062C\u0639 "\u0625\u0639\u062F\u0627\u062F \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628".', "lend.unusable.off": '\u0645\u0647\u0627\u0645 \u0627\u0644\u062D\u0627\u0648\u064A\u0627\u062A \u0645\u062A\u0648\u0642\u0641\u0629 \u0648\u0644\u0627 \u064A\u0648\u062C\u062F \u0646\u0645\u0648\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0645\u062B\u0628\u062A: \u0641\u0639\u0651\u0644 "\u0645\u0647\u0627\u0645 \u0627\u0644\u062D\u0627\u0648\u064A\u0627\u062A" \u0623\u0648 \u0646\u0632\u0651\u0644 \u0646\u0645\u0648\u0630\u062C\u064B\u0627.', "lend.docker_login": '\u0644\u0627 \u064A\u0633\u062A\u0637\u064A\u0639 Docker \u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0635\u0648\u0631 \u0644\u0623\u0646 \u062A\u0633\u062C\u064A\u0644 \u062F\u062E\u0648\u0644\u0647 \u0625\u0644\u0649 Docker Hub \u0644\u0645 \u064A\u0639\u062F \u0635\u0627\u0644\u062D\u064B\u0627. \u0641\u064A Docker Desktop \u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u062D\u0633\u0627\u0628\u0643 (\u0623\u0639\u0644\u0649 \u0627\u0644\u064A\u0645\u064A\u0646) \u2190 Sign out\u060C \u062B\u0645 \u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627 \u0623\u0648 \u0627\u0628\u0642\u064E \u062F\u0648\u0646 \u062A\u0633\u062C\u064A\u0644. \u062B\u0645 \u0627\u0636\u063A\u0637 "\u062A\u062D\u0642\u0642 \u0645\u062C\u062F\u062F\u064B\u0627".', "lend.off_hint": '\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u062A\u0648\u0642\u0641\u0629: \u0641\u0639\u0651\u0644 "{enabled}" \u0641\u064A "{rules}" \u0623\u062F\u0646\u0627\u0647 \u0648\u0627\u0636\u063A\u0637 "{save}". (\u0627\u0644\u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u0645\u0624\u0642\u062A / \u0627\u0644\u0627\u0633\u062A\u0626\u0646\u0627\u0641 \u064A\u0648\u0642\u0641 \u0645\u0624\u0642\u062A\u064B\u0627 \u0641\u0642\u0637 \u0625\u0639\u0627\u0631\u0629 \u0645\u0641\u0639\u0651\u0644\u0629 \u0623\u0635\u0644\u064B\u0627.)', "lend.low_memory": '\u062A\u0639\u0631\u0636 {mb} \u0645\u064A\u063A\u0627\u0628\u0627\u064A\u062A \u0641\u0642\u0637 \u0645\u0646 \u0627\u0644\u0630\u0627\u0643\u0631\u0629: \u0644\u0646 \u064A\u062A\u0633\u0639 \u0630\u0644\u0643 \u0625\u0644\u0627 \u0644\u0645\u0647\u0627\u0645 \u0642\u0644\u064A\u0644\u0629. \u0641\u064A "{rules}" \u0627\u0636\u0628\u0637 "{memory}" \u0645\u062B\u0644\u064B\u0627 \u0639\u0644\u0649 4096 (= 4 \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A) \u0648\u0627\u0636\u063A\u0637 "{save}".', "rules.awake": "\u0627\u0644\u0628\u0642\u0627\u0621 \u0645\u0633\u062A\u064A\u0642\u0638\u064B\u0627 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0625\u0639\u0627\u0631\u0629", "rules.awake.help": "\u0623\u062B\u0646\u0627\u0621 \u062A\u0634\u063A\u064A\u0644 \u0645\u0647\u0645\u0629 \u0644\u0634\u062E\u0635 \u0645\u0627\u060C \u0644\u0627 \u064A\u062F\u062E\u0644 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0641\u064A \u0648\u0636\u0639 \u0627\u0644\u0633\u0643\u0648\u0646 (\u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0646\u0637\u0641\u0626 \u0627\u0644\u0634\u0627\u0634\u0629 \u0645\u0639 \u0630\u0644\u0643). \u0628\u0639\u062F\u0647\u0627 \u064A\u0646\u0627\u0645 \u0643\u0627\u0644\u0645\u0639\u062A\u0627\u062F. \u064A\u0645\u0646\u0639 \u0627\u0646\u0642\u0637\u0627\u0639 \u0627\u0644\u0645\u0647\u0627\u0645.", "ask.wait": "\u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631 \u062D\u062A\u0649 (\u062F\u0642\u0627\u0626\u0642)", "ask.wait.save": "\u062D\u0641\u0638", "ask.wait.saved": "\u0633\u064A\u062A\u0645 \u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u0625\u062C\u0627\u0628\u0627\u062A \u062D\u062A\u0649 {n} \u062F\u0642\u064A\u0642\u0629.", "ask.wait.range": "\u0623\u062F\u062E\u0644 \u0639\u062F\u062F \u062F\u0642\u0627\u0626\u0642 \u0628\u064A\u0646 1 \u0648120.", "tip.wait": "\u0645\u062F\u0629 \u0627\u0646\u062A\u0638\u0627\u0631 \u0625\u062C\u0627\u0628\u0629 \u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0641\u064A \u0627\u0644\u0634\u0628\u0643\u0629. \u0642\u062F \u062A\u0633\u062A\u063A\u0631\u0642 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0639\u0644\u0649 \u0645\u0639\u0627\u0644\u062C \u0634\u062E\u0635 \u0622\u062E\u0631 \u062F\u0642\u0627\u0626\u0642. \u064A\u0645\u0643\u0646 \u0644\u0630\u0643\u0627\u0626\u0643 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u062A\u063A\u064A\u064A\u0631\u0647\u0627 \u0623\u064A\u0636\u064B\u0627." }, bn: { "lang.name": "\u09AC\u09BE\u0982\u09B2\u09BE", "app.title": "BitPull", "locked.text": "BitPull \u0985\u09CD\u09AF\u09BE\u09AA \u09A5\u09C7\u0995\u09C7 \u09A1\u09CD\u09AF\u09BE\u09B6\u09AC\u09CB\u09B0\u09CD\u09A1 \u0996\u09C1\u09B2\u09C1\u09A8: \u098F\u09B0 \u09B2\u09BF\u0982\u0995\u09C7 \u0985\u09CD\u09AF\u09BE\u0995\u09CD\u09B8\u09C7\u09B8 \u0995\u09C0 \u09A5\u09BE\u0995\u09C7\u0964", "pill.online": "\u0985\u09A8\u09B2\u09BE\u0987\u09A8", "pill.offline": "\u0985\u09AB\u09B2\u09BE\u0987\u09A8", "pill.direct": "\u09B8\u09B0\u09BE\u09B8\u09B0\u09BF \u09A0\u09BF\u0995\u09BE\u09A8\u09BE", "pill.relay_on": "\u09B0\u09BF\u09B2\u09C7 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4", "pill.relay_off": "\u09B0\u09BF\u09B2\u09C7 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4 \u09A8\u09AF\u09BC", "pill.cached": "{n}\u099F\u09BF \u0995\u09CD\u09AF\u09BE\u09B6 \u0995\u09B0\u09BE \u0995\u09AA\u09BF", "net.title": "\u09B2\u09BE\u0987\u09AD \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995", "net.online": "{n}\u099F\u09BF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0985\u09A8\u09B2\u09BE\u0987\u09A8\u09C7", "net.lending": "{n}\u099F\u09BF \u098F\u0996\u09A8 \u09A7\u09BE\u09B0 \u09A6\u09BF\u099A\u09CD\u099B\u09C7", "net.cpu": "{n}\u099F\u09BF CPU \u0995\u09CB\u09B0", "net.ram": "{n} GB RAM", "net.gpu": "{n}\u099F\u09BF GPU", "net.models": "{n}\u099F\u09BF AI \u09AE\u09A1\u09C7\u09B2", "net.jobs": "{n}\u099F\u09BF \u0995\u09BE\u099C \u099A\u09B2\u099B\u09C7", "credits.title": "\u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09AC\u09CD\u09AF\u09BE\u09B2\u09BE\u09A8\u09CD\u09B8", "credits.plan": "{plan} \u09AA\u09CD\u09B2\u09CD\u09AF\u09BE\u09A8 \xB7 {n} \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u09A8\u09BE\u09AE\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7", "plan.free": "\u09AB\u09CD\u09B0\u09BF", "plan.base": "\u09AC\u09C7\u09B8\u09BF\u0995", "plan.pro": "\u09AA\u09CD\u09B0\u09CB", "buy.base": "\u09AC\u09C7\u09B8\u09BF\u0995 \u20AC4.50", "buy.pro": "\u09AA\u09CD\u09B0\u09CB \u20AC9.90", "buy.recharge": "\u09B0\u09BF\u099A\u09BE\u09B0\u09CD\u099C \u20AC5", "buy.ok": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AC\u09CD\u09B0\u09BE\u0989\u099C\u09BE\u09B0\u09C7 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "lend.title": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A8", "lend.hint": "\u0995\u09BE\u099C\u0997\u09C1\u09B2\u09CB \u0986\u09B2\u09BE\u09A6\u09BE \u09B8\u09CD\u09AF\u09BE\u09A8\u09CD\u09A1\u09AC\u0995\u09CD\u09B8\u09C7 \u098F\u09A8\u09CD\u09A1-\u099F\u09C1-\u098F\u09A8\u09CD\u09A1 \u098F\u09A8\u0995\u09CD\u09B0\u09BF\u09AA\u09CD\u099F\u09C7\u09A1 \u0985\u09AC\u09B8\u09CD\u09A5\u09BE\u09AF\u09BC \u099A\u09B2\u09C7, \u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09BE\u0987\u09B2\u09C7 \u0995\u09CB\u09A8\u09CB \u0985\u09CD\u09AF\u09BE\u0995\u09CD\u09B8\u09C7\u09B8 \u099B\u09BE\u09A1\u09BC\u09BE\u0987\u0964 \u0986\u09AA\u09A8\u09BF \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0986\u09AF\u09BC \u0995\u09B0\u09C7\u09A8\u0964", "lend.state.off": "\u09AC\u09A8\u09CD\u09A7", "lend.state.waiting": "\u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09AE\u09BE\u09A3", "lend.state.working": "\u0995\u09BE\u099C \u099A\u09B2\u099B\u09C7", "lend.reason.lending_off": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7", "lend.reason.paused": "\u09AC\u09BF\u09B0\u09A4\u09BF\u09A4\u09C7", "lend.reason.outside_hours": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09A8\u09BF\u09B0\u09CD\u09A7\u09BE\u09B0\u09BF\u09A4 \u09B8\u09AE\u09AF\u09BC\u09C7\u09B0 \u09AC\u09BE\u0987\u09B0\u09C7", "lend.reason.on_battery": "\u09AC\u09CD\u09AF\u09BE\u099F\u09BE\u09B0\u09BF\u09A4\u09C7 \u099A\u09B2\u099B\u09C7", "lend.reason.computer_in_use": "\u0986\u09AA\u09A8\u09BF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u099B\u09C7\u09A8", "lend.reason.no_jobs": "\u09B8\u09BE\u09B0\u09BF\u09A4\u09C7 \u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u09A8\u09C7\u0987", "lend.running": "{time} \u09A5\u09C7\u0995\u09C7 \u098F\u0995\u099F\u09BF {kind} \u0995\u09BE\u099C \u099A\u09B2\u099B\u09C7", "lend.detail": "{reason} \xB7 {n}\u099F\u09BF \u0995\u09BE\u099C \u09B8\u09AE\u09CD\u09AA\u09A8\u09CD\u09A8 \xB7 \u09A6\u09BF\u099A\u09CD\u099B\u09C7 {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", \u09B8\u09CD\u09AF\u09BE\u09A8\u09CD\u09A1\u09AC\u0995\u09CD\u09B8 {name}", "lend.detail.models": ", {n}\u099F\u09BF \u09AE\u09A1\u09C7\u09B2", "lend.pause": "\u09AC\u09BF\u09B0\u09A4\u09BF", "lend.resume": "\u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09B2\u09C1", "lend.paused_ok": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09BF\u09B0\u09A4\u09BF\u09A4\u09C7\u0964 \u099A\u09B2\u09AE\u09BE\u09A8 \u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u09A5\u09BE\u0995\u09B2\u09C7 \u09A4\u09BE \u0985\u09A8\u09CD\u09AF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "lend.resumed_ok": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09B2\u09C1 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "setup.title": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B8\u09C7\u099F \u0986\u09AA \u0995\u09B0\u09C1\u09A8", "setup.hint": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u099C\u09A8\u09CD\u09AF \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 \u09AF\u09BE \u09A6\u09B0\u0995\u09BE\u09B0\u0964 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u0986\u09B0 \u0995\u09BF\u099B\u09C1 \u09B2\u09BE\u0997\u09C7 \u09A8\u09BE\u0964 \u0987\u09A8\u09B8\u09CD\u099F\u09B2\u09BE\u09B0 \u0986\u09B8\u09C7 \u0985\u09AB\u09BF\u09B8\u09BF\u09AF\u09BC\u09BE\u09B2 \u09B8\u09BE\u0987\u099F \u09A5\u09C7\u0995\u09C7; \u0986\u09AA\u09A8\u09BE\u09B0 \u09B8\u09BF\u09B8\u09CD\u099F\u09C7\u09AE \u09A8\u09BF\u09B6\u09CD\u099A\u09BF\u09A4 \u0995\u09B0\u09A4\u09C7 \u09AC\u09B2\u09AC\u09C7\u0964", "setup.checking": "\u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026", "setup.docker.help": "\u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u0995\u09BE\u099C \u0986\u09B2\u09BE\u09A6\u09BE \u09B8\u09CD\u09AF\u09BE\u09A8\u09CD\u09A1\u09AC\u0995\u09CD\u09B8\u09C7 \u099A\u09BE\u09B2\u09BE\u09AF\u09BC\u0964 \u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0 \u0995\u09BE\u099C\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8\u0964 \u09AC\u09CD\u09AF\u0995\u09CD\u09A4\u09BF\u0997\u09A4 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0993 \u099B\u09CB\u099F \u09AC\u09CD\u09AF\u09AC\u09B8\u09BE\u09B0 \u099C\u09A8\u09CD\u09AF \u09AB\u09CD\u09B0\u09BF\u0964", "setup.docker.download": "Docker \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C1\u09A8", "setup.docker.start": "Docker \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C1\u09A8", "setup.apple.title": "Apple Container (\u0990\u099A\u09CD\u099B\u09BF\u0995)", "setup.apple.help": "\u0986\u09B0\u0993 \u09B6\u0995\u09CD\u09A4\u09BF\u09B6\u09BE\u09B2\u09C0 \u09AC\u09BF\u099A\u09CD\u099B\u09BF\u09A8\u09CD\u09A8\u09A4\u09BE: \u09AA\u09CD\u09B0\u09A4\u09BF\u099F\u09BF \u0995\u09BE\u099C \u09A8\u09BF\u099C\u09B8\u09CD\u09AC \u09AD\u09BE\u09B0\u09CD\u099A\u09C1\u09AF\u09BC\u09BE\u09B2 \u09AE\u09C7\u09B6\u09BF\u09A8\u09C7\u0964 \u0990\u099A\u09CD\u099B\u09BF\u0995; \u09B6\u09C1\u09B0\u09C1 \u0995\u09B0\u09A4\u09C7 Docker-\u0987 \u09AF\u09A5\u09C7\u09B7\u09CD\u099F\u0964", "setup.apple.get": "Apple Container \u09A8\u09BF\u09A8", "setup.ollama.help": "\u0993\u09AA\u09C7\u09A8 AI \u09AE\u09A1\u09C7\u09B2 \u099A\u09BE\u09B2\u09BE\u09AF\u09BC (Qwen, Llama, Mistral\u2026)\u0964 AI \u09AE\u09A1\u09C7\u09B2 \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8\u0964", "setup.ollama.download": "Ollama \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C1\u09A8", "setup.ollama.start": "Ollama \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C1\u09A8", "setup.model.title": "AI \u09AE\u09A1\u09C7\u09B2", "setup.model.help": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09AF\u09C7 \u09AE\u09A1\u09C7\u09B2 \u09A6\u09C7\u09AF\u09BC\u0964 {ram} GB \u09AE\u09C7\u09AE\u09B0\u09BF\u09B0 \u099C\u09A8\u09CD\u09AF \u09AA\u09CD\u09B0\u09B8\u09CD\u09A4\u09BE\u09AC\u09BF\u09A4: {model}\u0964", "setup.model.download": "{model} \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C1\u09A8 ({size} GB)", "setup.model.none": "\u098F\u0996\u09A8\u0993 \u0995\u09BF\u099B\u09C1 \u09A8\u09C7\u0987", "setup.model.need_ollama": "\u0986\u0997\u09C7 Ollama \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C7 \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C1\u09A8", "setup.nvidia.title": "NVIDIA GPU \u09A1\u09CD\u09B0\u09BE\u0987\u09AD\u09BE\u09B0 (\u0990\u099A\u09CD\u099B\u09BF\u0995)", "setup.nvidia.help": "\u09B6\u09C1\u09A7\u09C1 \u09AF\u09A6\u09BF \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u098F\u09AE\u09A8 NVIDIA \u0997\u09CD\u09B0\u09BE\u09AB\u09BF\u0995\u09CD\u09B8 \u0995\u09BE\u09B0\u09CD\u09A1 \u09A5\u09BE\u0995\u09C7 \u09AF\u09BE \u0986\u09AA\u09A8\u09BF \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u099A\u09BE\u09A8\u0964", "setup.nvidia.get": "NVIDIA \u09A1\u09CD\u09B0\u09BE\u0987\u09AD\u09BE\u09B0 \u09A8\u09BF\u09A8", "setup.status.running": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u0993 \u099A\u09BE\u09B2\u09C1", "setup.status.installed": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE", "setup.status.stopped": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE, \u099A\u09BE\u09B2\u09C1 \u09A8\u09AF\u09BC", "setup.status.missing": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u09A8\u09C7\u0987", "setup.status.found": "\u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09C7\u099B\u09C7", "setup.status.not_found": "\u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF", "setup.terminal": "\u099F\u09BE\u09B0\u09CD\u09AE\u09BF\u09A8\u09BE\u09B2\u09C7 \u099A\u09BE\u09B2\u09BE\u09A8:", "setup.done": "\u09B8\u09AE\u09CD\u09AA\u09A8\u09CD\u09A8", "setup.opened": "\u09B8\u09AE\u09CD\u09AA\u09A8\u09CD\u09A8: {file} \u0996\u09CB\u09B2\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7, \u098F\u09B0 \u09A7\u09BE\u09AA\u0997\u09C1\u09B2\u09CB \u0985\u09A8\u09C1\u09B8\u09B0\u09A3 \u0995\u09B0\u09C1\u09A8", "setup.recheck": "\u0986\u09AC\u09BE\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C1\u09A8", "setup.ok.download": "\u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u09B6\u09C1\u09B0\u09C1 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964 \u09B6\u09C7\u09B7 \u09B9\u09B2\u09C7 \u0987\u09A8\u09B8\u09CD\u099F\u09B2\u09BE\u09B0 \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7\u0987 \u0996\u09C1\u09B2\u09AC\u09C7: \u098F\u09B0 \u09A7\u09BE\u09AA\u0997\u09C1\u09B2\u09CB \u0985\u09A8\u09C1\u09B8\u09B0\u09A3 \u0995\u09B0\u09C1\u09A8\u0964", "setup.ok.start": "\u099A\u09BE\u09B2\u09C1 \u09B9\u099A\u09CD\u099B\u09C7\u2026 \u098F\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u09B2\u09BE\u0997\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964 \u098F\u0987 \u09A4\u09BE\u09B2\u09BF\u0995\u09BE \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7\u0987 \u0986\u09AA\u09A1\u09C7\u099F \u09B9\u09AF\u09BC\u0964", "setup.ok.pull": "\u09AE\u09A1\u09C7\u09B2 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u09B6\u09C1\u09B0\u09C1 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964 \u0985\u0997\u09CD\u09B0\u0997\u09A4\u09BF \u0989\u09AA\u09B0\u09C7 \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u099A\u09CD\u099B\u09C7\u0964", "setup.ok.page": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AC\u09CD\u09B0\u09BE\u0989\u099C\u09BE\u09B0\u09C7 \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "setup.ok.recheck": "\u0986\u09AC\u09BE\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "rules.title": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09A8\u09BF\u09AF\u09BC\u09AE", "rules.enabled": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u099A\u09BE\u09B2\u09C1", "rules.enabled.help": "\u09AA\u09CD\u09B0\u09A7\u09BE\u09A8 \u09B8\u09C1\u0987\u099A\u0964 \u09AC\u09A8\u09CD\u09A7 \u09A5\u09BE\u0995\u09B2\u09C7 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0995\u0996\u09A8\u09CB \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u0995\u09BE\u099C \u099A\u09BE\u09B2\u09BE\u09AF\u09BC \u09A8\u09BE\u0964 \u0986\u09AA\u09A8\u09BF \u09A8\u09BF\u099C\u09C7 \u09A4\u09AC\u09C1\u0993 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7\u09A8\u0964", "rules.cpus": "\u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A CPU", "rules.cpus.help": "\u098F\u0995\u099F\u09BF \u0995\u09BE\u099C \u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A \u0995\u09A4\u0997\u09C1\u09B2\u09CB \u09AA\u09CD\u09B0\u09B8\u09C7\u09B8\u09B0 \u0995\u09CB\u09B0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7\u0964 \u0989\u09A6\u09BE\u09B9\u09B0\u09A3: \u09EE \u0995\u09CB\u09B0\u09C7\u09B0 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 2 \u09A6\u09BF\u09B2\u09C7 \u0986\u09AA\u09A8\u09BE\u09B0 \u099C\u09A8\u09CD\u09AF \u09EC\u099F\u09BF \u0995\u09CB\u09B0 \u0996\u09BE\u09B2\u09BF \u09A5\u09BE\u0995\u09C7\u0964", "rules.memory": "\u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A \u09AE\u09C7\u09AE\u09B0\u09BF (MB)", "rules.memory.help": "\u098F\u0995\u099F\u09BF \u0995\u09BE\u099C \u09AF\u09A4 RAM \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7, \u09AE\u09C7\u0997\u09BE\u09AC\u09BE\u0987\u099F\u09C7 (1024 MB = 1 GB)\u0964 BitPull \u0995\u0996\u09A8\u09CB \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 \u0985\u09B0\u09CD\u09A7\u09C7\u0995\u09C7\u09B0 \u09AC\u09C7\u09B6\u09BF \u09AE\u09C7\u09AE\u09B0\u09BF \u09A6\u09C7\u09AF\u09BC \u09A8\u09BE\u0964", "rules.gpu": "GPU", "rules.gpu.none": "\u0995\u09CB\u09A8\u09CB\u099F\u09BF \u09A8\u09AF\u09BC", "rules.gpu.consumer": "\u09B8\u09BE\u09A7\u09BE\u09B0\u09A3 (8\u201312 GB)", "rules.gpu.high": "\u0989\u099A\u09CD\u099A\u09AE\u09BE\u09A8\u09C7\u09B0 (16\u201324 GB)", "rules.gpu.datacenter": "\u09A1\u09C7\u099F\u09BE \u09B8\u09C7\u09A8\u09CD\u099F\u09BE\u09B0 (40 GB+)", "rules.gpu.help": '\u0986\u09AA\u09A8\u09BF \u09AF\u09C7 \u0997\u09CD\u09B0\u09BE\u09AB\u09BF\u0995\u09CD\u09B8 \u0995\u09BE\u09B0\u09CD\u09A1 \u09A7\u09BE\u09B0 \u09A6\u09C7\u09A8, \u09AD\u09BF\u09A1\u09BF\u0993 \u09AE\u09C7\u09AE\u09B0\u09BF \u0985\u09A8\u09C1\u09AF\u09BE\u09AF\u09BC\u09C0\u0964 \u0986\u09B2\u09BE\u09A6\u09BE GPU \u09A8\u09BE \u09A5\u09BE\u0995\u09B2\u09C7 \u09AC\u09BE \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09A8\u09BE \u099A\u09BE\u0987\u09B2\u09C7 "\u0995\u09CB\u09A8\u09CB\u099F\u09BF \u09A8\u09AF\u09BC" \u09B0\u09BE\u0996\u09C1\u09A8\u0964 GPU \u09B8\u09AC\u099A\u09C7\u09AF\u09BC\u09C7 \u09AC\u09C7\u09B6\u09BF \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0986\u09AF\u09BC \u0995\u09B0\u09C7\u0964', "rules.containers": "\u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0 \u0995\u09BE\u099C", "rules.containers.help": "\u0987\u09A8\u09CD\u099F\u09BE\u09B0\u09A8\u09C7\u099F \u0993 \u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09BE\u0987\u09B2\u09C7 \u0985\u09CD\u09AF\u09BE\u0995\u09CD\u09B8\u09C7\u09B8 \u099B\u09BE\u09A1\u09BC\u09BE \u098F\u0995\u099F\u09BF \u09B8\u09CD\u09AF\u09BE\u09A8\u09CD\u09A1\u09AC\u0995\u09CD\u09B8\u09C7 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u09AC\u09BF\u09B2\u09CD\u09A1, \u099F\u09C7\u09B8\u09CD\u099F \u0993 \u09B8\u09CD\u0995\u09CD\u09B0\u09BF\u09AA\u09CD\u099F \u099A\u09BE\u09B2\u09BE\u09AF\u09BC\u0964 Docker (\u09AC\u09BE Apple Container) \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8: \u09A6\u09C7\u0996\u09C1\u09A8 \u201C\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B8\u09C7\u099F \u0986\u09AA \u0995\u09B0\u09C1\u09A8\u201D\u0964", "rules.models": "\u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2 (Ollama)", "rules.models.help": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 Ollama-\u09A4\u09C7 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2 \u09A6\u09BF\u09AF\u09BC\u09C7 AI \u0985\u09A8\u09C1\u09B0\u09CB\u09A7\u09C7\u09B0 \u0989\u09A4\u09CD\u09A4\u09B0 \u09A6\u09C7\u09AF\u09BC\u0964 Ollama \u0993 \u0985\u09A8\u09CD\u09A4\u09A4 \u098F\u0995\u099F\u09BF \u09AE\u09A1\u09C7\u09B2 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8\u0964", "rules.idle": "\u09B6\u09C1\u09A7\u09C1 \u098F\u09A4 \u09AE\u09BF\u09A8\u09BF\u099F \u09A8\u09BF\u09B7\u09CD\u0995\u09CD\u09B0\u09BF\u09AF\u09BC \u09A5\u09BE\u0995\u09BE\u09B0 \u09AA\u09B0", "rules.idle.help": "\u098F\u09A4 \u09AE\u09BF\u09A8\u09BF\u099F \u0995\u09BF\u09AC\u09CB\u09B0\u09CD\u09A1 \u09AC\u09BE \u09AE\u09BE\u0989\u09B8 \u09A8\u09BE \u099B\u09C1\u0981\u09B2\u09C7 \u09A4\u09AC\u09C7\u0987 \u09A7\u09BE\u09B0 \u09A6\u09C7\u09AF\u09BC\u0964 0 = \u0986\u09AA\u09A8\u09BF \u0995\u09BE\u099C \u0995\u09B0\u09BE\u09B0 \u09B8\u09AE\u09AF\u09BC\u0993 \u09A7\u09BE\u09B0 \u09A6\u09C7\u09AF\u09BC\u0964", "rules.ac": "\u09B6\u09C1\u09A7\u09C1 \u099A\u09BE\u09B0\u09CD\u099C\u09BE\u09B0\u09C7 \u09B2\u09BE\u0997\u09BE\u09A8\u09CB \u09A5\u09BE\u0995\u09B2\u09C7", "rules.ac.help": "\u09B2\u09CD\u09AF\u09BE\u09AA\u099F\u09AA\u09C7 \u09AC\u09CD\u09AF\u09BE\u099F\u09BE\u09B0\u09BF\u09A4\u09C7 \u099A\u09B2\u09B2\u09C7 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7 \u09B9\u09AF\u09BC, \u09AF\u09BE\u09A4\u09C7 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09AF\u09BC \u09AC\u09CD\u09AF\u09BE\u099F\u09BE\u09B0\u09BF \u0995\u0996\u09A8\u09CB \u09AB\u09C1\u09B0\u09BF\u09AF\u09BC\u09C7 \u09A8\u09BE \u09AF\u09BE\u09AF\u09BC\u0964", "rules.hours": "\u09B6\u09C1\u09A7\u09C1 \u098F\u0987 \u0998\u09A3\u09CD\u099F\u09BE \u09A5\u09C7\u0995\u09C7 / \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 (\u0996\u09BE\u09B2\u09BF = \u09B8\u09AC\u09B8\u09AE\u09AF\u09BC)", "rules.hours.help": "\u09B6\u09C1\u09A7\u09C1 \u098F\u0987 \u09B8\u09AE\u09AF\u09BC\u09C7\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u09A7\u09BE\u09B0 \u09A6\u09C7\u09AF\u09BC, \u09E8\u09EA-\u0998\u09A3\u09CD\u099F\u09BE \u09AB\u09B0\u09AE\u09CD\u09AF\u09BE\u099F\u09C7\u0964 \u0989\u09A6\u09BE\u09B9\u09B0\u09A3: 22 \u0993 8 = \u09B0\u09BE\u09A4 \u09E7\u09E6\u099F\u09BE \u09A5\u09C7\u0995\u09C7 \u09B8\u0995\u09BE\u09B2 \u09EE\u099F\u09BE\u0964 \u09AF\u09C7\u0995\u09CB\u09A8\u09CB \u09B8\u09AE\u09AF\u09BC \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09A6\u09C1\u099F\u09CB\u0987 \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09C1\u09A8\u0964", "rules.cache": "\u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09B0\u09BF\u09AA\u09CB\u09B0 \u0995\u09CD\u09AF\u09BE\u09B6 \u0995\u09B0\u09BE \u0995\u09AA\u09BF", "rules.cache.help": "\u0985\u09A8\u09CD\u09AF \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09A6\u09C7\u09B0 \u0995\u09A4\u0997\u09C1\u09B2\u09CB \u09AA\u09BE\u09AC\u09B2\u09BF\u0995 \u09B0\u09BF\u09AA\u09CB\u09B0 \u0995\u09AA\u09BF \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B0\u09BE\u0996\u09AC\u09C7, \u09AF\u09BE\u09A4\u09C7 \u09B2\u09C7\u0996\u0995\u09B0\u09BE \u0985\u09AB\u09B2\u09BE\u0987\u09A8\u09C7 \u09A5\u09BE\u0995\u09B2\u09C7\u0993 \u09B8\u09C7\u0997\u09C1\u09B2\u09CB \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u0964 \u09B8\u09BE\u09AE\u09BE\u09A8\u09CD\u09AF \u09A1\u09BF\u09B8\u09CD\u0995 \u099C\u09BE\u09AF\u09BC\u0997\u09BE \u09B2\u09BE\u0997\u09C7 \u098F\u09AC\u0982 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0986\u09AF\u09BC \u09B9\u09AF\u09BC\u0964 0 = \u0995\u09CB\u09A8\u09CB\u099F\u09BF \u09A8\u09AF\u09BC\u0964", "rules.save": "\u09A8\u09BF\u09AF\u09BC\u09AE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3", "rules.saved": "\u09A8\u09BF\u09AF\u09BC\u09AE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09BF\u09A4 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964 \u0995\u09AF\u09BC\u09C7\u0995 \u09B8\u09C7\u0995\u09C7\u09A8\u09CD\u09A1\u09C7\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u0995\u09BE\u09B0\u09CD\u09AF\u0995\u09B0 \u09B9\u09AC\u09C7\u0964", "rules.hours_both": "\u09A6\u09C1\u099F\u09CB \u0998\u09A3\u09CD\u099F\u09BE\u0987 \u09AA\u09C2\u09B0\u09A3 \u0995\u09B0\u09C1\u09A8, \u0985\u09A5\u09AC\u09BE \u09AF\u09C7\u0995\u09CB\u09A8\u09CB \u09B8\u09AE\u09AF\u09BC \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09A6\u09C1\u099F\u09CB\u0987 \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09C1\u09A8\u0964", "folders.title": "\u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09BF\u09A4 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0", "folders.hint": "BitPull \u09B6\u09C1\u09A7\u09C1 \u098F\u0987 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u0997\u09C1\u09B2\u09CB \u09AA\u09A1\u09BC\u09C7\u0964 \u098F\u0995\u099F\u09BF \u09AA\u09CD\u09B0\u0995\u09BE\u09B6 \u0995\u09B0\u09A4\u09C7 \u09B8\u09AE\u09CD\u09AA\u09C2\u09B0\u09CD\u09A3 bitpull.json \u09B2\u09BE\u0997\u09AC\u09C7\u0964", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09A8", "folders.none": "\u0995\u09CB\u09A8\u09CB \u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09BF\u09A4 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0 \u09A8\u09C7\u0987\u0964", "folders.draft": "\u0996\u09B8\u09A1\u09BC\u09BE", "folders.publish": "\u09AA\u09CD\u09B0\u0995\u09BE\u09B6", "folders.remove": "\u09B8\u09B0\u09BE\u09A8", "folders.need_path": "\u0986\u0997\u09C7 \u098F\u0995\u099F\u09BF \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u09C7\u09B0 \u09AA\u09C2\u09B0\u09CD\u09A3 \u09AA\u09BE\u09A5 \u09B2\u09BF\u0996\u09C1\u09A8, \u09AF\u09C7\u09AE\u09A8 /Users/you/projects/my-library\u0964", "folders.added": "\u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0 \u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09BF\u09A4 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "folders.removed": "\u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0 \u09B8\u09B0\u09BE\u09A8\u09CB \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964 BitPull \u0986\u09B0 \u098F\u099F\u09BF \u09AA\u09A1\u09BC\u09AC\u09C7 \u09A8\u09BE\u0964", "folders.drafted": "\u0996\u09B8\u09A1\u09BC\u09BE \u09AA\u09CD\u09B0\u09B8\u09CD\u09A4\u09C1\u09A4: {n}\u099F\u09BF \u09AB\u09BE\u0987\u09B2 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09C7\u099B\u09C7\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 AI-\u0995\u09C7 \u09B8\u09BE\u09B0\u09BE\u0982\u09B6 \u0993 \u09AC\u09BF\u09AC\u09B0\u09A3 \u09AA\u09C2\u09B0\u09A3 \u0995\u09B0\u09A4\u09C7 \u09A6\u09BF\u09A8 (prepare_publish \u099F\u09C1\u09B2), \u09A4\u09BE\u09B0\u09AA\u09B0 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6 \u099A\u09BE\u09AA\u09C1\u09A8\u0964", "folders.published": '"{name}" {n}\u099F\u09BF \u09AB\u09BE\u0987\u09B2\u09B8\u09B9 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6\u09BF\u09A4 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964', "folders.secrets_in": "\u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09C7\u099B\u09C7: {where}", "folders.line": "{file} \u09B2\u09BE\u0987\u09A8 {line}", "repos.title": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6\u09BF\u09A4 \u09B0\u09BF\u09AA\u09CB", "repos.hint": "\u09AB\u09BE\u0987\u09B2 \u09AC\u09A6\u09B2\u09BE\u09B2\u09C7 \u098F\u0997\u09C1\u09B2\u09CB \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7\u0987 \u0986\u09AA\u09A1\u09C7\u099F \u09B9\u09AF\u09BC (\u09AA\u09CD\u09B0\u09A4\u09BF \u09EB \u09AE\u09BF\u09A8\u09BF\u099F\u09C7)\u0964", "repos.none": "\u0995\u09CB\u09A8\u09CB \u09AA\u09CD\u09B0\u0995\u09BE\u09B6\u09BF\u09A4 \u09B0\u09BF\u09AA\u09CB \u09A8\u09C7\u0987\u0964", "repos.withdraw": "\u09AA\u09CD\u09B0\u09A4\u09CD\u09AF\u09BE\u09B9\u09BE\u09B0", "repos.withdrawn": "\u09B0\u09BF\u09AA\u09CB \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u09A5\u09C7\u0995\u09C7 \u09AA\u09CD\u09B0\u09A4\u09CD\u09AF\u09BE\u09B9\u09BE\u09B0 \u0995\u09B0\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "ask.title": "\u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2", "ask.offers": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09A6\u09BF\u099A\u09CD\u099B\u09C7: {models}\u0964", "ask.offers_none": "\u0995\u09CB\u09A8\u09CB \u09AE\u09A1\u09C7\u09B2 \u09A8\u09C7\u0987 (\u09AE\u09A1\u09C7\u09B2 \u09A6\u09BF\u09A4\u09C7 Ollama \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8)", "ask.placeholder": "\u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u098F\u0995\u099F\u09BF \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2\u0995\u09C7 \u099C\u09BF\u099C\u09CD\u099E\u09BE\u09B8\u09BE \u0995\u09B0\u09C1\u09A8\u2026", "ask.small": "\u099B\u09CB\u099F", "ask.medium": "\u09AE\u09BE\u099D\u09BE\u09B0\u09BF", "ask.large": "\u09AC\u09A1\u09BC", "ask.button": "\u099C\u09BF\u099C\u09CD\u099E\u09BE\u09B8\u09BE", "ask.empty": "\u0986\u0997\u09C7 \u098F\u0995\u099F\u09BF \u09AA\u09CD\u09B0\u09B6\u09CD\u09A8 \u09B2\u09BF\u0996\u09C1\u09A8\u0964", "ask.waiting": "\u09AE\u09A1\u09C7\u09B2\u09B8\u09B9 \u098F\u0995\u099F\u09BF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0996\u09CB\u0981\u099C\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026 \u098F\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u09B2\u09BE\u0997\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964", "ask.credits": "{n} \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F", "tools.title": "\u0986\u09AA\u09A8\u09BE\u09B0 \u099F\u09C1\u09B2 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4 \u0995\u09B0\u09C1\u09A8", "tools.mcp": "Claude Code \u0993 MCP \u0995\u09CD\u09B2\u09BE\u09AF\u09BC\u09C7\u09A8\u09CD\u099F\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u099F\u09BE\u09B0\u09CD\u09AE\u09BF\u09A8\u09BE\u09B2\u09C7 \u099A\u09BE\u09B2\u09BE\u09A8:", "tools.openai": "OpenAI-\u09B8\u09BE\u09AE\u099E\u09CD\u099C\u09B8\u09CD\u09AF\u09AA\u09C2\u09B0\u09CD\u09A3 \u099F\u09C1\u09B2\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF: \u09AC\u09C7\u09B8 URL", "tools.key": "API \u0995\u09C0", "tools.show": "\u09A6\u09C7\u0996\u09BE\u09A8", "jobs.title": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09B8\u09BE\u09AE\u09CD\u09AA\u09CD\u09B0\u09A4\u09BF\u0995 \u0995\u09BE\u099C", "jobs.none": "\u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u09A8\u09C7\u0987\u0964", "jobs.model": "\u09AE\u09A1\u09C7\u09B2", "jobs.container": "\u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0", "jobs.status.queued": "\u09B8\u09BE\u09B0\u09BF\u09A4\u09C7", "jobs.status.running": "\u099A\u09B2\u099B\u09C7", "jobs.status.done": "\u09B8\u09AE\u09CD\u09AA\u09A8\u09CD\u09A8", "jobs.status.failed": "\u09AC\u09CD\u09AF\u09B0\u09CD\u09A5", "jobs.status.canceled": "\u09AC\u09BE\u09A4\u09BF\u09B2", "jobs.cost": "{n} \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F", working: "\u0995\u09BE\u099C \u099A\u09B2\u099B\u09C7\u2026", "err.agent_down": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 BitPull \u09B8\u09BE\u09A1\u09BC\u09BE \u09A6\u09BF\u099A\u09CD\u099B\u09C7 \u09A8\u09BE\u0964 \u098F\u099F\u09BF \u09E9\u09E6 \u09B8\u09C7\u0995\u09C7\u09A8\u09CD\u09A1\u09C7\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09B2\u09C1 \u09B9\u09AF\u09BC: \u098F\u0995\u099F\u09C1 \u09AA\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "err.server": "BitPull \u09B8\u09BE\u09B0\u09CD\u09AD\u09BE\u09B0\u09C7 \u09AA\u09CC\u0981\u099B\u09BE\u09A8\u09CB \u09AF\u09BE\u099A\u09CD\u099B\u09C7 \u09A8\u09BE\u0964 \u0987\u09A8\u09CD\u099F\u09BE\u09B0\u09A8\u09C7\u099F \u09B8\u0982\u09AF\u09CB\u0997 \u09A6\u09C7\u0996\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "err.session": "\u098F\u0987 \u09A1\u09CD\u09AF\u09BE\u09B6\u09AC\u09CB\u09B0\u09CD\u09A1 \u09B8\u09C7\u09B6\u09A8\u09C7\u09B0 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u09B6\u09C7\u09B7\u0964 BitPull \u0985\u09CD\u09AF\u09BE\u09AA \u09A5\u09C7\u0995\u09C7 \u0986\u09AC\u09BE\u09B0 \u0996\u09C1\u09B2\u09C1\u09A8\u0964", "err.billing": "\u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u098F\u0996\u09A8\u0993 \u099A\u09BE\u09B2\u09C1 \u09B9\u09AF\u09BC\u09A8\u09BF\u0964", "err.no_folder": "\u098F\u0987 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u099F\u09BF \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09A8\u09C7\u0987\u0964 \u09AA\u09BE\u09A5 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C1\u09A8\u0964", "err.not_folder": "\u098F\u0987 \u09AA\u09BE\u09A5\u099F\u09BF \u098F\u0995\u099F\u09BF \u09AB\u09BE\u0987\u09B2, \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0 \u09A8\u09AF\u09BC\u0964", "err.credits": "\u09AF\u09A5\u09C7\u09B7\u09CD\u099F \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09A8\u09C7\u0987\u0964", "err.device": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u098F\u0996\u09A8\u0993 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4 \u09B9\u09AF\u09BC\u09A8\u09BF\u0964 BitPull \u0985\u09CD\u09AF\u09BE\u09AA \u0996\u09CB\u09B2\u09BE \u09B0\u09BE\u0996\u09C1\u09A8 \u098F\u09AC\u0982 \u098F\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "err.no_model": "\u098F\u0987 \u09AE\u09C1\u09B9\u09C2\u09B0\u09CD\u09A4\u09C7 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u0995\u09CB\u09A8\u09CB \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 AI \u09AE\u09A1\u09C7\u09B2 \u09A6\u09BF\u099A\u09CD\u099B\u09C7 \u09A8\u09BE\u0964 \u09AA\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "err.invalid": "\u0995\u09BF\u099B\u09C1 \u09AE\u09BE\u09A8 \u09B8\u09A0\u09BF\u0995 \u09A8\u09AF\u09BC\u0964 \u0998\u09B0\u0997\u09C1\u09B2\u09CB \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "tip.lang": "\u0985\u09CD\u09AF\u09BE\u09AA\u09C7\u09B0 \u09AD\u09BE\u09B7\u09BE\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u099B\u09A8\u09CD\u09A6 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09AE\u09A8\u09C7 \u09B0\u09BE\u0996\u09BE \u09B9\u09AF\u09BC\u0964", "tip.buy.base": "\u09AC\u09C7\u09B8\u09BF\u0995 \u09AA\u09CD\u09B2\u09CD\u09AF\u09BE\u09A8\u09C7\u09B0 \u09A8\u09BF\u09B0\u09BE\u09AA\u09A6 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09C7: \u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 \u20AC4.50, \u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 80 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F\u09B8\u09B9\u0964 \u0986\u09AA\u09A8\u09BF \u09AF\u09C7\u0995\u09CB\u09A8\u09CB \u09B8\u09AE\u09AF\u09BC \u09AC\u09BE\u09A4\u09BF\u09B2 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u09A8\u0964", "tip.buy.pro": "\u09AA\u09CD\u09B0\u09CB \u09AA\u09CD\u09B2\u09CD\u09AF\u09BE\u09A8\u09C7\u09B0 \u09A8\u09BF\u09B0\u09BE\u09AA\u09A6 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09C7: \u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 \u20AC9.90, \u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 200 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F, \u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A \u0985\u0997\u09CD\u09B0\u09BE\u09A7\u09BF\u0995\u09BE\u09B0 \u098F\u09AC\u0982 \u09B8\u09AC GPU \u09B8\u09B9\u0964 \u0986\u09AA\u09A8\u09BF \u09AF\u09C7\u0995\u09CB\u09A8\u09CB \u09B8\u09AE\u09AF\u09BC \u09AC\u09BE\u09A4\u09BF\u09B2 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u09A8\u0964", "tip.buy.recharge": "\u20AC5 \u09A6\u09BF\u09AF\u09BC\u09C7 \u098F\u0995\u09AC\u09BE\u09B0\u09C7 80 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0995\u09C7\u09A8\u09BE\u09B0 \u09A8\u09BF\u09B0\u09BE\u09AA\u09A6 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09C7\u0964 \u098F\u0997\u09C1\u09B2\u09CB\u09B0 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u0995\u0996\u09A8\u09CB \u09B6\u09C7\u09B7 \u09B9\u09AF\u09BC \u09A8\u09BE\u0964", "tip.pause": "\u098F\u0996\u09A8\u0987 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7 \u0995\u09B0\u09C7\u0964 \u098F\u0987 \u09AE\u09C1\u09B9\u09C2\u09B0\u09CD\u09A4\u09C7 \u099A\u09B2\u09AE\u09BE\u09A8 \u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u0985\u09A8\u09CD\u09AF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC\u0964 \u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09A4\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09AA\u09C1\u09A8\u0964", "tip.resume": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09A8\u09BF\u09AF\u09BC\u09AE \u09AE\u09C7\u09A8\u09C7 \u0986\u09AC\u09BE\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B6\u09C1\u09B0\u09C1 \u0995\u09B0\u09C7\u0964", "tip.rules.save": "\u0993\u09AA\u09B0\u09C7\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09A8\u09BF\u09AF\u09BC\u09AE\u0997\u09C1\u09B2\u09CB \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3 \u0995\u09B0\u09C7\u0964 \u0995\u09AF\u09BC\u09C7\u0995 \u09B8\u09C7\u0995\u09C7\u09A8\u09CD\u09A1\u09C7\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u0995\u09BE\u09B0\u09CD\u09AF\u0995\u09B0 \u09B9\u09AF\u09BC; \u0986\u09AA\u09A8\u09BF \u098F\u099F\u09BF \u09A8\u09BE \u099A\u09BE\u09AA\u09BE \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u0995\u09BF\u099B\u09C1\u0987 \u09AC\u09A6\u09B2\u09BE\u09AF\u09BC \u09A8\u09BE\u0964", "tip.folder.add": "\u09AC\u09BE\u0981 \u09A6\u09BF\u0995\u09C7 \u09B2\u09C7\u0996\u09BE \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u099F\u09BF \u09AA\u09A1\u09BC\u09BE\u09B0 \u0985\u09A8\u09C1\u09AE\u09A4\u09BF \u09A6\u09C7\u09AF\u09BC BitPull-\u0995\u09C7\u0964 \u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09BF\u09A4 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u09C7\u09B0 \u09AC\u09BE\u0987\u09B0\u09C7\u09B0 \u09AB\u09BE\u0987\u09B2 \u0995\u0996\u09A8\u09CB \u09AA\u09A1\u09BC\u09BE \u09AC\u09BE \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09BE \u09B9\u09AF\u09BC \u09A8\u09BE\u0964", "tip.folder.draft": "\u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u09C7 bitpull.json \u09A4\u09C8\u09B0\u09BF \u0995\u09B0\u09C7: \u098F\u09B0 \u09AB\u09BE\u0987\u09B2\u0997\u09C1\u09B2\u09CB\u09B0 \u09A4\u09BE\u09B2\u09BF\u0995\u09BE, \u0996\u09BE\u09B2\u09BF \u09AC\u09BF\u09AC\u09B0\u09A3\u09B8\u09B9 \u09AF\u09BE \u0986\u09AA\u09A8\u09BE\u09B0 AI \u09AA\u09C2\u09B0\u09A3 \u0995\u09B0\u09AC\u09C7\u0964 \u098F\u0996\u09A8\u09CB \u0995\u09BF\u099B\u09C1\u0987 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6 \u0995\u09B0\u09BE \u09B9\u09AF\u09BC \u09A8\u09BE\u0964", "tip.folder.publish": "\u098F\u0987 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u099F\u09BF \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7 \u098F\u0995\u099F\u09BF \u09AA\u09BE\u09AC\u09B2\u09BF\u0995 \u09B0\u09BF\u09AA\u09CB \u09B9\u09BF\u09B8\u09C7\u09AC\u09C7 \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09C7, \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 \u09B8\u09CD\u09AC\u09BE\u0995\u09CD\u09B7\u09B0\u09B8\u09B9\u0964 \u09AB\u09BE\u0987\u09B2\u09C7 \u0995\u09C0 \u09AC\u09BE \u09AA\u09BE\u09B8\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u09A1 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09C7\u09B2\u09C7 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6 \u0986\u099F\u0995\u09C7 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC\u0964", "tip.folder.remove": "BitPull \u098F\u0987 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u099F\u09BF \u09AA\u09A1\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7 \u0995\u09B0\u09C7\u0964 \u098F\u0996\u09BE\u09A8 \u09A5\u09C7\u0995\u09C7 \u0986\u0997\u09C7\u0987 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6\u09BF\u09A4 \u09B0\u09BF\u09AA\u09CB\u0997\u09C1\u09B2\u09CB \u0985\u09A8\u09B2\u09BE\u0987\u09A8\u09C7 \u09A5\u09BE\u0995\u09C7, \u09AF\u09A4\u0995\u09CD\u09B7\u09A3 \u09A8\u09BE \u0986\u09AA\u09A8\u09BF \u09B8\u09C7\u0997\u09C1\u09B2\u09CB \u09B8\u09B0\u09BF\u09AF\u09BC\u09C7 \u09A8\u09C7\u09A8\u0964", "tip.repo.withdraw": "\u098F\u0987 \u09B0\u09BF\u09AA\u09CB\u099F\u09BF \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u09A5\u09C7\u0995\u09C7 \u09B8\u09B0\u09BF\u09AF\u09BC\u09C7 \u09A6\u09C7\u09AF\u09BC\u0964 \u0985\u09A8\u09CD\u09AF \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0\u09BE \u0986\u09B0 \u098F\u099F\u09BF \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u09AC\u09C7\u09A8 \u09A8\u09BE \u09AC\u09BE \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7\u09A8 \u09A8\u09BE\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09BE\u0987\u09B2 \u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u0987 \u09A5\u09BE\u0995\u09C7\u0964", "tip.ask": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B0\u09B6\u09CD\u09A8\u099F\u09BF \u098F\u09A8\u09CD\u09A1-\u099F\u09C1-\u098F\u09A8\u09CD\u09A1 \u098F\u09A8\u0995\u09CD\u09B0\u09BF\u09AA\u09CD\u099F\u09C7\u09A1 \u0985\u09AC\u09B8\u09CD\u09A5\u09BE\u09AF\u09BC \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u098F\u09AE\u09A8 \u098F\u0995\u099F\u09BF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09AA\u09BE\u09A0\u09BE\u09AF\u09BC \u09AF\u09BE \u098F\u0995\u099F\u09BF \u0993\u09AA\u09C7\u09A8 AI \u09AE\u09A1\u09C7\u09B2 \u099A\u09BE\u09B2\u09BE\u09AF\u09BC\u0964 \u0995\u09AF\u09BC\u09C7\u0995\u099F\u09BF \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0996\u09B0\u099A \u09B9\u09AF\u09BC\u0964", "tip.tier": "\u09AE\u09A1\u09C7\u09B2\u09C7\u09B0 \u0986\u0995\u09BE\u09B0: \u099B\u09CB\u099F\u099F\u09BF \u09A6\u09CD\u09B0\u09C1\u09A4 \u0993 \u09B8\u09B8\u09CD\u09A4\u09BE, \u09AC\u09A1\u09BC\u099F\u09BF \u09AC\u09C7\u09B6\u09BF \u09AC\u09C1\u09A6\u09CD\u09A7\u09BF\u09AE\u09BE\u09A8 \u098F\u09AC\u0982 \u09AC\u09C7\u09B6\u09BF \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0996\u09B0\u099A \u0995\u09B0\u09C7\u0964", "tip.show_key": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 AI \u099F\u09C1\u09B2\u0997\u09C1\u09B2\u09CB BitPull-\u098F\u09B0 \u09B8\u0999\u09CD\u0997\u09C7 \u09AF\u09CB\u0997\u09BE\u09AF\u09CB\u0997\u09C7 \u09AF\u09C7 \u0995\u09C0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09C7, \u09B8\u09C7\u099F\u09BF \u09A6\u09C7\u0996\u09BE\u09AF\u09BC\u0964 \u098F\u099F\u09BF \u0995\u09BE\u09B0\u0993 \u09B8\u0999\u09CD\u0997\u09C7 \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09AC\u09C7\u09A8 \u09A8\u09BE\u0964", "tip.setup.download": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF {name}-\u098F\u09B0 \u0985\u09AB\u09BF\u09B8\u09BF\u09AF\u09BC\u09BE\u09B2 \u0987\u09A8\u09B8\u09CD\u099F\u09B2\u09BE\u09B0 \u0986\u09AA\u09A8\u09BE\u09B0 Downloads \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u09C7 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7 \u0996\u09CB\u09B2\u09C7\u0964 \u09B6\u09C7\u09B7 \u0995\u09B0\u09A4\u09C7 \u098F\u09B0 \u09A7\u09BE\u09AA\u0997\u09C1\u09B2\u09CB \u0985\u09A8\u09C1\u09B8\u09B0\u09A3 \u0995\u09B0\u09C1\u09A8\u0964", "tip.setup.start": "{name} \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C7, \u09AF\u09BE \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u0986\u099B\u09C7 \u0995\u09BF\u09A8\u09CD\u09A4\u09C1 \u099A\u09B2\u099B\u09C7 \u09A8\u09BE\u0964", "tip.setup.pull": "AI \u09AE\u09A1\u09C7\u09B2 {model} ({size} GB) Ollama-\u09A4\u09C7 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7, \u09AF\u09BE\u09A4\u09C7 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u098F\u099F\u09BF \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964", "tip.setup.open": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AC\u09CD\u09B0\u09BE\u0989\u099C\u09BE\u09B0\u09C7 {name}-\u098F\u09B0 \u0985\u09AB\u09BF\u09B8\u09BF\u09AF\u09BC\u09BE\u09B2 \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09C7\u0964", "tip.setup.recheck": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u0995\u09C0 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0986\u099B\u09C7 \u0993 \u0995\u09C0 \u099A\u09B2\u099B\u09C7, \u09A4\u09BE \u0986\u09AC\u09BE\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C7\u0964", "update.title": "\u0985\u09CD\u09AF\u09BE\u09AA \u0986\u09AA\u09A1\u09C7\u099F", "update.current": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3: {v}", "update.latest": "\u09B8\u09B0\u09CD\u09AC\u09B6\u09C7\u09B7 \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3: {v}", "update.button": "\u0986\u09AA\u09A1\u09C7\u099F \u0996\u09C1\u0981\u099C\u09C1\u09A8", "update.install": "\u098F\u0996\u09A8\u0987 \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 {v} \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8", "update.available": "\u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 {v} \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u099A\u09CD\u099B\u09C7\u0964", "update.not_in_app": "\u0986\u09AA\u09A1\u09C7\u099F BitPull \u0985\u09CD\u09AF\u09BE\u09AA \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C7\u0964 \u0986\u09AA\u09A1\u09C7\u099F \u0995\u09B0\u09A4\u09C7 \u0985\u09CD\u09AF\u09BE\u09AA \u09A5\u09C7\u0995\u09C7 \u098F\u0987 \u09A1\u09CD\u09AF\u09BE\u09B6\u09AC\u09CB\u09B0\u09CD\u09A1 \u0996\u09C1\u09B2\u09C1\u09A8\u0964", "update.state.requested": "\u0985\u09CD\u09AF\u09BE\u09AA\u0995\u09C7 \u0996\u09C1\u0981\u099C\u09A4\u09C7 \u09AC\u09B2\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026", "update.state.checking": "\u0986\u09AA\u09A1\u09C7\u099F \u0996\u09CB\u0981\u099C\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026", "update.state.up_to_date": "\u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09BE\u099B\u09C7 \u09B8\u09B0\u09CD\u09AC\u09B6\u09C7\u09B7 \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 \u0986\u099B\u09C7\u0964", "update.state.installing": "\u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 {v} \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0993 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u09B9\u099A\u09CD\u099B\u09C7\u2026 \u0985\u09CD\u09AF\u09BE\u09AA \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7\u0987 \u09B0\u09BF\u09B8\u09CD\u099F\u09BE\u09B0\u09CD\u099F \u09B9\u09AC\u09C7\u0964", "update.state.restarting": "\u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 {v} \u09A8\u09BF\u09AF\u09BC\u09C7 \u09B0\u09BF\u09B8\u09CD\u099F\u09BE\u09B0\u09CD\u099F \u09B9\u099A\u09CD\u099B\u09C7\u2026", "update.state.error": "\u0986\u09AA\u09A1\u09C7\u099F \u0995\u09BE\u099C \u0995\u09B0\u09C7\u09A8\u09BF: {msg}\u0964 \u09AA\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "tip.update": "BitPull-\u098F\u09B0 \u09A8\u09A4\u09C1\u09A8 \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 \u0986\u099B\u09C7 \u0995\u09BF \u09A8\u09BE \u09A6\u09C7\u0996\u09C7\u0964 \u09A5\u09BE\u0995\u09B2\u09C7 \u09B8\u09C7\u099F\u09BF \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7, \u09B8\u09CD\u09AC\u09BE\u0995\u09CD\u09B7\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C7, \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C7 \u098F\u09AC\u0982 \u0985\u09CD\u09AF\u09BE\u09AA \u09B0\u09BF\u09B8\u09CD\u099F\u09BE\u09B0\u09CD\u099F \u0995\u09B0\u09C7\u0964 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u0995\u09AF\u09BC\u09C7\u0995 \u09B8\u09C7\u0995\u09C7\u09A8\u09CD\u09A1\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u09A5\u09BE\u09AE\u09C7\u0964", "tools.hint": "\u0986\u09AA\u09A8\u09BE\u09B0 AI \u09B8\u09B9\u0995\u09BE\u09B0\u09C0\u0995\u09C7 \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09BE \u0995\u09CB\u09A1 \u0996\u09C1\u0981\u099C\u09A4\u09C7 \u098F\u09AC\u0982 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2 \u0993 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09A6\u09BF\u09A8\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 \u099F\u09C1\u09B2 \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A8:", "tools.connect": "\u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4 \u0995\u09B0\u09C1\u09A8", "tools.connected": "\u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4", "tools.copy": "\u0995\u09AA\u09BF \u0995\u09B0\u09C1\u09A8", "tools.copied": "\u0995\u09AA\u09BF \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "tools.installed": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u0986\u099B\u09C7", "tools.not_found": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF", "tools.done": "\u09B9\u09AF\u09BC\u09C7 \u0997\u09C7\u099B\u09C7\u0964 BitPull \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u09B6\u09C1\u09B0\u09C1 \u0995\u09B0\u09A4\u09C7 {name} \u09B0\u09BF\u09B8\u09CD\u099F\u09BE\u09B0\u09CD\u099F \u0995\u09B0\u09C1\u09A8\u0964", "tools.manual": "\u09A8\u09BF\u099C\u09C7 \u09AF\u09CB\u0997 \u0995\u09B0\u09A4\u09C7:", "tools.config_invalid": '{name}-\u098F\u09B0 \u09B8\u09C7\u099F\u09BF\u0982\u09B8 \u09AB\u09BE\u0987\u09B2\u099F\u09BF \u09AC\u09C8\u09A7 JSON \u09A8\u09AF\u09BC, \u09A4\u09BE\u0987 BitPull \u098F\u09A4\u09C7 \u09B9\u09BE\u09A4 \u09A6\u09C7\u09AF\u09BC\u09A8\u09BF\u0964 \u09AB\u09BE\u0987\u09B2\u099F\u09BF \u09A0\u09BF\u0995 \u0995\u09B0\u09C1\u09A8 \u09AC\u09BE "\u0995\u09AA\u09BF \u0995\u09B0\u09C1\u09A8" \u09A6\u09BF\u09AF\u09BC\u09C7 \u09A8\u09BF\u099C\u09C7 BitPull \u09AF\u09CB\u0997 \u0995\u09B0\u09C1\u09A8\u0964', "tip.tools.connect": "\u09B8\u09CD\u09AC\u09AF\u09BC\u0982\u0995\u09CD\u09B0\u09BF\u09AF\u09BC\u09AD\u09BE\u09AC\u09C7 {name}-\u098F\u09B0 \u09B8\u09C7\u099F\u09BF\u0982\u09B8\u09C7 BitPull \u09AF\u09CB\u0997 \u0995\u09B0\u09C7\u0964 \u0986\u0997\u09C7\u09B0 \u09B8\u09C7\u099F\u09BF\u0982\u09B8\u09C7\u09B0 \u098F\u0995\u099F\u09BF \u09AC\u09CD\u09AF\u09BE\u0995\u0986\u09AA \u09AA\u09BE\u09B6\u09C7\u0987 \u09B0\u09BE\u0996\u09BE \u09B9\u09AF\u09BC\u0964", "tip.tools.copy": "\u0995\u09AE\u09BE\u09A8\u09CD\u09A1 \u09AC\u09BE \u09B8\u09C7\u099F\u09BF\u0982\u09B8 \u0995\u09CD\u09B2\u09BF\u09AA\u09AC\u09CB\u09B0\u09CD\u09A1\u09C7 \u0995\u09AA\u09BF \u0995\u09B0\u09C7, \u09AF\u09BE\u09A4\u09C7 \u0986\u09AA\u09A8\u09BF \u09A8\u09BF\u099C\u09C7 {name}-\u098F BitPull \u09AF\u09CB\u0997 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u09A8\u0964", "models.title": "\u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09BE\u09B0 AI \u09AE\u09A1\u09C7\u09B2", "models.hint": "\u09B8\u09AC \u09A7\u09B0\u09A8\u09C7\u09B0 \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2 \u09AF\u09BE \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964 \u09B6\u09C1\u09A7\u09C1 \u09B8\u09C7\u0987 \u09AE\u09A1\u09C7\u09B2\u0997\u09C1\u09B2\u09CB \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u09AF\u09BC \u09AF\u09BE\u09A6\u09C7\u09B0 \u09B2\u09BE\u0987\u09B8\u09C7\u09A8\u09CD\u09B8 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09B8\u09C7\u09AC\u09BE \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u0985\u09A8\u09C1\u09AE\u09A4\u09BF \u09A6\u09C7\u09AF\u09BC\u0964 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u099A\u09BE\u09B2\u09C1 \u09A5\u09BE\u0995\u09B2\u09C7 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09BE \u09AE\u09A1\u09C7\u09B2\u0997\u09C1\u09B2\u09CB \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC\u0964", "models.engine.title": "\u099B\u09AC\u09BF, \u0995\u09A3\u09CD\u09A0 \u0993 \u09B8\u0982\u0997\u09C0\u09A4 \u0987\u099E\u09CD\u099C\u09BF\u09A8", "models.engine.help": "Lemonade (\u0993\u09AA\u09C7\u09A8 \u09B8\u09CB\u09B0\u09CD\u09B8): \u099B\u09AC\u09BF \u09A4\u09C8\u09B0\u09BF, \u0995\u09A3\u09CD\u09A0 \u09A5\u09C7\u0995\u09C7 \u09B2\u09C7\u0996\u09BE, \u09B2\u09C7\u0996\u09BE \u09A5\u09C7\u0995\u09C7 \u0995\u09A3\u09CD\u09A0, \u09B8\u0982\u0997\u09C0\u09A4, \u09A8\u09A5\u09BF \u09AA\u09C1\u09A8\u09B0\u09CD\u09AC\u09BF\u09A8\u09CD\u09AF\u09BE\u09B8 \u0993 \u099B\u09AC\u09BF \u09AC\u09A1\u09BC \u0995\u09B0\u09BE\u0964 BitPull-\u098F\u09B0 \u09AD\u09C7\u09A4\u09B0\u09C7 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u09B9\u09AF\u09BC, \u0985\u09CD\u09AF\u09BE\u09A1\u09AE\u09BF\u09A8 \u0985\u09A7\u09BF\u0995\u09BE\u09B0 \u09B2\u09BE\u0997\u09C7 \u09A8\u09BE\u0964", "models.engine.install": "\u0987\u099E\u09CD\u099C\u09BF\u09A8 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8", "models.engine.repair": "\u0987\u099E\u09CD\u099C\u09BF\u09A8 \u0986\u09AC\u09BE\u09B0 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8", "models.engine.unsupported": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u0989\u09AA\u09B2\u09AC\u09CD\u09A7 \u09A8\u09AF\u09BC (Apple silicon, \u09AC\u09BE Windows/Linux x64 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8)", "models.need_engine": "\u0986\u0997\u09C7 \u0987\u099E\u09CD\u099C\u09BF\u09A8 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8", "models.not_here": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u0989\u09AA\u09B2\u09AC\u09CD\u09A7 \u09A8\u09AF\u09BC", "models.shared": "\u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7 \xB7 \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09BE", "models.download": "\u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 ({size} GB)", "models.needs_ram": "\u09AA\u09CD\u09B0\u09BE\u09AF\u09BC {ram} GB \u09AE\u09C7\u09AE\u09B0\u09BF \u09B2\u09BE\u0997\u09C7: \u098F\u0996\u09BE\u09A8\u09C7 \u09A7\u09C0\u09B0 \u09B9\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7", "models.recommended": "\u09AA\u09CD\u09B0\u09B8\u09CD\u09A4\u09BE\u09AC\u09BF\u09A4", "models.license": "\u09B2\u09BE\u0987\u09B8\u09C7\u09A8\u09CD\u09B8", "models.ok.engine": "\u0987\u099E\u09CD\u099C\u09BF\u09A8 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u09B9\u099A\u09CD\u099B\u09C7\u2026", "task.chat": "\u09B2\u09C7\u0996\u09BE \u0993 \u0995\u09CB\u09A1", "task.vision": "\u099B\u09AC\u09BF \u2192 \u09B2\u09C7\u0996\u09BE", "task.ocr": "\u09A8\u09A5\u09BF (OCR)", "task.translate": "\u0985\u09A8\u09C1\u09AC\u09BE\u09A6", "task.embed": "\u098F\u09AE\u09AC\u09C7\u09A1\u09BF\u0982 (\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8)", "task.rerank": "\u09AA\u09C1\u09A8\u09B0\u09CD\u09AC\u09BF\u09A8\u09CD\u09AF\u09BE\u09B8", "task.image": "\u099B\u09AC\u09BF \u09A4\u09C8\u09B0\u09BF", "task.upscale": "\u099B\u09AC\u09BF \u09AC\u09A1\u09BC \u0995\u09B0\u09BE", "task.stt": "\u0995\u09A3\u09CD\u09A0 \u09A5\u09C7\u0995\u09C7 \u09B2\u09C7\u0996\u09BE", "task.tts": "\u09B2\u09C7\u0996\u09BE \u09A5\u09C7\u0995\u09C7 \u0995\u09A3\u09CD\u09A0", "task.music": "\u09B8\u0982\u0997\u09C0\u09A4", "limits.title": "\u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u0986\u09AA\u09A8\u09BE\u09B0 \u09B8\u09C0\u09AE\u09BE", "limits.hint": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09A4\u099F\u09BE AI \u0995\u09BE\u099C \u0995\u09B0\u09C7\u0964 \u0995\u09CB\u09A8\u09CB \u09B8\u09C0\u09AE\u09BE \u09A8\u09BE \u09B0\u09BE\u0996\u09A4\u09C7 \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09C1\u09A8\u0964 \u09B8\u09C0\u09AE\u09BE\u09AF\u09BC \u09AA\u09CC\u0981\u099B\u09BE\u09B2\u09C7 \u09AA\u09B0\u09C7\u09B0 \u09B8\u09AE\u09AF\u09BC\u0995\u09BE\u09B2 \u09B6\u09C1\u09B0\u09C1 \u09A8\u09BE \u09B9\u0993\u09AF\u09BC\u09BE \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u0986\u09AA\u09A8\u09BE\u09B0 \u09AE\u09A1\u09C7\u09B2 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC \u09A8\u09BE\u0964", "limits.save": "\u09B8\u09C0\u09AE\u09BE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3 \u0995\u09B0\u09C1\u09A8", "limits.requests": "\u0985\u09A8\u09C1\u09B0\u09CB\u09A7", "limits.tokens": "\u099F\u09CB\u0995\u09C7\u09A8", "limits.used": "\u09AC\u09CD\u09AF\u09AC\u09B9\u09C3\u09A4", "limits.day": "\u09AA\u09CD\u09B0\u09A4\u09BF\u09A6\u09BF\u09A8", "limits.week": "\u09AA\u09CD\u09B0\u09A4\u09BF \u09B8\u09AA\u09CD\u09A4\u09BE\u09B9", "limits.month": "\u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8", "limits.none": "\u0995\u09CB\u09A8\u09CB \u09B8\u09C0\u09AE\u09BE \u09A8\u09C7\u0987", "limits.usage": "{requests}\u099F\u09BF \u0985\u09A8\u09C1\u09B0\u09CB\u09A7 \xB7 {tokens} \u099F\u09CB\u0995\u09C7\u09A8", "limits.saved": "\u09B8\u09C0\u09AE\u09BE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09BF\u09A4 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "tip.models.engine": "\u0993\u09AA\u09C7\u09A8 \u09B8\u09CB\u09B0\u09CD\u09B8 Lemonade \u0987\u099E\u09CD\u099C\u09BF\u09A8 BitPull-\u098F \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7, \u09AF\u09BE\u09A4\u09C7 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u099B\u09AC\u09BF, \u0995\u09A3\u09CD\u09A0 \u0993 \u09B8\u0982\u0997\u09C0\u09A4 \u09AE\u09A1\u09C7\u09B2 \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964", "tip.models.download": "{model} ({size} GB) \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7 \u09AF\u09BE\u09A4\u09C7 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u0964 \u09AA\u09B0\u09C7 \u09AE\u09C1\u099B\u09C7 \u09AB\u09C7\u09B2\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7\u09A8\u0964", "tip.limits.save": "\u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF AI \u0995\u09BE\u099C\u09C7\u09B0 \u09A6\u09C8\u09A8\u09BF\u0995, \u09B8\u09BE\u09AA\u09CD\u09A4\u09BE\u09B9\u09BF\u0995 \u0993 \u09AE\u09BE\u09B8\u09BF\u0995 \u09B8\u09C0\u09AE\u09BE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3 \u0995\u09B0\u09C7\u0964", "lend.visible": "\u2713 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u099F\u09BF \u09A6\u09C7\u0996\u099B\u09C7: \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF {cpus} CPU, {ram} GB \u0989\u09AA\u09B2\u09AC\u09CD\u09A7\u0964", "lend.invisible": "\u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u098F\u0996\u09A8\u09CB \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09A6\u09C7\u0996\u099B\u09C7 \u09A8\u09BE: \u098F\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09BE \u0995\u09B0\u09C1\u09A8; \u098F\u09AE\u09A8\u0987 \u09A5\u09BE\u0995\u09B2\u09C7 \u0987\u09A8\u09CD\u099F\u09BE\u09B0\u09A8\u09C7\u099F \u09B8\u0982\u09AF\u09CB\u0997 \u09A6\u09C7\u0996\u09C1\u09A8\u0964", "lend.unusable": "\u26A0 \u098F\u0996\u09A8\u09CB \u0995\u09C7\u0989 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7 \u09A8\u09BE: \u098F\u0996\u09BE\u09A8\u09C7 \u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u099A\u09B2\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7 \u09A8\u09BE\u0964 {reason}", "lend.unusable.docker": 'Docker BitPull-\u098F\u09B0 \u0986\u0987\u09B8\u09CB\u09B2\u09C7\u09B6\u09A8 \u09AA\u09B0\u09C0\u0995\u09CD\u09B7\u09BE\u09AF\u09BC \u0989\u09A4\u09CD\u09A4\u09C0\u09B0\u09CD\u09A3 \u09B9\u09AF\u09BC\u09A8\u09BF: "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B8\u09C7\u099F \u0986\u09AA \u0995\u09B0\u09C1\u09A8" \u09A6\u09C7\u0996\u09C1\u09A8\u0964', "lend.unusable.off": '\u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0 \u0995\u09BE\u099C \u09AC\u09A8\u09CD\u09A7 \u098F\u09AC\u0982 \u0995\u09CB\u09A8\u09CB AI \u09AE\u09A1\u09C7\u09B2 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u09A8\u09C7\u0987: "\u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0 \u0995\u09BE\u099C" \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C1\u09A8 \u09AC\u09BE \u098F\u0995\u099F\u09BF \u09AE\u09A1\u09C7\u09B2 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C1\u09A8\u0964', "lend.docker_login": 'Docker \u0987\u09AE\u09C7\u099C \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u099B\u09C7 \u09A8\u09BE \u0995\u09BE\u09B0\u09A3 \u098F\u09B0 Docker Hub \u09B2\u0997\u0987\u09A8 \u0986\u09B0 \u09AC\u09C8\u09A7 \u09A8\u09AF\u09BC\u0964 Docker Desktop-\u098F \u0986\u09AA\u09A8\u09BE\u09B0 \u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F\u09C7 (\u0989\u09AA\u09B0\u09C7 \u09A1\u09BE\u09A8\u09C7) \u0995\u09CD\u09B2\u09BF\u0995 \u0995\u09B0\u09C1\u09A8 \u2192 Sign out, \u09A4\u09BE\u09B0\u09AA\u09B0 \u0986\u09AC\u09BE\u09B0 \u09B2\u0997 \u0987\u09A8 \u0995\u09B0\u09C1\u09A8 \u09AC\u09BE \u09B2\u0997 \u0986\u0989\u099F \u0985\u09AC\u09B8\u09CD\u09A5\u09BE\u09AF\u09BC \u09A5\u09BE\u0995\u09C1\u09A8\u0964 \u09A4\u09BE\u09B0\u09AA\u09B0 "\u0986\u09AC\u09BE\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C1\u09A8" \u099A\u09BE\u09AA\u09C1\u09A8\u0964', "lend.off_hint": '\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7: \u09A8\u09BF\u099A\u09C7 "{rules}"-\u098F "{enabled}" \u099F\u09BF\u0995 \u09A6\u09BF\u09A8 \u098F\u09AC\u0982 "{save}" \u099A\u09BE\u09AA\u09C1\u09A8\u0964 (\u09AC\u09BF\u09B0\u09A4\u09BF / \u0986\u09AC\u09BE\u09B0 \u09B6\u09C1\u09B0\u09C1 \u09B6\u09C1\u09A7\u09C1 \u0986\u0997\u09C7 \u09A5\u09C7\u0995\u09C7 \u099A\u09BE\u09B2\u09C1 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u0995\u09C7 \u09A5\u09BE\u09AE\u09BE\u09AF\u09BC\u0964)', "lend.low_memory": '\u09AE\u09BE\u09A4\u09CD\u09B0 {mb} MB \u09AE\u09C7\u09AE\u09B0\u09BF \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u099A\u09CD\u099B\u09C7: \u0996\u09C1\u09AC \u0995\u09AE \u0995\u09BE\u099C \u099A\u09B2\u09AC\u09C7\u0964 "{rules}"-\u098F "{memory}" \u09AF\u09C7\u09AE\u09A8 4096 (= 4 GB) \u09A6\u09BF\u09A8 \u098F\u09AC\u0982 "{save}" \u099A\u09BE\u09AA\u09C1\u09A8\u0964', "rules.awake": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09B8\u09AE\u09AF\u09BC \u099C\u09C7\u0997\u09C7 \u09A5\u09BE\u0995\u09C1\u09A8", "rules.awake.help": "\u0995\u09BE\u09B0\u0993 \u099C\u09A8\u09CD\u09AF \u0995\u09BE\u099C \u099A\u09BE\u09B2\u09BE\u09A8\u09CB\u09B0 \u09B8\u09AE\u09AF\u09BC \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B8\u09CD\u09B2\u09BF\u09AA\u09C7 \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE (\u09B8\u09CD\u0995\u09CD\u09B0\u09BF\u09A8 \u09A4\u09AC\u09C1\u0993 \u09AC\u09A8\u09CD\u09A7 \u09B9\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7)\u0964 \u09AA\u09B0\u09C7 \u09B8\u09CD\u09AC\u09BE\u09AD\u09BE\u09AC\u09BF\u0995\u09AD\u09BE\u09AC\u09C7 \u09B8\u09CD\u09B2\u09BF\u09AA \u09B9\u09AC\u09C7\u0964 \u0995\u09BE\u099C \u09AE\u09BE\u099D\u09AA\u09A5\u09C7 \u0995\u09BE\u099F\u09AC\u09C7 \u09A8\u09BE\u0964", "ask.wait": "\u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A \u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09BE (\u09AE\u09BF\u09A8\u09BF\u099F)", "ask.wait.save": "\u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3 \u0995\u09B0\u09C1\u09A8", "ask.wait.saved": "\u0989\u09A4\u09CD\u09A4\u09B0\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF {n} \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09BE \u0995\u09B0\u09BE \u09B9\u09AC\u09C7\u0964", "ask.wait.range": "\u09E7 \u09A5\u09C7\u0995\u09C7 \u09E7\u09E8\u09E6-\u098F\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u09AE\u09BF\u09A8\u09BF\u099F \u09B2\u09BF\u0996\u09C1\u09A8\u0964", "tip.wait": "\u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 AI \u09AE\u09A1\u09C7\u09B2\u09C7\u09B0 \u0989\u09A4\u09CD\u09A4\u09B0\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09A4\u0995\u09CD\u09B7\u09A3 \u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09BE \u0995\u09B0\u09AC\u09C7\u09A8\u0964 \u0985\u09A8\u09CD\u09AF\u09C7\u09B0 \u09AA\u09CD\u09B0\u09B8\u09C7\u09B8\u09B0\u09C7 \u099A\u09B2\u09BE \u09AE\u09A1\u09C7\u09B2\u09C7 \u09AE\u09BF\u09A8\u09BF\u099F \u09B2\u09BE\u0997\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 AI-\u0993 \u098F\u099F\u09BF \u09AC\u09A6\u09B2\u09BE\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964" }, de: { "lang.name": "Deutsch", "app.title": "BitPull", "locked.text": "\xD6ffne das Dashboard \xFCber die BitPull-App: Der Link enth\xE4lt den Zugangsschl\xFCssel.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Direkte Adresse", "pill.relay_on": "Relay verbunden", "pill.relay_off": "Relay nicht verbunden", "pill.cached": "{n} zwischengespeicherte Kopien", "net.title": "Netzwerk live", "net.online": "{n} Computer online", "net.lending": "{n} verleihen gerade", "net.cpu": "{n} CPU-Kerne", "net.ram": "{n} GB RAM", "net.gpu": "{n} GPUs", "net.models": "{n} KI-Modelle", "net.jobs": "{n} laufende Auftr\xE4ge", "credits.title": "Guthaben", "credits.plan": "Tarif {plan} \xB7 bis zu {n} m\xF6glich", "plan.free": "Free", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base 4,50 \u20AC", "buy.pro": "Pro 9,90 \u20AC", "buy.recharge": "Aufladen 5 \u20AC", "buy.ok": "Zahlungsseite in deinem Browser ge\xF6ffnet.", "lend.title": "Diesen Computer verleihen", "lend.hint": "Auftr\xE4ge laufen Ende-zu-Ende-verschl\xFCsselt in isolierten Sandboxes, ohne Zugriff auf deine Dateien. Du verdienst Credits.", "lend.state.off": "Aus", "lend.state.waiting": "Wartet", "lend.state.working": "Arbeitet", "lend.reason.lending_off": "Verleihen ist aus", "lend.reason.paused": "Pausiert", "lend.reason.outside_hours": "Au\xDFerhalb deiner Zeiten", "lend.reason.on_battery": "Im Akkubetrieb", "lend.reason.computer_in_use": "Du benutzt den Computer", "lend.reason.no_jobs": "Keine Auftr\xE4ge in der Warteschlange", "lend.running": "F\xFChrt seit {time} einen {kind}-Auftrag aus", "lend.detail": "{reason} \xB7 {n} Auftr\xE4ge erledigt \xB7 bietet {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", Sandbox {name}", "lend.detail.models": ", {n} Modelle", "lend.pause": "Pausieren", "lend.resume": "Fortsetzen", "lend.paused_ok": "Verleihen pausiert. Ein laufender Auftrag wurde an einen anderen Computer \xFCbergeben.", "lend.resumed_ok": "Verleihen fortgesetzt.", "setup.title": "Diesen Computer einrichten", "setup.hint": "Was dieser Computer zum Verleihen braucht. Zum Nutzen des Netzwerks brauchst du nichts weiter. Die Installer kommen von den offiziellen Seiten; dein System fragt dich nach einer Best\xE4tigung.", "setup.checking": "Wird gepr\xFCft\u2026", "setup.docker.help": "F\xFChrt Auftr\xE4ge anderer in isolierten Sandboxes aus. N\xF6tig f\xFCr Container-Auftr\xE4ge. Kostenlos f\xFCr private Nutzung und kleine Unternehmen.", "setup.docker.download": "Docker herunterladen", "setup.docker.start": "Docker starten", "setup.apple.title": "Apple Container (optional)", "setup.apple.help": "St\xE4rkere Isolation: jeder Auftrag in einer eigenen virtuellen Maschine. Optional; Docker reicht f\xFCr den Anfang.", "setup.apple.get": "Apple Container holen", "setup.ollama.help": "F\xFChrt offene KI-Modelle aus (Qwen, Llama, Mistral\u2026). N\xF6tig, um KI-Modelle zu verleihen.", "setup.ollama.download": "Ollama herunterladen", "setup.ollama.start": "Ollama starten", "setup.model.title": "KI-Modell", "setup.model.help": "Das Modell, das dieser Computer anderen anbietet. Empfohlen f\xFCr {ram} GB Arbeitsspeicher: {model}.", "setup.model.download": "{model} herunterladen ({size} GB)", "setup.model.none": "noch keins", "setup.model.need_ollama": "Installiere und starte zuerst Ollama", "setup.nvidia.title": "NVIDIA-GPU-Treiber (optional)", "setup.nvidia.help": "Nur wenn dieser Computer eine NVIDIA-Grafikkarte hat, die du verleihen willst.", "setup.nvidia.get": "NVIDIA-Treiber holen", "setup.status.running": "installiert und l\xE4uft", "setup.status.installed": "installiert", "setup.status.stopped": "installiert, l\xE4uft nicht", "setup.status.missing": "nicht installiert", "setup.status.found": "gefunden", "setup.status.not_found": "nicht gefunden", "setup.terminal": "Im Terminal ausf\xFChren:", "setup.done": "Fertig", "setup.opened": "Erledigt: {file} ge\xF6ffnet, folge den Schritten", "setup.recheck": "Erneut pr\xFCfen", "setup.ok.download": "Download gestartet. Der Installer \xF6ffnet sich automatisch, wenn er fertig ist: Folge seinen Schritten.", "setup.ok.start": "Wird gestartet\u2026 das kann bis zu einer Minute dauern. Diese Liste aktualisiert sich von selbst.", "setup.ok.pull": "Modell-Download gestartet. Der Fortschritt wird oben angezeigt.", "setup.ok.page": "Seite in deinem Browser ge\xF6ffnet.", "setup.ok.recheck": "Erneut gepr\xFCft.", "rules.title": "Regeln f\xFCrs Verleihen", "rules.enabled": "Verleihen an", "rules.enabled.help": "Hauptschalter. Wenn aus, f\xFChrt dieser Computer nie Auftr\xE4ge anderer aus. Du kannst das Netzwerk trotzdem selbst nutzen.", "rules.cpus": "Max. CPUs", "rules.cpus.help": "Wie viele Prozessorkerne ein Auftrag h\xF6chstens nutzen darf. Beispiel: Bei einem Computer mit 8 Kernen bleiben mit 2 noch 6 Kerne f\xFCr dich frei.", "rules.memory": "Max. Arbeitsspeicher (MB)", "rules.memory.help": "RAM, den ein Auftrag nutzen darf, in Megabyte (1024 MB = 1 GB). BitPull bietet nie mehr als die H\xE4lfte des Arbeitsspeichers dieses Computers an.", "rules.gpu": "GPU", "rules.gpu.none": "Keine", "rules.gpu.consumer": "Standard (8\u201312 GB)", "rules.gpu.high": "High-End (16\u201324 GB)", "rules.gpu.datacenter": "Rechenzentrum (40 GB+)", "rules.gpu.help": "Die Grafikkarte, die du verleihst, nach Grafikspeicher. Lass \u201EKeine\u201C, wenn du keine eigene GPU hast oder sie nicht verleihen willst. Eine GPU bringt die meisten Credits.", "rules.containers": "Container-Auftr\xE4ge", "rules.containers.help": "F\xFChrt Builds, Tests und Skripte f\xFCr andere in einer Sandbox ohne Internet und ohne Zugriff auf deine Dateien aus. Braucht Docker (oder Apple Container): siehe \u201EDiesen Computer einrichten\u201C.", "rules.models": "Offene Modelle (Ollama)", "rules.models.help": "Beantwortet KI-Anfragen mit den offenen Modellen, die in Ollama auf diesem Computer installiert sind. Braucht Ollama und mindestens ein Modell.", "rules.idle": "Erst nach Minuten Inaktivit\xE4t", "rules.idle.help": "Nur verleihen, wenn du Tastatur und Maus so viele Minuten nicht ber\xFChrt hast. 0 = auch verleihen, w\xE4hrend du arbeitest.", "rules.ac": "Nur am Stromnetz", "rules.ac.help": "Auf einem Laptop wird das Verleihen im Akkubetrieb gestoppt, damit es den Akku nie leert.", "rules.hours": "Nur von / bis Uhr (leer = immer)", "rules.hours.help": "Nur in diesem Zeitfenster verleihen, im 24-Stunden-Format. Beispiel: 22 und 8 = von 22 bis 8 Uhr. Lass beide leer, um jederzeit zu verleihen.", "rules.cache": "Kopien fremder Repos im Cache", "rules.cache.help": "Wie viele \xF6ffentliche Repos anderer Nutzer dieser Computer als Kopie beh\xE4lt, damit sie verf\xFCgbar bleiben, wenn ihre Autoren offline sind. Braucht etwas Speicherplatz und bringt Credits. 0 = keine.", "rules.save": "Regeln speichern", "rules.saved": "Regeln gespeichert. Sie gelten in wenigen Sekunden.", "rules.hours_both": "F\xFClle beide Uhrzeiten aus oder lass beide leer, um jederzeit zu verleihen.", "folders.title": "Freigegebene Ordner", "folders.hint": "BitPull liest nur diese Ordner. Um einen zu ver\xF6ffentlichen, braucht es eine vollst\xE4ndige bitpull.json.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Freigeben", "folders.none": "Keine freigegebenen Ordner.", "folders.draft": "Entwurf", "folders.publish": "Ver\xF6ffentlichen", "folders.remove": "Entfernen", "folders.need_path": "Gib zuerst den vollst\xE4ndigen Pfad eines Ordners ein, z. B. /Users/you/projects/my-library.", "folders.added": "Ordner freigegeben.", "folders.removed": "Ordner entfernt. BitPull liest ihn nicht mehr.", "folders.drafted": "Entwurf bereit: {n} Dateien gefunden. Lass deine KI die Zusammenfassung und Beschreibungen ausf\xFCllen (Tool prepare_publish) und klicke dann auf Ver\xF6ffentlichen.", "folders.published": "\u201E{name}\u201C mit {n} Dateien ver\xF6ffentlicht.", "folders.secrets_in": "Gefunden in: {where}", "folders.line": "{file} Zeile {line}", "repos.title": "Deine ver\xF6ffentlichten Repos", "repos.hint": "Sie aktualisieren sich von selbst, wenn du die Dateien \xE4nderst (alle 5 Minuten).", "repos.none": "Keine ver\xF6ffentlichten Repos.", "repos.withdraw": "Zur\xFCckziehen", "repos.withdrawn": "Repo aus dem Netzwerk zur\xFCckgezogen.", "ask.title": "Offene Modelle im Netzwerk", "ask.offers": "Dieser Computer bietet an: {models}.", "ask.offers_none": "keine Modelle (installiere Ollama, um welche anzubieten)", "ask.placeholder": "Frag ein offenes Modell im Netzwerk\u2026", "ask.small": "Klein", "ask.medium": "Mittel", "ask.large": "Gro\xDF", "ask.button": "Fragen", "ask.empty": "Schreib zuerst eine Frage.", "ask.waiting": "Suche einen Computer mit dem Modell\u2026 das kann bis zu einer Minute dauern.", "ask.credits": "{n} Credits", "tools.title": "Verbinde deine Tools", "tools.mcp": "F\xFCr Claude Code und MCP-Clients im Terminal ausf\xFChren:", "tools.openai": "F\xFCr OpenAI-kompatible Tools: Basis-URL", "tools.key": "API-Schl\xFCssel", "tools.show": "Anzeigen", "jobs.title": "Deine letzten Auftr\xE4ge", "jobs.none": "Keine Auftr\xE4ge.", "jobs.model": "Modell", "jobs.container": "Container", "jobs.status.queued": "In Warteschlange", "jobs.status.running": "L\xE4uft", "jobs.status.done": "Fertig", "jobs.status.failed": "Fehlgeschlagen", "jobs.status.canceled": "Abgebrochen", "jobs.cost": "{n} Credits", working: "Wird bearbeitet\u2026", "err.agent_down": "BitPull auf diesem Computer antwortet nicht. Es startet innerhalb von 30 Sekunden von selbst neu: Versuch es gleich noch einmal.", "err.server": "Der BitPull-Server ist nicht erreichbar. Pr\xFCf deine Internetverbindung und versuch es noch einmal.", "err.session": "Diese Dashboard-Sitzung ist abgelaufen. \xD6ffne sie erneut \xFCber die BitPull-App.", "err.billing": "Zahlungen sind noch nicht aktiv.", "err.no_folder": "Dieser Ordner existiert auf diesem Computer nicht. Pr\xFCf den Pfad.", "err.not_folder": "Dieser Pfad ist eine Datei, kein Ordner.", "err.credits": "Nicht genug Credits.", "err.device": "Dieser Computer ist noch nicht verbunden. Lass die BitPull-App offen und versuch es in einer Minute noch einmal.", "err.no_model": "Gerade bietet kein Computer im Netzwerk ein KI-Modell an. Versuch es sp\xE4ter noch einmal.", "err.invalid": "Einige Werte sind ung\xFCltig. Pr\xFCf die Felder und versuch es noch einmal.", "tip.lang": "Sprache der App. Deine Auswahl wird auf diesem Computer gespeichert.", "tip.buy.base": "\xD6ffnet die sichere Zahlungsseite f\xFCr den Tarif Base: 4,50 \u20AC pro Monat mit 80 Credits jeden Monat. Du kannst jederzeit k\xFCndigen.", "tip.buy.pro": "\xD6ffnet die sichere Zahlungsseite f\xFCr den Tarif Pro: 9,90 \u20AC pro Monat mit 200 Credits jeden Monat, h\xF6chster Priorit\xE4t und allen GPUs. Du kannst jederzeit k\xFCndigen.", "tip.buy.recharge": "\xD6ffnet die sichere Zahlungsseite, um einmalig 80 Credits f\xFCr 5 \u20AC zu kaufen. Sie verfallen nie.", "tip.pause": "Stoppt das Verleihen sofort. Ein gerade laufender Auftrag wird an einen anderen Computer \xFCbergeben. Klick erneut, um fortzusetzen.", "tip.resume": "Startet das Verleihen wieder, nach deinen Regeln f\xFCrs Verleihen.", "tip.rules.save": "Speichert die Regeln oben. Sie gelten in wenigen Sekunden; nichts \xE4ndert sich, bis du hier klickst.", "tip.folder.add": "Erlaubt BitPull, den links eingegebenen Ordner zu lesen. Dateien au\xDFerhalb freigegebener Ordner werden nie gelesen oder geteilt.", "tip.folder.draft": "Erstellt bitpull.json im Ordner: die Liste seiner Dateien mit leeren Beschreibungen, die deine KI ausf\xFCllt. Es wird noch nichts ver\xF6ffentlicht.", "tip.folder.publish": "Teilt diesen Ordner im Netzwerk als \xF6ffentliches Repo, signiert von diesem Computer. Die Ver\xF6ffentlichung wird blockiert, wenn Schl\xFCssel oder Passw\xF6rter in den Dateien gefunden werden.", "tip.folder.remove": "BitPull liest diesen Ordner nicht mehr. Bereits daraus ver\xF6ffentlichte Repos bleiben online, bis du sie zur\xFCckziehst.", "tip.repo.withdraw": "Entfernt dieses Repo aus dem Netzwerk. Andere Nutzer k\xF6nnen es nicht mehr finden oder herunterladen. Deine Dateien bleiben auf deinem Computer.", "tip.ask": "Sendet deine Frage Ende-zu-Ende-verschl\xFCsselt an einen Computer im Netzwerk, auf dem ein offenes KI-Modell l\xE4uft. Kostet ein paar Credits.", "tip.tier": "Modellgr\xF6\xDFe: Klein ist schnell und g\xFCnstig, Gro\xDF ist schlauer und kostet mehr Credits.", "tip.show_key": "Zeigt den Schl\xFCssel, mit dem KI-Tools auf diesem Computer mit BitPull sprechen. Teile ihn mit niemandem.", "tip.setup.download": "L\xE4dt den offiziellen Installer von {name} f\xFCr diesen Computer in deinen Downloads-Ordner und \xF6ffnet ihn. Folge seinen Schritten, um fertig zu werden.", "tip.setup.start": "Startet {name}, das auf diesem Computer installiert ist, aber nicht l\xE4uft.", "tip.setup.pull": "L\xE4dt das KI-Modell {model} ({size} GB) in Ollama herunter, damit dieser Computer es anderen anbieten kann.", "tip.setup.open": "\xD6ffnet die offizielle Seite von {name} in deinem Browser.", "tip.setup.recheck": "Pr\xFCft erneut, was auf diesem Computer installiert ist und l\xE4uft.", "update.title": "App-Updates", "update.current": "Installierte Version: {v}", "update.latest": "Neueste Version: {v}", "update.button": "Nach Updates suchen", "update.install": "Version {v} jetzt installieren", "update.available": "Version {v} ist verf\xFCgbar.", "update.not_in_app": "Updates werden von der BitPull-App installiert. \xD6ffne dieses Dashboard \xFCber die App, um zu aktualisieren.", "update.state.requested": "App wird um Pr\xFCfung gebeten\u2026", "update.state.checking": "Suche nach Updates\u2026", "update.state.up_to_date": "Du hast die neueste Version.", "update.state.installing": "Version {v} wird heruntergeladen und installiert\u2026 die App startet von selbst neu.", "update.state.restarting": "Neustart mit Version {v}\u2026", "update.state.error": "Das Update hat nicht geklappt: {msg}. Versuch es sp\xE4ter noch einmal.", "tip.update": "Pr\xFCft, ob es eine neuere Version von BitPull gibt. Falls ja, wird sie heruntergeladen, ihre Signatur gepr\xFCft, sie installiert und die App neu gestartet. Das Verleihen pausiert f\xFCr ein paar Sekunden.", "tools.hint": "Lass deinen KI-Assistenten geteilten Code durchsuchen und die offenen Modelle und Computer des Netzwerks nutzen. W\xE4hle dein Tool:", "tools.connect": "Verbinden", "tools.connected": "Verbunden", "tools.copy": "Kopieren", "tools.copied": "Kopiert.", "tools.installed": "Installiert", "tools.not_found": "Auf diesem Computer nicht gefunden", "tools.done": "Fertig. Starte {name} neu, um BitPull zu nutzen.", "tools.manual": "So f\xFCgst du es von Hand hinzu:", "tools.config_invalid": "Die Einstellungsdatei von {name} ist kein g\xFCltiges JSON, daher hat BitPull sie nicht ver\xE4ndert. Korrigiere die Datei oder f\xFCge BitPull mit Kopieren von Hand hinzu.", "tip.tools.connect": "F\xFCgt BitPull automatisch zu den Einstellungen von {name} hinzu. Eine Sicherung der vorherigen Einstellungen wird daneben aufbewahrt.", "tip.tools.copy": "Kopiert den Befehl oder die Einstellungen in die Zwischenablage, damit du BitPull selbst zu {name} hinzuf\xFCgen kannst.", "models.title": "KI-Modelle zum Teilen", "models.hint": "Offene Modelle aller Art, die dieser Computer verleihen kann. Aufgef\xFChrt sind nur Modelle, deren Lizenz die Bereitstellung f\xFCr andere erlaubt. Heruntergeladene Modelle werden dem Netzwerk angeboten, solange das Verleihen aktiv ist.", "models.engine.title": "Engine f\xFCr Bilder, Sprache und Musik", "models.engine.help": "Lemonade (Open Source): Bildgenerierung, Spracherkennung, Sprachausgabe, Musik, Reranking und Hochskalieren. Wird in BitPull installiert, ohne Administratorrechte.", "models.engine.install": "Engine installieren", "models.engine.repair": "Engine neu installieren", "models.engine.unsupported": "Auf diesem Computer nicht verf\xFCgbar (ben\xF6tigt Apple Silicon oder Windows/Linux x64)", "models.need_engine": "Zuerst die Engine installieren", "models.not_here": "Auf diesem Computer nicht verf\xFCgbar", "models.shared": "Heruntergeladen \xB7 geteilt", "models.download": "Herunterladen ({size} GB)", "models.needs_ram": "Ben\xF6tigt etwa {ram} GB Speicher: hier eventuell langsam", "models.recommended": "Empfohlen", "models.license": "Lizenz", "models.ok.engine": "Engine wird installiert\u2026", "task.chat": "Text und Code", "task.vision": "Bilder \u2192 Text", "task.ocr": "Dokumente (OCR)", "task.translate": "\xDCbersetzung", "task.embed": "Embeddings (Suche)", "task.rerank": "Reranking", "task.image": "Bildgenerierung", "task.upscale": "Bilder hochskalieren", "task.stt": "Sprache \u2192 Text", "task.tts": "Text \u2192 Sprache", "task.music": "Musik", "limits.title": "Deine Limits f\xFCr andere", "limits.hint": "Wie viel KI-Arbeit dieser Computer f\xFCr andere leistet. Leer lassen f\xFCr kein Limit. Ist ein Limit erreicht, werden deine Modelle bis zum n\xE4chsten Zeitraum nicht mehr angeboten.", "limits.save": "Limits speichern", "limits.requests": "Anfragen", "limits.tokens": "Tokens", "limits.used": "Genutzt", "limits.day": "Pro Tag", "limits.week": "Pro Woche", "limits.month": "Pro Monat", "limits.none": "kein Limit", "limits.usage": "{requests} Anfragen \xB7 {tokens} Tokens", "limits.saved": "Limits gespeichert.", "tip.models.engine": "L\xE4dt die Open-Source-Engine Lemonade in BitPull, damit dieser Computer Bild-, Sprach- und Musikmodelle verleihen kann.", "tip.models.download": "L\xE4dt {model} ({size} GB) auf diesen Computer, um es anderen anzubieten. Du kannst es sp\xE4ter entfernen.", "tip.limits.save": "Speichert die t\xE4glichen, w\xF6chentlichen und monatlichen Limits f\xFCr KI-Arbeit f\xFCr andere.", "lend.visible": "\u2713 Das Netzwerk sieht diesen Computer: {cpus} CPU, {ram} GB f\xFCr andere verf\xFCgbar.", "lend.invisible": "Das Netzwerk sieht das Verleihen noch nicht: warte bis zu einer Minute; bleibt es so, pr\xFCfe die Internetverbindung.", "lend.unusable": "\u26A0 Noch niemand kann diesen Computer nutzen: hier kann kein Auftrag laufen. {reason}", "lend.unusable.docker": "Docker besteht die Isolationspr\xFCfung von BitPull nicht: siehe \u201EDiesen Computer einrichten\u201C.", "lend.unusable.off": "Container-Auftr\xE4ge sind aus und kein KI-Modell ist installiert: aktiviere \u201EContainer-Auftr\xE4ge\u201C oder lade ein Modell herunter.", "lend.docker_login": "Docker kann keine Images herunterladen, weil seine Docker-Hub-Anmeldung nicht mehr g\xFCltig ist. Klicke in Docker Desktop auf dein Konto (oben rechts) \u2192 Sign out, melde dich dann wieder an oder bleib abgemeldet. Dr\xFCcke danach Erneut pr\xFCfen.", "lend.off_hint": "Das Verleihen ist ausgeschaltet: Hake unten in \u201E{rules}\u201C \u201E{enabled}\u201C an und dr\xFCcke \u201E{save}\u201C. (Pause / Fortsetzen pausiert nur ein bereits aktives Verleihen.)", "lend.low_memory": "Es werden nur {mb} MB Speicher angeboten: nur wenige Auftr\xE4ge passen. Setze in \u201E{rules}\u201C \u201E{memory}\u201C z. B. auf 4096 (= 4 GB) und dr\xFCcke \u201E{save}\u201C.", "rules.awake": "W\xE4hrend des Verleihens wach bleiben", "rules.awake.help": "W\xE4hrend dieser Computer einen Auftrag f\xFCr jemanden ausf\xFChrt, geht er nicht in den Ruhezustand (der Bildschirm kann sich trotzdem ausschalten). Danach wie gewohnt. Verhindert abgebrochene Auftr\xE4ge.", "ask.wait": "Warten bis zu (Minuten)", "ask.wait.save": "Speichern", "ask.wait.saved": "Auf Antworten wird bis zu {n} Minuten gewartet.", "ask.wait.range": "Gib eine Minutenzahl zwischen 1 und 120 ein.", "tip.wait": "Wie lange auf eine Antwort der KI-Modelle des Netzwerks gewartet wird. Modelle auf dem Prozessor anderer k\xF6nnen Minuten brauchen. Auch deine KI kann es \xE4ndern." }, en: { "lang.name": "English", "app.title": "BitPull", "locked.text": "Open the dashboard from the BitPull app: its link contains the access key.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Direct address", "pill.relay_on": "Relay connected", "pill.relay_off": "Relay not connected", "pill.cached": "{n} cached copies", "net.title": "Live network", "net.online": "{n} computers online", "net.lending": "{n} lending now", "net.cpu": "{n} CPU cores", "net.ram": "{n} GB RAM", "net.gpu": "{n} GPUs", "net.models": "{n} AI models", "net.jobs": "{n} jobs running", "credits.title": "Credit balance", "credits.plan": "{plan} plan \xB7 can go down to {n}", "plan.free": "Free", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "Recharge \u20AC5", "buy.ok": "Payment page opened in your browser.", "lend.title": "Lend this computer", "lend.hint": "Jobs run end-to-end encrypted in isolated sandboxes, without access to your files. You earn credits.", "lend.state.off": "Off", "lend.state.waiting": "Waiting", "lend.state.working": "Working", "lend.reason.lending_off": "Lending is off", "lend.reason.paused": "Paused", "lend.reason.outside_hours": "Outside your hours", "lend.reason.on_battery": "On battery", "lend.reason.computer_in_use": "You are using the computer", "lend.reason.no_jobs": "No jobs in the queue", "lend.running": "Running a {kind} job since {time}", "lend.detail": "{reason} \xB7 {n} jobs done \xB7 offers {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", sandbox {name}", "lend.detail.models": ", {n} models", "lend.pause": "Pause", "lend.resume": "Resume", "lend.paused_ok": "Lending paused. Any running job was handed to another computer.", "lend.resumed_ok": "Lending resumed.", "setup.title": "Set up this computer", "setup.hint": "What this computer needs to lend. Using the network needs nothing else. Installers come from the official sites; your system asks you to confirm.", "setup.checking": "Checking\u2026", "setup.docker.help": "Runs other people's jobs in isolated sandboxes. Needed for container jobs. Free for personal use and small businesses.", "setup.docker.download": "Download Docker", "setup.docker.start": "Start Docker", "setup.apple.title": "Apple Container (optional)", "setup.apple.help": "Stronger isolation: each job in its own virtual machine. Optional; Docker is enough to start.", "setup.apple.get": "Get Apple Container", "setup.ollama.help": "Runs open AI models (Qwen, Llama, Mistral\u2026). Needed to lend AI models.", "setup.ollama.download": "Download Ollama", "setup.ollama.start": "Start Ollama", "setup.model.title": "AI model", "setup.model.help": "The model this computer offers to others. Suggested for {ram} GB of memory: {model}.", "setup.model.download": "Download {model} ({size} GB)", "setup.model.none": "none yet", "setup.model.need_ollama": "Install and start Ollama first", "setup.nvidia.title": "NVIDIA GPU drivers (optional)", "setup.nvidia.help": "Only if this computer has an NVIDIA graphics card you want to lend.", "setup.nvidia.get": "Get NVIDIA drivers", "setup.status.running": "installed and running", "setup.status.installed": "installed", "setup.status.stopped": "installed, not running", "setup.status.missing": "not installed", "setup.status.found": "found", "setup.status.not_found": "not found", "setup.terminal": "Run in a terminal:", "setup.done": "Done", "setup.opened": "Done: opened {file}, follow its steps", "setup.recheck": "Check again", "setup.ok.download": "Download started. The installer opens by itself when it finishes: follow its steps.", "setup.ok.start": "Starting\u2026 it can take up to a minute. This list updates by itself.", "setup.ok.pull": "Model download started. Progress is shown above.", "setup.ok.page": "Page opened in your browser.", "setup.ok.recheck": "Checked again.", "rules.title": "Lending rules", "rules.enabled": "Lending on", "rules.enabled.help": "Master switch. When off, this computer never runs other people's jobs. You can still use the network yourself.", "rules.cpus": "Max CPUs", "rules.cpus.help": "How many processor cores a job may use at most. Example: on an 8-core computer, 2 leaves 6 cores free for you.", "rules.memory": "Max memory (MB)", "rules.memory.help": "RAM a job may use, in megabytes (1024 MB = 1 GB). BitPull never offers more than half of this computer's memory.", "rules.gpu": "GPU", "rules.gpu.none": "None", "rules.gpu.consumer": "Consumer (8\u201312 GB)", "rules.gpu.high": "High-end (16\u201324 GB)", "rules.gpu.datacenter": "Data-centre (40 GB+)", "rules.gpu.help": "The graphics card you lend, by video memory. Leave None if you have no dedicated GPU or do not want to lend it. A GPU earns the most credits.", "rules.containers": "Container jobs", "rules.containers.help": "Run builds, tests and scripts for others in a sandbox with no internet and no access to your files. Needs Docker (or Apple Container): see \u201CSet up this computer\u201D.", "rules.models": "Open models (Ollama)", "rules.models.help": "Answer AI requests with the open models installed in Ollama on this computer. Needs Ollama and at least one model.", "rules.idle": "Only after minutes idle", "rules.idle.help": "Lend only when you have not touched keyboard or mouse for this many minutes. 0 = lend even while you work.", "rules.ac": "Only when plugged in", "rules.ac.help": "On a laptop, stop lending when running on battery, so lending never drains it.", "rules.hours": "Only from / to hour (empty = always)", "rules.hours.help": "Lend only in this time window, in 24-hour format. Example: 22 and 8 = from 10 pm to 8 am. Leave both empty to lend at any hour.", "rules.cache": "Cached copies of others' repos", "rules.cache.help": "How many public repos of other users this computer keeps a copy of, so they stay available when their authors are offline. Uses a little disk space and earns credits. 0 = none.", "rules.save": "Save rules", "rules.saved": "Rules saved. They apply within a few seconds.", "rules.hours_both": "Fill both hours, or leave both empty to lend at any hour.", "folders.title": "Authorised folders", "folders.hint": "BitPull reads only these folders. To publish one it needs a complete bitpull.json.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Authorise", "folders.none": "No authorised folders.", "folders.draft": "Draft", "folders.publish": "Publish", "folders.remove": "Remove", "folders.need_path": "Write the full path of a folder first, e.g. /Users/you/projects/my-library.", "folders.added": "Folder authorised.", "folders.removed": "Folder removed. BitPull no longer reads it.", "folders.drafted": "Draft ready: {n} files found. Let your AI fill the summary and descriptions (prepare_publish tool), then press Publish.", "folders.published": 'Published "{name}" with {n} files.', "folders.secrets_in": "Found in: {where}", "folders.line": "{file} line {line}", "repos.title": "Your published repos", "repos.hint": "They update by themselves when you change the files (every 5 minutes).", "repos.none": "No published repos.", "repos.withdraw": "Withdraw", "repos.withdrawn": "Repo withdrawn from the network.", "ask.title": "Open models on the network", "ask.offers": "This computer offers: {models}.", "ask.offers_none": "no models (install Ollama to offer some)", "ask.placeholder": "Ask an open model on the network\u2026", "ask.small": "Small", "ask.medium": "Medium", "ask.large": "Large", "ask.button": "Ask", "ask.empty": "Write a question first.", "ask.waiting": "Looking for a computer with the model\u2026 this can take up to a minute.", "ask.credits": "{n} credits", "tools.title": "Connect your tools", "tools.mcp": "For Claude Code and MCP clients, run in a terminal:", "tools.openai": "For OpenAI-compatible tools: base URL", "tools.key": "API key", "tools.show": "Show", "jobs.title": "Your recent jobs", "jobs.none": "No jobs.", "jobs.model": "Model", "jobs.container": "Container", "jobs.status.queued": "Queued", "jobs.status.running": "Running", "jobs.status.done": "Done", "jobs.status.failed": "Failed", "jobs.status.canceled": "Canceled", "jobs.cost": "{n} credits", working: "Working\u2026", "err.agent_down": "BitPull on this computer is not responding. It restarts by itself within 30 seconds: try again shortly.", "err.server": "Can't reach the BitPull server. Check your internet connection and try again.", "err.session": "This dashboard session expired. Reopen it from the BitPull app.", "err.billing": "Payments are not active yet.", "err.no_folder": "This folder does not exist on this computer. Check the path.", "err.not_folder": "This path is a file, not a folder.", "err.credits": "Not enough credits.", "err.device": "This computer is not connected yet. Keep the BitPull app open and try again in a minute.", "err.no_model": "No computer on the network offers an AI model right now. Try again later.", "err.invalid": "Some values are not valid. Check the fields and try again.", "tip.lang": "Language of the app. Your choice is remembered on this computer.", "tip.buy.base": "Opens the secure payment page for the Base plan: \u20AC4.50 per month with 80 credits every month. You can cancel at any time.", "tip.buy.pro": "Opens the secure payment page for the Pro plan: \u20AC9.90 per month with 200 credits every month, top priority and all GPUs. You can cancel at any time.", "tip.buy.recharge": "Opens the secure payment page to buy 80 credits once, for \u20AC5. They never expire.", "tip.pause": "Stops lending right now. A job running at this moment is handed to another computer. Press again to resume.", "tip.resume": "Starts lending again, following your lending rules.", "tip.rules.save": "Saves the lending rules above. They apply within a few seconds; nothing changes until you press this.", "tip.folder.add": "Allows BitPull to read the folder written on the left. Files outside authorised folders are never read or shared.", "tip.folder.draft": "Creates bitpull.json in the folder: the list of its files with empty descriptions for your AI to complete. Nothing is published yet.", "tip.folder.publish": "Shares this folder on the network as a public repo, signed by this computer. Publication is blocked if keys or passwords are found in the files.", "tip.folder.remove": "BitPull stops reading this folder. Repos already published from it stay online until you withdraw them.", "tip.repo.withdraw": "Removes this repo from the network. Other users can no longer find or download it. Your files stay on your computer.", "tip.ask": "Sends your question, end-to-end encrypted, to a computer on the network that runs an open AI model. Costs a few credits.", "tip.tier": "Model size: small is fast and cheap, large is smarter and costs more credits.", "tip.show_key": "Shows the key that AI tools on this computer use to talk to BitPull. Do not share it.", "tip.setup.download": "Downloads the official installer of {name} for this computer into your Downloads folder and opens it. Follow its steps to finish.", "tip.setup.start": "Starts {name}, which is installed on this computer but not running.", "tip.setup.pull": "Downloads the AI model {model} ({size} GB) into Ollama, so this computer can offer it to others.", "tip.setup.open": "Opens the official {name} page in your browser.", "tip.setup.recheck": "Checks again what is installed and running on this computer.", "update.title": "App updates", "update.current": "Installed version: {v}", "update.latest": "Latest version: {v}", "update.button": "Check for updates", "update.install": "Install version {v} now", "update.available": "Version {v} is available.", "update.not_in_app": "Updates are installed by the BitPull app. Open this dashboard from the app to update.", "update.state.requested": "Asking the app to check\u2026", "update.state.checking": "Checking for updates\u2026", "update.state.up_to_date": "You have the latest version.", "update.state.installing": "Downloading and installing version {v}\u2026 the app restarts by itself.", "update.state.restarting": "Restarting with version {v}\u2026", "update.state.error": "The update did not work: {msg}. Try again later.", "tip.update": "Checks whether a newer version of BitPull exists. If it does, it downloads it, verifies its signature, installs it and restarts the app. Lending pauses for a few seconds.", "tools.hint": "Let your AI assistant search shared code and use the network's open models and computers. Pick your tool:", "tools.connect": "Connect", "tools.connected": "Connected", "tools.copy": "Copy", "tools.copied": "Copied.", "tools.installed": "Installed", "tools.not_found": "Not found on this computer", "tools.done": "Done. Restart {name} to start using BitPull.", "tools.manual": "To add it by hand:", "tools.config_invalid": "{name}'s settings file is not valid JSON, so BitPull did not touch it. Fix the file or add BitPull by hand with Copy.", "tip.tools.connect": "Adds BitPull to {name}'s settings automatically. A backup of the previous settings is kept next to them.", "tip.tools.copy": "Copies the command or settings to the clipboard, to add BitPull to {name} yourself.", "models.title": "AI models to share", "models.hint": "Open models of every kind that this computer can lend. Only models whose licence allows serving them to others are listed. Downloaded models are offered to the network while lending is on.", "models.engine.title": "Image, speech and music engine", "models.engine.help": "Lemonade (open source): runs image generation, speech-to-text, text-to-speech, music, reranking and upscaling. Installed inside BitPull, no administrator rights.", "models.engine.install": "Install engine", "models.engine.repair": "Reinstall engine", "models.engine.unsupported": "Not available on this computer (needs Apple silicon, or Windows/Linux x64)", "models.need_engine": "Install the engine first", "models.not_here": "Not available on this computer", "models.shared": "Downloaded \xB7 shared", "models.download": "Download ({size} GB)", "models.needs_ram": "Needs about {ram} GB of memory: it may be slow here", "models.recommended": "Recommended", "models.license": "Licence", "models.ok.engine": "Installing the engine\u2026", "task.chat": "Text and code", "task.vision": "Images \u2192 text", "task.ocr": "Documents (OCR)", "task.translate": "Translation", "task.embed": "Embeddings (search)", "task.rerank": "Reranking", "task.image": "Image generation", "task.upscale": "Image upscaling", "task.stt": "Speech to text", "task.tts": "Text to speech", "task.music": "Music", "limits.title": "Your limits for others", "limits.hint": "How much AI work this computer does for others. Leave empty for no limit. When a limit is reached, your models are no longer offered until the period rolls over.", "limits.save": "Save limits", "limits.requests": "Requests", "limits.tokens": "Tokens", "limits.used": "Used", "limits.day": "Per day", "limits.week": "Per week", "limits.month": "Per month", "limits.none": "no limit", "limits.usage": "{requests} requests \xB7 {tokens} tokens", "limits.saved": "Limits saved.", "tip.models.engine": "Downloads the open-source Lemonade engine into BitPull, so this computer can lend image, speech and music models.", "tip.models.download": "Downloads {model} ({size} GB) to this computer so it can offer it to others. You can remove it later.", "tip.limits.save": "Saves the daily, weekly and monthly limits for AI work done for others.", "lend.visible": "\u2713 The network sees this computer: {cpus} CPU, {ram} GB available to others.", "lend.invisible": "The network does not see the lending yet: wait up to a minute; if it stays like this, check the internet connection.", "lend.unusable": "\u26A0 Nobody can use this computer yet: no job can run here. {reason}", "lend.unusable.docker": `Docker does not pass BitPull's isolation check: see "Set up this computer".`, "lend.unusable.off": 'Container jobs are off and no AI model is installed: turn on "Container jobs" or download a model.', "lend.docker_login": "Docker cannot download images because its Docker Hub login is no longer valid. In Docker Desktop click your account (top right) \u2192 Sign out, then sign in again or stay signed out. Then press Check again.", "lend.off_hint": 'Lending is switched off: tick "{enabled}" in "{rules}" below and press "{save}". (Pause / Resume only pauses lending that is already on.)', "lend.low_memory": 'Only {mb} MB of memory is offered: few jobs fit. In "{rules}" set "{memory}" to e.g. 4096 (= 4 GB) and press "{save}".', "rules.awake": "Stay awake while lending", "rules.awake.help": "While it runs a job for someone, this computer does not go to sleep (the display can still turn off). Afterwards it can sleep as usual. Prevents jobs being cut off.", "ask.wait": "Wait up to (minutes)", "ask.wait.save": "Save", "ask.wait.saved": "Answers will be awaited up to {n} minutes.", "ask.wait.range": "Enter a number of minutes between 1 and 120.", "tip.wait": "How long to wait for an answer from the network's AI models before giving up. Models on someone's processor can take minutes. Your AI can change it too." }, es: { "lang.name": "Espa\xF1ol", "app.title": "BitPull", "locked.text": "Abre el panel desde la app BitPull: su enlace contiene la clave de acceso.", "pill.online": "En l\xEDnea", "pill.offline": "Sin conexi\xF3n", "pill.direct": "Direcci\xF3n directa", "pill.relay_on": "Rel\xE9 conectado", "pill.relay_off": "Rel\xE9 no conectado", "pill.cached": "{n} copias en cach\xE9", "net.title": "Red en vivo", "net.online": "{n} equipos en l\xEDnea", "net.lending": "{n} prestando ahora", "net.cpu": "{n} n\xFAcleos de CPU", "net.ram": "{n} GB de RAM", "net.gpu": "{n} GPU", "net.models": "{n} modelos de IA", "net.jobs": "{n} tareas en curso", "credits.title": "Saldo de cr\xE9ditos", "credits.plan": "Plan {plan} \xB7 puede bajar hasta {n}", "plan.free": "Gratis", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "Recargar \u20AC5", "buy.ok": "P\xE1gina de pago abierta en tu navegador.", "lend.title": "Prestar este equipo", "lend.hint": "Las tareas se ejecutan cifradas de extremo a extremo en entornos aislados, sin acceso a tus archivos. Ganas cr\xE9ditos.", "lend.state.off": "Apagado", "lend.state.waiting": "En espera", "lend.state.working": "Trabajando", "lend.reason.lending_off": "El pr\xE9stamo est\xE1 desactivado", "lend.reason.paused": "En pausa", "lend.reason.outside_hours": "Fuera de tu horario", "lend.reason.on_battery": "Con bater\xEDa", "lend.reason.computer_in_use": "Est\xE1s usando el equipo", "lend.reason.no_jobs": "No hay tareas en la cola", "lend.running": "Ejecutando una tarea de {kind} desde {time}", "lend.detail": "{reason} \xB7 {n} tareas hechas \xB7 ofrece {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", entorno aislado {name}", "lend.detail.models": ", {n} modelos", "lend.pause": "Pausar", "lend.resume": "Reanudar", "lend.paused_ok": "Pr\xE9stamo en pausa. La tarea en curso pas\xF3 a otro equipo.", "lend.resumed_ok": "Pr\xE9stamo reanudado.", "setup.title": "Configurar este equipo", "setup.hint": "Lo que este equipo necesita para prestar. Para usar la red no hace falta nada m\xE1s. Los instaladores vienen de los sitios oficiales; tu sistema te pedir\xE1 confirmaci\xF3n.", "setup.checking": "Comprobando\u2026", "setup.docker.help": "Ejecuta las tareas de otras personas en entornos aislados. Necesario para tareas de contenedor. Gratis para uso personal y peque\xF1as empresas.", "setup.docker.download": "Descargar Docker", "setup.docker.start": "Iniciar Docker", "setup.apple.title": "Apple Container (opcional)", "setup.apple.help": "M\xE1s aislamiento: cada tarea en su propia m\xE1quina virtual. Opcional; con Docker basta para empezar.", "setup.apple.get": "Obtener Apple Container", "setup.ollama.help": "Ejecuta modelos de IA abiertos (Qwen, Llama, Mistral\u2026). Necesario para prestar modelos de IA.", "setup.ollama.download": "Descargar Ollama", "setup.ollama.start": "Iniciar Ollama", "setup.model.title": "Modelo de IA", "setup.model.help": "El modelo que este equipo ofrece a otros. Recomendado para {ram} GB de memoria: {model}.", "setup.model.download": "Descargar {model} ({size} GB)", "setup.model.none": "ninguno a\xFAn", "setup.model.need_ollama": "Primero instala e inicia Ollama", "setup.nvidia.title": "Controladores de GPU NVIDIA (opcional)", "setup.nvidia.help": "Solo si este equipo tiene una tarjeta gr\xE1fica NVIDIA que quieras prestar.", "setup.nvidia.get": "Obtener controladores NVIDIA", "setup.status.running": "instalado y en ejecuci\xF3n", "setup.status.installed": "instalado", "setup.status.stopped": "instalado, detenido", "setup.status.missing": "no instalado", "setup.status.found": "encontrado", "setup.status.not_found": "no encontrado", "setup.terminal": "Ejecuta en una terminal:", "setup.done": "Listo", "setup.opened": "Listo: se abri\xF3 {file}, sigue sus pasos", "setup.recheck": "Comprobar de nuevo", "setup.ok.download": "Descarga iniciada. El instalador se abrir\xE1 solo al terminar: sigue sus pasos.", "setup.ok.start": "Iniciando\u2026 puede tardar hasta un minuto. Esta lista se actualiza sola.", "setup.ok.pull": "Descarga del modelo iniciada. El progreso se muestra arriba.", "setup.ok.page": "P\xE1gina abierta en tu navegador.", "setup.ok.recheck": "Comprobado de nuevo.", "rules.title": "Reglas de pr\xE9stamo", "rules.enabled": "Pr\xE9stamo activado", "rules.enabled.help": "Interruptor general. Si est\xE1 apagado, este equipo nunca ejecuta tareas de otros. Aun as\xED puedes usar la red.", "rules.cpus": "CPU m\xE1x.", "rules.cpus.help": "Cu\xE1ntos n\xFAcleos del procesador puede usar una tarea como m\xE1ximo. Ejemplo: en un equipo de 8 n\xFAcleos, 2 te deja 6 libres.", "rules.memory": "Memoria m\xE1x. (MB)", "rules.memory.help": "RAM que puede usar una tarea, en megabytes (1024 MB = 1 GB). BitPull nunca ofrece m\xE1s de la mitad de la memoria de este equipo.", "rules.gpu": "GPU", "rules.gpu.none": "Ninguna", "rules.gpu.consumer": "Dom\xE9stica (8\u201312 GB)", "rules.gpu.high": "Gama alta (16\u201324 GB)", "rules.gpu.datacenter": "Centro de datos (40 GB+)", "rules.gpu.help": "La tarjeta gr\xE1fica que prestas, seg\xFAn su memoria de video. Deja Ninguna si no tienes GPU dedicada o no quieres prestarla. Una GPU es lo que m\xE1s cr\xE9ditos gana.", "rules.containers": "Tareas de contenedor", "rules.containers.help": "Ejecuta compilaciones, pruebas y scripts de otros en un entorno aislado sin internet ni acceso a tus archivos. Requiere Docker (o Apple Container): consulta \xABConfigurar este equipo\xBB.", "rules.models": "Modelos abiertos (Ollama)", "rules.models.help": "Responde solicitudes de IA con los modelos abiertos instalados en Ollama en este equipo. Requiere Ollama y al menos un modelo.", "rules.idle": "Solo tras minutos de inactividad", "rules.idle.help": "Presta solo cuando no hayas tocado el teclado ni el rat\xF3n durante estos minutos. 0 = prestar incluso mientras trabajas.", "rules.ac": "Solo conectado a la corriente", "rules.ac.help": "En un port\xE1til, deja de prestar cuando funciona con bater\xEDa, para no agotarla.", "rules.hours": "Solo de / a la hora (vac\xEDo = siempre)", "rules.hours.help": "Presta solo en este horario, en formato de 24 horas. Ejemplo: 22 y 8 = de 22:00 a 8:00. Deja ambos vac\xEDos para prestar a cualquier hora.", "rules.cache": "Copias en cach\xE9 de repos ajenos", "rules.cache.help": "Cu\xE1ntos repos p\xFAblicos de otros usuarios guarda este equipo, para que sigan disponibles cuando sus autores no est\xE9n conectados. Usa poco espacio en disco y gana cr\xE9ditos. 0 = ninguno.", "rules.save": "Guardar reglas", "rules.saved": "Reglas guardadas. Se aplican en unos segundos.", "rules.hours_both": "Rellena ambas horas o d\xE9jalas vac\xEDas para prestar a cualquier hora.", "folders.title": "Carpetas autorizadas", "folders.hint": "BitPull solo lee estas carpetas. Para publicar una necesita un bitpull.json completo.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Autorizar", "folders.none": "No hay carpetas autorizadas.", "folders.draft": "Borrador", "folders.publish": "Publicar", "folders.remove": "Quitar", "folders.need_path": "Primero escribe la ruta completa de una carpeta, p. ej. /Users/you/projects/my-library.", "folders.added": "Carpeta autorizada.", "folders.removed": "Carpeta quitada. BitPull ya no la lee.", "folders.drafted": "Borrador listo: {n} archivos encontrados. Deja que tu IA complete el resumen y las descripciones (herramienta prepare_publish) y luego pulsa Publicar.", "folders.published": 'Publicado "{name}" con {n} archivos.', "folders.secrets_in": "Encontrado en: {where}", "folders.line": "{file} l\xEDnea {line}", "repos.title": "Tus repos publicados", "repos.hint": "Se actualizan solos cuando cambias los archivos (cada 5 minutos).", "repos.none": "No hay repos publicados.", "repos.withdraw": "Retirar", "repos.withdrawn": "Repo retirado de la red.", "ask.title": "Modelos abiertos en la red", "ask.offers": "Este equipo ofrece: {models}.", "ask.offers_none": "ning\xFAn modelo (instala Ollama para ofrecer alguno)", "ask.placeholder": "Pregunta a un modelo abierto de la red\u2026", "ask.small": "Peque\xF1o", "ask.medium": "Mediano", "ask.large": "Grande", "ask.button": "Preguntar", "ask.empty": "Primero escribe una pregunta.", "ask.waiting": "Buscando un equipo con el modelo\u2026 puede tardar hasta un minuto.", "ask.credits": "{n} cr\xE9ditos", "tools.title": "Conecta tus herramientas", "tools.mcp": "Para Claude Code y clientes MCP, ejecuta en una terminal:", "tools.openai": "Para herramientas compatibles con OpenAI: URL base", "tools.key": "Clave de API", "tools.show": "Mostrar", "jobs.title": "Tus tareas recientes", "jobs.none": "No hay tareas.", "jobs.model": "Modelo", "jobs.container": "Contenedor", "jobs.status.queued": "En cola", "jobs.status.running": "En curso", "jobs.status.done": "Hecha", "jobs.status.failed": "Fallida", "jobs.status.canceled": "Cancelada", "jobs.cost": "{n} cr\xE9ditos", working: "Procesando\u2026", "err.agent_down": "BitPull no responde en este equipo. Se reinicia solo en 30 segundos: int\xE9ntalo de nuevo en breve.", "err.server": "No se puede conectar con el servidor de BitPull. Revisa tu conexi\xF3n a internet e int\xE9ntalo de nuevo.", "err.session": "La sesi\xF3n del panel caduc\xF3. Vuelve a abrirlo desde la app BitPull.", "err.billing": "Los pagos a\xFAn no est\xE1n activos.", "err.no_folder": "Esta carpeta no existe en este equipo. Revisa la ruta.", "err.not_folder": "Esta ruta es un archivo, no una carpeta.", "err.credits": "No tienes suficientes cr\xE9ditos.", "err.device": "Este equipo a\xFAn no est\xE1 conectado. Mant\xE9n abierta la app BitPull e int\xE9ntalo en un minuto.", "err.no_model": "Ahora mismo ning\xFAn equipo de la red ofrece un modelo de IA. Int\xE9ntalo m\xE1s tarde.", "err.invalid": "Algunos valores no son v\xE1lidos. Revisa los campos e int\xE9ntalo de nuevo.", "tip.lang": "Idioma de la app. Tu elecci\xF3n se recuerda en este equipo.", "tip.buy.base": "Abre la p\xE1gina de pago seguro del plan Base: \u20AC4.50 al mes con 80 cr\xE9ditos cada mes. Puedes cancelar cuando quieras.", "tip.buy.pro": "Abre la p\xE1gina de pago seguro del plan Pro: \u20AC9.90 al mes con 200 cr\xE9ditos cada mes, m\xE1xima prioridad y todas las GPU. Puedes cancelar cuando quieras.", "tip.buy.recharge": "Abre la p\xE1gina de pago seguro para comprar 80 cr\xE9ditos una sola vez, por \u20AC5. No caducan nunca.", "tip.pause": "Detiene el pr\xE9stamo ahora mismo. La tarea que se est\xE9 ejecutando en ese momento pasa a otro equipo. Pulsa de nuevo para reanudar.", "tip.resume": "Vuelve a prestar el equipo, siguiendo tus reglas de pr\xE9stamo.", "tip.rules.save": "Guarda las reglas de pr\xE9stamo de arriba. Se aplican en unos segundos; nada cambia hasta que pulses aqu\xED.", "tip.folder.add": "Permite que BitPull lea la carpeta escrita a la izquierda. Los archivos fuera de las carpetas autorizadas nunca se leen ni se comparten.", "tip.folder.draft": "Crea bitpull.json en la carpeta: la lista de sus archivos con descripciones vac\xEDas para que tu AI las complete. Todav\xEDa no se publica nada.", "tip.folder.publish": "Comparte esta carpeta en la red como repo p\xFAblico, firmado por este equipo. La publicaci\xF3n se bloquea si se encuentran claves o contrase\xF1as en los archivos.", "tip.folder.remove": "BitPull deja de leer esta carpeta. Los repos ya publicados desde ella siguen en l\xEDnea hasta que los retires.", "tip.repo.withdraw": "Quita este repo de la red. Los dem\xE1s usuarios ya no podr\xE1n encontrarlo ni descargarlo. Tus archivos se quedan en tu equipo.", "tip.ask": "Env\xEDa tu pregunta, cifrada de extremo a extremo, a un equipo de la red que ejecuta un modelo de AI abierto. Cuesta unos pocos cr\xE9ditos.", "tip.tier": "Tama\xF1o del modelo: el peque\xF1o es r\xE1pido y barato; el grande es m\xE1s inteligente y cuesta m\xE1s cr\xE9ditos.", "tip.show_key": "Muestra la clave que usan las herramientas de AI de este equipo para comunicarse con BitPull. No la compartas.", "tip.setup.download": "Descarga el instalador oficial de {name} para este equipo en tu carpeta Descargas y lo abre. Sigue sus pasos para terminar.", "tip.setup.start": "Inicia {name}, que est\xE1 instalado en este equipo pero no se est\xE1 ejecutando.", "tip.setup.pull": "Descarga el modelo de AI {model} ({size} GB) en Ollama, para que este equipo pueda ofrecerlo a otros.", "tip.setup.open": "Abre la p\xE1gina oficial de {name} en tu navegador.", "tip.setup.recheck": "Vuelve a comprobar qu\xE9 est\xE1 instalado y en ejecuci\xF3n en este equipo.", "update.title": "Actualizaciones de la app", "update.current": "Versi\xF3n instalada: {v}", "update.latest": "\xDAltima versi\xF3n: {v}", "update.button": "Buscar actualizaciones", "update.install": "Instalar la versi\xF3n {v} ahora", "update.available": "La versi\xF3n {v} est\xE1 disponible.", "update.not_in_app": "Las actualizaciones las instala la app BitPull. Abre este panel desde la app para actualizar.", "update.state.requested": "Pidiendo a la app que busque\u2026", "update.state.checking": "Buscando actualizaciones\u2026", "update.state.up_to_date": "Tienes la \xFAltima versi\xF3n.", "update.state.installing": "Descargando e instalando la versi\xF3n {v}\u2026 la app se reinicia sola.", "update.state.restarting": "Reiniciando con la versi\xF3n {v}\u2026", "update.state.error": "La actualizaci\xF3n no funcion\xF3: {msg}. Int\xE9ntalo m\xE1s tarde.", "tip.update": "Comprueba si existe una versi\xF3n m\xE1s reciente de BitPull. Si la hay, la descarga, verifica su firma, la instala y reinicia la app. El pr\xE9stamo se pausa unos segundos.", "tools.hint": "Deja que tu asistente de AI busque c\xF3digo compartido y use los modelos abiertos y los equipos de la red. Elige tu herramienta:", "tools.connect": "Conectar", "tools.connected": "Conectado", "tools.copy": "Copiar", "tools.copied": "Copiado.", "tools.installed": "Instalado", "tools.not_found": "No se encontr\xF3 en este equipo", "tools.done": "Listo. Reinicia {name} para empezar a usar BitPull.", "tools.manual": "Para a\xF1adirlo a mano:", "tools.config_invalid": "El archivo de configuraci\xF3n de {name} no es JSON v\xE1lido, as\xED que BitPull no lo modific\xF3. Corrige el archivo o a\xF1ade BitPull a mano con Copiar.", "tip.tools.connect": "A\xF1ade BitPull a la configuraci\xF3n de {name} autom\xE1ticamente. Se guarda una copia de seguridad de la configuraci\xF3n anterior junto a ella.", "tip.tools.copy": "Copia el comando o la configuraci\xF3n al portapapeles, para que a\xF1adas BitPull a {name} t\xFA mismo.", "models.title": "Modelos de IA para compartir", "models.hint": "Modelos abiertos de todo tipo que este ordenador puede prestar. Solo se muestran modelos cuya licencia permite servirlos a otros. Los modelos descargados se ofrecen a la red mientras el pr\xE9stamo est\xE1 activo.", "models.engine.title": "Motor de im\xE1genes, voz y m\xFAsica", "models.engine.help": "Lemonade (c\xF3digo abierto): genera im\xE1genes, transcribe voz, lee textos en voz alta, crea m\xFAsica, reordena documentos y ampl\xEDa im\xE1genes. Se instala dentro de BitPull, sin permisos de administrador.", "models.engine.install": "Instalar motor", "models.engine.repair": "Reinstalar motor", "models.engine.unsupported": "No disponible en este ordenador (requiere Apple silicon, o Windows/Linux x64)", "models.need_engine": "Instala primero el motor", "models.not_here": "No disponible en este ordenador", "models.shared": "Descargado \xB7 compartido", "models.download": "Descargar ({size} GB)", "models.needs_ram": "Necesita unos {ram} GB de memoria: aqu\xED puede ir lento", "models.recommended": "Recomendado", "models.license": "Licencia", "models.ok.engine": "Instalando el motor\u2026", "task.chat": "Texto y c\xF3digo", "task.vision": "Im\xE1genes \u2192 texto", "task.ocr": "Documentos (OCR)", "task.translate": "Traducci\xF3n", "task.embed": "Embeddings (b\xFAsqueda)", "task.rerank": "Reordenaci\xF3n", "task.image": "Generaci\xF3n de im\xE1genes", "task.upscale": "Ampliaci\xF3n de im\xE1genes", "task.stt": "Voz a texto", "task.tts": "Texto a voz", "task.music": "M\xFAsica", "limits.title": "Tus l\xEDmites para otros", "limits.hint": "Cu\xE1nto trabajo de IA hace este ordenador para otros. D\xE9jalo vac\xEDo para no poner l\xEDmite. Al alcanzar un l\xEDmite, tus modelos dejan de ofrecerse hasta el siguiente periodo.", "limits.save": "Guardar l\xEDmites", "limits.requests": "Solicitudes", "limits.tokens": "Tokens", "limits.used": "Usado", "limits.day": "Por d\xEDa", "limits.week": "Por semana", "limits.month": "Por mes", "limits.none": "sin l\xEDmite", "limits.usage": "{requests} solicitudes \xB7 {tokens} tokens", "limits.saved": "L\xEDmites guardados.", "tip.models.engine": "Descarga en BitPull el motor de c\xF3digo abierto Lemonade, para que este ordenador pueda prestar modelos de imagen, voz y m\xFAsica.", "tip.models.download": "Descarga {model} ({size} GB) en este ordenador para ofrecerlo a otros. Puedes eliminarlo despu\xE9s.", "tip.limits.save": "Guarda los l\xEDmites diarios, semanales y mensuales del trabajo de IA para otros.", "lend.visible": "\u2713 La red ve este ordenador: {cpus} CPU, {ram} GB disponibles para otros.", "lend.invisible": "La red a\xFAn no ve el pr\xE9stamo: espera hasta un minuto; si sigue as\xED, revisa la conexi\xF3n a internet.", "lend.unusable": "\u26A0 Nadie puede usar a\xFAn este ordenador: aqu\xED no puede ejecutarse ning\xFAn trabajo. {reason}", "lend.unusable.docker": 'Docker no supera la comprobaci\xF3n de aislamiento de BitPull: mira "Configurar este ordenador".', "lend.unusable.off": 'Los trabajos en contenedor est\xE1n desactivados y no hay ning\xFAn modelo de IA: activa "Trabajos en contenedor" o descarga un modelo.', "lend.docker_login": "Docker no puede descargar im\xE1genes porque su sesi\xF3n de Docker Hub ya no es v\xE1lida. En Docker Desktop haz clic en tu cuenta (arriba a la derecha) \u2192 Sign out, luego vuelve a iniciar sesi\xF3n o qu\xE9date sin sesi\xF3n. Despu\xE9s pulsa Comprobar de nuevo.", "lend.off_hint": 'El pr\xE9stamo est\xE1 apagado: marca "{enabled}" en "{rules}" abajo y pulsa "{save}". (Pausa / Reanudar solo pausa un pr\xE9stamo ya activo.)', "lend.low_memory": 'Solo ofreces {mb} MB de memoria: caben pocos trabajos. En "{rules}" pon "{memory}" por ejemplo en 4096 (= 4 GB) y pulsa "{save}".', "rules.awake": "Permanecer activo durante el pr\xE9stamo", "rules.awake.help": "Mientras ejecuta un trabajo para alguien, este ordenador no entra en suspensi\xF3n (la pantalla puede apagarse igualmente). Despu\xE9s se suspende como siempre. Evita que se corten trabajos.", "ask.wait": "Esperar hasta (minutos)", "ask.wait.save": "Guardar", "ask.wait.saved": "Las respuestas se esperar\xE1n hasta {n} minutos.", "ask.wait.range": "Introduce un n\xFAmero de minutos entre 1 y 120.", "tip.wait": "Cu\xE1nto esperar la respuesta de los modelos de IA de la red antes de rendirse. Los modelos en el procesador de alguien pueden tardar minutos. Tambi\xE9n puede cambiarlo tu IA." }, fr: { "lang.name": "Fran\xE7ais", "app.title": "BitPull", "locked.text": "Ouvrez le tableau de bord depuis l'app BitPull : son lien contient la cl\xE9 d'acc\xE8s.", "pill.online": "En ligne", "pill.offline": "Hors ligne", "pill.direct": "Adresse directe", "pill.relay_on": "Relais connect\xE9", "pill.relay_off": "Relais non connect\xE9", "pill.cached": "{n} copies en cache", "net.title": "R\xE9seau en direct", "net.online": "{n} ordinateurs en ligne", "net.lending": "{n} en pr\xEAt actuellement", "net.cpu": "{n} c\u0153urs CPU", "net.ram": "{n} GB de RAM", "net.gpu": "{n} GPU", "net.models": "{n} mod\xE8les d'IA", "net.jobs": "{n} t\xE2ches en cours", "credits.title": "Solde de cr\xE9dits", "credits.plan": "Forfait {plan} \xB7 peut descendre jusqu'\xE0 {n}", "plan.free": "Gratuit", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base 4,50 \u20AC", "buy.pro": "Pro 9,90 \u20AC", "buy.recharge": "Recharger 5 \u20AC", "buy.ok": "Page de paiement ouverte dans votre navigateur.", "lend.title": "Pr\xEAter cet ordinateur", "lend.hint": "Les t\xE2ches s'ex\xE9cutent chiffr\xE9es de bout en bout dans des bacs \xE0 sable isol\xE9s, sans acc\xE8s \xE0 vos fichiers. Vous gagnez des cr\xE9dits.", "lend.state.off": "D\xE9sactiv\xE9", "lend.state.waiting": "En attente", "lend.state.working": "Au travail", "lend.reason.lending_off": "Le pr\xEAt est d\xE9sactiv\xE9", "lend.reason.paused": "En pause", "lend.reason.outside_hours": "Hors de vos horaires", "lend.reason.on_battery": "Sur batterie", "lend.reason.computer_in_use": "Vous utilisez l'ordinateur", "lend.reason.no_jobs": "Aucune t\xE2che en file d'attente", "lend.running": "Ex\xE9cute une t\xE2che {kind} depuis {time}", "lend.detail": "{reason} \xB7 {n} t\xE2ches termin\xE9es \xB7 offre {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", bac \xE0 sable {name}", "lend.detail.models": ", {n} mod\xE8les", "lend.pause": "Pause", "lend.resume": "Reprendre", "lend.paused_ok": "Pr\xEAt en pause. Toute t\xE2che en cours a \xE9t\xE9 confi\xE9e \xE0 un autre ordinateur.", "lend.resumed_ok": "Pr\xEAt repris.", "setup.title": "Configurer cet ordinateur", "setup.hint": "Ce dont cet ordinateur a besoin pour pr\xEAter. Utiliser le r\xE9seau ne demande rien d'autre. Les installateurs viennent des sites officiels ; votre syst\xE8me vous demande de confirmer.", "setup.checking": "V\xE9rification\u2026", "setup.docker.help": "Ex\xE9cute les t\xE2ches des autres dans des bacs \xE0 sable isol\xE9s. N\xE9cessaire pour les t\xE2ches conteneur. Gratuit pour un usage personnel et les petites entreprises.", "setup.docker.download": "T\xE9l\xE9charger Docker", "setup.docker.start": "D\xE9marrer Docker", "setup.apple.title": "Apple Container (facultatif)", "setup.apple.help": "Isolation renforc\xE9e : chaque t\xE2che dans sa propre machine virtuelle. Facultatif ; Docker suffit pour commencer.", "setup.apple.get": "Obtenir Apple Container", "setup.ollama.help": "Ex\xE9cute des mod\xE8les d'IA ouverts (Qwen, Llama, Mistral\u2026). N\xE9cessaire pour pr\xEAter des mod\xE8les d'IA.", "setup.ollama.download": "T\xE9l\xE9charger Ollama", "setup.ollama.start": "D\xE9marrer Ollama", "setup.model.title": "Mod\xE8le d'IA", "setup.model.help": "Le mod\xE8le que cet ordinateur propose aux autres. Sugg\xE9r\xE9 pour {ram} GB de m\xE9moire : {model}.", "setup.model.download": "T\xE9l\xE9charger {model} ({size} GB)", "setup.model.none": "aucun pour l'instant", "setup.model.need_ollama": "Installez et d\xE9marrez d'abord Ollama", "setup.nvidia.title": "Pilotes GPU NVIDIA (facultatif)", "setup.nvidia.help": "Seulement si cet ordinateur a une carte graphique NVIDIA que vous voulez pr\xEAter.", "setup.nvidia.get": "Obtenir les pilotes NVIDIA", "setup.status.running": "install\xE9 et actif", "setup.status.installed": "install\xE9", "setup.status.stopped": "install\xE9, non d\xE9marr\xE9", "setup.status.missing": "non install\xE9", "setup.status.found": "trouv\xE9", "setup.status.not_found": "introuvable", "setup.terminal": "Ex\xE9cutez dans un terminal :", "setup.done": "Termin\xE9", "setup.opened": "Termin\xE9 : {file} ouvert, suivez ses \xE9tapes", "setup.recheck": "Rev\xE9rifier", "setup.ok.download": "T\xE9l\xE9chargement lanc\xE9. L'installateur s'ouvrira tout seul \xE0 la fin : suivez ses \xE9tapes.", "setup.ok.start": "D\xE9marrage\u2026 cela peut prendre jusqu'\xE0 une minute. Cette liste se met \xE0 jour toute seule.", "setup.ok.pull": "T\xE9l\xE9chargement du mod\xE8le lanc\xE9. La progression s'affiche ci-dessus.", "setup.ok.page": "Page ouverte dans votre navigateur.", "setup.ok.recheck": "V\xE9rification refaite.", "rules.title": "R\xE8gles de pr\xEAt", "rules.enabled": "Pr\xEAt activ\xE9", "rules.enabled.help": "Interrupteur g\xE9n\xE9ral. D\xE9sactiv\xE9, cet ordinateur n'ex\xE9cute jamais les t\xE2ches des autres. Vous pouvez toujours utiliser le r\xE9seau vous-m\xEAme.", "rules.cpus": "CPU max", "rules.cpus.help": "Nombre maximal de c\u0153urs de processeur qu'une t\xE2che peut utiliser. Exemple : sur un ordinateur \xE0 8 c\u0153urs, 2 vous laisse 6 c\u0153urs libres.", "rules.memory": "M\xE9moire max (MB)", "rules.memory.help": "RAM qu'une t\xE2che peut utiliser, en m\xE9gaoctets (1024 MB = 1 GB). BitPull ne propose jamais plus de la moiti\xE9 de la m\xE9moire de cet ordinateur.", "rules.gpu": "GPU", "rules.gpu.none": "Aucun", "rules.gpu.consumer": "Grand public (8\u201312 GB)", "rules.gpu.high": "Haut de gamme (16\u201324 GB)", "rules.gpu.datacenter": "Centre de donn\xE9es (40 GB+)", "rules.gpu.help": "La carte graphique que vous pr\xEAtez, selon sa m\xE9moire vid\xE9o. Laissez Aucun si vous n'avez pas de GPU d\xE9di\xE9 ou ne voulez pas le pr\xEAter. Un GPU rapporte le plus de cr\xE9dits.", "rules.containers": "T\xE2ches conteneur", "rules.containers.help": "Ex\xE9cute des compilations, tests et scripts pour d'autres dans un bac \xE0 sable sans internet ni acc\xE8s \xE0 vos fichiers. N\xE9cessite Docker (ou Apple Container) : voir \xAB Configurer cet ordinateur \xBB.", "rules.models": "Mod\xE8les ouverts (Ollama)", "rules.models.help": "R\xE9pond aux requ\xEAtes d'IA avec les mod\xE8les ouverts install\xE9s dans Ollama sur cet ordinateur. N\xE9cessite Ollama et au moins un mod\xE8le.", "rules.idle": "Seulement apr\xE8s X minutes d'inactivit\xE9", "rules.idle.help": "Pr\xEAte seulement si vous n'avez pas touch\xE9 le clavier ni la souris depuis ce nombre de minutes. 0 = pr\xEAter m\xEAme pendant que vous travaillez.", "rules.ac": "Seulement sur secteur", "rules.ac.help": "Sur un portable, arr\xEAte de pr\xEAter quand il est sur batterie, pour que le pr\xEAt ne la vide jamais.", "rules.hours": "Seulement de / \xE0 heure (vide = toujours)", "rules.hours.help": "Pr\xEAte seulement dans cette plage horaire, au format 24 h. Exemple : 22 et 8 = de 22 h \xE0 8 h. Laissez les deux vides pour pr\xEAter \xE0 toute heure.", "rules.cache": "Copies en cache des d\xE9p\xF4ts d'autres", "rules.cache.help": "Nombre de d\xE9p\xF4ts publics d'autres utilisateurs dont cet ordinateur garde une copie, pour qu'ils restent disponibles quand leurs auteurs sont hors ligne. Utilise un peu d'espace disque et rapporte des cr\xE9dits. 0 = aucun.", "rules.save": "Enregistrer", "rules.saved": "R\xE8gles enregistr\xE9es. Elles s'appliquent en quelques secondes.", "rules.hours_both": "Remplissez les deux heures, ou laissez-les vides pour pr\xEAter \xE0 toute heure.", "folders.title": "Dossiers autoris\xE9s", "folders.hint": "BitPull lit uniquement ces dossiers. Pour en publier un, il faut un bitpull.json complet.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Autoriser", "folders.none": "Aucun dossier autoris\xE9.", "folders.draft": "Brouillon", "folders.publish": "Publier", "folders.remove": "Retirer", "folders.need_path": "Saisissez d'abord le chemin complet d'un dossier, par ex. /Users/you/projects/my-library.", "folders.added": "Dossier autoris\xE9.", "folders.removed": "Dossier retir\xE9. BitPull ne le lit plus.", "folders.drafted": "Brouillon pr\xEAt : {n} fichiers trouv\xE9s. Laissez votre IA remplir le r\xE9sum\xE9 et les descriptions (outil prepare_publish), puis cliquez sur Publier.", "folders.published": "\xAB {name} \xBB publi\xE9 avec {n} fichiers.", "folders.secrets_in": "Trouv\xE9 dans : {where}", "folders.line": "{file} ligne {line}", "repos.title": "Vos d\xE9p\xF4ts publi\xE9s", "repos.hint": "Ils se mettent \xE0 jour tout seuls quand vous modifiez les fichiers (toutes les 5 minutes).", "repos.none": "Aucun d\xE9p\xF4t publi\xE9.", "repos.withdraw": "Retirer", "repos.withdrawn": "D\xE9p\xF4t retir\xE9 du r\xE9seau.", "ask.title": "Mod\xE8les ouverts sur le r\xE9seau", "ask.offers": "Cet ordinateur propose : {models}.", "ask.offers_none": "aucun mod\xE8le (installez Ollama pour en proposer)", "ask.placeholder": "Interrogez un mod\xE8le ouvert du r\xE9seau\u2026", "ask.small": "Petit", "ask.medium": "Moyen", "ask.large": "Grand", "ask.button": "Demander", "ask.empty": "\xC9crivez d'abord une question.", "ask.waiting": "Recherche d'un ordinateur avec ce mod\xE8le\u2026 cela peut prendre jusqu'\xE0 une minute.", "ask.credits": "{n} cr\xE9dits", "tools.title": "Connectez vos outils", "tools.mcp": "Pour Claude Code et les clients MCP, ex\xE9cutez dans un terminal :", "tools.openai": "Pour les outils compatibles OpenAI : URL de base", "tools.key": "Cl\xE9 API", "tools.show": "Afficher", "jobs.title": "Vos t\xE2ches r\xE9centes", "jobs.none": "Aucune t\xE2che.", "jobs.model": "Mod\xE8le", "jobs.container": "Conteneur", "jobs.status.queued": "En file", "jobs.status.running": "En cours", "jobs.status.done": "Termin\xE9e", "jobs.status.failed": "\xC9chou\xE9e", "jobs.status.canceled": "Annul\xE9e", "jobs.cost": "{n} cr\xE9dits", working: "En cours\u2026", "err.agent_down": "BitPull ne r\xE9pond pas sur cet ordinateur. Il red\xE9marre tout seul en 30 secondes : r\xE9essayez bient\xF4t.", "err.server": "Impossible de joindre le serveur BitPull. V\xE9rifiez votre connexion internet et r\xE9essayez.", "err.session": "Cette session du tableau de bord a expir\xE9. Rouvrez-le depuis l'app BitPull.", "err.billing": "Les paiements ne sont pas encore actifs.", "err.no_folder": "Ce dossier n'existe pas sur cet ordinateur. V\xE9rifiez le chemin.", "err.not_folder": "Ce chemin est un fichier, pas un dossier.", "err.credits": "Cr\xE9dits insuffisants.", "err.device": "Cet ordinateur n'est pas encore connect\xE9. Gardez l'app BitPull ouverte et r\xE9essayez dans une minute.", "err.no_model": "Aucun ordinateur du r\xE9seau ne propose de mod\xE8le d'IA pour le moment. R\xE9essayez plus tard.", "err.invalid": "Certaines valeurs ne sont pas valides. V\xE9rifiez les champs et r\xE9essayez.", "tip.lang": "Langue de l'application. Votre choix est m\xE9moris\xE9 sur cet ordinateur.", "tip.buy.base": "Ouvre la page de paiement s\xE9curis\xE9 du forfait Base : 4,50 \u20AC par mois avec 80 cr\xE9dits chaque mois. Vous pouvez r\xE9silier \xE0 tout moment.", "tip.buy.pro": "Ouvre la page de paiement s\xE9curis\xE9 du forfait Pro : 9,90 \u20AC par mois avec 200 cr\xE9dits chaque mois, la priorit\xE9 maximale et tous les GPU. Vous pouvez r\xE9silier \xE0 tout moment.", "tip.buy.recharge": "Ouvre la page de paiement s\xE9curis\xE9 pour acheter 80 cr\xE9dits en une fois, pour 5 \u20AC. Ils n'expirent jamais.", "tip.pause": "Arr\xEAte le pr\xEAt imm\xE9diatement. Une t\xE2che en cours \xE0 ce moment-l\xE0 est confi\xE9e \xE0 un autre ordinateur. Appuyez \xE0 nouveau pour reprendre.", "tip.resume": "Reprend le pr\xEAt, en suivant vos r\xE8gles de pr\xEAt.", "tip.rules.save": "Enregistre les r\xE8gles de pr\xEAt ci-dessus. Elles s'appliquent en quelques secondes ; rien ne change tant que vous n'appuyez pas ici.", "tip.folder.add": "Autorise BitPull \xE0 lire le dossier indiqu\xE9 \xE0 gauche. Les fichiers situ\xE9s hors des dossiers autoris\xE9s ne sont jamais lus ni partag\xE9s.", "tip.folder.draft": "Cr\xE9e bitpull.json dans le dossier : la liste de ses fichiers avec des descriptions vides que votre AI compl\xE9tera. Rien n'est encore publi\xE9.", "tip.folder.publish": "Partage ce dossier sur le r\xE9seau en tant que d\xE9p\xF4t public, sign\xE9 par cet ordinateur. La publication est bloqu\xE9e si des cl\xE9s ou des mots de passe sont trouv\xE9s dans les fichiers.", "tip.folder.remove": "BitPull arr\xEAte de lire ce dossier. Les d\xE9p\xF4ts d\xE9j\xE0 publi\xE9s depuis ce dossier restent en ligne jusqu'\xE0 ce que vous les retiriez.", "tip.repo.withdraw": "Retire ce d\xE9p\xF4t du r\xE9seau. Les autres utilisateurs ne peuvent plus le trouver ni le t\xE9l\xE9charger. Vos fichiers restent sur votre ordinateur.", "tip.ask": "Envoie votre question, chiffr\xE9e de bout en bout, \xE0 un ordinateur du r\xE9seau qui ex\xE9cute un mod\xE8le d'AI ouvert. Co\xFBte quelques cr\xE9dits.", "tip.tier": "Taille du mod\xE8le : le petit est rapide et \xE9conomique, le grand est plus intelligent et co\xFBte plus de cr\xE9dits.", "tip.show_key": "Affiche la cl\xE9 que les outils d'AI de cet ordinateur utilisent pour communiquer avec BitPull. Ne la partagez pas.", "tip.setup.download": "T\xE9l\xE9charge l'installateur officiel de {name} pour cet ordinateur dans votre dossier T\xE9l\xE9chargements et l'ouvre. Suivez ses \xE9tapes pour terminer.", "tip.setup.start": "D\xE9marre {name}, qui est install\xE9 sur cet ordinateur mais n'est pas lanc\xE9.", "tip.setup.pull": "T\xE9l\xE9charge le mod\xE8le d'AI {model} ({size} GB) dans Ollama, pour que cet ordinateur puisse le proposer aux autres.", "tip.setup.open": "Ouvre la page officielle de {name} dans votre navigateur.", "tip.setup.recheck": "V\xE9rifie \xE0 nouveau ce qui est install\xE9 et lanc\xE9 sur cet ordinateur.", "update.title": "Mises \xE0 jour de l'app", "update.current": "Version install\xE9e : {v}", "update.latest": "Derni\xE8re version : {v}", "update.button": "Rechercher des mises \xE0 jour", "update.install": "Installer la version {v} maintenant", "update.available": "La version {v} est disponible.", "update.not_in_app": "Les mises \xE0 jour sont install\xE9es par l'app BitPull. Ouvrez ce tableau de bord depuis l'app pour mettre \xE0 jour.", "update.state.requested": "Demande de v\xE9rification \xE0 l'app\u2026", "update.state.checking": "Recherche de mises \xE0 jour\u2026", "update.state.up_to_date": "Vous avez la derni\xE8re version.", "update.state.installing": "T\xE9l\xE9chargement et installation de la version {v}\u2026 l'app red\xE9marre toute seule.", "update.state.restarting": "Red\xE9marrage avec la version {v}\u2026", "update.state.error": "La mise \xE0 jour a \xE9chou\xE9 : {msg}. R\xE9essayez plus tard.", "tip.update": "V\xE9rifie s'il existe une version plus r\xE9cente de BitPull. Si oui, la t\xE9l\xE9charge, v\xE9rifie sa signature, l'installe et red\xE9marre l'app. Le pr\xEAt est suspendu quelques secondes.", "tools.hint": "Laissez votre assistant d'AI chercher dans le code partag\xE9 et utiliser les mod\xE8les ouverts et les ordinateurs du r\xE9seau. Choisissez votre outil :", "tools.connect": "Connecter", "tools.connected": "Connect\xE9", "tools.copy": "Copier", "tools.copied": "Copi\xE9.", "tools.installed": "Install\xE9", "tools.not_found": "Introuvable sur cet ordinateur", "tools.done": "Termin\xE9. Red\xE9marrez {name} pour commencer \xE0 utiliser BitPull.", "tools.manual": "Pour l'ajouter \xE0 la main :", "tools.config_invalid": "Le fichier de param\xE8tres de {name} n'est pas un JSON valide, BitPull n'y a donc pas touch\xE9. Corrigez le fichier ou ajoutez BitPull \xE0 la main avec Copier.", "tip.tools.connect": "Ajoute BitPull aux param\xE8tres de {name} automatiquement. Une sauvegarde des param\xE8tres pr\xE9c\xE9dents est conserv\xE9e \xE0 c\xF4t\xE9.", "tip.tools.copy": "Copie la commande ou les param\xE8tres dans le presse-papiers, pour ajouter BitPull \xE0 {name} vous-m\xEAme.", "models.title": "Mod\xE8les d'IA \xE0 partager", "models.hint": "Mod\xE8les ouverts de tous types que cet ordinateur peut pr\xEAter. Seuls les mod\xE8les dont la licence permet de les servir \xE0 d'autres sont list\xE9s. Les mod\xE8les t\xE9l\xE9charg\xE9s sont propos\xE9s au r\xE9seau tant que le pr\xEAt est actif.", "models.engine.title": "Moteur images, voix et musique", "models.engine.help": "Lemonade (open source) : g\xE9n\xE9ration d'images, transcription vocale, synth\xE8se vocale, musique, reclassement et agrandissement d'images. Install\xE9 dans BitPull, sans droits administrateur.", "models.engine.install": "Installer le moteur", "models.engine.repair": "R\xE9installer le moteur", "models.engine.unsupported": "Indisponible sur cet ordinateur (n\xE9cessite Apple silicon, ou Windows/Linux x64)", "models.need_engine": "Installez d'abord le moteur", "models.not_here": "Indisponible sur cet ordinateur", "models.shared": "T\xE9l\xE9charg\xE9 \xB7 partag\xE9", "models.download": "T\xE9l\xE9charger ({size} Go)", "models.needs_ram": "N\xE9cessite environ {ram} Go de m\xE9moire : peut \xEAtre lent ici", "models.recommended": "Recommand\xE9", "models.license": "Licence", "models.ok.engine": "Installation du moteur\u2026", "task.chat": "Texte et code", "task.vision": "Images \u2192 texte", "task.ocr": "Documents (OCR)", "task.translate": "Traduction", "task.embed": "Embeddings (recherche)", "task.rerank": "Reclassement", "task.image": "G\xE9n\xE9ration d'images", "task.upscale": "Agrandissement d'images", "task.stt": "Voix \u2192 texte", "task.tts": "Texte \u2192 voix", "task.music": "Musique", "limits.title": "Vos limites pour les autres", "limits.hint": "Quantit\xE9 de travail d'IA que cet ordinateur fait pour les autres. Laissez vide pour aucune limite. Une fois une limite atteinte, vos mod\xE8les ne sont plus propos\xE9s jusqu'\xE0 la p\xE9riode suivante.", "limits.save": "Enregistrer les limites", "limits.requests": "Requ\xEAtes", "limits.tokens": "Tokens", "limits.used": "Utilis\xE9", "limits.day": "Par jour", "limits.week": "Par semaine", "limits.month": "Par mois", "limits.none": "aucune limite", "limits.usage": "{requests} requ\xEAtes \xB7 {tokens} tokens", "limits.saved": "Limites enregistr\xE9es.", "tip.models.engine": "T\xE9l\xE9charge dans BitPull le moteur open source Lemonade, pour que cet ordinateur puisse pr\xEAter des mod\xE8les d'image, de voix et de musique.", "tip.models.download": "T\xE9l\xE9charge {model} ({size} Go) sur cet ordinateur pour le proposer aux autres. Vous pourrez le supprimer plus tard.", "tip.limits.save": "Enregistre les limites quotidiennes, hebdomadaires et mensuelles du travail d'IA fait pour les autres.", "lend.visible": "\u2713 Le r\xE9seau voit cet ordinateur : {cpus} CPU, {ram} Go disponibles pour les autres.", "lend.invisible": "Le r\xE9seau ne voit pas encore le pr\xEAt : attendez jusqu'\xE0 une minute ; si cela persiste, v\xE9rifiez la connexion internet.", "lend.unusable": "\u26A0 Personne ne peut encore utiliser cet ordinateur : aucune t\xE2che ne peut s'ex\xE9cuter ici. {reason}", "lend.unusable.docker": "Docker ne passe pas la v\xE9rification d'isolation de BitPull : voir \xAB Configurer cet ordinateur \xBB.", "lend.unusable.off": "Les t\xE2ches en conteneur sont d\xE9sactiv\xE9es et aucun mod\xE8le d'IA n'est install\xE9 : activez \xAB T\xE2ches en conteneur \xBB ou t\xE9l\xE9chargez un mod\xE8le.", "lend.docker_login": "Docker ne peut pas t\xE9l\xE9charger d'images car sa connexion \xE0 Docker Hub n'est plus valide. Dans Docker Desktop, cliquez sur votre compte (en haut \xE0 droite) \u2192 Sign out, puis reconnectez-vous ou restez d\xE9connect\xE9. Appuyez ensuite sur V\xE9rifier \xE0 nouveau.", "lend.off_hint": "Le pr\xEAt est d\xE9sactiv\xE9 : cochez \xAB {enabled} \xBB dans \xAB {rules} \xBB ci-dessous et appuyez sur \xAB {save} \xBB. (Pause / Reprendre ne fait que suspendre un pr\xEAt d\xE9j\xE0 actif.)", "lend.low_memory": "Seulement {mb} Mo de m\xE9moire offerts : peu de t\xE2ches y tiennent. Dans \xAB {rules} \xBB, r\xE9glez \xAB {memory} \xBB par exemple \xE0 4096 (= 4 Go) et appuyez sur \xAB {save} \xBB.", "rules.awake": "Rester \xE9veill\xE9 pendant le pr\xEAt", "rules.awake.help": "Pendant qu'il ex\xE9cute une t\xE2che pour quelqu'un, cet ordinateur ne se met pas en veille (l'\xE9cran peut tout de m\xEAme s'\xE9teindre). Ensuite, veille comme d'habitude. \xC9vite les t\xE2ches interrompues.", "ask.wait": "Attendre jusqu'\xE0 (minutes)", "ask.wait.save": "Enregistrer", "ask.wait.saved": "Les r\xE9ponses seront attendues jusqu'\xE0 {n} minutes.", "ask.wait.range": "Saisissez un nombre de minutes entre 1 et 120.", "tip.wait": "Combien de temps attendre la r\xE9ponse des mod\xE8les d'IA du r\xE9seau. Les mod\xE8les sur le processeur de quelqu'un peuvent prendre des minutes. Votre IA peut aussi le modifier." }, hi: { "lang.name": "\u0939\u093F\u0928\u094D\u0926\u0940", "app.title": "BitPull", "locked.text": "\u0921\u0948\u0936\u092C\u094B\u0930\u094D\u0921 BitPull \u0910\u092A \u0938\u0947 \u0916\u094B\u0932\u0947\u0902: \u0909\u0938\u0915\u0947 \u0932\u093F\u0902\u0915 \u092E\u0947\u0902 \u090F\u0915\u094D\u0938\u0947\u0938 \u0915\u0941\u0902\u091C\u0940 \u0939\u094B\u0924\u0940 \u0939\u0948\u0964", "pill.online": "\u0911\u0928\u0932\u093E\u0907\u0928", "pill.offline": "\u0911\u092B\u093C\u0932\u093E\u0907\u0928", "pill.direct": "\u0938\u0940\u0927\u093E \u092A\u0924\u093E", "pill.relay_on": "\u0930\u093F\u0932\u0947 \u091C\u0941\u0921\u093C\u093E \u0939\u0948", "pill.relay_off": "\u0930\u093F\u0932\u0947 \u0928\u0939\u0940\u0902 \u091C\u0941\u0921\u093C\u093E", "pill.cached": "{n} \u0915\u0948\u0936 \u0915\u0940 \u0917\u0908 \u092A\u094D\u0930\u0924\u093F\u092F\u093E\u0901", "net.title": "\u0932\u093E\u0907\u0935 \u0928\u0947\u091F\u0935\u0930\u094D\u0915", "net.online": "{n} \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0911\u0928\u0932\u093E\u0907\u0928", "net.lending": "{n} \u0905\u092D\u0940 \u0909\u0927\u093E\u0930 \u0926\u0947 \u0930\u0939\u0947 \u0939\u0948\u0902", "net.cpu": "{n} CPU \u0915\u094B\u0930", "net.ram": "{n} GB RAM", "net.gpu": "{n} GPU", "net.models": "{n} AI \u092E\u0949\u0921\u0932", "net.jobs": "{n} \u091C\u0949\u092C \u091A\u0932 \u0930\u0939\u0947 \u0939\u0948\u0902", "credits.title": "\u0915\u094D\u0930\u0947\u0921\u093F\u091F \u092C\u0948\u0932\u0947\u0902\u0938", "credits.plan": "{plan} \u092A\u094D\u0932\u093E\u0928 \xB7 {n} \u0924\u0915 \u0928\u0940\u091A\u0947 \u091C\u093E \u0938\u0915\u0924\u093E \u0939\u0948", "plan.free": "\u092E\u0941\u092B\u093C\u094D\u0924", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "\u20AC5 \u0930\u093F\u091A\u093E\u0930\u094D\u091C", "buy.ok": "\u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0947\u091C \u0906\u092A\u0915\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0916\u0941\u0932 \u0917\u092F\u093E\u0964", "lend.title": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0909\u0927\u093E\u0930 \u0926\u0947\u0902", "lend.hint": "\u091C\u0949\u092C \u0905\u0932\u0917-\u0925\u0932\u0917 \u0938\u0948\u0902\u0921\u092C\u0949\u0915\u094D\u0938 \u092E\u0947\u0902 \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u091A\u0932\u0924\u0947 \u0939\u0948\u0902, \u0906\u092A\u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0915\u0947 \u092C\u093F\u0928\u093E\u0964 \u0906\u092A \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0915\u092E\u093E\u0924\u0947 \u0939\u0948\u0902\u0964", "lend.state.off": "\u092C\u0902\u0926", "lend.state.waiting": "\u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u092E\u0947\u0902", "lend.state.working": "\u0915\u093E\u092E \u0915\u0930 \u0930\u0939\u093E \u0939\u0948", "lend.reason.lending_off": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092C\u0902\u0926 \u0939\u0948", "lend.reason.paused": "\u0930\u0941\u0915\u093E \u0939\u0941\u0906", "lend.reason.outside_hours": "\u0906\u092A\u0915\u0947 \u0924\u092F \u0918\u0902\u091F\u094B\u0902 \u0938\u0947 \u092C\u093E\u0939\u0930", "lend.reason.on_battery": "\u092C\u0948\u091F\u0930\u0940 \u092A\u0930", "lend.reason.computer_in_use": "\u0906\u092A \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902", "lend.reason.no_jobs": "\u0915\u0924\u093E\u0930 \u092E\u0947\u0902 \u0915\u094B\u0908 \u091C\u0949\u092C \u0928\u0939\u0940\u0902", "lend.running": "{time} \u0938\u0947 \u090F\u0915 {kind} \u091C\u0949\u092C \u091A\u0932 \u0930\u0939\u093E \u0939\u0948", "lend.detail": "{reason} \xB7 {n} \u091C\u0949\u092C \u092A\u0942\u0930\u0947 \xB7 {cpus} CPU, {ram} GB \u0909\u092A\u0932\u092C\u094D\u0927", "lend.detail.sandbox": ", \u0938\u0948\u0902\u0921\u092C\u0949\u0915\u094D\u0938 {name}", "lend.detail.models": ", {n} \u092E\u0949\u0921\u0932", "lend.pause": "\u0930\u094B\u0915\u0947\u0902", "lend.resume": "\u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", "lend.paused_ok": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0930\u094B\u0915\u093E \u0917\u092F\u093E\u0964 \u091A\u0932 \u0930\u0939\u093E \u091C\u0949\u092C \u0926\u0942\u0938\u0930\u0947 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0938\u094C\u0902\u092A \u0926\u093F\u092F\u093E \u0917\u092F\u093E\u0964", "lend.resumed_ok": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0939\u0941\u0906\u0964", "setup.title": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0938\u0947\u091F \u0915\u0930\u0947\u0902", "setup.hint": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0915\u094D\u092F\u093E \u091A\u093E\u0939\u093F\u090F\u0964 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0914\u0930 \u0915\u0941\u091B \u0928\u0939\u0940\u0902 \u091A\u093E\u0939\u093F\u090F\u0964 \u0907\u0902\u0938\u094D\u091F\u0949\u0932\u0930 \u0906\u0927\u093F\u0915\u093E\u0930\u093F\u0915 \u0938\u093E\u0907\u091F\u094B\u0902 \u0938\u0947 \u0906\u0924\u0947 \u0939\u0948\u0902; \u0906\u092A\u0915\u093E \u0938\u093F\u0938\u094D\u091F\u092E \u092A\u0941\u0937\u094D\u091F\u093F \u092E\u093E\u0901\u0917\u0947\u0917\u093E\u0964", "setup.checking": "\u091C\u093E\u0901\u091A \u0939\u094B \u0930\u0939\u0940 \u0939\u0948\u2026", "setup.docker.help": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u091C\u0949\u092C \u0905\u0932\u0917-\u0925\u0932\u0917 \u0938\u0948\u0902\u0921\u092C\u0949\u0915\u094D\u0938 \u092E\u0947\u0902 \u091A\u0932\u093E\u0924\u093E \u0939\u0948\u0964 \u0915\u0902\u091F\u0947\u0928\u0930 \u091C\u0949\u092C \u0915\u0947 \u0932\u093F\u090F \u091C\u093C\u0930\u0942\u0930\u0940\u0964 \u0928\u093F\u091C\u0940 \u0909\u092A\u092F\u094B\u0917 \u0914\u0930 \u091B\u094B\u091F\u0947 \u0935\u094D\u092F\u0935\u0938\u093E\u092F\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u092E\u0941\u092B\u093C\u094D\u0924\u0964", "setup.docker.download": "Docker \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902", "setup.docker.start": "Docker \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", "setup.apple.title": "Apple Container (\u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915)", "setup.apple.help": "\u091C\u093C\u094D\u092F\u093E\u0926\u093E \u092E\u091C\u093C\u092C\u0942\u0924 \u0905\u0932\u0917\u093E\u0935: \u0939\u0930 \u091C\u0949\u092C \u0905\u092A\u0928\u0940 \u0935\u0930\u094D\u091A\u0941\u0905\u0932 \u092E\u0936\u0940\u0928 \u092E\u0947\u0902\u0964 \u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915; \u0936\u0941\u0930\u0941\u0906\u0924 \u0915\u0947 \u0932\u093F\u090F Docker \u0915\u093E\u092B\u093C\u0940 \u0939\u0948\u0964", "setup.apple.get": "Apple Container \u092A\u093E\u090F\u0901", "setup.ollama.help": "\u0913\u092A\u0928 AI \u092E\u0949\u0921\u0932 (Qwen, Llama, Mistral\u2026) \u091A\u0932\u093E\u0924\u093E \u0939\u0948\u0964 AI \u092E\u0949\u0921\u0932 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091C\u093C\u0930\u0942\u0930\u0940\u0964", "setup.ollama.download": "Ollama \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902", "setup.ollama.start": "Ollama \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", "setup.model.title": "AI \u092E\u0949\u0921\u0932", "setup.model.help": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u094B \u091C\u094B \u092E\u0949\u0921\u0932 \u0926\u0947\u0924\u093E \u0939\u0948\u0964 {ram} GB \u092E\u0947\u092E\u094B\u0930\u0940 \u0915\u0947 \u0932\u093F\u090F \u0938\u0941\u091D\u093E\u092F\u093E \u0917\u092F\u093E: {model}\u0964", "setup.model.download": "{model} \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902 ({size} GB)", "setup.model.none": "\u0905\u092D\u0940 \u0915\u094B\u0908 \u0928\u0939\u0940\u0902", "setup.model.need_ollama": "\u092A\u0939\u0932\u0947 Ollama \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0915\u0947 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", "setup.nvidia.title": "NVIDIA GPU \u0921\u094D\u0930\u093E\u0907\u0935\u0930 (\u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915)", "setup.nvidia.help": "\u0938\u093F\u0930\u094D\u092B\u093C \u0924\u092C, \u091C\u092C \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092E\u0947\u0902 NVIDIA \u0917\u094D\u0930\u093E\u092B\u093C\u093F\u0915\u094D\u0938 \u0915\u093E\u0930\u094D\u0921 \u0939\u0948 \u091C\u093F\u0938\u0947 \u0906\u092A \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u091A\u093E\u0939\u0924\u0947 \u0939\u0948\u0902\u0964", "setup.nvidia.get": "NVIDIA \u0921\u094D\u0930\u093E\u0907\u0935\u0930 \u092A\u093E\u090F\u0901", "setup.status.running": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948 \u0914\u0930 \u091A\u0932 \u0930\u0939\u093E \u0939\u0948", "setup.status.installed": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948", "setup.status.stopped": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948, \u091A\u0932 \u0928\u0939\u0940\u0902 \u0930\u0939\u093E", "setup.status.missing": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0928\u0939\u0940\u0902 \u0939\u0948", "setup.status.found": "\u092E\u093F\u0932\u093E", "setup.status.not_found": "\u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E", "setup.terminal": "\u091F\u0930\u094D\u092E\u093F\u0928\u0932 \u092E\u0947\u0902 \u091A\u0932\u093E\u090F\u0901:", "setup.done": "\u0939\u094B \u0917\u092F\u093E", "setup.opened": "\u0939\u094B \u0917\u092F\u093E: {file} \u0916\u094B\u0932\u0940 \u0917\u0908, \u0909\u0938\u0915\u0947 \u091A\u0930\u0923\u094B\u0902 \u0915\u093E \u092A\u093E\u0932\u0928 \u0915\u0930\u0947\u0902", "setup.recheck": "\u092B\u093F\u0930 \u091C\u093E\u0901\u091A\u0947\u0902", "setup.ok.download": "\u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0936\u0941\u0930\u0942 \u0939\u0941\u0906\u0964 \u092A\u0942\u0930\u093E \u0939\u094B\u0928\u0947 \u092A\u0930 \u0907\u0902\u0938\u094D\u091F\u0949\u0932\u0930 \u0905\u092A\u0928\u0947 \u0906\u092A \u0916\u0941\u0932\u0947\u0917\u093E: \u0909\u0938\u0915\u0947 \u091A\u0930\u0923\u094B\u0902 \u0915\u093E \u092A\u093E\u0932\u0928 \u0915\u0930\u0947\u0902\u0964", "setup.ok.start": "\u0936\u0941\u0930\u0942 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026 \u0907\u0938\u092E\u0947\u0902 \u090F\u0915 \u092E\u093F\u0928\u091F \u0924\u0915 \u0932\u0917 \u0938\u0915\u0924\u093E \u0939\u0948\u0964 \u092F\u0939 \u0938\u0942\u091A\u0940 \u0905\u092A\u0928\u0947 \u0906\u092A \u0905\u092A\u0921\u0947\u091F \u0939\u094B\u0924\u0940 \u0939\u0948\u0964", "setup.ok.pull": "\u092E\u0949\u0921\u0932 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0936\u0941\u0930\u0942 \u0939\u0941\u0906\u0964 \u092A\u094D\u0930\u0917\u0924\u093F \u090A\u092A\u0930 \u0926\u093F\u0916 \u0930\u0939\u0940 \u0939\u0948\u0964", "setup.ok.page": "\u092A\u0947\u091C \u0906\u092A\u0915\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0916\u0941\u0932 \u0917\u092F\u093E\u0964", "setup.ok.recheck": "\u092B\u093F\u0930 \u0938\u0947 \u091C\u093E\u0901\u091A \u0932\u0940 \u0917\u0908\u0964", "rules.title": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0928\u093F\u092F\u092E", "rules.enabled": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u091A\u093E\u0932\u0942", "rules.enabled.help": "\u092E\u0941\u0916\u094D\u092F \u0938\u094D\u0935\u093F\u091A\u0964 \u092C\u0902\u0926 \u0939\u094B\u0928\u0947 \u092A\u0930 \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u092D\u0940 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u091C\u0949\u092C \u0928\u0939\u0940\u0902 \u091A\u0932\u093E\u0924\u093E\u0964 \u0906\u092A \u092B\u093F\u0930 \u092D\u0940 \u0916\u0941\u0926 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", "rules.cpus": "\u0905\u0927\u093F\u0915\u0924\u092E CPU", "rules.cpus.help": "\u090F\u0915 \u091C\u0949\u092C \u0905\u0927\u093F\u0915\u0924\u092E \u0915\u093F\u0924\u0928\u0947 \u092A\u094D\u0930\u094B\u0938\u0947\u0938\u0930 \u0915\u094B\u0930 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930 \u0938\u0915\u0924\u093E \u0939\u0948\u0964 \u0909\u0926\u093E\u0939\u0930\u0923: 8-\u0915\u094B\u0930 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 2 \u0930\u0916\u0928\u0947 \u0938\u0947 \u0906\u092A\u0915\u0947 \u0932\u093F\u090F 6 \u0915\u094B\u0930 \u0916\u093E\u0932\u0940 \u0930\u0939\u0924\u0947 \u0939\u0948\u0902\u0964", "rules.memory": "\u0905\u0927\u093F\u0915\u0924\u092E \u092E\u0947\u092E\u094B\u0930\u0940 (MB)", "rules.memory.help": "\u090F\u0915 \u091C\u0949\u092C \u0915\u093F\u0924\u0928\u0940 RAM \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930 \u0938\u0915\u0924\u093E \u0939\u0948, \u092E\u0947\u0917\u093E\u092C\u093E\u0907\u091F \u092E\u0947\u0902 (1024 MB = 1 GB)\u0964 BitPull \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u0940 \u0906\u0927\u0940 \u092E\u0947\u092E\u094B\u0930\u0940 \u0938\u0947 \u091C\u093C\u094D\u092F\u093E\u0926\u093E \u0915\u092D\u0940 \u0928\u0939\u0940\u0902 \u0926\u0947\u0924\u093E\u0964", "rules.gpu": "GPU", "rules.gpu.none": "\u0915\u094B\u0908 \u0928\u0939\u0940\u0902", "rules.gpu.consumer": "\u0938\u093E\u092E\u093E\u0928\u094D\u092F (8\u201312 GB)", "rules.gpu.high": "\u0939\u093E\u0908-\u090F\u0902\u0921 (16\u201324 GB)", "rules.gpu.datacenter": "\u0921\u0947\u091F\u093E \u0938\u0947\u0902\u091F\u0930 (40 GB+)", "rules.gpu.help": '\u0906\u092A \u091C\u094B \u0917\u094D\u0930\u093E\u092B\u093C\u093F\u0915\u094D\u0938 \u0915\u093E\u0930\u094D\u0921 \u0909\u0927\u093E\u0930 \u0926\u0947\u0924\u0947 \u0939\u0948\u0902, \u0935\u0940\u0921\u093F\u092F\u094B \u092E\u0947\u092E\u094B\u0930\u0940 \u0915\u0947 \u0905\u0928\u0941\u0938\u093E\u0930\u0964 \u0905\u0917\u0930 \u0905\u0932\u0917 GPU \u0928\u0939\u0940\u0902 \u0939\u0948 \u092F\u093E \u0909\u0927\u093E\u0930 \u0928\u0939\u0940\u0902 \u0926\u0947\u0928\u093E \u091A\u093E\u0939\u0924\u0947, \u0924\u094B "\u0915\u094B\u0908 \u0928\u0939\u0940\u0902" \u0930\u0939\u0928\u0947 \u0926\u0947\u0902\u0964 GPU \u0938\u092C\u0938\u0947 \u091C\u093C\u094D\u092F\u093E\u0926\u093E \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0915\u092E\u093E\u0924\u093E \u0939\u0948\u0964', "rules.containers": "\u0915\u0902\u091F\u0947\u0928\u0930 \u091C\u0949\u092C", "rules.containers.help": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u092C\u093F\u0932\u094D\u0921, \u091F\u0947\u0938\u094D\u091F \u0914\u0930 \u0938\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F \u0910\u0938\u0947 \u0938\u0948\u0902\u0921\u092C\u0949\u0915\u094D\u0938 \u092E\u0947\u0902 \u091A\u0932\u093E\u090F\u0901 \u091C\u093F\u0938\u092E\u0947\u0902 \u0907\u0902\u091F\u0930\u0928\u0947\u091F \u0914\u0930 \u0906\u092A\u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 Docker (\u092F\u093E Apple Container) \u091C\u093C\u0930\u0942\u0930\u0940: \u201C\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0938\u0947\u091F \u0915\u0930\u0947\u0902\u201D \u0926\u0947\u0916\u0947\u0902\u0964", "rules.models": "\u0913\u092A\u0928 \u092E\u0949\u0921\u0932 (Ollama)", "rules.models.help": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 Ollama \u092E\u0947\u0902 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0913\u092A\u0928 \u092E\u0949\u0921\u0932 \u0938\u0947 AI \u0905\u0928\u0941\u0930\u094B\u0927\u094B\u0902 \u0915\u093E \u091C\u0935\u093E\u092C \u0926\u0947\u0902\u0964 Ollama \u0914\u0930 \u0915\u092E \u0938\u0947 \u0915\u092E \u090F\u0915 \u092E\u0949\u0921\u0932 \u091C\u093C\u0930\u0942\u0930\u0940\u0964", "rules.idle": "\u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0924\u0928\u0947 \u092E\u093F\u0928\u091F \u0928\u093F\u0937\u094D\u0915\u094D\u0930\u093F\u092F \u0930\u0939\u0928\u0947 \u0915\u0947 \u092C\u093E\u0926", "rules.idle.help": "\u0938\u093F\u0930\u094D\u092B\u093C \u0924\u092C \u0909\u0927\u093E\u0930 \u0926\u0947\u0902 \u091C\u092C \u0906\u092A\u0928\u0947 \u0907\u0924\u0928\u0947 \u092E\u093F\u0928\u091F \u0924\u0915 \u0915\u0940\u092C\u094B\u0930\u094D\u0921 \u092F\u093E \u092E\u093E\u0909\u0938 \u0928 \u091B\u0941\u0906 \u0939\u094B\u0964 0 = \u0915\u093E\u092E \u0915\u0930\u0924\u0947 \u0938\u092E\u092F \u092D\u0940 \u0909\u0927\u093E\u0930 \u0926\u0947\u0902\u0964", "rules.ac": "\u0938\u093F\u0930\u094D\u092B\u093C \u091A\u093E\u0930\u094D\u091C\u0930 \u0932\u0917\u0947 \u0939\u094B\u0928\u0947 \u092A\u0930", "rules.ac.help": "\u0932\u0948\u092A\u091F\u0949\u092A \u092A\u0930, \u092C\u0948\u091F\u0930\u0940 \u092A\u0930 \u091A\u0932\u0924\u0947 \u0938\u092E\u092F \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092C\u0902\u0926 \u0915\u0930\u0947\u0902, \u0924\u093E\u0915\u093F \u092C\u0948\u091F\u0930\u0940 \u0916\u0924\u094D\u092E \u0928 \u0939\u094B\u0964", "rules.hours": "\u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0938 \u0918\u0902\u091F\u0947 \u0938\u0947 / \u0924\u0915 (\u0916\u093E\u0932\u0940 = \u0939\u092E\u0947\u0936\u093E)", "rules.hours.help": "\u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0938 \u0938\u092E\u092F \u092E\u0947\u0902 \u0909\u0927\u093E\u0930 \u0926\u0947\u0902, 24-\u0918\u0902\u091F\u0947 \u0915\u0947 \u092B\u093C\u0949\u0930\u094D\u092E\u0948\u091F \u092E\u0947\u0902\u0964 \u0909\u0926\u093E\u0939\u0930\u0923: 22 \u0914\u0930 8 = \u0930\u093E\u0924 10 \u092C\u091C\u0947 \u0938\u0947 \u0938\u0941\u092C\u0939 8 \u092C\u091C\u0947 \u0924\u0915\u0964 \u0915\u093F\u0938\u0940 \u092D\u0940 \u0938\u092E\u092F \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u094B\u0928\u094B\u0902 \u0916\u093E\u0932\u0940 \u091B\u094B\u0921\u093C\u0947\u0902\u0964", "rules.cache": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0930\u093F\u092A\u094B \u0915\u0940 \u0915\u0948\u0936 \u092A\u094D\u0930\u0924\u093F\u092F\u093E\u0901", "rules.cache.help": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0926\u0942\u0938\u0930\u0947 \u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E\u0913\u0902 \u0915\u0947 \u0915\u093F\u0924\u0928\u0947 \u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 \u0930\u093F\u092A\u094B \u0915\u0940 \u092A\u094D\u0930\u0924\u093F \u0930\u0916\u0924\u093E \u0939\u0948, \u0924\u093E\u0915\u093F \u0909\u0928\u0915\u0947 \u0932\u0947\u0916\u0915 \u0911\u092B\u093C\u0932\u093E\u0907\u0928 \u0939\u094B\u0928\u0947 \u092A\u0930 \u092D\u0940 \u0935\u0947 \u0909\u092A\u0932\u092C\u094D\u0927 \u0930\u0939\u0947\u0902\u0964 \u0925\u094B\u0921\u093C\u0940 \u0921\u093F\u0938\u094D\u0915 \u091C\u0917\u0939 \u0932\u0947\u0924\u093E \u0939\u0948 \u0914\u0930 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0915\u092E\u093E\u0924\u093E \u0939\u0948\u0964 0 = \u0915\u094B\u0908 \u0928\u0939\u0940\u0902\u0964", "rules.save": "\u0928\u093F\u092F\u092E \u0938\u0939\u0947\u091C\u0947\u0902", "rules.saved": "\u0928\u093F\u092F\u092E \u0938\u0939\u0947\u091C\u0947 \u0917\u090F\u0964 \u0915\u0941\u091B \u0938\u0947\u0915\u0902\u0921 \u092E\u0947\u0902 \u0932\u093E\u0917\u0942 \u0939\u094B\u0902\u0917\u0947\u0964", "rules.hours_both": "\u0926\u094B\u0928\u094B\u0902 \u0918\u0902\u091F\u0947 \u092D\u0930\u0947\u0902, \u092F\u093E \u0915\u093F\u0938\u0940 \u092D\u0940 \u0938\u092E\u092F \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u094B\u0928\u094B\u0902 \u0916\u093E\u0932\u0940 \u091B\u094B\u0921\u093C\u0947\u0902\u0964", "folders.title": "\u0905\u0927\u093F\u0915\u0943\u0924 \u092B\u093C\u094B\u0932\u094D\u0921\u0930", "folders.hint": "BitPull \u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0928 \u092B\u093C\u094B\u0932\u094D\u0921\u0930\u094B\u0902 \u0915\u094B \u092A\u0922\u093C\u0924\u093E \u0939\u0948\u0964 \u0915\u093F\u0938\u0940 \u0915\u094B \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u092A\u0942\u0930\u0940 bitpull.json \u091A\u093E\u0939\u093F\u090F\u0964", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u0905\u0927\u093F\u0915\u0943\u0924 \u0915\u0930\u0947\u0902", "folders.none": "\u0915\u094B\u0908 \u0905\u0927\u093F\u0915\u0943\u0924 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0928\u0939\u0940\u0902\u0964", "folders.draft": "\u0921\u094D\u0930\u093E\u092B\u093C\u094D\u091F", "folders.publish": "\u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0915\u0930\u0947\u0902", "folders.remove": "\u0939\u091F\u093E\u090F\u0901", "folders.need_path": "\u092A\u0939\u0932\u0947 \u0915\u093F\u0938\u0940 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0915\u093E \u092A\u0942\u0930\u093E \u092A\u0925 \u0932\u093F\u0916\u0947\u0902, \u091C\u0948\u0938\u0947 /Users/you/projects/my-library\u0964", "folders.added": "\u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0905\u0927\u093F\u0915\u0943\u0924 \u0915\u093F\u092F\u093E \u0917\u092F\u093E\u0964", "folders.removed": "\u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0939\u091F\u093E\u092F\u093E \u0917\u092F\u093E\u0964 BitPull \u0905\u092C \u0907\u0938\u0947 \u0928\u0939\u0940\u0902 \u092A\u0922\u093C\u0924\u093E\u0964", "folders.drafted": '\u0921\u094D\u0930\u093E\u092B\u093C\u094D\u091F \u0924\u0948\u092F\u093E\u0930: {n} \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092E\u093F\u0932\u0940\u0902\u0964 \u0905\u092A\u0928\u0947 AI \u0938\u0947 \u0938\u093E\u0930\u093E\u0902\u0936 \u0914\u0930 \u0935\u093F\u0935\u0930\u0923 \u092D\u0930\u0935\u093E\u090F\u0901 (prepare_publish \u091F\u0942\u0932), \u092B\u093F\u0930 "\u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0915\u0930\u0947\u0902" \u0926\u092C\u093E\u090F\u0901\u0964', "folders.published": '"{name}" {n} \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u0915\u0947 \u0938\u093E\u0925 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0939\u0941\u0906\u0964', "folders.secrets_in": "\u092F\u0939\u093E\u0901 \u092E\u093F\u0932\u093E: {where}", "folders.line": "{file} \u092A\u0902\u0915\u094D\u0924\u093F {line}", "repos.title": "\u0906\u092A\u0915\u0947 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0930\u093F\u092A\u094B", "repos.hint": "\u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092C\u0926\u0932\u0928\u0947 \u092A\u0930 \u092F\u0947 \u0905\u092A\u0928\u0947 \u0906\u092A \u0905\u092A\u0921\u0947\u091F \u0939\u094B\u0924\u0947 \u0939\u0948\u0902 (\u0939\u0930 5 \u092E\u093F\u0928\u091F \u092E\u0947\u0902)\u0964", "repos.none": "\u0915\u094B\u0908 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0930\u093F\u092A\u094B \u0928\u0939\u0940\u0902\u0964", "repos.withdraw": "\u0935\u093E\u092A\u0938 \u0932\u0947\u0902", "repos.withdrawn": "\u0930\u093F\u092A\u094B \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0938\u0947 \u0935\u093E\u092A\u0938 \u0932\u093F\u092F\u093E \u0917\u092F\u093E\u0964", "ask.title": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u092A\u0930 \u0913\u092A\u0928 \u092E\u0949\u0921\u0932", "ask.offers": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0926\u0947\u0924\u093E \u0939\u0948: {models}\u0964", "ask.offers_none": "\u0915\u094B\u0908 \u092E\u0949\u0921\u0932 \u0928\u0939\u0940\u0902 (\u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F Ollama \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902)", "ask.placeholder": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u092A\u0930 \u0915\u093F\u0938\u0940 \u0913\u092A\u0928 \u092E\u0949\u0921\u0932 \u0938\u0947 \u092A\u0942\u091B\u0947\u0902\u2026", "ask.small": "\u091B\u094B\u091F\u093E", "ask.medium": "\u092E\u0927\u094D\u092F\u092E", "ask.large": "\u092C\u0921\u093C\u093E", "ask.button": "\u092A\u0942\u091B\u0947\u0902", "ask.empty": "\u092A\u0939\u0932\u0947 \u090F\u0915 \u0938\u0935\u093E\u0932 \u0932\u093F\u0916\u0947\u0902\u0964", "ask.waiting": "\u092E\u0949\u0921\u0932 \u0935\u093E\u0932\u093E \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0916\u094B\u091C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026 \u0907\u0938\u092E\u0947\u0902 \u090F\u0915 \u092E\u093F\u0928\u091F \u0924\u0915 \u0932\u0917 \u0938\u0915\u0924\u093E \u0939\u0948\u0964", "ask.credits": "{n} \u0915\u094D\u0930\u0947\u0921\u093F\u091F", "tools.title": "\u0905\u092A\u0928\u0947 \u091F\u0942\u0932 \u091C\u094B\u0921\u093C\u0947\u0902", "tools.mcp": "Claude Code \u0914\u0930 MCP \u0915\u094D\u0932\u093E\u0907\u0902\u091F \u0915\u0947 \u0932\u093F\u090F, \u091F\u0930\u094D\u092E\u093F\u0928\u0932 \u092E\u0947\u0902 \u091A\u0932\u093E\u090F\u0901:", "tools.openai": "OpenAI-\u0938\u0902\u0917\u0924 \u091F\u0942\u0932 \u0915\u0947 \u0932\u093F\u090F: \u092C\u0947\u0938 URL", "tools.key": "API \u0915\u0941\u0902\u091C\u0940", "tools.show": "\u0926\u093F\u0916\u093E\u090F\u0901", "jobs.title": "\u0906\u092A\u0915\u0947 \u0939\u093E\u0932 \u0915\u0947 \u091C\u0949\u092C", "jobs.none": "\u0915\u094B\u0908 \u091C\u0949\u092C \u0928\u0939\u0940\u0902\u0964", "jobs.model": "\u092E\u0949\u0921\u0932", "jobs.container": "\u0915\u0902\u091F\u0947\u0928\u0930", "jobs.status.queued": "\u0915\u0924\u093E\u0930 \u092E\u0947\u0902", "jobs.status.running": "\u091A\u0932 \u0930\u0939\u093E \u0939\u0948", "jobs.status.done": "\u092A\u0942\u0930\u093E", "jobs.status.failed": "\u0935\u093F\u092B\u0932", "jobs.status.canceled": "\u0930\u0926\u094D\u0926", "jobs.cost": "{n} \u0915\u094D\u0930\u0947\u0921\u093F\u091F", working: "\u0915\u093E\u092E \u091A\u0932 \u0930\u0939\u093E \u0939\u0948\u2026", "err.agent_down": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 BitPull \u091C\u0935\u093E\u092C \u0928\u0939\u0940\u0902 \u0926\u0947 \u0930\u0939\u093E\u0964 \u092F\u0939 30 \u0938\u0947\u0915\u0902\u0921 \u092E\u0947\u0902 \u0905\u092A\u0928\u0947 \u0906\u092A \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0939\u094B\u0924\u093E \u0939\u0948: \u0925\u094B\u0921\u093C\u0940 \u0926\u0947\u0930 \u092E\u0947\u0902 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "err.server": "BitPull \u0938\u0930\u094D\u0935\u0930 \u0938\u0947 \u0938\u0902\u092A\u0930\u094D\u0915 \u0928\u0939\u0940\u0902 \u0939\u094B \u092A\u093E \u0930\u0939\u093E\u0964 \u0905\u092A\u0928\u093E \u0907\u0902\u091F\u0930\u0928\u0947\u091F \u0915\u0928\u0947\u0915\u094D\u0936\u0928 \u091C\u093E\u0901\u091A\u0947\u0902 \u0914\u0930 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "err.session": "\u0907\u0938 \u0921\u0948\u0936\u092C\u094B\u0930\u094D\u0921 \u0915\u093E \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u0939\u094B \u0917\u092F\u093E\u0964 \u0907\u0938\u0947 BitPull \u0910\u092A \u0938\u0947 \u092B\u093F\u0930 \u0916\u094B\u0932\u0947\u0902\u0964", "err.billing": "\u092D\u0941\u0917\u0924\u093E\u0928 \u0905\u092D\u0940 \u0938\u0915\u094D\u0930\u093F\u092F \u0928\u0939\u0940\u0902 \u0939\u0948\u0902\u0964", "err.no_folder": "\u092F\u0939 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u092E\u094C\u091C\u0942\u0926 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u092A\u0925 \u091C\u093E\u0901\u091A\u0947\u0902\u0964", "err.not_folder": "\u092F\u0939 \u092A\u0925 \u090F\u0915 \u092B\u093C\u093E\u0907\u0932 \u0939\u0948, \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0928\u0939\u0940\u0902\u0964", "err.credits": "\u092A\u0930\u094D\u092F\u093E\u092A\u094D\u0924 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0928\u0939\u0940\u0902 \u0939\u0948\u0902\u0964", "err.device": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0905\u092D\u0940 \u091C\u0941\u0921\u093C\u093E \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 BitPull \u0910\u092A \u0916\u0941\u0932\u093E \u0930\u0916\u0947\u0902 \u0914\u0930 \u090F\u0915 \u092E\u093F\u0928\u091F \u092C\u093E\u0926 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "err.no_model": "\u0905\u092D\u0940 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u092A\u0930 \u0915\u094B\u0908 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 AI \u092E\u0949\u0921\u0932 \u0928\u0939\u0940\u0902 \u0926\u0947 \u0930\u0939\u093E\u0964 \u092C\u093E\u0926 \u092E\u0947\u0902 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "err.invalid": "\u0915\u0941\u091B \u092E\u093E\u0928 \u092E\u093E\u0928\u094D\u092F \u0928\u0939\u0940\u0902 \u0939\u0948\u0902\u0964 \u092B\u093C\u0940\u0932\u094D\u0921 \u091C\u093E\u0901\u091A\u0947\u0902 \u0914\u0930 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "tip.lang": "\u0910\u092A \u0915\u0940 \u092D\u093E\u0937\u093E\u0964 \u0906\u092A\u0915\u0940 \u092A\u0938\u0902\u0926 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u092F\u093E\u0926 \u0930\u0916\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0964", "tip.buy.base": "Base \u092A\u094D\u0932\u093E\u0928 \u0915\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0947\u091C \u0916\u094B\u0932\u0924\u093E \u0939\u0948: \u20AC4.50 \u092A\u094D\u0930\u0924\u093F \u092E\u093E\u0939, \u0939\u0930 \u092E\u0939\u0940\u0928\u0947 80 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0915\u0947 \u0938\u093E\u0925\u0964 \u0906\u092A \u0915\u092D\u0940 \u092D\u0940 \u0930\u0926\u094D\u0926 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", "tip.buy.pro": "Pro \u092A\u094D\u0932\u093E\u0928 \u0915\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0947\u091C \u0916\u094B\u0932\u0924\u093E \u0939\u0948: \u20AC9.90 \u092A\u094D\u0930\u0924\u093F \u092E\u093E\u0939, \u0939\u0930 \u092E\u0939\u0940\u0928\u0947 200 \u0915\u094D\u0930\u0947\u0921\u093F\u091F, \u0938\u092C\u0938\u0947 \u090A\u0901\u091A\u0940 \u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E \u0914\u0930 \u0938\u092D\u0940 GPU \u0915\u0947 \u0938\u093E\u0925\u0964 \u0906\u092A \u0915\u092D\u0940 \u092D\u0940 \u0930\u0926\u094D\u0926 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", "tip.buy.recharge": "\u20AC5 \u092E\u0947\u0902 \u090F\u0915 \u092C\u093E\u0930 80 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0916\u0930\u0940\u0926\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0947\u091C \u0916\u094B\u0932\u0924\u093E \u0939\u0948\u0964 \u092F\u0947 \u0915\u092D\u0940 \u0938\u092E\u093E\u092A\u094D\u0924 \u0928\u0939\u0940\u0902 \u0939\u094B\u0924\u0947\u0964", "tip.pause": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0905\u092D\u0940 \u0930\u094B\u0915 \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0907\u0938 \u0938\u092E\u092F \u091A\u0932 \u0930\u0939\u093E \u091C\u0949\u092C \u0926\u0942\u0938\u0930\u0947 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0938\u094C\u0902\u092A \u0926\u093F\u092F\u093E \u091C\u093E\u0924\u093E \u0939\u0948\u0964 \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u094B\u092C\u093E\u0930\u093E \u0926\u092C\u093E\u090F\u0901\u0964", "tip.resume": "\u0906\u092A\u0915\u0947 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0928\u093F\u092F\u092E\u094B\u0902 \u0915\u0947 \u0905\u0928\u0941\u0938\u093E\u0930 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0924\u093E \u0939\u0948\u0964", "tip.rules.save": "\u090A\u092A\u0930 \u0926\u093F\u090F \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0928\u093F\u092F\u092E \u0938\u0939\u0947\u091C\u0924\u093E \u0939\u0948\u0964 \u092F\u0947 \u0915\u0941\u091B \u0939\u0940 \u0938\u0947\u0915\u0902\u0921 \u092E\u0947\u0902 \u0932\u093E\u0917\u0942 \u0939\u094B\u0924\u0947 \u0939\u0948\u0902; \u091C\u092C \u0924\u0915 \u0906\u092A \u0907\u0938\u0947 \u0928\u0939\u0940\u0902 \u0926\u092C\u093E\u0924\u0947, \u0915\u0941\u091B \u0928\u0939\u0940\u0902 \u092C\u0926\u0932\u0924\u093E\u0964", "tip.folder.add": "BitPull \u0915\u094B \u092C\u093E\u0908\u0902 \u0913\u0930 \u0932\u093F\u0916\u093E \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u092A\u0922\u093C\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0905\u0928\u0941\u092E\u0924\u093F \u0935\u093E\u0932\u0947 \u092B\u093C\u094B\u0932\u094D\u0921\u0930\u094B\u0902 \u0938\u0947 \u092C\u093E\u0939\u0930 \u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u0915\u092D\u0940 \u092A\u0922\u093C\u0940 \u092F\u093E \u0938\u093E\u091D\u093E \u0928\u0939\u0940\u0902 \u0915\u0940 \u091C\u093E\u0924\u0940\u0902\u0964", "tip.folder.draft": "\u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u092E\u0947\u0902 bitpull.json \u092C\u0928\u093E\u0924\u093E \u0939\u0948: \u0909\u0938\u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u0915\u0940 \u0938\u0942\u091A\u0940, \u0916\u093E\u0932\u0940 \u0935\u093F\u0935\u0930\u0923\u094B\u0902 \u0915\u0947 \u0938\u093E\u0925 \u091C\u093F\u0928\u094D\u0939\u0947\u0902 \u0906\u092A\u0915\u093E AI \u092D\u0930\u0947\u0917\u093E\u0964 \u0905\u092D\u0940 \u0915\u0941\u091B \u092D\u0940 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0928\u0939\u0940\u0902 \u0939\u094B\u0924\u093E\u0964", "tip.folder.publish": "\u0907\u0938 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0915\u094B \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u092A\u0930 \u090F\u0915 \u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 \u0930\u093F\u092A\u094B \u0915\u0947 \u0930\u0942\u092A \u092E\u0947\u0902 \u0938\u093E\u091D\u093E \u0915\u0930\u0924\u093E \u0939\u0948, \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u0947 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0915\u0947 \u0938\u093E\u0925\u0964 \u0905\u0917\u0930 \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u092E\u0947\u0902 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u092F\u093E \u092A\u093E\u0938\u0935\u0930\u094D\u0921 \u092E\u093F\u0932\u0924\u0947 \u0939\u0948\u0902, \u0924\u094B \u092A\u094D\u0930\u0915\u093E\u0936\u0928 \u0930\u094B\u0915 \u0926\u093F\u092F\u093E \u091C\u093E\u0924\u093E \u0939\u0948\u0964", "tip.folder.remove": "BitPull \u0907\u0938 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0915\u094B \u092A\u0922\u093C\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0907\u0938\u0938\u0947 \u092A\u0939\u0932\u0947 \u0938\u0947 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0930\u093F\u092A\u094B \u0924\u092C \u0924\u0915 \u0911\u0928\u0932\u093E\u0907\u0928 \u0930\u0939\u0924\u0947 \u0939\u0948\u0902 \u091C\u092C \u0924\u0915 \u0906\u092A \u0909\u0928\u094D\u0939\u0947\u0902 \u0935\u093E\u092A\u0938 \u0928\u0939\u0940\u0902 \u0932\u0947\u0924\u0947\u0964", "tip.repo.withdraw": "\u0907\u0938 \u0930\u093F\u092A\u094B \u0915\u094B \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0938\u0947 \u0939\u091F\u093E \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0926\u0942\u0938\u0930\u0947 \u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0907\u0938\u0947 \u0905\u092C \u0928 \u0922\u0942\u0901\u0922 \u092A\u093E\u090F\u0901\u0917\u0947, \u0928 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930 \u092A\u093E\u090F\u0901\u0917\u0947\u0964 \u0906\u092A\u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u0906\u092A\u0915\u0947 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0939\u0940 \u0930\u0939\u0924\u0940 \u0939\u0948\u0902\u0964", "tip.ask": "\u0906\u092A\u0915\u093E \u0938\u0935\u093E\u0932 \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0930\u0942\u092A \u092E\u0947\u0902 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0915\u0947 \u0910\u0938\u0947 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u092D\u0947\u091C\u0924\u093E \u0939\u0948 \u091C\u094B \u090F\u0915 \u0913\u092A\u0928 AI \u092E\u0949\u0921\u0932 \u091A\u0932\u093E\u0924\u093E \u0939\u0948\u0964 \u0907\u0938\u092E\u0947\u0902 \u0915\u0941\u091B \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0932\u0917\u0924\u0947 \u0939\u0948\u0902\u0964", "tip.tier": "\u092E\u0949\u0921\u0932 \u0915\u093E \u0906\u0915\u093E\u0930: \u091B\u094B\u091F\u093E \u0924\u0947\u091C\u093C \u0914\u0930 \u0938\u0938\u094D\u0924\u093E \u0939\u0948, \u092C\u0921\u093C\u093E \u091C\u093C\u094D\u092F\u093E\u0926\u093E \u0938\u092E\u091D\u0926\u093E\u0930 \u0939\u0948 \u0914\u0930 \u091C\u093C\u094D\u092F\u093E\u0926\u093E \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0932\u0947\u0924\u093E \u0939\u0948\u0964", "tip.show_key": "\u0935\u0939 \u0915\u0941\u0902\u091C\u0940 \u0926\u093F\u0916\u093E\u0924\u093E \u0939\u0948 \u091C\u093F\u0938\u0938\u0947 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u0947 AI \u091F\u0942\u0932 BitPull \u0938\u0947 \u092C\u093E\u0924 \u0915\u0930\u0924\u0947 \u0939\u0948\u0902\u0964 \u0907\u0938\u0947 \u0915\u093F\u0938\u0940 \u0938\u0947 \u0938\u093E\u091D\u093E \u0928 \u0915\u0930\u0947\u0902\u0964", "tip.setup.download": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u0947 \u0932\u093F\u090F {name} \u0915\u093E \u0906\u0927\u093F\u0915\u093E\u0930\u093F\u0915 \u0907\u0902\u0938\u094D\u091F\u0949\u0932\u0930 \u0906\u092A\u0915\u0947 Downloads \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u092E\u0947\u0902 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0915\u0947 \u0916\u094B\u0932\u0924\u093E \u0939\u0948\u0964 \u092A\u0942\u0930\u093E \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0909\u0938\u0915\u0947 \u091A\u0930\u0923\u094B\u0902 \u0915\u093E \u092A\u093E\u0932\u0928 \u0915\u0930\u0947\u0902\u0964", "tip.setup.start": "{name} \u0936\u0941\u0930\u0942 \u0915\u0930\u0924\u093E \u0939\u0948, \u091C\u094B \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948 \u0932\u0947\u0915\u093F\u0928 \u091A\u0932 \u0928\u0939\u0940\u0902 \u0930\u0939\u093E\u0964", "tip.setup.pull": "AI \u092E\u0949\u0921\u0932 {model} ({size} GB) \u0915\u094B Ollama \u092E\u0947\u0902 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0924\u093E \u0939\u0948, \u0924\u093E\u0915\u093F \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0907\u0938\u0947 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u094B \u0926\u0947 \u0938\u0915\u0947\u0964", "tip.setup.open": "\u0906\u092A\u0915\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 {name} \u0915\u093E \u0906\u0927\u093F\u0915\u093E\u0930\u093F\u0915 \u092A\u0947\u091C \u0916\u094B\u0932\u0924\u093E \u0939\u0948\u0964", "tip.setup.recheck": "\u092B\u093F\u0930 \u0938\u0947 \u091C\u093E\u0901\u091A\u0924\u093E \u0939\u0948 \u0915\u093F \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0915\u094D\u092F\u093E \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948 \u0914\u0930 \u0915\u094D\u092F\u093E \u091A\u0932 \u0930\u0939\u093E \u0939\u0948\u0964", "update.title": "\u0910\u092A \u0905\u092A\u0921\u0947\u091F", "update.current": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u093F\u092F\u093E \u0917\u092F\u093E \u0938\u0902\u0938\u094D\u0915\u0930\u0923: {v}", "update.latest": "\u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923: {v}", "update.button": "\u0905\u092A\u0921\u0947\u091F \u091C\u093E\u0901\u091A\u0947\u0902", "update.install": "\u0938\u0902\u0938\u094D\u0915\u0930\u0923 {v} \u0905\u092D\u0940 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", "update.available": "\u0938\u0902\u0938\u094D\u0915\u0930\u0923 {v} \u0909\u092A\u0932\u092C\u094D\u0927 \u0939\u0948\u0964", "update.not_in_app": "\u0905\u092A\u0921\u0947\u091F BitPull \u0910\u092A \u0926\u094D\u0935\u093E\u0930\u093E \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u093F\u090F \u091C\u093E\u0924\u0947 \u0939\u0948\u0902\u0964 \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u092F\u0939 \u0921\u0948\u0936\u092C\u094B\u0930\u094D\u0921 \u0910\u092A \u0938\u0947 \u0916\u094B\u0932\u0947\u0902\u0964", "update.state.requested": "\u0910\u092A \u0938\u0947 \u091C\u093E\u0901\u091A\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u0939\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026", "update.state.checking": "\u0905\u092A\u0921\u0947\u091F \u091C\u093E\u0901\u091A\u0947 \u091C\u093E \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", "update.state.up_to_date": "\u0906\u092A\u0915\u0947 \u092A\u093E\u0938 \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0939\u0948\u0964", "update.state.installing": "\u0938\u0902\u0938\u094D\u0915\u0930\u0923 {v} \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0914\u0930 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026 \u0910\u092A \u0905\u092A\u0928\u0947-\u0906\u092A \u0930\u0940\u0938\u094D\u091F\u093E\u0930\u094D\u091F \u0939\u094B\u0917\u093E\u0964", "update.state.restarting": "\u0938\u0902\u0938\u094D\u0915\u0930\u0923 {v} \u0915\u0947 \u0938\u093E\u0925 \u0930\u0940\u0938\u094D\u091F\u093E\u0930\u094D\u091F \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", "update.state.error": "\u0905\u092A\u0921\u0947\u091F \u0928\u0939\u0940\u0902 \u0939\u094B \u0938\u0915\u093E: {msg}\u0964 \u092C\u093E\u0926 \u092E\u0947\u0902 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "tip.update": "\u091C\u093E\u0901\u091A\u0924\u093E \u0939\u0948 \u0915\u093F BitPull \u0915\u093E \u0928\u092F\u093E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0939\u0948 \u092F\u093E \u0928\u0939\u0940\u0902\u0964 \u0905\u0917\u0930 \u0939\u0948, \u0924\u094B \u0909\u0938\u0947 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0924\u093E \u0939\u0948, \u0909\u0938\u0915\u0947 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0915\u0940 \u091C\u093E\u0901\u091A \u0915\u0930\u0924\u093E \u0939\u0948, \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0924\u093E \u0939\u0948 \u0914\u0930 \u0910\u092A \u0915\u094B \u0930\u0940\u0938\u094D\u091F\u093E\u0930\u094D\u091F \u0915\u0930\u0924\u093E \u0939\u0948\u0964 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0915\u0941\u091B \u0938\u0947\u0915\u0902\u0921 \u0915\u0947 \u0932\u093F\u090F \u0930\u0941\u0915\u0924\u093E \u0939\u0948\u0964", "tools.hint": "\u0905\u092A\u0928\u0947 AI \u0938\u0939\u093E\u092F\u0915 \u0915\u094B \u0938\u093E\u091D\u093E \u0915\u094B\u0921 \u0916\u094B\u091C\u0928\u0947 \u0914\u0930 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0915\u0947 \u0913\u092A\u0928 \u092E\u0949\u0921\u0932 \u0914\u0930 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0928\u0947 \u0926\u0947\u0902\u0964 \u0905\u092A\u0928\u093E \u091F\u0942\u0932 \u091A\u0941\u0928\u0947\u0902:", "tools.connect": "\u091C\u094B\u0921\u093C\u0947\u0902", "tools.connected": "\u091C\u0941\u0921\u093C\u093E \u0939\u0941\u0906", "tools.copy": "\u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902", "tools.copied": "\u0915\u0949\u092A\u0940 \u0939\u094B \u0917\u092F\u093E\u0964", "tools.installed": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948", "tools.not_found": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E", "tools.done": "\u0939\u094B \u0917\u092F\u093E\u0964 BitPull \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0928\u093E \u0936\u0941\u0930\u0942 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F {name} \u0915\u094B \u0930\u0940\u0938\u094D\u091F\u093E\u0930\u094D\u091F \u0915\u0930\u0947\u0902\u0964", "tools.manual": "\u0907\u0938\u0947 \u0916\u0941\u0926 \u091C\u094B\u0921\u093C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F:", "tools.config_invalid": '{name} \u0915\u0940 \u0938\u0947\u091F\u093F\u0902\u0917 \u092B\u093C\u093E\u0907\u0932 \u092E\u093E\u0928\u094D\u092F JSON \u0928\u0939\u0940\u0902 \u0939\u0948, \u0907\u0938\u0932\u093F\u090F BitPull \u0928\u0947 \u0909\u0938\u0947 \u0928\u0939\u0940\u0902 \u091B\u0941\u0906\u0964 \u092B\u093C\u093E\u0907\u0932 \u0920\u0940\u0915 \u0915\u0930\u0947\u0902 \u092F\u093E "\u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902" \u0938\u0947 BitPull \u0915\u094B \u0916\u0941\u0926 \u091C\u094B\u0921\u093C\u0947\u0902\u0964', "tip.tools.connect": "BitPull \u0915\u094B \u0905\u092A\u0928\u0947-\u0906\u092A {name} \u0915\u0940 \u0938\u0947\u091F\u093F\u0902\u0917 \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u0924\u093E \u0939\u0948\u0964 \u092A\u093F\u091B\u0932\u0940 \u0938\u0947\u091F\u093F\u0902\u0917 \u0915\u093E \u092C\u0948\u0915\u0905\u092A \u0909\u0928\u094D\u0939\u0940\u0902 \u0915\u0947 \u092A\u093E\u0938 \u0930\u0916\u093E \u091C\u093E\u0924\u093E \u0939\u0948\u0964", "tip.tools.copy": "\u0915\u092E\u093E\u0902\u0921 \u092F\u093E \u0938\u0947\u091F\u093F\u0902\u0917 \u0915\u094B \u0915\u094D\u0932\u093F\u092A\u092C\u094B\u0930\u094D\u0921 \u092A\u0930 \u0915\u0949\u092A\u0940 \u0915\u0930\u0924\u093E \u0939\u0948, \u0924\u093E\u0915\u093F \u0906\u092A BitPull \u0915\u094B \u0916\u0941\u0926 {name} \u092E\u0947\u0902 \u091C\u094B\u0921\u093C \u0938\u0915\u0947\u0902\u0964", "models.title": "\u0938\u093E\u091D\u093E \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F AI \u092E\u0949\u0921\u0932", "models.hint": "\u0939\u0930 \u092A\u094D\u0930\u0915\u093E\u0930 \u0915\u0947 \u0916\u0941\u0932\u0947 \u092E\u0949\u0921\u0932 \u091C\u093F\u0928\u094D\u0939\u0947\u0902 \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0909\u0927\u093E\u0930 \u0926\u0947 \u0938\u0915\u0924\u093E \u0939\u0948\u0964 \u0915\u0947\u0935\u0932 \u0935\u0947 \u092E\u0949\u0921\u0932 \u0926\u093F\u0916\u093E\u090F \u0917\u090F \u0939\u0948\u0902 \u091C\u093F\u0928\u0915\u093E \u0932\u093E\u0907\u0938\u0947\u0902\u0938 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u094B \u0938\u0947\u0935\u093E \u0926\u0947\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u091A\u093E\u0932\u0942 \u0930\u0939\u0928\u0947 \u092A\u0930 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u093F\u090F \u0917\u090F \u092E\u0949\u0921\u0932 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0915\u094B \u0926\u093F\u090F \u091C\u093E\u0924\u0947 \u0939\u0948\u0902\u0964", "models.engine.title": "\u091B\u0935\u093F, \u0906\u0935\u093E\u091C\u093C \u0914\u0930 \u0938\u0902\u0917\u0940\u0924 \u0907\u0902\u091C\u0928", "models.engine.help": "Lemonade (\u0913\u092A\u0928 \u0938\u094B\u0930\u094D\u0938): \u091B\u0935\u093F \u0928\u093F\u0930\u094D\u092E\u093E\u0923, \u0906\u0935\u093E\u091C\u093C \u0938\u0947 \u091F\u0947\u0915\u094D\u0938\u094D\u091F, \u091F\u0947\u0915\u094D\u0938\u094D\u091F \u0938\u0947 \u0906\u0935\u093E\u091C\u093C, \u0938\u0902\u0917\u0940\u0924, \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u0915\u0940 \u0930\u0948\u0902\u0915\u093F\u0902\u0917 \u0914\u0930 \u091B\u0935\u093F \u092C\u0921\u093C\u093E \u0915\u0930\u0928\u093E\u0964 BitPull \u0915\u0947 \u0905\u0902\u0926\u0930 \u0907\u0902\u0938\u094D\u091F\u0949\u0932, \u090F\u0921\u092E\u093F\u0928 \u0905\u0927\u093F\u0915\u093E\u0930 \u0915\u0940 \u091C\u093C\u0930\u0942\u0930\u0924 \u0928\u0939\u0940\u0902\u0964", "models.engine.install": "\u0907\u0902\u091C\u0928 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", "models.engine.repair": "\u0907\u0902\u091C\u0928 \u092B\u093F\u0930 \u0938\u0947 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", "models.engine.unsupported": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902 (Apple silicon, \u092F\u093E Windows/Linux x64 \u091A\u093E\u0939\u093F\u090F)", "models.need_engine": "\u092A\u0939\u0932\u0947 \u0907\u0902\u091C\u0928 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", "models.not_here": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902", "models.shared": "\u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0939\u0941\u0906 \xB7 \u0938\u093E\u091D\u093E", "models.download": "\u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902 ({size} GB)", "models.needs_ram": "\u0932\u0917\u092D\u0917 {ram} GB \u092E\u0947\u092E\u094B\u0930\u0940 \u091A\u093E\u0939\u093F\u090F: \u092F\u0939\u093E\u0901 \u0927\u0940\u092E\u093E \u0939\u094B \u0938\u0915\u0924\u093E \u0939\u0948", "models.recommended": "\u0905\u0928\u0941\u0936\u0902\u0938\u093F\u0924", "models.license": "\u0932\u093E\u0907\u0938\u0947\u0902\u0938", "models.ok.engine": "\u0907\u0902\u091C\u0928 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", "task.chat": "\u091F\u0947\u0915\u094D\u0938\u094D\u091F \u0914\u0930 \u0915\u094B\u0921", "task.vision": "\u091B\u0935\u093F \u2192 \u091F\u0947\u0915\u094D\u0938\u094D\u091F", "task.ocr": "\u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C (OCR)", "task.translate": "\u0905\u0928\u0941\u0935\u093E\u0926", "task.embed": "\u090F\u092E\u094D\u092C\u0947\u0921\u093F\u0902\u0917 (\u0916\u094B\u091C)", "task.rerank": "\u0930\u0940\u0930\u0948\u0902\u0915\u093F\u0902\u0917", "task.image": "\u091B\u0935\u093F \u0928\u093F\u0930\u094D\u092E\u093E\u0923", "task.upscale": "\u091B\u0935\u093F \u092C\u0921\u093C\u093E \u0915\u0930\u0928\u093E", "task.stt": "\u0906\u0935\u093E\u091C\u093C \u0938\u0947 \u091F\u0947\u0915\u094D\u0938\u094D\u091F", "task.tts": "\u091F\u0947\u0915\u094D\u0938\u094D\u091F \u0938\u0947 \u0906\u0935\u093E\u091C\u093C", "task.music": "\u0938\u0902\u0917\u0940\u0924", "limits.title": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u0906\u092A\u0915\u0940 \u0938\u0940\u092E\u093E\u090F\u0901", "limits.hint": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u0915\u093F\u0924\u0928\u093E AI \u0915\u093E\u092E \u0915\u0930\u0924\u093E \u0939\u0948\u0964 \u0915\u094B\u0908 \u0938\u0940\u092E\u093E \u0928 \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0916\u093E\u0932\u0940 \u091B\u094B\u0921\u093C\u0947\u0902\u0964 \u0938\u0940\u092E\u093E \u092A\u0942\u0930\u0940 \u0939\u094B\u0928\u0947 \u092A\u0930 \u0905\u0917\u0932\u0940 \u0905\u0935\u0927\u093F \u0936\u0941\u0930\u0942 \u0939\u094B\u0928\u0947 \u0924\u0915 \u0906\u092A\u0915\u0947 \u092E\u0949\u0921\u0932 \u0928\u0939\u0940\u0902 \u0926\u093F\u090F \u091C\u093E\u0924\u0947\u0964", "limits.save": "\u0938\u0940\u092E\u093E\u090F\u0901 \u0938\u0939\u0947\u091C\u0947\u0902", "limits.requests": "\u0905\u0928\u0941\u0930\u094B\u0927", "limits.tokens": "\u091F\u094B\u0915\u0928", "limits.used": "\u0909\u092A\u092F\u094B\u0917", "limits.day": "\u092A\u094D\u0930\u0924\u093F\u0926\u093F\u0928", "limits.week": "\u092A\u094D\u0930\u0924\u093F \u0938\u092A\u094D\u0924\u093E\u0939", "limits.month": "\u092A\u094D\u0930\u0924\u093F \u092E\u093E\u0939", "limits.none": "\u0915\u094B\u0908 \u0938\u0940\u092E\u093E \u0928\u0939\u0940\u0902", "limits.usage": "{requests} \u0905\u0928\u0941\u0930\u094B\u0927 \xB7 {tokens} \u091F\u094B\u0915\u0928", "limits.saved": "\u0938\u0940\u092E\u093E\u090F\u0901 \u0938\u0939\u0947\u091C\u0940 \u0917\u0908\u0902\u0964", "tip.models.engine": "\u0913\u092A\u0928 \u0938\u094B\u0930\u094D\u0938 Lemonade \u0907\u0902\u091C\u0928 \u0915\u094B BitPull \u092E\u0947\u0902 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0924\u093E \u0939\u0948, \u0924\u093E\u0915\u093F \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u091B\u0935\u093F, \u0906\u0935\u093E\u091C\u093C \u0914\u0930 \u0938\u0902\u0917\u0940\u0924 \u092E\u0949\u0921\u0932 \u0909\u0927\u093E\u0930 \u0926\u0947 \u0938\u0915\u0947\u0964", "tip.models.download": "{model} ({size} GB) \u0915\u094B \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0924\u093E \u0939\u0948 \u0924\u093E\u0915\u093F \u0907\u0938\u0947 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u094B \u0926\u093F\u092F\u093E \u091C\u093E \u0938\u0915\u0947\u0964 \u0906\u092A \u0907\u0938\u0947 \u092C\u093E\u0926 \u092E\u0947\u0902 \u0939\u091F\u093E \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", "tip.limits.save": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F AI \u0915\u093E\u092E \u0915\u0940 \u0926\u0948\u0928\u093F\u0915, \u0938\u093E\u092A\u094D\u0924\u093E\u0939\u093F\u0915 \u0914\u0930 \u092E\u093E\u0938\u093F\u0915 \u0938\u0940\u092E\u093E\u090F\u0901 \u0938\u0939\u0947\u091C\u0924\u093E \u0939\u0948\u0964", "lend.visible": "\u2713 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0926\u0947\u0916 \u0930\u0939\u093E \u0939\u0948: \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F {cpus} CPU, {ram} GB \u0909\u092A\u0932\u092C\u094D\u0927\u0964", "lend.invisible": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0905\u092D\u0940 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0928\u0939\u0940\u0902 \u0926\u0947\u0916 \u0930\u0939\u093E: \u090F\u0915 \u092E\u093F\u0928\u091F \u0924\u0915 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u0915\u0930\u0947\u0902; \u0905\u0917\u0930 \u0910\u0938\u093E \u0939\u0940 \u0930\u0939\u0947 \u0924\u094B \u0907\u0902\u091F\u0930\u0928\u0947\u091F \u0915\u0928\u0947\u0915\u094D\u0936\u0928 \u091C\u093E\u0901\u091A\u0947\u0902\u0964", "lend.unusable": "\u26A0 \u0905\u092D\u0940 \u0915\u094B\u0908 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u093E \u0909\u092A\u092F\u094B\u0917 \u0928\u0939\u0940\u0902 \u0915\u0930 \u0938\u0915\u0924\u093E: \u092F\u0939\u093E\u0901 \u0915\u094B\u0908 \u0915\u093E\u092E \u0928\u0939\u0940\u0902 \u091A\u0932 \u0938\u0915\u0924\u093E\u0964 {reason}", "lend.unusable.docker": 'Docker, BitPull \u0915\u0940 \u0906\u0907\u0938\u094B\u0932\u0947\u0936\u0928 \u091C\u093E\u0901\u091A \u092A\u093E\u0938 \u0928\u0939\u0940\u0902 \u0915\u0930\u0924\u093E: "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0938\u0947\u091F \u0905\u092A \u0915\u0930\u0947\u0902" \u0926\u0947\u0916\u0947\u0902\u0964', "lend.unusable.off": '\u0915\u0902\u091F\u0947\u0928\u0930 \u0915\u093E\u092E \u092C\u0902\u0926 \u0939\u0948\u0902 \u0914\u0930 \u0915\u094B\u0908 AI \u092E\u0949\u0921\u0932 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0928\u0939\u0940\u0902 \u0939\u0948: "\u0915\u0902\u091F\u0947\u0928\u0930 \u0915\u093E\u092E" \u091A\u093E\u0932\u0942 \u0915\u0930\u0947\u0902 \u092F\u093E \u0915\u094B\u0908 \u092E\u0949\u0921\u0932 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902\u0964', "lend.docker_login": 'Docker \u0907\u092E\u0947\u091C \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0928\u0939\u0940\u0902 \u0915\u0930 \u092A\u093E \u0930\u0939\u093E \u0915\u094D\u092F\u094B\u0902\u0915\u093F \u0909\u0938\u0915\u093E Docker Hub \u0932\u0949\u0917\u093F\u0928 \u0905\u092C \u092E\u093E\u0928\u094D\u092F \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 Docker Desktop \u092E\u0947\u0902 \u0905\u092A\u0928\u0947 \u0916\u093E\u0924\u0947 (\u090A\u092A\u0930 \u0926\u093E\u0908\u0902 \u0913\u0930) \u2192 Sign out \u092A\u0930 \u0915\u094D\u0932\u093F\u0915 \u0915\u0930\u0947\u0902, \u092B\u093F\u0930 \u0926\u094B\u092C\u093E\u0930\u093E \u0932\u0949\u0917 \u0907\u0928 \u0915\u0930\u0947\u0902 \u092F\u093E \u0932\u0949\u0917 \u0906\u0909\u091F \u0939\u0940 \u0930\u0939\u0947\u0902\u0964 \u092B\u093F\u0930 "\u092B\u093F\u0930 \u0938\u0947 \u091C\u093E\u0901\u091A\u0947\u0902" \u0926\u092C\u093E\u090F\u0901\u0964', "lend.off_hint": '\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092C\u0902\u0926 \u0939\u0948: \u0928\u0940\u091A\u0947 "{rules}" \u092E\u0947\u0902 "{enabled}" \u092A\u0930 \u091F\u093F\u0915 \u0915\u0930\u0947\u0902 \u0914\u0930 "{save}" \u0926\u092C\u093E\u090F\u0901\u0964 (\u0930\u094B\u0915\u0947\u0902 / \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902 \u0915\u0947\u0935\u0932 \u092A\u0939\u0932\u0947 \u0938\u0947 \u091A\u093E\u0932\u0942 \u0909\u0927\u093E\u0930 \u0915\u094B \u0930\u094B\u0915\u0924\u093E \u0939\u0948\u0964)', "lend.low_memory": '\u0915\u0947\u0935\u0932 {mb} MB \u092E\u0947\u092E\u094B\u0930\u0940 \u0926\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948: \u092C\u0939\u0941\u0924 \u0915\u092E \u0915\u093E\u092E \u091A\u0932 \u092A\u093E\u090F\u0901\u0917\u0947\u0964 "{rules}" \u092E\u0947\u0902 "{memory}" \u0915\u094B \u0909\u0926\u093E\u0939\u0930\u0923 \u0915\u0947 \u0932\u093F\u090F 4096 (= 4 GB) \u0915\u0930\u0947\u0902 \u0914\u0930 "{save}" \u0926\u092C\u093E\u090F\u0901\u0964', "rules.awake": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0924\u0947 \u0938\u092E\u092F \u091C\u093E\u0917\u0924\u0947 \u0930\u0939\u0947\u0902", "rules.awake.help": "\u0915\u093F\u0938\u0940 \u0915\u0947 \u0932\u093F\u090F \u0915\u093E\u092E \u091A\u0932\u093E\u0924\u0947 \u0938\u092E\u092F \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0938\u094D\u0932\u0940\u092A \u092E\u0947\u0902 \u0928\u0939\u0940\u0902 \u091C\u093E\u090F\u0917\u093E (\u0938\u094D\u0915\u094D\u0930\u0940\u0928 \u092B\u093F\u0930 \u092D\u0940 \u092C\u0902\u0926 \u0939\u094B \u0938\u0915\u0924\u0940 \u0939\u0948)\u0964 \u092C\u093E\u0926 \u092E\u0947\u0902 \u0938\u093E\u092E\u093E\u0928\u094D\u092F \u0930\u0942\u092A \u0938\u0947 \u0938\u094D\u0932\u0940\u092A \u0939\u094B\u0917\u093E\u0964 \u0915\u093E\u092E \u092C\u0940\u091A \u092E\u0947\u0902 \u0928\u0939\u0940\u0902 \u0915\u091F\u0947\u0902\u0917\u0947\u0964", "ask.wait": "\u0907\u0924\u0928\u0947 \u0924\u0915 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E (\u092E\u093F\u0928\u091F)", "ask.wait.save": "\u0938\u0939\u0947\u091C\u0947\u0902", "ask.wait.saved": "\u0909\u0924\u094D\u0924\u0930\u094B\u0902 \u0915\u0940 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E {n} \u092E\u093F\u0928\u091F \u0924\u0915 \u0939\u094B\u0917\u0940\u0964", "ask.wait.range": "1 \u0938\u0947 120 \u0915\u0947 \u092C\u0940\u091A \u092E\u093F\u0928\u091F \u0926\u0930\u094D\u091C \u0915\u0930\u0947\u0902\u0964", "tip.wait": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0915\u0947 AI \u092E\u0949\u0921\u0932\u094B\u0902 \u0915\u0947 \u0909\u0924\u094D\u0924\u0930 \u0915\u0940 \u0915\u093F\u0924\u0928\u0940 \u0926\u0947\u0930 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u0915\u0930\u0947\u0902\u0964 \u0915\u093F\u0938\u0940 \u0915\u0947 \u092A\u094D\u0930\u094B\u0938\u0947\u0938\u0930 \u092A\u0930 \u091A\u0932\u0928\u0947 \u0935\u093E\u0932\u0947 \u092E\u0949\u0921\u0932 \u092E\u093F\u0928\u091F \u0932\u0947 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964 \u0906\u092A\u0915\u093E AI \u092D\u0940 \u0907\u0938\u0947 \u092C\u0926\u0932 \u0938\u0915\u0924\u093E \u0939\u0948\u0964" }, id: { "lang.name": "Bahasa Indonesia", "app.title": "BitPull", "locked.text": "Buka dasbor dari aplikasi BitPull: tautannya berisi kunci akses.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Alamat langsung", "pill.relay_on": "Relay terhubung", "pill.relay_off": "Relay tidak terhubung", "pill.cached": "{n} salinan tersimpan", "net.title": "Jaringan langsung", "net.online": "{n} komputer online", "net.lending": "{n} sedang meminjamkan", "net.cpu": "{n} core CPU", "net.ram": "{n} GB RAM", "net.gpu": "{n} GPU", "net.models": "{n} model AI", "net.jobs": "{n} tugas berjalan", "credits.title": "Saldo kredit", "credits.plan": "Paket {plan} \xB7 bisa turun hingga {n}", "plan.free": "Gratis", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "Isi ulang \u20AC5", "buy.ok": "Halaman pembayaran dibuka di browser Anda.", "lend.title": "Pinjamkan komputer ini", "lend.hint": "Tugas berjalan dengan enkripsi end-to-end di sandbox terisolasi, tanpa akses ke file Anda. Anda mendapat kredit.", "lend.state.off": "Mati", "lend.state.waiting": "Menunggu", "lend.state.working": "Bekerja", "lend.reason.lending_off": "Peminjaman mati", "lend.reason.paused": "Dijeda", "lend.reason.outside_hours": "Di luar jam Anda", "lend.reason.on_battery": "Memakai baterai", "lend.reason.computer_in_use": "Anda sedang memakai komputer", "lend.reason.no_jobs": "Tidak ada tugas di antrean", "lend.running": "Menjalankan tugas {kind} sejak {time}", "lend.detail": "{reason} \xB7 {n} tugas selesai \xB7 menawarkan {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", sandbox {name}", "lend.detail.models": ", {n} model", "lend.pause": "Jeda", "lend.resume": "Lanjutkan", "lend.paused_ok": "Peminjaman dijeda. Tugas yang berjalan dialihkan ke komputer lain.", "lend.resumed_ok": "Peminjaman dilanjutkan.", "setup.title": "Siapkan komputer ini", "setup.hint": "Yang dibutuhkan komputer ini untuk meminjamkan. Untuk memakai jaringan tidak perlu apa-apa lagi. Installer berasal dari situs resmi; sistem akan meminta konfirmasi Anda.", "setup.checking": "Memeriksa\u2026", "setup.docker.help": "Menjalankan tugas orang lain di sandbox terisolasi. Diperlukan untuk tugas kontainer. Gratis untuk penggunaan pribadi dan usaha kecil.", "setup.docker.download": "Unduh Docker", "setup.docker.start": "Jalankan Docker", "setup.apple.title": "Apple Container (opsional)", "setup.apple.help": "Isolasi lebih kuat: setiap tugas di mesin virtualnya sendiri. Opsional; Docker sudah cukup untuk mulai.", "setup.apple.get": "Dapatkan Apple Container", "setup.ollama.help": "Menjalankan model AI terbuka (Qwen, Llama, Mistral\u2026). Diperlukan untuk meminjamkan model AI.", "setup.ollama.download": "Unduh Ollama", "setup.ollama.start": "Jalankan Ollama", "setup.model.title": "Model AI", "setup.model.help": "Model yang ditawarkan komputer ini ke orang lain. Disarankan untuk memori {ram} GB: {model}.", "setup.model.download": "Unduh {model} ({size} GB)", "setup.model.none": "belum ada", "setup.model.need_ollama": "Pasang dan jalankan Ollama dulu", "setup.nvidia.title": "Driver GPU NVIDIA (opsional)", "setup.nvidia.help": "Hanya jika komputer ini punya kartu grafis NVIDIA yang ingin Anda pinjamkan.", "setup.nvidia.get": "Dapatkan driver NVIDIA", "setup.status.running": "terpasang dan berjalan", "setup.status.installed": "terpasang", "setup.status.stopped": "terpasang, tidak berjalan", "setup.status.missing": "belum terpasang", "setup.status.found": "ditemukan", "setup.status.not_found": "tidak ditemukan", "setup.terminal": "Jalankan di terminal:", "setup.done": "Selesai", "setup.opened": "Selesai: {file} dibuka, ikuti langkahnya", "setup.recheck": "Periksa lagi", "setup.ok.download": "Unduhan dimulai. Installer terbuka sendiri setelah selesai: ikuti langkahnya.", "setup.ok.start": "Menjalankan\u2026 bisa memakan waktu hingga satu menit. Daftar ini diperbarui sendiri.", "setup.ok.pull": "Unduhan model dimulai. Progres ditampilkan di atas.", "setup.ok.page": "Halaman dibuka di browser Anda.", "setup.ok.recheck": "Sudah diperiksa lagi.", "rules.title": "Aturan peminjaman", "rules.enabled": "Peminjaman aktif", "rules.enabled.help": "Sakelar utama. Saat mati, komputer ini tidak pernah menjalankan tugas orang lain. Anda tetap bisa memakai jaringan.", "rules.cpus": "CPU maks.", "rules.cpus.help": "Berapa core prosesor yang boleh dipakai satu tugas. Contoh: di komputer 8 core, nilai 2 menyisakan 6 core untuk Anda.", "rules.memory": "Memori maks. (MB)", "rules.memory.help": "RAM yang boleh dipakai satu tugas, dalam megabyte (1024 MB = 1 GB). BitPull tidak pernah menawarkan lebih dari separuh memori komputer ini.", "rules.gpu": "GPU", "rules.gpu.none": "Tidak ada", "rules.gpu.consumer": "Konsumen (8\u201312 GB)", "rules.gpu.high": "Kelas atas (16\u201324 GB)", "rules.gpu.datacenter": "Pusat data (40 GB+)", "rules.gpu.help": "Kartu grafis yang Anda pinjamkan, menurut memori videonya. Biarkan Tidak ada jika tidak punya GPU khusus atau tidak ingin meminjamkannya. GPU menghasilkan kredit paling banyak.", "rules.containers": "Tugas kontainer", "rules.containers.help": "Menjalankan build, tes, dan skrip orang lain di sandbox tanpa internet dan tanpa akses ke file Anda. Perlu Docker (atau Apple Container): lihat \u201CSiapkan komputer ini\u201D.", "rules.models": "Model terbuka (Ollama)", "rules.models.help": "Menjawab permintaan AI dengan model terbuka yang terpasang di Ollama pada komputer ini. Perlu Ollama dan minimal satu model.", "rules.idle": "Hanya setelah menit menganggur", "rules.idle.help": "Pinjamkan hanya jika Anda tidak menyentuh keyboard atau mouse selama sekian menit. 0 = tetap meminjamkan saat Anda bekerja.", "rules.ac": "Hanya saat dicas", "rules.ac.help": "Di laptop, berhenti meminjamkan saat memakai baterai, agar baterai tidak terkuras.", "rules.hours": "Hanya dari / sampai jam (kosong = selalu)", "rules.hours.help": "Pinjamkan hanya dalam rentang waktu ini, format 24 jam. Contoh: 22 dan 8 = dari pukul 22.00 sampai 08.00. Kosongkan keduanya untuk meminjamkan kapan saja.", "rules.cache": "Salinan repo orang lain", "rules.cache.help": "Berapa repo publik pengguna lain yang disalin di komputer ini, agar tetap tersedia saat pemiliknya offline. Memakai sedikit ruang disk dan menghasilkan kredit. 0 = tidak ada.", "rules.save": "Simpan aturan", "rules.saved": "Aturan disimpan. Berlaku dalam beberapa detik.", "rules.hours_both": "Isi kedua jam, atau kosongkan keduanya untuk meminjamkan kapan saja.", "folders.title": "Folder yang diizinkan", "folders.hint": "BitPull hanya membaca folder ini. Untuk memublikasikan folder, diperlukan bitpull.json yang lengkap.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Izinkan", "folders.none": "Tidak ada folder yang diizinkan.", "folders.draft": "Draf", "folders.publish": "Publikasikan", "folders.remove": "Hapus", "folders.need_path": "Tulis dulu path lengkap folder, mis. /Users/you/projects/my-library.", "folders.added": "Folder diizinkan.", "folders.removed": "Folder dihapus. BitPull tidak lagi membacanya.", "folders.drafted": "Draf siap: {n} file ditemukan. Biarkan AI Anda mengisi ringkasan dan deskripsi (alat prepare_publish), lalu tekan Publikasikan.", "folders.published": '"{name}" dipublikasikan dengan {n} file.', "folders.secrets_in": "Ditemukan di: {where}", "folders.line": "{file} baris {line}", "repos.title": "Repo Anda yang dipublikasikan", "repos.hint": "Diperbarui sendiri saat Anda mengubah file (setiap 5 menit).", "repos.none": "Belum ada repo yang dipublikasikan.", "repos.withdraw": "Tarik", "repos.withdrawn": "Repo ditarik dari jaringan.", "ask.title": "Model terbuka di jaringan", "ask.offers": "Komputer ini menawarkan: {models}.", "ask.offers_none": "tidak ada model (pasang Ollama untuk menawarkan)", "ask.placeholder": "Tanya model terbuka di jaringan\u2026", "ask.small": "Kecil", "ask.medium": "Sedang", "ask.large": "Besar", "ask.button": "Tanya", "ask.empty": "Tulis pertanyaan dulu.", "ask.waiting": "Mencari komputer dengan model tersebut\u2026 bisa memakan waktu hingga satu menit.", "ask.credits": "{n} kredit", "tools.title": "Hubungkan alat Anda", "tools.mcp": "Untuk Claude Code dan klien MCP, jalankan di terminal:", "tools.openai": "Untuk alat yang kompatibel dengan OpenAI: URL dasar", "tools.key": "Kunci API", "tools.show": "Tampilkan", "jobs.title": "Tugas terbaru Anda", "jobs.none": "Tidak ada tugas.", "jobs.model": "Model", "jobs.container": "Kontainer", "jobs.status.queued": "Antre", "jobs.status.running": "Berjalan", "jobs.status.done": "Selesai", "jobs.status.failed": "Gagal", "jobs.status.canceled": "Dibatalkan", "jobs.cost": "{n} kredit", working: "Memproses\u2026", "err.agent_down": "BitPull di komputer ini tidak merespons. Ia akan memulai ulang sendiri dalam 30 detik: coba lagi sebentar lagi.", "err.server": "Tidak dapat menjangkau server BitPull. Periksa koneksi internet Anda dan coba lagi.", "err.session": "Sesi dasbor ini kedaluwarsa. Buka lagi dari aplikasi BitPull.", "err.billing": "Pembayaran belum aktif.", "err.no_folder": "Folder ini tidak ada di komputer ini. Periksa path-nya.", "err.not_folder": "Path ini adalah file, bukan folder.", "err.credits": "Kredit tidak cukup.", "err.device": "Komputer ini belum terhubung. Biarkan aplikasi BitPull terbuka dan coba lagi dalam satu menit.", "err.no_model": "Saat ini tidak ada komputer di jaringan yang menawarkan model AI. Coba lagi nanti.", "err.invalid": "Beberapa nilai tidak valid. Periksa kolom dan coba lagi.", "tip.lang": "Bahasa aplikasi. Pilihan Anda disimpan di komputer ini.", "tip.buy.base": "Membuka halaman pembayaran aman untuk paket Base: \u20AC4.50 per bulan dengan 80 kredit setiap bulan. Anda bisa membatalkan kapan saja.", "tip.buy.pro": "Membuka halaman pembayaran aman untuk paket Pro: \u20AC9.90 per bulan dengan 200 kredit setiap bulan, prioritas tertinggi, dan semua GPU. Anda bisa membatalkan kapan saja.", "tip.buy.recharge": "Membuka halaman pembayaran aman untuk membeli 80 kredit sekali saja, seharga \u20AC5. Kreditnya tidak pernah kedaluwarsa.", "tip.pause": "Menghentikan peminjaman sekarang juga. Tugas yang sedang berjalan saat ini dialihkan ke komputer lain. Tekan lagi untuk melanjutkan.", "tip.resume": "Memulai peminjaman lagi, sesuai aturan peminjaman Anda.", "tip.rules.save": "Menyimpan aturan peminjaman di atas. Aturan berlaku dalam beberapa detik; tidak ada yang berubah sampai Anda menekan tombol ini.", "tip.folder.add": "Mengizinkan BitPull membaca folder yang ditulis di sebelah kiri. File di luar folder yang diizinkan tidak pernah dibaca atau dibagikan.", "tip.folder.draft": "Membuat bitpull.json di folder: daftar file-nya dengan deskripsi kosong untuk dilengkapi AI Anda. Belum ada yang dipublikasikan.", "tip.folder.publish": "Membagikan folder ini di jaringan sebagai repo publik, ditandatangani oleh komputer ini. Publikasi diblokir jika ditemukan kunci atau kata sandi di dalam file.", "tip.folder.remove": "BitPull berhenti membaca folder ini. Repo yang sudah dipublikasikan dari folder ini tetap online sampai Anda menariknya.", "tip.repo.withdraw": "Menghapus repo ini dari jaringan. Pengguna lain tidak bisa lagi menemukan atau mengunduhnya. File Anda tetap ada di komputer Anda.", "tip.ask": "Mengirim pertanyaan Anda, dengan enkripsi end-to-end, ke komputer di jaringan yang menjalankan model AI terbuka. Memakai beberapa kredit.", "tip.tier": "Ukuran model: yang kecil cepat dan murah, yang besar lebih pintar dan memakai lebih banyak kredit.", "tip.show_key": "Menampilkan kunci yang dipakai alat AI di komputer ini untuk berkomunikasi dengan BitPull. Jangan bagikan kunci ini.", "tip.setup.download": "Mengunduh installer resmi {name} untuk komputer ini ke folder Downloads Anda lalu membukanya. Ikuti langkah-langkahnya untuk menyelesaikan.", "tip.setup.start": "Menjalankan {name}, yang sudah terpasang di komputer ini tetapi belum berjalan.", "tip.setup.pull": "Mengunduh model AI {model} ({size} GB) ke Ollama, agar komputer ini bisa menawarkannya kepada orang lain.", "tip.setup.open": "Membuka halaman resmi {name} di browser Anda.", "tip.setup.recheck": "Memeriksa lagi apa yang terpasang dan berjalan di komputer ini.", "update.title": "Pembaruan aplikasi", "update.current": "Versi terpasang: {v}", "update.latest": "Versi terbaru: {v}", "update.button": "Periksa pembaruan", "update.install": "Pasang versi {v} sekarang", "update.available": "Versi {v} tersedia.", "update.not_in_app": "Pembaruan dipasang oleh aplikasi BitPull. Buka dasbor ini dari aplikasi untuk memperbarui.", "update.state.requested": "Meminta aplikasi untuk memeriksa\u2026", "update.state.checking": "Memeriksa pembaruan\u2026", "update.state.up_to_date": "Anda sudah memakai versi terbaru.", "update.state.installing": "Mengunduh dan memasang versi {v}\u2026 aplikasi akan memulai ulang sendiri.", "update.state.restarting": "Memulai ulang dengan versi {v}\u2026", "update.state.error": "Pembaruan gagal: {msg}. Coba lagi nanti.", "tip.update": "Memeriksa apakah ada versi BitPull yang lebih baru. Jika ada, mengunduhnya, memverifikasi tanda tangannya, memasangnya, dan memulai ulang aplikasi. Peminjaman berhenti sejenak selama beberapa detik.", "tools.hint": "Biarkan asisten AI Anda mencari kode bersama dan memakai model terbuka serta komputer di jaringan. Pilih alat Anda:", "tools.connect": "Hubungkan", "tools.connected": "Terhubung", "tools.copy": "Salin", "tools.copied": "Disalin.", "tools.installed": "Terpasang", "tools.not_found": "Tidak ditemukan di komputer ini", "tools.done": "Selesai. Mulai ulang {name} untuk mulai memakai BitPull.", "tools.manual": "Untuk menambahkannya secara manual:", "tools.config_invalid": "File pengaturan {name} bukan JSON yang valid, jadi BitPull tidak mengubahnya. Perbaiki file tersebut atau tambahkan BitPull secara manual dengan Salin.", "tip.tools.connect": "Menambahkan BitPull ke pengaturan {name} secara otomatis. Cadangan pengaturan sebelumnya disimpan di sebelahnya.", "tip.tools.copy": "Menyalin perintah atau pengaturan ke papan klip, agar Anda bisa menambahkan BitPull ke {name} sendiri.", "models.title": "Model AI untuk dibagikan", "models.hint": "Model terbuka dari segala jenis yang dapat dipinjamkan komputer ini. Hanya model yang lisensinya mengizinkan melayani orang lain yang ditampilkan. Model yang diunduh ditawarkan ke jaringan selama peminjaman aktif.", "models.engine.title": "Mesin gambar, suara, dan musik", "models.engine.help": "Lemonade (sumber terbuka): membuat gambar, suara ke teks, teks ke suara, musik, pemeringkatan ulang dokumen, dan memperbesar gambar. Dipasang di dalam BitPull, tanpa hak administrator.", "models.engine.install": "Pasang mesin", "models.engine.repair": "Pasang ulang mesin", "models.engine.unsupported": "Tidak tersedia di komputer ini (perlu Apple silicon, atau Windows/Linux x64)", "models.need_engine": "Pasang mesin terlebih dahulu", "models.not_here": "Tidak tersedia di komputer ini", "models.shared": "Terunduh \xB7 dibagikan", "models.download": "Unduh ({size} GB)", "models.needs_ram": "Perlu sekitar {ram} GB memori: mungkin lambat di sini", "models.recommended": "Disarankan", "models.license": "Lisensi", "models.ok.engine": "Memasang mesin\u2026", "task.chat": "Teks dan kode", "task.vision": "Gambar \u2192 teks", "task.ocr": "Dokumen (OCR)", "task.translate": "Terjemahan", "task.embed": "Embedding (pencarian)", "task.rerank": "Pemeringkatan ulang", "task.image": "Pembuatan gambar", "task.upscale": "Perbesar gambar", "task.stt": "Suara ke teks", "task.tts": "Teks ke suara", "task.music": "Musik", "limits.title": "Batas Anda untuk orang lain", "limits.hint": "Seberapa banyak pekerjaan AI yang dilakukan komputer ini untuk orang lain. Kosongkan untuk tanpa batas. Saat batas tercapai, model Anda tidak ditawarkan lagi hingga periode berikutnya.", "limits.save": "Simpan batas", "limits.requests": "Permintaan", "limits.tokens": "Token", "limits.used": "Terpakai", "limits.day": "Per hari", "limits.week": "Per minggu", "limits.month": "Per bulan", "limits.none": "tanpa batas", "limits.usage": "{requests} permintaan \xB7 {tokens} token", "limits.saved": "Batas disimpan.", "tip.models.engine": "Mengunduh mesin sumber terbuka Lemonade ke dalam BitPull, agar komputer ini dapat meminjamkan model gambar, suara, dan musik.", "tip.models.download": "Mengunduh {model} ({size} GB) ke komputer ini agar dapat ditawarkan ke orang lain. Anda bisa menghapusnya nanti.", "tip.limits.save": "Menyimpan batas harian, mingguan, dan bulanan untuk pekerjaan AI bagi orang lain.", "lend.visible": "\u2713 Jaringan melihat komputer ini: {cpus} CPU, {ram} GB tersedia untuk orang lain.", "lend.invisible": "Jaringan belum melihat peminjaman: tunggu hingga satu menit; jika tetap begini, periksa koneksi internet.", "lend.unusable": "\u26A0 Belum ada yang bisa memakai komputer ini: tidak ada pekerjaan yang bisa berjalan di sini. {reason}", "lend.unusable.docker": 'Docker tidak lolos pemeriksaan isolasi BitPull: lihat "Atur komputer ini".', "lend.unusable.off": 'Pekerjaan kontainer mati dan tidak ada model AI terpasang: aktifkan "Pekerjaan kontainer" atau unduh model.', "lend.docker_login": "Docker tidak dapat mengunduh image karena login Docker Hub-nya sudah tidak berlaku. Di Docker Desktop klik akun Anda (kanan atas) \u2192 Sign out, lalu masuk lagi atau tetap keluar. Lalu tekan Periksa lagi.", "lend.off_hint": 'Peminjaman mati: centang "{enabled}" di "{rules}" di bawah lalu tekan "{save}". (Jeda / Lanjutkan hanya menjeda peminjaman yang sudah aktif.)', "lend.low_memory": 'Hanya {mb} MB memori yang ditawarkan: hanya sedikit pekerjaan yang muat. Di "{rules}" atur "{memory}" misalnya 4096 (= 4 GB) lalu tekan "{save}".', "rules.awake": "Tetap menyala saat meminjamkan", "rules.awake.help": "Saat menjalankan pekerjaan untuk orang lain, komputer ini tidak tidur (layar tetap bisa mati). Setelahnya tidur seperti biasa. Mencegah pekerjaan terputus.", "ask.wait": "Tunggu hingga (menit)", "ask.wait.save": "Simpan", "ask.wait.saved": "Jawaban akan ditunggu hingga {n} menit.", "ask.wait.range": "Masukkan jumlah menit antara 1 dan 120.", "tip.wait": "Berapa lama menunggu jawaban model AI jaringan. Model di prosesor orang lain bisa butuh beberapa menit. AI Anda juga bisa mengubahnya." }, it: { "lang.name": "Italiano", "app.title": "BitPull", "locked.text": "Apri la dashboard dall'app BitPull: il suo link contiene la chiave di accesso.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Indirizzo diretto", "pill.relay_on": "Relay connesso", "pill.relay_off": "Relay non connesso", "pill.cached": "{n} copie in cache", "net.title": "Rete in tempo reale", "net.online": "{n} computer online", "net.lending": "{n} in prestito ora", "net.cpu": "{n} core CPU", "net.ram": "{n} GB di RAM", "net.gpu": "{n} GPU", "net.models": "{n} modelli di IA", "net.jobs": "{n} lavori in corso", "credits.title": "Saldo crediti", "credits.plan": "Piano {plan} \xB7 puoi scendere fino a {n}", "plan.free": "Free", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base 4,50 \u20AC", "buy.pro": "Pro 9,90 \u20AC", "buy.recharge": "Ricarica 5 \u20AC", "buy.ok": "Pagina di pagamento aperta nel browser.", "lend.title": "Presta questo computer", "lend.hint": "I lavori girano cifrati end-to-end in sandbox isolate, senza accesso ai tuoi file. Guadagni crediti.", "lend.state.off": "Spento", "lend.state.waiting": "In attesa", "lend.state.working": "Al lavoro", "lend.reason.lending_off": "Prestito disattivato", "lend.reason.paused": "In pausa", "lend.reason.outside_hours": "Fuori dai tuoi orari", "lend.reason.on_battery": "A batteria", "lend.reason.computer_in_use": "Stai usando il computer", "lend.reason.no_jobs": "Nessun lavoro in coda", "lend.running": "Esegue un lavoro {kind} dalle {time}", "lend.detail": "{reason} \xB7 {n} lavori completati \xB7 offre {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", sandbox {name}", "lend.detail.models": ", {n} modelli", "lend.pause": "Pausa", "lend.resume": "Riprendi", "lend.paused_ok": "Prestito in pausa. L'eventuale lavoro in corso \xE8 passato a un altro computer.", "lend.resumed_ok": "Prestito ripreso.", "setup.title": "Configura questo computer", "setup.hint": "Cosa serve a questo computer per prestare. Per usare la rete non serve altro. Gli installer arrivano dai siti ufficiali; il sistema ti chiede di confermare.", "setup.checking": "Verifica in corso\u2026", "setup.docker.help": "Esegue i lavori degli altri in sandbox isolate. Serve per i lavori in container. Gratis per uso personale e piccole aziende.", "setup.docker.download": "Scarica Docker", "setup.docker.start": "Avvia Docker", "setup.apple.title": "Apple Container (facoltativo)", "setup.apple.help": "Isolamento pi\xF9 forte: ogni lavoro nella sua macchina virtuale. Facoltativo; per iniziare basta Docker.", "setup.apple.get": "Ottieni Apple Container", "setup.ollama.help": "Esegue modelli di IA aperti (Qwen, Llama, Mistral\u2026). Serve per prestare modelli di IA.", "setup.ollama.download": "Scarica Ollama", "setup.ollama.start": "Avvia Ollama", "setup.model.title": "Modello di IA", "setup.model.help": "Il modello che questo computer offre agli altri. Consigliato per {ram} GB di memoria: {model}.", "setup.model.download": "Scarica {model} ({size} GB)", "setup.model.none": "ancora nessuno", "setup.model.need_ollama": "Prima installa e avvia Ollama", "setup.nvidia.title": "Driver GPU NVIDIA (facoltativi)", "setup.nvidia.help": "Solo se questo computer ha una scheda grafica NVIDIA che vuoi prestare.", "setup.nvidia.get": "Ottieni i driver NVIDIA", "setup.status.running": "installato e in esecuzione", "setup.status.installed": "installato", "setup.status.stopped": "installato, non in esecuzione", "setup.status.missing": "non installato", "setup.status.found": "trovato", "setup.status.not_found": "non trovato", "setup.terminal": "Esegui in un terminale:", "setup.done": "Fatto", "setup.opened": "Fatto: aperto {file}, segui i suoi passaggi", "setup.recheck": "Verifica di nuovo", "setup.ok.download": "Download avviato. L'installer si apre da solo quando finisce: segui i suoi passaggi.", "setup.ok.start": "Avvio in corso\u2026 pu\xF2 volerci fino a un minuto. Questo elenco si aggiorna da solo.", "setup.ok.pull": "Download del modello avviato. L'avanzamento \xE8 mostrato sopra.", "setup.ok.page": "Pagina aperta nel browser.", "setup.ok.recheck": "Verificato di nuovo.", "rules.title": "Regole di prestito", "rules.enabled": "Prestito attivo", "rules.enabled.help": "Interruttore generale. Se spento, questo computer non esegue mai i lavori degli altri. Puoi comunque usare la rete tu.", "rules.cpus": "CPU max", "rules.cpus.help": "Quanti core del processore pu\xF2 usare al massimo un lavoro. Esempio: su un computer con 8 core, con 2 te ne restano 6 liberi.", "rules.memory": "Memoria max (MB)", "rules.memory.help": "RAM che un lavoro pu\xF2 usare, in megabyte (1024 MB = 1 GB). BitPull non offre mai pi\xF9 della met\xE0 della memoria di questo computer.", "rules.gpu": "GPU", "rules.gpu.none": "Nessuna", "rules.gpu.consumer": "Consumer (8\u201312 GB)", "rules.gpu.high": "Fascia alta (16\u201324 GB)", "rules.gpu.datacenter": "Data center (40 GB+)", "rules.gpu.help": "La scheda grafica che presti, in base alla memoria video. Lascia Nessuna se non hai una GPU dedicata o non vuoi prestarla. Una GPU fa guadagnare pi\xF9 crediti.", "rules.containers": "Lavori in container", "rules.containers.help": "Esegue build, test e script per gli altri in una sandbox senza internet e senza accesso ai tuoi file. Serve Docker (o Apple Container): vedi \u201CConfigura questo computer\u201D.", "rules.models": "Modelli aperti (Ollama)", "rules.models.help": "Risponde alle richieste di IA con i modelli aperti installati in Ollama su questo computer. Servono Ollama e almeno un modello.", "rules.idle": "Solo dopo minuti di inattivit\xE0", "rules.idle.help": "Presta solo quando non tocchi tastiera o mouse da questi minuti. 0 = presta anche mentre lavori.", "rules.ac": "Solo con alimentatore collegato", "rules.ac.help": "Su un portatile, smette di prestare quando va a batteria, cos\xEC il prestito non la scarica mai.", "rules.hours": "Solo dalle / alle ore (vuoto = sempre)", "rules.hours.help": "Presta solo in questa fascia oraria, nel formato 24 ore. Esempio: 22 e 8 = dalle 22 alle 8. Lascia entrambi vuoti per prestare a qualsiasi ora.", "rules.cache": "Copie in cache dei repo altrui", "rules.cache.help": "Di quanti repo pubblici di altri utenti questo computer tiene una copia, cos\xEC restano disponibili quando i loro autori sono offline. Usa un po' di spazio su disco e fa guadagnare crediti. 0 = nessuno.", "rules.save": "Salva regole", "rules.saved": "Regole salvate. Si applicano entro pochi secondi.", "rules.hours_both": "Compila entrambe le ore, oppure lasciale vuote per prestare a qualsiasi ora.", "folders.title": "Cartelle autorizzate", "folders.hint": "BitPull legge solo queste cartelle. Per pubblicarne una serve un bitpull.json completo.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Autorizza", "folders.none": "Nessuna cartella autorizzata.", "folders.draft": "Bozza", "folders.publish": "Pubblica", "folders.remove": "Rimuovi", "folders.need_path": "Prima scrivi il percorso completo di una cartella, ad es. /Users/you/projects/my-library.", "folders.added": "Cartella autorizzata.", "folders.removed": "Cartella rimossa. BitPull non la legge pi\xF9.", "folders.drafted": "Bozza pronta: {n} file trovati. Fai compilare alla tua IA il riepilogo e le descrizioni (strumento prepare_publish), poi premi Pubblica.", "folders.published": 'Pubblicato "{name}" con {n} file.', "folders.secrets_in": "Trovato in: {where}", "folders.line": "{file} riga {line}", "repos.title": "I tuoi repo pubblicati", "repos.hint": "Si aggiornano da soli quando modifichi i file (ogni 5 minuti).", "repos.none": "Nessun repo pubblicato.", "repos.withdraw": "Ritira", "repos.withdrawn": "Repo ritirato dalla rete.", "ask.title": "Modelli aperti sulla rete", "ask.offers": "Questo computer offre: {models}.", "ask.offers_none": "nessun modello (installa Ollama per offrirne)", "ask.placeholder": "Chiedi a un modello aperto sulla rete\u2026", "ask.small": "Piccolo", "ask.medium": "Medio", "ask.large": "Grande", "ask.button": "Chiedi", "ask.empty": "Prima scrivi una domanda.", "ask.waiting": "Cerco un computer con il modello\u2026 pu\xF2 volerci fino a un minuto.", "ask.credits": "{n} crediti", "tools.title": "Collega i tuoi strumenti", "tools.mcp": "Per Claude Code e i client MCP, esegui in un terminale:", "tools.openai": "Per strumenti compatibili con OpenAI: URL di base", "tools.key": "Chiave API", "tools.show": "Mostra", "jobs.title": "I tuoi lavori recenti", "jobs.none": "Nessun lavoro.", "jobs.model": "Modello", "jobs.container": "Container", "jobs.status.queued": "In coda", "jobs.status.running": "In corso", "jobs.status.done": "Completato", "jobs.status.failed": "Non riuscito", "jobs.status.canceled": "Annullato", "jobs.cost": "{n} crediti", working: "In corso\u2026", "err.agent_down": "BitPull su questo computer non risponde. Si riavvia da solo entro 30 secondi: riprova tra poco.", "err.server": "Impossibile raggiungere il server BitPull. Controlla la connessione a internet e riprova.", "err.session": "Questa sessione della dashboard \xE8 scaduta. Riaprila dall'app BitPull.", "err.billing": "I pagamenti non sono ancora attivi.", "err.no_folder": "Questa cartella non esiste su questo computer. Controlla il percorso.", "err.not_folder": "Questo percorso \xE8 un file, non una cartella.", "err.credits": "Crediti insufficienti.", "err.device": "Questo computer non \xE8 ancora connesso. Tieni aperta l'app BitPull e riprova tra un minuto.", "err.no_model": "Al momento nessun computer della rete offre un modello di IA. Riprova pi\xF9 tardi.", "err.invalid": "Alcuni valori non sono validi. Controlla i campi e riprova.", "tip.lang": "Lingua dell'app. La tua scelta viene ricordata su questo computer.", "tip.buy.base": "Apre la pagina di pagamento sicura per il piano Base: 4,50 \u20AC al mese con 80 crediti ogni mese. Puoi disdire in qualsiasi momento.", "tip.buy.pro": "Apre la pagina di pagamento sicura per il piano Pro: 9,90 \u20AC al mese con 200 crediti ogni mese, priorit\xE0 massima e tutte le GPU. Puoi disdire in qualsiasi momento.", "tip.buy.recharge": "Apre la pagina di pagamento sicura per comprare 80 crediti una tantum, a 5 \u20AC. Non scadono mai.", "tip.pause": "Ferma subito il prestito. Un lavoro in corso in quel momento passa a un altro computer. Premi di nuovo per riprendere.", "tip.resume": "Riprende il prestito, seguendo le tue regole di prestito.", "tip.rules.save": "Salva le regole di prestito qui sopra. Si applicano entro pochi secondi; non cambia nulla finch\xE9 non premi qui.", "tip.folder.add": "Permette a BitPull di leggere la cartella scritta a sinistra. I file fuori dalle cartelle autorizzate non vengono mai letti n\xE9 condivisi.", "tip.folder.draft": "Crea bitpull.json nella cartella: l'elenco dei suoi file con descrizioni vuote che la tua IA completer\xE0. Non viene ancora pubblicato nulla.", "tip.folder.publish": "Condivide questa cartella sulla rete come repo pubblico, firmato da questo computer. La pubblicazione viene bloccata se nei file ci sono chiavi o password.", "tip.folder.remove": "BitPull smette di leggere questa cartella. I repo gi\xE0 pubblicati da qui restano online finch\xE9 non li ritiri.", "tip.repo.withdraw": "Rimuove questo repo dalla rete. Gli altri utenti non possono pi\xF9 trovarlo n\xE9 scaricarlo. I tuoi file restano sul tuo computer.", "tip.ask": "Invia la tua domanda, cifrata end-to-end, a un computer della rete che esegue un modello di IA aperto. Costa pochi crediti.", "tip.tier": "Dimensione del modello: piccolo \xE8 veloce ed economico, grande \xE8 pi\xF9 intelligente e costa pi\xF9 crediti.", "tip.show_key": "Mostra la chiave che gli strumenti di IA su questo computer usano per parlare con BitPull. Non condividerla.", "tip.setup.download": "Scarica l'installer ufficiale di {name} per questo computer nella cartella Download e lo apre. Segui i suoi passaggi per finire.", "tip.setup.start": "Avvia {name}, che \xE8 installato su questo computer ma non \xE8 in esecuzione.", "tip.setup.pull": "Scarica il modello di IA {model} ({size} GB) in Ollama, cos\xEC questo computer pu\xF2 offrirlo agli altri.", "tip.setup.open": "Apre la pagina ufficiale di {name} nel browser.", "tip.setup.recheck": "Verifica di nuovo cosa \xE8 installato e in esecuzione su questo computer.", "update.title": "Aggiornamenti dell'app", "update.current": "Versione installata: {v}", "update.latest": "Ultima versione: {v}", "update.button": "Cerca aggiornamenti", "update.install": "Installa ora la versione {v}", "update.available": "\xC8 disponibile la versione {v}.", "update.not_in_app": "Gli aggiornamenti vengono installati dall'app BitPull. Apri questa dashboard dall'app per aggiornare.", "update.state.requested": "Chiedo all'app di verificare\u2026", "update.state.checking": "Ricerca aggiornamenti\u2026", "update.state.up_to_date": "Hai l'ultima versione.", "update.state.installing": "Download e installazione della versione {v}\u2026 l'app si riavvia da sola.", "update.state.restarting": "Riavvio con la versione {v}\u2026", "update.state.error": "L'aggiornamento non \xE8 riuscito: {msg}. Riprova pi\xF9 tardi.", "tip.update": "Verifica se esiste una versione pi\xF9 recente di BitPull. Se c'\xE8, la scarica, ne verifica la firma, la installa e riavvia l'app. Il prestito si ferma per qualche secondo.", "tools.hint": "Lascia che il tuo assistente di IA cerchi nel codice condiviso e usi i modelli aperti e i computer della rete. Scegli il tuo strumento:", "tools.connect": "Collega", "tools.connected": "Collegato", "tools.copy": "Copia", "tools.copied": "Copiato.", "tools.installed": "Installato", "tools.not_found": "Non trovato su questo computer", "tools.done": "Fatto. Riavvia {name} per iniziare a usare BitPull.", "tools.manual": "Per aggiungerlo a mano:", "tools.config_invalid": "Il file delle impostazioni di {name} non \xE8 un JSON valido, quindi BitPull non l'ha toccato. Correggi il file o aggiungi BitPull a mano con Copia.", "tip.tools.connect": "Aggiunge BitPull alle impostazioni di {name} automaticamente. Un backup delle impostazioni precedenti viene conservato accanto.", "tip.tools.copy": "Copia il comando o le impostazioni negli appunti, cos\xEC puoi aggiungere BitPull a {name} da solo.", "models.title": "Modelli AI da condividere", "models.hint": "Modelli open di ogni tipo che questo computer pu\xF2 prestare. Sono elencati solo i modelli la cui licenza permette di servirli ad altri. I modelli scaricati vengono offerti alla rete mentre il prestito \xE8 attivo.", "models.engine.title": "Motore per immagini, voce e musica", "models.engine.help": "Lemonade (open source): genera immagini, trascrive la voce, legge testi ad alta voce, crea musica, riordina documenti e ingrandisce immagini. Installato dentro BitPull, senza diritti di amministratore.", "models.engine.install": "Installa motore", "models.engine.repair": "Reinstalla motore", "models.engine.unsupported": "Non disponibile su questo computer (serve Apple silicon, oppure Windows/Linux x64)", "models.need_engine": "Installa prima il motore", "models.not_here": "Non disponibile su questo computer", "models.shared": "Scaricato \xB7 condiviso", "models.download": "Scarica ({size} GB)", "models.needs_ram": "Richiede circa {ram} GB di memoria: qui potrebbe essere lento", "models.recommended": "Consigliato", "models.license": "Licenza", "models.ok.engine": "Installazione del motore\u2026", "task.chat": "Testo e codice", "task.vision": "Immagini \u2192 testo", "task.ocr": "Documenti (OCR)", "task.translate": "Traduzione", "task.embed": "Embedding (ricerca)", "task.rerank": "Riordino documenti", "task.image": "Generazione immagini", "task.upscale": "Ingrandimento immagini", "task.stt": "Voce \u2192 testo", "task.tts": "Testo \u2192 voce", "task.music": "Musica", "limits.title": "I tuoi limiti per gli altri", "limits.hint": "Quanto lavoro AI questo computer fa per gli altri. Lascia vuoto per nessun limite. Quando un limite \xE8 raggiunto, i tuoi modelli non vengono pi\xF9 offerti fino all'inizio del periodo successivo.", "limits.save": "Salva limiti", "limits.requests": "Richieste", "limits.tokens": "Token", "limits.used": "Usati", "limits.day": "Al giorno", "limits.week": "A settimana", "limits.month": "Al mese", "limits.none": "nessun limite", "limits.usage": "{requests} richieste \xB7 {tokens} token", "limits.saved": "Limiti salvati.", "tip.models.engine": "Scarica in BitPull il motore open source Lemonade, cos\xEC questo computer pu\xF2 prestare modelli per immagini, voce e musica.", "tip.models.download": "Scarica {model} ({size} GB) su questo computer per offrirlo agli altri. Puoi rimuoverlo in seguito.", "tip.limits.save": "Salva i limiti giornalieri, settimanali e mensili del lavoro AI svolto per gli altri.", "lend.visible": "\u2713 La rete vede questo computer: {cpus} CPU, {ram} GB disponibili per gli altri.", "lend.invisible": "La rete non vede ancora il prestito: attendi fino a un minuto; se resta cos\xEC, controlla la connessione a internet.", "lend.unusable": "\u26A0 Nessuno pu\xF2 ancora usare questo computer: qui non pu\xF2 girare nessun lavoro. {reason}", "lend.unusable.docker": 'Docker non supera il controllo di isolamento di BitPull: vedi "Configura questo computer".', "lend.unusable.off": `I lavori in container sono spenti e non c'\xE8 nessun modello AI: attiva "Lavori in container" o scarica un modello.`, "lend.docker_login": "Docker non riesce a scaricare le immagini perch\xE9 il suo accesso a Docker Hub non \xE8 pi\xF9 valido. In Docker Desktop clicca il tuo account (in alto a destra) \u2192 Sign out, poi rientra oppure resta disconnesso. Poi premi Verifica di nuovo.", "lend.off_hint": 'Il prestito \xE8 spento: spunta "{enabled}" in "{rules}" qui sotto e premi "{save}". (Pausa / Riprendi sospende solo un prestito gi\xE0 acceso.)', "lend.low_memory": 'Offri solo {mb} MB di memoria: ci stanno pochi lavori. In "{rules}" imposta "{memory}" ad esempio a 4096 (= 4 GB) e premi "{save}".', "rules.awake": "Resta acceso durante il prestito", "rules.awake.help": "Mentre esegue un lavoro per qualcuno, questo computer non va in sospensione (lo schermo pu\xF2 comunque spegnersi). Poi torna a sospendersi come sempre. Evita che i lavori vengano interrotti.", "ask.wait": "Attendi fino a (minuti)", "ask.wait.save": "Salva", "ask.wait.saved": "Le risposte verranno attese fino a {n} minuti.", "ask.wait.range": "Inserisci un numero di minuti tra 1 e 120.", "tip.wait": "Quanto aspettare la risposta dei modelli AI della rete prima di rinunciare. I modelli sul processore di qualcuno possono metterci minuti. Pu\xF2 cambiarlo anche la tua AI." }, pt: { "lang.name": "Portugu\xEAs", "app.title": "BitPull", "locked.text": "Abra o painel pelo app BitPull: o link dele cont\xE9m a chave de acesso.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Endere\xE7o direto", "pill.relay_on": "Relay conectado", "pill.relay_off": "Relay n\xE3o conectado", "pill.cached": "{n} c\xF3pias em cache", "net.title": "Rede ao vivo", "net.online": "{n} computadores online", "net.lending": "{n} emprestando agora", "net.cpu": "{n} n\xFAcleos de CPU", "net.ram": "{n} GB de RAM", "net.gpu": "{n} GPUs", "net.models": "{n} modelos de IA", "net.jobs": "{n} tarefas em execu\xE7\xE3o", "credits.title": "Saldo de cr\xE9ditos", "credits.plan": "Plano {plan} \xB7 pode chegar a {n}", "plan.free": "Gr\xE1tis", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "Recarregar \u20AC5", "buy.ok": "P\xE1gina de pagamento aberta no seu navegador.", "lend.title": "Emprestar este computador", "lend.hint": "As tarefas rodam com criptografia de ponta a ponta em sandboxes isoladas, sem acesso aos seus arquivos. Voc\xEA ganha cr\xE9ditos.", "lend.state.off": "Desligado", "lend.state.waiting": "Aguardando", "lend.state.working": "Trabalhando", "lend.reason.lending_off": "Empr\xE9stimo desligado", "lend.reason.paused": "Pausado", "lend.reason.outside_hours": "Fora do seu hor\xE1rio", "lend.reason.on_battery": "Na bateria", "lend.reason.computer_in_use": "Voc\xEA est\xE1 usando o computador", "lend.reason.no_jobs": "Nenhuma tarefa na fila", "lend.running": "Executando uma tarefa {kind} desde {time}", "lend.detail": "{reason} \xB7 {n} tarefas conclu\xEDdas \xB7 oferece {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", sandbox {name}", "lend.detail.models": ", {n} modelos", "lend.pause": "Pausar", "lend.resume": "Retomar", "lend.paused_ok": "Empr\xE9stimo pausado. Tarefas em andamento foram passadas para outro computador.", "lend.resumed_ok": "Empr\xE9stimo retomado.", "setup.title": "Configurar este computador", "setup.hint": "O que este computador precisa para emprestar. Para usar a rede, nada mais \xE9 necess\xE1rio. Os instaladores v\xEAm dos sites oficiais; o sistema pedir\xE1 sua confirma\xE7\xE3o.", "setup.checking": "Verificando\u2026", "setup.docker.help": "Executa tarefas de outras pessoas em sandboxes isoladas. Necess\xE1rio para tarefas de cont\xEAiner. Gr\xE1tis para uso pessoal e pequenas empresas.", "setup.docker.download": "Baixar Docker", "setup.docker.start": "Iniciar Docker", "setup.apple.title": "Apple Container (opcional)", "setup.apple.help": "Isolamento mais forte: cada tarefa em sua pr\xF3pria m\xE1quina virtual. Opcional; o Docker basta para come\xE7ar.", "setup.apple.get": "Obter Apple Container", "setup.ollama.help": "Executa modelos de IA abertos (Qwen, Llama, Mistral\u2026). Necess\xE1rio para emprestar modelos de IA.", "setup.ollama.download": "Baixar Ollama", "setup.ollama.start": "Iniciar Ollama", "setup.model.title": "Modelo de IA", "setup.model.help": "O modelo que este computador oferece aos outros. Sugerido para {ram} GB de mem\xF3ria: {model}.", "setup.model.download": "Baixar {model} ({size} GB)", "setup.model.none": "nenhum ainda", "setup.model.need_ollama": "Instale e inicie o Ollama primeiro", "setup.nvidia.title": "Drivers de GPU NVIDIA (opcional)", "setup.nvidia.help": "S\xF3 se este computador tiver uma placa de v\xEDdeo NVIDIA que voc\xEA queira emprestar.", "setup.nvidia.get": "Obter drivers NVIDIA", "setup.status.running": "instalado e em execu\xE7\xE3o", "setup.status.installed": "instalado", "setup.status.stopped": "instalado, parado", "setup.status.missing": "n\xE3o instalado", "setup.status.found": "encontrado", "setup.status.not_found": "n\xE3o encontrado", "setup.terminal": "Execute em um terminal:", "setup.done": "Pronto", "setup.opened": "Pronto: {file} aberto, siga os passos", "setup.recheck": "Verificar de novo", "setup.ok.download": "Download iniciado. O instalador abre sozinho quando terminar: siga os passos.", "setup.ok.start": "Iniciando\u2026 pode levar at\xE9 um minuto. Esta lista se atualiza sozinha.", "setup.ok.pull": "Download do modelo iniciado. O progresso aparece acima.", "setup.ok.page": "P\xE1gina aberta no seu navegador.", "setup.ok.recheck": "Verificado novamente.", "rules.title": "Regras de empr\xE9stimo", "rules.enabled": "Empr\xE9stimo ligado", "rules.enabled.help": "Chave geral. Quando desligada, este computador nunca executa tarefas de outras pessoas. Voc\xEA ainda pode usar a rede.", "rules.cpus": "M\xE1x. de CPUs", "rules.cpus.help": "Quantos n\xFAcleos do processador uma tarefa pode usar no m\xE1ximo. Exemplo: em um computador de 8 n\xFAcleos, 2 deixa 6 n\xFAcleos livres para voc\xEA.", "rules.memory": "Mem\xF3ria m\xE1x. (MB)", "rules.memory.help": "RAM que uma tarefa pode usar, em megabytes (1024 MB = 1 GB). O BitPull nunca oferece mais da metade da mem\xF3ria deste computador.", "rules.gpu": "GPU", "rules.gpu.none": "Nenhuma", "rules.gpu.consumer": "Dom\xE9stica (8\u201312 GB)", "rules.gpu.high": "Topo de linha (16\u201324 GB)", "rules.gpu.datacenter": "Data center (40 GB+)", "rules.gpu.help": "A placa de v\xEDdeo que voc\xEA empresta, pela mem\xF3ria de v\xEDdeo. Deixe Nenhuma se n\xE3o tiver GPU dedicada ou n\xE3o quiser emprest\xE1-la. Uma GPU rende mais cr\xE9ditos.", "rules.containers": "Tarefas de cont\xEAiner", "rules.containers.help": "Executa builds, testes e scripts de outras pessoas em uma sandbox sem internet e sem acesso aos seus arquivos. Requer Docker (ou Apple Container): veja \u201CConfigurar este computador\u201D.", "rules.models": "Modelos abertos (Ollama)", "rules.models.help": "Responde a pedidos de IA com os modelos abertos instalados no Ollama deste computador. Requer Ollama e pelo menos um modelo.", "rules.idle": "S\xF3 ap\xF3s minutos ocioso", "rules.idle.help": "Empresta s\xF3 quando voc\xEA n\xE3o tocar no teclado ou mouse por esse n\xFAmero de minutos. 0 = empresta mesmo enquanto voc\xEA trabalha.", "rules.ac": "S\xF3 na tomada", "rules.ac.help": "Em um notebook, para de emprestar quando estiver na bateria, para nunca descarreg\xE1-la.", "rules.hours": "S\xF3 da hora / at\xE9 a hora (vazio = sempre)", "rules.hours.help": "Empresta s\xF3 nesse intervalo, no formato 24 horas. Exemplo: 22 e 8 = das 22h \xE0s 8h. Deixe os dois vazios para emprestar a qualquer hora.", "rules.cache": "C\xF3pias em cache de repos de outros", "rules.cache.help": "Quantos repos p\xFAblicos de outros usu\xE1rios este computador guarda em c\xF3pia, para que fiquem dispon\xEDveis quando os autores estiverem offline. Usa pouco espa\xE7o em disco e rende cr\xE9ditos. 0 = nenhum.", "rules.save": "Salvar regras", "rules.saved": "Regras salvas. Valem em poucos segundos.", "rules.hours_both": "Preencha as duas horas ou deixe ambas vazias para emprestar a qualquer hora.", "folders.title": "Pastas autorizadas", "folders.hint": "O BitPull l\xEA apenas estas pastas. Para publicar uma, ela precisa de um bitpull.json completo.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Autorizar", "folders.none": "Nenhuma pasta autorizada.", "folders.draft": "Rascunho", "folders.publish": "Publicar", "folders.remove": "Remover", "folders.need_path": "Escreva primeiro o caminho completo de uma pasta, ex.: /Users/you/projects/my-library.", "folders.added": "Pasta autorizada.", "folders.removed": "Pasta removida. O BitPull n\xE3o a l\xEA mais.", "folders.drafted": "Rascunho pronto: {n} arquivos encontrados. Deixe sua IA preencher o resumo e as descri\xE7\xF5es (ferramenta prepare_publish) e depois clique em Publicar.", "folders.published": '"{name}" publicado com {n} arquivos.', "folders.secrets_in": "Encontrado em: {where}", "folders.line": "{file} linha {line}", "repos.title": "Seus repos publicados", "repos.hint": "Atualizam sozinhos quando voc\xEA altera os arquivos (a cada 5 minutos).", "repos.none": "Nenhum repo publicado.", "repos.withdraw": "Retirar", "repos.withdrawn": "Repo retirado da rede.", "ask.title": "Modelos abertos na rede", "ask.offers": "Este computador oferece: {models}.", "ask.offers_none": "nenhum modelo (instale o Ollama para oferecer)", "ask.placeholder": "Pergunte a um modelo aberto na rede\u2026", "ask.small": "Pequeno", "ask.medium": "M\xE9dio", "ask.large": "Grande", "ask.button": "Perguntar", "ask.empty": "Escreva uma pergunta primeiro.", "ask.waiting": "Procurando um computador com o modelo\u2026 pode levar at\xE9 um minuto.", "ask.credits": "{n} cr\xE9ditos", "tools.title": "Conecte suas ferramentas", "tools.mcp": "Para Claude Code e clientes MCP, execute em um terminal:", "tools.openai": "Para ferramentas compat\xEDveis com OpenAI: URL base", "tools.key": "Chave de API", "tools.show": "Mostrar", "jobs.title": "Suas tarefas recentes", "jobs.none": "Nenhuma tarefa.", "jobs.model": "Modelo", "jobs.container": "Cont\xEAiner", "jobs.status.queued": "Na fila", "jobs.status.running": "Em execu\xE7\xE3o", "jobs.status.done": "Conclu\xEDda", "jobs.status.failed": "Falhou", "jobs.status.canceled": "Cancelada", "jobs.cost": "{n} cr\xE9ditos", working: "Trabalhando\u2026", "err.agent_down": "O BitPull deste computador n\xE3o est\xE1 respondendo. Ele reinicia sozinho em at\xE9 30 segundos: tente de novo em breve.", "err.server": "N\xE3o foi poss\xEDvel acessar o servidor do BitPull. Verifique sua conex\xE3o com a internet e tente de novo.", "err.session": "A sess\xE3o deste painel expirou. Abra-o de novo pelo app BitPull.", "err.billing": "Os pagamentos ainda n\xE3o est\xE3o ativos.", "err.no_folder": "Esta pasta n\xE3o existe neste computador. Verifique o caminho.", "err.not_folder": "Este caminho \xE9 um arquivo, n\xE3o uma pasta.", "err.credits": "Cr\xE9ditos insuficientes.", "err.device": "Este computador ainda n\xE3o est\xE1 conectado. Mantenha o app BitPull aberto e tente de novo em um minuto.", "err.no_model": "Nenhum computador na rede oferece um modelo de IA agora. Tente mais tarde.", "err.invalid": "Alguns valores n\xE3o s\xE3o v\xE1lidos. Verifique os campos e tente de novo.", "tip.lang": "Idioma do app. Sua escolha fica salva neste computador.", "tip.buy.base": "Abre a p\xE1gina de pagamento seguro do plano Base: \u20AC4.50 por m\xEAs com 80 cr\xE9ditos todo m\xEAs. Voc\xEA pode cancelar quando quiser.", "tip.buy.pro": "Abre a p\xE1gina de pagamento seguro do plano Pro: \u20AC9.90 por m\xEAs com 200 cr\xE9ditos todo m\xEAs, prioridade m\xE1xima e todas as GPUs. Voc\xEA pode cancelar quando quiser.", "tip.buy.recharge": "Abre a p\xE1gina de pagamento seguro para comprar 80 cr\xE9ditos uma \xFAnica vez, por \u20AC5. Eles nunca expiram.", "tip.pause": "Para o empr\xE9stimo agora mesmo. Uma tarefa em andamento neste momento \xE9 passada para outro computador. Clique de novo para retomar.", "tip.resume": "Volta a emprestar, seguindo suas regras de empr\xE9stimo.", "tip.rules.save": "Salva as regras de empr\xE9stimo acima. Elas valem em poucos segundos; nada muda at\xE9 voc\xEA clicar aqui.", "tip.folder.add": "Permite que o BitPull leia a pasta escrita \xE0 esquerda. Arquivos fora das pastas autorizadas nunca s\xE3o lidos nem compartilhados.", "tip.folder.draft": "Cria o bitpull.json na pasta: a lista dos arquivos dela com descri\xE7\xF5es vazias para sua AI completar. Nada \xE9 publicado ainda.", "tip.folder.publish": "Compartilha esta pasta na rede como um repo p\xFAblico, assinado por este computador. A publica\xE7\xE3o \xE9 bloqueada se forem encontradas chaves ou senhas nos arquivos.", "tip.folder.remove": "O BitPull para de ler esta pasta. Repos j\xE1 publicados a partir dela continuam online at\xE9 voc\xEA retir\xE1-los.", "tip.repo.withdraw": "Remove este repo da rede. Outros usu\xE1rios n\xE3o poder\xE3o mais encontr\xE1-lo nem baix\xE1-lo. Seus arquivos continuam no seu computador.", "tip.ask": "Envia sua pergunta, com criptografia de ponta a ponta, para um computador da rede que roda um modelo de AI aberto. Custa alguns cr\xE9ditos.", "tip.tier": "Tamanho do modelo: o pequeno \xE9 r\xE1pido e barato; o grande \xE9 mais inteligente e custa mais cr\xE9ditos.", "tip.show_key": "Mostra a chave que as ferramentas de AI deste computador usam para se comunicar com o BitPull. N\xE3o compartilhe.", "tip.setup.download": "Baixa o instalador oficial do {name} para este computador na sua pasta Downloads e o abre. Siga os passos dele para concluir.", "tip.setup.start": "Inicia o {name}, que est\xE1 instalado neste computador mas n\xE3o est\xE1 rodando.", "tip.setup.pull": "Baixa o modelo de AI {model} ({size} GB) no Ollama, para que este computador possa oferec\xEA-lo a outras pessoas.", "tip.setup.open": "Abre a p\xE1gina oficial do {name} no seu navegador.", "tip.setup.recheck": "Verifica de novo o que est\xE1 instalado e rodando neste computador.", "update.title": "Atualiza\xE7\xF5es do app", "update.current": "Vers\xE3o instalada: {v}", "update.latest": "Vers\xE3o mais recente: {v}", "update.button": "Verificar atualiza\xE7\xF5es", "update.install": "Instalar a vers\xE3o {v} agora", "update.available": "A vers\xE3o {v} est\xE1 dispon\xEDvel.", "update.not_in_app": "As atualiza\xE7\xF5es s\xE3o instaladas pelo app BitPull. Abra este painel pelo app para atualizar.", "update.state.requested": "Pedindo ao app para verificar\u2026", "update.state.checking": "Verificando atualiza\xE7\xF5es\u2026", "update.state.up_to_date": "Voc\xEA tem a vers\xE3o mais recente.", "update.state.installing": "Baixando e instalando a vers\xE3o {v}\u2026 o app reinicia sozinho.", "update.state.restarting": "Reiniciando com a vers\xE3o {v}\u2026", "update.state.error": "A atualiza\xE7\xE3o n\xE3o funcionou: {msg}. Tente novamente mais tarde.", "tip.update": "Verifica se existe uma vers\xE3o mais nova do BitPull. Se existir, baixa, verifica a assinatura, instala e reinicia o app. O empr\xE9stimo pausa por alguns segundos.", "tools.hint": "Deixe seu assistente de AI pesquisar c\xF3digo compartilhado e usar os modelos abertos e os computadores da rede. Escolha sua ferramenta:", "tools.connect": "Conectar", "tools.connected": "Conectado", "tools.copy": "Copiar", "tools.copied": "Copiado.", "tools.installed": "Instalado", "tools.not_found": "N\xE3o encontrado neste computador", "tools.done": "Pronto. Reinicie o {name} para come\xE7ar a usar o BitPull.", "tools.manual": "Para adicionar manualmente:", "tools.config_invalid": "O arquivo de configura\xE7\xF5es do {name} n\xE3o \xE9 um JSON v\xE1lido, ent\xE3o o BitPull n\xE3o o alterou. Corrija o arquivo ou adicione o BitPull manualmente com Copiar.", "tip.tools.connect": "Adiciona o BitPull \xE0s configura\xE7\xF5es do {name} automaticamente. Um backup das configura\xE7\xF5es anteriores \xE9 mantido ao lado delas.", "tip.tools.copy": "Copia o comando ou as configura\xE7\xF5es para a \xE1rea de transfer\xEAncia, para voc\xEA mesmo adicionar o BitPull ao {name}.", "models.title": "Modelos de IA para compartilhar", "models.hint": "Modelos abertos de todos os tipos que este computador pode emprestar. S\xF3 aparecem modelos cuja licen\xE7a permite servi-los a outras pessoas. Os modelos baixados s\xE3o oferecidos \xE0 rede enquanto o empr\xE9stimo estiver ativo.", "models.engine.title": "Motor de imagem, voz e m\xFAsica", "models.engine.help": "Lemonade (c\xF3digo aberto): gera imagens, transcreve voz, l\xEA textos em voz alta, cria m\xFAsica, reordena documentos e amplia imagens. Instalado dentro do BitPull, sem direitos de administrador.", "models.engine.install": "Instalar motor", "models.engine.repair": "Reinstalar motor", "models.engine.unsupported": "Indispon\xEDvel neste computador (requer Apple silicon, ou Windows/Linux x64)", "models.need_engine": "Instale o motor primeiro", "models.not_here": "Indispon\xEDvel neste computador", "models.shared": "Baixado \xB7 compartilhado", "models.download": "Baixar ({size} GB)", "models.needs_ram": "Precisa de cerca de {ram} GB de mem\xF3ria: pode ficar lento aqui", "models.recommended": "Recomendado", "models.license": "Licen\xE7a", "models.ok.engine": "Instalando o motor\u2026", "task.chat": "Texto e c\xF3digo", "task.vision": "Imagens \u2192 texto", "task.ocr": "Documentos (OCR)", "task.translate": "Tradu\xE7\xE3o", "task.embed": "Embeddings (busca)", "task.rerank": "Reordena\xE7\xE3o", "task.image": "Gera\xE7\xE3o de imagens", "task.upscale": "Amplia\xE7\xE3o de imagens", "task.stt": "Voz para texto", "task.tts": "Texto para voz", "task.music": "M\xFAsica", "limits.title": "Seus limites para outros", "limits.hint": "Quanto trabalho de IA este computador faz para outros. Deixe vazio para sem limite. Ao atingir um limite, seus modelos deixam de ser oferecidos at\xE9 o pr\xF3ximo per\xEDodo.", "limits.save": "Salvar limites", "limits.requests": "Solicita\xE7\xF5es", "limits.tokens": "Tokens", "limits.used": "Usado", "limits.day": "Por dia", "limits.week": "Por semana", "limits.month": "Por m\xEAs", "limits.none": "sem limite", "limits.usage": "{requests} solicita\xE7\xF5es \xB7 {tokens} tokens", "limits.saved": "Limites salvos.", "tip.models.engine": "Baixa no BitPull o motor de c\xF3digo aberto Lemonade, para que este computador possa emprestar modelos de imagem, voz e m\xFAsica.", "tip.models.download": "Baixa {model} ({size} GB) neste computador para oferec\xEA-lo a outros. Voc\xEA pode remov\xEA-lo depois.", "tip.limits.save": "Salva os limites di\xE1rios, semanais e mensais do trabalho de IA feito para outros.", "lend.visible": "\u2713 A rede v\xEA este computador: {cpus} CPU, {ram} GB dispon\xEDveis para outros.", "lend.invisible": "A rede ainda n\xE3o v\xEA o empr\xE9stimo: aguarde at\xE9 um minuto; se continuar assim, verifique a conex\xE3o com a internet.", "lend.unusable": "\u26A0 Ningu\xE9m pode usar este computador ainda: nenhuma tarefa pode rodar aqui. {reason}", "lend.unusable.docker": 'O Docker n\xE3o passa na verifica\xE7\xE3o de isolamento do BitPull: veja "Configurar este computador".', "lend.unusable.off": 'As tarefas em cont\xEAiner est\xE3o desativadas e n\xE3o h\xE1 modelo de IA: ative "Tarefas em cont\xEAiner" ou baixe um modelo.', "lend.docker_login": "O Docker n\xE3o consegue baixar imagens porque o login no Docker Hub n\xE3o \xE9 mais v\xE1lido. No Docker Desktop clique na sua conta (canto superior direito) \u2192 Sign out, depois entre de novo ou fique desconectado. Em seguida pressione Verificar novamente.", "lend.off_hint": 'O empr\xE9stimo est\xE1 desligado: marque "{enabled}" em "{rules}" abaixo e pressione "{save}". (Pausar / Retomar s\xF3 pausa um empr\xE9stimo j\xE1 ligado.)', "lend.low_memory": 'Voc\xEA oferece s\xF3 {mb} MB de mem\xF3ria: cabem poucas tarefas. Em "{rules}" defina "{memory}" por exemplo como 4096 (= 4 GB) e pressione "{save}".', "rules.awake": "Manter ativo durante o empr\xE9stimo", "rules.awake.help": "Enquanto executa uma tarefa para algu\xE9m, este computador n\xE3o entra em suspens\xE3o (a tela pode desligar mesmo assim). Depois suspende normalmente. Evita tarefas interrompidas.", "ask.wait": "Esperar at\xE9 (minutos)", "ask.wait.save": "Salvar", "ask.wait.saved": "As respostas ser\xE3o aguardadas at\xE9 {n} minutos.", "ask.wait.range": "Digite um n\xFAmero de minutos entre 1 e 120.", "tip.wait": "Quanto esperar a resposta dos modelos de IA da rede antes de desistir. Modelos no processador de algu\xE9m podem levar minutos. Sua IA tamb\xE9m pode mudar isso." }, ru: { "lang.name": "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", "app.title": "BitPull", "locked.text": "\u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u043F\u0430\u043D\u0435\u043B\u044C \u0438\u0437 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F BitPull: \u0432 \u0435\u0451 \u0441\u0441\u044B\u043B\u043A\u0435 \u0435\u0441\u0442\u044C \u043A\u043B\u044E\u0447 \u0434\u043E\u0441\u0442\u0443\u043F\u0430.", "pill.online": "\u0412 \u0441\u0435\u0442\u0438", "pill.offline": "\u041D\u0435 \u0432 \u0441\u0435\u0442\u0438", "pill.direct": "\u041F\u0440\u044F\u043C\u043E\u0439 \u0430\u0434\u0440\u0435\u0441", "pill.relay_on": "\u0420\u0435\u0442\u0440\u0430\u043D\u0441\u043B\u044F\u0442\u043E\u0440 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D", "pill.relay_off": "\u0420\u0435\u0442\u0440\u0430\u043D\u0441\u043B\u044F\u0442\u043E\u0440 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D", "pill.cached": "\u041A\u043E\u043F\u0438\u0439 \u0432 \u043A\u044D\u0448\u0435: {n}", "net.title": "\u0421\u0435\u0442\u044C \u0441\u0435\u0439\u0447\u0430\u0441", "net.online": "\u041A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043E\u0432 \u0432 \u0441\u0435\u0442\u0438: {n}", "net.lending": "\u0421\u0434\u0430\u044E\u0442 \u0441\u0435\u0439\u0447\u0430\u0441: {n}", "net.cpu": "\u042F\u0434\u0435\u0440 CPU: {n}", "net.ram": "{n} GB RAM", "net.gpu": "GPU: {n}", "net.models": "AI-\u043C\u043E\u0434\u0435\u043B\u0435\u0439: {n}", "net.jobs": "\u0417\u0430\u0434\u0430\u0447 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F: {n}", "credits.title": "\u0411\u0430\u043B\u0430\u043D\u0441 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432", "credits.plan": "\u0422\u0430\u0440\u0438\u0444 {plan} \xB7 \u043C\u043E\u0436\u043D\u043E \u0443\u0439\u0442\u0438 \u0434\u043E {n}", "plan.free": "\u0411\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u044B\u0439", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u20AC5", "buy.ok": "\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u043E\u043F\u043B\u0430\u0442\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.", "lend.title": "\u0421\u0434\u0430\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440", "lend.hint": "\u0417\u0430\u0434\u0430\u0447\u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u044E\u0442\u0441\u044F \u0441\u043E \u0441\u043A\u0432\u043E\u0437\u043D\u044B\u043C \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u0432 \u0438\u0437\u043E\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u043F\u0435\u0441\u043E\u0447\u043D\u0438\u0446\u0430\u0445, \u0431\u0435\u0437 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0432\u0430\u0448\u0438\u043C \u0444\u0430\u0439\u043B\u0430\u043C. \u0412\u044B \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442\u0435 \u043A\u0440\u0435\u0434\u0438\u0442\u044B.", "lend.state.off": "\u0412\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043E", "lend.state.waiting": "\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435", "lend.state.working": "\u0420\u0430\u0431\u043E\u0442\u0430\u0435\u0442", "lend.reason.lending_off": "\u0421\u0434\u0430\u0447\u0430 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0430", "lend.reason.paused": "\u041D\u0430 \u043F\u0430\u0443\u0437\u0435", "lend.reason.outside_hours": "\u0412\u043D\u0435 \u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0447\u0430\u0441\u043E\u0432", "lend.reason.on_battery": "\u0420\u0430\u0431\u043E\u0442\u0430 \u043E\u0442 \u0431\u0430\u0442\u0430\u0440\u0435\u0438", "lend.reason.computer_in_use": "\u0412\u044B \u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435\u0441\u044C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043E\u043C", "lend.reason.no_jobs": "\u041D\u0435\u0442 \u0437\u0430\u0434\u0430\u0447 \u0432 \u043E\u0447\u0435\u0440\u0435\u0434\u0438", "lend.running": "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0437\u0430\u0434\u0430\u0447\u0430 {kind} \u0441 {time}", "lend.detail": "{reason} \xB7 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u043E \u0437\u0430\u0434\u0430\u0447: {n} \xB7 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", \u043F\u0435\u0441\u043E\u0447\u043D\u0438\u0446\u0430 {name}", "lend.detail.models": ", \u043C\u043E\u0434\u0435\u043B\u0435\u0439: {n}", "lend.pause": "\u041F\u0430\u0443\u0437\u0430", "lend.resume": "\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C", "lend.paused_ok": "\u0421\u0434\u0430\u0447\u0430 \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430. \u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0437\u0430\u0434\u0430\u0447\u0430 \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u0430 \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0443.", "lend.resumed_ok": "\u0421\u0434\u0430\u0447\u0430 \u0432\u043E\u0437\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0430.", "setup.title": "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430", "setup.hint": "\u0427\u0442\u043E \u043D\u0443\u0436\u043D\u043E \u044D\u0442\u043E\u043C\u0443 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0443, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0430\u0432\u0430\u0442\u044C \u0440\u0435\u0441\u0443\u0440\u0441\u044B. \u0414\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0435\u0442\u0438 \u043D\u0438\u0447\u0435\u0433\u043E \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F. \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044E\u0442\u0441\u044F \u0441 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0445 \u0441\u0430\u0439\u0442\u043E\u0432; \u0441\u0438\u0441\u0442\u0435\u043C\u0430 \u043F\u043E\u043F\u0440\u043E\u0441\u0438\u0442 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435.", "setup.checking": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430\u2026", "setup.docker.help": "\u0417\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043B\u044E\u0434\u0435\u0439 \u0432 \u0438\u0437\u043E\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u043F\u0435\u0441\u043E\u0447\u043D\u0438\u0446\u0430\u0445. \u041D\u0443\u0436\u0435\u043D \u0434\u043B\u044F \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u043D\u044B\u0445 \u0437\u0430\u0434\u0430\u0447. \u0411\u0435\u0441\u043F\u043B\u0430\u0442\u0435\u043D \u0434\u043B\u044F \u043B\u0438\u0447\u043D\u043E\u0433\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0438 \u043C\u0430\u043B\u043E\u0433\u043E \u0431\u0438\u0437\u043D\u0435\u0441\u0430.", "setup.docker.download": "\u0421\u043A\u0430\u0447\u0430\u0442\u044C Docker", "setup.docker.start": "\u0417\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C Docker", "setup.apple.title": "Apple Container (\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E)", "setup.apple.help": "\u0411\u043E\u043B\u0435\u0435 \u043D\u0430\u0434\u0451\u0436\u043D\u0430\u044F \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u044F: \u043A\u0430\u0436\u0434\u0430\u044F \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043B\u044C\u043D\u043E\u0439 \u043C\u0430\u0448\u0438\u043D\u0435. \u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E; \u0434\u043B\u044F \u043D\u0430\u0447\u0430\u043B\u0430 \u0445\u0432\u0430\u0442\u0438\u0442 Docker.", "setup.apple.get": "\u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C Apple Container", "setup.ollama.help": "\u0417\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 AI-\u043C\u043E\u0434\u0435\u043B\u0438 (Qwen, Llama, Mistral\u2026). \u041D\u0443\u0436\u0435\u043D, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0430\u0432\u0430\u0442\u044C AI-\u043C\u043E\u0434\u0435\u043B\u0438.", "setup.ollama.download": "\u0421\u043A\u0430\u0447\u0430\u0442\u044C Ollama", "setup.ollama.start": "\u0417\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C Ollama", "setup.model.title": "AI-\u043C\u043E\u0434\u0435\u043B\u044C", "setup.model.help": "\u041C\u043E\u0434\u0435\u043B\u044C, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043C. \u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F {ram} GB \u043F\u0430\u043C\u044F\u0442\u0438: {model}.", "setup.model.download": "\u0421\u043A\u0430\u0447\u0430\u0442\u044C {model} ({size} GB)", "setup.model.none": "\u043F\u043E\u043A\u0430 \u043D\u0435\u0442", "setup.model.need_ollama": "\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u0438 \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 Ollama", "setup.nvidia.title": "\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044B GPU NVIDIA (\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E)", "setup.nvidia.help": "\u0422\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u0432 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 \u0435\u0441\u0442\u044C \u0432\u0438\u0434\u0435\u043E\u043A\u0430\u0440\u0442\u0430 NVIDIA, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u0432\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u0441\u0434\u0430\u0432\u0430\u0442\u044C.", "setup.nvidia.get": "\u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044B NVIDIA", "setup.status.running": "\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u0438 \u0437\u0430\u043F\u0443\u0449\u0435\u043D", "setup.status.installed": "\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D", "setup.status.stopped": "\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D, \u043D\u0435 \u0437\u0430\u043F\u0443\u0449\u0435\u043D", "setup.status.missing": "\u043D\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D", "setup.status.found": "\u043D\u0430\u0439\u0434\u0435\u043D", "setup.status.not_found": "\u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D", "setup.terminal": "\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0432 \u0442\u0435\u0440\u043C\u0438\u043D\u0430\u043B\u0435:", "setup.done": "\u0413\u043E\u0442\u043E\u0432\u043E", "setup.opened": "\u0413\u043E\u0442\u043E\u0432\u043E: \u043E\u0442\u043A\u0440\u044B\u0442 {file}, \u0441\u043B\u0435\u0434\u0443\u0439\u0442\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044F\u043C", "setup.recheck": "\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0441\u043D\u043E\u0432\u0430", "setup.ok.download": "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043D\u0430\u0447\u0430\u043B\u0430\u0441\u044C. \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A \u043E\u0442\u043A\u0440\u043E\u0435\u0442\u0441\u044F \u0441\u0430\u043C \u043F\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0438: \u0441\u043B\u0435\u0434\u0443\u0439\u0442\u0435 \u0435\u0433\u043E \u0448\u0430\u0433\u0430\u043C.", "setup.ok.start": "\u0417\u0430\u043F\u0443\u0441\u043A\u2026 \u044D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u043D\u044F\u0442\u044C \u0434\u043E \u043C\u0438\u043D\u0443\u0442\u044B. \u0421\u043F\u0438\u0441\u043E\u043A \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u0441\u044F \u0441\u0430\u043C.", "setup.ok.pull": "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043C\u043E\u0434\u0435\u043B\u0438 \u043D\u0430\u0447\u0430\u043B\u0430\u0441\u044C. \u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u043F\u043E\u043A\u0430\u0437\u0430\u043D \u0432\u044B\u0448\u0435.", "setup.ok.page": "\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u043E\u0442\u043A\u0440\u044B\u0442\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.", "setup.ok.recheck": "\u041F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043E \u0441\u043D\u043E\u0432\u0430.", "rules.title": "\u041F\u0440\u0430\u0432\u0438\u043B\u0430 \u0441\u0434\u0430\u0447\u0438", "rules.enabled": "\u0421\u0434\u0430\u0447\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430", "rules.enabled.help": "\u0413\u043B\u0430\u0432\u043D\u044B\u0439 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u0435\u043B\u044C. \u041A\u043E\u0433\u0434\u0430 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D, \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u0447\u0443\u0436\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0441\u0435\u0442\u044C\u044E \u0432\u044B \u043F\u043E-\u043F\u0440\u0435\u0436\u043D\u0435\u043C\u0443 \u043C\u043E\u0436\u0435\u0442\u0435.", "rules.cpus": "\u041C\u0430\u043A\u0441. CPU", "rules.cpus.help": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u044F\u0434\u0435\u0440 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0440\u0430 \u043C\u043E\u0436\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043E\u0434\u043D\u0430 \u0437\u0430\u0434\u0430\u0447\u0430. \u041F\u0440\u0438\u043C\u0435\u0440: \u043D\u0430 8-\u044F\u0434\u0435\u0440\u043D\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 2 \u043E\u0441\u0442\u0430\u0432\u0438\u0442 \u0432\u0430\u043C 6 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u044B\u0445 \u044F\u0434\u0435\u0440.", "rules.memory": "\u041C\u0430\u043A\u0441. \u043F\u0430\u043C\u044F\u0442\u044C (MB)", "rules.memory.help": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E RAM \u043C\u043E\u0436\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u0434\u0430\u0447\u0430, \u0432 \u043C\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430\u0445 (1024 MB = 1 GB). BitPull \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u043F\u043E\u043B\u043E\u0432\u0438\u043D\u044B \u043F\u0430\u043C\u044F\u0442\u0438 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430.", "rules.gpu": "GPU", "rules.gpu.none": "\u041D\u0435\u0442", "rules.gpu.consumer": "\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0430\u044F (8\u201312 GB)", "rules.gpu.high": "\u0422\u043E\u043F\u043E\u0432\u0430\u044F (16\u201324 GB)", "rules.gpu.datacenter": "\u0414\u043B\u044F \u0434\u0430\u0442\u0430-\u0446\u0435\u043D\u0442\u0440\u043E\u0432 (40 GB+)", "rules.gpu.help": "\u0412\u0438\u0434\u0435\u043E\u043A\u0430\u0440\u0442\u0430, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u0432\u044B \u0441\u0434\u0430\u0451\u0442\u0435, \u043F\u043E \u043E\u0431\u044A\u0451\u043C\u0443 \u0432\u0438\u0434\u0435\u043E\u043F\u0430\u043C\u044F\u0442\u0438. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \xAB\u041D\u0435\u0442\xBB, \u0435\u0441\u043B\u0438 \u0434\u0438\u0441\u043A\u0440\u0435\u0442\u043D\u043E\u0439 GPU \u043D\u0435\u0442 \u0438\u043B\u0438 \u0432\u044B \u043D\u0435 \u0445\u043E\u0442\u0438\u0442\u0435 \u0435\u0451 \u0441\u0434\u0430\u0432\u0430\u0442\u044C. GPU \u043F\u0440\u0438\u043D\u043E\u0441\u0438\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u0432\u0441\u0435\u0433\u043E \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432.", "rules.containers": "\u041A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u043D\u044B\u0435 \u0437\u0430\u0434\u0430\u0447\u0438", "rules.containers.help": "\u0421\u0431\u043E\u0440\u043A\u0438, \u0442\u0435\u0441\u0442\u044B \u0438 \u0441\u043A\u0440\u0438\u043F\u0442\u044B \u0434\u0440\u0443\u0433\u0438\u0445 \u043B\u044E\u0434\u0435\u0439 \u0432 \u043F\u0435\u0441\u043E\u0447\u043D\u0438\u0446\u0435 \u0431\u0435\u0437 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0430 \u0438 \u0431\u0435\u0437 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0432\u0430\u0448\u0438\u043C \u0444\u0430\u0439\u043B\u0430\u043C. \u041D\u0443\u0436\u0435\u043D Docker (\u0438\u043B\u0438 Apple Container): \u0441\u043C. \xAB\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430\xBB.", "rules.models": "\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 (Ollama)", "rules.models.help": "\u041E\u0442\u0432\u0435\u0447\u0430\u0442\u044C \u043D\u0430 AI-\u0437\u0430\u043F\u0440\u043E\u0441\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u043C\u0438 \u043C\u043E\u0434\u0435\u043B\u044F\u043C\u0438, \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u043C\u0438 \u0432 Ollama \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435. \u041D\u0443\u0436\u043D\u044B Ollama \u0438 \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u043D\u0430 \u043C\u043E\u0434\u0435\u043B\u044C.", "rules.idle": "\u0422\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \u043C\u0438\u043D\u0443\u0442 \u043F\u0440\u043E\u0441\u0442\u043E\u044F", "rules.idle.help": "\u0421\u0434\u0430\u0432\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u0432\u044B \u043D\u0435 \u0442\u0440\u043E\u0433\u0430\u043B\u0438 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0438 \u043C\u044B\u0448\u044C \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u043C\u0438\u043D\u0443\u0442. 0 = \u0441\u0434\u0430\u0432\u0430\u0442\u044C \u0434\u0430\u0436\u0435 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0440\u0430\u0431\u043E\u0442\u044B.", "rules.ac": "\u0422\u043E\u043B\u044C\u043A\u043E \u043E\u0442 \u0441\u0435\u0442\u0438", "rules.ac.help": "\u041D\u0430 \u043D\u043E\u0443\u0442\u0431\u0443\u043A\u0435 \u043F\u0440\u0435\u043A\u0440\u0430\u0449\u0430\u0442\u044C \u0441\u0434\u0430\u0447\u0443 \u043F\u0440\u0438 \u0440\u0430\u0431\u043E\u0442\u0435 \u043E\u0442 \u0431\u0430\u0442\u0430\u0440\u0435\u0438, \u0447\u0442\u043E\u0431\u044B \u0435\u0451 \u043D\u0435 \u0440\u0430\u0437\u0440\u044F\u0436\u0430\u0442\u044C.", "rules.hours": "\u0422\u043E\u043B\u044C\u043A\u043E \u0441 / \u0434\u043E \u0447\u0430\u0441\u0430 (\u043F\u0443\u0441\u0442\u043E = \u0432\u0441\u0435\u0433\u0434\u0430)", "rules.hours.help": "\u0421\u0434\u0430\u0432\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u044D\u0442\u043E\u043C \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0435, \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435. \u041F\u0440\u0438\u043C\u0435\u0440: 22 \u0438 8 = \u0441 22:00 \u0434\u043E 8:00. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043E\u0431\u0430 \u043F\u043E\u043B\u044F \u043F\u0443\u0441\u0442\u044B\u043C\u0438, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0430\u0432\u0430\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0435 \u0432\u0440\u0435\u043C\u044F.", "rules.cache": "\u041A\u043E\u043F\u0438\u0438 \u0447\u0443\u0436\u0438\u0445 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0435\u0432 \u0432 \u043A\u044D\u0448\u0435", "rules.cache.help": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u043F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0445 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0435\u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439 \u0445\u0440\u0430\u043D\u0438\u0442 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440, \u0447\u0442\u043E\u0431\u044B \u043E\u043D\u0438 \u043E\u0441\u0442\u0430\u0432\u0430\u043B\u0438\u0441\u044C \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B, \u043A\u043E\u0433\u0434\u0430 \u0430\u0432\u0442\u043E\u0440\u044B \u043D\u0435 \u0432 \u0441\u0435\u0442\u0438. \u0417\u0430\u043D\u0438\u043C\u0430\u0435\u0442 \u043D\u0435\u043C\u043D\u043E\u0433\u043E \u043C\u0435\u0441\u0442\u0430 \u043D\u0430 \u0434\u0438\u0441\u043A\u0435 \u0438 \u043F\u0440\u0438\u043D\u043E\u0441\u0438\u0442 \u043A\u0440\u0435\u0434\u0438\u0442\u044B. 0 = \u043D\u0438 \u043E\u0434\u043D\u043E\u0433\u043E.", "rules.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", "rules.saved": "\u041F\u0440\u0430\u0432\u0438\u043B\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B. \u041E\u043D\u0438 \u0432\u0441\u0442\u0443\u043F\u044F\u0442 \u0432 \u0441\u0438\u043B\u0443 \u0447\u0435\u0440\u0435\u0437 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434.", "rules.hours_both": "\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u043E\u0431\u0430 \u0447\u0430\u0441\u0430 \u0438\u043B\u0438 \u043E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043E\u0431\u0430 \u043F\u0443\u0441\u0442\u044B\u043C\u0438, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0430\u0432\u0430\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0435 \u0432\u0440\u0435\u043C\u044F.", "folders.title": "\u0420\u0430\u0437\u0440\u0435\u0448\u0451\u043D\u043D\u044B\u0435 \u043F\u0430\u043F\u043A\u0438", "folders.hint": "BitPull \u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u044D\u0442\u0438 \u043F\u0430\u043F\u043A\u0438. \u0414\u043B\u044F \u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438 \u043F\u0430\u043F\u043A\u0435 \u043D\u0443\u0436\u0435\u043D \u043F\u043E\u043B\u043D\u044B\u0439 bitpull.json.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C", "folders.none": "\u041D\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043D\u043D\u044B\u0445 \u043F\u0430\u043F\u043E\u043A.", "folders.draft": "\u0427\u0435\u0440\u043D\u043E\u0432\u0438\u043A", "folders.publish": "\u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C", "folders.remove": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", "folders.need_path": "\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u043E\u043B\u043D\u044B\u0439 \u043F\u0443\u0442\u044C \u043A \u043F\u0430\u043F\u043A\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 /Users/you/projects/my-library.", "folders.added": "\u041F\u0430\u043F\u043A\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0430.", "folders.removed": "\u041F\u0430\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0430. BitPull \u0431\u043E\u043B\u044C\u0448\u0435 \u0435\u0451 \u043D\u0435 \u0447\u0438\u0442\u0430\u0435\u0442.", "folders.drafted": "\u0427\u0435\u0440\u043D\u043E\u0432\u0438\u043A \u0433\u043E\u0442\u043E\u0432: \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0444\u0430\u0439\u043B\u043E\u0432: {n}. \u041F\u0443\u0441\u0442\u044C \u0432\u0430\u0448 AI \u0437\u0430\u043F\u043E\u043B\u043D\u0438\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0438 \u0430\u043D\u043D\u043E\u0442\u0430\u0446\u0438\u0438 (\u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 prepare_publish), \u0437\u0430\u0442\u0435\u043C \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB\u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\xBB.", "folders.published": "\u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u043E \xAB{name}\xBB, \u0444\u0430\u0439\u043B\u043E\u0432: {n}.", "folders.secrets_in": "\u041D\u0430\u0439\u0434\u0435\u043D\u043E \u0432: {where}", "folders.line": "{file}, \u0441\u0442\u0440\u043E\u043A\u0430 {line}", "repos.title": "\u0412\u0430\u0448\u0438 \u043E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0438", "repos.hint": "\u041E\u0431\u043D\u043E\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u0441\u0430\u043C\u0438, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u043C\u0435\u043D\u044F\u0435\u0442\u0435 \u0444\u0430\u0439\u043B\u044B (\u043A\u0430\u0436\u0434\u044B\u0435 5 \u043C\u0438\u043D\u0443\u0442).", "repos.none": "\u041D\u0435\u0442 \u043E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0435\u0432.", "repos.withdraw": "\u0421\u043D\u044F\u0442\u044C", "repos.withdrawn": "\u0420\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0439 \u0441\u043D\u044F\u0442 \u0441 \u0441\u0435\u0442\u0438.", "ask.title": "\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 \u0432 \u0441\u0435\u0442\u0438", "ask.offers": "\u042D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442: {models}.", "ask.offers_none": "\u043D\u0435\u0442 \u043C\u043E\u0434\u0435\u043B\u0435\u0439 (\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 Ollama, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0442\u044C \u0438\u0445)", "ask.placeholder": "\u0421\u043F\u0440\u043E\u0441\u0438\u0442\u0435 \u043E\u0442\u043A\u0440\u044B\u0442\u0443\u044E \u043C\u043E\u0434\u0435\u043B\u044C \u0432 \u0441\u0435\u0442\u0438\u2026", "ask.small": "\u041C\u0430\u043B\u0430\u044F", "ask.medium": "\u0421\u0440\u0435\u0434\u043D\u044F\u044F", "ask.large": "\u0411\u043E\u043B\u044C\u0448\u0430\u044F", "ask.button": "\u0421\u043F\u0440\u043E\u0441\u0438\u0442\u044C", "ask.empty": "\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u043D\u0430\u043F\u0438\u0448\u0438\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441.", "ask.waiting": "\u0418\u0449\u0435\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u0441 \u043C\u043E\u0434\u0435\u043B\u044C\u044E\u2026 \u044D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u043D\u044F\u0442\u044C \u0434\u043E \u043C\u0438\u043D\u0443\u0442\u044B.", "ask.credits": "\u041A\u0440\u0435\u0434\u0438\u0442\u043E\u0432: {n}", "tools.title": "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B", "tools.mcp": "\u0414\u043B\u044F Claude Code \u0438 MCP-\u043A\u043B\u0438\u0435\u043D\u0442\u043E\u0432 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0432 \u0442\u0435\u0440\u043C\u0438\u043D\u0430\u043B\u0435:", "tools.openai": "\u0414\u043B\u044F \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432, \u0441\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u044B\u0445 \u0441 OpenAI: \u0431\u0430\u0437\u043E\u0432\u044B\u0439 URL", "tools.key": "\u041A\u043B\u044E\u0447 API", "tools.show": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C", "jobs.title": "\u0412\u0430\u0448\u0438 \u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438", "jobs.none": "\u041D\u0435\u0442 \u0437\u0430\u0434\u0430\u0447.", "jobs.model": "\u041C\u043E\u0434\u0435\u043B\u044C", "jobs.container": "\u041A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440", "jobs.status.queued": "\u0412 \u043E\u0447\u0435\u0440\u0435\u0434\u0438", "jobs.status.running": "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F", "jobs.status.done": "\u0413\u043E\u0442\u043E\u0432\u043E", "jobs.status.failed": "\u041E\u0448\u0438\u0431\u043A\u0430", "jobs.status.canceled": "\u041E\u0442\u043C\u0435\u043D\u0435\u043D\u043E", "jobs.cost": "\u041A\u0440\u0435\u0434\u0438\u0442\u043E\u0432: {n}", working: "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F\u2026", "err.agent_down": "BitPull \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 \u043D\u0435 \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0442. \u041E\u043D \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0441\u044F \u0441\u0430\u043C \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 30 \u0441\u0435\u043A\u0443\u043D\u0434: \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0447\u0443\u0442\u044C \u043F\u043E\u0437\u0436\u0435.", "err.server": "\u041D\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044F \u0441\u0432\u044F\u0437\u0430\u0442\u044C\u0441\u044F \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043E\u043C BitPull. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0443 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.", "err.session": "\u0421\u0435\u0430\u043D\u0441 \u043F\u0430\u043D\u0435\u043B\u0438 \u0438\u0441\u0442\u0451\u043A. \u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u0435\u0451 \u0441\u043D\u043E\u0432\u0430 \u0438\u0437 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F BitPull.", "err.billing": "\u041F\u043B\u0430\u0442\u0435\u0436\u0438 \u043F\u043E\u043A\u0430 \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u043D\u044B.", "err.no_folder": "\u0422\u0430\u043A\u043E\u0439 \u043F\u0430\u043F\u043A\u0438 \u043D\u0435\u0442 \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u0443\u0442\u044C.", "err.not_folder": "\u042D\u0442\u043E\u0442 \u043F\u0443\u0442\u044C \u0432\u0435\u0434\u0451\u0442 \u043A \u0444\u0430\u0439\u043B\u0443, \u0430 \u043D\u0435 \u043A \u043F\u0430\u043F\u043A\u0435.", "err.credits": "\u041D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432.", "err.device": "\u042D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u0435\u0449\u0451 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D. \u041D\u0435 \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0439\u0442\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 BitPull \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u043C\u0438\u043D\u0443\u0442\u0443.", "err.no_model": "\u0421\u0435\u0439\u0447\u0430\u0441 \u043D\u0438 \u043E\u0434\u0438\u043D \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u0432 \u0441\u0435\u0442\u0438 \u043D\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 AI-\u043C\u043E\u0434\u0435\u043B\u044C. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043F\u043E\u0437\u0436\u0435.", "err.invalid": "\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u043E\u043B\u044F \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.", "tip.lang": "\u042F\u0437\u044B\u043A \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F. \u0412\u0430\u0448 \u0432\u044B\u0431\u043E\u0440 \u0437\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435.", "tip.buy.base": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043E\u043F\u043B\u0430\u0442\u044B \u0442\u0430\u0440\u0438\u0444\u0430 Base: \u20AC4.50 \u0432 \u043C\u0435\u0441\u044F\u0446 \u0438 80 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432 \u043A\u0430\u0436\u0434\u044B\u0439 \u043C\u0435\u0441\u044F\u0446. \u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043C\u043E\u0436\u043D\u043E \u0432 \u043B\u044E\u0431\u043E\u0439 \u043C\u043E\u043C\u0435\u043D\u0442.", "tip.buy.pro": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043E\u043F\u043B\u0430\u0442\u044B \u0442\u0430\u0440\u0438\u0444\u0430 Pro: \u20AC9.90 \u0432 \u043C\u0435\u0441\u044F\u0446, 200 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432 \u043A\u0430\u0436\u0434\u044B\u0439 \u043C\u0435\u0441\u044F\u0446, \u043D\u0430\u0438\u0432\u044B\u0441\u0448\u0438\u0439 \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 \u0438 \u0432\u0441\u0435 GPU. \u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043C\u043E\u0436\u043D\u043E \u0432 \u043B\u044E\u0431\u043E\u0439 \u043C\u043E\u043C\u0435\u043D\u0442.", "tip.buy.recharge": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043E\u043F\u043B\u0430\u0442\u044B, \u0447\u0442\u043E\u0431\u044B \u0440\u0430\u0437\u043E\u0432\u043E \u043A\u0443\u043F\u0438\u0442\u044C 80 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432 \u0437\u0430 \u20AC5. \u041E\u043D\u0438 \u043D\u0435 \u0441\u0433\u043E\u0440\u0430\u044E\u0442.", "tip.pause": "\u0421\u0440\u0430\u0437\u0443 \u043F\u0440\u0435\u043A\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0434\u0430\u0447\u0443. \u0417\u0430\u0434\u0430\u0447\u0430, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0432 \u044D\u0442\u043E\u0442 \u043C\u043E\u043C\u0435\u043D\u0442, \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044F \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0443. \u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C.", "tip.resume": "\u0421\u043D\u043E\u0432\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442 \u0441\u0434\u0430\u0447\u0443 \u043F\u043E \u0432\u0430\u0448\u0438\u043C \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u0441\u0434\u0430\u0447\u0438.", "tip.rules.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0441\u0434\u0430\u0447\u0438 \u0432\u044B\u0448\u0435. \u041E\u043D\u0438 \u0432\u0441\u0442\u0443\u043F\u0430\u044E\u0442 \u0432 \u0441\u0438\u043B\u0443 \u0437\u0430 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434; \u043F\u043E\u043A\u0430 \u0432\u044B \u043D\u0435 \u043D\u0430\u0436\u043C\u0451\u0442\u0435 \u044D\u0442\u0443 \u043A\u043D\u043E\u043F\u043A\u0443, \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F.", "tip.folder.add": "\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 BitPull \u0447\u0438\u0442\u0430\u0442\u044C \u043F\u0430\u043F\u043A\u0443, \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u0443\u044E \u0441\u043B\u0435\u0432\u0430. \u0424\u0430\u0439\u043B\u044B \u0432\u043D\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043D\u043D\u044B\u0445 \u043F\u0430\u043F\u043E\u043A \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0447\u0438\u0442\u0430\u044E\u0442\u0441\u044F \u0438 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u044E\u0442\u0441\u044F.", "tip.folder.draft": "\u0421\u043E\u0437\u0434\u0430\u0451\u0442 \u0432 \u043F\u0430\u043F\u043A\u0435 bitpull.json: \u0441\u043F\u0438\u0441\u043E\u043A \u0435\u0451 \u0444\u0430\u0439\u043B\u043E\u0432 \u0441 \u043F\u0443\u0441\u0442\u044B\u043C\u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0437\u0430\u043F\u043E\u043B\u043D\u0438\u0442 \u0432\u0430\u0448 AI. \u041F\u043E\u043A\u0430 \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043F\u0443\u0431\u043B\u0438\u043A\u0443\u0435\u0442\u0441\u044F.", "tip.folder.publish": "\u041F\u0443\u0431\u043B\u0438\u043A\u0443\u0435\u0442 \u044D\u0442\u0443 \u043F\u0430\u043F\u043A\u0443 \u0432 \u0441\u0435\u0442\u0438 \u043A\u0430\u043A \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0439, \u043F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u043D\u044B\u0439 \u044D\u0442\u0438\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043E\u043C. \u041F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u044F \u0431\u043B\u043E\u043A\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0435\u0441\u043B\u0438 \u0432 \u0444\u0430\u0439\u043B\u0430\u0445 \u043D\u0430\u0439\u0434\u0435\u043D\u044B \u043A\u043B\u044E\u0447\u0438 \u0438\u043B\u0438 \u043F\u0430\u0440\u043E\u043B\u0438.", "tip.folder.remove": "BitPull \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0447\u0438\u0442\u0430\u0442\u044C \u044D\u0442\u0443 \u043F\u0430\u043F\u043A\u0443. \u0423\u0436\u0435 \u043E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0438\u0437 \u043D\u0435\u0451 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0438 \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0435\u0442\u0438, \u043F\u043E\u043A\u0430 \u0432\u044B \u0438\u0445 \u043D\u0435 \u043E\u0442\u0437\u043E\u0432\u0451\u0442\u0435.", "tip.repo.withdraw": "\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u044D\u0442\u043E\u0442 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0439 \u0438\u0437 \u0441\u0435\u0442\u0438. \u0414\u0440\u0443\u0433\u0438\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0441\u043C\u043E\u0433\u0443\u0442 \u0435\u0433\u043E \u043D\u0430\u0439\u0442\u0438 \u0438\u043B\u0438 \u0441\u043A\u0430\u0447\u0430\u0442\u044C. \u0412\u0430\u0448\u0438 \u0444\u0430\u0439\u043B\u044B \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u043D\u0430 \u0432\u0430\u0448\u0435\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435.", "tip.ask": "\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0432\u0430\u0448 \u0432\u043E\u043F\u0440\u043E\u0441 \u0441\u043E \u0441\u043A\u0432\u043E\u0437\u043D\u044B\u043C \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0443 \u0432 \u0441\u0435\u0442\u0438, \u043D\u0430 \u043A\u043E\u0442\u043E\u0440\u043E\u043C \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043E\u0442\u043A\u0440\u044B\u0442\u0430\u044F AI-\u043C\u043E\u0434\u0435\u043B\u044C. \u0421\u0442\u043E\u0438\u0442 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432.", "tip.tier": "\u0420\u0430\u0437\u043C\u0435\u0440 \u043C\u043E\u0434\u0435\u043B\u0438: \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0430\u044F \u2014 \u0431\u044B\u0441\u0442\u0440\u0430\u044F \u0438 \u0434\u0435\u0448\u0451\u0432\u0430\u044F, \u0431\u043E\u043B\u044C\u0448\u0430\u044F \u2014 \u0443\u043C\u043D\u0435\u0435 \u0438 \u0441\u0442\u043E\u0438\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432.", "tip.show_key": "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043A\u043B\u044E\u0447, \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E AI-\u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 \u043E\u0431\u0449\u0430\u044E\u0442\u0441\u044F \u0441 BitPull. \u041D\u0438\u043A\u043E\u043C\u0443 \u0435\u0433\u043E \u043D\u0435 \u0441\u043E\u043E\u0431\u0449\u0430\u0439\u0442\u0435.", "tip.setup.download": "\u0421\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A {name} \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430 \u0432 \u043F\u0430\u043F\u043A\u0443 \xAB\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0438\xBB \u0438 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0435\u0433\u043E. \u0421\u043B\u0435\u0434\u0443\u0439\u0442\u0435 \u0435\u0433\u043E \u0448\u0430\u0433\u0430\u043C, \u0447\u0442\u043E\u0431\u044B \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0443.", "tip.setup.start": "\u0417\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 {name}: \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430 \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435, \u043D\u043E \u043D\u0435 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u0430.", "tip.setup.pull": "\u0421\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u0442 AI-\u043C\u043E\u0434\u0435\u043B\u044C {model} ({size} GB) \u0432 Ollama, \u0447\u0442\u043E\u0431\u044B \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043C\u043E\u0433 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0442\u044C \u0435\u0451 \u0434\u0440\u0443\u0433\u0438\u043C.", "tip.setup.open": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 {name} \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.", "tip.setup.recheck": "\u0421\u043D\u043E\u0432\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442, \u0447\u0442\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0438 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u043E \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435.", "update.title": "\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F", "update.current": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F: {v}", "update.latest": "\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0432\u0435\u0440\u0441\u0438\u044F: {v}", "update.button": "\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F", "update.install": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E {v} \u0441\u0435\u0439\u0447\u0430\u0441", "update.available": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0432\u0435\u0440\u0441\u0438\u044F {v}.", "update.not_in_app": "\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 BitPull. \u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u044D\u0442\u0443 \u043F\u0430\u043D\u0435\u043B\u044C \u0438\u0437 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F, \u0447\u0442\u043E\u0431\u044B \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C\u0441\u044F.", "update.state.requested": "\u041F\u0440\u043E\u0441\u0438\u043C \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C\u2026", "update.state.checking": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439\u2026", "update.state.up_to_date": "\u0423 \u0432\u0430\u0441 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0432\u0435\u0440\u0441\u0438\u044F.", "update.state.installing": "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 {v}\u2026 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0441\u044F \u0441\u0430\u043C\u043E.", "update.state.restarting": "\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 {v}\u2026", "update.state.error": "\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C: {msg}. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043F\u043E\u0437\u0436\u0435.", "tip.update": "\u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442, \u0435\u0441\u0442\u044C \u043B\u0438 \u0431\u043E\u043B\u0435\u0435 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F BitPull. \u0415\u0441\u043B\u0438 \u0435\u0441\u0442\u044C \u2014 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0435\u0451, \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u043F\u043E\u0434\u043F\u0438\u0441\u044C, \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442 \u0438 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435. \u0421\u0434\u0430\u0447\u0430 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430 \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434.", "tools.hint": "\u041F\u043E\u0437\u0432\u043E\u043B\u044C\u0442\u0435 \u0432\u0430\u0448\u0435\u043C\u0443 AI-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0443 \u0438\u0441\u043A\u0430\u0442\u044C \u0432 \u043E\u0431\u0449\u0435\u043C \u043A\u043E\u0434\u0435 \u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 \u0438 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u044B \u0441\u0435\u0442\u0438. \u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442:", "tools.connect": "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C", "tools.connected": "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E", "tools.copy": "\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C", "tools.copied": "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E.", "tools.installed": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E", "tools.not_found": "\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435", "tools.done": "\u0413\u043E\u0442\u043E\u0432\u043E. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 {name}, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u0447\u0430\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F BitPull.", "tools.manual": "\u0427\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u0440\u0443\u0447\u043D\u0443\u044E:", "tools.config_invalid": "\u0424\u0430\u0439\u043B \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A {name} \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u043C JSON, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 BitPull \u043D\u0435 \u0441\u0442\u0430\u043B \u0435\u0433\u043E \u043C\u0435\u043D\u044F\u0442\u044C. \u0418\u0441\u043F\u0440\u0430\u0432\u044C\u0442\u0435 \u0444\u0430\u0439\u043B \u0438\u043B\u0438 \u0434\u043E\u0431\u0430\u0432\u044C\u0442\u0435 BitPull \u0432\u0440\u0443\u0447\u043D\u0443\u044E \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \xAB\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C\xBB.", "tip.tools.connect": "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 BitPull \u0432 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 {name}. \u0420\u0435\u0437\u0435\u0440\u0432\u043D\u0430\u044F \u043A\u043E\u043F\u0438\u044F \u043F\u0440\u0435\u0436\u043D\u0438\u0445 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442\u0441\u044F \u0440\u044F\u0434\u043E\u043C \u0441 \u043D\u0438\u043C\u0438.", "tip.tools.copy": "\u041A\u043E\u043F\u0438\u0440\u0443\u0435\u0442 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0438\u043B\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430, \u0447\u0442\u043E\u0431\u044B \u0432\u044B \u0441\u0430\u043C\u0438 \u0434\u043E\u0431\u0430\u0432\u0438\u043B\u0438 BitPull \u0432 {name}.", "models.title": "\u041C\u043E\u0434\u0435\u043B\u0438 \u0418\u0418 \u0434\u043B\u044F \u043E\u0431\u0449\u0435\u0433\u043E \u0434\u043E\u0441\u0442\u0443\u043F\u0430", "models.hint": "\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 \u043B\u044E\u0431\u044B\u0445 \u0442\u0438\u043F\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043C\u043E\u0436\u0435\u0442 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0442\u044C. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u043C\u043E\u0434\u0435\u043B\u0438, \u043B\u0438\u0446\u0435\u043D\u0437\u0438\u044F \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043E\u0431\u0441\u043B\u0443\u0436\u0438\u0432\u0430\u0442\u044C \u0434\u0440\u0443\u0433\u0438\u0445. \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u044E\u0442\u0441\u044F \u0441\u0435\u0442\u0438, \u043F\u043E\u043A\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432.", "models.engine.title": "\u0414\u0432\u0438\u0436\u043E\u043A \u0434\u043B\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439, \u0440\u0435\u0447\u0438 \u0438 \u043C\u0443\u0437\u044B\u043A\u0438", "models.engine.help": "Lemonade (\u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u043A\u043E\u0434): \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439, \u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u0432\u0430\u043D\u0438\u0435 \u0438 \u0441\u0438\u043D\u0442\u0435\u0437 \u0440\u0435\u0447\u0438, \u043C\u0443\u0437\u044B\u043A\u0430, \u0440\u0430\u043D\u0436\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0438 \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0438\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. \u0423\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0432\u043D\u0443\u0442\u0440\u044C BitPull, \u0431\u0435\u0437 \u043F\u0440\u0430\u0432 \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u0430.", "models.engine.install": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0434\u0432\u0438\u0436\u043E\u043A", "models.engine.repair": "\u041F\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0434\u0432\u0438\u0436\u043E\u043A", "models.engine.unsupported": "\u041D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 (\u043D\u0443\u0436\u0435\u043D Apple silicon \u0438\u043B\u0438 Windows/Linux x64)", "models.need_engine": "\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u0434\u0432\u0438\u0436\u043E\u043A", "models.not_here": "\u041D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435", "models.shared": "\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043E \xB7 \u0432 \u043E\u0431\u0449\u0435\u043C \u0434\u043E\u0441\u0442\u0443\u043F\u0435", "models.download": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C ({size} \u0413\u0411)", "models.needs_ram": "\u041D\u0443\u0436\u043D\u043E \u043E\u043A\u043E\u043B\u043E {ram} \u0413\u0411 \u043F\u0430\u043C\u044F\u0442\u0438: \u0437\u0434\u0435\u0441\u044C \u043C\u043E\u0436\u0435\u0442 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u043E", "models.recommended": "\u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F", "models.license": "\u041B\u0438\u0446\u0435\u043D\u0437\u0438\u044F", "models.ok.engine": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0434\u0432\u0438\u0436\u043A\u0430\u2026", "task.chat": "\u0422\u0435\u043A\u0441\u0442 \u0438 \u043A\u043E\u0434", "task.vision": "\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u2192 \u0442\u0435\u043A\u0441\u0442", "task.ocr": "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B (OCR)", "task.translate": "\u041F\u0435\u0440\u0435\u0432\u043E\u0434", "task.embed": "\u042D\u043C\u0431\u0435\u0434\u0434\u0438\u043D\u0433\u0438 (\u043F\u043E\u0438\u0441\u043A)", "task.rerank": "\u0420\u0430\u043D\u0436\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435", "task.image": "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439", "task.upscale": "\u0423\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0438\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439", "task.stt": "\u0420\u0435\u0447\u044C \u2192 \u0442\u0435\u043A\u0441\u0442", "task.tts": "\u0422\u0435\u043A\u0441\u0442 \u2192 \u0440\u0435\u0447\u044C", "task.music": "\u041C\u0443\u0437\u044B\u043A\u0430", "limits.title": "\u0412\u0430\u0448\u0438 \u043B\u0438\u043C\u0438\u0442\u044B \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u0438\u0445", "limits.hint": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0431\u043E\u0442\u044B \u0418\u0418 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u0438\u0445. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C \u2014 \u0431\u0435\u0437 \u043B\u0438\u043C\u0438\u0442\u0430. \u041F\u0440\u0438 \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u0438 \u043B\u0438\u043C\u0438\u0442\u0430 \u0432\u0430\u0448\u0438 \u043C\u043E\u0434\u0435\u043B\u0438 \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u044E\u0442 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0442\u044C\u0441\u044F \u0434\u043E \u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u0435\u0440\u0438\u043E\u0434\u0430.", "limits.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043B\u0438\u043C\u0438\u0442\u044B", "limits.requests": "\u0417\u0430\u043F\u0440\u043E\u0441\u044B", "limits.tokens": "\u0422\u043E\u043A\u0435\u043D\u044B", "limits.used": "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u043E", "limits.day": "\u0412 \u0434\u0435\u043D\u044C", "limits.week": "\u0412 \u043D\u0435\u0434\u0435\u043B\u044E", "limits.month": "\u0412 \u043C\u0435\u0441\u044F\u0446", "limits.none": "\u0431\u0435\u0437 \u043B\u0438\u043C\u0438\u0442\u0430", "limits.usage": "{requests} \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \xB7 {tokens} \u0442\u043E\u043A\u0435\u043D\u043E\u0432", "limits.saved": "\u041B\u0438\u043C\u0438\u0442\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B.", "tip.models.engine": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 BitPull \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u0434\u0432\u0438\u0436\u043E\u043A Lemonade, \u0447\u0442\u043E\u0431\u044B \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043C\u043E\u0433 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u0438 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439, \u0440\u0435\u0447\u0438 \u0438 \u043C\u0443\u0437\u044B\u043A\u0438.", "tip.models.download": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 {model} ({size} \u0413\u0411) \u043D\u0430 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0442\u044C \u0435\u0433\u043E \u0434\u0440\u0443\u0433\u0438\u043C. \u041F\u043E\u0437\u0436\u0435 \u0435\u0451 \u043C\u043E\u0436\u043D\u043E \u0443\u0434\u0430\u043B\u0438\u0442\u044C.", "tip.limits.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442 \u0434\u043D\u0435\u0432\u043D\u044B\u0435, \u043D\u0435\u0434\u0435\u043B\u044C\u043D\u044B\u0435 \u0438 \u043C\u0435\u0441\u044F\u0447\u043D\u044B\u0435 \u043B\u0438\u043C\u0438\u0442\u044B \u0440\u0430\u0431\u043E\u0442\u044B \u0418\u0418 \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u0438\u0445.", "lend.visible": "\u2713 \u0421\u0435\u0442\u044C \u0432\u0438\u0434\u0438\u0442 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440: {cpus} CPU, {ram} \u0413\u0411 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u0434\u0440\u0443\u0433\u0438\u043C.", "lend.invisible": "\u0421\u0435\u0442\u044C \u043F\u043E\u043A\u0430 \u043D\u0435 \u0432\u0438\u0434\u0438\u0442 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432: \u043F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435 \u0434\u043E \u043C\u0438\u043D\u0443\u0442\u044B; \u0435\u0441\u043B\u0438 \u0442\u0430\u043A \u0438 \u043E\u0441\u0442\u0430\u043D\u0435\u0442\u0441\u044F, \u043F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0443.", "lend.unusable": "\u26A0 \u042D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043F\u043E\u043A\u0430 \u043D\u0438\u043A\u0442\u043E \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C: \u0437\u0434\u0435\u0441\u044C \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0442\u044C\u0441\u044F \u043D\u0438 \u043E\u0434\u043D\u0430 \u0437\u0430\u0434\u0430\u0447\u0430. {reason}", "lend.unusable.docker": "Docker \u043D\u0435 \u043F\u0440\u043E\u0445\u043E\u0434\u0438\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0443 \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u0438 BitPull: \u0441\u043C. \xAB\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\xBB.", "lend.unusable.off": "\u0417\u0430\u0434\u0430\u0447\u0438 \u0432 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0430\u0445 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u044B \u0438 \u043D\u0438 \u043E\u0434\u043D\u0430 \u043C\u043E\u0434\u0435\u043B\u044C \u0418\u0418 \u043D\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430: \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \xAB\u0417\u0430\u0434\u0430\u0447\u0438 \u0432 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0430\u0445\xBB \u0438\u043B\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043C\u043E\u0434\u0435\u043B\u044C.", "lend.docker_login": "Docker \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0437\u044B: \u0435\u0433\u043E \u0432\u0445\u043E\u0434 \u0432 Docker Hub \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u0435\u043D. \u0412 Docker Desktop \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u043D\u0430 \u0441\u0432\u043E\u0439 \u0430\u043A\u043A\u0430\u0443\u043D\u0442 (\u0432\u0432\u0435\u0440\u0445\u0443 \u0441\u043F\u0440\u0430\u0432\u0430) \u2192 Sign out, \u0437\u0430\u0442\u0435\u043C \u0432\u043E\u0439\u0434\u0438\u0442\u0435 \u0441\u043D\u043E\u0432\u0430 \u0438\u043B\u0438 \u043E\u0441\u0442\u0430\u0432\u0430\u0439\u0442\u0435\u0441\u044C \u0431\u0435\u0437 \u0432\u0445\u043E\u0434\u0430. \u041F\u043E\u0441\u043B\u0435 \u044D\u0442\u043E\u0433\u043E \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0441\u043D\u043E\u0432\u0430\xBB.", "lend.off_hint": "\u041F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043E: \u043E\u0442\u043C\u0435\u0442\u044C\u0442\u0435 \xAB{enabled}\xBB \u0432 \xAB{rules}\xBB \u043D\u0438\u0436\u0435 \u0438 \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB{save}\xBB. (\xAB\u041F\u0430\u0443\u0437\u0430 / \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C\xBB \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442 \u0443\u0436\u0435 \u0432\u043A\u043B\u044E\u0447\u0451\u043D\u043D\u043E\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435.)", "lend.low_memory": "\u041F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442\u0441\u044F \u0432\u0441\u0435\u0433\u043E {mb} \u041C\u0411 \u043F\u0430\u043C\u044F\u0442\u0438: \u043F\u043E\u043C\u0435\u0441\u0442\u0438\u0442\u0441\u044F \u043C\u0430\u043B\u043E \u0437\u0430\u0434\u0430\u0447. \u0412 \xAB{rules}\xBB \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \xAB{memory}\xBB, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 4096 (= 4 \u0413\u0411), \u0438 \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB{save}\xBB.", "rules.awake": "\u041D\u0435 \u0437\u0430\u0441\u044B\u043F\u0430\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F", "rules.awake.help": "\u041F\u043E\u043A\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043B\u044F \u043A\u043E\u0433\u043E-\u0442\u043E, \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043D\u0435 \u0443\u0445\u043E\u0434\u0438\u0442 \u0432 \u0441\u043E\u043D (\u044D\u043A\u0440\u0430\u043D \u0432\u0441\u0451 \u0440\u0430\u0432\u043D\u043E \u043C\u043E\u0436\u0435\u0442 \u0433\u0430\u0441\u043D\u0443\u0442\u044C). \u041F\u043E\u0442\u043E\u043C \u0437\u0430\u0441\u044B\u043F\u0430\u0435\u0442 \u043A\u0430\u043A \u043E\u0431\u044B\u0447\u043D\u043E. \u0417\u0430\u0434\u0430\u0447\u0438 \u043D\u0435 \u043F\u0440\u0435\u0440\u044B\u0432\u0430\u044E\u0442\u0441\u044F.", "ask.wait": "\u0416\u0434\u0430\u0442\u044C \u0434\u043E (\u043C\u0438\u043D\u0443\u0442)", "ask.wait.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", "ask.wait.saved": "\u041E\u0442\u0432\u0435\u0442\u044B \u0431\u0443\u0434\u0443\u0442 \u043E\u0436\u0438\u0434\u0430\u0442\u044C\u0441\u044F \u0434\u043E {n} \u043C\u0438\u043D\u0443\u0442.", "ask.wait.range": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0447\u0438\u0441\u043B\u043E \u043C\u0438\u043D\u0443\u0442 \u043E\u0442 1 \u0434\u043E 120.", "tip.wait": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u0436\u0434\u0430\u0442\u044C \u043E\u0442\u0432\u0435\u0442\u0430 \u043C\u043E\u0434\u0435\u043B\u0435\u0439 \u0418\u0418 \u0441\u0435\u0442\u0438. \u041C\u043E\u0434\u0435\u043B\u0438 \u043D\u0430 \u0447\u0443\u0436\u043E\u043C \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0440\u0435 \u043C\u043E\u0433\u0443\u0442 \u043E\u0442\u0432\u0435\u0447\u0430\u0442\u044C \u043C\u0438\u043D\u0443\u0442\u0430\u043C\u0438. \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043C\u043E\u0436\u0435\u0442 \u0438 \u0432\u0430\u0448 \u0418\u0418." }, zh: { "lang.name": "\u4E2D\u6587", "app.title": "BitPull", "locked.text": "\u8BF7\u4ECE BitPull \u5E94\u7528\u6253\u5F00\u63A7\u5236\u9762\u677F\uFF1A\u5176\u94FE\u63A5\u5305\u542B\u8BBF\u95EE\u5BC6\u94A5\u3002", "pill.online": "\u5728\u7EBF", "pill.offline": "\u79BB\u7EBF", "pill.direct": "\u76F4\u8FDE\u5730\u5740", "pill.relay_on": "\u4E2D\u7EE7\u5DF2\u8FDE\u63A5", "pill.relay_off": "\u4E2D\u7EE7\u672A\u8FDE\u63A5", "pill.cached": "{n} \u4E2A\u7F13\u5B58\u526F\u672C", "net.title": "\u5B9E\u65F6\u7F51\u7EDC", "net.online": "{n} \u53F0\u7535\u8111\u5728\u7EBF", "net.lending": "{n} \u53F0\u6B63\u5728\u51FA\u501F", "net.cpu": "{n} \u4E2A CPU \u6838\u5FC3", "net.ram": "{n} GB RAM", "net.gpu": "{n} \u4E2A GPU", "net.models": "{n} \u4E2A AI \u6A21\u578B", "net.jobs": "{n} \u4E2A\u4EFB\u52A1\u8FD0\u884C\u4E2D", "credits.title": "\u79EF\u5206\u4F59\u989D", "credits.plan": "{plan} \u5957\u9910 \xB7 \u6700\u4F4E\u53EF\u81F3 {n}", "plan.free": "\u514D\u8D39", "plan.base": "\u57FA\u7840", "plan.pro": "\u4E13\u4E1A", "buy.base": "\u57FA\u7840\u7248 \u20AC4.50", "buy.pro": "\u4E13\u4E1A\u7248 \u20AC9.90", "buy.recharge": "\u5145\u503C \u20AC5", "buy.ok": "\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u4ED8\u6B3E\u9875\u9762\u3002", "lend.title": "\u51FA\u501F\u8FD9\u53F0\u7535\u8111", "lend.hint": "\u4EFB\u52A1\u5728\u9694\u79BB\u6C99\u7BB1\u4E2D\u7AEF\u5230\u7AEF\u52A0\u5BC6\u8FD0\u884C\uFF0C\u65E0\u6CD5\u8BBF\u95EE\u4F60\u7684\u6587\u4EF6\u3002\u4F60\u53EF\u4EE5\u8D5A\u53D6\u79EF\u5206\u3002", "lend.state.off": "\u5DF2\u5173\u95ED", "lend.state.waiting": "\u7B49\u5F85\u4E2D", "lend.state.working": "\u5DE5\u4F5C\u4E2D", "lend.reason.lending_off": "\u51FA\u501F\u5DF2\u5173\u95ED", "lend.reason.paused": "\u5DF2\u6682\u505C", "lend.reason.outside_hours": "\u4E0D\u5728\u4F60\u8BBE\u5B9A\u7684\u65F6\u6BB5\u5185", "lend.reason.on_battery": "\u6B63\u5728\u4F7F\u7528\u7535\u6C60", "lend.reason.computer_in_use": "\u4F60\u6B63\u5728\u4F7F\u7528\u7535\u8111", "lend.reason.no_jobs": "\u961F\u5217\u4E2D\u6CA1\u6709\u4EFB\u52A1", "lend.running": "\u81EA {time} \u8D77\u8FD0\u884C {kind} \u4EFB\u52A1", "lend.detail": "{reason} \xB7 \u5DF2\u5B8C\u6210 {n} \u4E2A\u4EFB\u52A1 \xB7 \u63D0\u4F9B {cpus} \u4E2A CPU\u3001{ram} GB", "lend.detail.sandbox": "\uFF0C\u6C99\u7BB1 {name}", "lend.detail.models": "\uFF0C{n} \u4E2A\u6A21\u578B", "lend.pause": "\u6682\u505C", "lend.resume": "\u6062\u590D", "lend.paused_ok": "\u51FA\u501F\u5DF2\u6682\u505C\u3002\u6B63\u5728\u8FD0\u884C\u7684\u4EFB\u52A1\u5DF2\u8F6C\u4EA4\u7ED9\u53E6\u4E00\u53F0\u7535\u8111\u3002", "lend.resumed_ok": "\u51FA\u501F\u5DF2\u6062\u590D\u3002", "setup.title": "\u8BBE\u7F6E\u8FD9\u53F0\u7535\u8111", "setup.hint": "\u8FD9\u53F0\u7535\u8111\u51FA\u501F\u6240\u9700\u7684\u7EC4\u4EF6\u3002\u4F7F\u7528\u7F51\u7EDC\u5219\u65E0\u9700\u5176\u4ED6\u4EFB\u4F55\u4E1C\u897F\u3002\u5B89\u88C5\u7A0B\u5E8F\u6765\u81EA\u5B98\u65B9\u7F51\u7AD9\uFF0C\u7CFB\u7EDF\u4F1A\u8BF7\u4F60\u786E\u8BA4\u3002", "setup.checking": "\u68C0\u67E5\u4E2D\u2026", "setup.docker.help": "\u5728\u9694\u79BB\u6C99\u7BB1\u4E2D\u8FD0\u884C\u4ED6\u4EBA\u7684\u4EFB\u52A1\u3002\u5BB9\u5668\u4EFB\u52A1\u9700\u8981\u5B83\u3002\u4E2A\u4EBA\u548C\u5C0F\u578B\u4F01\u4E1A\u53EF\u514D\u8D39\u4F7F\u7528\u3002", "setup.docker.download": "\u4E0B\u8F7D Docker", "setup.docker.start": "\u542F\u52A8 Docker", "setup.apple.title": "Apple Container\uFF08\u53EF\u9009\uFF09", "setup.apple.help": "\u66F4\u5F3A\u7684\u9694\u79BB\uFF1A\u6BCF\u4E2A\u4EFB\u52A1\u8FD0\u884C\u5728\u72EC\u7ACB\u7684\u865A\u62DF\u673A\u4E2D\u3002\u53EF\u9009\uFF1B\u8D77\u6B65\u7528 Docker \u5C31\u591F\u4E86\u3002", "setup.apple.get": "\u83B7\u53D6 Apple Container", "setup.ollama.help": "\u8FD0\u884C\u5F00\u653E AI \u6A21\u578B\uFF08Qwen\u3001Llama\u3001Mistral\u2026\uFF09\u3002\u51FA\u501F AI \u6A21\u578B\u9700\u8981\u5B83\u3002", "setup.ollama.download": "\u4E0B\u8F7D Ollama", "setup.ollama.start": "\u542F\u52A8 Ollama", "setup.model.title": "AI \u6A21\u578B", "setup.model.help": "\u8FD9\u53F0\u7535\u8111\u5411\u4ED6\u4EBA\u63D0\u4F9B\u7684\u6A21\u578B\u3002\u5BF9\u4E8E {ram} GB \u5185\u5B58\uFF0C\u63A8\u8350\uFF1A{model}\u3002", "setup.model.download": "\u4E0B\u8F7D {model}\uFF08{size} GB\uFF09", "setup.model.none": "\u6682\u65E0", "setup.model.need_ollama": "\u8BF7\u5148\u5B89\u88C5\u5E76\u542F\u52A8 Ollama", "setup.nvidia.title": "NVIDIA GPU \u9A71\u52A8\uFF08\u53EF\u9009\uFF09", "setup.nvidia.help": "\u4EC5\u5F53\u8FD9\u53F0\u7535\u8111\u6709\u4F60\u60F3\u51FA\u501F\u7684 NVIDIA \u663E\u5361\u65F6\u9700\u8981\u3002", "setup.nvidia.get": "\u83B7\u53D6 NVIDIA \u9A71\u52A8", "setup.status.running": "\u5DF2\u5B89\u88C5\u5E76\u8FD0\u884C", "setup.status.installed": "\u5DF2\u5B89\u88C5", "setup.status.stopped": "\u5DF2\u5B89\u88C5\uFF0C\u672A\u8FD0\u884C", "setup.status.missing": "\u672A\u5B89\u88C5", "setup.status.found": "\u5DF2\u627E\u5230", "setup.status.not_found": "\u672A\u627E\u5230", "setup.terminal": "\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C\uFF1A", "setup.done": "\u5B8C\u6210", "setup.opened": "\u5B8C\u6210\uFF1A\u5DF2\u6253\u5F00 {file}\uFF0C\u8BF7\u6309\u6B65\u9AA4\u64CD\u4F5C", "setup.recheck": "\u91CD\u65B0\u68C0\u67E5", "setup.ok.download": "\u4E0B\u8F7D\u5DF2\u5F00\u59CB\u3002\u5B8C\u6210\u540E\u5B89\u88C5\u7A0B\u5E8F\u4F1A\u81EA\u52A8\u6253\u5F00\uFF1A\u8BF7\u6309\u5176\u6B65\u9AA4\u64CD\u4F5C\u3002", "setup.ok.start": "\u6B63\u5728\u542F\u52A8\u2026\u6700\u591A\u53EF\u80FD\u9700\u8981\u4E00\u5206\u949F\u3002\u6B64\u5217\u8868\u4F1A\u81EA\u52A8\u66F4\u65B0\u3002", "setup.ok.pull": "\u6A21\u578B\u4E0B\u8F7D\u5DF2\u5F00\u59CB\u3002\u8FDB\u5EA6\u663E\u793A\u5728\u4E0A\u65B9\u3002", "setup.ok.page": "\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u9875\u9762\u3002", "setup.ok.recheck": "\u5DF2\u91CD\u65B0\u68C0\u67E5\u3002", "rules.title": "\u51FA\u501F\u89C4\u5219", "rules.enabled": "\u5F00\u542F\u51FA\u501F", "rules.enabled.help": "\u603B\u5F00\u5173\u3002\u5173\u95ED\u540E\uFF0C\u8FD9\u53F0\u7535\u8111\u7EDD\u4E0D\u8FD0\u884C\u4ED6\u4EBA\u7684\u4EFB\u52A1\u3002\u4F60\u4ECD\u53EF\u81EA\u5DF1\u4F7F\u7528\u7F51\u7EDC\u3002", "rules.cpus": "\u6700\u5927 CPU \u6570", "rules.cpus.help": "\u4E00\u4E2A\u4EFB\u52A1\u6700\u591A\u53EF\u4F7F\u7528\u7684\u5904\u7406\u5668\u6838\u5FC3\u6570\u3002\u4F8B\u5982\uFF1A\u5728 8 \u6838\u7535\u8111\u4E0A\u8BBE\u4E3A 2\uFF0C\u4F1A\u4E3A\u4F60\u4FDD\u7559 6 \u4E2A\u6838\u5FC3\u3002", "rules.memory": "\u6700\u5927\u5185\u5B58\uFF08MB\uFF09", "rules.memory.help": "\u4E00\u4E2A\u4EFB\u52A1\u53EF\u4F7F\u7528\u7684 RAM\uFF0C\u5355\u4F4D\u4E3A MB\uFF081024 MB = 1 GB\uFF09\u3002BitPull \u7EDD\u4E0D\u4F1A\u63D0\u4F9B\u8D85\u8FC7\u8FD9\u53F0\u7535\u8111\u4E00\u534A\u7684\u5185\u5B58\u3002", "rules.gpu": "GPU", "rules.gpu.none": "\u65E0", "rules.gpu.consumer": "\u6D88\u8D39\u7EA7\uFF088\u201312 GB\uFF09", "rules.gpu.high": "\u9AD8\u7AEF\uFF0816\u201324 GB\uFF09", "rules.gpu.datacenter": "\u6570\u636E\u4E2D\u5FC3\u7EA7\uFF0840 GB+\uFF09", "rules.gpu.help": "\u6309\u663E\u5B58\u9009\u62E9\u4F60\u51FA\u501F\u7684\u663E\u5361\u3002\u5982\u679C\u6CA1\u6709\u72EC\u7ACB GPU \u6216\u4E0D\u60F3\u51FA\u501F\uFF0C\u8BF7\u4FDD\u6301\u201C\u65E0\u201D\u3002GPU \u8D5A\u53D6\u7684\u79EF\u5206\u6700\u591A\u3002", "rules.containers": "\u5BB9\u5668\u4EFB\u52A1", "rules.containers.help": "\u5728\u65E0\u7F51\u7EDC\u3001\u65E0\u6CD5\u8BBF\u95EE\u4F60\u6587\u4EF6\u7684\u6C99\u7BB1\u4E2D\u4E3A\u4ED6\u4EBA\u8FD0\u884C\u6784\u5EFA\u3001\u6D4B\u8BD5\u548C\u811A\u672C\u3002\u9700\u8981 Docker\uFF08\u6216 Apple Container\uFF09\uFF1A\u89C1\u201C\u8BBE\u7F6E\u8FD9\u53F0\u7535\u8111\u201D\u3002", "rules.models": "\u5F00\u653E\u6A21\u578B\uFF08Ollama\uFF09", "rules.models.help": "\u4F7F\u7528\u8FD9\u53F0\u7535\u8111\u4E0A Ollama \u4E2D\u5B89\u88C5\u7684\u5F00\u653E\u6A21\u578B\u56DE\u7B54 AI \u8BF7\u6C42\u3002\u9700\u8981 Ollama \u548C\u81F3\u5C11\u4E00\u4E2A\u6A21\u578B\u3002", "rules.idle": "\u4EC5\u5728\u7A7A\u95F2\u82E5\u5E72\u5206\u949F\u540E", "rules.idle.help": "\u4EC5\u5F53\u4F60\u5728\u8FD9\u4E48\u591A\u5206\u949F\u5185\u672A\u89E6\u78B0\u952E\u76D8\u6216\u9F20\u6807\u65F6\u51FA\u501F\u30020 = \u5DE5\u4F5C\u65F6\u4E5F\u51FA\u501F\u3002", "rules.ac": "\u4EC5\u5728\u63A5\u901A\u7535\u6E90\u65F6", "rules.ac.help": "\u7B14\u8BB0\u672C\u7535\u8111\u4F7F\u7528\u7535\u6C60\u65F6\u505C\u6B62\u51FA\u501F\uFF0C\u907F\u514D\u8017\u7535\u3002", "rules.hours": "\u4EC5\u9650\u8D77\u6B62\u65F6\u95F4\uFF08\u7559\u7A7A = \u59CB\u7EC8\uFF09", "rules.hours.help": "\u4EC5\u5728\u6B64\u65F6\u6BB5\u5185\u51FA\u501F\uFF0C\u91C7\u7528 24 \u5C0F\u65F6\u5236\u3002\u4F8B\u5982\uFF1A22 \u548C 8 = \u665A\u4E0A 10 \u70B9\u5230\u65E9\u4E0A 8 \u70B9\u3002\u4E24\u9879\u90FD\u7559\u7A7A\u5219\u968F\u65F6\u51FA\u501F\u3002", "rules.cache": "\u4ED6\u4EBA\u4ED3\u5E93\u7684\u7F13\u5B58\u526F\u672C", "rules.cache.help": "\u8FD9\u53F0\u7535\u8111\u4E3A\u5176\u4ED6\u7528\u6237\u4FDD\u5B58\u591A\u5C11\u4E2A\u516C\u5F00\u4ED3\u5E93\u7684\u526F\u672C\uFF0C\u4F7F\u5176\u5728\u4F5C\u8005\u79BB\u7EBF\u65F6\u4ECD\u53EF\u7528\u3002\u5360\u7528\u5C11\u91CF\u78C1\u76D8\u7A7A\u95F4\u5E76\u8D5A\u53D6\u79EF\u5206\u30020 = \u4E0D\u4FDD\u5B58\u3002", "rules.save": "\u4FDD\u5B58\u89C4\u5219", "rules.saved": "\u89C4\u5219\u5DF2\u4FDD\u5B58\uFF0C\u51E0\u79D2\u5185\u751F\u6548\u3002", "rules.hours_both": "\u8BF7\u586B\u5199\u4E24\u4E2A\u65F6\u95F4\uFF0C\u6216\u90FD\u7559\u7A7A\u4EE5\u968F\u65F6\u51FA\u501F\u3002", "folders.title": "\u5DF2\u6388\u6743\u6587\u4EF6\u5939", "folders.hint": "BitPull \u53EA\u8BFB\u53D6\u8FD9\u4E9B\u6587\u4EF6\u5939\u3002\u53D1\u5E03\u6587\u4EF6\u5939\u9700\u8981\u5B8C\u6574\u7684 bitpull.json\u3002", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u6388\u6743", "folders.none": "\u6CA1\u6709\u5DF2\u6388\u6743\u7684\u6587\u4EF6\u5939\u3002", "folders.draft": "\u8349\u7A3F", "folders.publish": "\u53D1\u5E03", "folders.remove": "\u79FB\u9664", "folders.need_path": "\u8BF7\u5148\u586B\u5199\u6587\u4EF6\u5939\u7684\u5B8C\u6574\u8DEF\u5F84\uFF0C\u4F8B\u5982 /Users/you/projects/my-library\u3002", "folders.added": "\u6587\u4EF6\u5939\u5DF2\u6388\u6743\u3002", "folders.removed": "\u6587\u4EF6\u5939\u5DF2\u79FB\u9664\uFF0CBitPull \u4E0D\u518D\u8BFB\u53D6\u5B83\u3002", "folders.drafted": "\u8349\u7A3F\u5DF2\u5C31\u7EEA\uFF1A\u627E\u5230 {n} \u4E2A\u6587\u4EF6\u3002\u8BA9\u4F60\u7684 AI \u586B\u5199\u6458\u8981\u548C\u63CF\u8FF0\uFF08prepare_publish \u5DE5\u5177\uFF09\uFF0C\u7136\u540E\u70B9\u51FB\u201C\u53D1\u5E03\u201D\u3002", "folders.published": "\u5DF2\u53D1\u5E03\u201C{name}\u201D\uFF0C\u5171 {n} \u4E2A\u6587\u4EF6\u3002", "folders.secrets_in": "\u53D1\u73B0\u4E8E\uFF1A{where}", "folders.line": "{file} \u7B2C {line} \u884C", "repos.title": "\u4F60\u53D1\u5E03\u7684\u4ED3\u5E93", "repos.hint": "\u4F60\u4FEE\u6539\u6587\u4EF6\u540E\u4F1A\u81EA\u52A8\u66F4\u65B0\uFF08\u6BCF 5 \u5206\u949F\uFF09\u3002", "repos.none": "\u6CA1\u6709\u5DF2\u53D1\u5E03\u7684\u4ED3\u5E93\u3002", "repos.withdraw": "\u64A4\u56DE", "repos.withdrawn": "\u4ED3\u5E93\u5DF2\u4ECE\u7F51\u7EDC\u64A4\u56DE\u3002", "ask.title": "\u7F51\u7EDC\u4E0A\u7684\u5F00\u653E\u6A21\u578B", "ask.offers": "\u8FD9\u53F0\u7535\u8111\u63D0\u4F9B\uFF1A{models}\u3002", "ask.offers_none": "\u65E0\u6A21\u578B\uFF08\u5B89\u88C5 Ollama \u5373\u53EF\u63D0\u4F9B\uFF09", "ask.placeholder": "\u5411\u7F51\u7EDC\u4E0A\u7684\u5F00\u653E\u6A21\u578B\u63D0\u95EE\u2026", "ask.small": "\u5C0F", "ask.medium": "\u4E2D", "ask.large": "\u5927", "ask.button": "\u63D0\u95EE", "ask.empty": "\u8BF7\u5148\u8F93\u5165\u95EE\u9898\u3002", "ask.waiting": "\u6B63\u5728\u5BFB\u627E\u6709\u8BE5\u6A21\u578B\u7684\u7535\u8111\u2026\u6700\u591A\u53EF\u80FD\u9700\u8981\u4E00\u5206\u949F\u3002", "ask.credits": "{n} \u79EF\u5206", "tools.title": "\u8FDE\u63A5\u4F60\u7684\u5DE5\u5177", "tools.mcp": "\u5BF9\u4E8E Claude Code \u548C MCP \u5BA2\u6237\u7AEF\uFF0C\u8BF7\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C\uFF1A", "tools.openai": "\u5BF9\u4E8E\u517C\u5BB9 OpenAI \u7684\u5DE5\u5177\uFF1A\u57FA\u7840 URL", "tools.key": "API \u5BC6\u94A5", "tools.show": "\u663E\u793A", "jobs.title": "\u4F60\u6700\u8FD1\u7684\u4EFB\u52A1", "jobs.none": "\u6CA1\u6709\u4EFB\u52A1\u3002", "jobs.model": "\u6A21\u578B", "jobs.container": "\u5BB9\u5668", "jobs.status.queued": "\u6392\u961F\u4E2D", "jobs.status.running": "\u8FD0\u884C\u4E2D", "jobs.status.done": "\u5DF2\u5B8C\u6210", "jobs.status.failed": "\u5931\u8D25", "jobs.status.canceled": "\u5DF2\u53D6\u6D88", "jobs.cost": "{n} \u79EF\u5206", working: "\u5904\u7406\u4E2D\u2026", "err.agent_down": "\u8FD9\u53F0\u7535\u8111\u4E0A\u7684 BitPull \u6CA1\u6709\u54CD\u5E94\u3002\u5B83\u4F1A\u5728 30 \u79D2\u5185\u81EA\u52A8\u91CD\u542F\uFF1A\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002", "err.server": "\u65E0\u6CD5\u8FDE\u63A5 BitPull \u670D\u52A1\u5668\u3002\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u540E\u91CD\u8BD5\u3002", "err.session": "\u63A7\u5236\u9762\u677F\u4F1A\u8BDD\u5DF2\u8FC7\u671F\u3002\u8BF7\u4ECE BitPull \u5E94\u7528\u91CD\u65B0\u6253\u5F00\u3002", "err.billing": "\u4ED8\u6B3E\u529F\u80FD\u5C1A\u672A\u542F\u7528\u3002", "err.no_folder": "\u8FD9\u53F0\u7535\u8111\u4E0A\u4E0D\u5B58\u5728\u6B64\u6587\u4EF6\u5939\u3002\u8BF7\u68C0\u67E5\u8DEF\u5F84\u3002", "err.not_folder": "\u6B64\u8DEF\u5F84\u662F\u6587\u4EF6\uFF0C\u4E0D\u662F\u6587\u4EF6\u5939\u3002", "err.credits": "\u79EF\u5206\u4E0D\u8DB3\u3002", "err.device": "\u8FD9\u53F0\u7535\u8111\u5C1A\u672A\u8FDE\u63A5\u3002\u8BF7\u4FDD\u6301 BitPull \u5E94\u7528\u6253\u5F00\uFF0C\u4E00\u5206\u949F\u540E\u518D\u8BD5\u3002", "err.no_model": "\u76EE\u524D\u7F51\u7EDC\u4E0A\u6CA1\u6709\u7535\u8111\u63D0\u4F9B AI \u6A21\u578B\u3002\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002", "err.invalid": "\u90E8\u5206\u6570\u503C\u65E0\u6548\u3002\u8BF7\u68C0\u67E5\u5404\u5B57\u6BB5\u540E\u91CD\u8BD5\u3002", "tip.lang": "\u5E94\u7528\u7684\u8BED\u8A00\u3002\u4F60\u7684\u9009\u62E9\u4F1A\u4FDD\u5B58\u5728\u8FD9\u53F0\u7535\u8111\u4E0A\u3002", "tip.buy.base": "\u6253\u5F00\u57FA\u7840\u5957\u9910\u7684\u5B89\u5168\u4ED8\u6B3E\u9875\u9762\uFF1A\u6BCF\u6708 \u20AC4.50\uFF0C\u6BCF\u6708\u83B7\u5F97 80 \u79EF\u5206\u3002\u4F60\u53EF\u4EE5\u968F\u65F6\u53D6\u6D88\u3002", "tip.buy.pro": "\u6253\u5F00\u4E13\u4E1A\u5957\u9910\u7684\u5B89\u5168\u4ED8\u6B3E\u9875\u9762\uFF1A\u6BCF\u6708 \u20AC9.90\uFF0C\u6BCF\u6708\u83B7\u5F97 200 \u79EF\u5206\uFF0C\u4EAB\u6709\u6700\u9AD8\u4F18\u5148\u7EA7\u5E76\u53EF\u4F7F\u7528\u6240\u6709 GPU\u3002\u4F60\u53EF\u4EE5\u968F\u65F6\u53D6\u6D88\u3002", "tip.buy.recharge": "\u6253\u5F00\u5B89\u5168\u4ED8\u6B3E\u9875\u9762\uFF0C\u4E00\u6B21\u6027\u8D2D\u4E70 80 \u79EF\u5206\uFF0C\u4EF7\u683C \u20AC5\u3002\u79EF\u5206\u6C38\u4E0D\u8FC7\u671F\u3002", "tip.pause": "\u7ACB\u5373\u505C\u6B62\u51FA\u501F\u3002\u6B64\u523B\u6B63\u5728\u8FD0\u884C\u7684\u4EFB\u52A1\u4F1A\u8F6C\u4EA4\u7ED9\u53E6\u4E00\u53F0\u7535\u8111\u3002\u518D\u6309\u4E00\u6B21\u5373\u53EF\u6062\u590D\u3002", "tip.resume": "\u6309\u7167\u4F60\u7684\u51FA\u501F\u89C4\u5219\u91CD\u65B0\u5F00\u59CB\u51FA\u501F\u3002", "tip.rules.save": "\u4FDD\u5B58\u4E0A\u65B9\u7684\u51FA\u501F\u89C4\u5219\u3002\u51E0\u79D2\u5185\u751F\u6548\uFF1B\u5728\u4F60\u6309\u4E0B\u6B64\u6309\u94AE\u4E4B\u524D\u4E0D\u4F1A\u6709\u4EFB\u4F55\u53D8\u5316\u3002", "tip.folder.add": "\u5141\u8BB8 BitPull \u8BFB\u53D6\u5DE6\u4FA7\u586B\u5199\u7684\u6587\u4EF6\u5939\u3002\u6388\u6743\u6587\u4EF6\u5939\u4EE5\u5916\u7684\u6587\u4EF6\u6C38\u8FDC\u4E0D\u4F1A\u88AB\u8BFB\u53D6\u6216\u5171\u4EAB\u3002", "tip.folder.draft": "\u5728\u6587\u4EF6\u5939\u4E2D\u521B\u5EFA bitpull.json\uFF1A\u5217\u51FA\u5176\u4E2D\u7684\u6587\u4EF6\uFF0C\u5E76\u7559\u51FA\u7A7A\u767D\u63CF\u8FF0\u4F9B\u4F60\u7684 AI \u586B\u5199\u3002\u6B64\u65F6\u5C1A\u672A\u53D1\u5E03\u4EFB\u4F55\u5185\u5BB9\u3002", "tip.folder.publish": "\u5C06\u6B64\u6587\u4EF6\u5939\u4F5C\u4E3A\u516C\u5F00\u4ED3\u5E93\u5171\u4EAB\u5230\u7F51\u7EDC\u4E0A\uFF0C\u5E76\u7531\u8FD9\u53F0\u7535\u8111\u7B7E\u540D\u3002\u5982\u679C\u5728\u6587\u4EF6\u4E2D\u53D1\u73B0\u5BC6\u94A5\u6216\u5BC6\u7801\uFF0C\u5C06\u963B\u6B62\u53D1\u5E03\u3002", "tip.folder.remove": "BitPull \u5C06\u505C\u6B62\u8BFB\u53D6\u6B64\u6587\u4EF6\u5939\u3002\u4ECE\u4E2D\u5DF2\u53D1\u5E03\u7684\u4ED3\u5E93\u4F1A\u4FDD\u6301\u5728\u7EBF\uFF0C\u76F4\u5230\u4F60\u5C06\u5176\u64A4\u56DE\u3002", "tip.repo.withdraw": "\u5C06\u6B64\u4ED3\u5E93\u4ECE\u7F51\u7EDC\u4E2D\u79FB\u9664\u3002\u5176\u4ED6\u7528\u6237\u5C06\u65E0\u6CD5\u518D\u627E\u5230\u6216\u4E0B\u8F7D\u5B83\u3002\u4F60\u7684\u6587\u4EF6\u4ECD\u4FDD\u7559\u5728\u4F60\u7684\u7535\u8111\u4E0A\u3002", "tip.ask": "\u5C06\u4F60\u7684\u95EE\u9898\u4EE5\u7AEF\u5230\u7AEF\u52A0\u5BC6\u65B9\u5F0F\u53D1\u9001\u7ED9\u7F51\u7EDC\u4E0A\u4E00\u53F0\u8FD0\u884C\u5F00\u653E AI \u6A21\u578B\u7684\u7535\u8111\u3002\u9700\u8981\u82B1\u8D39\u5C11\u91CF\u79EF\u5206\u3002", "tip.tier": "\u6A21\u578B\u5927\u5C0F\uFF1A\u5C0F\u6A21\u578B\u901F\u5EA6\u5FEB\u3001\u82B1\u8D39\u5C11\uFF1B\u5927\u6A21\u578B\u66F4\u806A\u660E\uFF0C\u4F46\u82B1\u8D39\u66F4\u591A\u79EF\u5206\u3002", "tip.show_key": "\u663E\u793A\u8FD9\u53F0\u7535\u8111\u4E0A\u7684 AI \u5DE5\u5177\u4E0E BitPull \u901A\u4FE1\u6240\u7528\u7684\u5BC6\u94A5\u3002\u8BF7\u52FF\u5206\u4EAB\u3002", "tip.setup.download": "\u5C06\u9002\u7528\u4E8E\u8FD9\u53F0\u7535\u8111\u7684 {name} \u5B98\u65B9\u5B89\u88C5\u7A0B\u5E8F\u4E0B\u8F7D\u5230\u4F60\u7684\u201C\u4E0B\u8F7D\u201D\u6587\u4EF6\u5939\u5E76\u6253\u5F00\u3002\u6309\u7167\u5176\u4E2D\u7684\u6B65\u9AA4\u5B8C\u6210\u5B89\u88C5\u3002", "tip.setup.start": "\u542F\u52A8 {name}\u3002\u5B83\u5DF2\u5B89\u88C5\u5728\u8FD9\u53F0\u7535\u8111\u4E0A\uFF0C\u4F46\u5C1A\u672A\u8FD0\u884C\u3002", "tip.setup.pull": "\u5C06 AI \u6A21\u578B {model}\uFF08{size} GB\uFF09\u4E0B\u8F7D\u5230 Ollama \u4E2D\uFF0C\u8FD9\u6837\u8FD9\u53F0\u7535\u8111\u5C31\u80FD\u628A\u5B83\u63D0\u4F9B\u7ED9\u5176\u4ED6\u4EBA\u3002", "tip.setup.open": "\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00 {name} \u7684\u5B98\u65B9\u9875\u9762\u3002", "tip.setup.recheck": "\u91CD\u65B0\u68C0\u67E5\u8FD9\u53F0\u7535\u8111\u4E0A\u5DF2\u5B89\u88C5\u548C\u6B63\u5728\u8FD0\u884C\u7684\u5185\u5BB9\u3002", "update.title": "\u5E94\u7528\u66F4\u65B0", "update.current": "\u5DF2\u5B89\u88C5\u7248\u672C\uFF1A{v}", "update.latest": "\u6700\u65B0\u7248\u672C\uFF1A{v}", "update.button": "\u68C0\u67E5\u66F4\u65B0", "update.install": "\u7ACB\u5373\u5B89\u88C5\u7248\u672C {v}", "update.available": "\u7248\u672C {v} \u53EF\u7528\u3002", "update.not_in_app": "\u66F4\u65B0\u7531 BitPull \u5E94\u7528\u5B89\u88C5\u3002\u8BF7\u4ECE\u5E94\u7528\u4E2D\u6253\u5F00\u6B64\u63A7\u5236\u9762\u677F\u8FDB\u884C\u66F4\u65B0\u3002", "update.state.requested": "\u6B63\u5728\u8BF7\u6C42\u5E94\u7528\u68C0\u67E5\u2026", "update.state.checking": "\u6B63\u5728\u68C0\u67E5\u66F4\u65B0\u2026", "update.state.up_to_date": "\u4F60\u5DF2\u662F\u6700\u65B0\u7248\u672C\u3002", "update.state.installing": "\u6B63\u5728\u4E0B\u8F7D\u5E76\u5B89\u88C5\u7248\u672C {v}\u2026\u5E94\u7528\u4F1A\u81EA\u52A8\u91CD\u542F\u3002", "update.state.restarting": "\u6B63\u5728\u4EE5\u7248\u672C {v} \u91CD\u542F\u2026", "update.state.error": "\u66F4\u65B0\u5931\u8D25\uFF1A{msg}\u3002\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002", "tip.update": "\u68C0\u67E5\u662F\u5426\u6709\u66F4\u65B0\u7248\u672C\u7684 BitPull\u3002\u5982\u6709\uFF0C\u4F1A\u4E0B\u8F7D\u3001\u9A8C\u8BC1\u7B7E\u540D\u3001\u5B89\u88C5\u5E76\u91CD\u542F\u5E94\u7528\u3002\u51FA\u501F\u4F1A\u6682\u505C\u51E0\u79D2\u949F\u3002", "tools.hint": "\u8BA9\u4F60\u7684 AI \u52A9\u624B\u641C\u7D22\u5171\u4EAB\u4EE3\u7801\uFF0C\u5E76\u4F7F\u7528\u7F51\u7EDC\u4E0A\u7684\u5F00\u653E\u6A21\u578B\u548C\u7535\u8111\u3002\u9009\u62E9\u4F60\u7684\u5DE5\u5177\uFF1A", "tools.connect": "\u8FDE\u63A5", "tools.connected": "\u5DF2\u8FDE\u63A5", "tools.copy": "\u590D\u5236", "tools.copied": "\u5DF2\u590D\u5236\u3002", "tools.installed": "\u5DF2\u5B89\u88C5", "tools.not_found": "\u8FD9\u53F0\u7535\u8111\u4E0A\u672A\u627E\u5230", "tools.done": "\u5B8C\u6210\u3002\u91CD\u542F {name} \u5373\u53EF\u5F00\u59CB\u4F7F\u7528 BitPull\u3002", "tools.manual": "\u624B\u52A8\u6DFB\u52A0\uFF1A", "tools.config_invalid": "{name} \u7684\u8BBE\u7F6E\u6587\u4EF6\u4E0D\u662F\u6709\u6548\u7684 JSON\uFF0C\u56E0\u6B64 BitPull \u6CA1\u6709\u6539\u52A8\u5B83\u3002\u8BF7\u4FEE\u590D\u8BE5\u6587\u4EF6\uFF0C\u6216\u7528\u201C\u590D\u5236\u201D\u624B\u52A8\u6DFB\u52A0 BitPull\u3002", "tip.tools.connect": "\u81EA\u52A8\u5C06 BitPull \u6DFB\u52A0\u5230 {name} \u7684\u8BBE\u7F6E\u4E2D\u3002\u4E4B\u524D\u7684\u8BBE\u7F6E\u4F1A\u5728\u65C1\u8FB9\u4FDD\u7559\u4E00\u4EFD\u5907\u4EFD\u3002", "tip.tools.copy": "\u5C06\u547D\u4EE4\u6216\u8BBE\u7F6E\u590D\u5236\u5230\u526A\u8D34\u677F\uFF0C\u4EE5\u4FBF\u4F60\u81EA\u5DF1\u628A BitPull \u6DFB\u52A0\u5230 {name}\u3002", "models.title": "\u53EF\u5171\u4EAB\u7684 AI \u6A21\u578B", "models.hint": "\u6B64\u7535\u8111\u53EF\u4EE5\u51FA\u501F\u7684\u5404\u7C7B\u5F00\u653E\u6A21\u578B\u3002\u4EC5\u5217\u51FA\u8BB8\u53EF\u8BC1\u5141\u8BB8\u4E3A\u4ED6\u4EBA\u63D0\u4F9B\u670D\u52A1\u7684\u6A21\u578B\u3002\u51FA\u501F\u5F00\u542F\u65F6\uFF0C\u5DF2\u4E0B\u8F7D\u7684\u6A21\u578B\u4F1A\u63D0\u4F9B\u7ED9\u7F51\u7EDC\u3002", "models.engine.title": "\u56FE\u50CF\u3001\u8BED\u97F3\u548C\u97F3\u4E50\u5F15\u64CE", "models.engine.help": "Lemonade\uFF08\u5F00\u6E90\uFF09\uFF1A\u56FE\u50CF\u751F\u6210\u3001\u8BED\u97F3\u8F6C\u6587\u5B57\u3001\u6587\u5B57\u8F6C\u8BED\u97F3\u3001\u97F3\u4E50\u3001\u6587\u6863\u91CD\u6392\u5E8F\u548C\u56FE\u50CF\u653E\u5927\u3002\u5B89\u88C5\u5728 BitPull \u5185\u90E8\uFF0C\u65E0\u9700\u7BA1\u7406\u5458\u6743\u9650\u3002", "models.engine.install": "\u5B89\u88C5\u5F15\u64CE", "models.engine.repair": "\u91CD\u65B0\u5B89\u88C5\u5F15\u64CE", "models.engine.unsupported": "\u6B64\u7535\u8111\u4E0D\u53EF\u7528\uFF08\u9700\u8981 Apple \u82AF\u7247\uFF0C\u6216 Windows/Linux x64\uFF09", "models.need_engine": "\u8BF7\u5148\u5B89\u88C5\u5F15\u64CE", "models.not_here": "\u6B64\u7535\u8111\u4E0D\u53EF\u7528", "models.shared": "\u5DF2\u4E0B\u8F7D \xB7 \u5DF2\u5171\u4EAB", "models.download": "\u4E0B\u8F7D\uFF08{size} GB\uFF09", "models.needs_ram": "\u9700\u8981\u7EA6 {ram} GB \u5185\u5B58\uFF1A\u5728\u6B64\u53EF\u80FD\u8F83\u6162", "models.recommended": "\u63A8\u8350", "models.license": "\u8BB8\u53EF\u8BC1", "models.ok.engine": "\u6B63\u5728\u5B89\u88C5\u5F15\u64CE\u2026", "task.chat": "\u6587\u672C\u548C\u4EE3\u7801", "task.vision": "\u56FE\u50CF \u2192 \u6587\u672C", "task.ocr": "\u6587\u6863\uFF08OCR\uFF09", "task.translate": "\u7FFB\u8BD1", "task.embed": "\u5411\u91CF\u5D4C\u5165\uFF08\u641C\u7D22\uFF09", "task.rerank": "\u91CD\u6392\u5E8F", "task.image": "\u56FE\u50CF\u751F\u6210", "task.upscale": "\u56FE\u50CF\u653E\u5927", "task.stt": "\u8BED\u97F3\u8F6C\u6587\u5B57", "task.tts": "\u6587\u5B57\u8F6C\u8BED\u97F3", "task.music": "\u97F3\u4E50", "limits.title": "\u60A8\u4E3A\u4ED6\u4EBA\u8BBE\u5B9A\u7684\u4E0A\u9650", "limits.hint": "\u6B64\u7535\u8111\u4E3A\u4ED6\u4EBA\u5B8C\u6210\u7684 AI \u5DE5\u4F5C\u91CF\u3002\u7559\u7A7A\u8868\u793A\u4E0D\u8BBE\u4E0A\u9650\u3002\u8FBE\u5230\u4E0A\u9650\u540E\uFF0C\u5728\u4E0B\u4E00\u5468\u671F\u5F00\u59CB\u524D\u4E0D\u518D\u63D0\u4F9B\u60A8\u7684\u6A21\u578B\u3002", "limits.save": "\u4FDD\u5B58\u4E0A\u9650", "limits.requests": "\u8BF7\u6C42\u6570", "limits.tokens": "Token \u6570", "limits.used": "\u5DF2\u7528", "limits.day": "\u6BCF\u5929", "limits.week": "\u6BCF\u5468", "limits.month": "\u6BCF\u6708", "limits.none": "\u4E0D\u8BBE\u4E0A\u9650", "limits.usage": "{requests} \u6B21\u8BF7\u6C42 \xB7 {tokens} \u4E2A token", "limits.saved": "\u4E0A\u9650\u5DF2\u4FDD\u5B58\u3002", "tip.models.engine": "\u5C06\u5F00\u6E90 Lemonade \u5F15\u64CE\u4E0B\u8F7D\u5230 BitPull \u4E2D\uFF0C\u4F7F\u6B64\u7535\u8111\u53EF\u4EE5\u51FA\u501F\u56FE\u50CF\u3001\u8BED\u97F3\u548C\u97F3\u4E50\u6A21\u578B\u3002", "tip.models.download": "\u5C06 {model}\uFF08{size} GB\uFF09\u4E0B\u8F7D\u5230\u6B64\u7535\u8111\uFF0C\u4EE5\u4FBF\u63D0\u4F9B\u7ED9\u4ED6\u4EBA\u3002\u4E4B\u540E\u53EF\u4EE5\u5220\u9664\u3002", "tip.limits.save": "\u4FDD\u5B58\u4E3A\u4ED6\u4EBA\u5B8C\u6210 AI \u5DE5\u4F5C\u7684\u6BCF\u65E5\u3001\u6BCF\u5468\u548C\u6BCF\u6708\u4E0A\u9650\u3002", "lend.visible": "\u2713 \u7F51\u7EDC\u80FD\u770B\u5230\u8FD9\u53F0\u7535\u8111\uFF1A{cpus} \u4E2A CPU\u3001{ram} GB \u53EF\u4F9B\u4ED6\u4EBA\u4F7F\u7528\u3002", "lend.invisible": "\u7F51\u7EDC\u5C1A\u672A\u770B\u5230\u51FA\u501F\uFF1A\u8BF7\u6700\u591A\u7B49\u5F85\u4E00\u5206\u949F\uFF1B\u5982\u679C\u4ECD\u7136\u5982\u6B64\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u3002", "lend.unusable": "\u26A0 \u8FD8\u6CA1\u6709\u4EBA\u80FD\u4F7F\u7528\u8FD9\u53F0\u7535\u8111\uFF1A\u8FD9\u91CC\u65E0\u6CD5\u8FD0\u884C\u4EFB\u4F55\u4EFB\u52A1\u3002{reason}", "lend.unusable.docker": "Docker \u672A\u901A\u8FC7 BitPull \u7684\u9694\u79BB\u68C0\u67E5\uFF1A\u8BF7\u67E5\u770B\u201C\u8BBE\u7F6E\u6B64\u7535\u8111\u201D\u3002", "lend.unusable.off": "\u5BB9\u5668\u4EFB\u52A1\u5DF2\u5173\u95ED\u4E14\u672A\u5B89\u88C5 AI \u6A21\u578B\uFF1A\u8BF7\u5F00\u542F\u201C\u5BB9\u5668\u4EFB\u52A1\u201D\u6216\u4E0B\u8F7D\u4E00\u4E2A\u6A21\u578B\u3002", "lend.docker_login": "Docker \u65E0\u6CD5\u4E0B\u8F7D\u955C\u50CF\uFF0C\u56E0\u4E3A\u5B83\u7684 Docker Hub \u767B\u5F55\u5DF2\u5931\u6548\u3002\u5728 Docker Desktop \u4E2D\u70B9\u51FB\u53F3\u4E0A\u89D2\u7684\u8D26\u6237 \u2192 Sign out\uFF0C\u7136\u540E\u91CD\u65B0\u767B\u5F55\u6216\u4FDD\u6301\u672A\u767B\u5F55\u3002\u4E4B\u540E\u70B9\u51FB\u201C\u91CD\u65B0\u68C0\u67E5\u201D\u3002", "lend.off_hint": "\u51FA\u501F\u5DF2\u5173\u95ED\uFF1A\u8BF7\u5728\u4E0B\u65B9\u201C{rules}\u201D\u4E2D\u52FE\u9009\u201C{enabled}\u201D\u5E76\u70B9\u51FB\u201C{save}\u201D\u3002\uFF08\u6682\u505C / \u7EE7\u7EED\u53EA\u4F1A\u6682\u505C\u5DF2\u5F00\u542F\u7684\u51FA\u501F\u3002\uFF09", "lend.low_memory": "\u53EA\u63D0\u4F9B\u4E86 {mb} MB \u5185\u5B58\uFF1A\u80FD\u8FD0\u884C\u7684\u4EFB\u52A1\u5F88\u5C11\u3002\u8BF7\u5728\u201C{rules}\u201D\u4E2D\u5C06\u201C{memory}\u201D\u8BBE\u4E3A\u4F8B\u5982 4096\uFF08= 4 GB\uFF09\uFF0C\u7136\u540E\u70B9\u51FB\u201C{save}\u201D\u3002", "rules.awake": "\u51FA\u501F\u65F6\u4FDD\u6301\u5524\u9192", "rules.awake.help": "\u5728\u4E3A\u4ED6\u4EBA\u8FD0\u884C\u4EFB\u52A1\u65F6\uFF0C\u8FD9\u53F0\u7535\u8111\u4E0D\u4F1A\u8FDB\u5165\u7761\u7720\uFF08\u5C4F\u5E55\u4ECD\u53EF\u5173\u95ED\uFF09\u3002\u4E4B\u540E\u7167\u5E38\u7761\u7720\u3002\u907F\u514D\u4EFB\u52A1\u88AB\u4E2D\u65AD\u3002", "ask.wait": "\u6700\u591A\u7B49\u5F85\uFF08\u5206\u949F\uFF09", "ask.wait.save": "\u4FDD\u5B58", "ask.wait.saved": "\u5C06\u6700\u591A\u7B49\u5F85 {n} \u5206\u949F\u7684\u56DE\u7B54\u3002", "ask.wait.range": "\u8BF7\u8F93\u5165 1 \u5230 120 \u4E4B\u95F4\u7684\u5206\u949F\u6570\u3002", "tip.wait": "\u7B49\u5F85\u7F51\u7EDC\u4E2D AI \u6A21\u578B\u56DE\u7B54\u7684\u6700\u957F\u65F6\u95F4\u3002\u5728\u4ED6\u4EBA\u5904\u7406\u5668\u4E0A\u8FD0\u884C\u7684\u6A21\u578B\u53EF\u80FD\u9700\u8981\u51E0\u5206\u949F\u3002\u60A8\u7684 AI \u4E5F\u53EF\u4EE5\u4FEE\u6539\u3002" } };
|
|
41
|
+
define_BITPULL_UI_I18N_default = { ar: { "lang.name": "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", "app.title": "BitPull", "locked.text": "\u0627\u0641\u062A\u062D \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u062D\u0643\u0645 \u0645\u0646 \u062A\u0637\u0628\u064A\u0642 BitPull: \u0631\u0627\u0628\u0637\u0647\u0627 \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0648\u0635\u0648\u0644.", "pill.online": "\u0645\u062A\u0635\u0644", "pill.offline": "\u063A\u064A\u0631 \u0645\u062A\u0635\u0644", "pill.direct": "\u0639\u0646\u0648\u0627\u0646 \u0645\u0628\u0627\u0634\u0631", "pill.relay_on": "\u0627\u0644\u0645\u064F\u0631\u062D\u0650\u0651\u0644 \u0645\u062A\u0635\u0644", "pill.relay_off": "\u0627\u0644\u0645\u064F\u0631\u062D\u0650\u0651\u0644 \u063A\u064A\u0631 \u0645\u062A\u0635\u0644", "pill.cached": "{n} \u0646\u0633\u062E \u0645\u062E\u0632\u0646\u0629 \u0645\u0624\u0642\u062A\u064B\u0627", "net.title": "\u0627\u0644\u0634\u0628\u0643\u0629 \u0627\u0644\u0622\u0646", "net.online": "{n} \u062D\u0648\u0627\u0633\u064A\u0628 \u0645\u062A\u0635\u0644\u0629", "net.lending": "{n} \u062A\u064F\u0639\u064A\u0631 \u0627\u0644\u0622\u0646", "net.cpu": "{n} \u0623\u0646\u0648\u064A\u0629 CPU", "net.ram": "{n} GB \u0645\u0646 RAM", "net.gpu": "{n} GPU", "net.models": "{n} \u0646\u0645\u0627\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A", "net.jobs": "{n} \u0645\u0647\u0627\u0645 \u0642\u064A\u062F \u0627\u0644\u062A\u0634\u063A\u064A\u0644", "credits.title": "\u0631\u0635\u064A\u062F \u0627\u0644\u0623\u0631\u0635\u062F\u0629", "credits.plan": "\u062E\u0637\u0629 {plan} \xB7 \u064A\u0645\u0643\u0646 \u0623\u0646 \u064A\u0646\u062E\u0641\u0636 \u062D\u062A\u0649 {n}", "plan.free": "\u0645\u062C\u0627\u0646\u064A\u0629", "plan.base": "\u0623\u0633\u0627\u0633\u064A\u0629", "plan.pro": "\u0627\u062D\u062A\u0631\u0627\u0641\u064A\u0629", "buy.base": "\u0623\u0633\u0627\u0633\u064A\u0629 \u200E\u20AC4.50", "buy.pro": "\u0627\u062D\u062A\u0631\u0627\u0641\u064A\u0629 \u200E\u20AC9.90", "buy.recharge": "\u0634\u062D\u0646 \u200E\u20AC5", "buy.ok": "\u0641\u064F\u062A\u062D\u062A \u0635\u0641\u062D\u0629 \u0627\u0644\u062F\u0641\u0639 \u0641\u064A \u0645\u062A\u0635\u0641\u062D\u0643.", "lend.title": "\u0625\u0639\u0627\u0631\u0629 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "lend.hint": "\u062A\u0639\u0645\u0644 \u0627\u0644\u0645\u0647\u0627\u0645 \u0645\u0634\u0641\u0631\u0629 \u0645\u0646 \u0637\u0631\u0641 \u0625\u0644\u0649 \u0637\u0631\u0641 \u0641\u064A \u0628\u064A\u0626\u0627\u062A \u0645\u0639\u0632\u0648\u0644\u0629\u060C \u062F\u0648\u0646 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A\u0643. \u0648\u062A\u0643\u0633\u0628 \u0623\u0631\u0635\u062F\u0629.", "lend.state.off": "\u0645\u062A\u0648\u0642\u0641", "lend.state.waiting": "\u0641\u064A \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631", "lend.state.working": "\u064A\u0639\u0645\u0644", "lend.reason.lending_off": "\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u062A\u0648\u0642\u0641\u0629", "lend.reason.paused": "\u0645\u064F\u0639\u0644\u0651\u0642\u0629 \u0645\u0624\u0642\u062A\u064B\u0627", "lend.reason.outside_hours": "\u062E\u0627\u0631\u062C \u0633\u0627\u0639\u0627\u062A\u0643", "lend.reason.on_battery": "\u064A\u0639\u0645\u0644 \u0639\u0644\u0649 \u0627\u0644\u0628\u0637\u0627\u0631\u064A\u0629", "lend.reason.computer_in_use": "\u0623\u0646\u062A \u062A\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "lend.reason.no_jobs": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u0647\u0627\u0645 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631", "lend.running": "\u064A\u0634\u063A\u0651\u0644 \u0645\u0647\u0645\u0629 {kind} \u0645\u0646\u0630 {time}", "lend.detail": "{reason} \xB7 {n} \u0645\u0647\u0627\u0645 \u0645\u0646\u062C\u0632\u0629 \xB7 \u064A\u0648\u0641\u0631 {cpus} CPU \u0648{ram} GB", "lend.detail.sandbox": "\u060C \u0628\u064A\u0626\u0629 \u0645\u0639\u0632\u0648\u0644\u0629 {name}", "lend.detail.models": "\u060C {n} \u0646\u0645\u0627\u0630\u062C", "lend.pause": "\u0625\u064A\u0642\u0627\u0641 \u0645\u0624\u0642\u062A", "lend.resume": "\u0627\u0633\u062A\u0626\u0646\u0627\u0641", "lend.paused_ok": "\u0623\u064F\u0648\u0642\u0641\u062A \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u0624\u0642\u062A\u064B\u0627. \u0633\u064F\u0644\u0651\u0645\u062A \u0623\u064A \u0645\u0647\u0645\u0629 \u062C\u0627\u0631\u064A\u0629 \u0625\u0644\u0649 \u062D\u0627\u0633\u0648\u0628 \u0622\u062E\u0631.", "lend.resumed_ok": "\u0627\u0633\u062A\u0624\u0646\u0641\u062A \u0627\u0644\u0625\u0639\u0627\u0631\u0629.", "setup.title": "\u0625\u0639\u062F\u0627\u062F \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "setup.hint": "\u0645\u0627 \u064A\u062D\u062A\u0627\u062C\u0647 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0644\u0625\u0639\u0627\u0631\u0629. \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0634\u0628\u0643\u0629 \u0644\u0627 \u064A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0634\u064A\u0621 \u0622\u062E\u0631. \u0628\u0631\u0627\u0645\u062C \u0627\u0644\u062A\u062B\u0628\u064A\u062A \u062A\u0623\u062A\u064A \u0645\u0646 \u0627\u0644\u0645\u0648\u0627\u0642\u0639 \u0627\u0644\u0631\u0633\u0645\u064A\u0629\u060C \u0648\u0633\u064A\u0637\u0644\u0628 \u0645\u0646\u0643 \u0646\u0638\u0627\u0645\u0643 \u0627\u0644\u062A\u0623\u0643\u064A\u062F.", "setup.checking": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0642\u0642\u2026", "setup.docker.help": "\u064A\u0634\u063A\u0651\u0644 \u0645\u0647\u0627\u0645 \u0627\u0644\u0622\u062E\u0631\u064A\u0646 \u0641\u064A \u0628\u064A\u0626\u0627\u062A \u0645\u0639\u0632\u0648\u0644\u0629. \u0645\u0637\u0644\u0648\u0628 \u0644\u0645\u0647\u0627\u0645 \u0627\u0644\u062D\u0627\u0648\u064A\u0627\u062A. \u0645\u062C\u0627\u0646\u064A \u0644\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0634\u062E\u0635\u064A \u0648\u0627\u0644\u0634\u0631\u0643\u0627\u062A \u0627\u0644\u0635\u063A\u064A\u0631\u0629.", "setup.docker.download": "\u062A\u0646\u0632\u064A\u0644 Docker", "setup.docker.start": "\u062A\u0634\u063A\u064A\u0644 Docker", "setup.apple.title": "Apple Container (\u0627\u062E\u062A\u064A\u0627\u0631\u064A)", "setup.apple.help": "\u0639\u0632\u0644 \u0623\u0642\u0648\u0649: \u0643\u0644 \u0645\u0647\u0645\u0629 \u0641\u064A \u062C\u0647\u0627\u0632\u0647\u0627 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A \u0627\u0644\u062E\u0627\u0635. \u0627\u062E\u062A\u064A\u0627\u0631\u064A\u061B Docker \u064A\u0643\u0641\u064A \u0644\u0644\u0628\u062F\u0621.", "setup.apple.get": "\u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 Apple Container", "setup.ollama.help": "\u064A\u0634\u063A\u0651\u0644 \u0646\u0645\u0627\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0645\u0641\u062A\u0648\u062D\u0629 (Qwen \u0648Llama \u0648Mistral\u2026). \u0645\u0637\u0644\u0648\u0628 \u0644\u0625\u0639\u0627\u0631\u0629 \u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A.", "setup.ollama.download": "\u062A\u0646\u0632\u064A\u0644 Ollama", "setup.ollama.start": "\u062A\u0634\u063A\u064A\u0644 Ollama", "setup.model.title": "\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A", "setup.model.help": "\u0627\u0644\u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0630\u064A \u064A\u0642\u062F\u0645\u0647 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0644\u0622\u062E\u0631\u064A\u0646. \u0627\u0644\u0645\u0642\u062A\u0631\u062D \u0644\u0630\u0627\u0643\u0631\u0629 {ram} GB: {model}.", "setup.model.download": "\u062A\u0646\u0632\u064A\u0644 {model} ({size} GB)", "setup.model.none": "\u0644\u0627 \u0634\u064A\u0621 \u0628\u0639\u062F", "setup.model.need_ollama": "\u062B\u0628\u0651\u062A Ollama \u0648\u0634\u063A\u0651\u0644\u0647 \u0623\u0648\u0644\u064B\u0627", "setup.nvidia.title": "\u062A\u0639\u0631\u064A\u0641\u0627\u062A NVIDIA GPU (\u0627\u062E\u062A\u064A\u0627\u0631\u064A)", "setup.nvidia.help": "\u0641\u0642\u0637 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0628\u0637\u0627\u0642\u0629 \u0631\u0633\u0648\u0645\u0627\u062A NVIDIA \u062A\u0631\u064A\u062F \u0625\u0639\u0627\u0631\u062A\u0647\u0627.", "setup.nvidia.get": "\u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u062A\u0639\u0631\u064A\u0641\u0627\u062A NVIDIA", "setup.status.running": "\u0645\u062B\u0628\u0651\u062A \u0648\u064A\u0639\u0645\u0644", "setup.status.installed": "\u0645\u062B\u0628\u0651\u062A", "setup.status.stopped": "\u0645\u062B\u0628\u0651\u062A\u060C \u0644\u0627 \u064A\u0639\u0645\u0644", "setup.status.missing": "\u063A\u064A\u0631 \u0645\u062B\u0628\u0651\u062A", "setup.status.found": "\u0645\u0648\u062C\u0648\u062F", "setup.status.not_found": "\u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F", "setup.terminal": "\u0634\u063A\u0651\u0644 \u0641\u064A \u0627\u0644\u0637\u0631\u0641\u064A\u0629:", "setup.done": "\u062A\u0645", "setup.opened": "\u062A\u0645: \u0641\u064F\u062A\u062D {file}\u060C \u0627\u062A\u0628\u0639 \u062E\u0637\u0648\u0627\u062A\u0647", "setup.recheck": "\u062A\u062D\u0642\u0642 \u0645\u062C\u062F\u062F\u064B\u0627", "setup.ok.download": "\u0628\u062F\u0623 \u0627\u0644\u062A\u0646\u0632\u064A\u0644. \u0633\u064A\u0641\u062A\u062D \u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u062A\u062B\u0628\u064A\u062A \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0639\u0646\u062F \u0627\u0644\u0627\u0646\u062A\u0647\u0627\u0621: \u0627\u062A\u0628\u0639 \u062E\u0637\u0648\u0627\u062A\u0647.", "setup.ok.start": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u0634\u063A\u064A\u0644\u2026 \u0642\u062F \u064A\u0633\u062A\u063A\u0631\u0642 \u0630\u0644\u0643 \u062D\u062A\u0649 \u062F\u0642\u064A\u0642\u0629. \u062A\u062A\u062D\u062F\u062B \u0647\u0630\u0647 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627.", "setup.ok.pull": "\u0628\u062F\u0623 \u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062C. \u064A\u0638\u0647\u0631 \u0627\u0644\u062A\u0642\u062F\u0645 \u0641\u064A \u0627\u0644\u0623\u0639\u0644\u0649.", "setup.ok.page": "\u0641\u064F\u062A\u062D\u062A \u0627\u0644\u0635\u0641\u062D\u0629 \u0641\u064A \u0645\u062A\u0635\u0641\u062D\u0643.", "setup.ok.recheck": "\u062A\u0645 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u062C\u062F\u062F\u064B\u0627.", "rules.title": "\u0642\u0648\u0627\u0639\u062F \u0627\u0644\u0625\u0639\u0627\u0631\u0629", "rules.enabled": "\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u0641\u0639\u0651\u0644\u0629", "rules.enabled.help": "\u0627\u0644\u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0631\u0626\u064A\u0633\u064A. \u0639\u0646\u062F \u0625\u064A\u0642\u0627\u0641\u0647\u060C \u0644\u0627 \u064A\u0634\u063A\u0651\u0644 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0645\u0647\u0627\u0645 \u0627\u0644\u0622\u062E\u0631\u064A\u0646 \u0623\u0628\u062F\u064B\u0627. \u0648\u064A\u0638\u0644 \u0628\u0625\u0645\u0643\u0627\u0646\u0643 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0634\u0628\u0643\u0629 \u0628\u0646\u0641\u0633\u0643.", "rules.cpus": "\u0623\u0642\u0635\u0649 \u0639\u062F\u062F CPU", "rules.cpus.help": "\u0623\u0642\u0635\u0649 \u0639\u062F\u062F \u0645\u0646 \u0623\u0646\u0648\u064A\u0629 \u0627\u0644\u0645\u0639\u0627\u0644\u062C \u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0633\u062A\u062E\u062F\u0645\u0647 \u0627\u0644\u0645\u0647\u0645\u0629. \u0645\u062B\u0627\u0644: \u0639\u0644\u0649 \u062D\u0627\u0633\u0648\u0628 \u0628\u06408 \u0623\u0646\u0648\u064A\u0629\u060C \u0627\u0644\u0642\u064A\u0645\u0629 2 \u062A\u062A\u0631\u0643 \u0644\u0643 6 \u0623\u0646\u0648\u064A\u0629 \u062D\u0631\u0629.", "rules.memory": "\u0623\u0642\u0635\u0649 \u0630\u0627\u0643\u0631\u0629 (MB)", "rules.memory.help": "\u0630\u0627\u0643\u0631\u0629 RAM \u0627\u0644\u062A\u064A \u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0633\u062A\u062E\u062F\u0645\u0647\u0627 \u0627\u0644\u0645\u0647\u0645\u0629\u060C \u0628\u0627\u0644\u0645\u064A\u063A\u0627\u0628\u0627\u064A\u062A (1024 MB = 1 GB). \u0644\u0627 \u064A\u0639\u0631\u0636 BitPull \u0623\u0628\u062F\u064B\u0627 \u0623\u0643\u062B\u0631 \u0645\u0646 \u0646\u0635\u0641 \u0630\u0627\u0643\u0631\u0629 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628.", "rules.gpu": "GPU", "rules.gpu.none": "\u0644\u0627 \u0634\u064A\u0621", "rules.gpu.consumer": "\u0627\u0633\u062A\u0647\u0644\u0627\u0643\u064A\u0629 (8\u201312 GB)", "rules.gpu.high": "\u0645\u062A\u0642\u062F\u0645\u0629 (16\u201324 GB)", "rules.gpu.datacenter": "\u0645\u0631\u0627\u0643\u0632 \u0628\u064A\u0627\u0646\u0627\u062A (40 GB+)", "rules.gpu.help": "\u0628\u0637\u0627\u0642\u0629 \u0627\u0644\u0631\u0633\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0639\u064A\u0631\u0647\u0627\u060C \u062D\u0633\u0628 \u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u0641\u064A\u062F\u064A\u0648. \u0627\u062A\u0631\u0643 \xAB\u0644\u0627 \u0634\u064A\u0621\xBB \u0625\u0646 \u0644\u0645 \u064A\u0643\u0646 \u0644\u062F\u064A\u0643 GPU \u0645\u062E\u0635\u0635 \u0623\u0648 \u0644\u0627 \u062A\u0631\u064A\u062F \u0625\u0639\u0627\u0631\u062A\u0647. \u0627\u0644\u0640GPU \u064A\u0643\u0633\u0628 \u0623\u0643\u062B\u0631 \u0627\u0644\u0623\u0631\u0635\u062F\u0629.", "rules.containers": "\u0645\u0647\u0627\u0645 \u0627\u0644\u062D\u0627\u0648\u064A\u0627\u062A", "rules.containers.help": "\u062A\u0634\u063A\u064A\u0644 \u0639\u0645\u0644\u064A\u0627\u062A \u0627\u0644\u0628\u0646\u0627\u0621 \u0648\u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631\u0627\u062A \u0648\u0627\u0644\u0633\u0643\u0631\u0628\u062A\u0627\u062A \u0644\u0644\u0622\u062E\u0631\u064A\u0646 \u0641\u064A \u0628\u064A\u0626\u0629 \u0645\u0639\u0632\u0648\u0644\u0629 \u062F\u0648\u0646 \u0625\u0646\u062A\u0631\u0646\u062A \u0648\u062F\u0648\u0646 \u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A\u0643. \u064A\u062A\u0637\u0644\u0628 Docker (\u0623\u0648 Apple Container): \u0631\u0627\u062C\u0639 \xAB\u0625\u0639\u062F\u0627\u062F \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628\xBB.", "rules.models": "\u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629 (Ollama)", "rules.models.help": "\u0627\u0644\u0631\u062F \u0639\u0644\u0649 \u0637\u0644\u0628\u0627\u062A \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0628\u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629 \u0627\u0644\u0645\u062B\u0628\u062A\u0629 \u0641\u064A Ollama \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628. \u064A\u062A\u0637\u0644\u0628 Ollama \u0648\u0646\u0645\u0648\u0630\u062C\u064B\u0627 \u0648\u0627\u062D\u062F\u064B\u0627 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", "rules.idle": "\u0641\u0642\u0637 \u0628\u0639\u062F \u062F\u0642\u0627\u0626\u0642 \u0645\u0646 \u0627\u0644\u062E\u0645\u0648\u0644", "rules.idle.help": "\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u0642\u0637 \u0625\u0630\u0627 \u0644\u0645 \u062A\u0644\u0645\u0633 \u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0641\u0627\u062A\u064A\u062D \u0623\u0648 \u0627\u0644\u0641\u0623\u0631\u0629 \u0637\u0648\u0627\u0644 \u0647\u0630\u0627 \u0627\u0644\u0639\u062F\u062F \u0645\u0646 \u0627\u0644\u062F\u0642\u0627\u0626\u0642. 0 = \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u062D\u062A\u0649 \u0623\u062B\u0646\u0627\u0621 \u0639\u0645\u0644\u0643.", "rules.ac": "\u0641\u0642\u0637 \u0639\u0646\u062F \u0627\u0644\u062A\u0648\u0635\u064A\u0644 \u0628\u0627\u0644\u0643\u0647\u0631\u0628\u0627\u0621", "rules.ac.help": "\u0639\u0644\u0649 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0627\u0644\u0645\u062D\u0645\u0648\u0644\u060C \u062A\u062A\u0648\u0642\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0639\u0646\u062F \u0627\u0644\u0639\u0645\u0644 \u0639\u0644\u0649 \u0627\u0644\u0628\u0637\u0627\u0631\u064A\u0629\u060C \u0641\u0644\u0627 \u062A\u0633\u062A\u0646\u0632\u0641\u0647\u0627 \u0623\u0628\u062F\u064B\u0627.", "rules.hours": "\u0641\u0642\u0637 \u0645\u0646 / \u0625\u0644\u0649 \u0633\u0627\u0639\u0629 (\u0641\u0627\u0631\u063A = \u062F\u0627\u0626\u0645\u064B\u0627)", "rules.hours.help": "\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u0642\u0637 \u0641\u064A \u0647\u0630\u0647 \u0627\u0644\u0641\u062A\u0631\u0629\u060C \u0628\u0646\u0638\u0627\u0645 24 \u0633\u0627\u0639\u0629. \u0645\u062B\u0627\u0644: 22 \u06488 = \u0645\u0646 10 \u0645\u0633\u0627\u0621\u064B \u0625\u0644\u0649 8 \u0635\u0628\u0627\u062D\u064B\u0627. \u0627\u062A\u0631\u0643 \u0627\u0644\u062D\u0642\u0644\u064A\u0646 \u0641\u0627\u0631\u063A\u064A\u0646 \u0644\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u064A \u0623\u064A \u0633\u0627\u0639\u0629.", "rules.cache": "\u0646\u0633\u062E \u0645\u062E\u0632\u0646\u0629 \u0645\u0646 \u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A \u0627\u0644\u0622\u062E\u0631\u064A\u0646", "rules.cache.help": "\u0639\u062F\u062F \u0627\u0644\u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A \u0627\u0644\u0639\u0627\u0645\u0629 \u0644\u0645\u0633\u062A\u062E\u062F\u0645\u064A\u0646 \u0622\u062E\u0631\u064A\u0646 \u0627\u0644\u062A\u064A \u064A\u062D\u062A\u0641\u0638 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0628\u0646\u0633\u062E\u0629 \u0645\u0646\u0647\u0627\u060C \u0644\u062A\u0628\u0642\u0649 \u0645\u062A\u0627\u062D\u0629 \u0639\u0646\u062F\u0645\u0627 \u064A\u0643\u0648\u0646 \u0623\u0635\u062D\u0627\u0628\u0647\u0627 \u063A\u064A\u0631 \u0645\u062A\u0635\u0644\u064A\u0646. \u064A\u0633\u062A\u062E\u062F\u0645 \u0645\u0633\u0627\u062D\u0629 \u0642\u0631\u0635 \u0635\u063A\u064A\u0631\u0629 \u0648\u064A\u0643\u0633\u0628 \u0623\u0631\u0635\u062F\u0629. 0 = \u0644\u0627 \u0634\u064A\u0621.", "rules.save": "\u062D\u0641\u0638 \u0627\u0644\u0642\u0648\u0627\u0639\u062F", "rules.saved": "\u062D\u064F\u0641\u0638\u062A \u0627\u0644\u0642\u0648\u0627\u0639\u062F. \u062A\u064F\u0637\u0628\u0651\u0642 \u062E\u0644\u0627\u0644 \u062B\u0648\u0627\u0646\u064D.", "rules.hours_both": "\u0627\u0645\u0644\u0623 \u0627\u0644\u0633\u0627\u0639\u062A\u064A\u0646\u060C \u0623\u0648 \u0627\u062A\u0631\u0643\u0647\u0645\u0627 \u0641\u0627\u0631\u063A\u062A\u064A\u0646 \u0644\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u064A \u0623\u064A \u0633\u0627\u0639\u0629.", "folders.title": "\u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0635\u0631\u0651\u062D \u0628\u0647\u0627", "folders.hint": "\u064A\u0642\u0631\u0623 BitPull \u0647\u0630\u0647 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0641\u0642\u0637. \u0644\u0646\u0634\u0631 \u0623\u062D\u062F\u0647\u0627 \u064A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0645\u0644\u0641 bitpull.json \u0645\u0643\u062A\u0645\u0644.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u062A\u0635\u0631\u064A\u062D", "folders.none": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u062C\u0644\u062F\u0627\u062A \u0645\u0635\u0631\u0651\u062D \u0628\u0647\u0627.", "folders.draft": "\u0645\u0633\u0648\u062F\u0629", "folders.publish": "\u0646\u0634\u0631", "folders.remove": "\u0625\u0632\u0627\u0644\u0629", "folders.need_path": "\u0627\u0643\u062A\u0628 \u0623\u0648\u0644\u064B\u0627 \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u0643\u0627\u0645\u0644 \u0644\u0645\u062C\u0644\u062F\u060C \u0645\u062B\u0644 /Users/you/projects/my-library.", "folders.added": "\u062A\u0645 \u0627\u0644\u062A\u0635\u0631\u064A\u062D \u0628\u0627\u0644\u0645\u062C\u0644\u062F.", "folders.removed": "\u0623\u064F\u0632\u064A\u0644 \u0627\u0644\u0645\u062C\u0644\u062F. \u0644\u0645 \u064A\u0639\u062F BitPull \u064A\u0642\u0631\u0624\u0647.", "folders.drafted": "\u0627\u0644\u0645\u0633\u0648\u062F\u0629 \u062C\u0627\u0647\u0632\u0629: \u0639\u064F\u062B\u0631 \u0639\u0644\u0649 {n} \u0645\u0644\u0641\u0627\u062A. \u062F\u0639 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0644\u062F\u064A\u0643 \u064A\u0645\u0644\u0623 \u0627\u0644\u0645\u0644\u062E\u0635 \u0648\u0627\u0644\u0623\u0648\u0635\u0627\u0641 (\u0623\u062F\u0627\u0629 prepare_publish)\u060C \u062B\u0645 \u0627\u0636\u063A\u0637 \xAB\u0646\u0634\u0631\xBB.", "folders.published": "\u0646\u064F\u0634\u0631 \xAB{name}\xBB \u0645\u0639 {n} \u0645\u0644\u0641\u0627\u062A.", "folders.secrets_in": "\u0639\u064F\u062B\u0631 \u0639\u0644\u064A\u0647 \u0641\u064A: {where}", "folders.line": "{file} \u0627\u0644\u0633\u0637\u0631 {line}", "repos.title": "\u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A\u0643 \u0627\u0644\u0645\u0646\u0634\u0648\u0631\u0629", "repos.hint": "\u062A\u062A\u062D\u062F\u062B \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0639\u0646\u062F \u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0645\u0644\u0641\u0627\u062A (\u0643\u0644 5 \u062F\u0642\u0627\u0626\u0642).", "repos.none": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A \u0645\u0646\u0634\u0648\u0631\u0629.", "repos.withdraw": "\u0633\u062D\u0628", "repos.withdrawn": "\u0633\u064F\u062D\u0628 \u0627\u0644\u0645\u0633\u062A\u0648\u062F\u0639 \u0645\u0646 \u0627\u0644\u0634\u0628\u0643\u0629.", "ask.title": "\u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629", "ask.offers": "\u064A\u0642\u062F\u0645 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628: {models}.", "ask.offers_none": "\u0644\u0627 \u0646\u0645\u0627\u0630\u062C (\u062B\u0628\u0651\u062A Ollama \u0644\u062A\u0642\u062F\u064A\u0645 \u0628\u0639\u0636\u0647\u0627)", "ask.placeholder": "\u0627\u0633\u0623\u0644 \u0646\u0645\u0648\u0630\u062C\u064B\u0627 \u0645\u0641\u062A\u0648\u062D\u064B\u0627 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629\u2026", "ask.small": "\u0635\u063A\u064A\u0631", "ask.medium": "\u0645\u062A\u0648\u0633\u0637", "ask.large": "\u0643\u0628\u064A\u0631", "ask.button": "\u0627\u0633\u0623\u0644", "ask.empty": "\u0627\u0643\u062A\u0628 \u0633\u0624\u0627\u0644\u064B\u0627 \u0623\u0648\u0644\u064B\u0627.", "ask.waiting": "\u062C\u0627\u0631\u064D \u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u062D\u0627\u0633\u0648\u0628 \u0644\u062F\u064A\u0647 \u0627\u0644\u0646\u0645\u0648\u0630\u062C\u2026 \u0642\u062F \u064A\u0633\u062A\u063A\u0631\u0642 \u0630\u0644\u0643 \u062D\u062A\u0649 \u062F\u0642\u064A\u0642\u0629.", "ask.credits": "{n} \u0623\u0631\u0635\u062F\u0629", "tools.title": "\u0627\u0631\u0628\u0637 \u0623\u062F\u0648\u0627\u062A\u0643", "tools.mcp": "\u0644\u0640Claude Code \u0648\u0639\u0645\u0644\u0627\u0621 MCP\u060C \u0634\u063A\u0651\u0644 \u0641\u064A \u0627\u0644\u0637\u0631\u0641\u064A\u0629:", "tools.openai": "\u0644\u0644\u0623\u062F\u0648\u0627\u062A \u0627\u0644\u0645\u062A\u0648\u0627\u0641\u0642\u0629 \u0645\u0639 OpenAI: \u0639\u0646\u0648\u0627\u0646 URL \u0627\u0644\u0623\u0633\u0627\u0633\u064A", "tools.key": "\u0645\u0641\u062A\u0627\u062D API", "tools.show": "\u0625\u0638\u0647\u0627\u0631", "jobs.title": "\u0645\u0647\u0627\u0645\u0643 \u0627\u0644\u0623\u062E\u064A\u0631\u0629", "jobs.none": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u0647\u0627\u0645.", "jobs.model": "\u0646\u0645\u0648\u0630\u062C", "jobs.container": "\u062D\u0627\u0648\u064A\u0629", "jobs.status.queued": "\u0641\u064A \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631", "jobs.status.running": "\u0642\u064A\u062F \u0627\u0644\u062A\u0634\u063A\u064A\u0644", "jobs.status.done": "\u0645\u0643\u062A\u0645\u0644\u0629", "jobs.status.failed": "\u0641\u0634\u0644\u062A", "jobs.status.canceled": "\u0623\u064F\u0644\u063A\u064A\u062A", "jobs.cost": "{n} \u0623\u0631\u0635\u062F\u0629", working: "\u062C\u0627\u0631\u064D \u0627\u0644\u0639\u0645\u0644\u2026", "err.agent_down": "BitPull \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0627 \u064A\u0633\u062A\u062C\u064A\u0628. \u0633\u064A\u064F\u0639\u0627\u062F \u062A\u0634\u063A\u064A\u0644\u0647 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u062E\u0644\u0627\u0644 30 \u062B\u0627\u0646\u064A\u0629: \u062D\u0627\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627 \u0628\u0639\u062F \u0642\u0644\u064A\u0644.", "err.server": "\u062A\u0639\u0630\u0651\u0631 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u062E\u0627\u062F\u0645 BitPull. \u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u062A\u0635\u0627\u0644\u0643 \u0628\u0627\u0644\u0625\u0646\u062A\u0631\u0646\u062A \u0648\u062D\u0627\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627.", "err.session": "\u0627\u0646\u062A\u0647\u062A \u062C\u0644\u0633\u0629 \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u062D\u0643\u0645 \u0647\u0630\u0647. \u0623\u0639\u062F \u0641\u062A\u062D\u0647\u0627 \u0645\u0646 \u062A\u0637\u0628\u064A\u0642 BitPull.", "err.billing": "\u0627\u0644\u0645\u062F\u0641\u0648\u0639\u0627\u062A \u063A\u064A\u0631 \u0645\u0641\u0639\u0651\u0644\u0629 \u0628\u0639\u062F.", "err.no_folder": "\u0647\u0630\u0627 \u0627\u0644\u0645\u062C\u0644\u062F \u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628. \u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0645\u0633\u0627\u0631.", "err.not_folder": "\u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0631 \u0645\u0644\u0641 \u0648\u0644\u064A\u0633 \u0645\u062C\u0644\u062F\u064B\u0627.", "err.credits": "\u0627\u0644\u0623\u0631\u0635\u062F\u0629 \u063A\u064A\u0631 \u0643\u0627\u0641\u064A\u0629.", "err.device": "\u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u063A\u064A\u0631 \u0645\u062A\u0635\u0644 \u0628\u0639\u062F. \u0623\u0628\u0642\u0650 \u062A\u0637\u0628\u064A\u0642 BitPull \u0645\u0641\u062A\u0648\u062D\u064B\u0627 \u0648\u062D\u0627\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627 \u0628\u0639\u062F \u062F\u0642\u064A\u0642\u0629.", "err.no_model": "\u0644\u0627 \u064A\u0648\u062C\u062F \u062D\u0627\u0633\u0648\u0628 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u064A\u0642\u062F\u0645 \u0646\u0645\u0648\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u062D\u0627\u0644\u064A\u064B\u0627. \u062D\u0627\u0648\u0644 \u0644\u0627\u062D\u0642\u064B\u0627.", "err.invalid": "\u0628\u0639\u0636 \u0627\u0644\u0642\u064A\u0645 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D\u0629. \u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062D\u0642\u0648\u0644 \u0648\u062D\u0627\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627.", "tip.lang": "\u0644\u063A\u0629 \u0627\u0644\u062A\u0637\u0628\u064A\u0642. \u064A\u064F\u062D\u0641\u0638 \u0627\u062E\u062A\u064A\u0627\u0631\u0643 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628.", "tip.buy.base": "\u064A\u0641\u062A\u062D \u0635\u0641\u062D\u0629 \u0627\u0644\u062F\u0641\u0639 \u0627\u0644\u0622\u0645\u0646\u0629 \u0644\u0644\u062E\u0637\u0629 \u0627\u0644\u0623\u0633\u0627\u0633\u064A\u0629: \u200E\u20AC4.50 \u0634\u0647\u0631\u064A\u064B\u0627 \u0645\u0639 80 \u0631\u0635\u064A\u062F\u064B\u0627 \u0643\u0644 \u0634\u0647\u0631. \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0625\u0644\u063A\u0627\u0621 \u0641\u064A \u0623\u064A \u0648\u0642\u062A.", "tip.buy.pro": "\u064A\u0641\u062A\u062D \u0635\u0641\u062D\u0629 \u0627\u0644\u062F\u0641\u0639 \u0627\u0644\u0622\u0645\u0646\u0629 \u0644\u0644\u062E\u0637\u0629 \u0627\u0644\u0627\u062D\u062A\u0631\u0627\u0641\u064A\u0629: \u200E\u20AC9.90 \u0634\u0647\u0631\u064A\u064B\u0627 \u0645\u0639 200 \u0631\u0635\u064A\u062F \u0643\u0644 \u0634\u0647\u0631\u060C \u0648\u0623\u0639\u0644\u0649 \u0623\u0648\u0644\u0648\u064A\u0629 \u0648\u062C\u0645\u064A\u0639 \u0648\u062D\u062F\u0627\u062A GPU. \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0625\u0644\u063A\u0627\u0621 \u0641\u064A \u0623\u064A \u0648\u0642\u062A.", "tip.buy.recharge": "\u064A\u0641\u062A\u062D \u0635\u0641\u062D\u0629 \u0627\u0644\u062F\u0641\u0639 \u0627\u0644\u0622\u0645\u0646\u0629 \u0644\u0634\u0631\u0627\u0621 80 \u0631\u0635\u064A\u062F\u064B\u0627 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0645\u0642\u0627\u0628\u0644 \u200E\u20AC5. \u0644\u0627 \u062A\u0646\u062A\u0647\u064A \u0635\u0644\u0627\u062D\u064A\u062A\u0647\u0627 \u0623\u0628\u062F\u064B\u0627.", "tip.pause": "\u064A\u0648\u0642\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0641\u0648\u0631\u064B\u0627. \u062A\u064F\u0633\u0644\u064E\u0651\u0645 \u0623\u064A \u0645\u0647\u0645\u0629 \u062C\u0627\u0631\u064A\u0629 \u0641\u064A \u0647\u0630\u0647 \u0627\u0644\u0644\u062D\u0638\u0629 \u0625\u0644\u0649 \u062D\u0627\u0633\u0648\u0628 \u0622\u062E\u0631. \u0627\u0636\u063A\u0637 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0644\u0644\u0627\u0633\u062A\u0626\u0646\u0627\u0641.", "tip.resume": "\u064A\u0633\u062A\u0623\u0646\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0648\u0641\u0642 \u0642\u0648\u0627\u0639\u062F \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643.", "tip.rules.save": "\u064A\u062D\u0641\u0638 \u0642\u0648\u0627\u0639\u062F \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0623\u0639\u0644\u0627\u0647. \u062A\u064F\u0637\u0628\u064E\u0651\u0642 \u062E\u0644\u0627\u0644 \u062B\u0648\u0627\u0646\u064D \u0642\u0644\u064A\u0644\u0629\u061B \u0648\u0644\u0627 \u064A\u062A\u063A\u064A\u0631 \u0634\u064A\u0621 \u062D\u062A\u0649 \u062A\u0636\u063A\u0637 \u0647\u0630\u0627 \u0627\u0644\u0632\u0631.", "tip.folder.add": "\u064A\u0633\u0645\u062D \u0644\u0640 BitPull \u0628\u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0645\u0643\u062A\u0648\u0628 \u0639\u0644\u0649 \u0627\u0644\u064A\u0633\u0627\u0631. \u0644\u0627 \u062A\u064F\u0642\u0631\u0623 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u062E\u0627\u0631\u062C \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0635\u0631\u0651\u062D \u0628\u0647\u0627 \u0648\u0644\u0627 \u062A\u064F\u0634\u0627\u0631\u0643 \u0623\u0628\u062F\u064B\u0627.", "tip.folder.draft": "\u064A\u064F\u0646\u0634\u0626 bitpull.json \u0641\u064A \u0627\u0644\u0645\u062C\u0644\u062F: \u0642\u0627\u0626\u0645\u0629 \u0628\u0645\u0644\u0641\u0627\u062A\u0647 \u0645\u0639 \u0623\u0648\u0635\u0627\u0641 \u0641\u0627\u0631\u063A\u0629 \u0644\u064A\u0643\u0645\u0644\u0647\u0627 \u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0627\u0644\u062E\u0627\u0635 \u0628\u0643. \u0644\u0627 \u064A\u064F\u0646\u0634\u0631 \u0634\u064A\u0621 \u0628\u0639\u062F.", "tip.folder.publish": "\u064A\u0634\u0627\u0631\u0643 \u0647\u0630\u0627 \u0627\u0644\u0645\u062C\u0644\u062F \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0643\u0645\u0633\u062A\u0648\u062F\u0639 \u0639\u0627\u0645 \u0645\u0648\u0642\u0651\u0639 \u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628. \u064A\u064F\u0645\u0646\u0639 \u0627\u0644\u0646\u0634\u0631 \u0625\u0630\u0627 \u0648\u064F\u062C\u062F\u062A \u0645\u0641\u0627\u062A\u064A\u062D \u0623\u0648 \u0643\u0644\u0645\u0627\u062A \u0645\u0631\u0648\u0631 \u0641\u064A \u0627\u0644\u0645\u0644\u0641\u0627\u062A.", "tip.folder.remove": "\u064A\u062A\u0648\u0642\u0641 BitPull \u0639\u0646 \u0642\u0631\u0627\u0621\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u062C\u0644\u062F. \u062A\u0628\u0642\u0649 \u0627\u0644\u0645\u0633\u062A\u0648\u062F\u0639\u0627\u062A \u0627\u0644\u0645\u0646\u0634\u0648\u0631\u0629 \u0645\u0646\u0647 \u0645\u062A\u0627\u062D\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u062D\u062A\u0649 \u062A\u0633\u062D\u0628\u0647\u0627.", "tip.repo.withdraw": "\u064A\u0632\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u062A\u0648\u062F\u0639 \u0645\u0646 \u0627\u0644\u0634\u0628\u0643\u0629. \u0644\u0646 \u064A\u062A\u0645\u0643\u0646 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u0648\u0646 \u0627\u0644\u0622\u062E\u0631\u0648\u0646 \u0645\u0646 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u064A\u0647 \u0623\u0648 \u062A\u0646\u0632\u064A\u0644\u0647 \u0628\u0639\u062F \u0627\u0644\u0622\u0646. \u062A\u0628\u0642\u0649 \u0645\u0644\u0641\u0627\u062A\u0643 \u0639\u0644\u0649 \u062D\u0627\u0633\u0648\u0628\u0643.", "tip.ask": "\u064A\u0631\u0633\u0644 \u0633\u0624\u0627\u0644\u0643 \u0645\u0634\u0641\u0631\u064B\u0627 \u0645\u0646 \u0637\u0631\u0641 \u0625\u0644\u0649 \u0637\u0631\u0641 \u0625\u0644\u0649 \u062D\u0627\u0633\u0648\u0628 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u064A\u0634\u063A\u0651\u0644 \u0646\u0645\u0648\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0645\u0641\u062A\u0648\u062D\u064B\u0627. \u064A\u0643\u0644\u0651\u0641 \u0628\u0636\u0639\u0629 \u0623\u0631\u0635\u062F\u0629.", "tip.tier": "\u062D\u062C\u0645 \u0627\u0644\u0646\u0645\u0648\u0630\u062C: \u0627\u0644\u0635\u063A\u064A\u0631 \u0633\u0631\u064A\u0639 \u0648\u0631\u062E\u064A\u0635\u060C \u0648\u0627\u0644\u0643\u0628\u064A\u0631 \u0623\u0630\u0643\u0649 \u0648\u064A\u0643\u0644\u0651\u0641 \u0623\u0631\u0635\u062F\u0629 \u0623\u0643\u062B\u0631.", "tip.show_key": "\u064A\u0639\u0631\u0636 \u0627\u0644\u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0630\u064A \u062A\u0633\u062A\u062E\u062F\u0645\u0647 \u0623\u062F\u0648\u0627\u062A \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0644\u062A\u0648\u0627\u0635\u0644 \u0645\u0639 BitPull. \u0644\u0627 \u062A\u0634\u0627\u0631\u0643\u0647 \u0645\u0639 \u0623\u062D\u062F.", "tip.setup.download": "\u064A\u0646\u0632\u0651\u0644 \u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u062A\u062B\u0628\u064A\u062A \u0627\u0644\u0631\u0633\u0645\u064A \u0644\u0640 {name} \u0644\u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0625\u0644\u0649 \u0645\u062C\u0644\u062F \u0627\u0644\u062A\u0646\u0632\u064A\u0644\u0627\u062A \u0648\u064A\u0641\u062A\u062D\u0647. \u0627\u062A\u0628\u0639 \u062E\u0637\u0648\u0627\u062A\u0647 \u0644\u0625\u0643\u0645\u0627\u0644 \u0627\u0644\u062A\u062B\u0628\u064A\u062A.", "tip.setup.start": "\u064A\u0634\u063A\u0651\u0644 {name}\u060C \u0648\u0647\u0648 \u0645\u062B\u0628\u0651\u062A \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0643\u0646\u0647 \u0644\u0627 \u064A\u0639\u0645\u0644.", "tip.setup.pull": "\u064A\u0646\u0632\u0651\u0644 \u0646\u0645\u0648\u0630\u062C \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u200F{model} \u200F({size} GB) \u0625\u0644\u0649 Ollama\u060C \u0644\u064A\u062A\u0645\u0643\u0646 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0645\u0646 \u062A\u0642\u062F\u064A\u0645\u0647 \u0644\u0644\u0622\u062E\u0631\u064A\u0646.", "tip.setup.open": "\u064A\u0641\u062A\u062D \u0635\u0641\u062D\u0629 {name} \u0627\u0644\u0631\u0633\u0645\u064A\u0629 \u0641\u064A \u0645\u062A\u0635\u0641\u062D\u0643.", "tip.setup.recheck": "\u064A\u062A\u062D\u0642\u0642 \u0645\u062C\u062F\u062F\u064B\u0627 \u0645\u0645\u0627 \u0647\u0648 \u0645\u062B\u0628\u0651\u062A \u0648\u064A\u0639\u0645\u0644 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628.", "update.title": "\u062A\u062D\u062F\u064A\u062B\u0627\u062A \u0627\u0644\u062A\u0637\u0628\u064A\u0642", "update.current": "\u0627\u0644\u0625\u0635\u062F\u0627\u0631 \u0627\u0644\u0645\u062B\u0628\u0651\u062A: {v}", "update.latest": "\u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631: {v}", "update.button": "\u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062A\u062D\u062F\u064A\u062B\u0627\u062A", "update.install": "\u062B\u0628\u0651\u062A \u0627\u0644\u0625\u0635\u062F\u0627\u0631 {v} \u0627\u0644\u0622\u0646", "update.available": "\u0627\u0644\u0625\u0635\u062F\u0627\u0631 {v} \u0645\u062A\u0627\u062D.", "update.not_in_app": "\u064A\u062B\u0628\u0651\u062A \u062A\u0637\u0628\u064A\u0642 BitPull \u0627\u0644\u062A\u062D\u062F\u064A\u062B\u0627\u062A. \u0627\u0641\u062A\u062D \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u062D\u0643\u0645 \u0647\u0630\u0647 \u0645\u0646 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0644\u0644\u062A\u062D\u062F\u064A\u062B.", "update.state.requested": "\u062C\u0627\u0631\u064D \u0637\u0644\u0628 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062A\u0637\u0628\u064A\u0642\u2026", "update.state.checking": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062A\u062D\u062F\u064A\u062B\u0627\u062A\u2026", "update.state.up_to_date": "\u0644\u062F\u064A\u0643 \u0623\u062D\u062F\u062B \u0625\u0635\u062F\u0627\u0631.", "update.state.installing": "\u062C\u0627\u0631\u064D \u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0625\u0635\u062F\u0627\u0631 {v} \u0648\u062A\u062B\u0628\u064A\u062A\u0647\u2026 \u0633\u064A\u064F\u0639\u0627\u062F \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627.", "update.state.restarting": "\u062C\u0627\u0631\u064D \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0634\u063A\u064A\u0644 \u0628\u0627\u0644\u0625\u0635\u062F\u0627\u0631 {v}\u2026", "update.state.error": "\u0644\u0645 \u064A\u0646\u062C\u062D \u0627\u0644\u062A\u062D\u062F\u064A\u062B: {msg}. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0644\u0627\u062D\u0642\u064B\u0627.", "tip.update": "\u064A\u062A\u062D\u0642\u0642 \u0645\u0646 \u0648\u062C\u0648\u062F \u0625\u0635\u062F\u0627\u0631 \u0623\u062D\u062F\u062B \u0645\u0646 BitPull. \u0625\u0646 \u0648\u064F\u062C\u062F\u060C \u064A\u0646\u0632\u0651\u0644\u0647 \u0648\u064A\u062A\u062D\u0642\u0642 \u0645\u0646 \u062A\u0648\u0642\u064A\u0639\u0647 \u0648\u064A\u062B\u0628\u0651\u062A\u0647 \u0648\u064A\u0639\u064A\u062F \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062A\u0637\u0628\u064A\u0642. \u062A\u062A\u0648\u0642\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0644\u0628\u0636\u0639 \u062B\u0648\u0627\u0646\u064D.", "tools.hint": "\u062F\u0639 \u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0644\u062F\u064A\u0643 \u064A\u0628\u062D\u062B \u0641\u064A \u0627\u0644\u0634\u064A\u0641\u0631\u0629 \u0627\u0644\u0645\u0634\u062A\u0631\u0643\u0629 \u0648\u064A\u0633\u062A\u062E\u062F\u0645 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0645\u0641\u062A\u0648\u062D\u0629 \u0648\u0627\u0644\u062D\u0648\u0627\u0633\u064A\u0628 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629. \u0627\u062E\u062A\u0631 \u0623\u062F\u0627\u062A\u0643:", "tools.connect": "\u0627\u0631\u0628\u0637", "tools.connected": "\u0645\u0631\u062A\u0628\u0637", "tools.copy": "\u0627\u0646\u0633\u062E", "tools.copied": "\u062A\u0645 \u0627\u0644\u0646\u0633\u062E.", "tools.installed": "\u0645\u062B\u0628\u0651\u062A", "tools.not_found": "\u063A\u064A\u0631 \u0645\u0648\u062C\u0648\u062F \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "tools.done": "\u062A\u0645. \u0623\u0639\u062F \u062A\u0634\u063A\u064A\u0644 {name} \u0644\u062A\u0628\u062F\u0623 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 BitPull.", "tools.manual": "\u0644\u0625\u0636\u0627\u0641\u062A\u0647 \u064A\u062F\u0648\u064A\u064B\u0627:", "tools.config_invalid": "\u0645\u0644\u0641 \u0625\u0639\u062F\u0627\u062F\u0627\u062A {name} \u0644\u064A\u0633 JSON \u0635\u0627\u0644\u062D\u064B\u0627\u060C \u0644\u0630\u0627 \u0644\u0645 \u064A\u0644\u0645\u0633\u0647 BitPull. \u0623\u0635\u0644\u062D \u0627\u0644\u0645\u0644\u0641 \u0623\u0648 \u0623\u0636\u0641 BitPull \u064A\u062F\u0648\u064A\u064B\u0627 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \xAB\u0627\u0646\u0633\u062E\xBB.", "tip.tools.connect": "\u064A\u0636\u064A\u0641 BitPull \u0625\u0644\u0649 \u0625\u0639\u062F\u0627\u062F\u0627\u062A {name} \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627. \u062A\u064F\u062D\u0641\u0638 \u0646\u0633\u062E\u0629 \u0627\u062D\u062A\u064A\u0627\u0637\u064A\u0629 \u0645\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0633\u0627\u0628\u0642\u0629 \u0628\u062C\u0627\u0646\u0628\u0647\u0627.", "tip.tools.copy": "\u064A\u0646\u0633\u062E \u0627\u0644\u0623\u0645\u0631 \u0623\u0648 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0625\u0644\u0649 \u0627\u0644\u062D\u0627\u0641\u0638\u0629\u060C \u0644\u062A\u0636\u064A\u0641 BitPull \u0625\u0644\u0649 {name} \u0628\u0646\u0641\u0633\u0643.", "models.title": "\u0646\u0645\u0627\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0644\u0644\u0645\u0634\u0627\u0631\u0643\u0629", "models.hint": "\u0646\u0645\u0627\u0630\u062C \u0645\u0641\u062A\u0648\u062D\u0629 \u0645\u0646 \u0643\u0644 \u0627\u0644\u0623\u0646\u0648\u0627\u0639 \u064A\u0645\u0643\u0646 \u0644\u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0625\u0639\u0627\u0631\u062A\u0647\u0627. \u0644\u0627 \u062A\u064F\u0639\u0631\u0636 \u0625\u0644\u0627 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u062A\u064A \u062A\u0633\u0645\u062D \u0631\u062E\u0635\u062A\u0647\u0627 \u0628\u062A\u0642\u062F\u064A\u0645\u0647\u0627 \u0644\u0644\u0622\u062E\u0631\u064A\u0646. \u062A\u064F\u0639\u0631\u0636 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u062A\u064A \u0646\u0632\u0651\u0644\u062A\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0645\u0627 \u062F\u0627\u0645\u062A \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u0641\u0639\u0651\u0644\u0629.", "models.engine.title": "\u0645\u062D\u0631\u0643 \u0627\u0644\u0635\u0648\u0631 \u0648\u0627\u0644\u0635\u0648\u062A \u0648\u0627\u0644\u0645\u0648\u0633\u064A\u0642\u0649", "models.engine.help": "Lemonade (\u0645\u0641\u062A\u0648\u062D \u0627\u0644\u0645\u0635\u062F\u0631): \u062A\u0648\u0644\u064A\u062F \u0627\u0644\u0635\u0648\u0631\u060C \u0648\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0643\u0644\u0627\u0645 \u0625\u0644\u0649 \u0646\u0635\u060C \u0648\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0646\u0635 \u0625\u0644\u0649 \u0643\u0644\u0627\u0645\u060C \u0648\u0627\u0644\u0645\u0648\u0633\u064A\u0642\u0649\u060C \u0648\u0625\u0639\u0627\u062F\u0629 \u062A\u0631\u062A\u064A\u0628 \u0627\u0644\u0645\u0633\u062A\u0646\u062F\u0627\u062A\u060C \u0648\u062A\u0643\u0628\u064A\u0631 \u0627\u0644\u0635\u0648\u0631. \u064A\u064F\u062B\u0628\u064E\u0651\u062A \u062F\u0627\u062E\u0644 BitPull \u062F\u0648\u0646 \u0635\u0644\u0627\u062D\u064A\u0627\u062A \u0627\u0644\u0645\u0633\u0624\u0648\u0644.", "models.engine.install": "\u062A\u062B\u0628\u064A\u062A \u0627\u0644\u0645\u062D\u0631\u0643", "models.engine.repair": "\u0625\u0639\u0627\u062F\u0629 \u062A\u062B\u0628\u064A\u062A \u0627\u0644\u0645\u062D\u0631\u0643", "models.engine.unsupported": "\u063A\u064A\u0631 \u0645\u062A\u0627\u062D \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 (\u064A\u062A\u0637\u0644\u0628 Apple silicon\u060C \u0623\u0648 Windows/Linux x64)", "models.need_engine": "\u062B\u0628\u0651\u062A \u0627\u0644\u0645\u062D\u0631\u0643 \u0623\u0648\u0644\u064B\u0627", "models.not_here": "\u063A\u064A\u0631 \u0645\u062A\u0627\u062D \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628", "models.shared": "\u062A\u0645 \u0627\u0644\u062A\u0646\u0632\u064A\u0644 \xB7 \u0645\u064F\u0634\u0627\u0631\u0643", "models.download": "\u062A\u0646\u0632\u064A\u0644 ({size} \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A)", "models.needs_ram": "\u064A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0646\u062D\u0648 {ram} \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A \u0645\u0646 \u0627\u0644\u0630\u0627\u0643\u0631\u0629: \u0642\u062F \u064A\u0643\u0648\u0646 \u0628\u0637\u064A\u0626\u064B\u0627 \u0647\u0646\u0627", "models.recommended": "\u0645\u0648\u0635\u0649 \u0628\u0647", "models.license": "\u0627\u0644\u0631\u062E\u0635\u0629", "models.ok.engine": "\u062C\u0627\u0631\u064D \u062A\u062B\u0628\u064A\u062A \u0627\u0644\u0645\u062D\u0631\u0643\u2026", "task.chat": "\u0627\u0644\u0646\u0635 \u0648\u0627\u0644\u0628\u0631\u0645\u062C\u0629", "task.vision": "\u0627\u0644\u0635\u0648\u0631 \u2190 \u0646\u0635", "task.ocr": "\u0627\u0644\u0645\u0633\u062A\u0646\u062F\u0627\u062A (OCR)", "task.translate": "\u0627\u0644\u062A\u0631\u062C\u0645\u0629", "task.embed": "\u0627\u0644\u062A\u0636\u0645\u064A\u0646\u0627\u062A (\u0627\u0644\u0628\u062D\u062B)", "task.rerank": "\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0631\u062A\u064A\u0628", "task.image": "\u062A\u0648\u0644\u064A\u062F \u0627\u0644\u0635\u0648\u0631", "task.upscale": "\u062A\u0643\u0628\u064A\u0631 \u0627\u0644\u0635\u0648\u0631", "task.stt": "\u0627\u0644\u0643\u0644\u0627\u0645 \u0625\u0644\u0649 \u0646\u0635", "task.tts": "\u0627\u0644\u0646\u0635 \u0625\u0644\u0649 \u0643\u0644\u0627\u0645", "task.music": "\u0627\u0644\u0645\u0648\u0633\u064A\u0642\u0649", "limits.title": "\u062D\u062F\u0648\u062F\u0643 \u0644\u0644\u0622\u062E\u0631\u064A\u0646", "limits.hint": "\u0645\u0642\u062F\u0627\u0631 \u0639\u0645\u0644 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0627\u0644\u0630\u064A \u064A\u0646\u062C\u0632\u0647 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0644\u0622\u062E\u0631\u064A\u0646. \u0627\u062A\u0631\u0643\u0647 \u0641\u0627\u0631\u063A\u064B\u0627 \u0644\u0639\u062F\u0645 \u0648\u0636\u0639 \u062D\u062F. \u0639\u0646\u062F \u0628\u0644\u0648\u063A \u062D\u062F\u064D\u0651 \u0645\u0627\u060C \u062A\u062A\u0648\u0642\u0641 \u0646\u0645\u0627\u0630\u062C\u0643 \u0639\u0646 \u0627\u0644\u0639\u0631\u0636 \u062D\u062A\u0649 \u0628\u062F\u0627\u064A\u0629 \u0627\u0644\u0641\u062A\u0631\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629.", "limits.save": "\u062D\u0641\u0638 \u0627\u0644\u062D\u062F\u0648\u062F", "limits.requests": "\u0627\u0644\u0637\u0644\u0628\u0627\u062A", "limits.tokens": "\u0627\u0644\u0631\u0645\u0648\u0632", "limits.used": "\u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645", "limits.day": "\u064A\u0648\u0645\u064A\u064B\u0627", "limits.week": "\u0623\u0633\u0628\u0648\u0639\u064A\u064B\u0627", "limits.month": "\u0634\u0647\u0631\u064A\u064B\u0627", "limits.none": "\u0628\u0644\u0627 \u062D\u062F", "limits.usage": "{requests} \u0637\u0644\u0628\u0627\u062A \xB7 {tokens} \u0631\u0645\u0632", "limits.saved": "\u062A\u0645 \u062D\u0641\u0638 \u0627\u0644\u062D\u062F\u0648\u062F.", "tip.models.engine": "\u064A\u0646\u0632\u0651\u0644 \u0645\u062D\u0631\u0643 Lemonade \u0645\u0641\u062A\u0648\u062D \u0627\u0644\u0645\u0635\u062F\u0631 \u062F\u0627\u062E\u0644 BitPull\u060C \u0644\u064A\u062A\u0645\u0643\u0646 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0645\u0646 \u0625\u0639\u0627\u0631\u0629 \u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0635\u0648\u0631 \u0648\u0627\u0644\u0635\u0648\u062A \u0648\u0627\u0644\u0645\u0648\u0633\u064A\u0642\u0649.", "tip.models.download": "\u064A\u0646\u0632\u0651\u0644 {model} ({size} \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A) \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0644\u0639\u0631\u0636\u0647 \u0639\u0644\u0649 \u0627\u0644\u0622\u062E\u0631\u064A\u0646. \u064A\u0645\u0643\u0646\u0643 \u062D\u0630\u0641\u0647 \u0644\u0627\u062D\u0642\u064B\u0627.", "tip.limits.save": "\u064A\u062D\u0641\u0638 \u0627\u0644\u062D\u062F\u0648\u062F \u0627\u0644\u064A\u0648\u0645\u064A\u0629 \u0648\u0627\u0644\u0623\u0633\u0628\u0648\u0639\u064A\u0629 \u0648\u0627\u0644\u0634\u0647\u0631\u064A\u0629 \u0644\u0639\u0645\u0644 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0644\u0644\u0622\u062E\u0631\u064A\u0646.", "lend.visible": "\u2713 \u062A\u0631\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628: {cpus} \u0645\u0639\u0627\u0644\u062C \u0648{ram} \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A \u0645\u062A\u0627\u062D\u0629 \u0644\u0644\u0622\u062E\u0631\u064A\u0646.", "lend.invisible": "\u0644\u0627 \u062A\u0631\u0649 \u0627\u0644\u0634\u0628\u0643\u0629 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0628\u0639\u062F: \u0627\u0646\u062A\u0638\u0631 \u062D\u062A\u0649 \u062F\u0642\u064A\u0642\u0629\u061B \u0648\u0625\u0646 \u0628\u0642\u064A \u0627\u0644\u0623\u0645\u0631 \u0643\u0630\u0644\u0643 \u0641\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0627\u062A\u0635\u0627\u0644 \u0628\u0627\u0644\u0625\u0646\u062A\u0631\u0646\u062A.", "lend.unusable": "\u26A0 \u0644\u0627 \u064A\u0645\u0643\u0646 \u0644\u0623\u062D\u062F \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0628\u0639\u062F: \u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0634\u063A\u064A\u0644 \u0623\u064A \u0645\u0647\u0645\u0629 \u0647\u0646\u0627. {reason}", "lend.unusable.docker": '\u0644\u0627 \u064A\u062C\u062A\u0627\u0632 Docker \u0641\u062D\u0635 \u0627\u0644\u0639\u0632\u0644 \u0641\u064A BitPull: \u0631\u0627\u062C\u0639 "\u0625\u0639\u062F\u0627\u062F \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628".', "lend.unusable.off": '\u0645\u0647\u0627\u0645 \u0627\u0644\u062D\u0627\u0648\u064A\u0627\u062A \u0645\u062A\u0648\u0642\u0641\u0629 \u0648\u0644\u0627 \u064A\u0648\u062C\u062F \u0646\u0645\u0648\u0630\u062C \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0645\u062B\u0628\u062A: \u0641\u0639\u0651\u0644 "\u0645\u0647\u0627\u0645 \u0627\u0644\u062D\u0627\u0648\u064A\u0627\u062A" \u0623\u0648 \u0646\u0632\u0651\u0644 \u0646\u0645\u0648\u0630\u062C\u064B\u0627.', "lend.docker_login": '\u0644\u0627 \u064A\u0633\u062A\u0637\u064A\u0639 Docker \u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0635\u0648\u0631 \u0644\u0623\u0646 \u062A\u0633\u062C\u064A\u0644 \u062F\u062E\u0648\u0644\u0647 \u0625\u0644\u0649 Docker Hub \u0644\u0645 \u064A\u0639\u062F \u0635\u0627\u0644\u062D\u064B\u0627. \u0641\u064A Docker Desktop \u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u062D\u0633\u0627\u0628\u0643 (\u0623\u0639\u0644\u0649 \u0627\u0644\u064A\u0645\u064A\u0646) \u2190 Sign out\u060C \u062B\u0645 \u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627 \u0623\u0648 \u0627\u0628\u0642\u064E \u062F\u0648\u0646 \u062A\u0633\u062C\u064A\u0644. \u062B\u0645 \u0627\u0636\u063A\u0637 "\u062A\u062D\u0642\u0642 \u0645\u062C\u062F\u062F\u064B\u0627".', "lend.off_hint": '\u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u0645\u062A\u0648\u0642\u0641\u0629: \u0641\u0639\u0651\u0644 "{enabled}" \u0641\u064A "{rules}" \u0623\u062F\u0646\u0627\u0647 \u0648\u0627\u0636\u063A\u0637 "{save}". (\u0627\u0644\u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u0645\u0624\u0642\u062A / \u0627\u0644\u0627\u0633\u062A\u0626\u0646\u0627\u0641 \u064A\u0648\u0642\u0641 \u0645\u0624\u0642\u062A\u064B\u0627 \u0641\u0642\u0637 \u0625\u0639\u0627\u0631\u0629 \u0645\u0641\u0639\u0651\u0644\u0629 \u0623\u0635\u0644\u064B\u0627.)', "lend.low_memory": '\u062A\u0639\u0631\u0636 {mb} \u0645\u064A\u063A\u0627\u0628\u0627\u064A\u062A \u0641\u0642\u0637 \u0645\u0646 \u0627\u0644\u0630\u0627\u0643\u0631\u0629: \u0644\u0646 \u064A\u062A\u0633\u0639 \u0630\u0644\u0643 \u0625\u0644\u0627 \u0644\u0645\u0647\u0627\u0645 \u0642\u0644\u064A\u0644\u0629. \u0641\u064A "{rules}" \u0627\u0636\u0628\u0637 "{memory}" \u0645\u062B\u0644\u064B\u0627 \u0639\u0644\u0649 4096 (= 4 \u063A\u064A\u063A\u0627\u0628\u0627\u064A\u062A) \u0648\u0627\u0636\u063A\u0637 "{save}".', "rules.awake": "\u0627\u0644\u0628\u0642\u0627\u0621 \u0645\u0633\u062A\u064A\u0642\u0638\u064B\u0627 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0625\u0639\u0627\u0631\u0629", "rules.awake.help": "\u0623\u062B\u0646\u0627\u0621 \u062A\u0634\u063A\u064A\u0644 \u0645\u0647\u0645\u0629 \u0644\u0634\u062E\u0635 \u0645\u0627\u060C \u0644\u0627 \u064A\u062F\u062E\u0644 \u0647\u0630\u0627 \u0627\u0644\u062D\u0627\u0633\u0648\u0628 \u0641\u064A \u0648\u0636\u0639 \u0627\u0644\u0633\u0643\u0648\u0646 (\u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u0646\u0637\u0641\u0626 \u0627\u0644\u0634\u0627\u0634\u0629 \u0645\u0639 \u0630\u0644\u0643). \u0628\u0639\u062F\u0647\u0627 \u064A\u0646\u0627\u0645 \u0643\u0627\u0644\u0645\u0639\u062A\u0627\u062F. \u064A\u0645\u0646\u0639 \u0627\u0646\u0642\u0637\u0627\u0639 \u0627\u0644\u0645\u0647\u0627\u0645.", "ask.wait": "\u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631 \u062D\u062A\u0649 (\u062F\u0642\u0627\u0626\u0642)", "ask.wait.save": "\u062D\u0641\u0638", "ask.wait.saved": "\u0633\u064A\u062A\u0645 \u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u0625\u062C\u0627\u0628\u0627\u062A \u062D\u062A\u0649 {n} \u062F\u0642\u064A\u0642\u0629.", "ask.wait.range": "\u0623\u062F\u062E\u0644 \u0639\u062F\u062F \u062F\u0642\u0627\u0626\u0642 \u0628\u064A\u0646 1 \u0648120.", "tip.wait": "\u0645\u062F\u0629 \u0627\u0646\u062A\u0638\u0627\u0631 \u0625\u062C\u0627\u0628\u0629 \u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0641\u064A \u0627\u0644\u0634\u0628\u0643\u0629. \u0642\u062F \u062A\u0633\u062A\u063A\u0631\u0642 \u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0639\u0644\u0649 \u0645\u0639\u0627\u0644\u062C \u0634\u062E\u0635 \u0622\u062E\u0631 \u062F\u0642\u0627\u0626\u0642. \u064A\u0645\u0643\u0646 \u0644\u0630\u0643\u0627\u0626\u0643 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A \u062A\u063A\u064A\u064A\u0631\u0647\u0627 \u0623\u064A\u0636\u064B\u0627.", "plan.month": "/\u0634\u0647\u0631\u064A\u064B\u0627", "plan.free.1": "\u0645\u0639\u0631\u0641\u0629 \u0645\u0634\u062A\u0631\u0643\u0629", "plan.free.2": "\u062D\u0648\u0633\u0628\u0629 \u0628\u0627\u0644\u0623\u0631\u0635\u062F\u0629 \u0627\u0644\u062A\u064A \u062A\u0643\u0633\u0628\u0647\u0627 \u0645\u0646 \u0627\u0644\u0625\u0639\u0627\u0631\u0629", "plan.free.3": "\u0631\u0635\u064A\u062F \u062D\u062A\u0649 \u221220 \u0631\u0635\u064A\u062F\u064B\u0627", "plan.base.1": "80 \u0631\u0635\u064A\u062F\u064B\u0627 \u0643\u0644 \u0634\u0647\u0631", "plan.base.2": "\u0648\u062D\u062F\u0627\u062A GPU \u0627\u0633\u062A\u0647\u0644\u0627\u0643\u064A\u0629 \u0648\u0646\u0645\u0627\u0630\u062C \u0645\u062A\u0648\u0633\u0637\u0629", "plan.base.3": "\u0631\u0635\u064A\u062F \u062D\u062A\u0649 \u2212100 \u0631\u0635\u064A\u062F", "plan.pro.1": "200 \u0631\u0635\u064A\u062F \u0643\u0644 \u0634\u0647\u0631", "plan.pro.2": "\u0623\u0648\u0644\u0648\u064A\u0629 \u0642\u0635\u0648\u0649\u060C \u0648\u062C\u0645\u064A\u0639 \u0648\u062D\u062F\u0627\u062A GPU \u0648\u0627\u0644\u0646\u0645\u0627\u0630\u062C \u0627\u0644\u0643\u0628\u064A\u0631\u0629", "plan.pro.3": "\u0631\u0635\u064A\u062F \u062D\u062A\u0649 \u2212500 \u0631\u0635\u064A\u062F", "plans.current": "\u062E\u0637\u062A\u0643", "plans.choose": "\u0627\u062E\u062A\u0631 {plan}", "plans.renew": "\u064A\u062A\u062C\u062F\u062F \u0643\u0644 \u0634\u0647\u0631\u061B \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0625\u0644\u063A\u0627\u0621 \u0641\u064A \u0623\u064A \u0648\u0642\u062A\u060C \u0648\u062A\u0628\u0642\u0649 \u0627\u0644\u062E\u0637\u0629 \u0641\u0639\u0651\u0627\u0644\u0629 \u062D\u062A\u0649 \u0646\u0647\u0627\u064A\u0629 \u0627\u0644\u0641\u062A\u0631\u0629 \u0627\u0644\u0645\u062F\u0641\u0648\u0639\u0629", "plans.recharge.title": "\u0634\u062D\u0646 \u0627\u0644\u0623\u0631\u0635\u062F\u0629", "plans.recharge.1": "\u0625\u0636\u0627\u0641\u0629 {n} \u0631\u0635\u064A\u062F\u064B\u0627 \u0625\u0644\u0649 \u062D\u0633\u0627\u0628\u0643", "plans.recharge.2": "\u062F\u0641\u0639\u0629 \u0648\u0627\u062D\u062F\u0629\u060C \u062F\u0648\u0646 \u0627\u0634\u062A\u0631\u0627\u0643", "plans.recharge.3": "\u0627\u0644\u0623\u0631\u0635\u062F\u0629 \u0644\u0627 \u062A\u0646\u062A\u0647\u064A \u0635\u0644\u0627\u062D\u064A\u062A\u0647\u0627", "plans.summary": "\u0623\u0646\u062A \u062A\u0634\u062A\u0631\u064A", "plans.pay": "\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u0625\u0644\u0649 \u0627\u0644\u062F\u0641\u0639 \u0627\u0644\u0622\u0645\u0646", "plans.cancel": "\u0625\u0644\u063A\u0627\u0621", "plans.off": "\u0627\u0644\u0645\u062F\u0641\u0648\u0639\u0627\u062A \u063A\u064A\u0631 \u0645\u0641\u0639\u0651\u0644\u0629 \u0628\u0639\u062F.", "account.line": "\u0627\u0644\u062D\u0633\u0627\u0628: {email}", "account.via.email": "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0648\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631", "logout.button": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062E\u0631\u0648\u062C", "logout.confirm": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062E\u0631\u0648\u062C \u0645\u0646 {email} \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632\u061F \u062A\u062A\u0648\u0642\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u062D\u062A\u0649 \u062A\u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627. \u064A\u0645\u0643\u0646\u0643 \u0628\u0639\u062F\u0647\u0627 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u062D\u0633\u0627\u0628 \u0622\u062E\u0631\u061B \u062A\u064F\u0645\u0646\u062D \u0623\u0631\u0635\u062F\u0629 \u0627\u0644\u062A\u0631\u062D\u064A\u0628 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0641\u0642\u0637 \u0644\u0643\u0644 \u062C\u0647\u0627\u0632.", "logout.yes": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062E\u0631\u0648\u062C", "logout.done": "\u0633\u062C\u0651\u0644\u062A \u0627\u0644\u062E\u0631\u0648\u062C \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632. \u0644\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627\u060C \u0628\u0627\u0644\u062D\u0633\u0627\u0628 \u0646\u0641\u0633\u0647 \u0623\u0648 \u0628\u062D\u0633\u0627\u0628 \u0622\u062E\u0631\u060C \u0627\u0641\u062A\u062D \u062A\u0637\u0628\u064A\u0642 BitPull \u0623\u0648 \u0634\u063A\u0651\u0644:", "tip.logout": "\u064A\u0633\u062C\u0651\u0644 \u062E\u0631\u0648\u062C \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0645\u0646 \u0627\u0644\u062D\u0633\u0627\u0628\u060C \u0645\u062B\u0644\u064B\u0627 \u0644\u0644\u062F\u062E\u0648\u0644 \u0628\u062D\u0633\u0627\u0628 \u0622\u062E\u0631. \u064A\u0637\u0644\u0628 \u0627\u0644\u062A\u0623\u0643\u064A\u062F \u0623\u0648\u0644\u064B\u0627.", "tip.logout.yes": "\u064A\u0646\u0647\u064A \u0627\u0644\u062C\u0644\u0633\u0629 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632. \u062A\u062A\u0648\u0642\u0641 \u0627\u0644\u0625\u0639\u0627\u0631\u0629 \u062D\u062A\u0649 \u062A\u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u062C\u062F\u062F\u064B\u0627.", "tip.logout.no": "\u0627\u0644\u0628\u0642\u0627\u0621 \u0645\u0633\u062C\u0651\u0644\u064B\u0627.", "tip.plans.choose": "\u064A\u0639\u0631\u0636 \u0627\u0633\u0645 \u0627\u0644\u062E\u0637\u0629 \u0648\u0633\u0639\u0631\u0647\u0627 \u0648\u0645\u0627 \u062A\u062A\u0636\u0645\u0646\u0647 \u0642\u0628\u0644 \u0627\u0644\u062F\u0641\u0639.", "tip.plans.pay": "\u064A\u0641\u062A\u062D \u0635\u0641\u062D\u0629 \u0627\u0644\u062F\u0641\u0639 \u0627\u0644\u0622\u0645\u0646 \u0645\u0646 Stripe \u0641\u064A \u0627\u0644\u0645\u062A\u0635\u0641\u062D.", "tip.plans.cancel": "\u064A\u063A\u0644\u0642 \u0627\u0644\u0645\u0644\u062E\u0635 \u062F\u0648\u0646 \u0634\u0631\u0627\u0621." }, bn: { "lang.name": "\u09AC\u09BE\u0982\u09B2\u09BE", "app.title": "BitPull", "locked.text": "BitPull \u0985\u09CD\u09AF\u09BE\u09AA \u09A5\u09C7\u0995\u09C7 \u09A1\u09CD\u09AF\u09BE\u09B6\u09AC\u09CB\u09B0\u09CD\u09A1 \u0996\u09C1\u09B2\u09C1\u09A8: \u098F\u09B0 \u09B2\u09BF\u0982\u0995\u09C7 \u0985\u09CD\u09AF\u09BE\u0995\u09CD\u09B8\u09C7\u09B8 \u0995\u09C0 \u09A5\u09BE\u0995\u09C7\u0964", "pill.online": "\u0985\u09A8\u09B2\u09BE\u0987\u09A8", "pill.offline": "\u0985\u09AB\u09B2\u09BE\u0987\u09A8", "pill.direct": "\u09B8\u09B0\u09BE\u09B8\u09B0\u09BF \u09A0\u09BF\u0995\u09BE\u09A8\u09BE", "pill.relay_on": "\u09B0\u09BF\u09B2\u09C7 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4", "pill.relay_off": "\u09B0\u09BF\u09B2\u09C7 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4 \u09A8\u09AF\u09BC", "pill.cached": "{n}\u099F\u09BF \u0995\u09CD\u09AF\u09BE\u09B6 \u0995\u09B0\u09BE \u0995\u09AA\u09BF", "net.title": "\u09B2\u09BE\u0987\u09AD \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995", "net.online": "{n}\u099F\u09BF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0985\u09A8\u09B2\u09BE\u0987\u09A8\u09C7", "net.lending": "{n}\u099F\u09BF \u098F\u0996\u09A8 \u09A7\u09BE\u09B0 \u09A6\u09BF\u099A\u09CD\u099B\u09C7", "net.cpu": "{n}\u099F\u09BF CPU \u0995\u09CB\u09B0", "net.ram": "{n} GB RAM", "net.gpu": "{n}\u099F\u09BF GPU", "net.models": "{n}\u099F\u09BF AI \u09AE\u09A1\u09C7\u09B2", "net.jobs": "{n}\u099F\u09BF \u0995\u09BE\u099C \u099A\u09B2\u099B\u09C7", "credits.title": "\u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09AC\u09CD\u09AF\u09BE\u09B2\u09BE\u09A8\u09CD\u09B8", "credits.plan": "{plan} \u09AA\u09CD\u09B2\u09CD\u09AF\u09BE\u09A8 \xB7 {n} \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u09A8\u09BE\u09AE\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7", "plan.free": "\u09AB\u09CD\u09B0\u09BF", "plan.base": "\u09AC\u09C7\u09B8\u09BF\u0995", "plan.pro": "\u09AA\u09CD\u09B0\u09CB", "buy.base": "\u09AC\u09C7\u09B8\u09BF\u0995 \u20AC4.50", "buy.pro": "\u09AA\u09CD\u09B0\u09CB \u20AC9.90", "buy.recharge": "\u09B0\u09BF\u099A\u09BE\u09B0\u09CD\u099C \u20AC5", "buy.ok": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AC\u09CD\u09B0\u09BE\u0989\u099C\u09BE\u09B0\u09C7 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "lend.title": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A8", "lend.hint": "\u0995\u09BE\u099C\u0997\u09C1\u09B2\u09CB \u0986\u09B2\u09BE\u09A6\u09BE \u09B8\u09CD\u09AF\u09BE\u09A8\u09CD\u09A1\u09AC\u0995\u09CD\u09B8\u09C7 \u098F\u09A8\u09CD\u09A1-\u099F\u09C1-\u098F\u09A8\u09CD\u09A1 \u098F\u09A8\u0995\u09CD\u09B0\u09BF\u09AA\u09CD\u099F\u09C7\u09A1 \u0985\u09AC\u09B8\u09CD\u09A5\u09BE\u09AF\u09BC \u099A\u09B2\u09C7, \u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09BE\u0987\u09B2\u09C7 \u0995\u09CB\u09A8\u09CB \u0985\u09CD\u09AF\u09BE\u0995\u09CD\u09B8\u09C7\u09B8 \u099B\u09BE\u09A1\u09BC\u09BE\u0987\u0964 \u0986\u09AA\u09A8\u09BF \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0986\u09AF\u09BC \u0995\u09B0\u09C7\u09A8\u0964", "lend.state.off": "\u09AC\u09A8\u09CD\u09A7", "lend.state.waiting": "\u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09AE\u09BE\u09A3", "lend.state.working": "\u0995\u09BE\u099C \u099A\u09B2\u099B\u09C7", "lend.reason.lending_off": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7", "lend.reason.paused": "\u09AC\u09BF\u09B0\u09A4\u09BF\u09A4\u09C7", "lend.reason.outside_hours": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09A8\u09BF\u09B0\u09CD\u09A7\u09BE\u09B0\u09BF\u09A4 \u09B8\u09AE\u09AF\u09BC\u09C7\u09B0 \u09AC\u09BE\u0987\u09B0\u09C7", "lend.reason.on_battery": "\u09AC\u09CD\u09AF\u09BE\u099F\u09BE\u09B0\u09BF\u09A4\u09C7 \u099A\u09B2\u099B\u09C7", "lend.reason.computer_in_use": "\u0986\u09AA\u09A8\u09BF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u099B\u09C7\u09A8", "lend.reason.no_jobs": "\u09B8\u09BE\u09B0\u09BF\u09A4\u09C7 \u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u09A8\u09C7\u0987", "lend.running": "{time} \u09A5\u09C7\u0995\u09C7 \u098F\u0995\u099F\u09BF {kind} \u0995\u09BE\u099C \u099A\u09B2\u099B\u09C7", "lend.detail": "{reason} \xB7 {n}\u099F\u09BF \u0995\u09BE\u099C \u09B8\u09AE\u09CD\u09AA\u09A8\u09CD\u09A8 \xB7 \u09A6\u09BF\u099A\u09CD\u099B\u09C7 {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", \u09B8\u09CD\u09AF\u09BE\u09A8\u09CD\u09A1\u09AC\u0995\u09CD\u09B8 {name}", "lend.detail.models": ", {n}\u099F\u09BF \u09AE\u09A1\u09C7\u09B2", "lend.pause": "\u09AC\u09BF\u09B0\u09A4\u09BF", "lend.resume": "\u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09B2\u09C1", "lend.paused_ok": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09BF\u09B0\u09A4\u09BF\u09A4\u09C7\u0964 \u099A\u09B2\u09AE\u09BE\u09A8 \u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u09A5\u09BE\u0995\u09B2\u09C7 \u09A4\u09BE \u0985\u09A8\u09CD\u09AF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "lend.resumed_ok": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09B2\u09C1 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "setup.title": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B8\u09C7\u099F \u0986\u09AA \u0995\u09B0\u09C1\u09A8", "setup.hint": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u099C\u09A8\u09CD\u09AF \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 \u09AF\u09BE \u09A6\u09B0\u0995\u09BE\u09B0\u0964 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u0986\u09B0 \u0995\u09BF\u099B\u09C1 \u09B2\u09BE\u0997\u09C7 \u09A8\u09BE\u0964 \u0987\u09A8\u09B8\u09CD\u099F\u09B2\u09BE\u09B0 \u0986\u09B8\u09C7 \u0985\u09AB\u09BF\u09B8\u09BF\u09AF\u09BC\u09BE\u09B2 \u09B8\u09BE\u0987\u099F \u09A5\u09C7\u0995\u09C7; \u0986\u09AA\u09A8\u09BE\u09B0 \u09B8\u09BF\u09B8\u09CD\u099F\u09C7\u09AE \u09A8\u09BF\u09B6\u09CD\u099A\u09BF\u09A4 \u0995\u09B0\u09A4\u09C7 \u09AC\u09B2\u09AC\u09C7\u0964", "setup.checking": "\u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026", "setup.docker.help": "\u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u0995\u09BE\u099C \u0986\u09B2\u09BE\u09A6\u09BE \u09B8\u09CD\u09AF\u09BE\u09A8\u09CD\u09A1\u09AC\u0995\u09CD\u09B8\u09C7 \u099A\u09BE\u09B2\u09BE\u09AF\u09BC\u0964 \u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0 \u0995\u09BE\u099C\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8\u0964 \u09AC\u09CD\u09AF\u0995\u09CD\u09A4\u09BF\u0997\u09A4 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0993 \u099B\u09CB\u099F \u09AC\u09CD\u09AF\u09AC\u09B8\u09BE\u09B0 \u099C\u09A8\u09CD\u09AF \u09AB\u09CD\u09B0\u09BF\u0964", "setup.docker.download": "Docker \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C1\u09A8", "setup.docker.start": "Docker \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C1\u09A8", "setup.apple.title": "Apple Container (\u0990\u099A\u09CD\u099B\u09BF\u0995)", "setup.apple.help": "\u0986\u09B0\u0993 \u09B6\u0995\u09CD\u09A4\u09BF\u09B6\u09BE\u09B2\u09C0 \u09AC\u09BF\u099A\u09CD\u099B\u09BF\u09A8\u09CD\u09A8\u09A4\u09BE: \u09AA\u09CD\u09B0\u09A4\u09BF\u099F\u09BF \u0995\u09BE\u099C \u09A8\u09BF\u099C\u09B8\u09CD\u09AC \u09AD\u09BE\u09B0\u09CD\u099A\u09C1\u09AF\u09BC\u09BE\u09B2 \u09AE\u09C7\u09B6\u09BF\u09A8\u09C7\u0964 \u0990\u099A\u09CD\u099B\u09BF\u0995; \u09B6\u09C1\u09B0\u09C1 \u0995\u09B0\u09A4\u09C7 Docker-\u0987 \u09AF\u09A5\u09C7\u09B7\u09CD\u099F\u0964", "setup.apple.get": "Apple Container \u09A8\u09BF\u09A8", "setup.ollama.help": "\u0993\u09AA\u09C7\u09A8 AI \u09AE\u09A1\u09C7\u09B2 \u099A\u09BE\u09B2\u09BE\u09AF\u09BC (Qwen, Llama, Mistral\u2026)\u0964 AI \u09AE\u09A1\u09C7\u09B2 \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8\u0964", "setup.ollama.download": "Ollama \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C1\u09A8", "setup.ollama.start": "Ollama \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C1\u09A8", "setup.model.title": "AI \u09AE\u09A1\u09C7\u09B2", "setup.model.help": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09AF\u09C7 \u09AE\u09A1\u09C7\u09B2 \u09A6\u09C7\u09AF\u09BC\u0964 {ram} GB \u09AE\u09C7\u09AE\u09B0\u09BF\u09B0 \u099C\u09A8\u09CD\u09AF \u09AA\u09CD\u09B0\u09B8\u09CD\u09A4\u09BE\u09AC\u09BF\u09A4: {model}\u0964", "setup.model.download": "{model} \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C1\u09A8 ({size} GB)", "setup.model.none": "\u098F\u0996\u09A8\u0993 \u0995\u09BF\u099B\u09C1 \u09A8\u09C7\u0987", "setup.model.need_ollama": "\u0986\u0997\u09C7 Ollama \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C7 \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C1\u09A8", "setup.nvidia.title": "NVIDIA GPU \u09A1\u09CD\u09B0\u09BE\u0987\u09AD\u09BE\u09B0 (\u0990\u099A\u09CD\u099B\u09BF\u0995)", "setup.nvidia.help": "\u09B6\u09C1\u09A7\u09C1 \u09AF\u09A6\u09BF \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u098F\u09AE\u09A8 NVIDIA \u0997\u09CD\u09B0\u09BE\u09AB\u09BF\u0995\u09CD\u09B8 \u0995\u09BE\u09B0\u09CD\u09A1 \u09A5\u09BE\u0995\u09C7 \u09AF\u09BE \u0986\u09AA\u09A8\u09BF \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u099A\u09BE\u09A8\u0964", "setup.nvidia.get": "NVIDIA \u09A1\u09CD\u09B0\u09BE\u0987\u09AD\u09BE\u09B0 \u09A8\u09BF\u09A8", "setup.status.running": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u0993 \u099A\u09BE\u09B2\u09C1", "setup.status.installed": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE", "setup.status.stopped": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE, \u099A\u09BE\u09B2\u09C1 \u09A8\u09AF\u09BC", "setup.status.missing": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u09A8\u09C7\u0987", "setup.status.found": "\u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09C7\u099B\u09C7", "setup.status.not_found": "\u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF", "setup.terminal": "\u099F\u09BE\u09B0\u09CD\u09AE\u09BF\u09A8\u09BE\u09B2\u09C7 \u099A\u09BE\u09B2\u09BE\u09A8:", "setup.done": "\u09B8\u09AE\u09CD\u09AA\u09A8\u09CD\u09A8", "setup.opened": "\u09B8\u09AE\u09CD\u09AA\u09A8\u09CD\u09A8: {file} \u0996\u09CB\u09B2\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7, \u098F\u09B0 \u09A7\u09BE\u09AA\u0997\u09C1\u09B2\u09CB \u0985\u09A8\u09C1\u09B8\u09B0\u09A3 \u0995\u09B0\u09C1\u09A8", "setup.recheck": "\u0986\u09AC\u09BE\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C1\u09A8", "setup.ok.download": "\u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u09B6\u09C1\u09B0\u09C1 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964 \u09B6\u09C7\u09B7 \u09B9\u09B2\u09C7 \u0987\u09A8\u09B8\u09CD\u099F\u09B2\u09BE\u09B0 \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7\u0987 \u0996\u09C1\u09B2\u09AC\u09C7: \u098F\u09B0 \u09A7\u09BE\u09AA\u0997\u09C1\u09B2\u09CB \u0985\u09A8\u09C1\u09B8\u09B0\u09A3 \u0995\u09B0\u09C1\u09A8\u0964", "setup.ok.start": "\u099A\u09BE\u09B2\u09C1 \u09B9\u099A\u09CD\u099B\u09C7\u2026 \u098F\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u09B2\u09BE\u0997\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964 \u098F\u0987 \u09A4\u09BE\u09B2\u09BF\u0995\u09BE \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7\u0987 \u0986\u09AA\u09A1\u09C7\u099F \u09B9\u09AF\u09BC\u0964", "setup.ok.pull": "\u09AE\u09A1\u09C7\u09B2 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u09B6\u09C1\u09B0\u09C1 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964 \u0985\u0997\u09CD\u09B0\u0997\u09A4\u09BF \u0989\u09AA\u09B0\u09C7 \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u099A\u09CD\u099B\u09C7\u0964", "setup.ok.page": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AC\u09CD\u09B0\u09BE\u0989\u099C\u09BE\u09B0\u09C7 \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "setup.ok.recheck": "\u0986\u09AC\u09BE\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "rules.title": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09A8\u09BF\u09AF\u09BC\u09AE", "rules.enabled": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u099A\u09BE\u09B2\u09C1", "rules.enabled.help": "\u09AA\u09CD\u09B0\u09A7\u09BE\u09A8 \u09B8\u09C1\u0987\u099A\u0964 \u09AC\u09A8\u09CD\u09A7 \u09A5\u09BE\u0995\u09B2\u09C7 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0995\u0996\u09A8\u09CB \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u0995\u09BE\u099C \u099A\u09BE\u09B2\u09BE\u09AF\u09BC \u09A8\u09BE\u0964 \u0986\u09AA\u09A8\u09BF \u09A8\u09BF\u099C\u09C7 \u09A4\u09AC\u09C1\u0993 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7\u09A8\u0964", "rules.cpus": "\u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A CPU", "rules.cpus.help": "\u098F\u0995\u099F\u09BF \u0995\u09BE\u099C \u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A \u0995\u09A4\u0997\u09C1\u09B2\u09CB \u09AA\u09CD\u09B0\u09B8\u09C7\u09B8\u09B0 \u0995\u09CB\u09B0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7\u0964 \u0989\u09A6\u09BE\u09B9\u09B0\u09A3: \u09EE \u0995\u09CB\u09B0\u09C7\u09B0 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 2 \u09A6\u09BF\u09B2\u09C7 \u0986\u09AA\u09A8\u09BE\u09B0 \u099C\u09A8\u09CD\u09AF \u09EC\u099F\u09BF \u0995\u09CB\u09B0 \u0996\u09BE\u09B2\u09BF \u09A5\u09BE\u0995\u09C7\u0964", "rules.memory": "\u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A \u09AE\u09C7\u09AE\u09B0\u09BF (MB)", "rules.memory.help": "\u098F\u0995\u099F\u09BF \u0995\u09BE\u099C \u09AF\u09A4 RAM \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7, \u09AE\u09C7\u0997\u09BE\u09AC\u09BE\u0987\u099F\u09C7 (1024 MB = 1 GB)\u0964 BitPull \u0995\u0996\u09A8\u09CB \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 \u0985\u09B0\u09CD\u09A7\u09C7\u0995\u09C7\u09B0 \u09AC\u09C7\u09B6\u09BF \u09AE\u09C7\u09AE\u09B0\u09BF \u09A6\u09C7\u09AF\u09BC \u09A8\u09BE\u0964", "rules.gpu": "GPU", "rules.gpu.none": "\u0995\u09CB\u09A8\u09CB\u099F\u09BF \u09A8\u09AF\u09BC", "rules.gpu.consumer": "\u09B8\u09BE\u09A7\u09BE\u09B0\u09A3 (8\u201312 GB)", "rules.gpu.high": "\u0989\u099A\u09CD\u099A\u09AE\u09BE\u09A8\u09C7\u09B0 (16\u201324 GB)", "rules.gpu.datacenter": "\u09A1\u09C7\u099F\u09BE \u09B8\u09C7\u09A8\u09CD\u099F\u09BE\u09B0 (40 GB+)", "rules.gpu.help": '\u0986\u09AA\u09A8\u09BF \u09AF\u09C7 \u0997\u09CD\u09B0\u09BE\u09AB\u09BF\u0995\u09CD\u09B8 \u0995\u09BE\u09B0\u09CD\u09A1 \u09A7\u09BE\u09B0 \u09A6\u09C7\u09A8, \u09AD\u09BF\u09A1\u09BF\u0993 \u09AE\u09C7\u09AE\u09B0\u09BF \u0985\u09A8\u09C1\u09AF\u09BE\u09AF\u09BC\u09C0\u0964 \u0986\u09B2\u09BE\u09A6\u09BE GPU \u09A8\u09BE \u09A5\u09BE\u0995\u09B2\u09C7 \u09AC\u09BE \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09A8\u09BE \u099A\u09BE\u0987\u09B2\u09C7 "\u0995\u09CB\u09A8\u09CB\u099F\u09BF \u09A8\u09AF\u09BC" \u09B0\u09BE\u0996\u09C1\u09A8\u0964 GPU \u09B8\u09AC\u099A\u09C7\u09AF\u09BC\u09C7 \u09AC\u09C7\u09B6\u09BF \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0986\u09AF\u09BC \u0995\u09B0\u09C7\u0964', "rules.containers": "\u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0 \u0995\u09BE\u099C", "rules.containers.help": "\u0987\u09A8\u09CD\u099F\u09BE\u09B0\u09A8\u09C7\u099F \u0993 \u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09BE\u0987\u09B2\u09C7 \u0985\u09CD\u09AF\u09BE\u0995\u09CD\u09B8\u09C7\u09B8 \u099B\u09BE\u09A1\u09BC\u09BE \u098F\u0995\u099F\u09BF \u09B8\u09CD\u09AF\u09BE\u09A8\u09CD\u09A1\u09AC\u0995\u09CD\u09B8\u09C7 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u09AC\u09BF\u09B2\u09CD\u09A1, \u099F\u09C7\u09B8\u09CD\u099F \u0993 \u09B8\u09CD\u0995\u09CD\u09B0\u09BF\u09AA\u09CD\u099F \u099A\u09BE\u09B2\u09BE\u09AF\u09BC\u0964 Docker (\u09AC\u09BE Apple Container) \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8: \u09A6\u09C7\u0996\u09C1\u09A8 \u201C\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B8\u09C7\u099F \u0986\u09AA \u0995\u09B0\u09C1\u09A8\u201D\u0964", "rules.models": "\u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2 (Ollama)", "rules.models.help": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 Ollama-\u09A4\u09C7 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2 \u09A6\u09BF\u09AF\u09BC\u09C7 AI \u0985\u09A8\u09C1\u09B0\u09CB\u09A7\u09C7\u09B0 \u0989\u09A4\u09CD\u09A4\u09B0 \u09A6\u09C7\u09AF\u09BC\u0964 Ollama \u0993 \u0985\u09A8\u09CD\u09A4\u09A4 \u098F\u0995\u099F\u09BF \u09AE\u09A1\u09C7\u09B2 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8\u0964", "rules.idle": "\u09B6\u09C1\u09A7\u09C1 \u098F\u09A4 \u09AE\u09BF\u09A8\u09BF\u099F \u09A8\u09BF\u09B7\u09CD\u0995\u09CD\u09B0\u09BF\u09AF\u09BC \u09A5\u09BE\u0995\u09BE\u09B0 \u09AA\u09B0", "rules.idle.help": "\u098F\u09A4 \u09AE\u09BF\u09A8\u09BF\u099F \u0995\u09BF\u09AC\u09CB\u09B0\u09CD\u09A1 \u09AC\u09BE \u09AE\u09BE\u0989\u09B8 \u09A8\u09BE \u099B\u09C1\u0981\u09B2\u09C7 \u09A4\u09AC\u09C7\u0987 \u09A7\u09BE\u09B0 \u09A6\u09C7\u09AF\u09BC\u0964 0 = \u0986\u09AA\u09A8\u09BF \u0995\u09BE\u099C \u0995\u09B0\u09BE\u09B0 \u09B8\u09AE\u09AF\u09BC\u0993 \u09A7\u09BE\u09B0 \u09A6\u09C7\u09AF\u09BC\u0964", "rules.ac": "\u09B6\u09C1\u09A7\u09C1 \u099A\u09BE\u09B0\u09CD\u099C\u09BE\u09B0\u09C7 \u09B2\u09BE\u0997\u09BE\u09A8\u09CB \u09A5\u09BE\u0995\u09B2\u09C7", "rules.ac.help": "\u09B2\u09CD\u09AF\u09BE\u09AA\u099F\u09AA\u09C7 \u09AC\u09CD\u09AF\u09BE\u099F\u09BE\u09B0\u09BF\u09A4\u09C7 \u099A\u09B2\u09B2\u09C7 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7 \u09B9\u09AF\u09BC, \u09AF\u09BE\u09A4\u09C7 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09AF\u09BC \u09AC\u09CD\u09AF\u09BE\u099F\u09BE\u09B0\u09BF \u0995\u0996\u09A8\u09CB \u09AB\u09C1\u09B0\u09BF\u09AF\u09BC\u09C7 \u09A8\u09BE \u09AF\u09BE\u09AF\u09BC\u0964", "rules.hours": "\u09B6\u09C1\u09A7\u09C1 \u098F\u0987 \u0998\u09A3\u09CD\u099F\u09BE \u09A5\u09C7\u0995\u09C7 / \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 (\u0996\u09BE\u09B2\u09BF = \u09B8\u09AC\u09B8\u09AE\u09AF\u09BC)", "rules.hours.help": "\u09B6\u09C1\u09A7\u09C1 \u098F\u0987 \u09B8\u09AE\u09AF\u09BC\u09C7\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u09A7\u09BE\u09B0 \u09A6\u09C7\u09AF\u09BC, \u09E8\u09EA-\u0998\u09A3\u09CD\u099F\u09BE \u09AB\u09B0\u09AE\u09CD\u09AF\u09BE\u099F\u09C7\u0964 \u0989\u09A6\u09BE\u09B9\u09B0\u09A3: 22 \u0993 8 = \u09B0\u09BE\u09A4 \u09E7\u09E6\u099F\u09BE \u09A5\u09C7\u0995\u09C7 \u09B8\u0995\u09BE\u09B2 \u09EE\u099F\u09BE\u0964 \u09AF\u09C7\u0995\u09CB\u09A8\u09CB \u09B8\u09AE\u09AF\u09BC \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09A6\u09C1\u099F\u09CB\u0987 \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09C1\u09A8\u0964", "rules.cache": "\u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09B0\u09BF\u09AA\u09CB\u09B0 \u0995\u09CD\u09AF\u09BE\u09B6 \u0995\u09B0\u09BE \u0995\u09AA\u09BF", "rules.cache.help": "\u0985\u09A8\u09CD\u09AF \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09A6\u09C7\u09B0 \u0995\u09A4\u0997\u09C1\u09B2\u09CB \u09AA\u09BE\u09AC\u09B2\u09BF\u0995 \u09B0\u09BF\u09AA\u09CB\u09B0 \u0995\u09AA\u09BF \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B0\u09BE\u0996\u09AC\u09C7, \u09AF\u09BE\u09A4\u09C7 \u09B2\u09C7\u0996\u0995\u09B0\u09BE \u0985\u09AB\u09B2\u09BE\u0987\u09A8\u09C7 \u09A5\u09BE\u0995\u09B2\u09C7\u0993 \u09B8\u09C7\u0997\u09C1\u09B2\u09CB \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u0964 \u09B8\u09BE\u09AE\u09BE\u09A8\u09CD\u09AF \u09A1\u09BF\u09B8\u09CD\u0995 \u099C\u09BE\u09AF\u09BC\u0997\u09BE \u09B2\u09BE\u0997\u09C7 \u098F\u09AC\u0982 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0986\u09AF\u09BC \u09B9\u09AF\u09BC\u0964 0 = \u0995\u09CB\u09A8\u09CB\u099F\u09BF \u09A8\u09AF\u09BC\u0964", "rules.save": "\u09A8\u09BF\u09AF\u09BC\u09AE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3", "rules.saved": "\u09A8\u09BF\u09AF\u09BC\u09AE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09BF\u09A4 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964 \u0995\u09AF\u09BC\u09C7\u0995 \u09B8\u09C7\u0995\u09C7\u09A8\u09CD\u09A1\u09C7\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u0995\u09BE\u09B0\u09CD\u09AF\u0995\u09B0 \u09B9\u09AC\u09C7\u0964", "rules.hours_both": "\u09A6\u09C1\u099F\u09CB \u0998\u09A3\u09CD\u099F\u09BE\u0987 \u09AA\u09C2\u09B0\u09A3 \u0995\u09B0\u09C1\u09A8, \u0985\u09A5\u09AC\u09BE \u09AF\u09C7\u0995\u09CB\u09A8\u09CB \u09B8\u09AE\u09AF\u09BC \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09A6\u09C1\u099F\u09CB\u0987 \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09C1\u09A8\u0964", "folders.title": "\u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09BF\u09A4 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0", "folders.hint": "BitPull \u09B6\u09C1\u09A7\u09C1 \u098F\u0987 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u0997\u09C1\u09B2\u09CB \u09AA\u09A1\u09BC\u09C7\u0964 \u098F\u0995\u099F\u09BF \u09AA\u09CD\u09B0\u0995\u09BE\u09B6 \u0995\u09B0\u09A4\u09C7 \u09B8\u09AE\u09CD\u09AA\u09C2\u09B0\u09CD\u09A3 bitpull.json \u09B2\u09BE\u0997\u09AC\u09C7\u0964", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09A8", "folders.none": "\u0995\u09CB\u09A8\u09CB \u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09BF\u09A4 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0 \u09A8\u09C7\u0987\u0964", "folders.draft": "\u0996\u09B8\u09A1\u09BC\u09BE", "folders.publish": "\u09AA\u09CD\u09B0\u0995\u09BE\u09B6", "folders.remove": "\u09B8\u09B0\u09BE\u09A8", "folders.need_path": "\u0986\u0997\u09C7 \u098F\u0995\u099F\u09BF \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u09C7\u09B0 \u09AA\u09C2\u09B0\u09CD\u09A3 \u09AA\u09BE\u09A5 \u09B2\u09BF\u0996\u09C1\u09A8, \u09AF\u09C7\u09AE\u09A8 /Users/you/projects/my-library\u0964", "folders.added": "\u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0 \u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09BF\u09A4 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "folders.removed": "\u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0 \u09B8\u09B0\u09BE\u09A8\u09CB \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964 BitPull \u0986\u09B0 \u098F\u099F\u09BF \u09AA\u09A1\u09BC\u09AC\u09C7 \u09A8\u09BE\u0964", "folders.drafted": "\u0996\u09B8\u09A1\u09BC\u09BE \u09AA\u09CD\u09B0\u09B8\u09CD\u09A4\u09C1\u09A4: {n}\u099F\u09BF \u09AB\u09BE\u0987\u09B2 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09C7\u099B\u09C7\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 AI-\u0995\u09C7 \u09B8\u09BE\u09B0\u09BE\u0982\u09B6 \u0993 \u09AC\u09BF\u09AC\u09B0\u09A3 \u09AA\u09C2\u09B0\u09A3 \u0995\u09B0\u09A4\u09C7 \u09A6\u09BF\u09A8 (prepare_publish \u099F\u09C1\u09B2), \u09A4\u09BE\u09B0\u09AA\u09B0 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6 \u099A\u09BE\u09AA\u09C1\u09A8\u0964", "folders.published": '"{name}" {n}\u099F\u09BF \u09AB\u09BE\u0987\u09B2\u09B8\u09B9 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6\u09BF\u09A4 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964', "folders.secrets_in": "\u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09C7\u099B\u09C7: {where}", "folders.line": "{file} \u09B2\u09BE\u0987\u09A8 {line}", "repos.title": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6\u09BF\u09A4 \u09B0\u09BF\u09AA\u09CB", "repos.hint": "\u09AB\u09BE\u0987\u09B2 \u09AC\u09A6\u09B2\u09BE\u09B2\u09C7 \u098F\u0997\u09C1\u09B2\u09CB \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7\u0987 \u0986\u09AA\u09A1\u09C7\u099F \u09B9\u09AF\u09BC (\u09AA\u09CD\u09B0\u09A4\u09BF \u09EB \u09AE\u09BF\u09A8\u09BF\u099F\u09C7)\u0964", "repos.none": "\u0995\u09CB\u09A8\u09CB \u09AA\u09CD\u09B0\u0995\u09BE\u09B6\u09BF\u09A4 \u09B0\u09BF\u09AA\u09CB \u09A8\u09C7\u0987\u0964", "repos.withdraw": "\u09AA\u09CD\u09B0\u09A4\u09CD\u09AF\u09BE\u09B9\u09BE\u09B0", "repos.withdrawn": "\u09B0\u09BF\u09AA\u09CB \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u09A5\u09C7\u0995\u09C7 \u09AA\u09CD\u09B0\u09A4\u09CD\u09AF\u09BE\u09B9\u09BE\u09B0 \u0995\u09B0\u09BE \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "ask.title": "\u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2", "ask.offers": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09A6\u09BF\u099A\u09CD\u099B\u09C7: {models}\u0964", "ask.offers_none": "\u0995\u09CB\u09A8\u09CB \u09AE\u09A1\u09C7\u09B2 \u09A8\u09C7\u0987 (\u09AE\u09A1\u09C7\u09B2 \u09A6\u09BF\u09A4\u09C7 Ollama \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8)", "ask.placeholder": "\u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u098F\u0995\u099F\u09BF \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2\u0995\u09C7 \u099C\u09BF\u099C\u09CD\u099E\u09BE\u09B8\u09BE \u0995\u09B0\u09C1\u09A8\u2026", "ask.small": "\u099B\u09CB\u099F", "ask.medium": "\u09AE\u09BE\u099D\u09BE\u09B0\u09BF", "ask.large": "\u09AC\u09A1\u09BC", "ask.button": "\u099C\u09BF\u099C\u09CD\u099E\u09BE\u09B8\u09BE", "ask.empty": "\u0986\u0997\u09C7 \u098F\u0995\u099F\u09BF \u09AA\u09CD\u09B0\u09B6\u09CD\u09A8 \u09B2\u09BF\u0996\u09C1\u09A8\u0964", "ask.waiting": "\u09AE\u09A1\u09C7\u09B2\u09B8\u09B9 \u098F\u0995\u099F\u09BF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0996\u09CB\u0981\u099C\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026 \u098F\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u09B2\u09BE\u0997\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964", "ask.credits": "{n} \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F", "tools.title": "\u0986\u09AA\u09A8\u09BE\u09B0 \u099F\u09C1\u09B2 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4 \u0995\u09B0\u09C1\u09A8", "tools.mcp": "Claude Code \u0993 MCP \u0995\u09CD\u09B2\u09BE\u09AF\u09BC\u09C7\u09A8\u09CD\u099F\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u099F\u09BE\u09B0\u09CD\u09AE\u09BF\u09A8\u09BE\u09B2\u09C7 \u099A\u09BE\u09B2\u09BE\u09A8:", "tools.openai": "OpenAI-\u09B8\u09BE\u09AE\u099E\u09CD\u099C\u09B8\u09CD\u09AF\u09AA\u09C2\u09B0\u09CD\u09A3 \u099F\u09C1\u09B2\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF: \u09AC\u09C7\u09B8 URL", "tools.key": "API \u0995\u09C0", "tools.show": "\u09A6\u09C7\u0996\u09BE\u09A8", "jobs.title": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09B8\u09BE\u09AE\u09CD\u09AA\u09CD\u09B0\u09A4\u09BF\u0995 \u0995\u09BE\u099C", "jobs.none": "\u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u09A8\u09C7\u0987\u0964", "jobs.model": "\u09AE\u09A1\u09C7\u09B2", "jobs.container": "\u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0", "jobs.status.queued": "\u09B8\u09BE\u09B0\u09BF\u09A4\u09C7", "jobs.status.running": "\u099A\u09B2\u099B\u09C7", "jobs.status.done": "\u09B8\u09AE\u09CD\u09AA\u09A8\u09CD\u09A8", "jobs.status.failed": "\u09AC\u09CD\u09AF\u09B0\u09CD\u09A5", "jobs.status.canceled": "\u09AC\u09BE\u09A4\u09BF\u09B2", "jobs.cost": "{n} \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F", working: "\u0995\u09BE\u099C \u099A\u09B2\u099B\u09C7\u2026", "err.agent_down": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 BitPull \u09B8\u09BE\u09A1\u09BC\u09BE \u09A6\u09BF\u099A\u09CD\u099B\u09C7 \u09A8\u09BE\u0964 \u098F\u099F\u09BF \u09E9\u09E6 \u09B8\u09C7\u0995\u09C7\u09A8\u09CD\u09A1\u09C7\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09B2\u09C1 \u09B9\u09AF\u09BC: \u098F\u0995\u099F\u09C1 \u09AA\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "err.server": "BitPull \u09B8\u09BE\u09B0\u09CD\u09AD\u09BE\u09B0\u09C7 \u09AA\u09CC\u0981\u099B\u09BE\u09A8\u09CB \u09AF\u09BE\u099A\u09CD\u099B\u09C7 \u09A8\u09BE\u0964 \u0987\u09A8\u09CD\u099F\u09BE\u09B0\u09A8\u09C7\u099F \u09B8\u0982\u09AF\u09CB\u0997 \u09A6\u09C7\u0996\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "err.session": "\u098F\u0987 \u09A1\u09CD\u09AF\u09BE\u09B6\u09AC\u09CB\u09B0\u09CD\u09A1 \u09B8\u09C7\u09B6\u09A8\u09C7\u09B0 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u09B6\u09C7\u09B7\u0964 BitPull \u0985\u09CD\u09AF\u09BE\u09AA \u09A5\u09C7\u0995\u09C7 \u0986\u09AC\u09BE\u09B0 \u0996\u09C1\u09B2\u09C1\u09A8\u0964", "err.billing": "\u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u098F\u0996\u09A8\u0993 \u099A\u09BE\u09B2\u09C1 \u09B9\u09AF\u09BC\u09A8\u09BF\u0964", "err.no_folder": "\u098F\u0987 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u099F\u09BF \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09A8\u09C7\u0987\u0964 \u09AA\u09BE\u09A5 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C1\u09A8\u0964", "err.not_folder": "\u098F\u0987 \u09AA\u09BE\u09A5\u099F\u09BF \u098F\u0995\u099F\u09BF \u09AB\u09BE\u0987\u09B2, \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0 \u09A8\u09AF\u09BC\u0964", "err.credits": "\u09AF\u09A5\u09C7\u09B7\u09CD\u099F \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09A8\u09C7\u0987\u0964", "err.device": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u098F\u0996\u09A8\u0993 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4 \u09B9\u09AF\u09BC\u09A8\u09BF\u0964 BitPull \u0985\u09CD\u09AF\u09BE\u09AA \u0996\u09CB\u09B2\u09BE \u09B0\u09BE\u0996\u09C1\u09A8 \u098F\u09AC\u0982 \u098F\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "err.no_model": "\u098F\u0987 \u09AE\u09C1\u09B9\u09C2\u09B0\u09CD\u09A4\u09C7 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u0995\u09CB\u09A8\u09CB \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 AI \u09AE\u09A1\u09C7\u09B2 \u09A6\u09BF\u099A\u09CD\u099B\u09C7 \u09A8\u09BE\u0964 \u09AA\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "err.invalid": "\u0995\u09BF\u099B\u09C1 \u09AE\u09BE\u09A8 \u09B8\u09A0\u09BF\u0995 \u09A8\u09AF\u09BC\u0964 \u0998\u09B0\u0997\u09C1\u09B2\u09CB \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "tip.lang": "\u0985\u09CD\u09AF\u09BE\u09AA\u09C7\u09B0 \u09AD\u09BE\u09B7\u09BE\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u099B\u09A8\u09CD\u09A6 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09AE\u09A8\u09C7 \u09B0\u09BE\u0996\u09BE \u09B9\u09AF\u09BC\u0964", "tip.buy.base": "\u09AC\u09C7\u09B8\u09BF\u0995 \u09AA\u09CD\u09B2\u09CD\u09AF\u09BE\u09A8\u09C7\u09B0 \u09A8\u09BF\u09B0\u09BE\u09AA\u09A6 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09C7: \u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 \u20AC4.50, \u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 80 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F\u09B8\u09B9\u0964 \u0986\u09AA\u09A8\u09BF \u09AF\u09C7\u0995\u09CB\u09A8\u09CB \u09B8\u09AE\u09AF\u09BC \u09AC\u09BE\u09A4\u09BF\u09B2 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u09A8\u0964", "tip.buy.pro": "\u09AA\u09CD\u09B0\u09CB \u09AA\u09CD\u09B2\u09CD\u09AF\u09BE\u09A8\u09C7\u09B0 \u09A8\u09BF\u09B0\u09BE\u09AA\u09A6 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09C7: \u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 \u20AC9.90, \u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 200 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F, \u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A \u0985\u0997\u09CD\u09B0\u09BE\u09A7\u09BF\u0995\u09BE\u09B0 \u098F\u09AC\u0982 \u09B8\u09AC GPU \u09B8\u09B9\u0964 \u0986\u09AA\u09A8\u09BF \u09AF\u09C7\u0995\u09CB\u09A8\u09CB \u09B8\u09AE\u09AF\u09BC \u09AC\u09BE\u09A4\u09BF\u09B2 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u09A8\u0964", "tip.buy.recharge": "\u20AC5 \u09A6\u09BF\u09AF\u09BC\u09C7 \u098F\u0995\u09AC\u09BE\u09B0\u09C7 80 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0995\u09C7\u09A8\u09BE\u09B0 \u09A8\u09BF\u09B0\u09BE\u09AA\u09A6 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09C7\u0964 \u098F\u0997\u09C1\u09B2\u09CB\u09B0 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u0995\u0996\u09A8\u09CB \u09B6\u09C7\u09B7 \u09B9\u09AF\u09BC \u09A8\u09BE\u0964", "tip.pause": "\u098F\u0996\u09A8\u0987 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7 \u0995\u09B0\u09C7\u0964 \u098F\u0987 \u09AE\u09C1\u09B9\u09C2\u09B0\u09CD\u09A4\u09C7 \u099A\u09B2\u09AE\u09BE\u09A8 \u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u0985\u09A8\u09CD\u09AF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC\u0964 \u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09A4\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09BE\u09AA\u09C1\u09A8\u0964", "tip.resume": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09A8\u09BF\u09AF\u09BC\u09AE \u09AE\u09C7\u09A8\u09C7 \u0986\u09AC\u09BE\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B6\u09C1\u09B0\u09C1 \u0995\u09B0\u09C7\u0964", "tip.rules.save": "\u0993\u09AA\u09B0\u09C7\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09A8\u09BF\u09AF\u09BC\u09AE\u0997\u09C1\u09B2\u09CB \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3 \u0995\u09B0\u09C7\u0964 \u0995\u09AF\u09BC\u09C7\u0995 \u09B8\u09C7\u0995\u09C7\u09A8\u09CD\u09A1\u09C7\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u0995\u09BE\u09B0\u09CD\u09AF\u0995\u09B0 \u09B9\u09AF\u09BC; \u0986\u09AA\u09A8\u09BF \u098F\u099F\u09BF \u09A8\u09BE \u099A\u09BE\u09AA\u09BE \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u0995\u09BF\u099B\u09C1\u0987 \u09AC\u09A6\u09B2\u09BE\u09AF\u09BC \u09A8\u09BE\u0964", "tip.folder.add": "\u09AC\u09BE\u0981 \u09A6\u09BF\u0995\u09C7 \u09B2\u09C7\u0996\u09BE \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u099F\u09BF \u09AA\u09A1\u09BC\u09BE\u09B0 \u0985\u09A8\u09C1\u09AE\u09A4\u09BF \u09A6\u09C7\u09AF\u09BC BitPull-\u0995\u09C7\u0964 \u0985\u09A8\u09C1\u09AE\u09CB\u09A6\u09BF\u09A4 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u09C7\u09B0 \u09AC\u09BE\u0987\u09B0\u09C7\u09B0 \u09AB\u09BE\u0987\u09B2 \u0995\u0996\u09A8\u09CB \u09AA\u09A1\u09BC\u09BE \u09AC\u09BE \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09BE \u09B9\u09AF\u09BC \u09A8\u09BE\u0964", "tip.folder.draft": "\u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u09C7 bitpull.json \u09A4\u09C8\u09B0\u09BF \u0995\u09B0\u09C7: \u098F\u09B0 \u09AB\u09BE\u0987\u09B2\u0997\u09C1\u09B2\u09CB\u09B0 \u09A4\u09BE\u09B2\u09BF\u0995\u09BE, \u0996\u09BE\u09B2\u09BF \u09AC\u09BF\u09AC\u09B0\u09A3\u09B8\u09B9 \u09AF\u09BE \u0986\u09AA\u09A8\u09BE\u09B0 AI \u09AA\u09C2\u09B0\u09A3 \u0995\u09B0\u09AC\u09C7\u0964 \u098F\u0996\u09A8\u09CB \u0995\u09BF\u099B\u09C1\u0987 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6 \u0995\u09B0\u09BE \u09B9\u09AF\u09BC \u09A8\u09BE\u0964", "tip.folder.publish": "\u098F\u0987 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u099F\u09BF \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7 \u098F\u0995\u099F\u09BF \u09AA\u09BE\u09AC\u09B2\u09BF\u0995 \u09B0\u09BF\u09AA\u09CB \u09B9\u09BF\u09B8\u09C7\u09AC\u09C7 \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09C7, \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 \u09B8\u09CD\u09AC\u09BE\u0995\u09CD\u09B7\u09B0\u09B8\u09B9\u0964 \u09AB\u09BE\u0987\u09B2\u09C7 \u0995\u09C0 \u09AC\u09BE \u09AA\u09BE\u09B8\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u09A1 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u0997\u09C7\u09B2\u09C7 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6 \u0986\u099F\u0995\u09C7 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC\u0964", "tip.folder.remove": "BitPull \u098F\u0987 \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u099F\u09BF \u09AA\u09A1\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7 \u0995\u09B0\u09C7\u0964 \u098F\u0996\u09BE\u09A8 \u09A5\u09C7\u0995\u09C7 \u0986\u0997\u09C7\u0987 \u09AA\u09CD\u09B0\u0995\u09BE\u09B6\u09BF\u09A4 \u09B0\u09BF\u09AA\u09CB\u0997\u09C1\u09B2\u09CB \u0985\u09A8\u09B2\u09BE\u0987\u09A8\u09C7 \u09A5\u09BE\u0995\u09C7, \u09AF\u09A4\u0995\u09CD\u09B7\u09A3 \u09A8\u09BE \u0986\u09AA\u09A8\u09BF \u09B8\u09C7\u0997\u09C1\u09B2\u09CB \u09B8\u09B0\u09BF\u09AF\u09BC\u09C7 \u09A8\u09C7\u09A8\u0964", "tip.repo.withdraw": "\u098F\u0987 \u09B0\u09BF\u09AA\u09CB\u099F\u09BF \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u09A5\u09C7\u0995\u09C7 \u09B8\u09B0\u09BF\u09AF\u09BC\u09C7 \u09A6\u09C7\u09AF\u09BC\u0964 \u0985\u09A8\u09CD\u09AF \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0\u09BE \u0986\u09B0 \u098F\u099F\u09BF \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u09AC\u09C7\u09A8 \u09A8\u09BE \u09AC\u09BE \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7\u09A8 \u09A8\u09BE\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 \u09AB\u09BE\u0987\u09B2 \u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u0987 \u09A5\u09BE\u0995\u09C7\u0964", "tip.ask": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B0\u09B6\u09CD\u09A8\u099F\u09BF \u098F\u09A8\u09CD\u09A1-\u099F\u09C1-\u098F\u09A8\u09CD\u09A1 \u098F\u09A8\u0995\u09CD\u09B0\u09BF\u09AA\u09CD\u099F\u09C7\u09A1 \u0985\u09AC\u09B8\u09CD\u09A5\u09BE\u09AF\u09BC \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u098F\u09AE\u09A8 \u098F\u0995\u099F\u09BF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09AA\u09BE\u09A0\u09BE\u09AF\u09BC \u09AF\u09BE \u098F\u0995\u099F\u09BF \u0993\u09AA\u09C7\u09A8 AI \u09AE\u09A1\u09C7\u09B2 \u099A\u09BE\u09B2\u09BE\u09AF\u09BC\u0964 \u0995\u09AF\u09BC\u09C7\u0995\u099F\u09BF \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0996\u09B0\u099A \u09B9\u09AF\u09BC\u0964", "tip.tier": "\u09AE\u09A1\u09C7\u09B2\u09C7\u09B0 \u0986\u0995\u09BE\u09B0: \u099B\u09CB\u099F\u099F\u09BF \u09A6\u09CD\u09B0\u09C1\u09A4 \u0993 \u09B8\u09B8\u09CD\u09A4\u09BE, \u09AC\u09A1\u09BC\u099F\u09BF \u09AC\u09C7\u09B6\u09BF \u09AC\u09C1\u09A6\u09CD\u09A7\u09BF\u09AE\u09BE\u09A8 \u098F\u09AC\u0982 \u09AC\u09C7\u09B6\u09BF \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u0996\u09B0\u099A \u0995\u09B0\u09C7\u0964", "tip.show_key": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 AI \u099F\u09C1\u09B2\u0997\u09C1\u09B2\u09CB BitPull-\u098F\u09B0 \u09B8\u0999\u09CD\u0997\u09C7 \u09AF\u09CB\u0997\u09BE\u09AF\u09CB\u0997\u09C7 \u09AF\u09C7 \u0995\u09C0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09C7, \u09B8\u09C7\u099F\u09BF \u09A6\u09C7\u0996\u09BE\u09AF\u09BC\u0964 \u098F\u099F\u09BF \u0995\u09BE\u09B0\u0993 \u09B8\u0999\u09CD\u0997\u09C7 \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09AC\u09C7\u09A8 \u09A8\u09BE\u0964", "tip.setup.download": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF {name}-\u098F\u09B0 \u0985\u09AB\u09BF\u09B8\u09BF\u09AF\u09BC\u09BE\u09B2 \u0987\u09A8\u09B8\u09CD\u099F\u09B2\u09BE\u09B0 \u0986\u09AA\u09A8\u09BE\u09B0 Downloads \u09AB\u09CB\u09B2\u09CD\u09A1\u09BE\u09B0\u09C7 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7 \u0996\u09CB\u09B2\u09C7\u0964 \u09B6\u09C7\u09B7 \u0995\u09B0\u09A4\u09C7 \u098F\u09B0 \u09A7\u09BE\u09AA\u0997\u09C1\u09B2\u09CB \u0985\u09A8\u09C1\u09B8\u09B0\u09A3 \u0995\u09B0\u09C1\u09A8\u0964", "tip.setup.start": "{name} \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C7, \u09AF\u09BE \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u0986\u099B\u09C7 \u0995\u09BF\u09A8\u09CD\u09A4\u09C1 \u099A\u09B2\u099B\u09C7 \u09A8\u09BE\u0964", "tip.setup.pull": "AI \u09AE\u09A1\u09C7\u09B2 {model} ({size} GB) Ollama-\u09A4\u09C7 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7, \u09AF\u09BE\u09A4\u09C7 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u098F\u099F\u09BF \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964", "tip.setup.open": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AC\u09CD\u09B0\u09BE\u0989\u099C\u09BE\u09B0\u09C7 {name}-\u098F\u09B0 \u0985\u09AB\u09BF\u09B8\u09BF\u09AF\u09BC\u09BE\u09B2 \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09C7\u0964", "tip.setup.recheck": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u0995\u09C0 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0986\u099B\u09C7 \u0993 \u0995\u09C0 \u099A\u09B2\u099B\u09C7, \u09A4\u09BE \u0986\u09AC\u09BE\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C7\u0964", "update.title": "\u0985\u09CD\u09AF\u09BE\u09AA \u0986\u09AA\u09A1\u09C7\u099F", "update.current": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3: {v}", "update.latest": "\u09B8\u09B0\u09CD\u09AC\u09B6\u09C7\u09B7 \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3: {v}", "update.button": "\u0986\u09AA\u09A1\u09C7\u099F \u0996\u09C1\u0981\u099C\u09C1\u09A8", "update.install": "\u098F\u0996\u09A8\u0987 \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 {v} \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8", "update.available": "\u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 {v} \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u099A\u09CD\u099B\u09C7\u0964", "update.not_in_app": "\u0986\u09AA\u09A1\u09C7\u099F BitPull \u0985\u09CD\u09AF\u09BE\u09AA \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C7\u0964 \u0986\u09AA\u09A1\u09C7\u099F \u0995\u09B0\u09A4\u09C7 \u0985\u09CD\u09AF\u09BE\u09AA \u09A5\u09C7\u0995\u09C7 \u098F\u0987 \u09A1\u09CD\u09AF\u09BE\u09B6\u09AC\u09CB\u09B0\u09CD\u09A1 \u0996\u09C1\u09B2\u09C1\u09A8\u0964", "update.state.requested": "\u0985\u09CD\u09AF\u09BE\u09AA\u0995\u09C7 \u0996\u09C1\u0981\u099C\u09A4\u09C7 \u09AC\u09B2\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026", "update.state.checking": "\u0986\u09AA\u09A1\u09C7\u099F \u0996\u09CB\u0981\u099C\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026", "update.state.up_to_date": "\u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09BE\u099B\u09C7 \u09B8\u09B0\u09CD\u09AC\u09B6\u09C7\u09B7 \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 \u0986\u099B\u09C7\u0964", "update.state.installing": "\u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 {v} \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0993 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u09B9\u099A\u09CD\u099B\u09C7\u2026 \u0985\u09CD\u09AF\u09BE\u09AA \u09A8\u09BF\u099C\u09C7 \u09A5\u09C7\u0995\u09C7\u0987 \u09B0\u09BF\u09B8\u09CD\u099F\u09BE\u09B0\u09CD\u099F \u09B9\u09AC\u09C7\u0964", "update.state.restarting": "\u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 {v} \u09A8\u09BF\u09AF\u09BC\u09C7 \u09B0\u09BF\u09B8\u09CD\u099F\u09BE\u09B0\u09CD\u099F \u09B9\u099A\u09CD\u099B\u09C7\u2026", "update.state.error": "\u0986\u09AA\u09A1\u09C7\u099F \u0995\u09BE\u099C \u0995\u09B0\u09C7\u09A8\u09BF: {msg}\u0964 \u09AA\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u099A\u09C7\u09B7\u09CD\u099F\u09BE \u0995\u09B0\u09C1\u09A8\u0964", "tip.update": "BitPull-\u098F\u09B0 \u09A8\u09A4\u09C1\u09A8 \u09B8\u0982\u09B8\u09CD\u0995\u09B0\u09A3 \u0986\u099B\u09C7 \u0995\u09BF \u09A8\u09BE \u09A6\u09C7\u0996\u09C7\u0964 \u09A5\u09BE\u0995\u09B2\u09C7 \u09B8\u09C7\u099F\u09BF \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7, \u09B8\u09CD\u09AC\u09BE\u0995\u09CD\u09B7\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C7, \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C7 \u098F\u09AC\u0982 \u0985\u09CD\u09AF\u09BE\u09AA \u09B0\u09BF\u09B8\u09CD\u099F\u09BE\u09B0\u09CD\u099F \u0995\u09B0\u09C7\u0964 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u0995\u09AF\u09BC\u09C7\u0995 \u09B8\u09C7\u0995\u09C7\u09A8\u09CD\u09A1\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u09A5\u09BE\u09AE\u09C7\u0964", "tools.hint": "\u0986\u09AA\u09A8\u09BE\u09B0 AI \u09B8\u09B9\u0995\u09BE\u09B0\u09C0\u0995\u09C7 \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09BE \u0995\u09CB\u09A1 \u0996\u09C1\u0981\u099C\u09A4\u09C7 \u098F\u09AC\u0982 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2 \u0993 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09A6\u09BF\u09A8\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 \u099F\u09C1\u09B2 \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A8:", "tools.connect": "\u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4 \u0995\u09B0\u09C1\u09A8", "tools.connected": "\u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4", "tools.copy": "\u0995\u09AA\u09BF \u0995\u09B0\u09C1\u09A8", "tools.copied": "\u0995\u09AA\u09BF \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "tools.installed": "\u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09BE \u0986\u099B\u09C7", "tools.not_found": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09AA\u09BE\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF", "tools.done": "\u09B9\u09AF\u09BC\u09C7 \u0997\u09C7\u099B\u09C7\u0964 BitPull \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u09B6\u09C1\u09B0\u09C1 \u0995\u09B0\u09A4\u09C7 {name} \u09B0\u09BF\u09B8\u09CD\u099F\u09BE\u09B0\u09CD\u099F \u0995\u09B0\u09C1\u09A8\u0964", "tools.manual": "\u09A8\u09BF\u099C\u09C7 \u09AF\u09CB\u0997 \u0995\u09B0\u09A4\u09C7:", "tools.config_invalid": '{name}-\u098F\u09B0 \u09B8\u09C7\u099F\u09BF\u0982\u09B8 \u09AB\u09BE\u0987\u09B2\u099F\u09BF \u09AC\u09C8\u09A7 JSON \u09A8\u09AF\u09BC, \u09A4\u09BE\u0987 BitPull \u098F\u09A4\u09C7 \u09B9\u09BE\u09A4 \u09A6\u09C7\u09AF\u09BC\u09A8\u09BF\u0964 \u09AB\u09BE\u0987\u09B2\u099F\u09BF \u09A0\u09BF\u0995 \u0995\u09B0\u09C1\u09A8 \u09AC\u09BE "\u0995\u09AA\u09BF \u0995\u09B0\u09C1\u09A8" \u09A6\u09BF\u09AF\u09BC\u09C7 \u09A8\u09BF\u099C\u09C7 BitPull \u09AF\u09CB\u0997 \u0995\u09B0\u09C1\u09A8\u0964', "tip.tools.connect": "\u09B8\u09CD\u09AC\u09AF\u09BC\u0982\u0995\u09CD\u09B0\u09BF\u09AF\u09BC\u09AD\u09BE\u09AC\u09C7 {name}-\u098F\u09B0 \u09B8\u09C7\u099F\u09BF\u0982\u09B8\u09C7 BitPull \u09AF\u09CB\u0997 \u0995\u09B0\u09C7\u0964 \u0986\u0997\u09C7\u09B0 \u09B8\u09C7\u099F\u09BF\u0982\u09B8\u09C7\u09B0 \u098F\u0995\u099F\u09BF \u09AC\u09CD\u09AF\u09BE\u0995\u0986\u09AA \u09AA\u09BE\u09B6\u09C7\u0987 \u09B0\u09BE\u0996\u09BE \u09B9\u09AF\u09BC\u0964", "tip.tools.copy": "\u0995\u09AE\u09BE\u09A8\u09CD\u09A1 \u09AC\u09BE \u09B8\u09C7\u099F\u09BF\u0982\u09B8 \u0995\u09CD\u09B2\u09BF\u09AA\u09AC\u09CB\u09B0\u09CD\u09A1\u09C7 \u0995\u09AA\u09BF \u0995\u09B0\u09C7, \u09AF\u09BE\u09A4\u09C7 \u0986\u09AA\u09A8\u09BF \u09A8\u09BF\u099C\u09C7 {name}-\u098F BitPull \u09AF\u09CB\u0997 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u09A8\u0964", "models.title": "\u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09BE\u09B0 AI \u09AE\u09A1\u09C7\u09B2", "models.hint": "\u09B8\u09AC \u09A7\u09B0\u09A8\u09C7\u09B0 \u0993\u09AA\u09C7\u09A8 \u09AE\u09A1\u09C7\u09B2 \u09AF\u09BE \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964 \u09B6\u09C1\u09A7\u09C1 \u09B8\u09C7\u0987 \u09AE\u09A1\u09C7\u09B2\u0997\u09C1\u09B2\u09CB \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u09AF\u09BC \u09AF\u09BE\u09A6\u09C7\u09B0 \u09B2\u09BE\u0987\u09B8\u09C7\u09A8\u09CD\u09B8 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09B8\u09C7\u09AC\u09BE \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u0985\u09A8\u09C1\u09AE\u09A4\u09BF \u09A6\u09C7\u09AF\u09BC\u0964 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u099A\u09BE\u09B2\u09C1 \u09A5\u09BE\u0995\u09B2\u09C7 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09BE \u09AE\u09A1\u09C7\u09B2\u0997\u09C1\u09B2\u09CB \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC\u0964", "models.engine.title": "\u099B\u09AC\u09BF, \u0995\u09A3\u09CD\u09A0 \u0993 \u09B8\u0982\u0997\u09C0\u09A4 \u0987\u099E\u09CD\u099C\u09BF\u09A8", "models.engine.help": "Lemonade (\u0993\u09AA\u09C7\u09A8 \u09B8\u09CB\u09B0\u09CD\u09B8): \u099B\u09AC\u09BF \u09A4\u09C8\u09B0\u09BF, \u0995\u09A3\u09CD\u09A0 \u09A5\u09C7\u0995\u09C7 \u09B2\u09C7\u0996\u09BE, \u09B2\u09C7\u0996\u09BE \u09A5\u09C7\u0995\u09C7 \u0995\u09A3\u09CD\u09A0, \u09B8\u0982\u0997\u09C0\u09A4, \u09A8\u09A5\u09BF \u09AA\u09C1\u09A8\u09B0\u09CD\u09AC\u09BF\u09A8\u09CD\u09AF\u09BE\u09B8 \u0993 \u099B\u09AC\u09BF \u09AC\u09A1\u09BC \u0995\u09B0\u09BE\u0964 BitPull-\u098F\u09B0 \u09AD\u09C7\u09A4\u09B0\u09C7 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u09B9\u09AF\u09BC, \u0985\u09CD\u09AF\u09BE\u09A1\u09AE\u09BF\u09A8 \u0985\u09A7\u09BF\u0995\u09BE\u09B0 \u09B2\u09BE\u0997\u09C7 \u09A8\u09BE\u0964", "models.engine.install": "\u0987\u099E\u09CD\u099C\u09BF\u09A8 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8", "models.engine.repair": "\u0987\u099E\u09CD\u099C\u09BF\u09A8 \u0986\u09AC\u09BE\u09B0 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8", "models.engine.unsupported": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u0989\u09AA\u09B2\u09AC\u09CD\u09A7 \u09A8\u09AF\u09BC (Apple silicon, \u09AC\u09BE Windows/Linux x64 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8)", "models.need_engine": "\u0986\u0997\u09C7 \u0987\u099E\u09CD\u099C\u09BF\u09A8 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u0995\u09B0\u09C1\u09A8", "models.not_here": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u0989\u09AA\u09B2\u09AC\u09CD\u09A7 \u09A8\u09AF\u09BC", "models.shared": "\u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7 \xB7 \u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09BE", "models.download": "\u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 ({size} GB)", "models.needs_ram": "\u09AA\u09CD\u09B0\u09BE\u09AF\u09BC {ram} GB \u09AE\u09C7\u09AE\u09B0\u09BF \u09B2\u09BE\u0997\u09C7: \u098F\u0996\u09BE\u09A8\u09C7 \u09A7\u09C0\u09B0 \u09B9\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7", "models.recommended": "\u09AA\u09CD\u09B0\u09B8\u09CD\u09A4\u09BE\u09AC\u09BF\u09A4", "models.license": "\u09B2\u09BE\u0987\u09B8\u09C7\u09A8\u09CD\u09B8", "models.ok.engine": "\u0987\u099E\u09CD\u099C\u09BF\u09A8 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u09B9\u099A\u09CD\u099B\u09C7\u2026", "task.chat": "\u09B2\u09C7\u0996\u09BE \u0993 \u0995\u09CB\u09A1", "task.vision": "\u099B\u09AC\u09BF \u2192 \u09B2\u09C7\u0996\u09BE", "task.ocr": "\u09A8\u09A5\u09BF (OCR)", "task.translate": "\u0985\u09A8\u09C1\u09AC\u09BE\u09A6", "task.embed": "\u098F\u09AE\u09AC\u09C7\u09A1\u09BF\u0982 (\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8)", "task.rerank": "\u09AA\u09C1\u09A8\u09B0\u09CD\u09AC\u09BF\u09A8\u09CD\u09AF\u09BE\u09B8", "task.image": "\u099B\u09AC\u09BF \u09A4\u09C8\u09B0\u09BF", "task.upscale": "\u099B\u09AC\u09BF \u09AC\u09A1\u09BC \u0995\u09B0\u09BE", "task.stt": "\u0995\u09A3\u09CD\u09A0 \u09A5\u09C7\u0995\u09C7 \u09B2\u09C7\u0996\u09BE", "task.tts": "\u09B2\u09C7\u0996\u09BE \u09A5\u09C7\u0995\u09C7 \u0995\u09A3\u09CD\u09A0", "task.music": "\u09B8\u0982\u0997\u09C0\u09A4", "limits.title": "\u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u0986\u09AA\u09A8\u09BE\u09B0 \u09B8\u09C0\u09AE\u09BE", "limits.hint": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09A4\u099F\u09BE AI \u0995\u09BE\u099C \u0995\u09B0\u09C7\u0964 \u0995\u09CB\u09A8\u09CB \u09B8\u09C0\u09AE\u09BE \u09A8\u09BE \u09B0\u09BE\u0996\u09A4\u09C7 \u0996\u09BE\u09B2\u09BF \u09B0\u09BE\u0996\u09C1\u09A8\u0964 \u09B8\u09C0\u09AE\u09BE\u09AF\u09BC \u09AA\u09CC\u0981\u099B\u09BE\u09B2\u09C7 \u09AA\u09B0\u09C7\u09B0 \u09B8\u09AE\u09AF\u09BC\u0995\u09BE\u09B2 \u09B6\u09C1\u09B0\u09C1 \u09A8\u09BE \u09B9\u0993\u09AF\u09BC\u09BE \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u0986\u09AA\u09A8\u09BE\u09B0 \u09AE\u09A1\u09C7\u09B2 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC \u09A8\u09BE\u0964", "limits.save": "\u09B8\u09C0\u09AE\u09BE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3 \u0995\u09B0\u09C1\u09A8", "limits.requests": "\u0985\u09A8\u09C1\u09B0\u09CB\u09A7", "limits.tokens": "\u099F\u09CB\u0995\u09C7\u09A8", "limits.used": "\u09AC\u09CD\u09AF\u09AC\u09B9\u09C3\u09A4", "limits.day": "\u09AA\u09CD\u09B0\u09A4\u09BF\u09A6\u09BF\u09A8", "limits.week": "\u09AA\u09CD\u09B0\u09A4\u09BF \u09B8\u09AA\u09CD\u09A4\u09BE\u09B9", "limits.month": "\u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8", "limits.none": "\u0995\u09CB\u09A8\u09CB \u09B8\u09C0\u09AE\u09BE \u09A8\u09C7\u0987", "limits.usage": "{requests}\u099F\u09BF \u0985\u09A8\u09C1\u09B0\u09CB\u09A7 \xB7 {tokens} \u099F\u09CB\u0995\u09C7\u09A8", "limits.saved": "\u09B8\u09C0\u09AE\u09BE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09BF\u09A4 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7\u0964", "tip.models.engine": "\u0993\u09AA\u09C7\u09A8 \u09B8\u09CB\u09B0\u09CD\u09B8 Lemonade \u0987\u099E\u09CD\u099C\u09BF\u09A8 BitPull-\u098F \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7, \u09AF\u09BE\u09A4\u09C7 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u099B\u09AC\u09BF, \u0995\u09A3\u09CD\u09A0 \u0993 \u09B8\u0982\u0997\u09C0\u09A4 \u09AE\u09A1\u09C7\u09B2 \u09A7\u09BE\u09B0 \u09A6\u09BF\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964", "tip.models.download": "{model} ({size} GB) \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C7 \u09AF\u09BE\u09A4\u09C7 \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u0964 \u09AA\u09B0\u09C7 \u09AE\u09C1\u099B\u09C7 \u09AB\u09C7\u09B2\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7\u09A8\u0964", "tip.limits.save": "\u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF AI \u0995\u09BE\u099C\u09C7\u09B0 \u09A6\u09C8\u09A8\u09BF\u0995, \u09B8\u09BE\u09AA\u09CD\u09A4\u09BE\u09B9\u09BF\u0995 \u0993 \u09AE\u09BE\u09B8\u09BF\u0995 \u09B8\u09C0\u09AE\u09BE \u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3 \u0995\u09B0\u09C7\u0964", "lend.visible": "\u2713 \u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u099F\u09BF \u09A6\u09C7\u0996\u099B\u09C7: \u0985\u09A8\u09CD\u09AF\u09A6\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF {cpus} CPU, {ram} GB \u0989\u09AA\u09B2\u09AC\u09CD\u09A7\u0964", "lend.invisible": "\u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995 \u098F\u0996\u09A8\u09CB \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09A6\u09C7\u0996\u099B\u09C7 \u09A8\u09BE: \u098F\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09BE \u0995\u09B0\u09C1\u09A8; \u098F\u09AE\u09A8\u0987 \u09A5\u09BE\u0995\u09B2\u09C7 \u0987\u09A8\u09CD\u099F\u09BE\u09B0\u09A8\u09C7\u099F \u09B8\u0982\u09AF\u09CB\u0997 \u09A6\u09C7\u0996\u09C1\u09A8\u0964", "lend.unusable": "\u26A0 \u098F\u0996\u09A8\u09CB \u0995\u09C7\u0989 \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7 \u09A8\u09BE: \u098F\u0996\u09BE\u09A8\u09C7 \u0995\u09CB\u09A8\u09CB \u0995\u09BE\u099C \u099A\u09B2\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7 \u09A8\u09BE\u0964 {reason}", "lend.unusable.docker": 'Docker BitPull-\u098F\u09B0 \u0986\u0987\u09B8\u09CB\u09B2\u09C7\u09B6\u09A8 \u09AA\u09B0\u09C0\u0995\u09CD\u09B7\u09BE\u09AF\u09BC \u0989\u09A4\u09CD\u09A4\u09C0\u09B0\u09CD\u09A3 \u09B9\u09AF\u09BC\u09A8\u09BF: "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B8\u09C7\u099F \u0986\u09AA \u0995\u09B0\u09C1\u09A8" \u09A6\u09C7\u0996\u09C1\u09A8\u0964', "lend.unusable.off": '\u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0 \u0995\u09BE\u099C \u09AC\u09A8\u09CD\u09A7 \u098F\u09AC\u0982 \u0995\u09CB\u09A8\u09CB AI \u09AE\u09A1\u09C7\u09B2 \u0987\u09A8\u09B8\u09CD\u099F\u09B2 \u09A8\u09C7\u0987: "\u0995\u09A8\u09CD\u099F\u09C7\u0987\u09A8\u09BE\u09B0 \u0995\u09BE\u099C" \u099A\u09BE\u09B2\u09C1 \u0995\u09B0\u09C1\u09A8 \u09AC\u09BE \u098F\u0995\u099F\u09BF \u09AE\u09A1\u09C7\u09B2 \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09C1\u09A8\u0964', "lend.docker_login": 'Docker \u0987\u09AE\u09C7\u099C \u09A1\u09BE\u0989\u09A8\u09B2\u09CB\u09A1 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u099B\u09C7 \u09A8\u09BE \u0995\u09BE\u09B0\u09A3 \u098F\u09B0 Docker Hub \u09B2\u0997\u0987\u09A8 \u0986\u09B0 \u09AC\u09C8\u09A7 \u09A8\u09AF\u09BC\u0964 Docker Desktop-\u098F \u0986\u09AA\u09A8\u09BE\u09B0 \u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F\u09C7 (\u0989\u09AA\u09B0\u09C7 \u09A1\u09BE\u09A8\u09C7) \u0995\u09CD\u09B2\u09BF\u0995 \u0995\u09B0\u09C1\u09A8 \u2192 Sign out, \u09A4\u09BE\u09B0\u09AA\u09B0 \u0986\u09AC\u09BE\u09B0 \u09B2\u0997 \u0987\u09A8 \u0995\u09B0\u09C1\u09A8 \u09AC\u09BE \u09B2\u0997 \u0986\u0989\u099F \u0985\u09AC\u09B8\u09CD\u09A5\u09BE\u09AF\u09BC \u09A5\u09BE\u0995\u09C1\u09A8\u0964 \u09A4\u09BE\u09B0\u09AA\u09B0 "\u0986\u09AC\u09BE\u09B0 \u09AF\u09BE\u099A\u09BE\u0987 \u0995\u09B0\u09C1\u09A8" \u099A\u09BE\u09AA\u09C1\u09A8\u0964', "lend.off_hint": '\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7: \u09A8\u09BF\u099A\u09C7 "{rules}"-\u098F "{enabled}" \u099F\u09BF\u0995 \u09A6\u09BF\u09A8 \u098F\u09AC\u0982 "{save}" \u099A\u09BE\u09AA\u09C1\u09A8\u0964 (\u09AC\u09BF\u09B0\u09A4\u09BF / \u0986\u09AC\u09BE\u09B0 \u09B6\u09C1\u09B0\u09C1 \u09B6\u09C1\u09A7\u09C1 \u0986\u0997\u09C7 \u09A5\u09C7\u0995\u09C7 \u099A\u09BE\u09B2\u09C1 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u0995\u09C7 \u09A5\u09BE\u09AE\u09BE\u09AF\u09BC\u0964)', "lend.low_memory": '\u09AE\u09BE\u09A4\u09CD\u09B0 {mb} MB \u09AE\u09C7\u09AE\u09B0\u09BF \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u099A\u09CD\u099B\u09C7: \u0996\u09C1\u09AC \u0995\u09AE \u0995\u09BE\u099C \u099A\u09B2\u09AC\u09C7\u0964 "{rules}"-\u098F "{memory}" \u09AF\u09C7\u09AE\u09A8 4096 (= 4 GB) \u09A6\u09BF\u09A8 \u098F\u09AC\u0982 "{save}" \u099A\u09BE\u09AA\u09C1\u09A8\u0964', "rules.awake": "\u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09B8\u09AE\u09AF\u09BC \u099C\u09C7\u0997\u09C7 \u09A5\u09BE\u0995\u09C1\u09A8", "rules.awake.help": "\u0995\u09BE\u09B0\u0993 \u099C\u09A8\u09CD\u09AF \u0995\u09BE\u099C \u099A\u09BE\u09B2\u09BE\u09A8\u09CB\u09B0 \u09B8\u09AE\u09AF\u09BC \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0 \u09B8\u09CD\u09B2\u09BF\u09AA\u09C7 \u09AF\u09BE\u09AC\u09C7 \u09A8\u09BE (\u09B8\u09CD\u0995\u09CD\u09B0\u09BF\u09A8 \u09A4\u09AC\u09C1\u0993 \u09AC\u09A8\u09CD\u09A7 \u09B9\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7)\u0964 \u09AA\u09B0\u09C7 \u09B8\u09CD\u09AC\u09BE\u09AD\u09BE\u09AC\u09BF\u0995\u09AD\u09BE\u09AC\u09C7 \u09B8\u09CD\u09B2\u09BF\u09AA \u09B9\u09AC\u09C7\u0964 \u0995\u09BE\u099C \u09AE\u09BE\u099D\u09AA\u09A5\u09C7 \u0995\u09BE\u099F\u09AC\u09C7 \u09A8\u09BE\u0964", "ask.wait": "\u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A \u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09BE (\u09AE\u09BF\u09A8\u09BF\u099F)", "ask.wait.save": "\u09B8\u0982\u09B0\u0995\u09CD\u09B7\u09A3 \u0995\u09B0\u09C1\u09A8", "ask.wait.saved": "\u0989\u09A4\u09CD\u09A4\u09B0\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF {n} \u09AE\u09BF\u09A8\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09BE \u0995\u09B0\u09BE \u09B9\u09AC\u09C7\u0964", "ask.wait.range": "\u09E7 \u09A5\u09C7\u0995\u09C7 \u09E7\u09E8\u09E6-\u098F\u09B0 \u09AE\u09A7\u09CD\u09AF\u09C7 \u09AE\u09BF\u09A8\u09BF\u099F \u09B2\u09BF\u0996\u09C1\u09A8\u0964", "tip.wait": "\u09A8\u09C7\u099F\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u0995\u09C7\u09B0 AI \u09AE\u09A1\u09C7\u09B2\u09C7\u09B0 \u0989\u09A4\u09CD\u09A4\u09B0\u09C7\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09A4\u0995\u09CD\u09B7\u09A3 \u0985\u09AA\u09C7\u0995\u09CD\u09B7\u09BE \u0995\u09B0\u09AC\u09C7\u09A8\u0964 \u0985\u09A8\u09CD\u09AF\u09C7\u09B0 \u09AA\u09CD\u09B0\u09B8\u09C7\u09B8\u09B0\u09C7 \u099A\u09B2\u09BE \u09AE\u09A1\u09C7\u09B2\u09C7 \u09AE\u09BF\u09A8\u09BF\u099F \u09B2\u09BE\u0997\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964 \u0986\u09AA\u09A8\u09BE\u09B0 AI-\u0993 \u098F\u099F\u09BF \u09AC\u09A6\u09B2\u09BE\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964", "plan.month": "/\u09AE\u09BE\u09B8", "plan.free.1": "\u09B6\u09C7\u09AF\u09BC\u09BE\u09B0 \u0995\u09B0\u09BE \u099C\u09CD\u099E\u09BE\u09A8", "plan.free.2": "\u09A7\u09BE\u09B0 \u09A6\u09BF\u09AF\u09BC\u09C7 \u0985\u09B0\u09CD\u099C\u09BF\u09A4 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09A6\u09BF\u09AF\u09BC\u09C7 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BF\u0982", "plan.free.3": "\u09AC\u09CD\u09AF\u09BE\u09B2\u09BE\u09A8\u09CD\u09B8 \u221220 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4", "plan.base.1": "\u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 80 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F", "plan.base.2": "\u0995\u09A8\u099C\u09BF\u0989\u09AE\u09BE\u09B0 GPU \u0993 \u09AE\u09BE\u099D\u09BE\u09B0\u09BF \u09AE\u09A1\u09C7\u09B2", "plan.base.3": "\u09AC\u09CD\u09AF\u09BE\u09B2\u09BE\u09A8\u09CD\u09B8 \u2212100 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4", "plan.pro.1": "\u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 200 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F", "plan.pro.2": "\u09B8\u09B0\u09CD\u09AC\u09CB\u099A\u09CD\u099A \u0985\u0997\u09CD\u09B0\u09BE\u09A7\u09BF\u0995\u09BE\u09B0, \u09B8\u09AC GPU \u0993 \u09AC\u09A1\u09BC \u09AE\u09A1\u09C7\u09B2", "plan.pro.3": "\u09AC\u09CD\u09AF\u09BE\u09B2\u09BE\u09A8\u09CD\u09B8 \u2212500 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4", "plans.current": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B2\u09CD\u09AF\u09BE\u09A8", "plans.choose": "{plan} \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A8", "plans.renew": "\u09AA\u09CD\u09B0\u09A4\u09BF \u09AE\u09BE\u09B8\u09C7 \u09A8\u09AC\u09BE\u09AF\u09BC\u09A8 \u09B9\u09AF\u09BC; \u09AF\u09C7\u0995\u09CB\u09A8\u09CB \u09B8\u09AE\u09AF\u09BC \u09AC\u09BE\u09A4\u09BF\u09B2 \u0995\u09B0\u09C1\u09A8, \u09AA\u09B0\u09BF\u09B6\u09CB\u09A7\u09BF\u09A4 \u09B8\u09AE\u09AF\u09BC\u09C7\u09B0 \u09B6\u09C7\u09B7 \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u09AA\u09CD\u09B2\u09CD\u09AF\u09BE\u09A8 \u09B8\u0995\u09CD\u09B0\u09BF\u09AF\u09BC \u09A5\u09BE\u0995\u09C7", "plans.recharge.title": "\u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09B0\u09BF\u099A\u09BE\u09B0\u09CD\u099C", "plans.recharge.1": "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AC\u09CD\u09AF\u09BE\u09B2\u09C7\u09A8\u09CD\u09B8\u09C7 {n} \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09AF\u09CB\u0997 \u09B9\u09AF\u09BC", "plans.recharge.2": "\u098F\u0995\u09AC\u09BE\u09B0\u09C7\u09B0 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F, \u0995\u09CB\u09A8\u09CB \u09B8\u09BE\u09AC\u09B8\u09CD\u0995\u09CD\u09B0\u09BF\u09AA\u09B6\u09A8 \u09A8\u09C7\u0987", "plans.recharge.3": "\u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F\u09C7\u09B0 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u09B6\u09C7\u09B7 \u09B9\u09AF\u09BC \u09A8\u09BE", "plans.summary": "\u0986\u09AA\u09A8\u09BF \u0995\u09BF\u09A8\u099B\u09C7\u09A8", "plans.pay": "\u09A8\u09BF\u09B0\u09BE\u09AA\u09A6 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F\u09C7 \u09AF\u09BE\u09A8", "plans.cancel": "\u09AC\u09BE\u09A4\u09BF\u09B2", "plans.off": "\u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u098F\u0996\u09A8\u09CB \u099A\u09BE\u09B2\u09C1 \u09B9\u09AF\u09BC\u09A8\u09BF\u0964", "account.line": "\u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F: {email}", "account.via.email": "\u0987\u09AE\u09C7\u09B2 \u0993 \u09AA\u09BE\u09B8\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u09A1", "logout.button": "\u09B2\u0997 \u0986\u0989\u099F", "logout.confirm": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 {email} \u09A5\u09C7\u0995\u09C7 \u09B2\u0997 \u0986\u0989\u099F \u0995\u09B0\u09AC\u09C7\u09A8? \u0986\u09AC\u09BE\u09B0 \u09B2\u0997 \u0987\u09A8 \u09A8\u09BE \u0995\u09B0\u09BE \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7 \u09A5\u09BE\u0995\u09AC\u09C7\u0964 \u098F\u09B0\u09AA\u09B0 \u0985\u09A8\u09CD\u09AF \u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F \u09A6\u09BF\u09AF\u09BC\u09C7 \u09B2\u0997 \u0987\u09A8 \u0995\u09B0\u09A4\u09C7 \u09AA\u09BE\u09B0\u09AC\u09C7\u09A8; \u09B8\u09CD\u09AC\u09BE\u0997\u09A4 \u0995\u09CD\u09B0\u09C7\u09A1\u09BF\u099F \u09AA\u09CD\u09B0\u09A4\u09BF \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u098F\u0995\u09AC\u09BE\u09B0\u0987 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u09AF\u09BC\u0964", "logout.yes": "\u09B2\u0997 \u0986\u0989\u099F", "logout.done": "\u0986\u09AA\u09A8\u09BF \u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09B2\u0997 \u0986\u0989\u099F \u0995\u09B0\u09C7\u099B\u09C7\u09A8\u0964 \u098F\u0995\u0987 \u09AC\u09BE \u0985\u09A8\u09CD\u09AF \u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F\u09C7 \u0986\u09AC\u09BE\u09B0 \u09B2\u0997 \u0987\u09A8 \u0995\u09B0\u09A4\u09C7 BitPull \u0985\u09CD\u09AF\u09BE\u09AA \u0996\u09C1\u09B2\u09C1\u09A8 \u0985\u09A5\u09AC\u09BE \u099A\u09BE\u09B2\u09BE\u09A8:", "tip.logout": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u0995\u09C7 \u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F \u09A5\u09C7\u0995\u09C7 \u09B2\u0997 \u0986\u0989\u099F \u0995\u09B0\u09C7, \u09AF\u09C7\u09AE\u09A8 \u0985\u09A8\u09CD\u09AF \u0985\u09CD\u09AF\u09BE\u0995\u09BE\u0989\u09A8\u09CD\u099F\u09C7 \u09B2\u0997 \u0987\u09A8 \u0995\u09B0\u09BE\u09B0 \u099C\u09A8\u09CD\u09AF\u0964 \u0986\u0997\u09C7 \u09A8\u09BF\u09B6\u09CD\u099A\u09BF\u09A4 \u0995\u09B0\u09A4\u09C7 \u09AC\u09B2\u09C7\u0964", "tip.logout.yes": "\u098F\u0987 \u0995\u09AE\u09CD\u09AA\u09BF\u0989\u099F\u09BE\u09B0\u09C7 \u09B8\u09C7\u09B6\u09A8 \u09B6\u09C7\u09B7 \u0995\u09B0\u09C7\u0964 \u0986\u09AC\u09BE\u09B0 \u09B2\u0997 \u0987\u09A8 \u09A8\u09BE \u0995\u09B0\u09BE \u09AA\u09B0\u09CD\u09AF\u09A8\u09CD\u09A4 \u09A7\u09BE\u09B0 \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09AC\u09A8\u09CD\u09A7 \u09A5\u09BE\u0995\u09AC\u09C7\u0964", "tip.logout.no": "\u09B2\u0997 \u0987\u09A8 \u09A5\u09BE\u0995\u09C1\u09A8\u0964", "tip.plans.choose": "\u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F\u09C7\u09B0 \u0986\u0997\u09C7 \u09AA\u09CD\u09B2\u09CD\u09AF\u09BE\u09A8\u09C7\u09B0 \u09A8\u09BE\u09AE, \u09A6\u09BE\u09AE \u0993 \u0995\u09C0 \u0995\u09C0 \u0986\u099B\u09C7 \u09A6\u09C7\u0996\u09BE\u09AF\u09BC\u0964", "tip.plans.pay": "\u09AC\u09CD\u09B0\u09BE\u0989\u099C\u09BE\u09B0\u09C7 Stripe-\u098F\u09B0 \u09A8\u09BF\u09B0\u09BE\u09AA\u09A6 \u09AA\u09C7\u09AE\u09C7\u09A8\u09CD\u099F \u09AA\u09C7\u099C \u0996\u09CB\u09B2\u09C7\u0964", "tip.plans.cancel": "\u09A8\u09BE \u0995\u09BF\u09A8\u09C7 \u09B8\u09BE\u09B0\u09BE\u0982\u09B6 \u09AC\u09A8\u09CD\u09A7 \u0995\u09B0\u09C7\u0964" }, de: { "lang.name": "Deutsch", "app.title": "BitPull", "locked.text": "\xD6ffne das Dashboard \xFCber die BitPull-App: Der Link enth\xE4lt den Zugangsschl\xFCssel.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Direkte Adresse", "pill.relay_on": "Relay verbunden", "pill.relay_off": "Relay nicht verbunden", "pill.cached": "{n} zwischengespeicherte Kopien", "net.title": "Netzwerk live", "net.online": "{n} Computer online", "net.lending": "{n} verleihen gerade", "net.cpu": "{n} CPU-Kerne", "net.ram": "{n} GB RAM", "net.gpu": "{n} GPUs", "net.models": "{n} KI-Modelle", "net.jobs": "{n} laufende Auftr\xE4ge", "credits.title": "Guthaben", "credits.plan": "Tarif {plan} \xB7 bis zu {n} m\xF6glich", "plan.free": "Free", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base 4,50 \u20AC", "buy.pro": "Pro 9,90 \u20AC", "buy.recharge": "Aufladen 5 \u20AC", "buy.ok": "Zahlungsseite in deinem Browser ge\xF6ffnet.", "lend.title": "Diesen Computer verleihen", "lend.hint": "Auftr\xE4ge laufen Ende-zu-Ende-verschl\xFCsselt in isolierten Sandboxes, ohne Zugriff auf deine Dateien. Du verdienst Credits.", "lend.state.off": "Aus", "lend.state.waiting": "Wartet", "lend.state.working": "Arbeitet", "lend.reason.lending_off": "Verleihen ist aus", "lend.reason.paused": "Pausiert", "lend.reason.outside_hours": "Au\xDFerhalb deiner Zeiten", "lend.reason.on_battery": "Im Akkubetrieb", "lend.reason.computer_in_use": "Du benutzt den Computer", "lend.reason.no_jobs": "Keine Auftr\xE4ge in der Warteschlange", "lend.running": "F\xFChrt seit {time} einen {kind}-Auftrag aus", "lend.detail": "{reason} \xB7 {n} Auftr\xE4ge erledigt \xB7 bietet {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", Sandbox {name}", "lend.detail.models": ", {n} Modelle", "lend.pause": "Pausieren", "lend.resume": "Fortsetzen", "lend.paused_ok": "Verleihen pausiert. Ein laufender Auftrag wurde an einen anderen Computer \xFCbergeben.", "lend.resumed_ok": "Verleihen fortgesetzt.", "setup.title": "Diesen Computer einrichten", "setup.hint": "Was dieser Computer zum Verleihen braucht. Zum Nutzen des Netzwerks brauchst du nichts weiter. Die Installer kommen von den offiziellen Seiten; dein System fragt dich nach einer Best\xE4tigung.", "setup.checking": "Wird gepr\xFCft\u2026", "setup.docker.help": "F\xFChrt Auftr\xE4ge anderer in isolierten Sandboxes aus. N\xF6tig f\xFCr Container-Auftr\xE4ge. Kostenlos f\xFCr private Nutzung und kleine Unternehmen.", "setup.docker.download": "Docker herunterladen", "setup.docker.start": "Docker starten", "setup.apple.title": "Apple Container (optional)", "setup.apple.help": "St\xE4rkere Isolation: jeder Auftrag in einer eigenen virtuellen Maschine. Optional; Docker reicht f\xFCr den Anfang.", "setup.apple.get": "Apple Container holen", "setup.ollama.help": "F\xFChrt offene KI-Modelle aus (Qwen, Llama, Mistral\u2026). N\xF6tig, um KI-Modelle zu verleihen.", "setup.ollama.download": "Ollama herunterladen", "setup.ollama.start": "Ollama starten", "setup.model.title": "KI-Modell", "setup.model.help": "Das Modell, das dieser Computer anderen anbietet. Empfohlen f\xFCr {ram} GB Arbeitsspeicher: {model}.", "setup.model.download": "{model} herunterladen ({size} GB)", "setup.model.none": "noch keins", "setup.model.need_ollama": "Installiere und starte zuerst Ollama", "setup.nvidia.title": "NVIDIA-GPU-Treiber (optional)", "setup.nvidia.help": "Nur wenn dieser Computer eine NVIDIA-Grafikkarte hat, die du verleihen willst.", "setup.nvidia.get": "NVIDIA-Treiber holen", "setup.status.running": "installiert und l\xE4uft", "setup.status.installed": "installiert", "setup.status.stopped": "installiert, l\xE4uft nicht", "setup.status.missing": "nicht installiert", "setup.status.found": "gefunden", "setup.status.not_found": "nicht gefunden", "setup.terminal": "Im Terminal ausf\xFChren:", "setup.done": "Fertig", "setup.opened": "Erledigt: {file} ge\xF6ffnet, folge den Schritten", "setup.recheck": "Erneut pr\xFCfen", "setup.ok.download": "Download gestartet. Der Installer \xF6ffnet sich automatisch, wenn er fertig ist: Folge seinen Schritten.", "setup.ok.start": "Wird gestartet\u2026 das kann bis zu einer Minute dauern. Diese Liste aktualisiert sich von selbst.", "setup.ok.pull": "Modell-Download gestartet. Der Fortschritt wird oben angezeigt.", "setup.ok.page": "Seite in deinem Browser ge\xF6ffnet.", "setup.ok.recheck": "Erneut gepr\xFCft.", "rules.title": "Regeln f\xFCrs Verleihen", "rules.enabled": "Verleihen an", "rules.enabled.help": "Hauptschalter. Wenn aus, f\xFChrt dieser Computer nie Auftr\xE4ge anderer aus. Du kannst das Netzwerk trotzdem selbst nutzen.", "rules.cpus": "Max. CPUs", "rules.cpus.help": "Wie viele Prozessorkerne ein Auftrag h\xF6chstens nutzen darf. Beispiel: Bei einem Computer mit 8 Kernen bleiben mit 2 noch 6 Kerne f\xFCr dich frei.", "rules.memory": "Max. Arbeitsspeicher (MB)", "rules.memory.help": "RAM, den ein Auftrag nutzen darf, in Megabyte (1024 MB = 1 GB). BitPull bietet nie mehr als die H\xE4lfte des Arbeitsspeichers dieses Computers an.", "rules.gpu": "GPU", "rules.gpu.none": "Keine", "rules.gpu.consumer": "Standard (8\u201312 GB)", "rules.gpu.high": "High-End (16\u201324 GB)", "rules.gpu.datacenter": "Rechenzentrum (40 GB+)", "rules.gpu.help": "Die Grafikkarte, die du verleihst, nach Grafikspeicher. Lass \u201EKeine\u201C, wenn du keine eigene GPU hast oder sie nicht verleihen willst. Eine GPU bringt die meisten Credits.", "rules.containers": "Container-Auftr\xE4ge", "rules.containers.help": "F\xFChrt Builds, Tests und Skripte f\xFCr andere in einer Sandbox ohne Internet und ohne Zugriff auf deine Dateien aus. Braucht Docker (oder Apple Container): siehe \u201EDiesen Computer einrichten\u201C.", "rules.models": "Offene Modelle (Ollama)", "rules.models.help": "Beantwortet KI-Anfragen mit den offenen Modellen, die in Ollama auf diesem Computer installiert sind. Braucht Ollama und mindestens ein Modell.", "rules.idle": "Erst nach Minuten Inaktivit\xE4t", "rules.idle.help": "Nur verleihen, wenn du Tastatur und Maus so viele Minuten nicht ber\xFChrt hast. 0 = auch verleihen, w\xE4hrend du arbeitest.", "rules.ac": "Nur am Stromnetz", "rules.ac.help": "Auf einem Laptop wird das Verleihen im Akkubetrieb gestoppt, damit es den Akku nie leert.", "rules.hours": "Nur von / bis Uhr (leer = immer)", "rules.hours.help": "Nur in diesem Zeitfenster verleihen, im 24-Stunden-Format. Beispiel: 22 und 8 = von 22 bis 8 Uhr. Lass beide leer, um jederzeit zu verleihen.", "rules.cache": "Kopien fremder Repos im Cache", "rules.cache.help": "Wie viele \xF6ffentliche Repos anderer Nutzer dieser Computer als Kopie beh\xE4lt, damit sie verf\xFCgbar bleiben, wenn ihre Autoren offline sind. Braucht etwas Speicherplatz und bringt Credits. 0 = keine.", "rules.save": "Regeln speichern", "rules.saved": "Regeln gespeichert. Sie gelten in wenigen Sekunden.", "rules.hours_both": "F\xFClle beide Uhrzeiten aus oder lass beide leer, um jederzeit zu verleihen.", "folders.title": "Freigegebene Ordner", "folders.hint": "BitPull liest nur diese Ordner. Um einen zu ver\xF6ffentlichen, braucht es eine vollst\xE4ndige bitpull.json.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Freigeben", "folders.none": "Keine freigegebenen Ordner.", "folders.draft": "Entwurf", "folders.publish": "Ver\xF6ffentlichen", "folders.remove": "Entfernen", "folders.need_path": "Gib zuerst den vollst\xE4ndigen Pfad eines Ordners ein, z. B. /Users/you/projects/my-library.", "folders.added": "Ordner freigegeben.", "folders.removed": "Ordner entfernt. BitPull liest ihn nicht mehr.", "folders.drafted": "Entwurf bereit: {n} Dateien gefunden. Lass deine KI die Zusammenfassung und Beschreibungen ausf\xFCllen (Tool prepare_publish) und klicke dann auf Ver\xF6ffentlichen.", "folders.published": "\u201E{name}\u201C mit {n} Dateien ver\xF6ffentlicht.", "folders.secrets_in": "Gefunden in: {where}", "folders.line": "{file} Zeile {line}", "repos.title": "Deine ver\xF6ffentlichten Repos", "repos.hint": "Sie aktualisieren sich von selbst, wenn du die Dateien \xE4nderst (alle 5 Minuten).", "repos.none": "Keine ver\xF6ffentlichten Repos.", "repos.withdraw": "Zur\xFCckziehen", "repos.withdrawn": "Repo aus dem Netzwerk zur\xFCckgezogen.", "ask.title": "Offene Modelle im Netzwerk", "ask.offers": "Dieser Computer bietet an: {models}.", "ask.offers_none": "keine Modelle (installiere Ollama, um welche anzubieten)", "ask.placeholder": "Frag ein offenes Modell im Netzwerk\u2026", "ask.small": "Klein", "ask.medium": "Mittel", "ask.large": "Gro\xDF", "ask.button": "Fragen", "ask.empty": "Schreib zuerst eine Frage.", "ask.waiting": "Suche einen Computer mit dem Modell\u2026 das kann bis zu einer Minute dauern.", "ask.credits": "{n} Credits", "tools.title": "Verbinde deine Tools", "tools.mcp": "F\xFCr Claude Code und MCP-Clients im Terminal ausf\xFChren:", "tools.openai": "F\xFCr OpenAI-kompatible Tools: Basis-URL", "tools.key": "API-Schl\xFCssel", "tools.show": "Anzeigen", "jobs.title": "Deine letzten Auftr\xE4ge", "jobs.none": "Keine Auftr\xE4ge.", "jobs.model": "Modell", "jobs.container": "Container", "jobs.status.queued": "In Warteschlange", "jobs.status.running": "L\xE4uft", "jobs.status.done": "Fertig", "jobs.status.failed": "Fehlgeschlagen", "jobs.status.canceled": "Abgebrochen", "jobs.cost": "{n} Credits", working: "Wird bearbeitet\u2026", "err.agent_down": "BitPull auf diesem Computer antwortet nicht. Es startet innerhalb von 30 Sekunden von selbst neu: Versuch es gleich noch einmal.", "err.server": "Der BitPull-Server ist nicht erreichbar. Pr\xFCf deine Internetverbindung und versuch es noch einmal.", "err.session": "Diese Dashboard-Sitzung ist abgelaufen. \xD6ffne sie erneut \xFCber die BitPull-App.", "err.billing": "Zahlungen sind noch nicht aktiv.", "err.no_folder": "Dieser Ordner existiert auf diesem Computer nicht. Pr\xFCf den Pfad.", "err.not_folder": "Dieser Pfad ist eine Datei, kein Ordner.", "err.credits": "Nicht genug Credits.", "err.device": "Dieser Computer ist noch nicht verbunden. Lass die BitPull-App offen und versuch es in einer Minute noch einmal.", "err.no_model": "Gerade bietet kein Computer im Netzwerk ein KI-Modell an. Versuch es sp\xE4ter noch einmal.", "err.invalid": "Einige Werte sind ung\xFCltig. Pr\xFCf die Felder und versuch es noch einmal.", "tip.lang": "Sprache der App. Deine Auswahl wird auf diesem Computer gespeichert.", "tip.buy.base": "\xD6ffnet die sichere Zahlungsseite f\xFCr den Tarif Base: 4,50 \u20AC pro Monat mit 80 Credits jeden Monat. Du kannst jederzeit k\xFCndigen.", "tip.buy.pro": "\xD6ffnet die sichere Zahlungsseite f\xFCr den Tarif Pro: 9,90 \u20AC pro Monat mit 200 Credits jeden Monat, h\xF6chster Priorit\xE4t und allen GPUs. Du kannst jederzeit k\xFCndigen.", "tip.buy.recharge": "\xD6ffnet die sichere Zahlungsseite, um einmalig 80 Credits f\xFCr 5 \u20AC zu kaufen. Sie verfallen nie.", "tip.pause": "Stoppt das Verleihen sofort. Ein gerade laufender Auftrag wird an einen anderen Computer \xFCbergeben. Klick erneut, um fortzusetzen.", "tip.resume": "Startet das Verleihen wieder, nach deinen Regeln f\xFCrs Verleihen.", "tip.rules.save": "Speichert die Regeln oben. Sie gelten in wenigen Sekunden; nichts \xE4ndert sich, bis du hier klickst.", "tip.folder.add": "Erlaubt BitPull, den links eingegebenen Ordner zu lesen. Dateien au\xDFerhalb freigegebener Ordner werden nie gelesen oder geteilt.", "tip.folder.draft": "Erstellt bitpull.json im Ordner: die Liste seiner Dateien mit leeren Beschreibungen, die deine KI ausf\xFCllt. Es wird noch nichts ver\xF6ffentlicht.", "tip.folder.publish": "Teilt diesen Ordner im Netzwerk als \xF6ffentliches Repo, signiert von diesem Computer. Die Ver\xF6ffentlichung wird blockiert, wenn Schl\xFCssel oder Passw\xF6rter in den Dateien gefunden werden.", "tip.folder.remove": "BitPull liest diesen Ordner nicht mehr. Bereits daraus ver\xF6ffentlichte Repos bleiben online, bis du sie zur\xFCckziehst.", "tip.repo.withdraw": "Entfernt dieses Repo aus dem Netzwerk. Andere Nutzer k\xF6nnen es nicht mehr finden oder herunterladen. Deine Dateien bleiben auf deinem Computer.", "tip.ask": "Sendet deine Frage Ende-zu-Ende-verschl\xFCsselt an einen Computer im Netzwerk, auf dem ein offenes KI-Modell l\xE4uft. Kostet ein paar Credits.", "tip.tier": "Modellgr\xF6\xDFe: Klein ist schnell und g\xFCnstig, Gro\xDF ist schlauer und kostet mehr Credits.", "tip.show_key": "Zeigt den Schl\xFCssel, mit dem KI-Tools auf diesem Computer mit BitPull sprechen. Teile ihn mit niemandem.", "tip.setup.download": "L\xE4dt den offiziellen Installer von {name} f\xFCr diesen Computer in deinen Downloads-Ordner und \xF6ffnet ihn. Folge seinen Schritten, um fertig zu werden.", "tip.setup.start": "Startet {name}, das auf diesem Computer installiert ist, aber nicht l\xE4uft.", "tip.setup.pull": "L\xE4dt das KI-Modell {model} ({size} GB) in Ollama herunter, damit dieser Computer es anderen anbieten kann.", "tip.setup.open": "\xD6ffnet die offizielle Seite von {name} in deinem Browser.", "tip.setup.recheck": "Pr\xFCft erneut, was auf diesem Computer installiert ist und l\xE4uft.", "update.title": "App-Updates", "update.current": "Installierte Version: {v}", "update.latest": "Neueste Version: {v}", "update.button": "Nach Updates suchen", "update.install": "Version {v} jetzt installieren", "update.available": "Version {v} ist verf\xFCgbar.", "update.not_in_app": "Updates werden von der BitPull-App installiert. \xD6ffne dieses Dashboard \xFCber die App, um zu aktualisieren.", "update.state.requested": "App wird um Pr\xFCfung gebeten\u2026", "update.state.checking": "Suche nach Updates\u2026", "update.state.up_to_date": "Du hast die neueste Version.", "update.state.installing": "Version {v} wird heruntergeladen und installiert\u2026 die App startet von selbst neu.", "update.state.restarting": "Neustart mit Version {v}\u2026", "update.state.error": "Das Update hat nicht geklappt: {msg}. Versuch es sp\xE4ter noch einmal.", "tip.update": "Pr\xFCft, ob es eine neuere Version von BitPull gibt. Falls ja, wird sie heruntergeladen, ihre Signatur gepr\xFCft, sie installiert und die App neu gestartet. Das Verleihen pausiert f\xFCr ein paar Sekunden.", "tools.hint": "Lass deinen KI-Assistenten geteilten Code durchsuchen und die offenen Modelle und Computer des Netzwerks nutzen. W\xE4hle dein Tool:", "tools.connect": "Verbinden", "tools.connected": "Verbunden", "tools.copy": "Kopieren", "tools.copied": "Kopiert.", "tools.installed": "Installiert", "tools.not_found": "Auf diesem Computer nicht gefunden", "tools.done": "Fertig. Starte {name} neu, um BitPull zu nutzen.", "tools.manual": "So f\xFCgst du es von Hand hinzu:", "tools.config_invalid": "Die Einstellungsdatei von {name} ist kein g\xFCltiges JSON, daher hat BitPull sie nicht ver\xE4ndert. Korrigiere die Datei oder f\xFCge BitPull mit Kopieren von Hand hinzu.", "tip.tools.connect": "F\xFCgt BitPull automatisch zu den Einstellungen von {name} hinzu. Eine Sicherung der vorherigen Einstellungen wird daneben aufbewahrt.", "tip.tools.copy": "Kopiert den Befehl oder die Einstellungen in die Zwischenablage, damit du BitPull selbst zu {name} hinzuf\xFCgen kannst.", "models.title": "KI-Modelle zum Teilen", "models.hint": "Offene Modelle aller Art, die dieser Computer verleihen kann. Aufgef\xFChrt sind nur Modelle, deren Lizenz die Bereitstellung f\xFCr andere erlaubt. Heruntergeladene Modelle werden dem Netzwerk angeboten, solange das Verleihen aktiv ist.", "models.engine.title": "Engine f\xFCr Bilder, Sprache und Musik", "models.engine.help": "Lemonade (Open Source): Bildgenerierung, Spracherkennung, Sprachausgabe, Musik, Reranking und Hochskalieren. Wird in BitPull installiert, ohne Administratorrechte.", "models.engine.install": "Engine installieren", "models.engine.repair": "Engine neu installieren", "models.engine.unsupported": "Auf diesem Computer nicht verf\xFCgbar (ben\xF6tigt Apple Silicon oder Windows/Linux x64)", "models.need_engine": "Zuerst die Engine installieren", "models.not_here": "Auf diesem Computer nicht verf\xFCgbar", "models.shared": "Heruntergeladen \xB7 geteilt", "models.download": "Herunterladen ({size} GB)", "models.needs_ram": "Ben\xF6tigt etwa {ram} GB Speicher: hier eventuell langsam", "models.recommended": "Empfohlen", "models.license": "Lizenz", "models.ok.engine": "Engine wird installiert\u2026", "task.chat": "Text und Code", "task.vision": "Bilder \u2192 Text", "task.ocr": "Dokumente (OCR)", "task.translate": "\xDCbersetzung", "task.embed": "Embeddings (Suche)", "task.rerank": "Reranking", "task.image": "Bildgenerierung", "task.upscale": "Bilder hochskalieren", "task.stt": "Sprache \u2192 Text", "task.tts": "Text \u2192 Sprache", "task.music": "Musik", "limits.title": "Deine Limits f\xFCr andere", "limits.hint": "Wie viel KI-Arbeit dieser Computer f\xFCr andere leistet. Leer lassen f\xFCr kein Limit. Ist ein Limit erreicht, werden deine Modelle bis zum n\xE4chsten Zeitraum nicht mehr angeboten.", "limits.save": "Limits speichern", "limits.requests": "Anfragen", "limits.tokens": "Tokens", "limits.used": "Genutzt", "limits.day": "Pro Tag", "limits.week": "Pro Woche", "limits.month": "Pro Monat", "limits.none": "kein Limit", "limits.usage": "{requests} Anfragen \xB7 {tokens} Tokens", "limits.saved": "Limits gespeichert.", "tip.models.engine": "L\xE4dt die Open-Source-Engine Lemonade in BitPull, damit dieser Computer Bild-, Sprach- und Musikmodelle verleihen kann.", "tip.models.download": "L\xE4dt {model} ({size} GB) auf diesen Computer, um es anderen anzubieten. Du kannst es sp\xE4ter entfernen.", "tip.limits.save": "Speichert die t\xE4glichen, w\xF6chentlichen und monatlichen Limits f\xFCr KI-Arbeit f\xFCr andere.", "lend.visible": "\u2713 Das Netzwerk sieht diesen Computer: {cpus} CPU, {ram} GB f\xFCr andere verf\xFCgbar.", "lend.invisible": "Das Netzwerk sieht das Verleihen noch nicht: warte bis zu einer Minute; bleibt es so, pr\xFCfe die Internetverbindung.", "lend.unusable": "\u26A0 Noch niemand kann diesen Computer nutzen: hier kann kein Auftrag laufen. {reason}", "lend.unusable.docker": "Docker besteht die Isolationspr\xFCfung von BitPull nicht: siehe \u201EDiesen Computer einrichten\u201C.", "lend.unusable.off": "Container-Auftr\xE4ge sind aus und kein KI-Modell ist installiert: aktiviere \u201EContainer-Auftr\xE4ge\u201C oder lade ein Modell herunter.", "lend.docker_login": "Docker kann keine Images herunterladen, weil seine Docker-Hub-Anmeldung nicht mehr g\xFCltig ist. Klicke in Docker Desktop auf dein Konto (oben rechts) \u2192 Sign out, melde dich dann wieder an oder bleib abgemeldet. Dr\xFCcke danach Erneut pr\xFCfen.", "lend.off_hint": "Das Verleihen ist ausgeschaltet: Hake unten in \u201E{rules}\u201C \u201E{enabled}\u201C an und dr\xFCcke \u201E{save}\u201C. (Pause / Fortsetzen pausiert nur ein bereits aktives Verleihen.)", "lend.low_memory": "Es werden nur {mb} MB Speicher angeboten: nur wenige Auftr\xE4ge passen. Setze in \u201E{rules}\u201C \u201E{memory}\u201C z. B. auf 4096 (= 4 GB) und dr\xFCcke \u201E{save}\u201C.", "rules.awake": "W\xE4hrend des Verleihens wach bleiben", "rules.awake.help": "W\xE4hrend dieser Computer einen Auftrag f\xFCr jemanden ausf\xFChrt, geht er nicht in den Ruhezustand (der Bildschirm kann sich trotzdem ausschalten). Danach wie gewohnt. Verhindert abgebrochene Auftr\xE4ge.", "ask.wait": "Warten bis zu (Minuten)", "ask.wait.save": "Speichern", "ask.wait.saved": "Auf Antworten wird bis zu {n} Minuten gewartet.", "ask.wait.range": "Gib eine Minutenzahl zwischen 1 und 120 ein.", "tip.wait": "Wie lange auf eine Antwort der KI-Modelle des Netzwerks gewartet wird. Modelle auf dem Prozessor anderer k\xF6nnen Minuten brauchen. Auch deine KI kann es \xE4ndern.", "plan.month": "/Monat", "plan.free.1": "Geteiltes Wissen", "plan.free.2": "Rechenleistung mit den Credits, die du durch Verleihen verdienst", "plan.free.3": "Guthaben bis \u221220 Credits", "plan.base.1": "80 Credits jeden Monat", "plan.base.2": "Consumer-GPUs und mittelgro\xDFe Modelle", "plan.base.3": "Guthaben bis \u2212100 Credits", "plan.pro.1": "200 Credits jeden Monat", "plan.pro.2": "H\xF6chste Priorit\xE4t, alle GPUs und gro\xDFe Modelle", "plan.pro.3": "Guthaben bis \u2212500 Credits", "plans.current": "Dein Tarif", "plans.choose": "{plan} w\xE4hlen", "plans.renew": "Verl\xE4ngert sich monatlich; jederzeit k\xFCndbar, der Tarif bleibt bis zum Ende des bezahlten Zeitraums aktiv", "plans.recharge.title": "Credits aufladen", "plans.recharge.1": "{n} Credits werden deinem Guthaben gutgeschrieben", "plans.recharge.2": "Einmalzahlung, kein Abo", "plans.recharge.3": "Die Credits verfallen nicht", "plans.summary": "Du kaufst", "plans.pay": "Weiter zur sicheren Zahlung", "plans.cancel": "Abbrechen", "plans.off": "Zahlungen sind noch nicht aktiviert.", "account.line": "Konto: {email}", "account.via.email": "E-Mail und Passwort", "logout.button": "Abmelden", "logout.confirm": "{email} auf diesem Computer abmelden? Das Verleihen stoppt, bis du dich wieder anmeldest. Danach kannst du dich mit einem anderen Konto anmelden; Willkommens-Credits gibt es nur einmal pro Computer.", "logout.yes": "Abmelden", "logout.done": "Du hast dich auf diesem Computer abgemeldet. Um dich wieder anzumelden, mit demselben oder einem anderen Konto, \xF6ffne die BitPull-App oder f\xFChre aus:", "tip.logout": "Meldet diesen Computer vom Konto ab, etwa um dich mit einem anderen anzumelden. Fragt vorher nach.", "tip.logout.yes": "Beendet die Sitzung auf diesem Computer. Das Verleihen stoppt, bis du dich wieder anmeldest.", "tip.logout.no": "Du bleibst angemeldet.", "tip.plans.choose": "Zeigt Name, Preis und Leistungen des Tarifs, bevor du bezahlst.", "tip.plans.pay": "\xD6ffnet die sichere Zahlungsseite von Stripe im Browser.", "tip.plans.cancel": "Schlie\xDFt die \xDCbersicht, ohne zu kaufen." }, en: { "lang.name": "English", "app.title": "BitPull", "locked.text": "Open the dashboard from the BitPull app: its link contains the access key.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Direct address", "pill.relay_on": "Relay connected", "pill.relay_off": "Relay not connected", "pill.cached": "{n} cached copies", "net.title": "Live network", "net.online": "{n} computers online", "net.lending": "{n} lending now", "net.cpu": "{n} CPU cores", "net.ram": "{n} GB RAM", "net.gpu": "{n} GPUs", "net.models": "{n} AI models", "net.jobs": "{n} jobs running", "credits.title": "Credit balance", "credits.plan": "{plan} plan \xB7 can go down to {n}", "plan.free": "Free", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "Recharge \u20AC5", "buy.ok": "Payment page opened in your browser.", "lend.title": "Lend this computer", "lend.hint": "Jobs run end-to-end encrypted in isolated sandboxes, without access to your files. You earn credits.", "lend.state.off": "Off", "lend.state.waiting": "Waiting", "lend.state.working": "Working", "lend.reason.lending_off": "Lending is off", "lend.reason.paused": "Paused", "lend.reason.outside_hours": "Outside your hours", "lend.reason.on_battery": "On battery", "lend.reason.computer_in_use": "You are using the computer", "lend.reason.no_jobs": "No jobs in the queue", "lend.running": "Running a {kind} job since {time}", "lend.detail": "{reason} \xB7 {n} jobs done \xB7 offers {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", sandbox {name}", "lend.detail.models": ", {n} models", "lend.pause": "Pause", "lend.resume": "Resume", "lend.paused_ok": "Lending paused. Any running job was handed to another computer.", "lend.resumed_ok": "Lending resumed.", "setup.title": "Set up this computer", "setup.hint": "What this computer needs to lend. Using the network needs nothing else. Installers come from the official sites; your system asks you to confirm.", "setup.checking": "Checking\u2026", "setup.docker.help": "Runs other people's jobs in isolated sandboxes. Needed for container jobs. Free for personal use and small businesses.", "setup.docker.download": "Download Docker", "setup.docker.start": "Start Docker", "setup.apple.title": "Apple Container (optional)", "setup.apple.help": "Stronger isolation: each job in its own virtual machine. Optional; Docker is enough to start.", "setup.apple.get": "Get Apple Container", "setup.ollama.help": "Runs open AI models (Qwen, Llama, Mistral\u2026). Needed to lend AI models.", "setup.ollama.download": "Download Ollama", "setup.ollama.start": "Start Ollama", "setup.model.title": "AI model", "setup.model.help": "The model this computer offers to others. Suggested for {ram} GB of memory: {model}.", "setup.model.download": "Download {model} ({size} GB)", "setup.model.none": "none yet", "setup.model.need_ollama": "Install and start Ollama first", "setup.nvidia.title": "NVIDIA GPU drivers (optional)", "setup.nvidia.help": "Only if this computer has an NVIDIA graphics card you want to lend.", "setup.nvidia.get": "Get NVIDIA drivers", "setup.status.running": "installed and running", "setup.status.installed": "installed", "setup.status.stopped": "installed, not running", "setup.status.missing": "not installed", "setup.status.found": "found", "setup.status.not_found": "not found", "setup.terminal": "Run in a terminal:", "setup.done": "Done", "setup.opened": "Done: opened {file}, follow its steps", "setup.recheck": "Check again", "setup.ok.download": "Download started. The installer opens by itself when it finishes: follow its steps.", "setup.ok.start": "Starting\u2026 it can take up to a minute. This list updates by itself.", "setup.ok.pull": "Model download started. Progress is shown above.", "setup.ok.page": "Page opened in your browser.", "setup.ok.recheck": "Checked again.", "rules.title": "Lending rules", "rules.enabled": "Lending on", "rules.enabled.help": "Master switch. When off, this computer never runs other people's jobs. You can still use the network yourself.", "rules.cpus": "Max CPUs", "rules.cpus.help": "How many processor cores a job may use at most. Example: on an 8-core computer, 2 leaves 6 cores free for you.", "rules.memory": "Max memory (MB)", "rules.memory.help": "RAM a job may use, in megabytes (1024 MB = 1 GB). BitPull never offers more than half of this computer's memory.", "rules.gpu": "GPU", "rules.gpu.none": "None", "rules.gpu.consumer": "Consumer (8\u201312 GB)", "rules.gpu.high": "High-end (16\u201324 GB)", "rules.gpu.datacenter": "Data-centre (40 GB+)", "rules.gpu.help": "The graphics card you lend, by video memory. Leave None if you have no dedicated GPU or do not want to lend it. A GPU earns the most credits.", "rules.containers": "Container jobs", "rules.containers.help": "Run builds, tests and scripts for others in a sandbox with no internet and no access to your files. Needs Docker (or Apple Container): see \u201CSet up this computer\u201D.", "rules.models": "Open models (Ollama)", "rules.models.help": "Answer AI requests with the open models installed in Ollama on this computer. Needs Ollama and at least one model.", "rules.idle": "Only after minutes idle", "rules.idle.help": "Lend only when you have not touched keyboard or mouse for this many minutes. 0 = lend even while you work.", "rules.ac": "Only when plugged in", "rules.ac.help": "On a laptop, stop lending when running on battery, so lending never drains it.", "rules.hours": "Only from / to hour (empty = always)", "rules.hours.help": "Lend only in this time window, in 24-hour format. Example: 22 and 8 = from 10 pm to 8 am. Leave both empty to lend at any hour.", "rules.cache": "Cached copies of others' repos", "rules.cache.help": "How many public repos of other users this computer keeps a copy of, so they stay available when their authors are offline. Uses a little disk space and earns credits. 0 = none.", "rules.save": "Save rules", "rules.saved": "Rules saved. They apply within a few seconds.", "rules.hours_both": "Fill both hours, or leave both empty to lend at any hour.", "folders.title": "Authorised folders", "folders.hint": "BitPull reads only these folders. To publish one it needs a complete bitpull.json.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Authorise", "folders.none": "No authorised folders.", "folders.draft": "Draft", "folders.publish": "Publish", "folders.remove": "Remove", "folders.need_path": "Write the full path of a folder first, e.g. /Users/you/projects/my-library.", "folders.added": "Folder authorised.", "folders.removed": "Folder removed. BitPull no longer reads it.", "folders.drafted": "Draft ready: {n} files found. Let your AI fill the summary and descriptions (prepare_publish tool), then press Publish.", "folders.published": 'Published "{name}" with {n} files.', "folders.secrets_in": "Found in: {where}", "folders.line": "{file} line {line}", "repos.title": "Your published repos", "repos.hint": "They update by themselves when you change the files (every 5 minutes).", "repos.none": "No published repos.", "repos.withdraw": "Withdraw", "repos.withdrawn": "Repo withdrawn from the network.", "ask.title": "Open models on the network", "ask.offers": "This computer offers: {models}.", "ask.offers_none": "no models (install Ollama to offer some)", "ask.placeholder": "Ask an open model on the network\u2026", "ask.small": "Small", "ask.medium": "Medium", "ask.large": "Large", "ask.button": "Ask", "ask.empty": "Write a question first.", "ask.waiting": "Looking for a computer with the model\u2026 this can take up to a minute.", "ask.credits": "{n} credits", "tools.title": "Connect your tools", "tools.mcp": "For Claude Code and MCP clients, run in a terminal:", "tools.openai": "For OpenAI-compatible tools: base URL", "tools.key": "API key", "tools.show": "Show", "jobs.title": "Your recent jobs", "jobs.none": "No jobs.", "jobs.model": "Model", "jobs.container": "Container", "jobs.status.queued": "Queued", "jobs.status.running": "Running", "jobs.status.done": "Done", "jobs.status.failed": "Failed", "jobs.status.canceled": "Canceled", "jobs.cost": "{n} credits", working: "Working\u2026", "err.agent_down": "BitPull on this computer is not responding. It restarts by itself within 30 seconds: try again shortly.", "err.server": "Can't reach the BitPull server. Check your internet connection and try again.", "err.session": "This dashboard session expired. Reopen it from the BitPull app.", "err.billing": "Payments are not active yet.", "err.no_folder": "This folder does not exist on this computer. Check the path.", "err.not_folder": "This path is a file, not a folder.", "err.credits": "Not enough credits.", "err.device": "This computer is not connected yet. Keep the BitPull app open and try again in a minute.", "err.no_model": "No computer on the network offers an AI model right now. Try again later.", "err.invalid": "Some values are not valid. Check the fields and try again.", "tip.lang": "Language of the app. Your choice is remembered on this computer.", "tip.buy.base": "Opens the secure payment page for the Base plan: \u20AC4.50 per month with 80 credits every month. You can cancel at any time.", "tip.buy.pro": "Opens the secure payment page for the Pro plan: \u20AC9.90 per month with 200 credits every month, top priority and all GPUs. You can cancel at any time.", "tip.buy.recharge": "Opens the secure payment page to buy 80 credits once, for \u20AC5. They never expire.", "tip.pause": "Stops lending right now. A job running at this moment is handed to another computer. Press again to resume.", "tip.resume": "Starts lending again, following your lending rules.", "tip.rules.save": "Saves the lending rules above. They apply within a few seconds; nothing changes until you press this.", "tip.folder.add": "Allows BitPull to read the folder written on the left. Files outside authorised folders are never read or shared.", "tip.folder.draft": "Creates bitpull.json in the folder: the list of its files with empty descriptions for your AI to complete. Nothing is published yet.", "tip.folder.publish": "Shares this folder on the network as a public repo, signed by this computer. Publication is blocked if keys or passwords are found in the files.", "tip.folder.remove": "BitPull stops reading this folder. Repos already published from it stay online until you withdraw them.", "tip.repo.withdraw": "Removes this repo from the network. Other users can no longer find or download it. Your files stay on your computer.", "tip.ask": "Sends your question, end-to-end encrypted, to a computer on the network that runs an open AI model. Costs a few credits.", "tip.tier": "Model size: small is fast and cheap, large is smarter and costs more credits.", "tip.show_key": "Shows the key that AI tools on this computer use to talk to BitPull. Do not share it.", "tip.setup.download": "Downloads the official installer of {name} for this computer into your Downloads folder and opens it. Follow its steps to finish.", "tip.setup.start": "Starts {name}, which is installed on this computer but not running.", "tip.setup.pull": "Downloads the AI model {model} ({size} GB) into Ollama, so this computer can offer it to others.", "tip.setup.open": "Opens the official {name} page in your browser.", "tip.setup.recheck": "Checks again what is installed and running on this computer.", "update.title": "App updates", "update.current": "Installed version: {v}", "update.latest": "Latest version: {v}", "update.button": "Check for updates", "update.install": "Install version {v} now", "update.available": "Version {v} is available.", "update.not_in_app": "Updates are installed by the BitPull app. Open this dashboard from the app to update.", "update.state.requested": "Asking the app to check\u2026", "update.state.checking": "Checking for updates\u2026", "update.state.up_to_date": "You have the latest version.", "update.state.installing": "Downloading and installing version {v}\u2026 the app restarts by itself.", "update.state.restarting": "Restarting with version {v}\u2026", "update.state.error": "The update did not work: {msg}. Try again later.", "tip.update": "Checks whether a newer version of BitPull exists. If it does, it downloads it, verifies its signature, installs it and restarts the app. Lending pauses for a few seconds.", "tools.hint": "Let your AI assistant search shared code and use the network's open models and computers. Pick your tool:", "tools.connect": "Connect", "tools.connected": "Connected", "tools.copy": "Copy", "tools.copied": "Copied.", "tools.installed": "Installed", "tools.not_found": "Not found on this computer", "tools.done": "Done. Restart {name} to start using BitPull.", "tools.manual": "To add it by hand:", "tools.config_invalid": "{name}'s settings file is not valid JSON, so BitPull did not touch it. Fix the file or add BitPull by hand with Copy.", "tip.tools.connect": "Adds BitPull to {name}'s settings automatically. A backup of the previous settings is kept next to them.", "tip.tools.copy": "Copies the command or settings to the clipboard, to add BitPull to {name} yourself.", "models.title": "AI models to share", "models.hint": "Open models of every kind that this computer can lend. Only models whose licence allows serving them to others are listed. Downloaded models are offered to the network while lending is on.", "models.engine.title": "Image, speech and music engine", "models.engine.help": "Lemonade (open source): runs image generation, speech-to-text, text-to-speech, music, reranking and upscaling. Installed inside BitPull, no administrator rights.", "models.engine.install": "Install engine", "models.engine.repair": "Reinstall engine", "models.engine.unsupported": "Not available on this computer (needs Apple silicon, or Windows/Linux x64)", "models.need_engine": "Install the engine first", "models.not_here": "Not available on this computer", "models.shared": "Downloaded \xB7 shared", "models.download": "Download ({size} GB)", "models.needs_ram": "Needs about {ram} GB of memory: it may be slow here", "models.recommended": "Recommended", "models.license": "Licence", "models.ok.engine": "Installing the engine\u2026", "task.chat": "Text and code", "task.vision": "Images \u2192 text", "task.ocr": "Documents (OCR)", "task.translate": "Translation", "task.embed": "Embeddings (search)", "task.rerank": "Reranking", "task.image": "Image generation", "task.upscale": "Image upscaling", "task.stt": "Speech to text", "task.tts": "Text to speech", "task.music": "Music", "limits.title": "Your limits for others", "limits.hint": "How much AI work this computer does for others. Leave empty for no limit. When a limit is reached, your models are no longer offered until the period rolls over.", "limits.save": "Save limits", "limits.requests": "Requests", "limits.tokens": "Tokens", "limits.used": "Used", "limits.day": "Per day", "limits.week": "Per week", "limits.month": "Per month", "limits.none": "no limit", "limits.usage": "{requests} requests \xB7 {tokens} tokens", "limits.saved": "Limits saved.", "tip.models.engine": "Downloads the open-source Lemonade engine into BitPull, so this computer can lend image, speech and music models.", "tip.models.download": "Downloads {model} ({size} GB) to this computer so it can offer it to others. You can remove it later.", "tip.limits.save": "Saves the daily, weekly and monthly limits for AI work done for others.", "lend.visible": "\u2713 The network sees this computer: {cpus} CPU, {ram} GB available to others.", "lend.invisible": "The network does not see the lending yet: wait up to a minute; if it stays like this, check the internet connection.", "lend.unusable": "\u26A0 Nobody can use this computer yet: no job can run here. {reason}", "lend.unusable.docker": `Docker does not pass BitPull's isolation check: see "Set up this computer".`, "lend.unusable.off": 'Container jobs are off and no AI model is installed: turn on "Container jobs" or download a model.', "lend.docker_login": "Docker cannot download images because its Docker Hub login is no longer valid. In Docker Desktop click your account (top right) \u2192 Sign out, then sign in again or stay signed out. Then press Check again.", "lend.off_hint": 'Lending is switched off: tick "{enabled}" in "{rules}" below and press "{save}". (Pause / Resume only pauses lending that is already on.)', "lend.low_memory": 'Only {mb} MB of memory is offered: few jobs fit. In "{rules}" set "{memory}" to e.g. 4096 (= 4 GB) and press "{save}".', "rules.awake": "Stay awake while lending", "rules.awake.help": "While it runs a job for someone, this computer does not go to sleep (the display can still turn off). Afterwards it can sleep as usual. Prevents jobs being cut off.", "ask.wait": "Wait up to (minutes)", "ask.wait.save": "Save", "ask.wait.saved": "Answers will be awaited up to {n} minutes.", "ask.wait.range": "Enter a number of minutes between 1 and 120.", "tip.wait": "How long to wait for an answer from the network's AI models before giving up. Models on someone's processor can take minutes. Your AI can change it too.", "plan.month": "/month", "plan.free.1": "Shared knowledge", "plan.free.2": "Computing with the credits you earn by lending", "plan.free.3": "Balance down to \u221220 credits", "plan.base.1": "80 credits every month", "plan.base.2": "Consumer GPUs and medium models", "plan.base.3": "Balance down to \u2212100 credits", "plan.pro.1": "200 credits every month", "plan.pro.2": "Top priority, all GPUs and large models", "plan.pro.3": "Balance down to \u2212500 credits", "plans.current": "Your plan", "plans.choose": "Choose {plan}", "plans.renew": "Renews every month; cancel at any time, the plan stays active until the end of the paid period", "plans.recharge.title": "Credit recharge", "plans.recharge.1": "{n} credits added to your balance", "plans.recharge.2": "One-time payment, no subscription", "plans.recharge.3": "The credits do not expire", "plans.summary": "You are buying", "plans.pay": "Continue to secure payment", "plans.cancel": "Cancel", "plans.off": "Payments are not active yet.", "account.line": "Account: {email}", "account.via.email": "email and password", "logout.button": "Log out", "logout.confirm": "Log out of {email} on this computer? Lending stops until you log in again. You can then log in with another account; welcome credits are given only once per computer.", "logout.yes": "Log out", "logout.done": "You logged out of this computer. To log in again, with the same or another account, open the BitPull app or run:", "tip.logout": "Logs this computer out of the account, for example to log in with another one. It asks for confirmation first.", "tip.logout.yes": "Ends the session on this computer. Lending stops until you log in again.", "tip.logout.no": "Stays logged in.", "tip.plans.choose": "Shows the plan's name, price and what it includes before you pay.", "tip.plans.pay": "Opens Stripe's secure payment page in your browser.", "tip.plans.cancel": "Closes the summary without buying." }, es: { "lang.name": "Espa\xF1ol", "app.title": "BitPull", "locked.text": "Abre el panel desde la app BitPull: su enlace contiene la clave de acceso.", "pill.online": "En l\xEDnea", "pill.offline": "Sin conexi\xF3n", "pill.direct": "Direcci\xF3n directa", "pill.relay_on": "Rel\xE9 conectado", "pill.relay_off": "Rel\xE9 no conectado", "pill.cached": "{n} copias en cach\xE9", "net.title": "Red en vivo", "net.online": "{n} equipos en l\xEDnea", "net.lending": "{n} prestando ahora", "net.cpu": "{n} n\xFAcleos de CPU", "net.ram": "{n} GB de RAM", "net.gpu": "{n} GPU", "net.models": "{n} modelos de IA", "net.jobs": "{n} tareas en curso", "credits.title": "Saldo de cr\xE9ditos", "credits.plan": "Plan {plan} \xB7 puede bajar hasta {n}", "plan.free": "Gratis", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "Recargar \u20AC5", "buy.ok": "P\xE1gina de pago abierta en tu navegador.", "lend.title": "Prestar este equipo", "lend.hint": "Las tareas se ejecutan cifradas de extremo a extremo en entornos aislados, sin acceso a tus archivos. Ganas cr\xE9ditos.", "lend.state.off": "Apagado", "lend.state.waiting": "En espera", "lend.state.working": "Trabajando", "lend.reason.lending_off": "El pr\xE9stamo est\xE1 desactivado", "lend.reason.paused": "En pausa", "lend.reason.outside_hours": "Fuera de tu horario", "lend.reason.on_battery": "Con bater\xEDa", "lend.reason.computer_in_use": "Est\xE1s usando el equipo", "lend.reason.no_jobs": "No hay tareas en la cola", "lend.running": "Ejecutando una tarea de {kind} desde {time}", "lend.detail": "{reason} \xB7 {n} tareas hechas \xB7 ofrece {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", entorno aislado {name}", "lend.detail.models": ", {n} modelos", "lend.pause": "Pausar", "lend.resume": "Reanudar", "lend.paused_ok": "Pr\xE9stamo en pausa. La tarea en curso pas\xF3 a otro equipo.", "lend.resumed_ok": "Pr\xE9stamo reanudado.", "setup.title": "Configurar este equipo", "setup.hint": "Lo que este equipo necesita para prestar. Para usar la red no hace falta nada m\xE1s. Los instaladores vienen de los sitios oficiales; tu sistema te pedir\xE1 confirmaci\xF3n.", "setup.checking": "Comprobando\u2026", "setup.docker.help": "Ejecuta las tareas de otras personas en entornos aislados. Necesario para tareas de contenedor. Gratis para uso personal y peque\xF1as empresas.", "setup.docker.download": "Descargar Docker", "setup.docker.start": "Iniciar Docker", "setup.apple.title": "Apple Container (opcional)", "setup.apple.help": "M\xE1s aislamiento: cada tarea en su propia m\xE1quina virtual. Opcional; con Docker basta para empezar.", "setup.apple.get": "Obtener Apple Container", "setup.ollama.help": "Ejecuta modelos de IA abiertos (Qwen, Llama, Mistral\u2026). Necesario para prestar modelos de IA.", "setup.ollama.download": "Descargar Ollama", "setup.ollama.start": "Iniciar Ollama", "setup.model.title": "Modelo de IA", "setup.model.help": "El modelo que este equipo ofrece a otros. Recomendado para {ram} GB de memoria: {model}.", "setup.model.download": "Descargar {model} ({size} GB)", "setup.model.none": "ninguno a\xFAn", "setup.model.need_ollama": "Primero instala e inicia Ollama", "setup.nvidia.title": "Controladores de GPU NVIDIA (opcional)", "setup.nvidia.help": "Solo si este equipo tiene una tarjeta gr\xE1fica NVIDIA que quieras prestar.", "setup.nvidia.get": "Obtener controladores NVIDIA", "setup.status.running": "instalado y en ejecuci\xF3n", "setup.status.installed": "instalado", "setup.status.stopped": "instalado, detenido", "setup.status.missing": "no instalado", "setup.status.found": "encontrado", "setup.status.not_found": "no encontrado", "setup.terminal": "Ejecuta en una terminal:", "setup.done": "Listo", "setup.opened": "Listo: se abri\xF3 {file}, sigue sus pasos", "setup.recheck": "Comprobar de nuevo", "setup.ok.download": "Descarga iniciada. El instalador se abrir\xE1 solo al terminar: sigue sus pasos.", "setup.ok.start": "Iniciando\u2026 puede tardar hasta un minuto. Esta lista se actualiza sola.", "setup.ok.pull": "Descarga del modelo iniciada. El progreso se muestra arriba.", "setup.ok.page": "P\xE1gina abierta en tu navegador.", "setup.ok.recheck": "Comprobado de nuevo.", "rules.title": "Reglas de pr\xE9stamo", "rules.enabled": "Pr\xE9stamo activado", "rules.enabled.help": "Interruptor general. Si est\xE1 apagado, este equipo nunca ejecuta tareas de otros. Aun as\xED puedes usar la red.", "rules.cpus": "CPU m\xE1x.", "rules.cpus.help": "Cu\xE1ntos n\xFAcleos del procesador puede usar una tarea como m\xE1ximo. Ejemplo: en un equipo de 8 n\xFAcleos, 2 te deja 6 libres.", "rules.memory": "Memoria m\xE1x. (MB)", "rules.memory.help": "RAM que puede usar una tarea, en megabytes (1024 MB = 1 GB). BitPull nunca ofrece m\xE1s de la mitad de la memoria de este equipo.", "rules.gpu": "GPU", "rules.gpu.none": "Ninguna", "rules.gpu.consumer": "Dom\xE9stica (8\u201312 GB)", "rules.gpu.high": "Gama alta (16\u201324 GB)", "rules.gpu.datacenter": "Centro de datos (40 GB+)", "rules.gpu.help": "La tarjeta gr\xE1fica que prestas, seg\xFAn su memoria de video. Deja Ninguna si no tienes GPU dedicada o no quieres prestarla. Una GPU es lo que m\xE1s cr\xE9ditos gana.", "rules.containers": "Tareas de contenedor", "rules.containers.help": "Ejecuta compilaciones, pruebas y scripts de otros en un entorno aislado sin internet ni acceso a tus archivos. Requiere Docker (o Apple Container): consulta \xABConfigurar este equipo\xBB.", "rules.models": "Modelos abiertos (Ollama)", "rules.models.help": "Responde solicitudes de IA con los modelos abiertos instalados en Ollama en este equipo. Requiere Ollama y al menos un modelo.", "rules.idle": "Solo tras minutos de inactividad", "rules.idle.help": "Presta solo cuando no hayas tocado el teclado ni el rat\xF3n durante estos minutos. 0 = prestar incluso mientras trabajas.", "rules.ac": "Solo conectado a la corriente", "rules.ac.help": "En un port\xE1til, deja de prestar cuando funciona con bater\xEDa, para no agotarla.", "rules.hours": "Solo de / a la hora (vac\xEDo = siempre)", "rules.hours.help": "Presta solo en este horario, en formato de 24 horas. Ejemplo: 22 y 8 = de 22:00 a 8:00. Deja ambos vac\xEDos para prestar a cualquier hora.", "rules.cache": "Copias en cach\xE9 de repos ajenos", "rules.cache.help": "Cu\xE1ntos repos p\xFAblicos de otros usuarios guarda este equipo, para que sigan disponibles cuando sus autores no est\xE9n conectados. Usa poco espacio en disco y gana cr\xE9ditos. 0 = ninguno.", "rules.save": "Guardar reglas", "rules.saved": "Reglas guardadas. Se aplican en unos segundos.", "rules.hours_both": "Rellena ambas horas o d\xE9jalas vac\xEDas para prestar a cualquier hora.", "folders.title": "Carpetas autorizadas", "folders.hint": "BitPull solo lee estas carpetas. Para publicar una necesita un bitpull.json completo.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Autorizar", "folders.none": "No hay carpetas autorizadas.", "folders.draft": "Borrador", "folders.publish": "Publicar", "folders.remove": "Quitar", "folders.need_path": "Primero escribe la ruta completa de una carpeta, p. ej. /Users/you/projects/my-library.", "folders.added": "Carpeta autorizada.", "folders.removed": "Carpeta quitada. BitPull ya no la lee.", "folders.drafted": "Borrador listo: {n} archivos encontrados. Deja que tu IA complete el resumen y las descripciones (herramienta prepare_publish) y luego pulsa Publicar.", "folders.published": 'Publicado "{name}" con {n} archivos.', "folders.secrets_in": "Encontrado en: {where}", "folders.line": "{file} l\xEDnea {line}", "repos.title": "Tus repos publicados", "repos.hint": "Se actualizan solos cuando cambias los archivos (cada 5 minutos).", "repos.none": "No hay repos publicados.", "repos.withdraw": "Retirar", "repos.withdrawn": "Repo retirado de la red.", "ask.title": "Modelos abiertos en la red", "ask.offers": "Este equipo ofrece: {models}.", "ask.offers_none": "ning\xFAn modelo (instala Ollama para ofrecer alguno)", "ask.placeholder": "Pregunta a un modelo abierto de la red\u2026", "ask.small": "Peque\xF1o", "ask.medium": "Mediano", "ask.large": "Grande", "ask.button": "Preguntar", "ask.empty": "Primero escribe una pregunta.", "ask.waiting": "Buscando un equipo con el modelo\u2026 puede tardar hasta un minuto.", "ask.credits": "{n} cr\xE9ditos", "tools.title": "Conecta tus herramientas", "tools.mcp": "Para Claude Code y clientes MCP, ejecuta en una terminal:", "tools.openai": "Para herramientas compatibles con OpenAI: URL base", "tools.key": "Clave de API", "tools.show": "Mostrar", "jobs.title": "Tus tareas recientes", "jobs.none": "No hay tareas.", "jobs.model": "Modelo", "jobs.container": "Contenedor", "jobs.status.queued": "En cola", "jobs.status.running": "En curso", "jobs.status.done": "Hecha", "jobs.status.failed": "Fallida", "jobs.status.canceled": "Cancelada", "jobs.cost": "{n} cr\xE9ditos", working: "Procesando\u2026", "err.agent_down": "BitPull no responde en este equipo. Se reinicia solo en 30 segundos: int\xE9ntalo de nuevo en breve.", "err.server": "No se puede conectar con el servidor de BitPull. Revisa tu conexi\xF3n a internet e int\xE9ntalo de nuevo.", "err.session": "La sesi\xF3n del panel caduc\xF3. Vuelve a abrirlo desde la app BitPull.", "err.billing": "Los pagos a\xFAn no est\xE1n activos.", "err.no_folder": "Esta carpeta no existe en este equipo. Revisa la ruta.", "err.not_folder": "Esta ruta es un archivo, no una carpeta.", "err.credits": "No tienes suficientes cr\xE9ditos.", "err.device": "Este equipo a\xFAn no est\xE1 conectado. Mant\xE9n abierta la app BitPull e int\xE9ntalo en un minuto.", "err.no_model": "Ahora mismo ning\xFAn equipo de la red ofrece un modelo de IA. Int\xE9ntalo m\xE1s tarde.", "err.invalid": "Algunos valores no son v\xE1lidos. Revisa los campos e int\xE9ntalo de nuevo.", "tip.lang": "Idioma de la app. Tu elecci\xF3n se recuerda en este equipo.", "tip.buy.base": "Abre la p\xE1gina de pago seguro del plan Base: \u20AC4.50 al mes con 80 cr\xE9ditos cada mes. Puedes cancelar cuando quieras.", "tip.buy.pro": "Abre la p\xE1gina de pago seguro del plan Pro: \u20AC9.90 al mes con 200 cr\xE9ditos cada mes, m\xE1xima prioridad y todas las GPU. Puedes cancelar cuando quieras.", "tip.buy.recharge": "Abre la p\xE1gina de pago seguro para comprar 80 cr\xE9ditos una sola vez, por \u20AC5. No caducan nunca.", "tip.pause": "Detiene el pr\xE9stamo ahora mismo. La tarea que se est\xE9 ejecutando en ese momento pasa a otro equipo. Pulsa de nuevo para reanudar.", "tip.resume": "Vuelve a prestar el equipo, siguiendo tus reglas de pr\xE9stamo.", "tip.rules.save": "Guarda las reglas de pr\xE9stamo de arriba. Se aplican en unos segundos; nada cambia hasta que pulses aqu\xED.", "tip.folder.add": "Permite que BitPull lea la carpeta escrita a la izquierda. Los archivos fuera de las carpetas autorizadas nunca se leen ni se comparten.", "tip.folder.draft": "Crea bitpull.json en la carpeta: la lista de sus archivos con descripciones vac\xEDas para que tu AI las complete. Todav\xEDa no se publica nada.", "tip.folder.publish": "Comparte esta carpeta en la red como repo p\xFAblico, firmado por este equipo. La publicaci\xF3n se bloquea si se encuentran claves o contrase\xF1as en los archivos.", "tip.folder.remove": "BitPull deja de leer esta carpeta. Los repos ya publicados desde ella siguen en l\xEDnea hasta que los retires.", "tip.repo.withdraw": "Quita este repo de la red. Los dem\xE1s usuarios ya no podr\xE1n encontrarlo ni descargarlo. Tus archivos se quedan en tu equipo.", "tip.ask": "Env\xEDa tu pregunta, cifrada de extremo a extremo, a un equipo de la red que ejecuta un modelo de AI abierto. Cuesta unos pocos cr\xE9ditos.", "tip.tier": "Tama\xF1o del modelo: el peque\xF1o es r\xE1pido y barato; el grande es m\xE1s inteligente y cuesta m\xE1s cr\xE9ditos.", "tip.show_key": "Muestra la clave que usan las herramientas de AI de este equipo para comunicarse con BitPull. No la compartas.", "tip.setup.download": "Descarga el instalador oficial de {name} para este equipo en tu carpeta Descargas y lo abre. Sigue sus pasos para terminar.", "tip.setup.start": "Inicia {name}, que est\xE1 instalado en este equipo pero no se est\xE1 ejecutando.", "tip.setup.pull": "Descarga el modelo de AI {model} ({size} GB) en Ollama, para que este equipo pueda ofrecerlo a otros.", "tip.setup.open": "Abre la p\xE1gina oficial de {name} en tu navegador.", "tip.setup.recheck": "Vuelve a comprobar qu\xE9 est\xE1 instalado y en ejecuci\xF3n en este equipo.", "update.title": "Actualizaciones de la app", "update.current": "Versi\xF3n instalada: {v}", "update.latest": "\xDAltima versi\xF3n: {v}", "update.button": "Buscar actualizaciones", "update.install": "Instalar la versi\xF3n {v} ahora", "update.available": "La versi\xF3n {v} est\xE1 disponible.", "update.not_in_app": "Las actualizaciones las instala la app BitPull. Abre este panel desde la app para actualizar.", "update.state.requested": "Pidiendo a la app que busque\u2026", "update.state.checking": "Buscando actualizaciones\u2026", "update.state.up_to_date": "Tienes la \xFAltima versi\xF3n.", "update.state.installing": "Descargando e instalando la versi\xF3n {v}\u2026 la app se reinicia sola.", "update.state.restarting": "Reiniciando con la versi\xF3n {v}\u2026", "update.state.error": "La actualizaci\xF3n no funcion\xF3: {msg}. Int\xE9ntalo m\xE1s tarde.", "tip.update": "Comprueba si existe una versi\xF3n m\xE1s reciente de BitPull. Si la hay, la descarga, verifica su firma, la instala y reinicia la app. El pr\xE9stamo se pausa unos segundos.", "tools.hint": "Deja que tu asistente de AI busque c\xF3digo compartido y use los modelos abiertos y los equipos de la red. Elige tu herramienta:", "tools.connect": "Conectar", "tools.connected": "Conectado", "tools.copy": "Copiar", "tools.copied": "Copiado.", "tools.installed": "Instalado", "tools.not_found": "No se encontr\xF3 en este equipo", "tools.done": "Listo. Reinicia {name} para empezar a usar BitPull.", "tools.manual": "Para a\xF1adirlo a mano:", "tools.config_invalid": "El archivo de configuraci\xF3n de {name} no es JSON v\xE1lido, as\xED que BitPull no lo modific\xF3. Corrige el archivo o a\xF1ade BitPull a mano con Copiar.", "tip.tools.connect": "A\xF1ade BitPull a la configuraci\xF3n de {name} autom\xE1ticamente. Se guarda una copia de seguridad de la configuraci\xF3n anterior junto a ella.", "tip.tools.copy": "Copia el comando o la configuraci\xF3n al portapapeles, para que a\xF1adas BitPull a {name} t\xFA mismo.", "models.title": "Modelos de IA para compartir", "models.hint": "Modelos abiertos de todo tipo que este ordenador puede prestar. Solo se muestran modelos cuya licencia permite servirlos a otros. Los modelos descargados se ofrecen a la red mientras el pr\xE9stamo est\xE1 activo.", "models.engine.title": "Motor de im\xE1genes, voz y m\xFAsica", "models.engine.help": "Lemonade (c\xF3digo abierto): genera im\xE1genes, transcribe voz, lee textos en voz alta, crea m\xFAsica, reordena documentos y ampl\xEDa im\xE1genes. Se instala dentro de BitPull, sin permisos de administrador.", "models.engine.install": "Instalar motor", "models.engine.repair": "Reinstalar motor", "models.engine.unsupported": "No disponible en este ordenador (requiere Apple silicon, o Windows/Linux x64)", "models.need_engine": "Instala primero el motor", "models.not_here": "No disponible en este ordenador", "models.shared": "Descargado \xB7 compartido", "models.download": "Descargar ({size} GB)", "models.needs_ram": "Necesita unos {ram} GB de memoria: aqu\xED puede ir lento", "models.recommended": "Recomendado", "models.license": "Licencia", "models.ok.engine": "Instalando el motor\u2026", "task.chat": "Texto y c\xF3digo", "task.vision": "Im\xE1genes \u2192 texto", "task.ocr": "Documentos (OCR)", "task.translate": "Traducci\xF3n", "task.embed": "Embeddings (b\xFAsqueda)", "task.rerank": "Reordenaci\xF3n", "task.image": "Generaci\xF3n de im\xE1genes", "task.upscale": "Ampliaci\xF3n de im\xE1genes", "task.stt": "Voz a texto", "task.tts": "Texto a voz", "task.music": "M\xFAsica", "limits.title": "Tus l\xEDmites para otros", "limits.hint": "Cu\xE1nto trabajo de IA hace este ordenador para otros. D\xE9jalo vac\xEDo para no poner l\xEDmite. Al alcanzar un l\xEDmite, tus modelos dejan de ofrecerse hasta el siguiente periodo.", "limits.save": "Guardar l\xEDmites", "limits.requests": "Solicitudes", "limits.tokens": "Tokens", "limits.used": "Usado", "limits.day": "Por d\xEDa", "limits.week": "Por semana", "limits.month": "Por mes", "limits.none": "sin l\xEDmite", "limits.usage": "{requests} solicitudes \xB7 {tokens} tokens", "limits.saved": "L\xEDmites guardados.", "tip.models.engine": "Descarga en BitPull el motor de c\xF3digo abierto Lemonade, para que este ordenador pueda prestar modelos de imagen, voz y m\xFAsica.", "tip.models.download": "Descarga {model} ({size} GB) en este ordenador para ofrecerlo a otros. Puedes eliminarlo despu\xE9s.", "tip.limits.save": "Guarda los l\xEDmites diarios, semanales y mensuales del trabajo de IA para otros.", "lend.visible": "\u2713 La red ve este ordenador: {cpus} CPU, {ram} GB disponibles para otros.", "lend.invisible": "La red a\xFAn no ve el pr\xE9stamo: espera hasta un minuto; si sigue as\xED, revisa la conexi\xF3n a internet.", "lend.unusable": "\u26A0 Nadie puede usar a\xFAn este ordenador: aqu\xED no puede ejecutarse ning\xFAn trabajo. {reason}", "lend.unusable.docker": 'Docker no supera la comprobaci\xF3n de aislamiento de BitPull: mira "Configurar este ordenador".', "lend.unusable.off": 'Los trabajos en contenedor est\xE1n desactivados y no hay ning\xFAn modelo de IA: activa "Trabajos en contenedor" o descarga un modelo.', "lend.docker_login": "Docker no puede descargar im\xE1genes porque su sesi\xF3n de Docker Hub ya no es v\xE1lida. En Docker Desktop haz clic en tu cuenta (arriba a la derecha) \u2192 Sign out, luego vuelve a iniciar sesi\xF3n o qu\xE9date sin sesi\xF3n. Despu\xE9s pulsa Comprobar de nuevo.", "lend.off_hint": 'El pr\xE9stamo est\xE1 apagado: marca "{enabled}" en "{rules}" abajo y pulsa "{save}". (Pausa / Reanudar solo pausa un pr\xE9stamo ya activo.)', "lend.low_memory": 'Solo ofreces {mb} MB de memoria: caben pocos trabajos. En "{rules}" pon "{memory}" por ejemplo en 4096 (= 4 GB) y pulsa "{save}".', "rules.awake": "Permanecer activo durante el pr\xE9stamo", "rules.awake.help": "Mientras ejecuta un trabajo para alguien, este ordenador no entra en suspensi\xF3n (la pantalla puede apagarse igualmente). Despu\xE9s se suspende como siempre. Evita que se corten trabajos.", "ask.wait": "Esperar hasta (minutos)", "ask.wait.save": "Guardar", "ask.wait.saved": "Las respuestas se esperar\xE1n hasta {n} minutos.", "ask.wait.range": "Introduce un n\xFAmero de minutos entre 1 y 120.", "tip.wait": "Cu\xE1nto esperar la respuesta de los modelos de IA de la red antes de rendirse. Los modelos en el procesador de alguien pueden tardar minutos. Tambi\xE9n puede cambiarlo tu IA.", "plan.month": "/mes", "plan.free.1": "Conocimiento compartido", "plan.free.2": "C\xF3mputo con los cr\xE9ditos que ganas prestando", "plan.free.3": "Saldo de hasta \u221220 cr\xE9ditos", "plan.base.1": "80 cr\xE9ditos cada mes", "plan.base.2": "GPU de consumo y modelos medianos", "plan.base.3": "Saldo de hasta \u2212100 cr\xE9ditos", "plan.pro.1": "200 cr\xE9ditos cada mes", "plan.pro.2": "M\xE1xima prioridad, todas las GPU y modelos grandes", "plan.pro.3": "Saldo de hasta \u2212500 cr\xE9ditos", "plans.current": "Tu plan", "plans.choose": "Elegir {plan}", "plans.renew": "Se renueva cada mes; puedes cancelar cuando quieras, el plan sigue activo hasta el final del periodo pagado", "plans.recharge.title": "Recarga de cr\xE9ditos", "plans.recharge.1": "{n} cr\xE9ditos a\xF1adidos a tu saldo", "plans.recharge.2": "Pago \xFAnico, sin suscripci\xF3n", "plans.recharge.3": "Los cr\xE9ditos no caducan", "plans.summary": "Vas a comprar", "plans.pay": "Continuar al pago seguro", "plans.cancel": "Cancelar", "plans.off": "Los pagos a\xFAn no est\xE1n activos.", "account.line": "Cuenta: {email}", "account.via.email": "email y contrase\xF1a", "logout.button": "Cerrar sesi\xF3n", "logout.confirm": "\xBFCerrar la sesi\xF3n de {email} en este ordenador? El pr\xE9stamo se detiene hasta que vuelvas a entrar. Despu\xE9s podr\xE1s entrar con otra cuenta; los cr\xE9ditos de bienvenida se dan una sola vez por ordenador.", "logout.yes": "Cerrar sesi\xF3n", "logout.done": "Has cerrado la sesi\xF3n en este ordenador. Para volver a entrar, con la misma u otra cuenta, abre la app BitPull o ejecuta:", "tip.logout": "Desconecta este ordenador de la cuenta, por ejemplo para entrar con otra. Antes pide confirmaci\xF3n.", "tip.logout.yes": "Cierra la sesi\xF3n en este ordenador. El pr\xE9stamo se detiene hasta que vuelvas a entrar.", "tip.logout.no": "Sigues conectado.", "tip.plans.choose": "Muestra el nombre, el precio y lo que incluye el plan antes de pagar.", "tip.plans.pay": "Abre en el navegador la p\xE1gina de pago seguro de Stripe.", "tip.plans.cancel": "Cierra el resumen sin comprar." }, fr: { "lang.name": "Fran\xE7ais", "app.title": "BitPull", "locked.text": "Ouvrez le tableau de bord depuis l'app BitPull : son lien contient la cl\xE9 d'acc\xE8s.", "pill.online": "En ligne", "pill.offline": "Hors ligne", "pill.direct": "Adresse directe", "pill.relay_on": "Relais connect\xE9", "pill.relay_off": "Relais non connect\xE9", "pill.cached": "{n} copies en cache", "net.title": "R\xE9seau en direct", "net.online": "{n} ordinateurs en ligne", "net.lending": "{n} en pr\xEAt actuellement", "net.cpu": "{n} c\u0153urs CPU", "net.ram": "{n} GB de RAM", "net.gpu": "{n} GPU", "net.models": "{n} mod\xE8les d'IA", "net.jobs": "{n} t\xE2ches en cours", "credits.title": "Solde de cr\xE9dits", "credits.plan": "Forfait {plan} \xB7 peut descendre jusqu'\xE0 {n}", "plan.free": "Gratuit", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base 4,50 \u20AC", "buy.pro": "Pro 9,90 \u20AC", "buy.recharge": "Recharger 5 \u20AC", "buy.ok": "Page de paiement ouverte dans votre navigateur.", "lend.title": "Pr\xEAter cet ordinateur", "lend.hint": "Les t\xE2ches s'ex\xE9cutent chiffr\xE9es de bout en bout dans des bacs \xE0 sable isol\xE9s, sans acc\xE8s \xE0 vos fichiers. Vous gagnez des cr\xE9dits.", "lend.state.off": "D\xE9sactiv\xE9", "lend.state.waiting": "En attente", "lend.state.working": "Au travail", "lend.reason.lending_off": "Le pr\xEAt est d\xE9sactiv\xE9", "lend.reason.paused": "En pause", "lend.reason.outside_hours": "Hors de vos horaires", "lend.reason.on_battery": "Sur batterie", "lend.reason.computer_in_use": "Vous utilisez l'ordinateur", "lend.reason.no_jobs": "Aucune t\xE2che en file d'attente", "lend.running": "Ex\xE9cute une t\xE2che {kind} depuis {time}", "lend.detail": "{reason} \xB7 {n} t\xE2ches termin\xE9es \xB7 offre {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", bac \xE0 sable {name}", "lend.detail.models": ", {n} mod\xE8les", "lend.pause": "Pause", "lend.resume": "Reprendre", "lend.paused_ok": "Pr\xEAt en pause. Toute t\xE2che en cours a \xE9t\xE9 confi\xE9e \xE0 un autre ordinateur.", "lend.resumed_ok": "Pr\xEAt repris.", "setup.title": "Configurer cet ordinateur", "setup.hint": "Ce dont cet ordinateur a besoin pour pr\xEAter. Utiliser le r\xE9seau ne demande rien d'autre. Les installateurs viennent des sites officiels ; votre syst\xE8me vous demande de confirmer.", "setup.checking": "V\xE9rification\u2026", "setup.docker.help": "Ex\xE9cute les t\xE2ches des autres dans des bacs \xE0 sable isol\xE9s. N\xE9cessaire pour les t\xE2ches conteneur. Gratuit pour un usage personnel et les petites entreprises.", "setup.docker.download": "T\xE9l\xE9charger Docker", "setup.docker.start": "D\xE9marrer Docker", "setup.apple.title": "Apple Container (facultatif)", "setup.apple.help": "Isolation renforc\xE9e : chaque t\xE2che dans sa propre machine virtuelle. Facultatif ; Docker suffit pour commencer.", "setup.apple.get": "Obtenir Apple Container", "setup.ollama.help": "Ex\xE9cute des mod\xE8les d'IA ouverts (Qwen, Llama, Mistral\u2026). N\xE9cessaire pour pr\xEAter des mod\xE8les d'IA.", "setup.ollama.download": "T\xE9l\xE9charger Ollama", "setup.ollama.start": "D\xE9marrer Ollama", "setup.model.title": "Mod\xE8le d'IA", "setup.model.help": "Le mod\xE8le que cet ordinateur propose aux autres. Sugg\xE9r\xE9 pour {ram} GB de m\xE9moire : {model}.", "setup.model.download": "T\xE9l\xE9charger {model} ({size} GB)", "setup.model.none": "aucun pour l'instant", "setup.model.need_ollama": "Installez et d\xE9marrez d'abord Ollama", "setup.nvidia.title": "Pilotes GPU NVIDIA (facultatif)", "setup.nvidia.help": "Seulement si cet ordinateur a une carte graphique NVIDIA que vous voulez pr\xEAter.", "setup.nvidia.get": "Obtenir les pilotes NVIDIA", "setup.status.running": "install\xE9 et actif", "setup.status.installed": "install\xE9", "setup.status.stopped": "install\xE9, non d\xE9marr\xE9", "setup.status.missing": "non install\xE9", "setup.status.found": "trouv\xE9", "setup.status.not_found": "introuvable", "setup.terminal": "Ex\xE9cutez dans un terminal :", "setup.done": "Termin\xE9", "setup.opened": "Termin\xE9 : {file} ouvert, suivez ses \xE9tapes", "setup.recheck": "Rev\xE9rifier", "setup.ok.download": "T\xE9l\xE9chargement lanc\xE9. L'installateur s'ouvrira tout seul \xE0 la fin : suivez ses \xE9tapes.", "setup.ok.start": "D\xE9marrage\u2026 cela peut prendre jusqu'\xE0 une minute. Cette liste se met \xE0 jour toute seule.", "setup.ok.pull": "T\xE9l\xE9chargement du mod\xE8le lanc\xE9. La progression s'affiche ci-dessus.", "setup.ok.page": "Page ouverte dans votre navigateur.", "setup.ok.recheck": "V\xE9rification refaite.", "rules.title": "R\xE8gles de pr\xEAt", "rules.enabled": "Pr\xEAt activ\xE9", "rules.enabled.help": "Interrupteur g\xE9n\xE9ral. D\xE9sactiv\xE9, cet ordinateur n'ex\xE9cute jamais les t\xE2ches des autres. Vous pouvez toujours utiliser le r\xE9seau vous-m\xEAme.", "rules.cpus": "CPU max", "rules.cpus.help": "Nombre maximal de c\u0153urs de processeur qu'une t\xE2che peut utiliser. Exemple : sur un ordinateur \xE0 8 c\u0153urs, 2 vous laisse 6 c\u0153urs libres.", "rules.memory": "M\xE9moire max (MB)", "rules.memory.help": "RAM qu'une t\xE2che peut utiliser, en m\xE9gaoctets (1024 MB = 1 GB). BitPull ne propose jamais plus de la moiti\xE9 de la m\xE9moire de cet ordinateur.", "rules.gpu": "GPU", "rules.gpu.none": "Aucun", "rules.gpu.consumer": "Grand public (8\u201312 GB)", "rules.gpu.high": "Haut de gamme (16\u201324 GB)", "rules.gpu.datacenter": "Centre de donn\xE9es (40 GB+)", "rules.gpu.help": "La carte graphique que vous pr\xEAtez, selon sa m\xE9moire vid\xE9o. Laissez Aucun si vous n'avez pas de GPU d\xE9di\xE9 ou ne voulez pas le pr\xEAter. Un GPU rapporte le plus de cr\xE9dits.", "rules.containers": "T\xE2ches conteneur", "rules.containers.help": "Ex\xE9cute des compilations, tests et scripts pour d'autres dans un bac \xE0 sable sans internet ni acc\xE8s \xE0 vos fichiers. N\xE9cessite Docker (ou Apple Container) : voir \xAB Configurer cet ordinateur \xBB.", "rules.models": "Mod\xE8les ouverts (Ollama)", "rules.models.help": "R\xE9pond aux requ\xEAtes d'IA avec les mod\xE8les ouverts install\xE9s dans Ollama sur cet ordinateur. N\xE9cessite Ollama et au moins un mod\xE8le.", "rules.idle": "Seulement apr\xE8s X minutes d'inactivit\xE9", "rules.idle.help": "Pr\xEAte seulement si vous n'avez pas touch\xE9 le clavier ni la souris depuis ce nombre de minutes. 0 = pr\xEAter m\xEAme pendant que vous travaillez.", "rules.ac": "Seulement sur secteur", "rules.ac.help": "Sur un portable, arr\xEAte de pr\xEAter quand il est sur batterie, pour que le pr\xEAt ne la vide jamais.", "rules.hours": "Seulement de / \xE0 heure (vide = toujours)", "rules.hours.help": "Pr\xEAte seulement dans cette plage horaire, au format 24 h. Exemple : 22 et 8 = de 22 h \xE0 8 h. Laissez les deux vides pour pr\xEAter \xE0 toute heure.", "rules.cache": "Copies en cache des d\xE9p\xF4ts d'autres", "rules.cache.help": "Nombre de d\xE9p\xF4ts publics d'autres utilisateurs dont cet ordinateur garde une copie, pour qu'ils restent disponibles quand leurs auteurs sont hors ligne. Utilise un peu d'espace disque et rapporte des cr\xE9dits. 0 = aucun.", "rules.save": "Enregistrer", "rules.saved": "R\xE8gles enregistr\xE9es. Elles s'appliquent en quelques secondes.", "rules.hours_both": "Remplissez les deux heures, ou laissez-les vides pour pr\xEAter \xE0 toute heure.", "folders.title": "Dossiers autoris\xE9s", "folders.hint": "BitPull lit uniquement ces dossiers. Pour en publier un, il faut un bitpull.json complet.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Autoriser", "folders.none": "Aucun dossier autoris\xE9.", "folders.draft": "Brouillon", "folders.publish": "Publier", "folders.remove": "Retirer", "folders.need_path": "Saisissez d'abord le chemin complet d'un dossier, par ex. /Users/you/projects/my-library.", "folders.added": "Dossier autoris\xE9.", "folders.removed": "Dossier retir\xE9. BitPull ne le lit plus.", "folders.drafted": "Brouillon pr\xEAt : {n} fichiers trouv\xE9s. Laissez votre IA remplir le r\xE9sum\xE9 et les descriptions (outil prepare_publish), puis cliquez sur Publier.", "folders.published": "\xAB {name} \xBB publi\xE9 avec {n} fichiers.", "folders.secrets_in": "Trouv\xE9 dans : {where}", "folders.line": "{file} ligne {line}", "repos.title": "Vos d\xE9p\xF4ts publi\xE9s", "repos.hint": "Ils se mettent \xE0 jour tout seuls quand vous modifiez les fichiers (toutes les 5 minutes).", "repos.none": "Aucun d\xE9p\xF4t publi\xE9.", "repos.withdraw": "Retirer", "repos.withdrawn": "D\xE9p\xF4t retir\xE9 du r\xE9seau.", "ask.title": "Mod\xE8les ouverts sur le r\xE9seau", "ask.offers": "Cet ordinateur propose : {models}.", "ask.offers_none": "aucun mod\xE8le (installez Ollama pour en proposer)", "ask.placeholder": "Interrogez un mod\xE8le ouvert du r\xE9seau\u2026", "ask.small": "Petit", "ask.medium": "Moyen", "ask.large": "Grand", "ask.button": "Demander", "ask.empty": "\xC9crivez d'abord une question.", "ask.waiting": "Recherche d'un ordinateur avec ce mod\xE8le\u2026 cela peut prendre jusqu'\xE0 une minute.", "ask.credits": "{n} cr\xE9dits", "tools.title": "Connectez vos outils", "tools.mcp": "Pour Claude Code et les clients MCP, ex\xE9cutez dans un terminal :", "tools.openai": "Pour les outils compatibles OpenAI : URL de base", "tools.key": "Cl\xE9 API", "tools.show": "Afficher", "jobs.title": "Vos t\xE2ches r\xE9centes", "jobs.none": "Aucune t\xE2che.", "jobs.model": "Mod\xE8le", "jobs.container": "Conteneur", "jobs.status.queued": "En file", "jobs.status.running": "En cours", "jobs.status.done": "Termin\xE9e", "jobs.status.failed": "\xC9chou\xE9e", "jobs.status.canceled": "Annul\xE9e", "jobs.cost": "{n} cr\xE9dits", working: "En cours\u2026", "err.agent_down": "BitPull ne r\xE9pond pas sur cet ordinateur. Il red\xE9marre tout seul en 30 secondes : r\xE9essayez bient\xF4t.", "err.server": "Impossible de joindre le serveur BitPull. V\xE9rifiez votre connexion internet et r\xE9essayez.", "err.session": "Cette session du tableau de bord a expir\xE9. Rouvrez-le depuis l'app BitPull.", "err.billing": "Les paiements ne sont pas encore actifs.", "err.no_folder": "Ce dossier n'existe pas sur cet ordinateur. V\xE9rifiez le chemin.", "err.not_folder": "Ce chemin est un fichier, pas un dossier.", "err.credits": "Cr\xE9dits insuffisants.", "err.device": "Cet ordinateur n'est pas encore connect\xE9. Gardez l'app BitPull ouverte et r\xE9essayez dans une minute.", "err.no_model": "Aucun ordinateur du r\xE9seau ne propose de mod\xE8le d'IA pour le moment. R\xE9essayez plus tard.", "err.invalid": "Certaines valeurs ne sont pas valides. V\xE9rifiez les champs et r\xE9essayez.", "tip.lang": "Langue de l'application. Votre choix est m\xE9moris\xE9 sur cet ordinateur.", "tip.buy.base": "Ouvre la page de paiement s\xE9curis\xE9 du forfait Base : 4,50 \u20AC par mois avec 80 cr\xE9dits chaque mois. Vous pouvez r\xE9silier \xE0 tout moment.", "tip.buy.pro": "Ouvre la page de paiement s\xE9curis\xE9 du forfait Pro : 9,90 \u20AC par mois avec 200 cr\xE9dits chaque mois, la priorit\xE9 maximale et tous les GPU. Vous pouvez r\xE9silier \xE0 tout moment.", "tip.buy.recharge": "Ouvre la page de paiement s\xE9curis\xE9 pour acheter 80 cr\xE9dits en une fois, pour 5 \u20AC. Ils n'expirent jamais.", "tip.pause": "Arr\xEAte le pr\xEAt imm\xE9diatement. Une t\xE2che en cours \xE0 ce moment-l\xE0 est confi\xE9e \xE0 un autre ordinateur. Appuyez \xE0 nouveau pour reprendre.", "tip.resume": "Reprend le pr\xEAt, en suivant vos r\xE8gles de pr\xEAt.", "tip.rules.save": "Enregistre les r\xE8gles de pr\xEAt ci-dessus. Elles s'appliquent en quelques secondes ; rien ne change tant que vous n'appuyez pas ici.", "tip.folder.add": "Autorise BitPull \xE0 lire le dossier indiqu\xE9 \xE0 gauche. Les fichiers situ\xE9s hors des dossiers autoris\xE9s ne sont jamais lus ni partag\xE9s.", "tip.folder.draft": "Cr\xE9e bitpull.json dans le dossier : la liste de ses fichiers avec des descriptions vides que votre AI compl\xE9tera. Rien n'est encore publi\xE9.", "tip.folder.publish": "Partage ce dossier sur le r\xE9seau en tant que d\xE9p\xF4t public, sign\xE9 par cet ordinateur. La publication est bloqu\xE9e si des cl\xE9s ou des mots de passe sont trouv\xE9s dans les fichiers.", "tip.folder.remove": "BitPull arr\xEAte de lire ce dossier. Les d\xE9p\xF4ts d\xE9j\xE0 publi\xE9s depuis ce dossier restent en ligne jusqu'\xE0 ce que vous les retiriez.", "tip.repo.withdraw": "Retire ce d\xE9p\xF4t du r\xE9seau. Les autres utilisateurs ne peuvent plus le trouver ni le t\xE9l\xE9charger. Vos fichiers restent sur votre ordinateur.", "tip.ask": "Envoie votre question, chiffr\xE9e de bout en bout, \xE0 un ordinateur du r\xE9seau qui ex\xE9cute un mod\xE8le d'AI ouvert. Co\xFBte quelques cr\xE9dits.", "tip.tier": "Taille du mod\xE8le : le petit est rapide et \xE9conomique, le grand est plus intelligent et co\xFBte plus de cr\xE9dits.", "tip.show_key": "Affiche la cl\xE9 que les outils d'AI de cet ordinateur utilisent pour communiquer avec BitPull. Ne la partagez pas.", "tip.setup.download": "T\xE9l\xE9charge l'installateur officiel de {name} pour cet ordinateur dans votre dossier T\xE9l\xE9chargements et l'ouvre. Suivez ses \xE9tapes pour terminer.", "tip.setup.start": "D\xE9marre {name}, qui est install\xE9 sur cet ordinateur mais n'est pas lanc\xE9.", "tip.setup.pull": "T\xE9l\xE9charge le mod\xE8le d'AI {model} ({size} GB) dans Ollama, pour que cet ordinateur puisse le proposer aux autres.", "tip.setup.open": "Ouvre la page officielle de {name} dans votre navigateur.", "tip.setup.recheck": "V\xE9rifie \xE0 nouveau ce qui est install\xE9 et lanc\xE9 sur cet ordinateur.", "update.title": "Mises \xE0 jour de l'app", "update.current": "Version install\xE9e : {v}", "update.latest": "Derni\xE8re version : {v}", "update.button": "Rechercher des mises \xE0 jour", "update.install": "Installer la version {v} maintenant", "update.available": "La version {v} est disponible.", "update.not_in_app": "Les mises \xE0 jour sont install\xE9es par l'app BitPull. Ouvrez ce tableau de bord depuis l'app pour mettre \xE0 jour.", "update.state.requested": "Demande de v\xE9rification \xE0 l'app\u2026", "update.state.checking": "Recherche de mises \xE0 jour\u2026", "update.state.up_to_date": "Vous avez la derni\xE8re version.", "update.state.installing": "T\xE9l\xE9chargement et installation de la version {v}\u2026 l'app red\xE9marre toute seule.", "update.state.restarting": "Red\xE9marrage avec la version {v}\u2026", "update.state.error": "La mise \xE0 jour a \xE9chou\xE9 : {msg}. R\xE9essayez plus tard.", "tip.update": "V\xE9rifie s'il existe une version plus r\xE9cente de BitPull. Si oui, la t\xE9l\xE9charge, v\xE9rifie sa signature, l'installe et red\xE9marre l'app. Le pr\xEAt est suspendu quelques secondes.", "tools.hint": "Laissez votre assistant d'AI chercher dans le code partag\xE9 et utiliser les mod\xE8les ouverts et les ordinateurs du r\xE9seau. Choisissez votre outil :", "tools.connect": "Connecter", "tools.connected": "Connect\xE9", "tools.copy": "Copier", "tools.copied": "Copi\xE9.", "tools.installed": "Install\xE9", "tools.not_found": "Introuvable sur cet ordinateur", "tools.done": "Termin\xE9. Red\xE9marrez {name} pour commencer \xE0 utiliser BitPull.", "tools.manual": "Pour l'ajouter \xE0 la main :", "tools.config_invalid": "Le fichier de param\xE8tres de {name} n'est pas un JSON valide, BitPull n'y a donc pas touch\xE9. Corrigez le fichier ou ajoutez BitPull \xE0 la main avec Copier.", "tip.tools.connect": "Ajoute BitPull aux param\xE8tres de {name} automatiquement. Une sauvegarde des param\xE8tres pr\xE9c\xE9dents est conserv\xE9e \xE0 c\xF4t\xE9.", "tip.tools.copy": "Copie la commande ou les param\xE8tres dans le presse-papiers, pour ajouter BitPull \xE0 {name} vous-m\xEAme.", "models.title": "Mod\xE8les d'IA \xE0 partager", "models.hint": "Mod\xE8les ouverts de tous types que cet ordinateur peut pr\xEAter. Seuls les mod\xE8les dont la licence permet de les servir \xE0 d'autres sont list\xE9s. Les mod\xE8les t\xE9l\xE9charg\xE9s sont propos\xE9s au r\xE9seau tant que le pr\xEAt est actif.", "models.engine.title": "Moteur images, voix et musique", "models.engine.help": "Lemonade (open source) : g\xE9n\xE9ration d'images, transcription vocale, synth\xE8se vocale, musique, reclassement et agrandissement d'images. Install\xE9 dans BitPull, sans droits administrateur.", "models.engine.install": "Installer le moteur", "models.engine.repair": "R\xE9installer le moteur", "models.engine.unsupported": "Indisponible sur cet ordinateur (n\xE9cessite Apple silicon, ou Windows/Linux x64)", "models.need_engine": "Installez d'abord le moteur", "models.not_here": "Indisponible sur cet ordinateur", "models.shared": "T\xE9l\xE9charg\xE9 \xB7 partag\xE9", "models.download": "T\xE9l\xE9charger ({size} Go)", "models.needs_ram": "N\xE9cessite environ {ram} Go de m\xE9moire : peut \xEAtre lent ici", "models.recommended": "Recommand\xE9", "models.license": "Licence", "models.ok.engine": "Installation du moteur\u2026", "task.chat": "Texte et code", "task.vision": "Images \u2192 texte", "task.ocr": "Documents (OCR)", "task.translate": "Traduction", "task.embed": "Embeddings (recherche)", "task.rerank": "Reclassement", "task.image": "G\xE9n\xE9ration d'images", "task.upscale": "Agrandissement d'images", "task.stt": "Voix \u2192 texte", "task.tts": "Texte \u2192 voix", "task.music": "Musique", "limits.title": "Vos limites pour les autres", "limits.hint": "Quantit\xE9 de travail d'IA que cet ordinateur fait pour les autres. Laissez vide pour aucune limite. Une fois une limite atteinte, vos mod\xE8les ne sont plus propos\xE9s jusqu'\xE0 la p\xE9riode suivante.", "limits.save": "Enregistrer les limites", "limits.requests": "Requ\xEAtes", "limits.tokens": "Tokens", "limits.used": "Utilis\xE9", "limits.day": "Par jour", "limits.week": "Par semaine", "limits.month": "Par mois", "limits.none": "aucune limite", "limits.usage": "{requests} requ\xEAtes \xB7 {tokens} tokens", "limits.saved": "Limites enregistr\xE9es.", "tip.models.engine": "T\xE9l\xE9charge dans BitPull le moteur open source Lemonade, pour que cet ordinateur puisse pr\xEAter des mod\xE8les d'image, de voix et de musique.", "tip.models.download": "T\xE9l\xE9charge {model} ({size} Go) sur cet ordinateur pour le proposer aux autres. Vous pourrez le supprimer plus tard.", "tip.limits.save": "Enregistre les limites quotidiennes, hebdomadaires et mensuelles du travail d'IA fait pour les autres.", "lend.visible": "\u2713 Le r\xE9seau voit cet ordinateur : {cpus} CPU, {ram} Go disponibles pour les autres.", "lend.invisible": "Le r\xE9seau ne voit pas encore le pr\xEAt : attendez jusqu'\xE0 une minute ; si cela persiste, v\xE9rifiez la connexion internet.", "lend.unusable": "\u26A0 Personne ne peut encore utiliser cet ordinateur : aucune t\xE2che ne peut s'ex\xE9cuter ici. {reason}", "lend.unusable.docker": "Docker ne passe pas la v\xE9rification d'isolation de BitPull : voir \xAB Configurer cet ordinateur \xBB.", "lend.unusable.off": "Les t\xE2ches en conteneur sont d\xE9sactiv\xE9es et aucun mod\xE8le d'IA n'est install\xE9 : activez \xAB T\xE2ches en conteneur \xBB ou t\xE9l\xE9chargez un mod\xE8le.", "lend.docker_login": "Docker ne peut pas t\xE9l\xE9charger d'images car sa connexion \xE0 Docker Hub n'est plus valide. Dans Docker Desktop, cliquez sur votre compte (en haut \xE0 droite) \u2192 Sign out, puis reconnectez-vous ou restez d\xE9connect\xE9. Appuyez ensuite sur V\xE9rifier \xE0 nouveau.", "lend.off_hint": "Le pr\xEAt est d\xE9sactiv\xE9 : cochez \xAB {enabled} \xBB dans \xAB {rules} \xBB ci-dessous et appuyez sur \xAB {save} \xBB. (Pause / Reprendre ne fait que suspendre un pr\xEAt d\xE9j\xE0 actif.)", "lend.low_memory": "Seulement {mb} Mo de m\xE9moire offerts : peu de t\xE2ches y tiennent. Dans \xAB {rules} \xBB, r\xE9glez \xAB {memory} \xBB par exemple \xE0 4096 (= 4 Go) et appuyez sur \xAB {save} \xBB.", "rules.awake": "Rester \xE9veill\xE9 pendant le pr\xEAt", "rules.awake.help": "Pendant qu'il ex\xE9cute une t\xE2che pour quelqu'un, cet ordinateur ne se met pas en veille (l'\xE9cran peut tout de m\xEAme s'\xE9teindre). Ensuite, veille comme d'habitude. \xC9vite les t\xE2ches interrompues.", "ask.wait": "Attendre jusqu'\xE0 (minutes)", "ask.wait.save": "Enregistrer", "ask.wait.saved": "Les r\xE9ponses seront attendues jusqu'\xE0 {n} minutes.", "ask.wait.range": "Saisissez un nombre de minutes entre 1 et 120.", "tip.wait": "Combien de temps attendre la r\xE9ponse des mod\xE8les d'IA du r\xE9seau. Les mod\xE8les sur le processeur de quelqu'un peuvent prendre des minutes. Votre IA peut aussi le modifier.", "plan.month": "/mois", "plan.free.1": "Connaissances partag\xE9es", "plan.free.2": "Calcul avec les cr\xE9dits gagn\xE9s en pr\xEAtant", "plan.free.3": "Solde jusqu'\xE0 \u221220 cr\xE9dits", "plan.base.1": "80 cr\xE9dits chaque mois", "plan.base.2": "GPU grand public et mod\xE8les moyens", "plan.base.3": "Solde jusqu'\xE0 \u2212100 cr\xE9dits", "plan.pro.1": "200 cr\xE9dits chaque mois", "plan.pro.2": "Priorit\xE9 maximale, tous les GPU et grands mod\xE8les", "plan.pro.3": "Solde jusqu'\xE0 \u2212500 cr\xE9dits", "plans.current": "Votre offre", "plans.choose": "Choisir {plan}", "plans.renew": "Renouvel\xE9 chaque mois ; r\xE9siliable \xE0 tout moment, l'offre reste active jusqu'\xE0 la fin de la p\xE9riode pay\xE9e", "plans.recharge.title": "Recharge de cr\xE9dits", "plans.recharge.1": "{n} cr\xE9dits ajout\xE9s \xE0 votre solde", "plans.recharge.2": "Paiement unique, sans abonnement", "plans.recharge.3": "Les cr\xE9dits n'expirent pas", "plans.summary": "Vous achetez", "plans.pay": "Continuer vers le paiement s\xE9curis\xE9", "plans.cancel": "Annuler", "plans.off": "Les paiements ne sont pas encore actifs.", "account.line": "Compte : {email}", "account.via.email": "e-mail et mot de passe", "logout.button": "Se d\xE9connecter", "logout.confirm": "D\xE9connecter {email} de cet ordinateur ? Le pr\xEAt s'arr\xEAte jusqu'\xE0 la prochaine connexion. Vous pourrez ensuite vous connecter avec un autre compte ; les cr\xE9dits de bienvenue ne sont donn\xE9s qu'une fois par ordinateur.", "logout.yes": "Se d\xE9connecter", "logout.done": "Vous \xEAtes d\xE9connect\xE9 de cet ordinateur. Pour vous reconnecter, avec le m\xEAme compte ou un autre, ouvrez l'application BitPull ou lancez :", "tip.logout": "D\xE9connecte cet ordinateur du compte, par exemple pour se connecter avec un autre. Une confirmation est demand\xE9e d'abord.", "tip.logout.yes": "Ferme la session sur cet ordinateur. Le pr\xEAt s'arr\xEAte jusqu'\xE0 la prochaine connexion.", "tip.logout.no": "Vous restez connect\xE9.", "tip.plans.choose": "Affiche le nom, le prix et le contenu de l'offre avant de payer.", "tip.plans.pay": "Ouvre dans le navigateur la page de paiement s\xE9curis\xE9 de Stripe.", "tip.plans.cancel": "Ferme le r\xE9capitulatif sans acheter." }, hi: { "lang.name": "\u0939\u093F\u0928\u094D\u0926\u0940", "app.title": "BitPull", "locked.text": "\u0921\u0948\u0936\u092C\u094B\u0930\u094D\u0921 BitPull \u0910\u092A \u0938\u0947 \u0916\u094B\u0932\u0947\u0902: \u0909\u0938\u0915\u0947 \u0932\u093F\u0902\u0915 \u092E\u0947\u0902 \u090F\u0915\u094D\u0938\u0947\u0938 \u0915\u0941\u0902\u091C\u0940 \u0939\u094B\u0924\u0940 \u0939\u0948\u0964", "pill.online": "\u0911\u0928\u0932\u093E\u0907\u0928", "pill.offline": "\u0911\u092B\u093C\u0932\u093E\u0907\u0928", "pill.direct": "\u0938\u0940\u0927\u093E \u092A\u0924\u093E", "pill.relay_on": "\u0930\u093F\u0932\u0947 \u091C\u0941\u0921\u093C\u093E \u0939\u0948", "pill.relay_off": "\u0930\u093F\u0932\u0947 \u0928\u0939\u0940\u0902 \u091C\u0941\u0921\u093C\u093E", "pill.cached": "{n} \u0915\u0948\u0936 \u0915\u0940 \u0917\u0908 \u092A\u094D\u0930\u0924\u093F\u092F\u093E\u0901", "net.title": "\u0932\u093E\u0907\u0935 \u0928\u0947\u091F\u0935\u0930\u094D\u0915", "net.online": "{n} \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0911\u0928\u0932\u093E\u0907\u0928", "net.lending": "{n} \u0905\u092D\u0940 \u0909\u0927\u093E\u0930 \u0926\u0947 \u0930\u0939\u0947 \u0939\u0948\u0902", "net.cpu": "{n} CPU \u0915\u094B\u0930", "net.ram": "{n} GB RAM", "net.gpu": "{n} GPU", "net.models": "{n} AI \u092E\u0949\u0921\u0932", "net.jobs": "{n} \u091C\u0949\u092C \u091A\u0932 \u0930\u0939\u0947 \u0939\u0948\u0902", "credits.title": "\u0915\u094D\u0930\u0947\u0921\u093F\u091F \u092C\u0948\u0932\u0947\u0902\u0938", "credits.plan": "{plan} \u092A\u094D\u0932\u093E\u0928 \xB7 {n} \u0924\u0915 \u0928\u0940\u091A\u0947 \u091C\u093E \u0938\u0915\u0924\u093E \u0939\u0948", "plan.free": "\u092E\u0941\u092B\u093C\u094D\u0924", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "\u20AC5 \u0930\u093F\u091A\u093E\u0930\u094D\u091C", "buy.ok": "\u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0947\u091C \u0906\u092A\u0915\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0916\u0941\u0932 \u0917\u092F\u093E\u0964", "lend.title": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0909\u0927\u093E\u0930 \u0926\u0947\u0902", "lend.hint": "\u091C\u0949\u092C \u0905\u0932\u0917-\u0925\u0932\u0917 \u0938\u0948\u0902\u0921\u092C\u0949\u0915\u094D\u0938 \u092E\u0947\u0902 \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u091A\u0932\u0924\u0947 \u0939\u0948\u0902, \u0906\u092A\u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0915\u0947 \u092C\u093F\u0928\u093E\u0964 \u0906\u092A \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0915\u092E\u093E\u0924\u0947 \u0939\u0948\u0902\u0964", "lend.state.off": "\u092C\u0902\u0926", "lend.state.waiting": "\u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u092E\u0947\u0902", "lend.state.working": "\u0915\u093E\u092E \u0915\u0930 \u0930\u0939\u093E \u0939\u0948", "lend.reason.lending_off": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092C\u0902\u0926 \u0939\u0948", "lend.reason.paused": "\u0930\u0941\u0915\u093E \u0939\u0941\u0906", "lend.reason.outside_hours": "\u0906\u092A\u0915\u0947 \u0924\u092F \u0918\u0902\u091F\u094B\u0902 \u0938\u0947 \u092C\u093E\u0939\u0930", "lend.reason.on_battery": "\u092C\u0948\u091F\u0930\u0940 \u092A\u0930", "lend.reason.computer_in_use": "\u0906\u092A \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902", "lend.reason.no_jobs": "\u0915\u0924\u093E\u0930 \u092E\u0947\u0902 \u0915\u094B\u0908 \u091C\u0949\u092C \u0928\u0939\u0940\u0902", "lend.running": "{time} \u0938\u0947 \u090F\u0915 {kind} \u091C\u0949\u092C \u091A\u0932 \u0930\u0939\u093E \u0939\u0948", "lend.detail": "{reason} \xB7 {n} \u091C\u0949\u092C \u092A\u0942\u0930\u0947 \xB7 {cpus} CPU, {ram} GB \u0909\u092A\u0932\u092C\u094D\u0927", "lend.detail.sandbox": ", \u0938\u0948\u0902\u0921\u092C\u0949\u0915\u094D\u0938 {name}", "lend.detail.models": ", {n} \u092E\u0949\u0921\u0932", "lend.pause": "\u0930\u094B\u0915\u0947\u0902", "lend.resume": "\u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", "lend.paused_ok": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0930\u094B\u0915\u093E \u0917\u092F\u093E\u0964 \u091A\u0932 \u0930\u0939\u093E \u091C\u0949\u092C \u0926\u0942\u0938\u0930\u0947 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0938\u094C\u0902\u092A \u0926\u093F\u092F\u093E \u0917\u092F\u093E\u0964", "lend.resumed_ok": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0939\u0941\u0906\u0964", "setup.title": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0938\u0947\u091F \u0915\u0930\u0947\u0902", "setup.hint": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0915\u094D\u092F\u093E \u091A\u093E\u0939\u093F\u090F\u0964 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0914\u0930 \u0915\u0941\u091B \u0928\u0939\u0940\u0902 \u091A\u093E\u0939\u093F\u090F\u0964 \u0907\u0902\u0938\u094D\u091F\u0949\u0932\u0930 \u0906\u0927\u093F\u0915\u093E\u0930\u093F\u0915 \u0938\u093E\u0907\u091F\u094B\u0902 \u0938\u0947 \u0906\u0924\u0947 \u0939\u0948\u0902; \u0906\u092A\u0915\u093E \u0938\u093F\u0938\u094D\u091F\u092E \u092A\u0941\u0937\u094D\u091F\u093F \u092E\u093E\u0901\u0917\u0947\u0917\u093E\u0964", "setup.checking": "\u091C\u093E\u0901\u091A \u0939\u094B \u0930\u0939\u0940 \u0939\u0948\u2026", "setup.docker.help": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u091C\u0949\u092C \u0905\u0932\u0917-\u0925\u0932\u0917 \u0938\u0948\u0902\u0921\u092C\u0949\u0915\u094D\u0938 \u092E\u0947\u0902 \u091A\u0932\u093E\u0924\u093E \u0939\u0948\u0964 \u0915\u0902\u091F\u0947\u0928\u0930 \u091C\u0949\u092C \u0915\u0947 \u0932\u093F\u090F \u091C\u093C\u0930\u0942\u0930\u0940\u0964 \u0928\u093F\u091C\u0940 \u0909\u092A\u092F\u094B\u0917 \u0914\u0930 \u091B\u094B\u091F\u0947 \u0935\u094D\u092F\u0935\u0938\u093E\u092F\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u092E\u0941\u092B\u093C\u094D\u0924\u0964", "setup.docker.download": "Docker \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902", "setup.docker.start": "Docker \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", "setup.apple.title": "Apple Container (\u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915)", "setup.apple.help": "\u091C\u093C\u094D\u092F\u093E\u0926\u093E \u092E\u091C\u093C\u092C\u0942\u0924 \u0905\u0932\u0917\u093E\u0935: \u0939\u0930 \u091C\u0949\u092C \u0905\u092A\u0928\u0940 \u0935\u0930\u094D\u091A\u0941\u0905\u0932 \u092E\u0936\u0940\u0928 \u092E\u0947\u0902\u0964 \u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915; \u0936\u0941\u0930\u0941\u0906\u0924 \u0915\u0947 \u0932\u093F\u090F Docker \u0915\u093E\u092B\u093C\u0940 \u0939\u0948\u0964", "setup.apple.get": "Apple Container \u092A\u093E\u090F\u0901", "setup.ollama.help": "\u0913\u092A\u0928 AI \u092E\u0949\u0921\u0932 (Qwen, Llama, Mistral\u2026) \u091A\u0932\u093E\u0924\u093E \u0939\u0948\u0964 AI \u092E\u0949\u0921\u0932 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091C\u093C\u0930\u0942\u0930\u0940\u0964", "setup.ollama.download": "Ollama \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902", "setup.ollama.start": "Ollama \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", "setup.model.title": "AI \u092E\u0949\u0921\u0932", "setup.model.help": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u094B \u091C\u094B \u092E\u0949\u0921\u0932 \u0926\u0947\u0924\u093E \u0939\u0948\u0964 {ram} GB \u092E\u0947\u092E\u094B\u0930\u0940 \u0915\u0947 \u0932\u093F\u090F \u0938\u0941\u091D\u093E\u092F\u093E \u0917\u092F\u093E: {model}\u0964", "setup.model.download": "{model} \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902 ({size} GB)", "setup.model.none": "\u0905\u092D\u0940 \u0915\u094B\u0908 \u0928\u0939\u0940\u0902", "setup.model.need_ollama": "\u092A\u0939\u0932\u0947 Ollama \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0915\u0947 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", "setup.nvidia.title": "NVIDIA GPU \u0921\u094D\u0930\u093E\u0907\u0935\u0930 (\u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915)", "setup.nvidia.help": "\u0938\u093F\u0930\u094D\u092B\u093C \u0924\u092C, \u091C\u092C \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092E\u0947\u0902 NVIDIA \u0917\u094D\u0930\u093E\u092B\u093C\u093F\u0915\u094D\u0938 \u0915\u093E\u0930\u094D\u0921 \u0939\u0948 \u091C\u093F\u0938\u0947 \u0906\u092A \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u091A\u093E\u0939\u0924\u0947 \u0939\u0948\u0902\u0964", "setup.nvidia.get": "NVIDIA \u0921\u094D\u0930\u093E\u0907\u0935\u0930 \u092A\u093E\u090F\u0901", "setup.status.running": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948 \u0914\u0930 \u091A\u0932 \u0930\u0939\u093E \u0939\u0948", "setup.status.installed": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948", "setup.status.stopped": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948, \u091A\u0932 \u0928\u0939\u0940\u0902 \u0930\u0939\u093E", "setup.status.missing": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0928\u0939\u0940\u0902 \u0939\u0948", "setup.status.found": "\u092E\u093F\u0932\u093E", "setup.status.not_found": "\u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E", "setup.terminal": "\u091F\u0930\u094D\u092E\u093F\u0928\u0932 \u092E\u0947\u0902 \u091A\u0932\u093E\u090F\u0901:", "setup.done": "\u0939\u094B \u0917\u092F\u093E", "setup.opened": "\u0939\u094B \u0917\u092F\u093E: {file} \u0916\u094B\u0932\u0940 \u0917\u0908, \u0909\u0938\u0915\u0947 \u091A\u0930\u0923\u094B\u0902 \u0915\u093E \u092A\u093E\u0932\u0928 \u0915\u0930\u0947\u0902", "setup.recheck": "\u092B\u093F\u0930 \u091C\u093E\u0901\u091A\u0947\u0902", "setup.ok.download": "\u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0936\u0941\u0930\u0942 \u0939\u0941\u0906\u0964 \u092A\u0942\u0930\u093E \u0939\u094B\u0928\u0947 \u092A\u0930 \u0907\u0902\u0938\u094D\u091F\u0949\u0932\u0930 \u0905\u092A\u0928\u0947 \u0906\u092A \u0916\u0941\u0932\u0947\u0917\u093E: \u0909\u0938\u0915\u0947 \u091A\u0930\u0923\u094B\u0902 \u0915\u093E \u092A\u093E\u0932\u0928 \u0915\u0930\u0947\u0902\u0964", "setup.ok.start": "\u0936\u0941\u0930\u0942 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026 \u0907\u0938\u092E\u0947\u0902 \u090F\u0915 \u092E\u093F\u0928\u091F \u0924\u0915 \u0932\u0917 \u0938\u0915\u0924\u093E \u0939\u0948\u0964 \u092F\u0939 \u0938\u0942\u091A\u0940 \u0905\u092A\u0928\u0947 \u0906\u092A \u0905\u092A\u0921\u0947\u091F \u0939\u094B\u0924\u0940 \u0939\u0948\u0964", "setup.ok.pull": "\u092E\u0949\u0921\u0932 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0936\u0941\u0930\u0942 \u0939\u0941\u0906\u0964 \u092A\u094D\u0930\u0917\u0924\u093F \u090A\u092A\u0930 \u0926\u093F\u0916 \u0930\u0939\u0940 \u0939\u0948\u0964", "setup.ok.page": "\u092A\u0947\u091C \u0906\u092A\u0915\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0916\u0941\u0932 \u0917\u092F\u093E\u0964", "setup.ok.recheck": "\u092B\u093F\u0930 \u0938\u0947 \u091C\u093E\u0901\u091A \u0932\u0940 \u0917\u0908\u0964", "rules.title": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0928\u093F\u092F\u092E", "rules.enabled": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u091A\u093E\u0932\u0942", "rules.enabled.help": "\u092E\u0941\u0916\u094D\u092F \u0938\u094D\u0935\u093F\u091A\u0964 \u092C\u0902\u0926 \u0939\u094B\u0928\u0947 \u092A\u0930 \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u092D\u0940 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u091C\u0949\u092C \u0928\u0939\u0940\u0902 \u091A\u0932\u093E\u0924\u093E\u0964 \u0906\u092A \u092B\u093F\u0930 \u092D\u0940 \u0916\u0941\u0926 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", "rules.cpus": "\u0905\u0927\u093F\u0915\u0924\u092E CPU", "rules.cpus.help": "\u090F\u0915 \u091C\u0949\u092C \u0905\u0927\u093F\u0915\u0924\u092E \u0915\u093F\u0924\u0928\u0947 \u092A\u094D\u0930\u094B\u0938\u0947\u0938\u0930 \u0915\u094B\u0930 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930 \u0938\u0915\u0924\u093E \u0939\u0948\u0964 \u0909\u0926\u093E\u0939\u0930\u0923: 8-\u0915\u094B\u0930 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 2 \u0930\u0916\u0928\u0947 \u0938\u0947 \u0906\u092A\u0915\u0947 \u0932\u093F\u090F 6 \u0915\u094B\u0930 \u0916\u093E\u0932\u0940 \u0930\u0939\u0924\u0947 \u0939\u0948\u0902\u0964", "rules.memory": "\u0905\u0927\u093F\u0915\u0924\u092E \u092E\u0947\u092E\u094B\u0930\u0940 (MB)", "rules.memory.help": "\u090F\u0915 \u091C\u0949\u092C \u0915\u093F\u0924\u0928\u0940 RAM \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930 \u0938\u0915\u0924\u093E \u0939\u0948, \u092E\u0947\u0917\u093E\u092C\u093E\u0907\u091F \u092E\u0947\u0902 (1024 MB = 1 GB)\u0964 BitPull \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u0940 \u0906\u0927\u0940 \u092E\u0947\u092E\u094B\u0930\u0940 \u0938\u0947 \u091C\u093C\u094D\u092F\u093E\u0926\u093E \u0915\u092D\u0940 \u0928\u0939\u0940\u0902 \u0926\u0947\u0924\u093E\u0964", "rules.gpu": "GPU", "rules.gpu.none": "\u0915\u094B\u0908 \u0928\u0939\u0940\u0902", "rules.gpu.consumer": "\u0938\u093E\u092E\u093E\u0928\u094D\u092F (8\u201312 GB)", "rules.gpu.high": "\u0939\u093E\u0908-\u090F\u0902\u0921 (16\u201324 GB)", "rules.gpu.datacenter": "\u0921\u0947\u091F\u093E \u0938\u0947\u0902\u091F\u0930 (40 GB+)", "rules.gpu.help": '\u0906\u092A \u091C\u094B \u0917\u094D\u0930\u093E\u092B\u093C\u093F\u0915\u094D\u0938 \u0915\u093E\u0930\u094D\u0921 \u0909\u0927\u093E\u0930 \u0926\u0947\u0924\u0947 \u0939\u0948\u0902, \u0935\u0940\u0921\u093F\u092F\u094B \u092E\u0947\u092E\u094B\u0930\u0940 \u0915\u0947 \u0905\u0928\u0941\u0938\u093E\u0930\u0964 \u0905\u0917\u0930 \u0905\u0932\u0917 GPU \u0928\u0939\u0940\u0902 \u0939\u0948 \u092F\u093E \u0909\u0927\u093E\u0930 \u0928\u0939\u0940\u0902 \u0926\u0947\u0928\u093E \u091A\u093E\u0939\u0924\u0947, \u0924\u094B "\u0915\u094B\u0908 \u0928\u0939\u0940\u0902" \u0930\u0939\u0928\u0947 \u0926\u0947\u0902\u0964 GPU \u0938\u092C\u0938\u0947 \u091C\u093C\u094D\u092F\u093E\u0926\u093E \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0915\u092E\u093E\u0924\u093E \u0939\u0948\u0964', "rules.containers": "\u0915\u0902\u091F\u0947\u0928\u0930 \u091C\u0949\u092C", "rules.containers.help": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u092C\u093F\u0932\u094D\u0921, \u091F\u0947\u0938\u094D\u091F \u0914\u0930 \u0938\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F \u0910\u0938\u0947 \u0938\u0948\u0902\u0921\u092C\u0949\u0915\u094D\u0938 \u092E\u0947\u0902 \u091A\u0932\u093E\u090F\u0901 \u091C\u093F\u0938\u092E\u0947\u0902 \u0907\u0902\u091F\u0930\u0928\u0947\u091F \u0914\u0930 \u0906\u092A\u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 Docker (\u092F\u093E Apple Container) \u091C\u093C\u0930\u0942\u0930\u0940: \u201C\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0938\u0947\u091F \u0915\u0930\u0947\u0902\u201D \u0926\u0947\u0916\u0947\u0902\u0964", "rules.models": "\u0913\u092A\u0928 \u092E\u0949\u0921\u0932 (Ollama)", "rules.models.help": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 Ollama \u092E\u0947\u0902 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0913\u092A\u0928 \u092E\u0949\u0921\u0932 \u0938\u0947 AI \u0905\u0928\u0941\u0930\u094B\u0927\u094B\u0902 \u0915\u093E \u091C\u0935\u093E\u092C \u0926\u0947\u0902\u0964 Ollama \u0914\u0930 \u0915\u092E \u0938\u0947 \u0915\u092E \u090F\u0915 \u092E\u0949\u0921\u0932 \u091C\u093C\u0930\u0942\u0930\u0940\u0964", "rules.idle": "\u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0924\u0928\u0947 \u092E\u093F\u0928\u091F \u0928\u093F\u0937\u094D\u0915\u094D\u0930\u093F\u092F \u0930\u0939\u0928\u0947 \u0915\u0947 \u092C\u093E\u0926", "rules.idle.help": "\u0938\u093F\u0930\u094D\u092B\u093C \u0924\u092C \u0909\u0927\u093E\u0930 \u0926\u0947\u0902 \u091C\u092C \u0906\u092A\u0928\u0947 \u0907\u0924\u0928\u0947 \u092E\u093F\u0928\u091F \u0924\u0915 \u0915\u0940\u092C\u094B\u0930\u094D\u0921 \u092F\u093E \u092E\u093E\u0909\u0938 \u0928 \u091B\u0941\u0906 \u0939\u094B\u0964 0 = \u0915\u093E\u092E \u0915\u0930\u0924\u0947 \u0938\u092E\u092F \u092D\u0940 \u0909\u0927\u093E\u0930 \u0926\u0947\u0902\u0964", "rules.ac": "\u0938\u093F\u0930\u094D\u092B\u093C \u091A\u093E\u0930\u094D\u091C\u0930 \u0932\u0917\u0947 \u0939\u094B\u0928\u0947 \u092A\u0930", "rules.ac.help": "\u0932\u0948\u092A\u091F\u0949\u092A \u092A\u0930, \u092C\u0948\u091F\u0930\u0940 \u092A\u0930 \u091A\u0932\u0924\u0947 \u0938\u092E\u092F \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092C\u0902\u0926 \u0915\u0930\u0947\u0902, \u0924\u093E\u0915\u093F \u092C\u0948\u091F\u0930\u0940 \u0916\u0924\u094D\u092E \u0928 \u0939\u094B\u0964", "rules.hours": "\u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0938 \u0918\u0902\u091F\u0947 \u0938\u0947 / \u0924\u0915 (\u0916\u093E\u0932\u0940 = \u0939\u092E\u0947\u0936\u093E)", "rules.hours.help": "\u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0938 \u0938\u092E\u092F \u092E\u0947\u0902 \u0909\u0927\u093E\u0930 \u0926\u0947\u0902, 24-\u0918\u0902\u091F\u0947 \u0915\u0947 \u092B\u093C\u0949\u0930\u094D\u092E\u0948\u091F \u092E\u0947\u0902\u0964 \u0909\u0926\u093E\u0939\u0930\u0923: 22 \u0914\u0930 8 = \u0930\u093E\u0924 10 \u092C\u091C\u0947 \u0938\u0947 \u0938\u0941\u092C\u0939 8 \u092C\u091C\u0947 \u0924\u0915\u0964 \u0915\u093F\u0938\u0940 \u092D\u0940 \u0938\u092E\u092F \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u094B\u0928\u094B\u0902 \u0916\u093E\u0932\u0940 \u091B\u094B\u0921\u093C\u0947\u0902\u0964", "rules.cache": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0930\u093F\u092A\u094B \u0915\u0940 \u0915\u0948\u0936 \u092A\u094D\u0930\u0924\u093F\u092F\u093E\u0901", "rules.cache.help": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0926\u0942\u0938\u0930\u0947 \u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E\u0913\u0902 \u0915\u0947 \u0915\u093F\u0924\u0928\u0947 \u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 \u0930\u093F\u092A\u094B \u0915\u0940 \u092A\u094D\u0930\u0924\u093F \u0930\u0916\u0924\u093E \u0939\u0948, \u0924\u093E\u0915\u093F \u0909\u0928\u0915\u0947 \u0932\u0947\u0916\u0915 \u0911\u092B\u093C\u0932\u093E\u0907\u0928 \u0939\u094B\u0928\u0947 \u092A\u0930 \u092D\u0940 \u0935\u0947 \u0909\u092A\u0932\u092C\u094D\u0927 \u0930\u0939\u0947\u0902\u0964 \u0925\u094B\u0921\u093C\u0940 \u0921\u093F\u0938\u094D\u0915 \u091C\u0917\u0939 \u0932\u0947\u0924\u093E \u0939\u0948 \u0914\u0930 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0915\u092E\u093E\u0924\u093E \u0939\u0948\u0964 0 = \u0915\u094B\u0908 \u0928\u0939\u0940\u0902\u0964", "rules.save": "\u0928\u093F\u092F\u092E \u0938\u0939\u0947\u091C\u0947\u0902", "rules.saved": "\u0928\u093F\u092F\u092E \u0938\u0939\u0947\u091C\u0947 \u0917\u090F\u0964 \u0915\u0941\u091B \u0938\u0947\u0915\u0902\u0921 \u092E\u0947\u0902 \u0932\u093E\u0917\u0942 \u0939\u094B\u0902\u0917\u0947\u0964", "rules.hours_both": "\u0926\u094B\u0928\u094B\u0902 \u0918\u0902\u091F\u0947 \u092D\u0930\u0947\u0902, \u092F\u093E \u0915\u093F\u0938\u0940 \u092D\u0940 \u0938\u092E\u092F \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u094B\u0928\u094B\u0902 \u0916\u093E\u0932\u0940 \u091B\u094B\u0921\u093C\u0947\u0902\u0964", "folders.title": "\u0905\u0927\u093F\u0915\u0943\u0924 \u092B\u093C\u094B\u0932\u094D\u0921\u0930", "folders.hint": "BitPull \u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0928 \u092B\u093C\u094B\u0932\u094D\u0921\u0930\u094B\u0902 \u0915\u094B \u092A\u0922\u093C\u0924\u093E \u0939\u0948\u0964 \u0915\u093F\u0938\u0940 \u0915\u094B \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u092A\u0942\u0930\u0940 bitpull.json \u091A\u093E\u0939\u093F\u090F\u0964", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u0905\u0927\u093F\u0915\u0943\u0924 \u0915\u0930\u0947\u0902", "folders.none": "\u0915\u094B\u0908 \u0905\u0927\u093F\u0915\u0943\u0924 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0928\u0939\u0940\u0902\u0964", "folders.draft": "\u0921\u094D\u0930\u093E\u092B\u093C\u094D\u091F", "folders.publish": "\u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0915\u0930\u0947\u0902", "folders.remove": "\u0939\u091F\u093E\u090F\u0901", "folders.need_path": "\u092A\u0939\u0932\u0947 \u0915\u093F\u0938\u0940 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0915\u093E \u092A\u0942\u0930\u093E \u092A\u0925 \u0932\u093F\u0916\u0947\u0902, \u091C\u0948\u0938\u0947 /Users/you/projects/my-library\u0964", "folders.added": "\u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0905\u0927\u093F\u0915\u0943\u0924 \u0915\u093F\u092F\u093E \u0917\u092F\u093E\u0964", "folders.removed": "\u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0939\u091F\u093E\u092F\u093E \u0917\u092F\u093E\u0964 BitPull \u0905\u092C \u0907\u0938\u0947 \u0928\u0939\u0940\u0902 \u092A\u0922\u093C\u0924\u093E\u0964", "folders.drafted": '\u0921\u094D\u0930\u093E\u092B\u093C\u094D\u091F \u0924\u0948\u092F\u093E\u0930: {n} \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092E\u093F\u0932\u0940\u0902\u0964 \u0905\u092A\u0928\u0947 AI \u0938\u0947 \u0938\u093E\u0930\u093E\u0902\u0936 \u0914\u0930 \u0935\u093F\u0935\u0930\u0923 \u092D\u0930\u0935\u093E\u090F\u0901 (prepare_publish \u091F\u0942\u0932), \u092B\u093F\u0930 "\u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0915\u0930\u0947\u0902" \u0926\u092C\u093E\u090F\u0901\u0964', "folders.published": '"{name}" {n} \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u0915\u0947 \u0938\u093E\u0925 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0939\u0941\u0906\u0964', "folders.secrets_in": "\u092F\u0939\u093E\u0901 \u092E\u093F\u0932\u093E: {where}", "folders.line": "{file} \u092A\u0902\u0915\u094D\u0924\u093F {line}", "repos.title": "\u0906\u092A\u0915\u0947 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0930\u093F\u092A\u094B", "repos.hint": "\u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092C\u0926\u0932\u0928\u0947 \u092A\u0930 \u092F\u0947 \u0905\u092A\u0928\u0947 \u0906\u092A \u0905\u092A\u0921\u0947\u091F \u0939\u094B\u0924\u0947 \u0939\u0948\u0902 (\u0939\u0930 5 \u092E\u093F\u0928\u091F \u092E\u0947\u0902)\u0964", "repos.none": "\u0915\u094B\u0908 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0930\u093F\u092A\u094B \u0928\u0939\u0940\u0902\u0964", "repos.withdraw": "\u0935\u093E\u092A\u0938 \u0932\u0947\u0902", "repos.withdrawn": "\u0930\u093F\u092A\u094B \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0938\u0947 \u0935\u093E\u092A\u0938 \u0932\u093F\u092F\u093E \u0917\u092F\u093E\u0964", "ask.title": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u092A\u0930 \u0913\u092A\u0928 \u092E\u0949\u0921\u0932", "ask.offers": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0926\u0947\u0924\u093E \u0939\u0948: {models}\u0964", "ask.offers_none": "\u0915\u094B\u0908 \u092E\u0949\u0921\u0932 \u0928\u0939\u0940\u0902 (\u0926\u0947\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F Ollama \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902)", "ask.placeholder": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u092A\u0930 \u0915\u093F\u0938\u0940 \u0913\u092A\u0928 \u092E\u0949\u0921\u0932 \u0938\u0947 \u092A\u0942\u091B\u0947\u0902\u2026", "ask.small": "\u091B\u094B\u091F\u093E", "ask.medium": "\u092E\u0927\u094D\u092F\u092E", "ask.large": "\u092C\u0921\u093C\u093E", "ask.button": "\u092A\u0942\u091B\u0947\u0902", "ask.empty": "\u092A\u0939\u0932\u0947 \u090F\u0915 \u0938\u0935\u093E\u0932 \u0932\u093F\u0916\u0947\u0902\u0964", "ask.waiting": "\u092E\u0949\u0921\u0932 \u0935\u093E\u0932\u093E \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0916\u094B\u091C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026 \u0907\u0938\u092E\u0947\u0902 \u090F\u0915 \u092E\u093F\u0928\u091F \u0924\u0915 \u0932\u0917 \u0938\u0915\u0924\u093E \u0939\u0948\u0964", "ask.credits": "{n} \u0915\u094D\u0930\u0947\u0921\u093F\u091F", "tools.title": "\u0905\u092A\u0928\u0947 \u091F\u0942\u0932 \u091C\u094B\u0921\u093C\u0947\u0902", "tools.mcp": "Claude Code \u0914\u0930 MCP \u0915\u094D\u0932\u093E\u0907\u0902\u091F \u0915\u0947 \u0932\u093F\u090F, \u091F\u0930\u094D\u092E\u093F\u0928\u0932 \u092E\u0947\u0902 \u091A\u0932\u093E\u090F\u0901:", "tools.openai": "OpenAI-\u0938\u0902\u0917\u0924 \u091F\u0942\u0932 \u0915\u0947 \u0932\u093F\u090F: \u092C\u0947\u0938 URL", "tools.key": "API \u0915\u0941\u0902\u091C\u0940", "tools.show": "\u0926\u093F\u0916\u093E\u090F\u0901", "jobs.title": "\u0906\u092A\u0915\u0947 \u0939\u093E\u0932 \u0915\u0947 \u091C\u0949\u092C", "jobs.none": "\u0915\u094B\u0908 \u091C\u0949\u092C \u0928\u0939\u0940\u0902\u0964", "jobs.model": "\u092E\u0949\u0921\u0932", "jobs.container": "\u0915\u0902\u091F\u0947\u0928\u0930", "jobs.status.queued": "\u0915\u0924\u093E\u0930 \u092E\u0947\u0902", "jobs.status.running": "\u091A\u0932 \u0930\u0939\u093E \u0939\u0948", "jobs.status.done": "\u092A\u0942\u0930\u093E", "jobs.status.failed": "\u0935\u093F\u092B\u0932", "jobs.status.canceled": "\u0930\u0926\u094D\u0926", "jobs.cost": "{n} \u0915\u094D\u0930\u0947\u0921\u093F\u091F", working: "\u0915\u093E\u092E \u091A\u0932 \u0930\u0939\u093E \u0939\u0948\u2026", "err.agent_down": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 BitPull \u091C\u0935\u093E\u092C \u0928\u0939\u0940\u0902 \u0926\u0947 \u0930\u0939\u093E\u0964 \u092F\u0939 30 \u0938\u0947\u0915\u0902\u0921 \u092E\u0947\u0902 \u0905\u092A\u0928\u0947 \u0906\u092A \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0939\u094B\u0924\u093E \u0939\u0948: \u0925\u094B\u0921\u093C\u0940 \u0926\u0947\u0930 \u092E\u0947\u0902 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "err.server": "BitPull \u0938\u0930\u094D\u0935\u0930 \u0938\u0947 \u0938\u0902\u092A\u0930\u094D\u0915 \u0928\u0939\u0940\u0902 \u0939\u094B \u092A\u093E \u0930\u0939\u093E\u0964 \u0905\u092A\u0928\u093E \u0907\u0902\u091F\u0930\u0928\u0947\u091F \u0915\u0928\u0947\u0915\u094D\u0936\u0928 \u091C\u093E\u0901\u091A\u0947\u0902 \u0914\u0930 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "err.session": "\u0907\u0938 \u0921\u0948\u0936\u092C\u094B\u0930\u094D\u0921 \u0915\u093E \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u0939\u094B \u0917\u092F\u093E\u0964 \u0907\u0938\u0947 BitPull \u0910\u092A \u0938\u0947 \u092B\u093F\u0930 \u0916\u094B\u0932\u0947\u0902\u0964", "err.billing": "\u092D\u0941\u0917\u0924\u093E\u0928 \u0905\u092D\u0940 \u0938\u0915\u094D\u0930\u093F\u092F \u0928\u0939\u0940\u0902 \u0939\u0948\u0902\u0964", "err.no_folder": "\u092F\u0939 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u092E\u094C\u091C\u0942\u0926 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u092A\u0925 \u091C\u093E\u0901\u091A\u0947\u0902\u0964", "err.not_folder": "\u092F\u0939 \u092A\u0925 \u090F\u0915 \u092B\u093C\u093E\u0907\u0932 \u0939\u0948, \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0928\u0939\u0940\u0902\u0964", "err.credits": "\u092A\u0930\u094D\u092F\u093E\u092A\u094D\u0924 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0928\u0939\u0940\u0902 \u0939\u0948\u0902\u0964", "err.device": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0905\u092D\u0940 \u091C\u0941\u0921\u093C\u093E \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 BitPull \u0910\u092A \u0916\u0941\u0932\u093E \u0930\u0916\u0947\u0902 \u0914\u0930 \u090F\u0915 \u092E\u093F\u0928\u091F \u092C\u093E\u0926 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "err.no_model": "\u0905\u092D\u0940 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u092A\u0930 \u0915\u094B\u0908 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 AI \u092E\u0949\u0921\u0932 \u0928\u0939\u0940\u0902 \u0926\u0947 \u0930\u0939\u093E\u0964 \u092C\u093E\u0926 \u092E\u0947\u0902 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "err.invalid": "\u0915\u0941\u091B \u092E\u093E\u0928 \u092E\u093E\u0928\u094D\u092F \u0928\u0939\u0940\u0902 \u0939\u0948\u0902\u0964 \u092B\u093C\u0940\u0932\u094D\u0921 \u091C\u093E\u0901\u091A\u0947\u0902 \u0914\u0930 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "tip.lang": "\u0910\u092A \u0915\u0940 \u092D\u093E\u0937\u093E\u0964 \u0906\u092A\u0915\u0940 \u092A\u0938\u0902\u0926 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u092F\u093E\u0926 \u0930\u0916\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0964", "tip.buy.base": "Base \u092A\u094D\u0932\u093E\u0928 \u0915\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0947\u091C \u0916\u094B\u0932\u0924\u093E \u0939\u0948: \u20AC4.50 \u092A\u094D\u0930\u0924\u093F \u092E\u093E\u0939, \u0939\u0930 \u092E\u0939\u0940\u0928\u0947 80 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0915\u0947 \u0938\u093E\u0925\u0964 \u0906\u092A \u0915\u092D\u0940 \u092D\u0940 \u0930\u0926\u094D\u0926 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", "tip.buy.pro": "Pro \u092A\u094D\u0932\u093E\u0928 \u0915\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0947\u091C \u0916\u094B\u0932\u0924\u093E \u0939\u0948: \u20AC9.90 \u092A\u094D\u0930\u0924\u093F \u092E\u093E\u0939, \u0939\u0930 \u092E\u0939\u0940\u0928\u0947 200 \u0915\u094D\u0930\u0947\u0921\u093F\u091F, \u0938\u092C\u0938\u0947 \u090A\u0901\u091A\u0940 \u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E \u0914\u0930 \u0938\u092D\u0940 GPU \u0915\u0947 \u0938\u093E\u0925\u0964 \u0906\u092A \u0915\u092D\u0940 \u092D\u0940 \u0930\u0926\u094D\u0926 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", "tip.buy.recharge": "\u20AC5 \u092E\u0947\u0902 \u090F\u0915 \u092C\u093E\u0930 80 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0916\u0930\u0940\u0926\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0947\u091C \u0916\u094B\u0932\u0924\u093E \u0939\u0948\u0964 \u092F\u0947 \u0915\u092D\u0940 \u0938\u092E\u093E\u092A\u094D\u0924 \u0928\u0939\u0940\u0902 \u0939\u094B\u0924\u0947\u0964", "tip.pause": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0905\u092D\u0940 \u0930\u094B\u0915 \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0907\u0938 \u0938\u092E\u092F \u091A\u0932 \u0930\u0939\u093E \u091C\u0949\u092C \u0926\u0942\u0938\u0930\u0947 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0938\u094C\u0902\u092A \u0926\u093F\u092F\u093E \u091C\u093E\u0924\u093E \u0939\u0948\u0964 \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u094B\u092C\u093E\u0930\u093E \u0926\u092C\u093E\u090F\u0901\u0964", "tip.resume": "\u0906\u092A\u0915\u0947 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0928\u093F\u092F\u092E\u094B\u0902 \u0915\u0947 \u0905\u0928\u0941\u0938\u093E\u0930 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0924\u093E \u0939\u0948\u0964", "tip.rules.save": "\u090A\u092A\u0930 \u0926\u093F\u090F \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u0947 \u0915\u0947 \u0928\u093F\u092F\u092E \u0938\u0939\u0947\u091C\u0924\u093E \u0939\u0948\u0964 \u092F\u0947 \u0915\u0941\u091B \u0939\u0940 \u0938\u0947\u0915\u0902\u0921 \u092E\u0947\u0902 \u0932\u093E\u0917\u0942 \u0939\u094B\u0924\u0947 \u0939\u0948\u0902; \u091C\u092C \u0924\u0915 \u0906\u092A \u0907\u0938\u0947 \u0928\u0939\u0940\u0902 \u0926\u092C\u093E\u0924\u0947, \u0915\u0941\u091B \u0928\u0939\u0940\u0902 \u092C\u0926\u0932\u0924\u093E\u0964", "tip.folder.add": "BitPull \u0915\u094B \u092C\u093E\u0908\u0902 \u0913\u0930 \u0932\u093F\u0916\u093E \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u092A\u0922\u093C\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0905\u0928\u0941\u092E\u0924\u093F \u0935\u093E\u0932\u0947 \u092B\u093C\u094B\u0932\u094D\u0921\u0930\u094B\u0902 \u0938\u0947 \u092C\u093E\u0939\u0930 \u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u0915\u092D\u0940 \u092A\u0922\u093C\u0940 \u092F\u093E \u0938\u093E\u091D\u093E \u0928\u0939\u0940\u0902 \u0915\u0940 \u091C\u093E\u0924\u0940\u0902\u0964", "tip.folder.draft": "\u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u092E\u0947\u0902 bitpull.json \u092C\u0928\u093E\u0924\u093E \u0939\u0948: \u0909\u0938\u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u0915\u0940 \u0938\u0942\u091A\u0940, \u0916\u093E\u0932\u0940 \u0935\u093F\u0935\u0930\u0923\u094B\u0902 \u0915\u0947 \u0938\u093E\u0925 \u091C\u093F\u0928\u094D\u0939\u0947\u0902 \u0906\u092A\u0915\u093E AI \u092D\u0930\u0947\u0917\u093E\u0964 \u0905\u092D\u0940 \u0915\u0941\u091B \u092D\u0940 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0928\u0939\u0940\u0902 \u0939\u094B\u0924\u093E\u0964", "tip.folder.publish": "\u0907\u0938 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0915\u094B \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u092A\u0930 \u090F\u0915 \u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 \u0930\u093F\u092A\u094B \u0915\u0947 \u0930\u0942\u092A \u092E\u0947\u0902 \u0938\u093E\u091D\u093E \u0915\u0930\u0924\u093E \u0939\u0948, \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u0947 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0915\u0947 \u0938\u093E\u0925\u0964 \u0905\u0917\u0930 \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u092E\u0947\u0902 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u092F\u093E \u092A\u093E\u0938\u0935\u0930\u094D\u0921 \u092E\u093F\u0932\u0924\u0947 \u0939\u0948\u0902, \u0924\u094B \u092A\u094D\u0930\u0915\u093E\u0936\u0928 \u0930\u094B\u0915 \u0926\u093F\u092F\u093E \u091C\u093E\u0924\u093E \u0939\u0948\u0964", "tip.folder.remove": "BitPull \u0907\u0938 \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u0915\u094B \u092A\u0922\u093C\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0907\u0938\u0938\u0947 \u092A\u0939\u0932\u0947 \u0938\u0947 \u092A\u094D\u0930\u0915\u093E\u0936\u093F\u0924 \u0930\u093F\u092A\u094B \u0924\u092C \u0924\u0915 \u0911\u0928\u0932\u093E\u0907\u0928 \u0930\u0939\u0924\u0947 \u0939\u0948\u0902 \u091C\u092C \u0924\u0915 \u0906\u092A \u0909\u0928\u094D\u0939\u0947\u0902 \u0935\u093E\u092A\u0938 \u0928\u0939\u0940\u0902 \u0932\u0947\u0924\u0947\u0964", "tip.repo.withdraw": "\u0907\u0938 \u0930\u093F\u092A\u094B \u0915\u094B \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0938\u0947 \u0939\u091F\u093E \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0926\u0942\u0938\u0930\u0947 \u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0907\u0938\u0947 \u0905\u092C \u0928 \u0922\u0942\u0901\u0922 \u092A\u093E\u090F\u0901\u0917\u0947, \u0928 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930 \u092A\u093E\u090F\u0901\u0917\u0947\u0964 \u0906\u092A\u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u0906\u092A\u0915\u0947 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0939\u0940 \u0930\u0939\u0924\u0940 \u0939\u0948\u0902\u0964", "tip.ask": "\u0906\u092A\u0915\u093E \u0938\u0935\u093E\u0932 \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0930\u0942\u092A \u092E\u0947\u0902 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0915\u0947 \u0910\u0938\u0947 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u092D\u0947\u091C\u0924\u093E \u0939\u0948 \u091C\u094B \u090F\u0915 \u0913\u092A\u0928 AI \u092E\u0949\u0921\u0932 \u091A\u0932\u093E\u0924\u093E \u0939\u0948\u0964 \u0907\u0938\u092E\u0947\u0902 \u0915\u0941\u091B \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0932\u0917\u0924\u0947 \u0939\u0948\u0902\u0964", "tip.tier": "\u092E\u0949\u0921\u0932 \u0915\u093E \u0906\u0915\u093E\u0930: \u091B\u094B\u091F\u093E \u0924\u0947\u091C\u093C \u0914\u0930 \u0938\u0938\u094D\u0924\u093E \u0939\u0948, \u092C\u0921\u093C\u093E \u091C\u093C\u094D\u092F\u093E\u0926\u093E \u0938\u092E\u091D\u0926\u093E\u0930 \u0939\u0948 \u0914\u0930 \u091C\u093C\u094D\u092F\u093E\u0926\u093E \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0932\u0947\u0924\u093E \u0939\u0948\u0964", "tip.show_key": "\u0935\u0939 \u0915\u0941\u0902\u091C\u0940 \u0926\u093F\u0916\u093E\u0924\u093E \u0939\u0948 \u091C\u093F\u0938\u0938\u0947 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u0947 AI \u091F\u0942\u0932 BitPull \u0938\u0947 \u092C\u093E\u0924 \u0915\u0930\u0924\u0947 \u0939\u0948\u0902\u0964 \u0907\u0938\u0947 \u0915\u093F\u0938\u0940 \u0938\u0947 \u0938\u093E\u091D\u093E \u0928 \u0915\u0930\u0947\u0902\u0964", "tip.setup.download": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u0947 \u0932\u093F\u090F {name} \u0915\u093E \u0906\u0927\u093F\u0915\u093E\u0930\u093F\u0915 \u0907\u0902\u0938\u094D\u091F\u0949\u0932\u0930 \u0906\u092A\u0915\u0947 Downloads \u092B\u093C\u094B\u0932\u094D\u0921\u0930 \u092E\u0947\u0902 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0915\u0947 \u0916\u094B\u0932\u0924\u093E \u0939\u0948\u0964 \u092A\u0942\u0930\u093E \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0909\u0938\u0915\u0947 \u091A\u0930\u0923\u094B\u0902 \u0915\u093E \u092A\u093E\u0932\u0928 \u0915\u0930\u0947\u0902\u0964", "tip.setup.start": "{name} \u0936\u0941\u0930\u0942 \u0915\u0930\u0924\u093E \u0939\u0948, \u091C\u094B \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948 \u0932\u0947\u0915\u093F\u0928 \u091A\u0932 \u0928\u0939\u0940\u0902 \u0930\u0939\u093E\u0964", "tip.setup.pull": "AI \u092E\u0949\u0921\u0932 {model} ({size} GB) \u0915\u094B Ollama \u092E\u0947\u0902 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0924\u093E \u0939\u0948, \u0924\u093E\u0915\u093F \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0907\u0938\u0947 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u094B \u0926\u0947 \u0938\u0915\u0947\u0964", "tip.setup.open": "\u0906\u092A\u0915\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 {name} \u0915\u093E \u0906\u0927\u093F\u0915\u093E\u0930\u093F\u0915 \u092A\u0947\u091C \u0916\u094B\u0932\u0924\u093E \u0939\u0948\u0964", "tip.setup.recheck": "\u092B\u093F\u0930 \u0938\u0947 \u091C\u093E\u0901\u091A\u0924\u093E \u0939\u0948 \u0915\u093F \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0915\u094D\u092F\u093E \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948 \u0914\u0930 \u0915\u094D\u092F\u093E \u091A\u0932 \u0930\u0939\u093E \u0939\u0948\u0964", "update.title": "\u0910\u092A \u0905\u092A\u0921\u0947\u091F", "update.current": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u093F\u092F\u093E \u0917\u092F\u093E \u0938\u0902\u0938\u094D\u0915\u0930\u0923: {v}", "update.latest": "\u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923: {v}", "update.button": "\u0905\u092A\u0921\u0947\u091F \u091C\u093E\u0901\u091A\u0947\u0902", "update.install": "\u0938\u0902\u0938\u094D\u0915\u0930\u0923 {v} \u0905\u092D\u0940 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", "update.available": "\u0938\u0902\u0938\u094D\u0915\u0930\u0923 {v} \u0909\u092A\u0932\u092C\u094D\u0927 \u0939\u0948\u0964", "update.not_in_app": "\u0905\u092A\u0921\u0947\u091F BitPull \u0910\u092A \u0926\u094D\u0935\u093E\u0930\u093E \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u093F\u090F \u091C\u093E\u0924\u0947 \u0939\u0948\u0902\u0964 \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u092F\u0939 \u0921\u0948\u0936\u092C\u094B\u0930\u094D\u0921 \u0910\u092A \u0938\u0947 \u0916\u094B\u0932\u0947\u0902\u0964", "update.state.requested": "\u0910\u092A \u0938\u0947 \u091C\u093E\u0901\u091A\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u0939\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026", "update.state.checking": "\u0905\u092A\u0921\u0947\u091F \u091C\u093E\u0901\u091A\u0947 \u091C\u093E \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", "update.state.up_to_date": "\u0906\u092A\u0915\u0947 \u092A\u093E\u0938 \u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0939\u0948\u0964", "update.state.installing": "\u0938\u0902\u0938\u094D\u0915\u0930\u0923 {v} \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0914\u0930 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026 \u0910\u092A \u0905\u092A\u0928\u0947-\u0906\u092A \u0930\u0940\u0938\u094D\u091F\u093E\u0930\u094D\u091F \u0939\u094B\u0917\u093E\u0964", "update.state.restarting": "\u0938\u0902\u0938\u094D\u0915\u0930\u0923 {v} \u0915\u0947 \u0938\u093E\u0925 \u0930\u0940\u0938\u094D\u091F\u093E\u0930\u094D\u091F \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", "update.state.error": "\u0905\u092A\u0921\u0947\u091F \u0928\u0939\u0940\u0902 \u0939\u094B \u0938\u0915\u093E: {msg}\u0964 \u092C\u093E\u0926 \u092E\u0947\u0902 \u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\u0964", "tip.update": "\u091C\u093E\u0901\u091A\u0924\u093E \u0939\u0948 \u0915\u093F BitPull \u0915\u093E \u0928\u092F\u093E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0939\u0948 \u092F\u093E \u0928\u0939\u0940\u0902\u0964 \u0905\u0917\u0930 \u0939\u0948, \u0924\u094B \u0909\u0938\u0947 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0924\u093E \u0939\u0948, \u0909\u0938\u0915\u0947 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0915\u0940 \u091C\u093E\u0901\u091A \u0915\u0930\u0924\u093E \u0939\u0948, \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0924\u093E \u0939\u0948 \u0914\u0930 \u0910\u092A \u0915\u094B \u0930\u0940\u0938\u094D\u091F\u093E\u0930\u094D\u091F \u0915\u0930\u0924\u093E \u0939\u0948\u0964 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0915\u0941\u091B \u0938\u0947\u0915\u0902\u0921 \u0915\u0947 \u0932\u093F\u090F \u0930\u0941\u0915\u0924\u093E \u0939\u0948\u0964", "tools.hint": "\u0905\u092A\u0928\u0947 AI \u0938\u0939\u093E\u092F\u0915 \u0915\u094B \u0938\u093E\u091D\u093E \u0915\u094B\u0921 \u0916\u094B\u091C\u0928\u0947 \u0914\u0930 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0915\u0947 \u0913\u092A\u0928 \u092E\u0949\u0921\u0932 \u0914\u0930 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0928\u0947 \u0926\u0947\u0902\u0964 \u0905\u092A\u0928\u093E \u091F\u0942\u0932 \u091A\u0941\u0928\u0947\u0902:", "tools.connect": "\u091C\u094B\u0921\u093C\u0947\u0902", "tools.connected": "\u091C\u0941\u0921\u093C\u093E \u0939\u0941\u0906", "tools.copy": "\u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902", "tools.copied": "\u0915\u0949\u092A\u0940 \u0939\u094B \u0917\u092F\u093E\u0964", "tools.installed": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u0948", "tools.not_found": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E", "tools.done": "\u0939\u094B \u0917\u092F\u093E\u0964 BitPull \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0930\u0928\u093E \u0936\u0941\u0930\u0942 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F {name} \u0915\u094B \u0930\u0940\u0938\u094D\u091F\u093E\u0930\u094D\u091F \u0915\u0930\u0947\u0902\u0964", "tools.manual": "\u0907\u0938\u0947 \u0916\u0941\u0926 \u091C\u094B\u0921\u093C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F:", "tools.config_invalid": '{name} \u0915\u0940 \u0938\u0947\u091F\u093F\u0902\u0917 \u092B\u093C\u093E\u0907\u0932 \u092E\u093E\u0928\u094D\u092F JSON \u0928\u0939\u0940\u0902 \u0939\u0948, \u0907\u0938\u0932\u093F\u090F BitPull \u0928\u0947 \u0909\u0938\u0947 \u0928\u0939\u0940\u0902 \u091B\u0941\u0906\u0964 \u092B\u093C\u093E\u0907\u0932 \u0920\u0940\u0915 \u0915\u0930\u0947\u0902 \u092F\u093E "\u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902" \u0938\u0947 BitPull \u0915\u094B \u0916\u0941\u0926 \u091C\u094B\u0921\u093C\u0947\u0902\u0964', "tip.tools.connect": "BitPull \u0915\u094B \u0905\u092A\u0928\u0947-\u0906\u092A {name} \u0915\u0940 \u0938\u0947\u091F\u093F\u0902\u0917 \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u0924\u093E \u0939\u0948\u0964 \u092A\u093F\u091B\u0932\u0940 \u0938\u0947\u091F\u093F\u0902\u0917 \u0915\u093E \u092C\u0948\u0915\u0905\u092A \u0909\u0928\u094D\u0939\u0940\u0902 \u0915\u0947 \u092A\u093E\u0938 \u0930\u0916\u093E \u091C\u093E\u0924\u093E \u0939\u0948\u0964", "tip.tools.copy": "\u0915\u092E\u093E\u0902\u0921 \u092F\u093E \u0938\u0947\u091F\u093F\u0902\u0917 \u0915\u094B \u0915\u094D\u0932\u093F\u092A\u092C\u094B\u0930\u094D\u0921 \u092A\u0930 \u0915\u0949\u092A\u0940 \u0915\u0930\u0924\u093E \u0939\u0948, \u0924\u093E\u0915\u093F \u0906\u092A BitPull \u0915\u094B \u0916\u0941\u0926 {name} \u092E\u0947\u0902 \u091C\u094B\u0921\u093C \u0938\u0915\u0947\u0902\u0964", "models.title": "\u0938\u093E\u091D\u093E \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F AI \u092E\u0949\u0921\u0932", "models.hint": "\u0939\u0930 \u092A\u094D\u0930\u0915\u093E\u0930 \u0915\u0947 \u0916\u0941\u0932\u0947 \u092E\u0949\u0921\u0932 \u091C\u093F\u0928\u094D\u0939\u0947\u0902 \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0909\u0927\u093E\u0930 \u0926\u0947 \u0938\u0915\u0924\u093E \u0939\u0948\u0964 \u0915\u0947\u0935\u0932 \u0935\u0947 \u092E\u0949\u0921\u0932 \u0926\u093F\u0916\u093E\u090F \u0917\u090F \u0939\u0948\u0902 \u091C\u093F\u0928\u0915\u093E \u0932\u093E\u0907\u0938\u0947\u0902\u0938 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u094B \u0938\u0947\u0935\u093E \u0926\u0947\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u091A\u093E\u0932\u0942 \u0930\u0939\u0928\u0947 \u092A\u0930 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u093F\u090F \u0917\u090F \u092E\u0949\u0921\u0932 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0915\u094B \u0926\u093F\u090F \u091C\u093E\u0924\u0947 \u0939\u0948\u0902\u0964", "models.engine.title": "\u091B\u0935\u093F, \u0906\u0935\u093E\u091C\u093C \u0914\u0930 \u0938\u0902\u0917\u0940\u0924 \u0907\u0902\u091C\u0928", "models.engine.help": "Lemonade (\u0913\u092A\u0928 \u0938\u094B\u0930\u094D\u0938): \u091B\u0935\u093F \u0928\u093F\u0930\u094D\u092E\u093E\u0923, \u0906\u0935\u093E\u091C\u093C \u0938\u0947 \u091F\u0947\u0915\u094D\u0938\u094D\u091F, \u091F\u0947\u0915\u094D\u0938\u094D\u091F \u0938\u0947 \u0906\u0935\u093E\u091C\u093C, \u0938\u0902\u0917\u0940\u0924, \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u0915\u0940 \u0930\u0948\u0902\u0915\u093F\u0902\u0917 \u0914\u0930 \u091B\u0935\u093F \u092C\u0921\u093C\u093E \u0915\u0930\u0928\u093E\u0964 BitPull \u0915\u0947 \u0905\u0902\u0926\u0930 \u0907\u0902\u0938\u094D\u091F\u0949\u0932, \u090F\u0921\u092E\u093F\u0928 \u0905\u0927\u093F\u0915\u093E\u0930 \u0915\u0940 \u091C\u093C\u0930\u0942\u0930\u0924 \u0928\u0939\u0940\u0902\u0964", "models.engine.install": "\u0907\u0902\u091C\u0928 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", "models.engine.repair": "\u0907\u0902\u091C\u0928 \u092B\u093F\u0930 \u0938\u0947 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", "models.engine.unsupported": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902 (Apple silicon, \u092F\u093E Windows/Linux x64 \u091A\u093E\u0939\u093F\u090F)", "models.need_engine": "\u092A\u0939\u0932\u0947 \u0907\u0902\u091C\u0928 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", "models.not_here": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902", "models.shared": "\u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0939\u0941\u0906 \xB7 \u0938\u093E\u091D\u093E", "models.download": "\u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902 ({size} GB)", "models.needs_ram": "\u0932\u0917\u092D\u0917 {ram} GB \u092E\u0947\u092E\u094B\u0930\u0940 \u091A\u093E\u0939\u093F\u090F: \u092F\u0939\u093E\u0901 \u0927\u0940\u092E\u093E \u0939\u094B \u0938\u0915\u0924\u093E \u0939\u0948", "models.recommended": "\u0905\u0928\u0941\u0936\u0902\u0938\u093F\u0924", "models.license": "\u0932\u093E\u0907\u0938\u0947\u0902\u0938", "models.ok.engine": "\u0907\u0902\u091C\u0928 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", "task.chat": "\u091F\u0947\u0915\u094D\u0938\u094D\u091F \u0914\u0930 \u0915\u094B\u0921", "task.vision": "\u091B\u0935\u093F \u2192 \u091F\u0947\u0915\u094D\u0938\u094D\u091F", "task.ocr": "\u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C (OCR)", "task.translate": "\u0905\u0928\u0941\u0935\u093E\u0926", "task.embed": "\u090F\u092E\u094D\u092C\u0947\u0921\u093F\u0902\u0917 (\u0916\u094B\u091C)", "task.rerank": "\u0930\u0940\u0930\u0948\u0902\u0915\u093F\u0902\u0917", "task.image": "\u091B\u0935\u093F \u0928\u093F\u0930\u094D\u092E\u093E\u0923", "task.upscale": "\u091B\u0935\u093F \u092C\u0921\u093C\u093E \u0915\u0930\u0928\u093E", "task.stt": "\u0906\u0935\u093E\u091C\u093C \u0938\u0947 \u091F\u0947\u0915\u094D\u0938\u094D\u091F", "task.tts": "\u091F\u0947\u0915\u094D\u0938\u094D\u091F \u0938\u0947 \u0906\u0935\u093E\u091C\u093C", "task.music": "\u0938\u0902\u0917\u0940\u0924", "limits.title": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u0906\u092A\u0915\u0940 \u0938\u0940\u092E\u093E\u090F\u0901", "limits.hint": "\u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u0915\u093F\u0924\u0928\u093E AI \u0915\u093E\u092E \u0915\u0930\u0924\u093E \u0939\u0948\u0964 \u0915\u094B\u0908 \u0938\u0940\u092E\u093E \u0928 \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0916\u093E\u0932\u0940 \u091B\u094B\u0921\u093C\u0947\u0902\u0964 \u0938\u0940\u092E\u093E \u092A\u0942\u0930\u0940 \u0939\u094B\u0928\u0947 \u092A\u0930 \u0905\u0917\u0932\u0940 \u0905\u0935\u0927\u093F \u0936\u0941\u0930\u0942 \u0939\u094B\u0928\u0947 \u0924\u0915 \u0906\u092A\u0915\u0947 \u092E\u0949\u0921\u0932 \u0928\u0939\u0940\u0902 \u0926\u093F\u090F \u091C\u093E\u0924\u0947\u0964", "limits.save": "\u0938\u0940\u092E\u093E\u090F\u0901 \u0938\u0939\u0947\u091C\u0947\u0902", "limits.requests": "\u0905\u0928\u0941\u0930\u094B\u0927", "limits.tokens": "\u091F\u094B\u0915\u0928", "limits.used": "\u0909\u092A\u092F\u094B\u0917", "limits.day": "\u092A\u094D\u0930\u0924\u093F\u0926\u093F\u0928", "limits.week": "\u092A\u094D\u0930\u0924\u093F \u0938\u092A\u094D\u0924\u093E\u0939", "limits.month": "\u092A\u094D\u0930\u0924\u093F \u092E\u093E\u0939", "limits.none": "\u0915\u094B\u0908 \u0938\u0940\u092E\u093E \u0928\u0939\u0940\u0902", "limits.usage": "{requests} \u0905\u0928\u0941\u0930\u094B\u0927 \xB7 {tokens} \u091F\u094B\u0915\u0928", "limits.saved": "\u0938\u0940\u092E\u093E\u090F\u0901 \u0938\u0939\u0947\u091C\u0940 \u0917\u0908\u0902\u0964", "tip.models.engine": "\u0913\u092A\u0928 \u0938\u094B\u0930\u094D\u0938 Lemonade \u0907\u0902\u091C\u0928 \u0915\u094B BitPull \u092E\u0947\u0902 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0924\u093E \u0939\u0948, \u0924\u093E\u0915\u093F \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u091B\u0935\u093F, \u0906\u0935\u093E\u091C\u093C \u0914\u0930 \u0938\u0902\u0917\u0940\u0924 \u092E\u0949\u0921\u0932 \u0909\u0927\u093E\u0930 \u0926\u0947 \u0938\u0915\u0947\u0964", "tip.models.download": "{model} ({size} GB) \u0915\u094B \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0924\u093E \u0939\u0948 \u0924\u093E\u0915\u093F \u0907\u0938\u0947 \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u094B \u0926\u093F\u092F\u093E \u091C\u093E \u0938\u0915\u0947\u0964 \u0906\u092A \u0907\u0938\u0947 \u092C\u093E\u0926 \u092E\u0947\u0902 \u0939\u091F\u093E \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", "tip.limits.save": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F AI \u0915\u093E\u092E \u0915\u0940 \u0926\u0948\u0928\u093F\u0915, \u0938\u093E\u092A\u094D\u0924\u093E\u0939\u093F\u0915 \u0914\u0930 \u092E\u093E\u0938\u093F\u0915 \u0938\u0940\u092E\u093E\u090F\u0901 \u0938\u0939\u0947\u091C\u0924\u093E \u0939\u0948\u0964", "lend.visible": "\u2713 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0926\u0947\u0916 \u0930\u0939\u093E \u0939\u0948: \u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F {cpus} CPU, {ram} GB \u0909\u092A\u0932\u092C\u094D\u0927\u0964", "lend.invisible": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0905\u092D\u0940 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0928\u0939\u0940\u0902 \u0926\u0947\u0916 \u0930\u0939\u093E: \u090F\u0915 \u092E\u093F\u0928\u091F \u0924\u0915 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u0915\u0930\u0947\u0902; \u0905\u0917\u0930 \u0910\u0938\u093E \u0939\u0940 \u0930\u0939\u0947 \u0924\u094B \u0907\u0902\u091F\u0930\u0928\u0947\u091F \u0915\u0928\u0947\u0915\u094D\u0936\u0928 \u091C\u093E\u0901\u091A\u0947\u0902\u0964", "lend.unusable": "\u26A0 \u0905\u092D\u0940 \u0915\u094B\u0908 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u093E \u0909\u092A\u092F\u094B\u0917 \u0928\u0939\u0940\u0902 \u0915\u0930 \u0938\u0915\u0924\u093E: \u092F\u0939\u093E\u0901 \u0915\u094B\u0908 \u0915\u093E\u092E \u0928\u0939\u0940\u0902 \u091A\u0932 \u0938\u0915\u0924\u093E\u0964 {reason}", "lend.unusable.docker": 'Docker, BitPull \u0915\u0940 \u0906\u0907\u0938\u094B\u0932\u0947\u0936\u0928 \u091C\u093E\u0901\u091A \u092A\u093E\u0938 \u0928\u0939\u0940\u0902 \u0915\u0930\u0924\u093E: "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0938\u0947\u091F \u0905\u092A \u0915\u0930\u0947\u0902" \u0926\u0947\u0916\u0947\u0902\u0964', "lend.unusable.off": '\u0915\u0902\u091F\u0947\u0928\u0930 \u0915\u093E\u092E \u092C\u0902\u0926 \u0939\u0948\u0902 \u0914\u0930 \u0915\u094B\u0908 AI \u092E\u0949\u0921\u0932 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0928\u0939\u0940\u0902 \u0939\u0948: "\u0915\u0902\u091F\u0947\u0928\u0930 \u0915\u093E\u092E" \u091A\u093E\u0932\u0942 \u0915\u0930\u0947\u0902 \u092F\u093E \u0915\u094B\u0908 \u092E\u0949\u0921\u0932 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902\u0964', "lend.docker_login": 'Docker \u0907\u092E\u0947\u091C \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0928\u0939\u0940\u0902 \u0915\u0930 \u092A\u093E \u0930\u0939\u093E \u0915\u094D\u092F\u094B\u0902\u0915\u093F \u0909\u0938\u0915\u093E Docker Hub \u0932\u0949\u0917\u093F\u0928 \u0905\u092C \u092E\u093E\u0928\u094D\u092F \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 Docker Desktop \u092E\u0947\u0902 \u0905\u092A\u0928\u0947 \u0916\u093E\u0924\u0947 (\u090A\u092A\u0930 \u0926\u093E\u0908\u0902 \u0913\u0930) \u2192 Sign out \u092A\u0930 \u0915\u094D\u0932\u093F\u0915 \u0915\u0930\u0947\u0902, \u092B\u093F\u0930 \u0926\u094B\u092C\u093E\u0930\u093E \u0932\u0949\u0917 \u0907\u0928 \u0915\u0930\u0947\u0902 \u092F\u093E \u0932\u0949\u0917 \u0906\u0909\u091F \u0939\u0940 \u0930\u0939\u0947\u0902\u0964 \u092B\u093F\u0930 "\u092B\u093F\u0930 \u0938\u0947 \u091C\u093E\u0901\u091A\u0947\u0902" \u0926\u092C\u093E\u090F\u0901\u0964', "lend.off_hint": '\u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u092C\u0902\u0926 \u0939\u0948: \u0928\u0940\u091A\u0947 "{rules}" \u092E\u0947\u0902 "{enabled}" \u092A\u0930 \u091F\u093F\u0915 \u0915\u0930\u0947\u0902 \u0914\u0930 "{save}" \u0926\u092C\u093E\u090F\u0901\u0964 (\u0930\u094B\u0915\u0947\u0902 / \u092B\u093F\u0930 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902 \u0915\u0947\u0935\u0932 \u092A\u0939\u0932\u0947 \u0938\u0947 \u091A\u093E\u0932\u0942 \u0909\u0927\u093E\u0930 \u0915\u094B \u0930\u094B\u0915\u0924\u093E \u0939\u0948\u0964)', "lend.low_memory": '\u0915\u0947\u0935\u0932 {mb} MB \u092E\u0947\u092E\u094B\u0930\u0940 \u0926\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948: \u092C\u0939\u0941\u0924 \u0915\u092E \u0915\u093E\u092E \u091A\u0932 \u092A\u093E\u090F\u0901\u0917\u0947\u0964 "{rules}" \u092E\u0947\u0902 "{memory}" \u0915\u094B \u0909\u0926\u093E\u0939\u0930\u0923 \u0915\u0947 \u0932\u093F\u090F 4096 (= 4 GB) \u0915\u0930\u0947\u0902 \u0914\u0930 "{save}" \u0926\u092C\u093E\u090F\u0901\u0964', "rules.awake": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0924\u0947 \u0938\u092E\u092F \u091C\u093E\u0917\u0924\u0947 \u0930\u0939\u0947\u0902", "rules.awake.help": "\u0915\u093F\u0938\u0940 \u0915\u0947 \u0932\u093F\u090F \u0915\u093E\u092E \u091A\u0932\u093E\u0924\u0947 \u0938\u092E\u092F \u092F\u0939 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0938\u094D\u0932\u0940\u092A \u092E\u0947\u0902 \u0928\u0939\u0940\u0902 \u091C\u093E\u090F\u0917\u093E (\u0938\u094D\u0915\u094D\u0930\u0940\u0928 \u092B\u093F\u0930 \u092D\u0940 \u092C\u0902\u0926 \u0939\u094B \u0938\u0915\u0924\u0940 \u0939\u0948)\u0964 \u092C\u093E\u0926 \u092E\u0947\u0902 \u0938\u093E\u092E\u093E\u0928\u094D\u092F \u0930\u0942\u092A \u0938\u0947 \u0938\u094D\u0932\u0940\u092A \u0939\u094B\u0917\u093E\u0964 \u0915\u093E\u092E \u092C\u0940\u091A \u092E\u0947\u0902 \u0928\u0939\u0940\u0902 \u0915\u091F\u0947\u0902\u0917\u0947\u0964", "ask.wait": "\u0907\u0924\u0928\u0947 \u0924\u0915 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E (\u092E\u093F\u0928\u091F)", "ask.wait.save": "\u0938\u0939\u0947\u091C\u0947\u0902", "ask.wait.saved": "\u0909\u0924\u094D\u0924\u0930\u094B\u0902 \u0915\u0940 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E {n} \u092E\u093F\u0928\u091F \u0924\u0915 \u0939\u094B\u0917\u0940\u0964", "ask.wait.range": "1 \u0938\u0947 120 \u0915\u0947 \u092C\u0940\u091A \u092E\u093F\u0928\u091F \u0926\u0930\u094D\u091C \u0915\u0930\u0947\u0902\u0964", "tip.wait": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0915\u0947 AI \u092E\u0949\u0921\u0932\u094B\u0902 \u0915\u0947 \u0909\u0924\u094D\u0924\u0930 \u0915\u0940 \u0915\u093F\u0924\u0928\u0940 \u0926\u0947\u0930 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u0915\u0930\u0947\u0902\u0964 \u0915\u093F\u0938\u0940 \u0915\u0947 \u092A\u094D\u0930\u094B\u0938\u0947\u0938\u0930 \u092A\u0930 \u091A\u0932\u0928\u0947 \u0935\u093E\u0932\u0947 \u092E\u0949\u0921\u0932 \u092E\u093F\u0928\u091F \u0932\u0947 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964 \u0906\u092A\u0915\u093E AI \u092D\u0940 \u0907\u0938\u0947 \u092C\u0926\u0932 \u0938\u0915\u0924\u093E \u0939\u0948\u0964", "plan.month": "/\u092E\u093E\u0939", "plan.free.1": "\u0938\u093E\u091D\u093E \u091C\u094D\u091E\u093E\u0928", "plan.free.2": "\u0909\u0927\u093E\u0930 \u0926\u0947\u0915\u0930 \u0915\u092E\u093E\u090F \u0917\u090F \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0938\u0947 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u093F\u0902\u0917", "plan.free.3": "\u092C\u0948\u0932\u0947\u0902\u0938 \u221220 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0924\u0915", "plan.base.1": "\u0939\u0930 \u092E\u0939\u0940\u0928\u0947 80 \u0915\u094D\u0930\u0947\u0921\u093F\u091F", "plan.base.2": "\u0915\u0902\u091C\u093C\u094D\u092F\u0942\u092E\u0930 GPU \u0914\u0930 \u092E\u0927\u094D\u092F\u092E \u092E\u0949\u0921\u0932", "plan.base.3": "\u092C\u0948\u0932\u0947\u0902\u0938 \u2212100 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0924\u0915", "plan.pro.1": "\u0939\u0930 \u092E\u0939\u0940\u0928\u0947 200 \u0915\u094D\u0930\u0947\u0921\u093F\u091F", "plan.pro.2": "\u0938\u0930\u094D\u0935\u094B\u091A\u094D\u091A \u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E, \u0938\u092D\u0940 GPU \u0914\u0930 \u092C\u0921\u093C\u0947 \u092E\u0949\u0921\u0932", "plan.pro.3": "\u092C\u0948\u0932\u0947\u0902\u0938 \u2212500 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0924\u0915", "plans.current": "\u0906\u092A\u0915\u093E \u092A\u094D\u0932\u093E\u0928", "plans.choose": "{plan} \u091A\u0941\u0928\u0947\u0902", "plans.renew": "\u0939\u0930 \u092E\u0939\u0940\u0928\u0947 \u0928\u0935\u0940\u0928\u0940\u0915\u0943\u0924 \u0939\u094B\u0924\u093E \u0939\u0948; \u0915\u092D\u0940 \u092D\u0940 \u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902, \u092A\u094D\u0932\u093E\u0928 \u092D\u0941\u0917\u0924\u093E\u0928 \u0915\u0940 \u0917\u0908 \u0905\u0935\u0927\u093F \u0915\u0947 \u0905\u0902\u0924 \u0924\u0915 \u0938\u0915\u094D\u0930\u093F\u092F \u0930\u0939\u0924\u093E \u0939\u0948", "plans.recharge.title": "\u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0930\u093F\u091A\u093E\u0930\u094D\u091C", "plans.recharge.1": "\u0906\u092A\u0915\u0947 \u092C\u0948\u0932\u0947\u0902\u0938 \u092E\u0947\u0902 {n} \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u091C\u094B\u0921\u093C\u0947 \u091C\u093E\u0924\u0947 \u0939\u0948\u0902", "plans.recharge.2": "\u090F\u0915 \u092C\u093E\u0930 \u0915\u093E \u092D\u0941\u0917\u0924\u093E\u0928, \u0915\u094B\u0908 \u0938\u0926\u0938\u094D\u092F\u0924\u093E \u0928\u0939\u0940\u0902", "plans.recharge.3": "\u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0915\u0940 \u0938\u092E\u092F-\u0938\u0940\u092E\u093E \u0938\u092E\u093E\u092A\u094D\u0924 \u0928\u0939\u0940\u0902 \u0939\u094B\u0924\u0940", "plans.summary": "\u0906\u092A \u0916\u0930\u0940\u0926 \u0930\u0939\u0947 \u0939\u0948\u0902", "plans.pay": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0930 \u091C\u093E\u090F\u0901", "plans.cancel": "\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902", "plans.off": "\u092D\u0941\u0917\u0924\u093E\u0928 \u0905\u092D\u0940 \u0938\u0915\u094D\u0930\u093F\u092F \u0928\u0939\u0940\u0902 \u0939\u0948\u0902\u0964", "account.line": "\u0916\u093E\u0924\u093E: {email}", "account.via.email": "\u0908\u092E\u0947\u0932 \u0914\u0930 \u092A\u093E\u0938\u0935\u0930\u094D\u0921", "logout.button": "\u0932\u0949\u0917 \u0906\u0909\u091F \u0915\u0930\u0947\u0902", "logout.confirm": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 {email} \u0938\u0947 \u0932\u0949\u0917 \u0906\u0909\u091F \u0915\u0930\u0947\u0902? \u0926\u094B\u092C\u093E\u0930\u093E \u0932\u0949\u0917 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0924\u0915 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0930\u0941\u0915 \u091C\u093E\u090F\u0917\u093E\u0964 \u092B\u093F\u0930 \u0906\u092A \u0915\u093F\u0938\u0940 \u0926\u0942\u0938\u0930\u0947 \u0916\u093E\u0924\u0947 \u0938\u0947 \u0932\u0949\u0917 \u0907\u0928 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902; \u0938\u094D\u0935\u093E\u0917\u0924 \u0915\u094D\u0930\u0947\u0921\u093F\u091F \u0939\u0930 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0915\u0947\u0935\u0932 \u090F\u0915 \u092C\u093E\u0930 \u092E\u093F\u0932\u0924\u0947 \u0939\u0948\u0902\u0964", "logout.yes": "\u0932\u0949\u0917 \u0906\u0909\u091F", "logout.done": "\u0906\u092A\u0928\u0947 \u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0932\u0949\u0917 \u0906\u0909\u091F \u0915\u0930 \u0926\u093F\u092F\u093E \u0939\u0948\u0964 \u0909\u0938\u0940 \u092F\u093E \u0926\u0942\u0938\u0930\u0947 \u0916\u093E\u0924\u0947 \u0938\u0947 \u092B\u093F\u0930 \u0932\u0949\u0917 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F BitPull \u0910\u092A \u0916\u094B\u0932\u0947\u0902 \u092F\u093E \u091A\u0932\u093E\u090F\u0901:", "tip.logout": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u0915\u094B \u0916\u093E\u0924\u0947 \u0938\u0947 \u0932\u0949\u0917 \u0906\u0909\u091F \u0915\u0930\u0924\u093E \u0939\u0948, \u091C\u0948\u0938\u0947 \u0926\u0942\u0938\u0930\u0947 \u0916\u093E\u0924\u0947 \u0938\u0947 \u0932\u0949\u0917 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F\u0964 \u092A\u0939\u0932\u0947 \u092A\u0941\u0937\u094D\u091F\u093F \u092E\u093E\u0901\u0917\u0924\u093E \u0939\u0948\u0964", "tip.logout.yes": "\u0907\u0938 \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930 \u092A\u0930 \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u0915\u0930\u0924\u093E \u0939\u0948\u0964 \u0926\u094B\u092C\u093E\u0930\u093E \u0932\u0949\u0917 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0924\u0915 \u0909\u0927\u093E\u0930 \u0926\u0947\u0928\u093E \u0930\u0941\u0915 \u091C\u093E\u090F\u0917\u093E\u0964", "tip.logout.no": "\u0932\u0949\u0917 \u0907\u0928 \u0930\u0939\u0947\u0902\u0964", "tip.plans.choose": "\u092D\u0941\u0917\u0924\u093E\u0928 \u0938\u0947 \u092A\u0939\u0932\u0947 \u092A\u094D\u0932\u093E\u0928 \u0915\u093E \u0928\u093E\u092E, \u0915\u0940\u092E\u0924 \u0914\u0930 \u0909\u0938\u092E\u0947\u0902 \u0915\u094D\u092F\u093E \u0936\u093E\u092E\u093F\u0932 \u0939\u0948, \u0926\u093F\u0916\u093E\u0924\u093E \u0939\u0948\u0964", "tip.plans.pay": "\u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 Stripe \u0915\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u092D\u0941\u0917\u0924\u093E\u0928 \u092A\u0947\u091C \u0916\u094B\u0932\u0924\u093E \u0939\u0948\u0964", "tip.plans.cancel": "\u092C\u093F\u0928\u093E \u0916\u0930\u0940\u0926\u0947 \u0938\u093E\u0930\u093E\u0902\u0936 \u092C\u0902\u0926 \u0915\u0930\u0924\u093E \u0939\u0948\u0964" }, id: { "lang.name": "Bahasa Indonesia", "app.title": "BitPull", "locked.text": "Buka dasbor dari aplikasi BitPull: tautannya berisi kunci akses.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Alamat langsung", "pill.relay_on": "Relay terhubung", "pill.relay_off": "Relay tidak terhubung", "pill.cached": "{n} salinan tersimpan", "net.title": "Jaringan langsung", "net.online": "{n} komputer online", "net.lending": "{n} sedang meminjamkan", "net.cpu": "{n} core CPU", "net.ram": "{n} GB RAM", "net.gpu": "{n} GPU", "net.models": "{n} model AI", "net.jobs": "{n} tugas berjalan", "credits.title": "Saldo kredit", "credits.plan": "Paket {plan} \xB7 bisa turun hingga {n}", "plan.free": "Gratis", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "Isi ulang \u20AC5", "buy.ok": "Halaman pembayaran dibuka di browser Anda.", "lend.title": "Pinjamkan komputer ini", "lend.hint": "Tugas berjalan dengan enkripsi end-to-end di sandbox terisolasi, tanpa akses ke file Anda. Anda mendapat kredit.", "lend.state.off": "Mati", "lend.state.waiting": "Menunggu", "lend.state.working": "Bekerja", "lend.reason.lending_off": "Peminjaman mati", "lend.reason.paused": "Dijeda", "lend.reason.outside_hours": "Di luar jam Anda", "lend.reason.on_battery": "Memakai baterai", "lend.reason.computer_in_use": "Anda sedang memakai komputer", "lend.reason.no_jobs": "Tidak ada tugas di antrean", "lend.running": "Menjalankan tugas {kind} sejak {time}", "lend.detail": "{reason} \xB7 {n} tugas selesai \xB7 menawarkan {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", sandbox {name}", "lend.detail.models": ", {n} model", "lend.pause": "Jeda", "lend.resume": "Lanjutkan", "lend.paused_ok": "Peminjaman dijeda. Tugas yang berjalan dialihkan ke komputer lain.", "lend.resumed_ok": "Peminjaman dilanjutkan.", "setup.title": "Siapkan komputer ini", "setup.hint": "Yang dibutuhkan komputer ini untuk meminjamkan. Untuk memakai jaringan tidak perlu apa-apa lagi. Installer berasal dari situs resmi; sistem akan meminta konfirmasi Anda.", "setup.checking": "Memeriksa\u2026", "setup.docker.help": "Menjalankan tugas orang lain di sandbox terisolasi. Diperlukan untuk tugas kontainer. Gratis untuk penggunaan pribadi dan usaha kecil.", "setup.docker.download": "Unduh Docker", "setup.docker.start": "Jalankan Docker", "setup.apple.title": "Apple Container (opsional)", "setup.apple.help": "Isolasi lebih kuat: setiap tugas di mesin virtualnya sendiri. Opsional; Docker sudah cukup untuk mulai.", "setup.apple.get": "Dapatkan Apple Container", "setup.ollama.help": "Menjalankan model AI terbuka (Qwen, Llama, Mistral\u2026). Diperlukan untuk meminjamkan model AI.", "setup.ollama.download": "Unduh Ollama", "setup.ollama.start": "Jalankan Ollama", "setup.model.title": "Model AI", "setup.model.help": "Model yang ditawarkan komputer ini ke orang lain. Disarankan untuk memori {ram} GB: {model}.", "setup.model.download": "Unduh {model} ({size} GB)", "setup.model.none": "belum ada", "setup.model.need_ollama": "Pasang dan jalankan Ollama dulu", "setup.nvidia.title": "Driver GPU NVIDIA (opsional)", "setup.nvidia.help": "Hanya jika komputer ini punya kartu grafis NVIDIA yang ingin Anda pinjamkan.", "setup.nvidia.get": "Dapatkan driver NVIDIA", "setup.status.running": "terpasang dan berjalan", "setup.status.installed": "terpasang", "setup.status.stopped": "terpasang, tidak berjalan", "setup.status.missing": "belum terpasang", "setup.status.found": "ditemukan", "setup.status.not_found": "tidak ditemukan", "setup.terminal": "Jalankan di terminal:", "setup.done": "Selesai", "setup.opened": "Selesai: {file} dibuka, ikuti langkahnya", "setup.recheck": "Periksa lagi", "setup.ok.download": "Unduhan dimulai. Installer terbuka sendiri setelah selesai: ikuti langkahnya.", "setup.ok.start": "Menjalankan\u2026 bisa memakan waktu hingga satu menit. Daftar ini diperbarui sendiri.", "setup.ok.pull": "Unduhan model dimulai. Progres ditampilkan di atas.", "setup.ok.page": "Halaman dibuka di browser Anda.", "setup.ok.recheck": "Sudah diperiksa lagi.", "rules.title": "Aturan peminjaman", "rules.enabled": "Peminjaman aktif", "rules.enabled.help": "Sakelar utama. Saat mati, komputer ini tidak pernah menjalankan tugas orang lain. Anda tetap bisa memakai jaringan.", "rules.cpus": "CPU maks.", "rules.cpus.help": "Berapa core prosesor yang boleh dipakai satu tugas. Contoh: di komputer 8 core, nilai 2 menyisakan 6 core untuk Anda.", "rules.memory": "Memori maks. (MB)", "rules.memory.help": "RAM yang boleh dipakai satu tugas, dalam megabyte (1024 MB = 1 GB). BitPull tidak pernah menawarkan lebih dari separuh memori komputer ini.", "rules.gpu": "GPU", "rules.gpu.none": "Tidak ada", "rules.gpu.consumer": "Konsumen (8\u201312 GB)", "rules.gpu.high": "Kelas atas (16\u201324 GB)", "rules.gpu.datacenter": "Pusat data (40 GB+)", "rules.gpu.help": "Kartu grafis yang Anda pinjamkan, menurut memori videonya. Biarkan Tidak ada jika tidak punya GPU khusus atau tidak ingin meminjamkannya. GPU menghasilkan kredit paling banyak.", "rules.containers": "Tugas kontainer", "rules.containers.help": "Menjalankan build, tes, dan skrip orang lain di sandbox tanpa internet dan tanpa akses ke file Anda. Perlu Docker (atau Apple Container): lihat \u201CSiapkan komputer ini\u201D.", "rules.models": "Model terbuka (Ollama)", "rules.models.help": "Menjawab permintaan AI dengan model terbuka yang terpasang di Ollama pada komputer ini. Perlu Ollama dan minimal satu model.", "rules.idle": "Hanya setelah menit menganggur", "rules.idle.help": "Pinjamkan hanya jika Anda tidak menyentuh keyboard atau mouse selama sekian menit. 0 = tetap meminjamkan saat Anda bekerja.", "rules.ac": "Hanya saat dicas", "rules.ac.help": "Di laptop, berhenti meminjamkan saat memakai baterai, agar baterai tidak terkuras.", "rules.hours": "Hanya dari / sampai jam (kosong = selalu)", "rules.hours.help": "Pinjamkan hanya dalam rentang waktu ini, format 24 jam. Contoh: 22 dan 8 = dari pukul 22.00 sampai 08.00. Kosongkan keduanya untuk meminjamkan kapan saja.", "rules.cache": "Salinan repo orang lain", "rules.cache.help": "Berapa repo publik pengguna lain yang disalin di komputer ini, agar tetap tersedia saat pemiliknya offline. Memakai sedikit ruang disk dan menghasilkan kredit. 0 = tidak ada.", "rules.save": "Simpan aturan", "rules.saved": "Aturan disimpan. Berlaku dalam beberapa detik.", "rules.hours_both": "Isi kedua jam, atau kosongkan keduanya untuk meminjamkan kapan saja.", "folders.title": "Folder yang diizinkan", "folders.hint": "BitPull hanya membaca folder ini. Untuk memublikasikan folder, diperlukan bitpull.json yang lengkap.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Izinkan", "folders.none": "Tidak ada folder yang diizinkan.", "folders.draft": "Draf", "folders.publish": "Publikasikan", "folders.remove": "Hapus", "folders.need_path": "Tulis dulu path lengkap folder, mis. /Users/you/projects/my-library.", "folders.added": "Folder diizinkan.", "folders.removed": "Folder dihapus. BitPull tidak lagi membacanya.", "folders.drafted": "Draf siap: {n} file ditemukan. Biarkan AI Anda mengisi ringkasan dan deskripsi (alat prepare_publish), lalu tekan Publikasikan.", "folders.published": '"{name}" dipublikasikan dengan {n} file.', "folders.secrets_in": "Ditemukan di: {where}", "folders.line": "{file} baris {line}", "repos.title": "Repo Anda yang dipublikasikan", "repos.hint": "Diperbarui sendiri saat Anda mengubah file (setiap 5 menit).", "repos.none": "Belum ada repo yang dipublikasikan.", "repos.withdraw": "Tarik", "repos.withdrawn": "Repo ditarik dari jaringan.", "ask.title": "Model terbuka di jaringan", "ask.offers": "Komputer ini menawarkan: {models}.", "ask.offers_none": "tidak ada model (pasang Ollama untuk menawarkan)", "ask.placeholder": "Tanya model terbuka di jaringan\u2026", "ask.small": "Kecil", "ask.medium": "Sedang", "ask.large": "Besar", "ask.button": "Tanya", "ask.empty": "Tulis pertanyaan dulu.", "ask.waiting": "Mencari komputer dengan model tersebut\u2026 bisa memakan waktu hingga satu menit.", "ask.credits": "{n} kredit", "tools.title": "Hubungkan alat Anda", "tools.mcp": "Untuk Claude Code dan klien MCP, jalankan di terminal:", "tools.openai": "Untuk alat yang kompatibel dengan OpenAI: URL dasar", "tools.key": "Kunci API", "tools.show": "Tampilkan", "jobs.title": "Tugas terbaru Anda", "jobs.none": "Tidak ada tugas.", "jobs.model": "Model", "jobs.container": "Kontainer", "jobs.status.queued": "Antre", "jobs.status.running": "Berjalan", "jobs.status.done": "Selesai", "jobs.status.failed": "Gagal", "jobs.status.canceled": "Dibatalkan", "jobs.cost": "{n} kredit", working: "Memproses\u2026", "err.agent_down": "BitPull di komputer ini tidak merespons. Ia akan memulai ulang sendiri dalam 30 detik: coba lagi sebentar lagi.", "err.server": "Tidak dapat menjangkau server BitPull. Periksa koneksi internet Anda dan coba lagi.", "err.session": "Sesi dasbor ini kedaluwarsa. Buka lagi dari aplikasi BitPull.", "err.billing": "Pembayaran belum aktif.", "err.no_folder": "Folder ini tidak ada di komputer ini. Periksa path-nya.", "err.not_folder": "Path ini adalah file, bukan folder.", "err.credits": "Kredit tidak cukup.", "err.device": "Komputer ini belum terhubung. Biarkan aplikasi BitPull terbuka dan coba lagi dalam satu menit.", "err.no_model": "Saat ini tidak ada komputer di jaringan yang menawarkan model AI. Coba lagi nanti.", "err.invalid": "Beberapa nilai tidak valid. Periksa kolom dan coba lagi.", "tip.lang": "Bahasa aplikasi. Pilihan Anda disimpan di komputer ini.", "tip.buy.base": "Membuka halaman pembayaran aman untuk paket Base: \u20AC4.50 per bulan dengan 80 kredit setiap bulan. Anda bisa membatalkan kapan saja.", "tip.buy.pro": "Membuka halaman pembayaran aman untuk paket Pro: \u20AC9.90 per bulan dengan 200 kredit setiap bulan, prioritas tertinggi, dan semua GPU. Anda bisa membatalkan kapan saja.", "tip.buy.recharge": "Membuka halaman pembayaran aman untuk membeli 80 kredit sekali saja, seharga \u20AC5. Kreditnya tidak pernah kedaluwarsa.", "tip.pause": "Menghentikan peminjaman sekarang juga. Tugas yang sedang berjalan saat ini dialihkan ke komputer lain. Tekan lagi untuk melanjutkan.", "tip.resume": "Memulai peminjaman lagi, sesuai aturan peminjaman Anda.", "tip.rules.save": "Menyimpan aturan peminjaman di atas. Aturan berlaku dalam beberapa detik; tidak ada yang berubah sampai Anda menekan tombol ini.", "tip.folder.add": "Mengizinkan BitPull membaca folder yang ditulis di sebelah kiri. File di luar folder yang diizinkan tidak pernah dibaca atau dibagikan.", "tip.folder.draft": "Membuat bitpull.json di folder: daftar file-nya dengan deskripsi kosong untuk dilengkapi AI Anda. Belum ada yang dipublikasikan.", "tip.folder.publish": "Membagikan folder ini di jaringan sebagai repo publik, ditandatangani oleh komputer ini. Publikasi diblokir jika ditemukan kunci atau kata sandi di dalam file.", "tip.folder.remove": "BitPull berhenti membaca folder ini. Repo yang sudah dipublikasikan dari folder ini tetap online sampai Anda menariknya.", "tip.repo.withdraw": "Menghapus repo ini dari jaringan. Pengguna lain tidak bisa lagi menemukan atau mengunduhnya. File Anda tetap ada di komputer Anda.", "tip.ask": "Mengirim pertanyaan Anda, dengan enkripsi end-to-end, ke komputer di jaringan yang menjalankan model AI terbuka. Memakai beberapa kredit.", "tip.tier": "Ukuran model: yang kecil cepat dan murah, yang besar lebih pintar dan memakai lebih banyak kredit.", "tip.show_key": "Menampilkan kunci yang dipakai alat AI di komputer ini untuk berkomunikasi dengan BitPull. Jangan bagikan kunci ini.", "tip.setup.download": "Mengunduh installer resmi {name} untuk komputer ini ke folder Downloads Anda lalu membukanya. Ikuti langkah-langkahnya untuk menyelesaikan.", "tip.setup.start": "Menjalankan {name}, yang sudah terpasang di komputer ini tetapi belum berjalan.", "tip.setup.pull": "Mengunduh model AI {model} ({size} GB) ke Ollama, agar komputer ini bisa menawarkannya kepada orang lain.", "tip.setup.open": "Membuka halaman resmi {name} di browser Anda.", "tip.setup.recheck": "Memeriksa lagi apa yang terpasang dan berjalan di komputer ini.", "update.title": "Pembaruan aplikasi", "update.current": "Versi terpasang: {v}", "update.latest": "Versi terbaru: {v}", "update.button": "Periksa pembaruan", "update.install": "Pasang versi {v} sekarang", "update.available": "Versi {v} tersedia.", "update.not_in_app": "Pembaruan dipasang oleh aplikasi BitPull. Buka dasbor ini dari aplikasi untuk memperbarui.", "update.state.requested": "Meminta aplikasi untuk memeriksa\u2026", "update.state.checking": "Memeriksa pembaruan\u2026", "update.state.up_to_date": "Anda sudah memakai versi terbaru.", "update.state.installing": "Mengunduh dan memasang versi {v}\u2026 aplikasi akan memulai ulang sendiri.", "update.state.restarting": "Memulai ulang dengan versi {v}\u2026", "update.state.error": "Pembaruan gagal: {msg}. Coba lagi nanti.", "tip.update": "Memeriksa apakah ada versi BitPull yang lebih baru. Jika ada, mengunduhnya, memverifikasi tanda tangannya, memasangnya, dan memulai ulang aplikasi. Peminjaman berhenti sejenak selama beberapa detik.", "tools.hint": "Biarkan asisten AI Anda mencari kode bersama dan memakai model terbuka serta komputer di jaringan. Pilih alat Anda:", "tools.connect": "Hubungkan", "tools.connected": "Terhubung", "tools.copy": "Salin", "tools.copied": "Disalin.", "tools.installed": "Terpasang", "tools.not_found": "Tidak ditemukan di komputer ini", "tools.done": "Selesai. Mulai ulang {name} untuk mulai memakai BitPull.", "tools.manual": "Untuk menambahkannya secara manual:", "tools.config_invalid": "File pengaturan {name} bukan JSON yang valid, jadi BitPull tidak mengubahnya. Perbaiki file tersebut atau tambahkan BitPull secara manual dengan Salin.", "tip.tools.connect": "Menambahkan BitPull ke pengaturan {name} secara otomatis. Cadangan pengaturan sebelumnya disimpan di sebelahnya.", "tip.tools.copy": "Menyalin perintah atau pengaturan ke papan klip, agar Anda bisa menambahkan BitPull ke {name} sendiri.", "models.title": "Model AI untuk dibagikan", "models.hint": "Model terbuka dari segala jenis yang dapat dipinjamkan komputer ini. Hanya model yang lisensinya mengizinkan melayani orang lain yang ditampilkan. Model yang diunduh ditawarkan ke jaringan selama peminjaman aktif.", "models.engine.title": "Mesin gambar, suara, dan musik", "models.engine.help": "Lemonade (sumber terbuka): membuat gambar, suara ke teks, teks ke suara, musik, pemeringkatan ulang dokumen, dan memperbesar gambar. Dipasang di dalam BitPull, tanpa hak administrator.", "models.engine.install": "Pasang mesin", "models.engine.repair": "Pasang ulang mesin", "models.engine.unsupported": "Tidak tersedia di komputer ini (perlu Apple silicon, atau Windows/Linux x64)", "models.need_engine": "Pasang mesin terlebih dahulu", "models.not_here": "Tidak tersedia di komputer ini", "models.shared": "Terunduh \xB7 dibagikan", "models.download": "Unduh ({size} GB)", "models.needs_ram": "Perlu sekitar {ram} GB memori: mungkin lambat di sini", "models.recommended": "Disarankan", "models.license": "Lisensi", "models.ok.engine": "Memasang mesin\u2026", "task.chat": "Teks dan kode", "task.vision": "Gambar \u2192 teks", "task.ocr": "Dokumen (OCR)", "task.translate": "Terjemahan", "task.embed": "Embedding (pencarian)", "task.rerank": "Pemeringkatan ulang", "task.image": "Pembuatan gambar", "task.upscale": "Perbesar gambar", "task.stt": "Suara ke teks", "task.tts": "Teks ke suara", "task.music": "Musik", "limits.title": "Batas Anda untuk orang lain", "limits.hint": "Seberapa banyak pekerjaan AI yang dilakukan komputer ini untuk orang lain. Kosongkan untuk tanpa batas. Saat batas tercapai, model Anda tidak ditawarkan lagi hingga periode berikutnya.", "limits.save": "Simpan batas", "limits.requests": "Permintaan", "limits.tokens": "Token", "limits.used": "Terpakai", "limits.day": "Per hari", "limits.week": "Per minggu", "limits.month": "Per bulan", "limits.none": "tanpa batas", "limits.usage": "{requests} permintaan \xB7 {tokens} token", "limits.saved": "Batas disimpan.", "tip.models.engine": "Mengunduh mesin sumber terbuka Lemonade ke dalam BitPull, agar komputer ini dapat meminjamkan model gambar, suara, dan musik.", "tip.models.download": "Mengunduh {model} ({size} GB) ke komputer ini agar dapat ditawarkan ke orang lain. Anda bisa menghapusnya nanti.", "tip.limits.save": "Menyimpan batas harian, mingguan, dan bulanan untuk pekerjaan AI bagi orang lain.", "lend.visible": "\u2713 Jaringan melihat komputer ini: {cpus} CPU, {ram} GB tersedia untuk orang lain.", "lend.invisible": "Jaringan belum melihat peminjaman: tunggu hingga satu menit; jika tetap begini, periksa koneksi internet.", "lend.unusable": "\u26A0 Belum ada yang bisa memakai komputer ini: tidak ada pekerjaan yang bisa berjalan di sini. {reason}", "lend.unusable.docker": 'Docker tidak lolos pemeriksaan isolasi BitPull: lihat "Atur komputer ini".', "lend.unusable.off": 'Pekerjaan kontainer mati dan tidak ada model AI terpasang: aktifkan "Pekerjaan kontainer" atau unduh model.', "lend.docker_login": "Docker tidak dapat mengunduh image karena login Docker Hub-nya sudah tidak berlaku. Di Docker Desktop klik akun Anda (kanan atas) \u2192 Sign out, lalu masuk lagi atau tetap keluar. Lalu tekan Periksa lagi.", "lend.off_hint": 'Peminjaman mati: centang "{enabled}" di "{rules}" di bawah lalu tekan "{save}". (Jeda / Lanjutkan hanya menjeda peminjaman yang sudah aktif.)', "lend.low_memory": 'Hanya {mb} MB memori yang ditawarkan: hanya sedikit pekerjaan yang muat. Di "{rules}" atur "{memory}" misalnya 4096 (= 4 GB) lalu tekan "{save}".', "rules.awake": "Tetap menyala saat meminjamkan", "rules.awake.help": "Saat menjalankan pekerjaan untuk orang lain, komputer ini tidak tidur (layar tetap bisa mati). Setelahnya tidur seperti biasa. Mencegah pekerjaan terputus.", "ask.wait": "Tunggu hingga (menit)", "ask.wait.save": "Simpan", "ask.wait.saved": "Jawaban akan ditunggu hingga {n} menit.", "ask.wait.range": "Masukkan jumlah menit antara 1 dan 120.", "tip.wait": "Berapa lama menunggu jawaban model AI jaringan. Model di prosesor orang lain bisa butuh beberapa menit. AI Anda juga bisa mengubahnya.", "plan.month": "/bulan", "plan.free.1": "Pengetahuan bersama", "plan.free.2": "Komputasi dengan kredit yang Anda peroleh dari meminjamkan", "plan.free.3": "Saldo hingga \u221220 kredit", "plan.base.1": "80 kredit setiap bulan", "plan.base.2": "GPU konsumen dan model menengah", "plan.base.3": "Saldo hingga \u2212100 kredit", "plan.pro.1": "200 kredit setiap bulan", "plan.pro.2": "Prioritas tertinggi, semua GPU dan model besar", "plan.pro.3": "Saldo hingga \u2212500 kredit", "plans.current": "Paketmu", "plans.choose": "Pilih {plan}", "plans.renew": "Diperpanjang setiap bulan; bisa dibatalkan kapan saja, paket tetap aktif sampai akhir periode yang dibayar", "plans.recharge.title": "Isi ulang kredit", "plans.recharge.1": "{n} kredit ditambahkan ke saldomu", "plans.recharge.2": "Sekali bayar, tanpa langganan", "plans.recharge.3": "Kredit tidak kedaluwarsa", "plans.summary": "Kamu membeli", "plans.pay": "Lanjut ke pembayaran aman", "plans.cancel": "Batal", "plans.off": "Pembayaran belum aktif.", "account.line": "Akun: {email}", "account.via.email": "email dan kata sandi", "logout.button": "Keluar dari akun", "logout.confirm": "Keluar dari {email} di komputer ini? Peminjaman berhenti sampai kamu masuk lagi. Setelah itu kamu bisa masuk dengan akun lain; kredit sambutan hanya diberikan sekali per komputer.", "logout.yes": "Keluar", "logout.done": "Kamu sudah keluar di komputer ini. Untuk masuk lagi, dengan akun yang sama atau lain, buka aplikasi BitPull atau jalankan:", "tip.logout": "Mengeluarkan komputer ini dari akun, misalnya untuk masuk dengan akun lain. Meminta konfirmasi dulu.", "tip.logout.yes": "Mengakhiri sesi di komputer ini. Peminjaman berhenti sampai kamu masuk lagi.", "tip.logout.no": "Tetap masuk.", "tip.plans.choose": "Menampilkan nama, harga, dan isi paket sebelum kamu membayar.", "tip.plans.pay": "Membuka halaman pembayaran aman Stripe di browser.", "tip.plans.cancel": "Menutup ringkasan tanpa membeli." }, it: { "lang.name": "Italiano", "app.title": "BitPull", "locked.text": "Apri la dashboard dall'app BitPull: il suo link contiene la chiave di accesso.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Indirizzo diretto", "pill.relay_on": "Relay connesso", "pill.relay_off": "Relay non connesso", "pill.cached": "{n} copie in cache", "net.title": "Rete in tempo reale", "net.online": "{n} computer online", "net.lending": "{n} in prestito ora", "net.cpu": "{n} core CPU", "net.ram": "{n} GB di RAM", "net.gpu": "{n} GPU", "net.models": "{n} modelli di IA", "net.jobs": "{n} lavori in corso", "credits.title": "Saldo crediti", "credits.plan": "Piano {plan} \xB7 puoi scendere fino a {n}", "plan.free": "Free", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base 4,50 \u20AC", "buy.pro": "Pro 9,90 \u20AC", "buy.recharge": "Ricarica 5 \u20AC", "buy.ok": "Pagina di pagamento aperta nel browser.", "lend.title": "Presta questo computer", "lend.hint": "I lavori girano cifrati end-to-end in sandbox isolate, senza accesso ai tuoi file. Guadagni crediti.", "lend.state.off": "Spento", "lend.state.waiting": "In attesa", "lend.state.working": "Al lavoro", "lend.reason.lending_off": "Prestito disattivato", "lend.reason.paused": "In pausa", "lend.reason.outside_hours": "Fuori dai tuoi orari", "lend.reason.on_battery": "A batteria", "lend.reason.computer_in_use": "Stai usando il computer", "lend.reason.no_jobs": "Nessun lavoro in coda", "lend.running": "Esegue un lavoro {kind} dalle {time}", "lend.detail": "{reason} \xB7 {n} lavori completati \xB7 offre {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", sandbox {name}", "lend.detail.models": ", {n} modelli", "lend.pause": "Pausa", "lend.resume": "Riprendi", "lend.paused_ok": "Prestito in pausa. L'eventuale lavoro in corso \xE8 passato a un altro computer.", "lend.resumed_ok": "Prestito ripreso.", "setup.title": "Configura questo computer", "setup.hint": "Cosa serve a questo computer per prestare. Per usare la rete non serve altro. Gli installer arrivano dai siti ufficiali; il sistema ti chiede di confermare.", "setup.checking": "Verifica in corso\u2026", "setup.docker.help": "Esegue i lavori degli altri in sandbox isolate. Serve per i lavori in container. Gratis per uso personale e piccole aziende.", "setup.docker.download": "Scarica Docker", "setup.docker.start": "Avvia Docker", "setup.apple.title": "Apple Container (facoltativo)", "setup.apple.help": "Isolamento pi\xF9 forte: ogni lavoro nella sua macchina virtuale. Facoltativo; per iniziare basta Docker.", "setup.apple.get": "Ottieni Apple Container", "setup.ollama.help": "Esegue modelli di IA aperti (Qwen, Llama, Mistral\u2026). Serve per prestare modelli di IA.", "setup.ollama.download": "Scarica Ollama", "setup.ollama.start": "Avvia Ollama", "setup.model.title": "Modello di IA", "setup.model.help": "Il modello che questo computer offre agli altri. Consigliato per {ram} GB di memoria: {model}.", "setup.model.download": "Scarica {model} ({size} GB)", "setup.model.none": "ancora nessuno", "setup.model.need_ollama": "Prima installa e avvia Ollama", "setup.nvidia.title": "Driver GPU NVIDIA (facoltativi)", "setup.nvidia.help": "Solo se questo computer ha una scheda grafica NVIDIA che vuoi prestare.", "setup.nvidia.get": "Ottieni i driver NVIDIA", "setup.status.running": "installato e in esecuzione", "setup.status.installed": "installato", "setup.status.stopped": "installato, non in esecuzione", "setup.status.missing": "non installato", "setup.status.found": "trovato", "setup.status.not_found": "non trovato", "setup.terminal": "Esegui in un terminale:", "setup.done": "Fatto", "setup.opened": "Fatto: aperto {file}, segui i suoi passaggi", "setup.recheck": "Verifica di nuovo", "setup.ok.download": "Download avviato. L'installer si apre da solo quando finisce: segui i suoi passaggi.", "setup.ok.start": "Avvio in corso\u2026 pu\xF2 volerci fino a un minuto. Questo elenco si aggiorna da solo.", "setup.ok.pull": "Download del modello avviato. L'avanzamento \xE8 mostrato sopra.", "setup.ok.page": "Pagina aperta nel browser.", "setup.ok.recheck": "Verificato di nuovo.", "rules.title": "Regole di prestito", "rules.enabled": "Prestito attivo", "rules.enabled.help": "Interruttore generale. Se spento, questo computer non esegue mai i lavori degli altri. Puoi comunque usare la rete tu.", "rules.cpus": "CPU max", "rules.cpus.help": "Quanti core del processore pu\xF2 usare al massimo un lavoro. Esempio: su un computer con 8 core, con 2 te ne restano 6 liberi.", "rules.memory": "Memoria max (MB)", "rules.memory.help": "RAM che un lavoro pu\xF2 usare, in megabyte (1024 MB = 1 GB). BitPull non offre mai pi\xF9 della met\xE0 della memoria di questo computer.", "rules.gpu": "GPU", "rules.gpu.none": "Nessuna", "rules.gpu.consumer": "Consumer (8\u201312 GB)", "rules.gpu.high": "Fascia alta (16\u201324 GB)", "rules.gpu.datacenter": "Data center (40 GB+)", "rules.gpu.help": "La scheda grafica che presti, in base alla memoria video. Lascia Nessuna se non hai una GPU dedicata o non vuoi prestarla. Una GPU fa guadagnare pi\xF9 crediti.", "rules.containers": "Lavori in container", "rules.containers.help": "Esegue build, test e script per gli altri in una sandbox senza internet e senza accesso ai tuoi file. Serve Docker (o Apple Container): vedi \u201CConfigura questo computer\u201D.", "rules.models": "Modelli aperti (Ollama)", "rules.models.help": "Risponde alle richieste di IA con i modelli aperti installati in Ollama su questo computer. Servono Ollama e almeno un modello.", "rules.idle": "Solo dopo minuti di inattivit\xE0", "rules.idle.help": "Presta solo quando non tocchi tastiera o mouse da questi minuti. 0 = presta anche mentre lavori.", "rules.ac": "Solo con alimentatore collegato", "rules.ac.help": "Su un portatile, smette di prestare quando va a batteria, cos\xEC il prestito non la scarica mai.", "rules.hours": "Solo dalle / alle ore (vuoto = sempre)", "rules.hours.help": "Presta solo in questa fascia oraria, nel formato 24 ore. Esempio: 22 e 8 = dalle 22 alle 8. Lascia entrambi vuoti per prestare a qualsiasi ora.", "rules.cache": "Copie in cache dei repo altrui", "rules.cache.help": "Di quanti repo pubblici di altri utenti questo computer tiene una copia, cos\xEC restano disponibili quando i loro autori sono offline. Usa un po' di spazio su disco e fa guadagnare crediti. 0 = nessuno.", "rules.save": "Salva regole", "rules.saved": "Regole salvate. Si applicano entro pochi secondi.", "rules.hours_both": "Compila entrambe le ore, oppure lasciale vuote per prestare a qualsiasi ora.", "folders.title": "Cartelle autorizzate", "folders.hint": "BitPull legge solo queste cartelle. Per pubblicarne una serve un bitpull.json completo.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Autorizza", "folders.none": "Nessuna cartella autorizzata.", "folders.draft": "Bozza", "folders.publish": "Pubblica", "folders.remove": "Rimuovi", "folders.need_path": "Prima scrivi il percorso completo di una cartella, ad es. /Users/you/projects/my-library.", "folders.added": "Cartella autorizzata.", "folders.removed": "Cartella rimossa. BitPull non la legge pi\xF9.", "folders.drafted": "Bozza pronta: {n} file trovati. Fai compilare alla tua IA il riepilogo e le descrizioni (strumento prepare_publish), poi premi Pubblica.", "folders.published": 'Pubblicato "{name}" con {n} file.', "folders.secrets_in": "Trovato in: {where}", "folders.line": "{file} riga {line}", "repos.title": "I tuoi repo pubblicati", "repos.hint": "Si aggiornano da soli quando modifichi i file (ogni 5 minuti).", "repos.none": "Nessun repo pubblicato.", "repos.withdraw": "Ritira", "repos.withdrawn": "Repo ritirato dalla rete.", "ask.title": "Modelli aperti sulla rete", "ask.offers": "Questo computer offre: {models}.", "ask.offers_none": "nessun modello (installa Ollama per offrirne)", "ask.placeholder": "Chiedi a un modello aperto sulla rete\u2026", "ask.small": "Piccolo", "ask.medium": "Medio", "ask.large": "Grande", "ask.button": "Chiedi", "ask.empty": "Prima scrivi una domanda.", "ask.waiting": "Cerco un computer con il modello\u2026 pu\xF2 volerci fino a un minuto.", "ask.credits": "{n} crediti", "tools.title": "Collega i tuoi strumenti", "tools.mcp": "Per Claude Code e i client MCP, esegui in un terminale:", "tools.openai": "Per strumenti compatibili con OpenAI: URL di base", "tools.key": "Chiave API", "tools.show": "Mostra", "jobs.title": "I tuoi lavori recenti", "jobs.none": "Nessun lavoro.", "jobs.model": "Modello", "jobs.container": "Container", "jobs.status.queued": "In coda", "jobs.status.running": "In corso", "jobs.status.done": "Completato", "jobs.status.failed": "Non riuscito", "jobs.status.canceled": "Annullato", "jobs.cost": "{n} crediti", working: "In corso\u2026", "err.agent_down": "BitPull su questo computer non risponde. Si riavvia da solo entro 30 secondi: riprova tra poco.", "err.server": "Impossibile raggiungere il server BitPull. Controlla la connessione a internet e riprova.", "err.session": "Questa sessione della dashboard \xE8 scaduta. Riaprila dall'app BitPull.", "err.billing": "I pagamenti non sono ancora attivi.", "err.no_folder": "Questa cartella non esiste su questo computer. Controlla il percorso.", "err.not_folder": "Questo percorso \xE8 un file, non una cartella.", "err.credits": "Crediti insufficienti.", "err.device": "Questo computer non \xE8 ancora connesso. Tieni aperta l'app BitPull e riprova tra un minuto.", "err.no_model": "Al momento nessun computer della rete offre un modello di IA. Riprova pi\xF9 tardi.", "err.invalid": "Alcuni valori non sono validi. Controlla i campi e riprova.", "tip.lang": "Lingua dell'app. La tua scelta viene ricordata su questo computer.", "tip.buy.base": "Apre la pagina di pagamento sicura per il piano Base: 4,50 \u20AC al mese con 80 crediti ogni mese. Puoi disdire in qualsiasi momento.", "tip.buy.pro": "Apre la pagina di pagamento sicura per il piano Pro: 9,90 \u20AC al mese con 200 crediti ogni mese, priorit\xE0 massima e tutte le GPU. Puoi disdire in qualsiasi momento.", "tip.buy.recharge": "Apre la pagina di pagamento sicura per comprare 80 crediti una tantum, a 5 \u20AC. Non scadono mai.", "tip.pause": "Ferma subito il prestito. Un lavoro in corso in quel momento passa a un altro computer. Premi di nuovo per riprendere.", "tip.resume": "Riprende il prestito, seguendo le tue regole di prestito.", "tip.rules.save": "Salva le regole di prestito qui sopra. Si applicano entro pochi secondi; non cambia nulla finch\xE9 non premi qui.", "tip.folder.add": "Permette a BitPull di leggere la cartella scritta a sinistra. I file fuori dalle cartelle autorizzate non vengono mai letti n\xE9 condivisi.", "tip.folder.draft": "Crea bitpull.json nella cartella: l'elenco dei suoi file con descrizioni vuote che la tua IA completer\xE0. Non viene ancora pubblicato nulla.", "tip.folder.publish": "Condivide questa cartella sulla rete come repo pubblico, firmato da questo computer. La pubblicazione viene bloccata se nei file ci sono chiavi o password.", "tip.folder.remove": "BitPull smette di leggere questa cartella. I repo gi\xE0 pubblicati da qui restano online finch\xE9 non li ritiri.", "tip.repo.withdraw": "Rimuove questo repo dalla rete. Gli altri utenti non possono pi\xF9 trovarlo n\xE9 scaricarlo. I tuoi file restano sul tuo computer.", "tip.ask": "Invia la tua domanda, cifrata end-to-end, a un computer della rete che esegue un modello di IA aperto. Costa pochi crediti.", "tip.tier": "Dimensione del modello: piccolo \xE8 veloce ed economico, grande \xE8 pi\xF9 intelligente e costa pi\xF9 crediti.", "tip.show_key": "Mostra la chiave che gli strumenti di IA su questo computer usano per parlare con BitPull. Non condividerla.", "tip.setup.download": "Scarica l'installer ufficiale di {name} per questo computer nella cartella Download e lo apre. Segui i suoi passaggi per finire.", "tip.setup.start": "Avvia {name}, che \xE8 installato su questo computer ma non \xE8 in esecuzione.", "tip.setup.pull": "Scarica il modello di IA {model} ({size} GB) in Ollama, cos\xEC questo computer pu\xF2 offrirlo agli altri.", "tip.setup.open": "Apre la pagina ufficiale di {name} nel browser.", "tip.setup.recheck": "Verifica di nuovo cosa \xE8 installato e in esecuzione su questo computer.", "update.title": "Aggiornamenti dell'app", "update.current": "Versione installata: {v}", "update.latest": "Ultima versione: {v}", "update.button": "Cerca aggiornamenti", "update.install": "Installa ora la versione {v}", "update.available": "\xC8 disponibile la versione {v}.", "update.not_in_app": "Gli aggiornamenti vengono installati dall'app BitPull. Apri questa dashboard dall'app per aggiornare.", "update.state.requested": "Chiedo all'app di verificare\u2026", "update.state.checking": "Ricerca aggiornamenti\u2026", "update.state.up_to_date": "Hai l'ultima versione.", "update.state.installing": "Download e installazione della versione {v}\u2026 l'app si riavvia da sola.", "update.state.restarting": "Riavvio con la versione {v}\u2026", "update.state.error": "L'aggiornamento non \xE8 riuscito: {msg}. Riprova pi\xF9 tardi.", "tip.update": "Verifica se esiste una versione pi\xF9 recente di BitPull. Se c'\xE8, la scarica, ne verifica la firma, la installa e riavvia l'app. Il prestito si ferma per qualche secondo.", "tools.hint": "Lascia che il tuo assistente di IA cerchi nel codice condiviso e usi i modelli aperti e i computer della rete. Scegli il tuo strumento:", "tools.connect": "Collega", "tools.connected": "Collegato", "tools.copy": "Copia", "tools.copied": "Copiato.", "tools.installed": "Installato", "tools.not_found": "Non trovato su questo computer", "tools.done": "Fatto. Riavvia {name} per iniziare a usare BitPull.", "tools.manual": "Per aggiungerlo a mano:", "tools.config_invalid": "Il file delle impostazioni di {name} non \xE8 un JSON valido, quindi BitPull non l'ha toccato. Correggi il file o aggiungi BitPull a mano con Copia.", "tip.tools.connect": "Aggiunge BitPull alle impostazioni di {name} automaticamente. Un backup delle impostazioni precedenti viene conservato accanto.", "tip.tools.copy": "Copia il comando o le impostazioni negli appunti, cos\xEC puoi aggiungere BitPull a {name} da solo.", "models.title": "Modelli AI da condividere", "models.hint": "Modelli open di ogni tipo che questo computer pu\xF2 prestare. Sono elencati solo i modelli la cui licenza permette di servirli ad altri. I modelli scaricati vengono offerti alla rete mentre il prestito \xE8 attivo.", "models.engine.title": "Motore per immagini, voce e musica", "models.engine.help": "Lemonade (open source): genera immagini, trascrive la voce, legge testi ad alta voce, crea musica, riordina documenti e ingrandisce immagini. Installato dentro BitPull, senza diritti di amministratore.", "models.engine.install": "Installa motore", "models.engine.repair": "Reinstalla motore", "models.engine.unsupported": "Non disponibile su questo computer (serve Apple silicon, oppure Windows/Linux x64)", "models.need_engine": "Installa prima il motore", "models.not_here": "Non disponibile su questo computer", "models.shared": "Scaricato \xB7 condiviso", "models.download": "Scarica ({size} GB)", "models.needs_ram": "Richiede circa {ram} GB di memoria: qui potrebbe essere lento", "models.recommended": "Consigliato", "models.license": "Licenza", "models.ok.engine": "Installazione del motore\u2026", "task.chat": "Testo e codice", "task.vision": "Immagini \u2192 testo", "task.ocr": "Documenti (OCR)", "task.translate": "Traduzione", "task.embed": "Embedding (ricerca)", "task.rerank": "Riordino documenti", "task.image": "Generazione immagini", "task.upscale": "Ingrandimento immagini", "task.stt": "Voce \u2192 testo", "task.tts": "Testo \u2192 voce", "task.music": "Musica", "limits.title": "I tuoi limiti per gli altri", "limits.hint": "Quanto lavoro AI questo computer fa per gli altri. Lascia vuoto per nessun limite. Quando un limite \xE8 raggiunto, i tuoi modelli non vengono pi\xF9 offerti fino all'inizio del periodo successivo.", "limits.save": "Salva limiti", "limits.requests": "Richieste", "limits.tokens": "Token", "limits.used": "Usati", "limits.day": "Al giorno", "limits.week": "A settimana", "limits.month": "Al mese", "limits.none": "nessun limite", "limits.usage": "{requests} richieste \xB7 {tokens} token", "limits.saved": "Limiti salvati.", "tip.models.engine": "Scarica in BitPull il motore open source Lemonade, cos\xEC questo computer pu\xF2 prestare modelli per immagini, voce e musica.", "tip.models.download": "Scarica {model} ({size} GB) su questo computer per offrirlo agli altri. Puoi rimuoverlo in seguito.", "tip.limits.save": "Salva i limiti giornalieri, settimanali e mensili del lavoro AI svolto per gli altri.", "lend.visible": "\u2713 La rete vede questo computer: {cpus} CPU, {ram} GB disponibili per gli altri.", "lend.invisible": "La rete non vede ancora il prestito: attendi fino a un minuto; se resta cos\xEC, controlla la connessione a internet.", "lend.unusable": "\u26A0 Nessuno pu\xF2 ancora usare questo computer: qui non pu\xF2 girare nessun lavoro. {reason}", "lend.unusable.docker": 'Docker non supera il controllo di isolamento di BitPull: vedi "Configura questo computer".', "lend.unusable.off": `I lavori in container sono spenti e non c'\xE8 nessun modello AI: attiva "Lavori in container" o scarica un modello.`, "lend.docker_login": "Docker non riesce a scaricare le immagini perch\xE9 il suo accesso a Docker Hub non \xE8 pi\xF9 valido. In Docker Desktop clicca il tuo account (in alto a destra) \u2192 Sign out, poi rientra oppure resta disconnesso. Poi premi Verifica di nuovo.", "lend.off_hint": 'Il prestito \xE8 spento: spunta "{enabled}" in "{rules}" qui sotto e premi "{save}". (Pausa / Riprendi sospende solo un prestito gi\xE0 acceso.)', "lend.low_memory": 'Offri solo {mb} MB di memoria: ci stanno pochi lavori. In "{rules}" imposta "{memory}" ad esempio a 4096 (= 4 GB) e premi "{save}".', "rules.awake": "Resta acceso durante il prestito", "rules.awake.help": "Mentre esegue un lavoro per qualcuno, questo computer non va in sospensione (lo schermo pu\xF2 comunque spegnersi). Poi torna a sospendersi come sempre. Evita che i lavori vengano interrotti.", "ask.wait": "Attendi fino a (minuti)", "ask.wait.save": "Salva", "ask.wait.saved": "Le risposte verranno attese fino a {n} minuti.", "ask.wait.range": "Inserisci un numero di minuti tra 1 e 120.", "tip.wait": "Quanto aspettare la risposta dei modelli AI della rete prima di rinunciare. I modelli sul processore di qualcuno possono metterci minuti. Pu\xF2 cambiarlo anche la tua AI.", "plan.month": "/mese", "plan.free.1": "Conoscenza condivisa", "plan.free.2": "Calcolo con i crediti che guadagni prestando", "plan.free.3": "Saldo fino a \u221220 crediti", "plan.base.1": "80 crediti ogni mese", "plan.base.2": "GPU consumer e modelli medi", "plan.base.3": "Saldo fino a \u2212100 crediti", "plan.pro.1": "200 crediti ogni mese", "plan.pro.2": "Massima priorit\xE0, tutte le GPU e modelli grandi", "plan.pro.3": "Saldo fino a \u2212500 crediti", "plans.current": "Il tuo piano", "plans.choose": "Scegli {plan}", "plans.renew": "Si rinnova ogni mese; puoi disdire quando vuoi, il piano resta attivo fino alla fine del periodo pagato", "plans.recharge.title": "Ricarica crediti", "plans.recharge.1": "{n} crediti aggiunti al tuo saldo", "plans.recharge.2": "Pagamento unico, nessun abbonamento", "plans.recharge.3": "I crediti non scadono", "plans.summary": "Stai acquistando", "plans.pay": "Continua al pagamento sicuro", "plans.cancel": "Annulla", "plans.off": "I pagamenti non sono ancora attivi.", "account.line": "Account: {email}", "account.via.email": "email e password", "logout.button": "Esci dall'account", "logout.confirm": "Uscire da {email} su questo computer? Il prestito si ferma finch\xE9 non accedi di nuovo. Potrai poi accedere con un altro account; i crediti di benvenuto si ricevono una sola volta per computer.", "logout.yes": "Esci", "logout.done": "Sei uscito dall'account su questo computer. Per accedere di nuovo, con lo stesso o con un altro account, apri l'app BitPull oppure esegui:", "tip.logout": "Disconnette questo computer dall'account, ad esempio per accedere con un altro. Prima chiede conferma.", "tip.logout.yes": "Chiude la sessione su questo computer. Il prestito si ferma finch\xE9 non accedi di nuovo.", "tip.logout.no": "Resti connesso.", "tip.plans.choose": "Mostra nome, prezzo e cosa include il piano prima di pagare.", "tip.plans.pay": "Apre nel browser la pagina di pagamento sicuro di Stripe.", "tip.plans.cancel": "Chiude il riepilogo senza acquistare." }, pt: { "lang.name": "Portugu\xEAs", "app.title": "BitPull", "locked.text": "Abra o painel pelo app BitPull: o link dele cont\xE9m a chave de acesso.", "pill.online": "Online", "pill.offline": "Offline", "pill.direct": "Endere\xE7o direto", "pill.relay_on": "Relay conectado", "pill.relay_off": "Relay n\xE3o conectado", "pill.cached": "{n} c\xF3pias em cache", "net.title": "Rede ao vivo", "net.online": "{n} computadores online", "net.lending": "{n} emprestando agora", "net.cpu": "{n} n\xFAcleos de CPU", "net.ram": "{n} GB de RAM", "net.gpu": "{n} GPUs", "net.models": "{n} modelos de IA", "net.jobs": "{n} tarefas em execu\xE7\xE3o", "credits.title": "Saldo de cr\xE9ditos", "credits.plan": "Plano {plan} \xB7 pode chegar a {n}", "plan.free": "Gr\xE1tis", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "Recarregar \u20AC5", "buy.ok": "P\xE1gina de pagamento aberta no seu navegador.", "lend.title": "Emprestar este computador", "lend.hint": "As tarefas rodam com criptografia de ponta a ponta em sandboxes isoladas, sem acesso aos seus arquivos. Voc\xEA ganha cr\xE9ditos.", "lend.state.off": "Desligado", "lend.state.waiting": "Aguardando", "lend.state.working": "Trabalhando", "lend.reason.lending_off": "Empr\xE9stimo desligado", "lend.reason.paused": "Pausado", "lend.reason.outside_hours": "Fora do seu hor\xE1rio", "lend.reason.on_battery": "Na bateria", "lend.reason.computer_in_use": "Voc\xEA est\xE1 usando o computador", "lend.reason.no_jobs": "Nenhuma tarefa na fila", "lend.running": "Executando uma tarefa {kind} desde {time}", "lend.detail": "{reason} \xB7 {n} tarefas conclu\xEDdas \xB7 oferece {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", sandbox {name}", "lend.detail.models": ", {n} modelos", "lend.pause": "Pausar", "lend.resume": "Retomar", "lend.paused_ok": "Empr\xE9stimo pausado. Tarefas em andamento foram passadas para outro computador.", "lend.resumed_ok": "Empr\xE9stimo retomado.", "setup.title": "Configurar este computador", "setup.hint": "O que este computador precisa para emprestar. Para usar a rede, nada mais \xE9 necess\xE1rio. Os instaladores v\xEAm dos sites oficiais; o sistema pedir\xE1 sua confirma\xE7\xE3o.", "setup.checking": "Verificando\u2026", "setup.docker.help": "Executa tarefas de outras pessoas em sandboxes isoladas. Necess\xE1rio para tarefas de cont\xEAiner. Gr\xE1tis para uso pessoal e pequenas empresas.", "setup.docker.download": "Baixar Docker", "setup.docker.start": "Iniciar Docker", "setup.apple.title": "Apple Container (opcional)", "setup.apple.help": "Isolamento mais forte: cada tarefa em sua pr\xF3pria m\xE1quina virtual. Opcional; o Docker basta para come\xE7ar.", "setup.apple.get": "Obter Apple Container", "setup.ollama.help": "Executa modelos de IA abertos (Qwen, Llama, Mistral\u2026). Necess\xE1rio para emprestar modelos de IA.", "setup.ollama.download": "Baixar Ollama", "setup.ollama.start": "Iniciar Ollama", "setup.model.title": "Modelo de IA", "setup.model.help": "O modelo que este computador oferece aos outros. Sugerido para {ram} GB de mem\xF3ria: {model}.", "setup.model.download": "Baixar {model} ({size} GB)", "setup.model.none": "nenhum ainda", "setup.model.need_ollama": "Instale e inicie o Ollama primeiro", "setup.nvidia.title": "Drivers de GPU NVIDIA (opcional)", "setup.nvidia.help": "S\xF3 se este computador tiver uma placa de v\xEDdeo NVIDIA que voc\xEA queira emprestar.", "setup.nvidia.get": "Obter drivers NVIDIA", "setup.status.running": "instalado e em execu\xE7\xE3o", "setup.status.installed": "instalado", "setup.status.stopped": "instalado, parado", "setup.status.missing": "n\xE3o instalado", "setup.status.found": "encontrado", "setup.status.not_found": "n\xE3o encontrado", "setup.terminal": "Execute em um terminal:", "setup.done": "Pronto", "setup.opened": "Pronto: {file} aberto, siga os passos", "setup.recheck": "Verificar de novo", "setup.ok.download": "Download iniciado. O instalador abre sozinho quando terminar: siga os passos.", "setup.ok.start": "Iniciando\u2026 pode levar at\xE9 um minuto. Esta lista se atualiza sozinha.", "setup.ok.pull": "Download do modelo iniciado. O progresso aparece acima.", "setup.ok.page": "P\xE1gina aberta no seu navegador.", "setup.ok.recheck": "Verificado novamente.", "rules.title": "Regras de empr\xE9stimo", "rules.enabled": "Empr\xE9stimo ligado", "rules.enabled.help": "Chave geral. Quando desligada, este computador nunca executa tarefas de outras pessoas. Voc\xEA ainda pode usar a rede.", "rules.cpus": "M\xE1x. de CPUs", "rules.cpus.help": "Quantos n\xFAcleos do processador uma tarefa pode usar no m\xE1ximo. Exemplo: em um computador de 8 n\xFAcleos, 2 deixa 6 n\xFAcleos livres para voc\xEA.", "rules.memory": "Mem\xF3ria m\xE1x. (MB)", "rules.memory.help": "RAM que uma tarefa pode usar, em megabytes (1024 MB = 1 GB). O BitPull nunca oferece mais da metade da mem\xF3ria deste computador.", "rules.gpu": "GPU", "rules.gpu.none": "Nenhuma", "rules.gpu.consumer": "Dom\xE9stica (8\u201312 GB)", "rules.gpu.high": "Topo de linha (16\u201324 GB)", "rules.gpu.datacenter": "Data center (40 GB+)", "rules.gpu.help": "A placa de v\xEDdeo que voc\xEA empresta, pela mem\xF3ria de v\xEDdeo. Deixe Nenhuma se n\xE3o tiver GPU dedicada ou n\xE3o quiser emprest\xE1-la. Uma GPU rende mais cr\xE9ditos.", "rules.containers": "Tarefas de cont\xEAiner", "rules.containers.help": "Executa builds, testes e scripts de outras pessoas em uma sandbox sem internet e sem acesso aos seus arquivos. Requer Docker (ou Apple Container): veja \u201CConfigurar este computador\u201D.", "rules.models": "Modelos abertos (Ollama)", "rules.models.help": "Responde a pedidos de IA com os modelos abertos instalados no Ollama deste computador. Requer Ollama e pelo menos um modelo.", "rules.idle": "S\xF3 ap\xF3s minutos ocioso", "rules.idle.help": "Empresta s\xF3 quando voc\xEA n\xE3o tocar no teclado ou mouse por esse n\xFAmero de minutos. 0 = empresta mesmo enquanto voc\xEA trabalha.", "rules.ac": "S\xF3 na tomada", "rules.ac.help": "Em um notebook, para de emprestar quando estiver na bateria, para nunca descarreg\xE1-la.", "rules.hours": "S\xF3 da hora / at\xE9 a hora (vazio = sempre)", "rules.hours.help": "Empresta s\xF3 nesse intervalo, no formato 24 horas. Exemplo: 22 e 8 = das 22h \xE0s 8h. Deixe os dois vazios para emprestar a qualquer hora.", "rules.cache": "C\xF3pias em cache de repos de outros", "rules.cache.help": "Quantos repos p\xFAblicos de outros usu\xE1rios este computador guarda em c\xF3pia, para que fiquem dispon\xEDveis quando os autores estiverem offline. Usa pouco espa\xE7o em disco e rende cr\xE9ditos. 0 = nenhum.", "rules.save": "Salvar regras", "rules.saved": "Regras salvas. Valem em poucos segundos.", "rules.hours_both": "Preencha as duas horas ou deixe ambas vazias para emprestar a qualquer hora.", "folders.title": "Pastas autorizadas", "folders.hint": "O BitPull l\xEA apenas estas pastas. Para publicar uma, ela precisa de um bitpull.json completo.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "Autorizar", "folders.none": "Nenhuma pasta autorizada.", "folders.draft": "Rascunho", "folders.publish": "Publicar", "folders.remove": "Remover", "folders.need_path": "Escreva primeiro o caminho completo de uma pasta, ex.: /Users/you/projects/my-library.", "folders.added": "Pasta autorizada.", "folders.removed": "Pasta removida. O BitPull n\xE3o a l\xEA mais.", "folders.drafted": "Rascunho pronto: {n} arquivos encontrados. Deixe sua IA preencher o resumo e as descri\xE7\xF5es (ferramenta prepare_publish) e depois clique em Publicar.", "folders.published": '"{name}" publicado com {n} arquivos.', "folders.secrets_in": "Encontrado em: {where}", "folders.line": "{file} linha {line}", "repos.title": "Seus repos publicados", "repos.hint": "Atualizam sozinhos quando voc\xEA altera os arquivos (a cada 5 minutos).", "repos.none": "Nenhum repo publicado.", "repos.withdraw": "Retirar", "repos.withdrawn": "Repo retirado da rede.", "ask.title": "Modelos abertos na rede", "ask.offers": "Este computador oferece: {models}.", "ask.offers_none": "nenhum modelo (instale o Ollama para oferecer)", "ask.placeholder": "Pergunte a um modelo aberto na rede\u2026", "ask.small": "Pequeno", "ask.medium": "M\xE9dio", "ask.large": "Grande", "ask.button": "Perguntar", "ask.empty": "Escreva uma pergunta primeiro.", "ask.waiting": "Procurando um computador com o modelo\u2026 pode levar at\xE9 um minuto.", "ask.credits": "{n} cr\xE9ditos", "tools.title": "Conecte suas ferramentas", "tools.mcp": "Para Claude Code e clientes MCP, execute em um terminal:", "tools.openai": "Para ferramentas compat\xEDveis com OpenAI: URL base", "tools.key": "Chave de API", "tools.show": "Mostrar", "jobs.title": "Suas tarefas recentes", "jobs.none": "Nenhuma tarefa.", "jobs.model": "Modelo", "jobs.container": "Cont\xEAiner", "jobs.status.queued": "Na fila", "jobs.status.running": "Em execu\xE7\xE3o", "jobs.status.done": "Conclu\xEDda", "jobs.status.failed": "Falhou", "jobs.status.canceled": "Cancelada", "jobs.cost": "{n} cr\xE9ditos", working: "Trabalhando\u2026", "err.agent_down": "O BitPull deste computador n\xE3o est\xE1 respondendo. Ele reinicia sozinho em at\xE9 30 segundos: tente de novo em breve.", "err.server": "N\xE3o foi poss\xEDvel acessar o servidor do BitPull. Verifique sua conex\xE3o com a internet e tente de novo.", "err.session": "A sess\xE3o deste painel expirou. Abra-o de novo pelo app BitPull.", "err.billing": "Os pagamentos ainda n\xE3o est\xE3o ativos.", "err.no_folder": "Esta pasta n\xE3o existe neste computador. Verifique o caminho.", "err.not_folder": "Este caminho \xE9 um arquivo, n\xE3o uma pasta.", "err.credits": "Cr\xE9ditos insuficientes.", "err.device": "Este computador ainda n\xE3o est\xE1 conectado. Mantenha o app BitPull aberto e tente de novo em um minuto.", "err.no_model": "Nenhum computador na rede oferece um modelo de IA agora. Tente mais tarde.", "err.invalid": "Alguns valores n\xE3o s\xE3o v\xE1lidos. Verifique os campos e tente de novo.", "tip.lang": "Idioma do app. Sua escolha fica salva neste computador.", "tip.buy.base": "Abre a p\xE1gina de pagamento seguro do plano Base: \u20AC4.50 por m\xEAs com 80 cr\xE9ditos todo m\xEAs. Voc\xEA pode cancelar quando quiser.", "tip.buy.pro": "Abre a p\xE1gina de pagamento seguro do plano Pro: \u20AC9.90 por m\xEAs com 200 cr\xE9ditos todo m\xEAs, prioridade m\xE1xima e todas as GPUs. Voc\xEA pode cancelar quando quiser.", "tip.buy.recharge": "Abre a p\xE1gina de pagamento seguro para comprar 80 cr\xE9ditos uma \xFAnica vez, por \u20AC5. Eles nunca expiram.", "tip.pause": "Para o empr\xE9stimo agora mesmo. Uma tarefa em andamento neste momento \xE9 passada para outro computador. Clique de novo para retomar.", "tip.resume": "Volta a emprestar, seguindo suas regras de empr\xE9stimo.", "tip.rules.save": "Salva as regras de empr\xE9stimo acima. Elas valem em poucos segundos; nada muda at\xE9 voc\xEA clicar aqui.", "tip.folder.add": "Permite que o BitPull leia a pasta escrita \xE0 esquerda. Arquivos fora das pastas autorizadas nunca s\xE3o lidos nem compartilhados.", "tip.folder.draft": "Cria o bitpull.json na pasta: a lista dos arquivos dela com descri\xE7\xF5es vazias para sua AI completar. Nada \xE9 publicado ainda.", "tip.folder.publish": "Compartilha esta pasta na rede como um repo p\xFAblico, assinado por este computador. A publica\xE7\xE3o \xE9 bloqueada se forem encontradas chaves ou senhas nos arquivos.", "tip.folder.remove": "O BitPull para de ler esta pasta. Repos j\xE1 publicados a partir dela continuam online at\xE9 voc\xEA retir\xE1-los.", "tip.repo.withdraw": "Remove este repo da rede. Outros usu\xE1rios n\xE3o poder\xE3o mais encontr\xE1-lo nem baix\xE1-lo. Seus arquivos continuam no seu computador.", "tip.ask": "Envia sua pergunta, com criptografia de ponta a ponta, para um computador da rede que roda um modelo de AI aberto. Custa alguns cr\xE9ditos.", "tip.tier": "Tamanho do modelo: o pequeno \xE9 r\xE1pido e barato; o grande \xE9 mais inteligente e custa mais cr\xE9ditos.", "tip.show_key": "Mostra a chave que as ferramentas de AI deste computador usam para se comunicar com o BitPull. N\xE3o compartilhe.", "tip.setup.download": "Baixa o instalador oficial do {name} para este computador na sua pasta Downloads e o abre. Siga os passos dele para concluir.", "tip.setup.start": "Inicia o {name}, que est\xE1 instalado neste computador mas n\xE3o est\xE1 rodando.", "tip.setup.pull": "Baixa o modelo de AI {model} ({size} GB) no Ollama, para que este computador possa oferec\xEA-lo a outras pessoas.", "tip.setup.open": "Abre a p\xE1gina oficial do {name} no seu navegador.", "tip.setup.recheck": "Verifica de novo o que est\xE1 instalado e rodando neste computador.", "update.title": "Atualiza\xE7\xF5es do app", "update.current": "Vers\xE3o instalada: {v}", "update.latest": "Vers\xE3o mais recente: {v}", "update.button": "Verificar atualiza\xE7\xF5es", "update.install": "Instalar a vers\xE3o {v} agora", "update.available": "A vers\xE3o {v} est\xE1 dispon\xEDvel.", "update.not_in_app": "As atualiza\xE7\xF5es s\xE3o instaladas pelo app BitPull. Abra este painel pelo app para atualizar.", "update.state.requested": "Pedindo ao app para verificar\u2026", "update.state.checking": "Verificando atualiza\xE7\xF5es\u2026", "update.state.up_to_date": "Voc\xEA tem a vers\xE3o mais recente.", "update.state.installing": "Baixando e instalando a vers\xE3o {v}\u2026 o app reinicia sozinho.", "update.state.restarting": "Reiniciando com a vers\xE3o {v}\u2026", "update.state.error": "A atualiza\xE7\xE3o n\xE3o funcionou: {msg}. Tente novamente mais tarde.", "tip.update": "Verifica se existe uma vers\xE3o mais nova do BitPull. Se existir, baixa, verifica a assinatura, instala e reinicia o app. O empr\xE9stimo pausa por alguns segundos.", "tools.hint": "Deixe seu assistente de AI pesquisar c\xF3digo compartilhado e usar os modelos abertos e os computadores da rede. Escolha sua ferramenta:", "tools.connect": "Conectar", "tools.connected": "Conectado", "tools.copy": "Copiar", "tools.copied": "Copiado.", "tools.installed": "Instalado", "tools.not_found": "N\xE3o encontrado neste computador", "tools.done": "Pronto. Reinicie o {name} para come\xE7ar a usar o BitPull.", "tools.manual": "Para adicionar manualmente:", "tools.config_invalid": "O arquivo de configura\xE7\xF5es do {name} n\xE3o \xE9 um JSON v\xE1lido, ent\xE3o o BitPull n\xE3o o alterou. Corrija o arquivo ou adicione o BitPull manualmente com Copiar.", "tip.tools.connect": "Adiciona o BitPull \xE0s configura\xE7\xF5es do {name} automaticamente. Um backup das configura\xE7\xF5es anteriores \xE9 mantido ao lado delas.", "tip.tools.copy": "Copia o comando ou as configura\xE7\xF5es para a \xE1rea de transfer\xEAncia, para voc\xEA mesmo adicionar o BitPull ao {name}.", "models.title": "Modelos de IA para compartilhar", "models.hint": "Modelos abertos de todos os tipos que este computador pode emprestar. S\xF3 aparecem modelos cuja licen\xE7a permite servi-los a outras pessoas. Os modelos baixados s\xE3o oferecidos \xE0 rede enquanto o empr\xE9stimo estiver ativo.", "models.engine.title": "Motor de imagem, voz e m\xFAsica", "models.engine.help": "Lemonade (c\xF3digo aberto): gera imagens, transcreve voz, l\xEA textos em voz alta, cria m\xFAsica, reordena documentos e amplia imagens. Instalado dentro do BitPull, sem direitos de administrador.", "models.engine.install": "Instalar motor", "models.engine.repair": "Reinstalar motor", "models.engine.unsupported": "Indispon\xEDvel neste computador (requer Apple silicon, ou Windows/Linux x64)", "models.need_engine": "Instale o motor primeiro", "models.not_here": "Indispon\xEDvel neste computador", "models.shared": "Baixado \xB7 compartilhado", "models.download": "Baixar ({size} GB)", "models.needs_ram": "Precisa de cerca de {ram} GB de mem\xF3ria: pode ficar lento aqui", "models.recommended": "Recomendado", "models.license": "Licen\xE7a", "models.ok.engine": "Instalando o motor\u2026", "task.chat": "Texto e c\xF3digo", "task.vision": "Imagens \u2192 texto", "task.ocr": "Documentos (OCR)", "task.translate": "Tradu\xE7\xE3o", "task.embed": "Embeddings (busca)", "task.rerank": "Reordena\xE7\xE3o", "task.image": "Gera\xE7\xE3o de imagens", "task.upscale": "Amplia\xE7\xE3o de imagens", "task.stt": "Voz para texto", "task.tts": "Texto para voz", "task.music": "M\xFAsica", "limits.title": "Seus limites para outros", "limits.hint": "Quanto trabalho de IA este computador faz para outros. Deixe vazio para sem limite. Ao atingir um limite, seus modelos deixam de ser oferecidos at\xE9 o pr\xF3ximo per\xEDodo.", "limits.save": "Salvar limites", "limits.requests": "Solicita\xE7\xF5es", "limits.tokens": "Tokens", "limits.used": "Usado", "limits.day": "Por dia", "limits.week": "Por semana", "limits.month": "Por m\xEAs", "limits.none": "sem limite", "limits.usage": "{requests} solicita\xE7\xF5es \xB7 {tokens} tokens", "limits.saved": "Limites salvos.", "tip.models.engine": "Baixa no BitPull o motor de c\xF3digo aberto Lemonade, para que este computador possa emprestar modelos de imagem, voz e m\xFAsica.", "tip.models.download": "Baixa {model} ({size} GB) neste computador para oferec\xEA-lo a outros. Voc\xEA pode remov\xEA-lo depois.", "tip.limits.save": "Salva os limites di\xE1rios, semanais e mensais do trabalho de IA feito para outros.", "lend.visible": "\u2713 A rede v\xEA este computador: {cpus} CPU, {ram} GB dispon\xEDveis para outros.", "lend.invisible": "A rede ainda n\xE3o v\xEA o empr\xE9stimo: aguarde at\xE9 um minuto; se continuar assim, verifique a conex\xE3o com a internet.", "lend.unusable": "\u26A0 Ningu\xE9m pode usar este computador ainda: nenhuma tarefa pode rodar aqui. {reason}", "lend.unusable.docker": 'O Docker n\xE3o passa na verifica\xE7\xE3o de isolamento do BitPull: veja "Configurar este computador".', "lend.unusable.off": 'As tarefas em cont\xEAiner est\xE3o desativadas e n\xE3o h\xE1 modelo de IA: ative "Tarefas em cont\xEAiner" ou baixe um modelo.', "lend.docker_login": "O Docker n\xE3o consegue baixar imagens porque o login no Docker Hub n\xE3o \xE9 mais v\xE1lido. No Docker Desktop clique na sua conta (canto superior direito) \u2192 Sign out, depois entre de novo ou fique desconectado. Em seguida pressione Verificar novamente.", "lend.off_hint": 'O empr\xE9stimo est\xE1 desligado: marque "{enabled}" em "{rules}" abaixo e pressione "{save}". (Pausar / Retomar s\xF3 pausa um empr\xE9stimo j\xE1 ligado.)', "lend.low_memory": 'Voc\xEA oferece s\xF3 {mb} MB de mem\xF3ria: cabem poucas tarefas. Em "{rules}" defina "{memory}" por exemplo como 4096 (= 4 GB) e pressione "{save}".', "rules.awake": "Manter ativo durante o empr\xE9stimo", "rules.awake.help": "Enquanto executa uma tarefa para algu\xE9m, este computador n\xE3o entra em suspens\xE3o (a tela pode desligar mesmo assim). Depois suspende normalmente. Evita tarefas interrompidas.", "ask.wait": "Esperar at\xE9 (minutos)", "ask.wait.save": "Salvar", "ask.wait.saved": "As respostas ser\xE3o aguardadas at\xE9 {n} minutos.", "ask.wait.range": "Digite um n\xFAmero de minutos entre 1 e 120.", "tip.wait": "Quanto esperar a resposta dos modelos de IA da rede antes de desistir. Modelos no processador de algu\xE9m podem levar minutos. Sua IA tamb\xE9m pode mudar isso.", "plan.month": "/m\xEAs", "plan.free.1": "Conhecimento compartilhado", "plan.free.2": "Computa\xE7\xE3o com os cr\xE9ditos que voc\xEA ganha emprestando", "plan.free.3": "Saldo de at\xE9 \u221220 cr\xE9ditos", "plan.base.1": "80 cr\xE9ditos por m\xEAs", "plan.base.2": "GPUs de consumo e modelos m\xE9dios", "plan.base.3": "Saldo de at\xE9 \u2212100 cr\xE9ditos", "plan.pro.1": "200 cr\xE9ditos por m\xEAs", "plan.pro.2": "Prioridade m\xE1xima, todas as GPUs e modelos grandes", "plan.pro.3": "Saldo de at\xE9 \u2212500 cr\xE9ditos", "plans.current": "Seu plano", "plans.choose": "Escolher {plan}", "plans.renew": "Renova todo m\xEAs; cancele quando quiser, o plano continua ativo at\xE9 o fim do per\xEDodo pago", "plans.recharge.title": "Recarga de cr\xE9ditos", "plans.recharge.1": "{n} cr\xE9ditos adicionados ao seu saldo", "plans.recharge.2": "Pagamento \xFAnico, sem assinatura", "plans.recharge.3": "Os cr\xE9ditos n\xE3o expiram", "plans.summary": "Voc\xEA est\xE1 comprando", "plans.pay": "Continuar para o pagamento seguro", "plans.cancel": "Cancelar", "plans.off": "Os pagamentos ainda n\xE3o est\xE3o ativos.", "account.line": "Conta: {email}", "account.via.email": "email e senha", "logout.button": "Sair da conta", "logout.confirm": "Sair de {email} neste computador? O empr\xE9stimo para at\xE9 voc\xEA entrar de novo. Depois voc\xEA poder\xE1 entrar com outra conta; os cr\xE9ditos de boas-vindas s\xE3o dados s\xF3 uma vez por computador.", "logout.yes": "Sair", "logout.done": "Voc\xEA saiu da conta neste computador. Para entrar de novo, com a mesma ou outra conta, abra o app BitPull ou execute:", "tip.logout": "Desconecta este computador da conta, por exemplo para entrar com outra. Pede confirma\xE7\xE3o antes.", "tip.logout.yes": "Encerra a sess\xE3o neste computador. O empr\xE9stimo para at\xE9 voc\xEA entrar de novo.", "tip.logout.no": "Continua conectado.", "tip.plans.choose": "Mostra o nome, o pre\xE7o e o que o plano inclui antes de pagar.", "tip.plans.pay": "Abre no navegador a p\xE1gina de pagamento seguro da Stripe.", "tip.plans.cancel": "Fecha o resumo sem comprar." }, ru: { "lang.name": "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", "app.title": "BitPull", "locked.text": "\u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u043F\u0430\u043D\u0435\u043B\u044C \u0438\u0437 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F BitPull: \u0432 \u0435\u0451 \u0441\u0441\u044B\u043B\u043A\u0435 \u0435\u0441\u0442\u044C \u043A\u043B\u044E\u0447 \u0434\u043E\u0441\u0442\u0443\u043F\u0430.", "pill.online": "\u0412 \u0441\u0435\u0442\u0438", "pill.offline": "\u041D\u0435 \u0432 \u0441\u0435\u0442\u0438", "pill.direct": "\u041F\u0440\u044F\u043C\u043E\u0439 \u0430\u0434\u0440\u0435\u0441", "pill.relay_on": "\u0420\u0435\u0442\u0440\u0430\u043D\u0441\u043B\u044F\u0442\u043E\u0440 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D", "pill.relay_off": "\u0420\u0435\u0442\u0440\u0430\u043D\u0441\u043B\u044F\u0442\u043E\u0440 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D", "pill.cached": "\u041A\u043E\u043F\u0438\u0439 \u0432 \u043A\u044D\u0448\u0435: {n}", "net.title": "\u0421\u0435\u0442\u044C \u0441\u0435\u0439\u0447\u0430\u0441", "net.online": "\u041A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043E\u0432 \u0432 \u0441\u0435\u0442\u0438: {n}", "net.lending": "\u0421\u0434\u0430\u044E\u0442 \u0441\u0435\u0439\u0447\u0430\u0441: {n}", "net.cpu": "\u042F\u0434\u0435\u0440 CPU: {n}", "net.ram": "{n} GB RAM", "net.gpu": "GPU: {n}", "net.models": "AI-\u043C\u043E\u0434\u0435\u043B\u0435\u0439: {n}", "net.jobs": "\u0417\u0430\u0434\u0430\u0447 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F: {n}", "credits.title": "\u0411\u0430\u043B\u0430\u043D\u0441 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432", "credits.plan": "\u0422\u0430\u0440\u0438\u0444 {plan} \xB7 \u043C\u043E\u0436\u043D\u043E \u0443\u0439\u0442\u0438 \u0434\u043E {n}", "plan.free": "\u0411\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u044B\u0439", "plan.base": "Base", "plan.pro": "Pro", "buy.base": "Base \u20AC4.50", "buy.pro": "Pro \u20AC9.90", "buy.recharge": "\u041F\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u20AC5", "buy.ok": "\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u043E\u043F\u043B\u0430\u0442\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.", "lend.title": "\u0421\u0434\u0430\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440", "lend.hint": "\u0417\u0430\u0434\u0430\u0447\u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u044E\u0442\u0441\u044F \u0441\u043E \u0441\u043A\u0432\u043E\u0437\u043D\u044B\u043C \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u0432 \u0438\u0437\u043E\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u043F\u0435\u0441\u043E\u0447\u043D\u0438\u0446\u0430\u0445, \u0431\u0435\u0437 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0432\u0430\u0448\u0438\u043C \u0444\u0430\u0439\u043B\u0430\u043C. \u0412\u044B \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442\u0435 \u043A\u0440\u0435\u0434\u0438\u0442\u044B.", "lend.state.off": "\u0412\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043E", "lend.state.waiting": "\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435", "lend.state.working": "\u0420\u0430\u0431\u043E\u0442\u0430\u0435\u0442", "lend.reason.lending_off": "\u0421\u0434\u0430\u0447\u0430 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0430", "lend.reason.paused": "\u041D\u0430 \u043F\u0430\u0443\u0437\u0435", "lend.reason.outside_hours": "\u0412\u043D\u0435 \u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0447\u0430\u0441\u043E\u0432", "lend.reason.on_battery": "\u0420\u0430\u0431\u043E\u0442\u0430 \u043E\u0442 \u0431\u0430\u0442\u0430\u0440\u0435\u0438", "lend.reason.computer_in_use": "\u0412\u044B \u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435\u0441\u044C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043E\u043C", "lend.reason.no_jobs": "\u041D\u0435\u0442 \u0437\u0430\u0434\u0430\u0447 \u0432 \u043E\u0447\u0435\u0440\u0435\u0434\u0438", "lend.running": "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0437\u0430\u0434\u0430\u0447\u0430 {kind} \u0441 {time}", "lend.detail": "{reason} \xB7 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u043E \u0437\u0430\u0434\u0430\u0447: {n} \xB7 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 {cpus} CPU, {ram} GB", "lend.detail.sandbox": ", \u043F\u0435\u0441\u043E\u0447\u043D\u0438\u0446\u0430 {name}", "lend.detail.models": ", \u043C\u043E\u0434\u0435\u043B\u0435\u0439: {n}", "lend.pause": "\u041F\u0430\u0443\u0437\u0430", "lend.resume": "\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C", "lend.paused_ok": "\u0421\u0434\u0430\u0447\u0430 \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430. \u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0437\u0430\u0434\u0430\u0447\u0430 \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u0430 \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0443.", "lend.resumed_ok": "\u0421\u0434\u0430\u0447\u0430 \u0432\u043E\u0437\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0430.", "setup.title": "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430", "setup.hint": "\u0427\u0442\u043E \u043D\u0443\u0436\u043D\u043E \u044D\u0442\u043E\u043C\u0443 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0443, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0430\u0432\u0430\u0442\u044C \u0440\u0435\u0441\u0443\u0440\u0441\u044B. \u0414\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0435\u0442\u0438 \u043D\u0438\u0447\u0435\u0433\u043E \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F. \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044E\u0442\u0441\u044F \u0441 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0445 \u0441\u0430\u0439\u0442\u043E\u0432; \u0441\u0438\u0441\u0442\u0435\u043C\u0430 \u043F\u043E\u043F\u0440\u043E\u0441\u0438\u0442 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435.", "setup.checking": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430\u2026", "setup.docker.help": "\u0417\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043B\u044E\u0434\u0435\u0439 \u0432 \u0438\u0437\u043E\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u043F\u0435\u0441\u043E\u0447\u043D\u0438\u0446\u0430\u0445. \u041D\u0443\u0436\u0435\u043D \u0434\u043B\u044F \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u043D\u044B\u0445 \u0437\u0430\u0434\u0430\u0447. \u0411\u0435\u0441\u043F\u043B\u0430\u0442\u0435\u043D \u0434\u043B\u044F \u043B\u0438\u0447\u043D\u043E\u0433\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0438 \u043C\u0430\u043B\u043E\u0433\u043E \u0431\u0438\u0437\u043D\u0435\u0441\u0430.", "setup.docker.download": "\u0421\u043A\u0430\u0447\u0430\u0442\u044C Docker", "setup.docker.start": "\u0417\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C Docker", "setup.apple.title": "Apple Container (\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E)", "setup.apple.help": "\u0411\u043E\u043B\u0435\u0435 \u043D\u0430\u0434\u0451\u0436\u043D\u0430\u044F \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u044F: \u043A\u0430\u0436\u0434\u0430\u044F \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043B\u044C\u043D\u043E\u0439 \u043C\u0430\u0448\u0438\u043D\u0435. \u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E; \u0434\u043B\u044F \u043D\u0430\u0447\u0430\u043B\u0430 \u0445\u0432\u0430\u0442\u0438\u0442 Docker.", "setup.apple.get": "\u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C Apple Container", "setup.ollama.help": "\u0417\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 AI-\u043C\u043E\u0434\u0435\u043B\u0438 (Qwen, Llama, Mistral\u2026). \u041D\u0443\u0436\u0435\u043D, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0430\u0432\u0430\u0442\u044C AI-\u043C\u043E\u0434\u0435\u043B\u0438.", "setup.ollama.download": "\u0421\u043A\u0430\u0447\u0430\u0442\u044C Ollama", "setup.ollama.start": "\u0417\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C Ollama", "setup.model.title": "AI-\u043C\u043E\u0434\u0435\u043B\u044C", "setup.model.help": "\u041C\u043E\u0434\u0435\u043B\u044C, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u043C. \u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F {ram} GB \u043F\u0430\u043C\u044F\u0442\u0438: {model}.", "setup.model.download": "\u0421\u043A\u0430\u0447\u0430\u0442\u044C {model} ({size} GB)", "setup.model.none": "\u043F\u043E\u043A\u0430 \u043D\u0435\u0442", "setup.model.need_ollama": "\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u0438 \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 Ollama", "setup.nvidia.title": "\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044B GPU NVIDIA (\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E)", "setup.nvidia.help": "\u0422\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u0432 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 \u0435\u0441\u0442\u044C \u0432\u0438\u0434\u0435\u043E\u043A\u0430\u0440\u0442\u0430 NVIDIA, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u0432\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u0441\u0434\u0430\u0432\u0430\u0442\u044C.", "setup.nvidia.get": "\u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044B NVIDIA", "setup.status.running": "\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u0438 \u0437\u0430\u043F\u0443\u0449\u0435\u043D", "setup.status.installed": "\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D", "setup.status.stopped": "\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D, \u043D\u0435 \u0437\u0430\u043F\u0443\u0449\u0435\u043D", "setup.status.missing": "\u043D\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D", "setup.status.found": "\u043D\u0430\u0439\u0434\u0435\u043D", "setup.status.not_found": "\u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D", "setup.terminal": "\u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0432 \u0442\u0435\u0440\u043C\u0438\u043D\u0430\u043B\u0435:", "setup.done": "\u0413\u043E\u0442\u043E\u0432\u043E", "setup.opened": "\u0413\u043E\u0442\u043E\u0432\u043E: \u043E\u0442\u043A\u0440\u044B\u0442 {file}, \u0441\u043B\u0435\u0434\u0443\u0439\u0442\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044F\u043C", "setup.recheck": "\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0441\u043D\u043E\u0432\u0430", "setup.ok.download": "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043D\u0430\u0447\u0430\u043B\u0430\u0441\u044C. \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A \u043E\u0442\u043A\u0440\u043E\u0435\u0442\u0441\u044F \u0441\u0430\u043C \u043F\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0438: \u0441\u043B\u0435\u0434\u0443\u0439\u0442\u0435 \u0435\u0433\u043E \u0448\u0430\u0433\u0430\u043C.", "setup.ok.start": "\u0417\u0430\u043F\u0443\u0441\u043A\u2026 \u044D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u043D\u044F\u0442\u044C \u0434\u043E \u043C\u0438\u043D\u0443\u0442\u044B. \u0421\u043F\u0438\u0441\u043E\u043A \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u0441\u044F \u0441\u0430\u043C.", "setup.ok.pull": "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043C\u043E\u0434\u0435\u043B\u0438 \u043D\u0430\u0447\u0430\u043B\u0430\u0441\u044C. \u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u043F\u043E\u043A\u0430\u0437\u0430\u043D \u0432\u044B\u0448\u0435.", "setup.ok.page": "\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u043E\u0442\u043A\u0440\u044B\u0442\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.", "setup.ok.recheck": "\u041F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043E \u0441\u043D\u043E\u0432\u0430.", "rules.title": "\u041F\u0440\u0430\u0432\u0438\u043B\u0430 \u0441\u0434\u0430\u0447\u0438", "rules.enabled": "\u0421\u0434\u0430\u0447\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430", "rules.enabled.help": "\u0413\u043B\u0430\u0432\u043D\u044B\u0439 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u0435\u043B\u044C. \u041A\u043E\u0433\u0434\u0430 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D, \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u0447\u0443\u0436\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0441\u0435\u0442\u044C\u044E \u0432\u044B \u043F\u043E-\u043F\u0440\u0435\u0436\u043D\u0435\u043C\u0443 \u043C\u043E\u0436\u0435\u0442\u0435.", "rules.cpus": "\u041C\u0430\u043A\u0441. CPU", "rules.cpus.help": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u044F\u0434\u0435\u0440 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0440\u0430 \u043C\u043E\u0436\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043E\u0434\u043D\u0430 \u0437\u0430\u0434\u0430\u0447\u0430. \u041F\u0440\u0438\u043C\u0435\u0440: \u043D\u0430 8-\u044F\u0434\u0435\u0440\u043D\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 2 \u043E\u0441\u0442\u0430\u0432\u0438\u0442 \u0432\u0430\u043C 6 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u044B\u0445 \u044F\u0434\u0435\u0440.", "rules.memory": "\u041C\u0430\u043A\u0441. \u043F\u0430\u043C\u044F\u0442\u044C (MB)", "rules.memory.help": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E RAM \u043C\u043E\u0436\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u0434\u0430\u0447\u0430, \u0432 \u043C\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430\u0445 (1024 MB = 1 GB). BitPull \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u043F\u043E\u043B\u043E\u0432\u0438\u043D\u044B \u043F\u0430\u043C\u044F\u0442\u0438 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430.", "rules.gpu": "GPU", "rules.gpu.none": "\u041D\u0435\u0442", "rules.gpu.consumer": "\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0430\u044F (8\u201312 GB)", "rules.gpu.high": "\u0422\u043E\u043F\u043E\u0432\u0430\u044F (16\u201324 GB)", "rules.gpu.datacenter": "\u0414\u043B\u044F \u0434\u0430\u0442\u0430-\u0446\u0435\u043D\u0442\u0440\u043E\u0432 (40 GB+)", "rules.gpu.help": "\u0412\u0438\u0434\u0435\u043E\u043A\u0430\u0440\u0442\u0430, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u0432\u044B \u0441\u0434\u0430\u0451\u0442\u0435, \u043F\u043E \u043E\u0431\u044A\u0451\u043C\u0443 \u0432\u0438\u0434\u0435\u043E\u043F\u0430\u043C\u044F\u0442\u0438. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \xAB\u041D\u0435\u0442\xBB, \u0435\u0441\u043B\u0438 \u0434\u0438\u0441\u043A\u0440\u0435\u0442\u043D\u043E\u0439 GPU \u043D\u0435\u0442 \u0438\u043B\u0438 \u0432\u044B \u043D\u0435 \u0445\u043E\u0442\u0438\u0442\u0435 \u0435\u0451 \u0441\u0434\u0430\u0432\u0430\u0442\u044C. GPU \u043F\u0440\u0438\u043D\u043E\u0441\u0438\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u0432\u0441\u0435\u0433\u043E \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432.", "rules.containers": "\u041A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u043D\u044B\u0435 \u0437\u0430\u0434\u0430\u0447\u0438", "rules.containers.help": "\u0421\u0431\u043E\u0440\u043A\u0438, \u0442\u0435\u0441\u0442\u044B \u0438 \u0441\u043A\u0440\u0438\u043F\u0442\u044B \u0434\u0440\u0443\u0433\u0438\u0445 \u043B\u044E\u0434\u0435\u0439 \u0432 \u043F\u0435\u0441\u043E\u0447\u043D\u0438\u0446\u0435 \u0431\u0435\u0437 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0430 \u0438 \u0431\u0435\u0437 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0432\u0430\u0448\u0438\u043C \u0444\u0430\u0439\u043B\u0430\u043C. \u041D\u0443\u0436\u0435\u043D Docker (\u0438\u043B\u0438 Apple Container): \u0441\u043C. \xAB\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430\xBB.", "rules.models": "\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 (Ollama)", "rules.models.help": "\u041E\u0442\u0432\u0435\u0447\u0430\u0442\u044C \u043D\u0430 AI-\u0437\u0430\u043F\u0440\u043E\u0441\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u043C\u0438 \u043C\u043E\u0434\u0435\u043B\u044F\u043C\u0438, \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u043C\u0438 \u0432 Ollama \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435. \u041D\u0443\u0436\u043D\u044B Ollama \u0438 \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u043D\u0430 \u043C\u043E\u0434\u0435\u043B\u044C.", "rules.idle": "\u0422\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \u043C\u0438\u043D\u0443\u0442 \u043F\u0440\u043E\u0441\u0442\u043E\u044F", "rules.idle.help": "\u0421\u0434\u0430\u0432\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u0435\u0441\u043B\u0438 \u0432\u044B \u043D\u0435 \u0442\u0440\u043E\u0433\u0430\u043B\u0438 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0438 \u043C\u044B\u0448\u044C \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u043C\u0438\u043D\u0443\u0442. 0 = \u0441\u0434\u0430\u0432\u0430\u0442\u044C \u0434\u0430\u0436\u0435 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0440\u0430\u0431\u043E\u0442\u044B.", "rules.ac": "\u0422\u043E\u043B\u044C\u043A\u043E \u043E\u0442 \u0441\u0435\u0442\u0438", "rules.ac.help": "\u041D\u0430 \u043D\u043E\u0443\u0442\u0431\u0443\u043A\u0435 \u043F\u0440\u0435\u043A\u0440\u0430\u0449\u0430\u0442\u044C \u0441\u0434\u0430\u0447\u0443 \u043F\u0440\u0438 \u0440\u0430\u0431\u043E\u0442\u0435 \u043E\u0442 \u0431\u0430\u0442\u0430\u0440\u0435\u0438, \u0447\u0442\u043E\u0431\u044B \u0435\u0451 \u043D\u0435 \u0440\u0430\u0437\u0440\u044F\u0436\u0430\u0442\u044C.", "rules.hours": "\u0422\u043E\u043B\u044C\u043A\u043E \u0441 / \u0434\u043E \u0447\u0430\u0441\u0430 (\u043F\u0443\u0441\u0442\u043E = \u0432\u0441\u0435\u0433\u0434\u0430)", "rules.hours.help": "\u0421\u0434\u0430\u0432\u0430\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u044D\u0442\u043E\u043C \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0435, \u0432 24-\u0447\u0430\u0441\u043E\u0432\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435. \u041F\u0440\u0438\u043C\u0435\u0440: 22 \u0438 8 = \u0441 22:00 \u0434\u043E 8:00. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043E\u0431\u0430 \u043F\u043E\u043B\u044F \u043F\u0443\u0441\u0442\u044B\u043C\u0438, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0430\u0432\u0430\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0435 \u0432\u0440\u0435\u043C\u044F.", "rules.cache": "\u041A\u043E\u043F\u0438\u0438 \u0447\u0443\u0436\u0438\u0445 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0435\u0432 \u0432 \u043A\u044D\u0448\u0435", "rules.cache.help": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u043F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0445 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0435\u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439 \u0445\u0440\u0430\u043D\u0438\u0442 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440, \u0447\u0442\u043E\u0431\u044B \u043E\u043D\u0438 \u043E\u0441\u0442\u0430\u0432\u0430\u043B\u0438\u0441\u044C \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B, \u043A\u043E\u0433\u0434\u0430 \u0430\u0432\u0442\u043E\u0440\u044B \u043D\u0435 \u0432 \u0441\u0435\u0442\u0438. \u0417\u0430\u043D\u0438\u043C\u0430\u0435\u0442 \u043D\u0435\u043C\u043D\u043E\u0433\u043E \u043C\u0435\u0441\u0442\u0430 \u043D\u0430 \u0434\u0438\u0441\u043A\u0435 \u0438 \u043F\u0440\u0438\u043D\u043E\u0441\u0438\u0442 \u043A\u0440\u0435\u0434\u0438\u0442\u044B. 0 = \u043D\u0438 \u043E\u0434\u043D\u043E\u0433\u043E.", "rules.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", "rules.saved": "\u041F\u0440\u0430\u0432\u0438\u043B\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B. \u041E\u043D\u0438 \u0432\u0441\u0442\u0443\u043F\u044F\u0442 \u0432 \u0441\u0438\u043B\u0443 \u0447\u0435\u0440\u0435\u0437 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434.", "rules.hours_both": "\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u043E\u0431\u0430 \u0447\u0430\u0441\u0430 \u0438\u043B\u0438 \u043E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043E\u0431\u0430 \u043F\u0443\u0441\u0442\u044B\u043C\u0438, \u0447\u0442\u043E\u0431\u044B \u0441\u0434\u0430\u0432\u0430\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0435 \u0432\u0440\u0435\u043C\u044F.", "folders.title": "\u0420\u0430\u0437\u0440\u0435\u0448\u0451\u043D\u043D\u044B\u0435 \u043F\u0430\u043F\u043A\u0438", "folders.hint": "BitPull \u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u044D\u0442\u0438 \u043F\u0430\u043F\u043A\u0438. \u0414\u043B\u044F \u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438 \u043F\u0430\u043F\u043A\u0435 \u043D\u0443\u0436\u0435\u043D \u043F\u043E\u043B\u043D\u044B\u0439 bitpull.json.", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C", "folders.none": "\u041D\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043D\u043D\u044B\u0445 \u043F\u0430\u043F\u043E\u043A.", "folders.draft": "\u0427\u0435\u0440\u043D\u043E\u0432\u0438\u043A", "folders.publish": "\u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C", "folders.remove": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", "folders.need_path": "\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u043E\u043B\u043D\u044B\u0439 \u043F\u0443\u0442\u044C \u043A \u043F\u0430\u043F\u043A\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 /Users/you/projects/my-library.", "folders.added": "\u041F\u0430\u043F\u043A\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0430.", "folders.removed": "\u041F\u0430\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0430. BitPull \u0431\u043E\u043B\u044C\u0448\u0435 \u0435\u0451 \u043D\u0435 \u0447\u0438\u0442\u0430\u0435\u0442.", "folders.drafted": "\u0427\u0435\u0440\u043D\u043E\u0432\u0438\u043A \u0433\u043E\u0442\u043E\u0432: \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0444\u0430\u0439\u043B\u043E\u0432: {n}. \u041F\u0443\u0441\u0442\u044C \u0432\u0430\u0448 AI \u0437\u0430\u043F\u043E\u043B\u043D\u0438\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0438 \u0430\u043D\u043D\u043E\u0442\u0430\u0446\u0438\u0438 (\u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 prepare_publish), \u0437\u0430\u0442\u0435\u043C \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB\u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\xBB.", "folders.published": "\u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u043E \xAB{name}\xBB, \u0444\u0430\u0439\u043B\u043E\u0432: {n}.", "folders.secrets_in": "\u041D\u0430\u0439\u0434\u0435\u043D\u043E \u0432: {where}", "folders.line": "{file}, \u0441\u0442\u0440\u043E\u043A\u0430 {line}", "repos.title": "\u0412\u0430\u0448\u0438 \u043E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0438", "repos.hint": "\u041E\u0431\u043D\u043E\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u0441\u0430\u043C\u0438, \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u043C\u0435\u043D\u044F\u0435\u0442\u0435 \u0444\u0430\u0439\u043B\u044B (\u043A\u0430\u0436\u0434\u044B\u0435 5 \u043C\u0438\u043D\u0443\u0442).", "repos.none": "\u041D\u0435\u0442 \u043E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0435\u0432.", "repos.withdraw": "\u0421\u043D\u044F\u0442\u044C", "repos.withdrawn": "\u0420\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0439 \u0441\u043D\u044F\u0442 \u0441 \u0441\u0435\u0442\u0438.", "ask.title": "\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 \u0432 \u0441\u0435\u0442\u0438", "ask.offers": "\u042D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442: {models}.", "ask.offers_none": "\u043D\u0435\u0442 \u043C\u043E\u0434\u0435\u043B\u0435\u0439 (\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 Ollama, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0442\u044C \u0438\u0445)", "ask.placeholder": "\u0421\u043F\u0440\u043E\u0441\u0438\u0442\u0435 \u043E\u0442\u043A\u0440\u044B\u0442\u0443\u044E \u043C\u043E\u0434\u0435\u043B\u044C \u0432 \u0441\u0435\u0442\u0438\u2026", "ask.small": "\u041C\u0430\u043B\u0430\u044F", "ask.medium": "\u0421\u0440\u0435\u0434\u043D\u044F\u044F", "ask.large": "\u0411\u043E\u043B\u044C\u0448\u0430\u044F", "ask.button": "\u0421\u043F\u0440\u043E\u0441\u0438\u0442\u044C", "ask.empty": "\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u043D\u0430\u043F\u0438\u0448\u0438\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441.", "ask.waiting": "\u0418\u0449\u0435\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u0441 \u043C\u043E\u0434\u0435\u043B\u044C\u044E\u2026 \u044D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u043D\u044F\u0442\u044C \u0434\u043E \u043C\u0438\u043D\u0443\u0442\u044B.", "ask.credits": "\u041A\u0440\u0435\u0434\u0438\u0442\u043E\u0432: {n}", "tools.title": "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B", "tools.mcp": "\u0414\u043B\u044F Claude Code \u0438 MCP-\u043A\u043B\u0438\u0435\u043D\u0442\u043E\u0432 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0432 \u0442\u0435\u0440\u043C\u0438\u043D\u0430\u043B\u0435:", "tools.openai": "\u0414\u043B\u044F \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432, \u0441\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u044B\u0445 \u0441 OpenAI: \u0431\u0430\u0437\u043E\u0432\u044B\u0439 URL", "tools.key": "\u041A\u043B\u044E\u0447 API", "tools.show": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C", "jobs.title": "\u0412\u0430\u0448\u0438 \u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438", "jobs.none": "\u041D\u0435\u0442 \u0437\u0430\u0434\u0430\u0447.", "jobs.model": "\u041C\u043E\u0434\u0435\u043B\u044C", "jobs.container": "\u041A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440", "jobs.status.queued": "\u0412 \u043E\u0447\u0435\u0440\u0435\u0434\u0438", "jobs.status.running": "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F", "jobs.status.done": "\u0413\u043E\u0442\u043E\u0432\u043E", "jobs.status.failed": "\u041E\u0448\u0438\u0431\u043A\u0430", "jobs.status.canceled": "\u041E\u0442\u043C\u0435\u043D\u0435\u043D\u043E", "jobs.cost": "\u041A\u0440\u0435\u0434\u0438\u0442\u043E\u0432: {n}", working: "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F\u2026", "err.agent_down": "BitPull \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 \u043D\u0435 \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0442. \u041E\u043D \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0441\u044F \u0441\u0430\u043C \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 30 \u0441\u0435\u043A\u0443\u043D\u0434: \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0447\u0443\u0442\u044C \u043F\u043E\u0437\u0436\u0435.", "err.server": "\u041D\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044F \u0441\u0432\u044F\u0437\u0430\u0442\u044C\u0441\u044F \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043E\u043C BitPull. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0443 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.", "err.session": "\u0421\u0435\u0430\u043D\u0441 \u043F\u0430\u043D\u0435\u043B\u0438 \u0438\u0441\u0442\u0451\u043A. \u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u0435\u0451 \u0441\u043D\u043E\u0432\u0430 \u0438\u0437 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F BitPull.", "err.billing": "\u041F\u043B\u0430\u0442\u0435\u0436\u0438 \u043F\u043E\u043A\u0430 \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u043D\u044B.", "err.no_folder": "\u0422\u0430\u043A\u043E\u0439 \u043F\u0430\u043F\u043A\u0438 \u043D\u0435\u0442 \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u0443\u0442\u044C.", "err.not_folder": "\u042D\u0442\u043E\u0442 \u043F\u0443\u0442\u044C \u0432\u0435\u0434\u0451\u0442 \u043A \u0444\u0430\u0439\u043B\u0443, \u0430 \u043D\u0435 \u043A \u043F\u0430\u043F\u043A\u0435.", "err.credits": "\u041D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432.", "err.device": "\u042D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u0435\u0449\u0451 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D. \u041D\u0435 \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0439\u0442\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 BitPull \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u043C\u0438\u043D\u0443\u0442\u0443.", "err.no_model": "\u0421\u0435\u0439\u0447\u0430\u0441 \u043D\u0438 \u043E\u0434\u0438\u043D \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u0432 \u0441\u0435\u0442\u0438 \u043D\u0435 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442 AI-\u043C\u043E\u0434\u0435\u043B\u044C. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043F\u043E\u0437\u0436\u0435.", "err.invalid": "\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u043E\u043B\u044F \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.", "tip.lang": "\u042F\u0437\u044B\u043A \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F. \u0412\u0430\u0448 \u0432\u044B\u0431\u043E\u0440 \u0437\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435.", "tip.buy.base": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043E\u043F\u043B\u0430\u0442\u044B \u0442\u0430\u0440\u0438\u0444\u0430 Base: \u20AC4.50 \u0432 \u043C\u0435\u0441\u044F\u0446 \u0438 80 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432 \u043A\u0430\u0436\u0434\u044B\u0439 \u043C\u0435\u0441\u044F\u0446. \u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043C\u043E\u0436\u043D\u043E \u0432 \u043B\u044E\u0431\u043E\u0439 \u043C\u043E\u043C\u0435\u043D\u0442.", "tip.buy.pro": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043E\u043F\u043B\u0430\u0442\u044B \u0442\u0430\u0440\u0438\u0444\u0430 Pro: \u20AC9.90 \u0432 \u043C\u0435\u0441\u044F\u0446, 200 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432 \u043A\u0430\u0436\u0434\u044B\u0439 \u043C\u0435\u0441\u044F\u0446, \u043D\u0430\u0438\u0432\u044B\u0441\u0448\u0438\u0439 \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 \u0438 \u0432\u0441\u0435 GPU. \u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043C\u043E\u0436\u043D\u043E \u0432 \u043B\u044E\u0431\u043E\u0439 \u043C\u043E\u043C\u0435\u043D\u0442.", "tip.buy.recharge": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043E\u043F\u043B\u0430\u0442\u044B, \u0447\u0442\u043E\u0431\u044B \u0440\u0430\u0437\u043E\u0432\u043E \u043A\u0443\u043F\u0438\u0442\u044C 80 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432 \u0437\u0430 \u20AC5. \u041E\u043D\u0438 \u043D\u0435 \u0441\u0433\u043E\u0440\u0430\u044E\u0442.", "tip.pause": "\u0421\u0440\u0430\u0437\u0443 \u043F\u0440\u0435\u043A\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0434\u0430\u0447\u0443. \u0417\u0430\u0434\u0430\u0447\u0430, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0432 \u044D\u0442\u043E\u0442 \u043C\u043E\u043C\u0435\u043D\u0442, \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044F \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0443. \u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C.", "tip.resume": "\u0421\u043D\u043E\u0432\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442 \u0441\u0434\u0430\u0447\u0443 \u043F\u043E \u0432\u0430\u0448\u0438\u043C \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C \u0441\u0434\u0430\u0447\u0438.", "tip.rules.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0441\u0434\u0430\u0447\u0438 \u0432\u044B\u0448\u0435. \u041E\u043D\u0438 \u0432\u0441\u0442\u0443\u043F\u0430\u044E\u0442 \u0432 \u0441\u0438\u043B\u0443 \u0437\u0430 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434; \u043F\u043E\u043A\u0430 \u0432\u044B \u043D\u0435 \u043D\u0430\u0436\u043C\u0451\u0442\u0435 \u044D\u0442\u0443 \u043A\u043D\u043E\u043F\u043A\u0443, \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F.", "tip.folder.add": "\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 BitPull \u0447\u0438\u0442\u0430\u0442\u044C \u043F\u0430\u043F\u043A\u0443, \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u0443\u044E \u0441\u043B\u0435\u0432\u0430. \u0424\u0430\u0439\u043B\u044B \u0432\u043D\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043D\u043D\u044B\u0445 \u043F\u0430\u043F\u043E\u043A \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0447\u0438\u0442\u0430\u044E\u0442\u0441\u044F \u0438 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u044E\u0442\u0441\u044F.", "tip.folder.draft": "\u0421\u043E\u0437\u0434\u0430\u0451\u0442 \u0432 \u043F\u0430\u043F\u043A\u0435 bitpull.json: \u0441\u043F\u0438\u0441\u043E\u043A \u0435\u0451 \u0444\u0430\u0439\u043B\u043E\u0432 \u0441 \u043F\u0443\u0441\u0442\u044B\u043C\u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0437\u0430\u043F\u043E\u043B\u043D\u0438\u0442 \u0432\u0430\u0448 AI. \u041F\u043E\u043A\u0430 \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043F\u0443\u0431\u043B\u0438\u043A\u0443\u0435\u0442\u0441\u044F.", "tip.folder.publish": "\u041F\u0443\u0431\u043B\u0438\u043A\u0443\u0435\u0442 \u044D\u0442\u0443 \u043F\u0430\u043F\u043A\u0443 \u0432 \u0441\u0435\u0442\u0438 \u043A\u0430\u043A \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0439, \u043F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u043D\u044B\u0439 \u044D\u0442\u0438\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043E\u043C. \u041F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u044F \u0431\u043B\u043E\u043A\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0435\u0441\u043B\u0438 \u0432 \u0444\u0430\u0439\u043B\u0430\u0445 \u043D\u0430\u0439\u0434\u0435\u043D\u044B \u043A\u043B\u044E\u0447\u0438 \u0438\u043B\u0438 \u043F\u0430\u0440\u043E\u043B\u0438.", "tip.folder.remove": "BitPull \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0447\u0438\u0442\u0430\u0442\u044C \u044D\u0442\u0443 \u043F\u0430\u043F\u043A\u0443. \u0423\u0436\u0435 \u043E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0438\u0437 \u043D\u0435\u0451 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0438 \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u0432 \u0441\u0435\u0442\u0438, \u043F\u043E\u043A\u0430 \u0432\u044B \u0438\u0445 \u043D\u0435 \u043E\u0442\u0437\u043E\u0432\u0451\u0442\u0435.", "tip.repo.withdraw": "\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u044D\u0442\u043E\u0442 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0439 \u0438\u0437 \u0441\u0435\u0442\u0438. \u0414\u0440\u0443\u0433\u0438\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0441\u043C\u043E\u0433\u0443\u0442 \u0435\u0433\u043E \u043D\u0430\u0439\u0442\u0438 \u0438\u043B\u0438 \u0441\u043A\u0430\u0447\u0430\u0442\u044C. \u0412\u0430\u0448\u0438 \u0444\u0430\u0439\u043B\u044B \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F \u043D\u0430 \u0432\u0430\u0448\u0435\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435.", "tip.ask": "\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0432\u0430\u0448 \u0432\u043E\u043F\u0440\u043E\u0441 \u0441\u043E \u0441\u043A\u0432\u043E\u0437\u043D\u044B\u043C \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0443 \u0432 \u0441\u0435\u0442\u0438, \u043D\u0430 \u043A\u043E\u0442\u043E\u0440\u043E\u043C \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043E\u0442\u043A\u0440\u044B\u0442\u0430\u044F AI-\u043C\u043E\u0434\u0435\u043B\u044C. \u0421\u0442\u043E\u0438\u0442 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432.", "tip.tier": "\u0420\u0430\u0437\u043C\u0435\u0440 \u043C\u043E\u0434\u0435\u043B\u0438: \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0430\u044F \u2014 \u0431\u044B\u0441\u0442\u0440\u0430\u044F \u0438 \u0434\u0435\u0448\u0451\u0432\u0430\u044F, \u0431\u043E\u043B\u044C\u0448\u0430\u044F \u2014 \u0443\u043C\u043D\u0435\u0435 \u0438 \u0441\u0442\u043E\u0438\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432.", "tip.show_key": "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043A\u043B\u044E\u0447, \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E AI-\u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 \u043E\u0431\u0449\u0430\u044E\u0442\u0441\u044F \u0441 BitPull. \u041D\u0438\u043A\u043E\u043C\u0443 \u0435\u0433\u043E \u043D\u0435 \u0441\u043E\u043E\u0431\u0449\u0430\u0439\u0442\u0435.", "tip.setup.download": "\u0421\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A {name} \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430 \u0432 \u043F\u0430\u043F\u043A\u0443 \xAB\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0438\xBB \u0438 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0435\u0433\u043E. \u0421\u043B\u0435\u0434\u0443\u0439\u0442\u0435 \u0435\u0433\u043E \u0448\u0430\u0433\u0430\u043C, \u0447\u0442\u043E\u0431\u044B \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0443.", "tip.setup.start": "\u0417\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 {name}: \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430 \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435, \u043D\u043E \u043D\u0435 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u0430.", "tip.setup.pull": "\u0421\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u0442 AI-\u043C\u043E\u0434\u0435\u043B\u044C {model} ({size} GB) \u0432 Ollama, \u0447\u0442\u043E\u0431\u044B \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043C\u043E\u0433 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0442\u044C \u0435\u0451 \u0434\u0440\u0443\u0433\u0438\u043C.", "tip.setup.open": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 {name} \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.", "tip.setup.recheck": "\u0421\u043D\u043E\u0432\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442, \u0447\u0442\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0438 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u043E \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435.", "update.title": "\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F", "update.current": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F: {v}", "update.latest": "\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0432\u0435\u0440\u0441\u0438\u044F: {v}", "update.button": "\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F", "update.install": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E {v} \u0441\u0435\u0439\u0447\u0430\u0441", "update.available": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0432\u0435\u0440\u0441\u0438\u044F {v}.", "update.not_in_app": "\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 BitPull. \u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u044D\u0442\u0443 \u043F\u0430\u043D\u0435\u043B\u044C \u0438\u0437 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F, \u0447\u0442\u043E\u0431\u044B \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C\u0441\u044F.", "update.state.requested": "\u041F\u0440\u043E\u0441\u0438\u043C \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C\u2026", "update.state.checking": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439\u2026", "update.state.up_to_date": "\u0423 \u0432\u0430\u0441 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0432\u0435\u0440\u0441\u0438\u044F.", "update.state.installing": "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 {v}\u2026 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0441\u044F \u0441\u0430\u043C\u043E.", "update.state.restarting": "\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 {v}\u2026", "update.state.error": "\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C: {msg}. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043F\u043E\u0437\u0436\u0435.", "tip.update": "\u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442, \u0435\u0441\u0442\u044C \u043B\u0438 \u0431\u043E\u043B\u0435\u0435 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F BitPull. \u0415\u0441\u043B\u0438 \u0435\u0441\u0442\u044C \u2014 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0435\u0451, \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u043F\u043E\u0434\u043F\u0438\u0441\u044C, \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442 \u0438 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435. \u0421\u0434\u0430\u0447\u0430 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430 \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u043A\u0443\u043D\u0434.", "tools.hint": "\u041F\u043E\u0437\u0432\u043E\u043B\u044C\u0442\u0435 \u0432\u0430\u0448\u0435\u043C\u0443 AI-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0443 \u0438\u0441\u043A\u0430\u0442\u044C \u0432 \u043E\u0431\u0449\u0435\u043C \u043A\u043E\u0434\u0435 \u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 \u0438 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u044B \u0441\u0435\u0442\u0438. \u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442:", "tools.connect": "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C", "tools.connected": "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E", "tools.copy": "\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C", "tools.copied": "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E.", "tools.installed": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E", "tools.not_found": "\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435", "tools.done": "\u0413\u043E\u0442\u043E\u0432\u043E. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 {name}, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u0447\u0430\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F BitPull.", "tools.manual": "\u0427\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u0440\u0443\u0447\u043D\u0443\u044E:", "tools.config_invalid": "\u0424\u0430\u0439\u043B \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A {name} \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u043C JSON, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 BitPull \u043D\u0435 \u0441\u0442\u0430\u043B \u0435\u0433\u043E \u043C\u0435\u043D\u044F\u0442\u044C. \u0418\u0441\u043F\u0440\u0430\u0432\u044C\u0442\u0435 \u0444\u0430\u0439\u043B \u0438\u043B\u0438 \u0434\u043E\u0431\u0430\u0432\u044C\u0442\u0435 BitPull \u0432\u0440\u0443\u0447\u043D\u0443\u044E \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \xAB\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C\xBB.", "tip.tools.connect": "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 BitPull \u0432 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 {name}. \u0420\u0435\u0437\u0435\u0440\u0432\u043D\u0430\u044F \u043A\u043E\u043F\u0438\u044F \u043F\u0440\u0435\u0436\u043D\u0438\u0445 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442\u0441\u044F \u0440\u044F\u0434\u043E\u043C \u0441 \u043D\u0438\u043C\u0438.", "tip.tools.copy": "\u041A\u043E\u043F\u0438\u0440\u0443\u0435\u0442 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0438\u043B\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430, \u0447\u0442\u043E\u0431\u044B \u0432\u044B \u0441\u0430\u043C\u0438 \u0434\u043E\u0431\u0430\u0432\u0438\u043B\u0438 BitPull \u0432 {name}.", "models.title": "\u041C\u043E\u0434\u0435\u043B\u0438 \u0418\u0418 \u0434\u043B\u044F \u043E\u0431\u0449\u0435\u0433\u043E \u0434\u043E\u0441\u0442\u0443\u043F\u0430", "models.hint": "\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 \u043B\u044E\u0431\u044B\u0445 \u0442\u0438\u043F\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043C\u043E\u0436\u0435\u0442 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0442\u044C. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u043C\u043E\u0434\u0435\u043B\u0438, \u043B\u0438\u0446\u0435\u043D\u0437\u0438\u044F \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043E\u0431\u0441\u043B\u0443\u0436\u0438\u0432\u0430\u0442\u044C \u0434\u0440\u0443\u0433\u0438\u0445. \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u044E\u0442\u0441\u044F \u0441\u0435\u0442\u0438, \u043F\u043E\u043A\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432.", "models.engine.title": "\u0414\u0432\u0438\u0436\u043E\u043A \u0434\u043B\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439, \u0440\u0435\u0447\u0438 \u0438 \u043C\u0443\u0437\u044B\u043A\u0438", "models.engine.help": "Lemonade (\u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u043A\u043E\u0434): \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439, \u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u0432\u0430\u043D\u0438\u0435 \u0438 \u0441\u0438\u043D\u0442\u0435\u0437 \u0440\u0435\u0447\u0438, \u043C\u0443\u0437\u044B\u043A\u0430, \u0440\u0430\u043D\u0436\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0438 \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0438\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. \u0423\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0432\u043D\u0443\u0442\u0440\u044C BitPull, \u0431\u0435\u0437 \u043F\u0440\u0430\u0432 \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u0430.", "models.engine.install": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0434\u0432\u0438\u0436\u043E\u043A", "models.engine.repair": "\u041F\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0434\u0432\u0438\u0436\u043E\u043A", "models.engine.unsupported": "\u041D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 (\u043D\u0443\u0436\u0435\u043D Apple silicon \u0438\u043B\u0438 Windows/Linux x64)", "models.need_engine": "\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u0434\u0432\u0438\u0436\u043E\u043A", "models.not_here": "\u041D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435", "models.shared": "\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043E \xB7 \u0432 \u043E\u0431\u0449\u0435\u043C \u0434\u043E\u0441\u0442\u0443\u043F\u0435", "models.download": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C ({size} \u0413\u0411)", "models.needs_ram": "\u041D\u0443\u0436\u043D\u043E \u043E\u043A\u043E\u043B\u043E {ram} \u0413\u0411 \u043F\u0430\u043C\u044F\u0442\u0438: \u0437\u0434\u0435\u0441\u044C \u043C\u043E\u0436\u0435\u0442 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u043E", "models.recommended": "\u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F", "models.license": "\u041B\u0438\u0446\u0435\u043D\u0437\u0438\u044F", "models.ok.engine": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u0434\u0432\u0438\u0436\u043A\u0430\u2026", "task.chat": "\u0422\u0435\u043A\u0441\u0442 \u0438 \u043A\u043E\u0434", "task.vision": "\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u2192 \u0442\u0435\u043A\u0441\u0442", "task.ocr": "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B (OCR)", "task.translate": "\u041F\u0435\u0440\u0435\u0432\u043E\u0434", "task.embed": "\u042D\u043C\u0431\u0435\u0434\u0434\u0438\u043D\u0433\u0438 (\u043F\u043E\u0438\u0441\u043A)", "task.rerank": "\u0420\u0430\u043D\u0436\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435", "task.image": "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439", "task.upscale": "\u0423\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0438\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439", "task.stt": "\u0420\u0435\u0447\u044C \u2192 \u0442\u0435\u043A\u0441\u0442", "task.tts": "\u0422\u0435\u043A\u0441\u0442 \u2192 \u0440\u0435\u0447\u044C", "task.music": "\u041C\u0443\u0437\u044B\u043A\u0430", "limits.title": "\u0412\u0430\u0448\u0438 \u043B\u0438\u043C\u0438\u0442\u044B \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u0438\u0445", "limits.hint": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0431\u043E\u0442\u044B \u0418\u0418 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u0438\u0445. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C \u2014 \u0431\u0435\u0437 \u043B\u0438\u043C\u0438\u0442\u0430. \u041F\u0440\u0438 \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u0438 \u043B\u0438\u043C\u0438\u0442\u0430 \u0432\u0430\u0448\u0438 \u043C\u043E\u0434\u0435\u043B\u0438 \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u044E\u0442 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0442\u044C\u0441\u044F \u0434\u043E \u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u0435\u0440\u0438\u043E\u0434\u0430.", "limits.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043B\u0438\u043C\u0438\u0442\u044B", "limits.requests": "\u0417\u0430\u043F\u0440\u043E\u0441\u044B", "limits.tokens": "\u0422\u043E\u043A\u0435\u043D\u044B", "limits.used": "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u043E", "limits.day": "\u0412 \u0434\u0435\u043D\u044C", "limits.week": "\u0412 \u043D\u0435\u0434\u0435\u043B\u044E", "limits.month": "\u0412 \u043C\u0435\u0441\u044F\u0446", "limits.none": "\u0431\u0435\u0437 \u043B\u0438\u043C\u0438\u0442\u0430", "limits.usage": "{requests} \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \xB7 {tokens} \u0442\u043E\u043A\u0435\u043D\u043E\u0432", "limits.saved": "\u041B\u0438\u043C\u0438\u0442\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B.", "tip.models.engine": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 BitPull \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u0434\u0432\u0438\u0436\u043E\u043A Lemonade, \u0447\u0442\u043E\u0431\u044B \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043C\u043E\u0433 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u0438 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439, \u0440\u0435\u0447\u0438 \u0438 \u043C\u0443\u0437\u044B\u043A\u0438.", "tip.models.download": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 {model} ({size} \u0413\u0411) \u043D\u0430 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0442\u044C \u0435\u0433\u043E \u0434\u0440\u0443\u0433\u0438\u043C. \u041F\u043E\u0437\u0436\u0435 \u0435\u0451 \u043C\u043E\u0436\u043D\u043E \u0443\u0434\u0430\u043B\u0438\u0442\u044C.", "tip.limits.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442 \u0434\u043D\u0435\u0432\u043D\u044B\u0435, \u043D\u0435\u0434\u0435\u043B\u044C\u043D\u044B\u0435 \u0438 \u043C\u0435\u0441\u044F\u0447\u043D\u044B\u0435 \u043B\u0438\u043C\u0438\u0442\u044B \u0440\u0430\u0431\u043E\u0442\u044B \u0418\u0418 \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u0438\u0445.", "lend.visible": "\u2713 \u0421\u0435\u0442\u044C \u0432\u0438\u0434\u0438\u0442 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440: {cpus} CPU, {ram} \u0413\u0411 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u0434\u0440\u0443\u0433\u0438\u043C.", "lend.invisible": "\u0421\u0435\u0442\u044C \u043F\u043E\u043A\u0430 \u043D\u0435 \u0432\u0438\u0434\u0438\u0442 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432: \u043F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435 \u0434\u043E \u043C\u0438\u043D\u0443\u0442\u044B; \u0435\u0441\u043B\u0438 \u0442\u0430\u043A \u0438 \u043E\u0441\u0442\u0430\u043D\u0435\u0442\u0441\u044F, \u043F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0443.", "lend.unusable": "\u26A0 \u042D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043F\u043E\u043A\u0430 \u043D\u0438\u043A\u0442\u043E \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C: \u0437\u0434\u0435\u0441\u044C \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0442\u044C\u0441\u044F \u043D\u0438 \u043E\u0434\u043D\u0430 \u0437\u0430\u0434\u0430\u0447\u0430. {reason}", "lend.unusable.docker": "Docker \u043D\u0435 \u043F\u0440\u043E\u0445\u043E\u0434\u0438\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0443 \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u0438 BitPull: \u0441\u043C. \xAB\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\xBB.", "lend.unusable.off": "\u0417\u0430\u0434\u0430\u0447\u0438 \u0432 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0430\u0445 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u044B \u0438 \u043D\u0438 \u043E\u0434\u043D\u0430 \u043C\u043E\u0434\u0435\u043B\u044C \u0418\u0418 \u043D\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430: \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \xAB\u0417\u0430\u0434\u0430\u0447\u0438 \u0432 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0430\u0445\xBB \u0438\u043B\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043C\u043E\u0434\u0435\u043B\u044C.", "lend.docker_login": "Docker \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0437\u044B: \u0435\u0433\u043E \u0432\u0445\u043E\u0434 \u0432 Docker Hub \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u0435\u043D. \u0412 Docker Desktop \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \u043D\u0430 \u0441\u0432\u043E\u0439 \u0430\u043A\u043A\u0430\u0443\u043D\u0442 (\u0432\u0432\u0435\u0440\u0445\u0443 \u0441\u043F\u0440\u0430\u0432\u0430) \u2192 Sign out, \u0437\u0430\u0442\u0435\u043C \u0432\u043E\u0439\u0434\u0438\u0442\u0435 \u0441\u043D\u043E\u0432\u0430 \u0438\u043B\u0438 \u043E\u0441\u0442\u0430\u0432\u0430\u0439\u0442\u0435\u0441\u044C \u0431\u0435\u0437 \u0432\u0445\u043E\u0434\u0430. \u041F\u043E\u0441\u043B\u0435 \u044D\u0442\u043E\u0433\u043E \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0441\u043D\u043E\u0432\u0430\xBB.", "lend.off_hint": "\u041F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043E: \u043E\u0442\u043C\u0435\u0442\u044C\u0442\u0435 \xAB{enabled}\xBB \u0432 \xAB{rules}\xBB \u043D\u0438\u0436\u0435 \u0438 \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB{save}\xBB. (\xAB\u041F\u0430\u0443\u0437\u0430 / \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C\xBB \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442 \u0443\u0436\u0435 \u0432\u043A\u043B\u044E\u0447\u0451\u043D\u043D\u043E\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435.)", "lend.low_memory": "\u041F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442\u0441\u044F \u0432\u0441\u0435\u0433\u043E {mb} \u041C\u0411 \u043F\u0430\u043C\u044F\u0442\u0438: \u043F\u043E\u043C\u0435\u0441\u0442\u0438\u0442\u0441\u044F \u043C\u0430\u043B\u043E \u0437\u0430\u0434\u0430\u0447. \u0412 \xAB{rules}\xBB \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \xAB{memory}\xBB, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 4096 (= 4 \u0413\u0411), \u0438 \u043D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB{save}\xBB.", "rules.awake": "\u041D\u0435 \u0437\u0430\u0441\u044B\u043F\u0430\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F", "rules.awake.help": "\u041F\u043E\u043A\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043B\u044F \u043A\u043E\u0433\u043E-\u0442\u043E, \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043D\u0435 \u0443\u0445\u043E\u0434\u0438\u0442 \u0432 \u0441\u043E\u043D (\u044D\u043A\u0440\u0430\u043D \u0432\u0441\u0451 \u0440\u0430\u0432\u043D\u043E \u043C\u043E\u0436\u0435\u0442 \u0433\u0430\u0441\u043D\u0443\u0442\u044C). \u041F\u043E\u0442\u043E\u043C \u0437\u0430\u0441\u044B\u043F\u0430\u0435\u0442 \u043A\u0430\u043A \u043E\u0431\u044B\u0447\u043D\u043E. \u0417\u0430\u0434\u0430\u0447\u0438 \u043D\u0435 \u043F\u0440\u0435\u0440\u044B\u0432\u0430\u044E\u0442\u0441\u044F.", "ask.wait": "\u0416\u0434\u0430\u0442\u044C \u0434\u043E (\u043C\u0438\u043D\u0443\u0442)", "ask.wait.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", "ask.wait.saved": "\u041E\u0442\u0432\u0435\u0442\u044B \u0431\u0443\u0434\u0443\u0442 \u043E\u0436\u0438\u0434\u0430\u0442\u044C\u0441\u044F \u0434\u043E {n} \u043C\u0438\u043D\u0443\u0442.", "ask.wait.range": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0447\u0438\u0441\u043B\u043E \u043C\u0438\u043D\u0443\u0442 \u043E\u0442 1 \u0434\u043E 120.", "tip.wait": "\u0421\u043A\u043E\u043B\u044C\u043A\u043E \u0436\u0434\u0430\u0442\u044C \u043E\u0442\u0432\u0435\u0442\u0430 \u043C\u043E\u0434\u0435\u043B\u0435\u0439 \u0418\u0418 \u0441\u0435\u0442\u0438. \u041C\u043E\u0434\u0435\u043B\u0438 \u043D\u0430 \u0447\u0443\u0436\u043E\u043C \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0440\u0435 \u043C\u043E\u0433\u0443\u0442 \u043E\u0442\u0432\u0435\u0447\u0430\u0442\u044C \u043C\u0438\u043D\u0443\u0442\u0430\u043C\u0438. \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043C\u043E\u0436\u0435\u0442 \u0438 \u0432\u0430\u0448 \u0418\u0418.", "plan.month": "/\u043C\u0435\u0441.", "plan.free.1": "\u041E\u0431\u0449\u0438\u0435 \u0437\u043D\u0430\u043D\u0438\u044F", "plan.free.2": "\u0412\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u0437\u0430 \u043A\u0440\u0435\u0434\u0438\u0442\u044B, \u0437\u0430\u0440\u0430\u0431\u043E\u0442\u0430\u043D\u043D\u044B\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043C \u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432", "plan.free.3": "\u0411\u0430\u043B\u0430\u043D\u0441 \u0434\u043E \u221220 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432", "plan.base.1": "80 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432 \u043A\u0430\u0436\u0434\u044B\u0439 \u043C\u0435\u0441\u044F\u0446", "plan.base.2": "\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 GPU \u0438 \u0441\u0440\u0435\u0434\u043D\u0438\u0435 \u043C\u043E\u0434\u0435\u043B\u0438", "plan.base.3": "\u0411\u0430\u043B\u0430\u043D\u0441 \u0434\u043E \u2212100 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432", "plan.pro.1": "200 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432 \u043A\u0430\u0436\u0434\u044B\u0439 \u043C\u0435\u0441\u044F\u0446", "plan.pro.2": "\u041D\u0430\u0438\u0432\u044B\u0441\u0448\u0438\u0439 \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442, \u0432\u0441\u0435 GPU \u0438 \u0431\u043E\u043B\u044C\u0448\u0438\u0435 \u043C\u043E\u0434\u0435\u043B\u0438", "plan.pro.3": "\u0411\u0430\u043B\u0430\u043D\u0441 \u0434\u043E \u2212500 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432", "plans.current": "\u0412\u0430\u0448 \u0442\u0430\u0440\u0438\u0444", "plans.choose": "\u0412\u044B\u0431\u0440\u0430\u0442\u044C {plan}", "plans.renew": "\u041F\u0440\u043E\u0434\u043B\u0435\u0432\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u0436\u0434\u044B\u0439 \u043C\u0435\u0441\u044F\u0446; \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043C\u043E\u0436\u043D\u043E \u0432 \u043B\u044E\u0431\u043E\u0439 \u043C\u043E\u043C\u0435\u043D\u0442, \u0442\u0430\u0440\u0438\u0444 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043E \u043A\u043E\u043D\u0446\u0430 \u043E\u043F\u043B\u0430\u0447\u0435\u043D\u043D\u043E\u0433\u043E \u043F\u0435\u0440\u0438\u043E\u0434\u0430", "plans.recharge.title": "\u041F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432", "plans.recharge.1": "{n} \u043A\u0440\u0435\u0434\u0438\u0442\u043E\u0432 \u043D\u0430 \u0432\u0430\u0448 \u0431\u0430\u043B\u0430\u043D\u0441", "plans.recharge.2": "\u0420\u0430\u0437\u043E\u0432\u044B\u0439 \u043F\u043B\u0430\u0442\u0451\u0436, \u0431\u0435\u0437 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0438", "plans.recharge.3": "\u041A\u0440\u0435\u0434\u0438\u0442\u044B \u043D\u0435 \u0441\u0433\u043E\u0440\u0430\u044E\u0442", "plans.summary": "\u0412\u044B \u043F\u043E\u043A\u0443\u043F\u0430\u0435\u0442\u0435", "plans.pay": "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0439 \u043E\u043F\u043B\u0430\u0442\u0435", "plans.cancel": "\u041E\u0442\u043C\u0435\u043D\u0430", "plans.off": "\u041F\u043B\u0430\u0442\u0435\u0436\u0438 \u043F\u043E\u043A\u0430 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u044B.", "account.line": "\u0410\u043A\u043A\u0430\u0443\u043D\u0442: {email}", "account.via.email": "email \u0438 \u043F\u0430\u0440\u043E\u043B\u044C", "logout.button": "\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u0430\u043A\u043A\u0430\u0443\u043D\u0442\u0430", "logout.confirm": "\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 {email} \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435? \u0421\u0434\u0430\u0447\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432 \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F, \u043F\u043E\u043A\u0430 \u0432\u044B \u0441\u043D\u043E\u0432\u0430 \u043D\u0435 \u0432\u043E\u0439\u0434\u0451\u0442\u0435. \u041F\u043E\u0442\u043E\u043C \u043C\u043E\u0436\u043D\u043E \u0432\u043E\u0439\u0442\u0438 \u0432 \u0434\u0440\u0443\u0433\u043E\u0439 \u0430\u043A\u043A\u0430\u0443\u043D\u0442; \u043F\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0440\u0435\u0434\u0438\u0442\u044B \u0434\u0430\u044E\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0434\u0438\u043D \u0440\u0430\u0437 \u043D\u0430 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440.", "logout.yes": "\u0412\u044B\u0439\u0442\u0438", "logout.done": "\u0412\u044B \u0432\u044B\u0448\u043B\u0438 \u0438\u0437 \u0430\u043A\u043A\u0430\u0443\u043D\u0442\u0430 \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435. \u0427\u0442\u043E\u0431\u044B \u0441\u043D\u043E\u0432\u0430 \u0432\u043E\u0439\u0442\u0438, \u0432 \u0442\u043E\u0442 \u0436\u0435 \u0438\u043B\u0438 \u0434\u0440\u0443\u0433\u043E\u0439 \u0430\u043A\u043A\u0430\u0443\u043D\u0442, \u043E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 BitPull \u0438\u043B\u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u0435:", "tip.logout": "\u041E\u0442\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u044D\u0442\u043E\u0442 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440 \u043E\u0442 \u0430\u043A\u043A\u0430\u0443\u043D\u0442\u0430, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 \u0447\u0442\u043E\u0431\u044B \u0432\u043E\u0439\u0442\u0438 \u0432 \u0434\u0440\u0443\u0433\u043E\u0439. \u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435.", "tip.logout.yes": "\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0441\u0435\u0430\u043D\u0441 \u043D\u0430 \u044D\u0442\u043E\u043C \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435. \u0421\u0434\u0430\u0447\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432 \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F, \u043F\u043E\u043A\u0430 \u0432\u044B \u0441\u043D\u043E\u0432\u0430 \u043D\u0435 \u0432\u043E\u0439\u0434\u0451\u0442\u0435.", "tip.logout.no": "\u041E\u0441\u0442\u0430\u0442\u044C\u0441\u044F \u0432 \u0430\u043A\u043A\u0430\u0443\u043D\u0442\u0435.", "tip.plans.choose": "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435, \u0446\u0435\u043D\u0443 \u0438 \u0441\u043E\u0441\u0442\u0430\u0432 \u0442\u0430\u0440\u0438\u0444\u0430 \u0434\u043E \u043E\u043F\u043B\u0430\u0442\u044B.", "tip.plans.pay": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043E\u043F\u043B\u0430\u0442\u044B Stripe.", "tip.plans.cancel": "\u0417\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0441\u0432\u043E\u0434\u043A\u0443 \u0431\u0435\u0437 \u043F\u043E\u043A\u0443\u043F\u043A\u0438." }, zh: { "lang.name": "\u4E2D\u6587", "app.title": "BitPull", "locked.text": "\u8BF7\u4ECE BitPull \u5E94\u7528\u6253\u5F00\u63A7\u5236\u9762\u677F\uFF1A\u5176\u94FE\u63A5\u5305\u542B\u8BBF\u95EE\u5BC6\u94A5\u3002", "pill.online": "\u5728\u7EBF", "pill.offline": "\u79BB\u7EBF", "pill.direct": "\u76F4\u8FDE\u5730\u5740", "pill.relay_on": "\u4E2D\u7EE7\u5DF2\u8FDE\u63A5", "pill.relay_off": "\u4E2D\u7EE7\u672A\u8FDE\u63A5", "pill.cached": "{n} \u4E2A\u7F13\u5B58\u526F\u672C", "net.title": "\u5B9E\u65F6\u7F51\u7EDC", "net.online": "{n} \u53F0\u7535\u8111\u5728\u7EBF", "net.lending": "{n} \u53F0\u6B63\u5728\u51FA\u501F", "net.cpu": "{n} \u4E2A CPU \u6838\u5FC3", "net.ram": "{n} GB RAM", "net.gpu": "{n} \u4E2A GPU", "net.models": "{n} \u4E2A AI \u6A21\u578B", "net.jobs": "{n} \u4E2A\u4EFB\u52A1\u8FD0\u884C\u4E2D", "credits.title": "\u79EF\u5206\u4F59\u989D", "credits.plan": "{plan} \u5957\u9910 \xB7 \u6700\u4F4E\u53EF\u81F3 {n}", "plan.free": "\u514D\u8D39", "plan.base": "\u57FA\u7840", "plan.pro": "\u4E13\u4E1A", "buy.base": "\u57FA\u7840\u7248 \u20AC4.50", "buy.pro": "\u4E13\u4E1A\u7248 \u20AC9.90", "buy.recharge": "\u5145\u503C \u20AC5", "buy.ok": "\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u4ED8\u6B3E\u9875\u9762\u3002", "lend.title": "\u51FA\u501F\u8FD9\u53F0\u7535\u8111", "lend.hint": "\u4EFB\u52A1\u5728\u9694\u79BB\u6C99\u7BB1\u4E2D\u7AEF\u5230\u7AEF\u52A0\u5BC6\u8FD0\u884C\uFF0C\u65E0\u6CD5\u8BBF\u95EE\u4F60\u7684\u6587\u4EF6\u3002\u4F60\u53EF\u4EE5\u8D5A\u53D6\u79EF\u5206\u3002", "lend.state.off": "\u5DF2\u5173\u95ED", "lend.state.waiting": "\u7B49\u5F85\u4E2D", "lend.state.working": "\u5DE5\u4F5C\u4E2D", "lend.reason.lending_off": "\u51FA\u501F\u5DF2\u5173\u95ED", "lend.reason.paused": "\u5DF2\u6682\u505C", "lend.reason.outside_hours": "\u4E0D\u5728\u4F60\u8BBE\u5B9A\u7684\u65F6\u6BB5\u5185", "lend.reason.on_battery": "\u6B63\u5728\u4F7F\u7528\u7535\u6C60", "lend.reason.computer_in_use": "\u4F60\u6B63\u5728\u4F7F\u7528\u7535\u8111", "lend.reason.no_jobs": "\u961F\u5217\u4E2D\u6CA1\u6709\u4EFB\u52A1", "lend.running": "\u81EA {time} \u8D77\u8FD0\u884C {kind} \u4EFB\u52A1", "lend.detail": "{reason} \xB7 \u5DF2\u5B8C\u6210 {n} \u4E2A\u4EFB\u52A1 \xB7 \u63D0\u4F9B {cpus} \u4E2A CPU\u3001{ram} GB", "lend.detail.sandbox": "\uFF0C\u6C99\u7BB1 {name}", "lend.detail.models": "\uFF0C{n} \u4E2A\u6A21\u578B", "lend.pause": "\u6682\u505C", "lend.resume": "\u6062\u590D", "lend.paused_ok": "\u51FA\u501F\u5DF2\u6682\u505C\u3002\u6B63\u5728\u8FD0\u884C\u7684\u4EFB\u52A1\u5DF2\u8F6C\u4EA4\u7ED9\u53E6\u4E00\u53F0\u7535\u8111\u3002", "lend.resumed_ok": "\u51FA\u501F\u5DF2\u6062\u590D\u3002", "setup.title": "\u8BBE\u7F6E\u8FD9\u53F0\u7535\u8111", "setup.hint": "\u8FD9\u53F0\u7535\u8111\u51FA\u501F\u6240\u9700\u7684\u7EC4\u4EF6\u3002\u4F7F\u7528\u7F51\u7EDC\u5219\u65E0\u9700\u5176\u4ED6\u4EFB\u4F55\u4E1C\u897F\u3002\u5B89\u88C5\u7A0B\u5E8F\u6765\u81EA\u5B98\u65B9\u7F51\u7AD9\uFF0C\u7CFB\u7EDF\u4F1A\u8BF7\u4F60\u786E\u8BA4\u3002", "setup.checking": "\u68C0\u67E5\u4E2D\u2026", "setup.docker.help": "\u5728\u9694\u79BB\u6C99\u7BB1\u4E2D\u8FD0\u884C\u4ED6\u4EBA\u7684\u4EFB\u52A1\u3002\u5BB9\u5668\u4EFB\u52A1\u9700\u8981\u5B83\u3002\u4E2A\u4EBA\u548C\u5C0F\u578B\u4F01\u4E1A\u53EF\u514D\u8D39\u4F7F\u7528\u3002", "setup.docker.download": "\u4E0B\u8F7D Docker", "setup.docker.start": "\u542F\u52A8 Docker", "setup.apple.title": "Apple Container\uFF08\u53EF\u9009\uFF09", "setup.apple.help": "\u66F4\u5F3A\u7684\u9694\u79BB\uFF1A\u6BCF\u4E2A\u4EFB\u52A1\u8FD0\u884C\u5728\u72EC\u7ACB\u7684\u865A\u62DF\u673A\u4E2D\u3002\u53EF\u9009\uFF1B\u8D77\u6B65\u7528 Docker \u5C31\u591F\u4E86\u3002", "setup.apple.get": "\u83B7\u53D6 Apple Container", "setup.ollama.help": "\u8FD0\u884C\u5F00\u653E AI \u6A21\u578B\uFF08Qwen\u3001Llama\u3001Mistral\u2026\uFF09\u3002\u51FA\u501F AI \u6A21\u578B\u9700\u8981\u5B83\u3002", "setup.ollama.download": "\u4E0B\u8F7D Ollama", "setup.ollama.start": "\u542F\u52A8 Ollama", "setup.model.title": "AI \u6A21\u578B", "setup.model.help": "\u8FD9\u53F0\u7535\u8111\u5411\u4ED6\u4EBA\u63D0\u4F9B\u7684\u6A21\u578B\u3002\u5BF9\u4E8E {ram} GB \u5185\u5B58\uFF0C\u63A8\u8350\uFF1A{model}\u3002", "setup.model.download": "\u4E0B\u8F7D {model}\uFF08{size} GB\uFF09", "setup.model.none": "\u6682\u65E0", "setup.model.need_ollama": "\u8BF7\u5148\u5B89\u88C5\u5E76\u542F\u52A8 Ollama", "setup.nvidia.title": "NVIDIA GPU \u9A71\u52A8\uFF08\u53EF\u9009\uFF09", "setup.nvidia.help": "\u4EC5\u5F53\u8FD9\u53F0\u7535\u8111\u6709\u4F60\u60F3\u51FA\u501F\u7684 NVIDIA \u663E\u5361\u65F6\u9700\u8981\u3002", "setup.nvidia.get": "\u83B7\u53D6 NVIDIA \u9A71\u52A8", "setup.status.running": "\u5DF2\u5B89\u88C5\u5E76\u8FD0\u884C", "setup.status.installed": "\u5DF2\u5B89\u88C5", "setup.status.stopped": "\u5DF2\u5B89\u88C5\uFF0C\u672A\u8FD0\u884C", "setup.status.missing": "\u672A\u5B89\u88C5", "setup.status.found": "\u5DF2\u627E\u5230", "setup.status.not_found": "\u672A\u627E\u5230", "setup.terminal": "\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C\uFF1A", "setup.done": "\u5B8C\u6210", "setup.opened": "\u5B8C\u6210\uFF1A\u5DF2\u6253\u5F00 {file}\uFF0C\u8BF7\u6309\u6B65\u9AA4\u64CD\u4F5C", "setup.recheck": "\u91CD\u65B0\u68C0\u67E5", "setup.ok.download": "\u4E0B\u8F7D\u5DF2\u5F00\u59CB\u3002\u5B8C\u6210\u540E\u5B89\u88C5\u7A0B\u5E8F\u4F1A\u81EA\u52A8\u6253\u5F00\uFF1A\u8BF7\u6309\u5176\u6B65\u9AA4\u64CD\u4F5C\u3002", "setup.ok.start": "\u6B63\u5728\u542F\u52A8\u2026\u6700\u591A\u53EF\u80FD\u9700\u8981\u4E00\u5206\u949F\u3002\u6B64\u5217\u8868\u4F1A\u81EA\u52A8\u66F4\u65B0\u3002", "setup.ok.pull": "\u6A21\u578B\u4E0B\u8F7D\u5DF2\u5F00\u59CB\u3002\u8FDB\u5EA6\u663E\u793A\u5728\u4E0A\u65B9\u3002", "setup.ok.page": "\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u9875\u9762\u3002", "setup.ok.recheck": "\u5DF2\u91CD\u65B0\u68C0\u67E5\u3002", "rules.title": "\u51FA\u501F\u89C4\u5219", "rules.enabled": "\u5F00\u542F\u51FA\u501F", "rules.enabled.help": "\u603B\u5F00\u5173\u3002\u5173\u95ED\u540E\uFF0C\u8FD9\u53F0\u7535\u8111\u7EDD\u4E0D\u8FD0\u884C\u4ED6\u4EBA\u7684\u4EFB\u52A1\u3002\u4F60\u4ECD\u53EF\u81EA\u5DF1\u4F7F\u7528\u7F51\u7EDC\u3002", "rules.cpus": "\u6700\u5927 CPU \u6570", "rules.cpus.help": "\u4E00\u4E2A\u4EFB\u52A1\u6700\u591A\u53EF\u4F7F\u7528\u7684\u5904\u7406\u5668\u6838\u5FC3\u6570\u3002\u4F8B\u5982\uFF1A\u5728 8 \u6838\u7535\u8111\u4E0A\u8BBE\u4E3A 2\uFF0C\u4F1A\u4E3A\u4F60\u4FDD\u7559 6 \u4E2A\u6838\u5FC3\u3002", "rules.memory": "\u6700\u5927\u5185\u5B58\uFF08MB\uFF09", "rules.memory.help": "\u4E00\u4E2A\u4EFB\u52A1\u53EF\u4F7F\u7528\u7684 RAM\uFF0C\u5355\u4F4D\u4E3A MB\uFF081024 MB = 1 GB\uFF09\u3002BitPull \u7EDD\u4E0D\u4F1A\u63D0\u4F9B\u8D85\u8FC7\u8FD9\u53F0\u7535\u8111\u4E00\u534A\u7684\u5185\u5B58\u3002", "rules.gpu": "GPU", "rules.gpu.none": "\u65E0", "rules.gpu.consumer": "\u6D88\u8D39\u7EA7\uFF088\u201312 GB\uFF09", "rules.gpu.high": "\u9AD8\u7AEF\uFF0816\u201324 GB\uFF09", "rules.gpu.datacenter": "\u6570\u636E\u4E2D\u5FC3\u7EA7\uFF0840 GB+\uFF09", "rules.gpu.help": "\u6309\u663E\u5B58\u9009\u62E9\u4F60\u51FA\u501F\u7684\u663E\u5361\u3002\u5982\u679C\u6CA1\u6709\u72EC\u7ACB GPU \u6216\u4E0D\u60F3\u51FA\u501F\uFF0C\u8BF7\u4FDD\u6301\u201C\u65E0\u201D\u3002GPU \u8D5A\u53D6\u7684\u79EF\u5206\u6700\u591A\u3002", "rules.containers": "\u5BB9\u5668\u4EFB\u52A1", "rules.containers.help": "\u5728\u65E0\u7F51\u7EDC\u3001\u65E0\u6CD5\u8BBF\u95EE\u4F60\u6587\u4EF6\u7684\u6C99\u7BB1\u4E2D\u4E3A\u4ED6\u4EBA\u8FD0\u884C\u6784\u5EFA\u3001\u6D4B\u8BD5\u548C\u811A\u672C\u3002\u9700\u8981 Docker\uFF08\u6216 Apple Container\uFF09\uFF1A\u89C1\u201C\u8BBE\u7F6E\u8FD9\u53F0\u7535\u8111\u201D\u3002", "rules.models": "\u5F00\u653E\u6A21\u578B\uFF08Ollama\uFF09", "rules.models.help": "\u4F7F\u7528\u8FD9\u53F0\u7535\u8111\u4E0A Ollama \u4E2D\u5B89\u88C5\u7684\u5F00\u653E\u6A21\u578B\u56DE\u7B54 AI \u8BF7\u6C42\u3002\u9700\u8981 Ollama \u548C\u81F3\u5C11\u4E00\u4E2A\u6A21\u578B\u3002", "rules.idle": "\u4EC5\u5728\u7A7A\u95F2\u82E5\u5E72\u5206\u949F\u540E", "rules.idle.help": "\u4EC5\u5F53\u4F60\u5728\u8FD9\u4E48\u591A\u5206\u949F\u5185\u672A\u89E6\u78B0\u952E\u76D8\u6216\u9F20\u6807\u65F6\u51FA\u501F\u30020 = \u5DE5\u4F5C\u65F6\u4E5F\u51FA\u501F\u3002", "rules.ac": "\u4EC5\u5728\u63A5\u901A\u7535\u6E90\u65F6", "rules.ac.help": "\u7B14\u8BB0\u672C\u7535\u8111\u4F7F\u7528\u7535\u6C60\u65F6\u505C\u6B62\u51FA\u501F\uFF0C\u907F\u514D\u8017\u7535\u3002", "rules.hours": "\u4EC5\u9650\u8D77\u6B62\u65F6\u95F4\uFF08\u7559\u7A7A = \u59CB\u7EC8\uFF09", "rules.hours.help": "\u4EC5\u5728\u6B64\u65F6\u6BB5\u5185\u51FA\u501F\uFF0C\u91C7\u7528 24 \u5C0F\u65F6\u5236\u3002\u4F8B\u5982\uFF1A22 \u548C 8 = \u665A\u4E0A 10 \u70B9\u5230\u65E9\u4E0A 8 \u70B9\u3002\u4E24\u9879\u90FD\u7559\u7A7A\u5219\u968F\u65F6\u51FA\u501F\u3002", "rules.cache": "\u4ED6\u4EBA\u4ED3\u5E93\u7684\u7F13\u5B58\u526F\u672C", "rules.cache.help": "\u8FD9\u53F0\u7535\u8111\u4E3A\u5176\u4ED6\u7528\u6237\u4FDD\u5B58\u591A\u5C11\u4E2A\u516C\u5F00\u4ED3\u5E93\u7684\u526F\u672C\uFF0C\u4F7F\u5176\u5728\u4F5C\u8005\u79BB\u7EBF\u65F6\u4ECD\u53EF\u7528\u3002\u5360\u7528\u5C11\u91CF\u78C1\u76D8\u7A7A\u95F4\u5E76\u8D5A\u53D6\u79EF\u5206\u30020 = \u4E0D\u4FDD\u5B58\u3002", "rules.save": "\u4FDD\u5B58\u89C4\u5219", "rules.saved": "\u89C4\u5219\u5DF2\u4FDD\u5B58\uFF0C\u51E0\u79D2\u5185\u751F\u6548\u3002", "rules.hours_both": "\u8BF7\u586B\u5199\u4E24\u4E2A\u65F6\u95F4\uFF0C\u6216\u90FD\u7559\u7A7A\u4EE5\u968F\u65F6\u51FA\u501F\u3002", "folders.title": "\u5DF2\u6388\u6743\u6587\u4EF6\u5939", "folders.hint": "BitPull \u53EA\u8BFB\u53D6\u8FD9\u4E9B\u6587\u4EF6\u5939\u3002\u53D1\u5E03\u6587\u4EF6\u5939\u9700\u8981\u5B8C\u6574\u7684 bitpull.json\u3002", "folders.placeholder": "/Users/you/projects/my-library", "folders.add": "\u6388\u6743", "folders.none": "\u6CA1\u6709\u5DF2\u6388\u6743\u7684\u6587\u4EF6\u5939\u3002", "folders.draft": "\u8349\u7A3F", "folders.publish": "\u53D1\u5E03", "folders.remove": "\u79FB\u9664", "folders.need_path": "\u8BF7\u5148\u586B\u5199\u6587\u4EF6\u5939\u7684\u5B8C\u6574\u8DEF\u5F84\uFF0C\u4F8B\u5982 /Users/you/projects/my-library\u3002", "folders.added": "\u6587\u4EF6\u5939\u5DF2\u6388\u6743\u3002", "folders.removed": "\u6587\u4EF6\u5939\u5DF2\u79FB\u9664\uFF0CBitPull \u4E0D\u518D\u8BFB\u53D6\u5B83\u3002", "folders.drafted": "\u8349\u7A3F\u5DF2\u5C31\u7EEA\uFF1A\u627E\u5230 {n} \u4E2A\u6587\u4EF6\u3002\u8BA9\u4F60\u7684 AI \u586B\u5199\u6458\u8981\u548C\u63CF\u8FF0\uFF08prepare_publish \u5DE5\u5177\uFF09\uFF0C\u7136\u540E\u70B9\u51FB\u201C\u53D1\u5E03\u201D\u3002", "folders.published": "\u5DF2\u53D1\u5E03\u201C{name}\u201D\uFF0C\u5171 {n} \u4E2A\u6587\u4EF6\u3002", "folders.secrets_in": "\u53D1\u73B0\u4E8E\uFF1A{where}", "folders.line": "{file} \u7B2C {line} \u884C", "repos.title": "\u4F60\u53D1\u5E03\u7684\u4ED3\u5E93", "repos.hint": "\u4F60\u4FEE\u6539\u6587\u4EF6\u540E\u4F1A\u81EA\u52A8\u66F4\u65B0\uFF08\u6BCF 5 \u5206\u949F\uFF09\u3002", "repos.none": "\u6CA1\u6709\u5DF2\u53D1\u5E03\u7684\u4ED3\u5E93\u3002", "repos.withdraw": "\u64A4\u56DE", "repos.withdrawn": "\u4ED3\u5E93\u5DF2\u4ECE\u7F51\u7EDC\u64A4\u56DE\u3002", "ask.title": "\u7F51\u7EDC\u4E0A\u7684\u5F00\u653E\u6A21\u578B", "ask.offers": "\u8FD9\u53F0\u7535\u8111\u63D0\u4F9B\uFF1A{models}\u3002", "ask.offers_none": "\u65E0\u6A21\u578B\uFF08\u5B89\u88C5 Ollama \u5373\u53EF\u63D0\u4F9B\uFF09", "ask.placeholder": "\u5411\u7F51\u7EDC\u4E0A\u7684\u5F00\u653E\u6A21\u578B\u63D0\u95EE\u2026", "ask.small": "\u5C0F", "ask.medium": "\u4E2D", "ask.large": "\u5927", "ask.button": "\u63D0\u95EE", "ask.empty": "\u8BF7\u5148\u8F93\u5165\u95EE\u9898\u3002", "ask.waiting": "\u6B63\u5728\u5BFB\u627E\u6709\u8BE5\u6A21\u578B\u7684\u7535\u8111\u2026\u6700\u591A\u53EF\u80FD\u9700\u8981\u4E00\u5206\u949F\u3002", "ask.credits": "{n} \u79EF\u5206", "tools.title": "\u8FDE\u63A5\u4F60\u7684\u5DE5\u5177", "tools.mcp": "\u5BF9\u4E8E Claude Code \u548C MCP \u5BA2\u6237\u7AEF\uFF0C\u8BF7\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C\uFF1A", "tools.openai": "\u5BF9\u4E8E\u517C\u5BB9 OpenAI \u7684\u5DE5\u5177\uFF1A\u57FA\u7840 URL", "tools.key": "API \u5BC6\u94A5", "tools.show": "\u663E\u793A", "jobs.title": "\u4F60\u6700\u8FD1\u7684\u4EFB\u52A1", "jobs.none": "\u6CA1\u6709\u4EFB\u52A1\u3002", "jobs.model": "\u6A21\u578B", "jobs.container": "\u5BB9\u5668", "jobs.status.queued": "\u6392\u961F\u4E2D", "jobs.status.running": "\u8FD0\u884C\u4E2D", "jobs.status.done": "\u5DF2\u5B8C\u6210", "jobs.status.failed": "\u5931\u8D25", "jobs.status.canceled": "\u5DF2\u53D6\u6D88", "jobs.cost": "{n} \u79EF\u5206", working: "\u5904\u7406\u4E2D\u2026", "err.agent_down": "\u8FD9\u53F0\u7535\u8111\u4E0A\u7684 BitPull \u6CA1\u6709\u54CD\u5E94\u3002\u5B83\u4F1A\u5728 30 \u79D2\u5185\u81EA\u52A8\u91CD\u542F\uFF1A\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002", "err.server": "\u65E0\u6CD5\u8FDE\u63A5 BitPull \u670D\u52A1\u5668\u3002\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u540E\u91CD\u8BD5\u3002", "err.session": "\u63A7\u5236\u9762\u677F\u4F1A\u8BDD\u5DF2\u8FC7\u671F\u3002\u8BF7\u4ECE BitPull \u5E94\u7528\u91CD\u65B0\u6253\u5F00\u3002", "err.billing": "\u4ED8\u6B3E\u529F\u80FD\u5C1A\u672A\u542F\u7528\u3002", "err.no_folder": "\u8FD9\u53F0\u7535\u8111\u4E0A\u4E0D\u5B58\u5728\u6B64\u6587\u4EF6\u5939\u3002\u8BF7\u68C0\u67E5\u8DEF\u5F84\u3002", "err.not_folder": "\u6B64\u8DEF\u5F84\u662F\u6587\u4EF6\uFF0C\u4E0D\u662F\u6587\u4EF6\u5939\u3002", "err.credits": "\u79EF\u5206\u4E0D\u8DB3\u3002", "err.device": "\u8FD9\u53F0\u7535\u8111\u5C1A\u672A\u8FDE\u63A5\u3002\u8BF7\u4FDD\u6301 BitPull \u5E94\u7528\u6253\u5F00\uFF0C\u4E00\u5206\u949F\u540E\u518D\u8BD5\u3002", "err.no_model": "\u76EE\u524D\u7F51\u7EDC\u4E0A\u6CA1\u6709\u7535\u8111\u63D0\u4F9B AI \u6A21\u578B\u3002\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002", "err.invalid": "\u90E8\u5206\u6570\u503C\u65E0\u6548\u3002\u8BF7\u68C0\u67E5\u5404\u5B57\u6BB5\u540E\u91CD\u8BD5\u3002", "tip.lang": "\u5E94\u7528\u7684\u8BED\u8A00\u3002\u4F60\u7684\u9009\u62E9\u4F1A\u4FDD\u5B58\u5728\u8FD9\u53F0\u7535\u8111\u4E0A\u3002", "tip.buy.base": "\u6253\u5F00\u57FA\u7840\u5957\u9910\u7684\u5B89\u5168\u4ED8\u6B3E\u9875\u9762\uFF1A\u6BCF\u6708 \u20AC4.50\uFF0C\u6BCF\u6708\u83B7\u5F97 80 \u79EF\u5206\u3002\u4F60\u53EF\u4EE5\u968F\u65F6\u53D6\u6D88\u3002", "tip.buy.pro": "\u6253\u5F00\u4E13\u4E1A\u5957\u9910\u7684\u5B89\u5168\u4ED8\u6B3E\u9875\u9762\uFF1A\u6BCF\u6708 \u20AC9.90\uFF0C\u6BCF\u6708\u83B7\u5F97 200 \u79EF\u5206\uFF0C\u4EAB\u6709\u6700\u9AD8\u4F18\u5148\u7EA7\u5E76\u53EF\u4F7F\u7528\u6240\u6709 GPU\u3002\u4F60\u53EF\u4EE5\u968F\u65F6\u53D6\u6D88\u3002", "tip.buy.recharge": "\u6253\u5F00\u5B89\u5168\u4ED8\u6B3E\u9875\u9762\uFF0C\u4E00\u6B21\u6027\u8D2D\u4E70 80 \u79EF\u5206\uFF0C\u4EF7\u683C \u20AC5\u3002\u79EF\u5206\u6C38\u4E0D\u8FC7\u671F\u3002", "tip.pause": "\u7ACB\u5373\u505C\u6B62\u51FA\u501F\u3002\u6B64\u523B\u6B63\u5728\u8FD0\u884C\u7684\u4EFB\u52A1\u4F1A\u8F6C\u4EA4\u7ED9\u53E6\u4E00\u53F0\u7535\u8111\u3002\u518D\u6309\u4E00\u6B21\u5373\u53EF\u6062\u590D\u3002", "tip.resume": "\u6309\u7167\u4F60\u7684\u51FA\u501F\u89C4\u5219\u91CD\u65B0\u5F00\u59CB\u51FA\u501F\u3002", "tip.rules.save": "\u4FDD\u5B58\u4E0A\u65B9\u7684\u51FA\u501F\u89C4\u5219\u3002\u51E0\u79D2\u5185\u751F\u6548\uFF1B\u5728\u4F60\u6309\u4E0B\u6B64\u6309\u94AE\u4E4B\u524D\u4E0D\u4F1A\u6709\u4EFB\u4F55\u53D8\u5316\u3002", "tip.folder.add": "\u5141\u8BB8 BitPull \u8BFB\u53D6\u5DE6\u4FA7\u586B\u5199\u7684\u6587\u4EF6\u5939\u3002\u6388\u6743\u6587\u4EF6\u5939\u4EE5\u5916\u7684\u6587\u4EF6\u6C38\u8FDC\u4E0D\u4F1A\u88AB\u8BFB\u53D6\u6216\u5171\u4EAB\u3002", "tip.folder.draft": "\u5728\u6587\u4EF6\u5939\u4E2D\u521B\u5EFA bitpull.json\uFF1A\u5217\u51FA\u5176\u4E2D\u7684\u6587\u4EF6\uFF0C\u5E76\u7559\u51FA\u7A7A\u767D\u63CF\u8FF0\u4F9B\u4F60\u7684 AI \u586B\u5199\u3002\u6B64\u65F6\u5C1A\u672A\u53D1\u5E03\u4EFB\u4F55\u5185\u5BB9\u3002", "tip.folder.publish": "\u5C06\u6B64\u6587\u4EF6\u5939\u4F5C\u4E3A\u516C\u5F00\u4ED3\u5E93\u5171\u4EAB\u5230\u7F51\u7EDC\u4E0A\uFF0C\u5E76\u7531\u8FD9\u53F0\u7535\u8111\u7B7E\u540D\u3002\u5982\u679C\u5728\u6587\u4EF6\u4E2D\u53D1\u73B0\u5BC6\u94A5\u6216\u5BC6\u7801\uFF0C\u5C06\u963B\u6B62\u53D1\u5E03\u3002", "tip.folder.remove": "BitPull \u5C06\u505C\u6B62\u8BFB\u53D6\u6B64\u6587\u4EF6\u5939\u3002\u4ECE\u4E2D\u5DF2\u53D1\u5E03\u7684\u4ED3\u5E93\u4F1A\u4FDD\u6301\u5728\u7EBF\uFF0C\u76F4\u5230\u4F60\u5C06\u5176\u64A4\u56DE\u3002", "tip.repo.withdraw": "\u5C06\u6B64\u4ED3\u5E93\u4ECE\u7F51\u7EDC\u4E2D\u79FB\u9664\u3002\u5176\u4ED6\u7528\u6237\u5C06\u65E0\u6CD5\u518D\u627E\u5230\u6216\u4E0B\u8F7D\u5B83\u3002\u4F60\u7684\u6587\u4EF6\u4ECD\u4FDD\u7559\u5728\u4F60\u7684\u7535\u8111\u4E0A\u3002", "tip.ask": "\u5C06\u4F60\u7684\u95EE\u9898\u4EE5\u7AEF\u5230\u7AEF\u52A0\u5BC6\u65B9\u5F0F\u53D1\u9001\u7ED9\u7F51\u7EDC\u4E0A\u4E00\u53F0\u8FD0\u884C\u5F00\u653E AI \u6A21\u578B\u7684\u7535\u8111\u3002\u9700\u8981\u82B1\u8D39\u5C11\u91CF\u79EF\u5206\u3002", "tip.tier": "\u6A21\u578B\u5927\u5C0F\uFF1A\u5C0F\u6A21\u578B\u901F\u5EA6\u5FEB\u3001\u82B1\u8D39\u5C11\uFF1B\u5927\u6A21\u578B\u66F4\u806A\u660E\uFF0C\u4F46\u82B1\u8D39\u66F4\u591A\u79EF\u5206\u3002", "tip.show_key": "\u663E\u793A\u8FD9\u53F0\u7535\u8111\u4E0A\u7684 AI \u5DE5\u5177\u4E0E BitPull \u901A\u4FE1\u6240\u7528\u7684\u5BC6\u94A5\u3002\u8BF7\u52FF\u5206\u4EAB\u3002", "tip.setup.download": "\u5C06\u9002\u7528\u4E8E\u8FD9\u53F0\u7535\u8111\u7684 {name} \u5B98\u65B9\u5B89\u88C5\u7A0B\u5E8F\u4E0B\u8F7D\u5230\u4F60\u7684\u201C\u4E0B\u8F7D\u201D\u6587\u4EF6\u5939\u5E76\u6253\u5F00\u3002\u6309\u7167\u5176\u4E2D\u7684\u6B65\u9AA4\u5B8C\u6210\u5B89\u88C5\u3002", "tip.setup.start": "\u542F\u52A8 {name}\u3002\u5B83\u5DF2\u5B89\u88C5\u5728\u8FD9\u53F0\u7535\u8111\u4E0A\uFF0C\u4F46\u5C1A\u672A\u8FD0\u884C\u3002", "tip.setup.pull": "\u5C06 AI \u6A21\u578B {model}\uFF08{size} GB\uFF09\u4E0B\u8F7D\u5230 Ollama \u4E2D\uFF0C\u8FD9\u6837\u8FD9\u53F0\u7535\u8111\u5C31\u80FD\u628A\u5B83\u63D0\u4F9B\u7ED9\u5176\u4ED6\u4EBA\u3002", "tip.setup.open": "\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00 {name} \u7684\u5B98\u65B9\u9875\u9762\u3002", "tip.setup.recheck": "\u91CD\u65B0\u68C0\u67E5\u8FD9\u53F0\u7535\u8111\u4E0A\u5DF2\u5B89\u88C5\u548C\u6B63\u5728\u8FD0\u884C\u7684\u5185\u5BB9\u3002", "update.title": "\u5E94\u7528\u66F4\u65B0", "update.current": "\u5DF2\u5B89\u88C5\u7248\u672C\uFF1A{v}", "update.latest": "\u6700\u65B0\u7248\u672C\uFF1A{v}", "update.button": "\u68C0\u67E5\u66F4\u65B0", "update.install": "\u7ACB\u5373\u5B89\u88C5\u7248\u672C {v}", "update.available": "\u7248\u672C {v} \u53EF\u7528\u3002", "update.not_in_app": "\u66F4\u65B0\u7531 BitPull \u5E94\u7528\u5B89\u88C5\u3002\u8BF7\u4ECE\u5E94\u7528\u4E2D\u6253\u5F00\u6B64\u63A7\u5236\u9762\u677F\u8FDB\u884C\u66F4\u65B0\u3002", "update.state.requested": "\u6B63\u5728\u8BF7\u6C42\u5E94\u7528\u68C0\u67E5\u2026", "update.state.checking": "\u6B63\u5728\u68C0\u67E5\u66F4\u65B0\u2026", "update.state.up_to_date": "\u4F60\u5DF2\u662F\u6700\u65B0\u7248\u672C\u3002", "update.state.installing": "\u6B63\u5728\u4E0B\u8F7D\u5E76\u5B89\u88C5\u7248\u672C {v}\u2026\u5E94\u7528\u4F1A\u81EA\u52A8\u91CD\u542F\u3002", "update.state.restarting": "\u6B63\u5728\u4EE5\u7248\u672C {v} \u91CD\u542F\u2026", "update.state.error": "\u66F4\u65B0\u5931\u8D25\uFF1A{msg}\u3002\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002", "tip.update": "\u68C0\u67E5\u662F\u5426\u6709\u66F4\u65B0\u7248\u672C\u7684 BitPull\u3002\u5982\u6709\uFF0C\u4F1A\u4E0B\u8F7D\u3001\u9A8C\u8BC1\u7B7E\u540D\u3001\u5B89\u88C5\u5E76\u91CD\u542F\u5E94\u7528\u3002\u51FA\u501F\u4F1A\u6682\u505C\u51E0\u79D2\u949F\u3002", "tools.hint": "\u8BA9\u4F60\u7684 AI \u52A9\u624B\u641C\u7D22\u5171\u4EAB\u4EE3\u7801\uFF0C\u5E76\u4F7F\u7528\u7F51\u7EDC\u4E0A\u7684\u5F00\u653E\u6A21\u578B\u548C\u7535\u8111\u3002\u9009\u62E9\u4F60\u7684\u5DE5\u5177\uFF1A", "tools.connect": "\u8FDE\u63A5", "tools.connected": "\u5DF2\u8FDE\u63A5", "tools.copy": "\u590D\u5236", "tools.copied": "\u5DF2\u590D\u5236\u3002", "tools.installed": "\u5DF2\u5B89\u88C5", "tools.not_found": "\u8FD9\u53F0\u7535\u8111\u4E0A\u672A\u627E\u5230", "tools.done": "\u5B8C\u6210\u3002\u91CD\u542F {name} \u5373\u53EF\u5F00\u59CB\u4F7F\u7528 BitPull\u3002", "tools.manual": "\u624B\u52A8\u6DFB\u52A0\uFF1A", "tools.config_invalid": "{name} \u7684\u8BBE\u7F6E\u6587\u4EF6\u4E0D\u662F\u6709\u6548\u7684 JSON\uFF0C\u56E0\u6B64 BitPull \u6CA1\u6709\u6539\u52A8\u5B83\u3002\u8BF7\u4FEE\u590D\u8BE5\u6587\u4EF6\uFF0C\u6216\u7528\u201C\u590D\u5236\u201D\u624B\u52A8\u6DFB\u52A0 BitPull\u3002", "tip.tools.connect": "\u81EA\u52A8\u5C06 BitPull \u6DFB\u52A0\u5230 {name} \u7684\u8BBE\u7F6E\u4E2D\u3002\u4E4B\u524D\u7684\u8BBE\u7F6E\u4F1A\u5728\u65C1\u8FB9\u4FDD\u7559\u4E00\u4EFD\u5907\u4EFD\u3002", "tip.tools.copy": "\u5C06\u547D\u4EE4\u6216\u8BBE\u7F6E\u590D\u5236\u5230\u526A\u8D34\u677F\uFF0C\u4EE5\u4FBF\u4F60\u81EA\u5DF1\u628A BitPull \u6DFB\u52A0\u5230 {name}\u3002", "models.title": "\u53EF\u5171\u4EAB\u7684 AI \u6A21\u578B", "models.hint": "\u6B64\u7535\u8111\u53EF\u4EE5\u51FA\u501F\u7684\u5404\u7C7B\u5F00\u653E\u6A21\u578B\u3002\u4EC5\u5217\u51FA\u8BB8\u53EF\u8BC1\u5141\u8BB8\u4E3A\u4ED6\u4EBA\u63D0\u4F9B\u670D\u52A1\u7684\u6A21\u578B\u3002\u51FA\u501F\u5F00\u542F\u65F6\uFF0C\u5DF2\u4E0B\u8F7D\u7684\u6A21\u578B\u4F1A\u63D0\u4F9B\u7ED9\u7F51\u7EDC\u3002", "models.engine.title": "\u56FE\u50CF\u3001\u8BED\u97F3\u548C\u97F3\u4E50\u5F15\u64CE", "models.engine.help": "Lemonade\uFF08\u5F00\u6E90\uFF09\uFF1A\u56FE\u50CF\u751F\u6210\u3001\u8BED\u97F3\u8F6C\u6587\u5B57\u3001\u6587\u5B57\u8F6C\u8BED\u97F3\u3001\u97F3\u4E50\u3001\u6587\u6863\u91CD\u6392\u5E8F\u548C\u56FE\u50CF\u653E\u5927\u3002\u5B89\u88C5\u5728 BitPull \u5185\u90E8\uFF0C\u65E0\u9700\u7BA1\u7406\u5458\u6743\u9650\u3002", "models.engine.install": "\u5B89\u88C5\u5F15\u64CE", "models.engine.repair": "\u91CD\u65B0\u5B89\u88C5\u5F15\u64CE", "models.engine.unsupported": "\u6B64\u7535\u8111\u4E0D\u53EF\u7528\uFF08\u9700\u8981 Apple \u82AF\u7247\uFF0C\u6216 Windows/Linux x64\uFF09", "models.need_engine": "\u8BF7\u5148\u5B89\u88C5\u5F15\u64CE", "models.not_here": "\u6B64\u7535\u8111\u4E0D\u53EF\u7528", "models.shared": "\u5DF2\u4E0B\u8F7D \xB7 \u5DF2\u5171\u4EAB", "models.download": "\u4E0B\u8F7D\uFF08{size} GB\uFF09", "models.needs_ram": "\u9700\u8981\u7EA6 {ram} GB \u5185\u5B58\uFF1A\u5728\u6B64\u53EF\u80FD\u8F83\u6162", "models.recommended": "\u63A8\u8350", "models.license": "\u8BB8\u53EF\u8BC1", "models.ok.engine": "\u6B63\u5728\u5B89\u88C5\u5F15\u64CE\u2026", "task.chat": "\u6587\u672C\u548C\u4EE3\u7801", "task.vision": "\u56FE\u50CF \u2192 \u6587\u672C", "task.ocr": "\u6587\u6863\uFF08OCR\uFF09", "task.translate": "\u7FFB\u8BD1", "task.embed": "\u5411\u91CF\u5D4C\u5165\uFF08\u641C\u7D22\uFF09", "task.rerank": "\u91CD\u6392\u5E8F", "task.image": "\u56FE\u50CF\u751F\u6210", "task.upscale": "\u56FE\u50CF\u653E\u5927", "task.stt": "\u8BED\u97F3\u8F6C\u6587\u5B57", "task.tts": "\u6587\u5B57\u8F6C\u8BED\u97F3", "task.music": "\u97F3\u4E50", "limits.title": "\u60A8\u4E3A\u4ED6\u4EBA\u8BBE\u5B9A\u7684\u4E0A\u9650", "limits.hint": "\u6B64\u7535\u8111\u4E3A\u4ED6\u4EBA\u5B8C\u6210\u7684 AI \u5DE5\u4F5C\u91CF\u3002\u7559\u7A7A\u8868\u793A\u4E0D\u8BBE\u4E0A\u9650\u3002\u8FBE\u5230\u4E0A\u9650\u540E\uFF0C\u5728\u4E0B\u4E00\u5468\u671F\u5F00\u59CB\u524D\u4E0D\u518D\u63D0\u4F9B\u60A8\u7684\u6A21\u578B\u3002", "limits.save": "\u4FDD\u5B58\u4E0A\u9650", "limits.requests": "\u8BF7\u6C42\u6570", "limits.tokens": "Token \u6570", "limits.used": "\u5DF2\u7528", "limits.day": "\u6BCF\u5929", "limits.week": "\u6BCF\u5468", "limits.month": "\u6BCF\u6708", "limits.none": "\u4E0D\u8BBE\u4E0A\u9650", "limits.usage": "{requests} \u6B21\u8BF7\u6C42 \xB7 {tokens} \u4E2A token", "limits.saved": "\u4E0A\u9650\u5DF2\u4FDD\u5B58\u3002", "tip.models.engine": "\u5C06\u5F00\u6E90 Lemonade \u5F15\u64CE\u4E0B\u8F7D\u5230 BitPull \u4E2D\uFF0C\u4F7F\u6B64\u7535\u8111\u53EF\u4EE5\u51FA\u501F\u56FE\u50CF\u3001\u8BED\u97F3\u548C\u97F3\u4E50\u6A21\u578B\u3002", "tip.models.download": "\u5C06 {model}\uFF08{size} GB\uFF09\u4E0B\u8F7D\u5230\u6B64\u7535\u8111\uFF0C\u4EE5\u4FBF\u63D0\u4F9B\u7ED9\u4ED6\u4EBA\u3002\u4E4B\u540E\u53EF\u4EE5\u5220\u9664\u3002", "tip.limits.save": "\u4FDD\u5B58\u4E3A\u4ED6\u4EBA\u5B8C\u6210 AI \u5DE5\u4F5C\u7684\u6BCF\u65E5\u3001\u6BCF\u5468\u548C\u6BCF\u6708\u4E0A\u9650\u3002", "lend.visible": "\u2713 \u7F51\u7EDC\u80FD\u770B\u5230\u8FD9\u53F0\u7535\u8111\uFF1A{cpus} \u4E2A CPU\u3001{ram} GB \u53EF\u4F9B\u4ED6\u4EBA\u4F7F\u7528\u3002", "lend.invisible": "\u7F51\u7EDC\u5C1A\u672A\u770B\u5230\u51FA\u501F\uFF1A\u8BF7\u6700\u591A\u7B49\u5F85\u4E00\u5206\u949F\uFF1B\u5982\u679C\u4ECD\u7136\u5982\u6B64\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u3002", "lend.unusable": "\u26A0 \u8FD8\u6CA1\u6709\u4EBA\u80FD\u4F7F\u7528\u8FD9\u53F0\u7535\u8111\uFF1A\u8FD9\u91CC\u65E0\u6CD5\u8FD0\u884C\u4EFB\u4F55\u4EFB\u52A1\u3002{reason}", "lend.unusable.docker": "Docker \u672A\u901A\u8FC7 BitPull \u7684\u9694\u79BB\u68C0\u67E5\uFF1A\u8BF7\u67E5\u770B\u201C\u8BBE\u7F6E\u6B64\u7535\u8111\u201D\u3002", "lend.unusable.off": "\u5BB9\u5668\u4EFB\u52A1\u5DF2\u5173\u95ED\u4E14\u672A\u5B89\u88C5 AI \u6A21\u578B\uFF1A\u8BF7\u5F00\u542F\u201C\u5BB9\u5668\u4EFB\u52A1\u201D\u6216\u4E0B\u8F7D\u4E00\u4E2A\u6A21\u578B\u3002", "lend.docker_login": "Docker \u65E0\u6CD5\u4E0B\u8F7D\u955C\u50CF\uFF0C\u56E0\u4E3A\u5B83\u7684 Docker Hub \u767B\u5F55\u5DF2\u5931\u6548\u3002\u5728 Docker Desktop \u4E2D\u70B9\u51FB\u53F3\u4E0A\u89D2\u7684\u8D26\u6237 \u2192 Sign out\uFF0C\u7136\u540E\u91CD\u65B0\u767B\u5F55\u6216\u4FDD\u6301\u672A\u767B\u5F55\u3002\u4E4B\u540E\u70B9\u51FB\u201C\u91CD\u65B0\u68C0\u67E5\u201D\u3002", "lend.off_hint": "\u51FA\u501F\u5DF2\u5173\u95ED\uFF1A\u8BF7\u5728\u4E0B\u65B9\u201C{rules}\u201D\u4E2D\u52FE\u9009\u201C{enabled}\u201D\u5E76\u70B9\u51FB\u201C{save}\u201D\u3002\uFF08\u6682\u505C / \u7EE7\u7EED\u53EA\u4F1A\u6682\u505C\u5DF2\u5F00\u542F\u7684\u51FA\u501F\u3002\uFF09", "lend.low_memory": "\u53EA\u63D0\u4F9B\u4E86 {mb} MB \u5185\u5B58\uFF1A\u80FD\u8FD0\u884C\u7684\u4EFB\u52A1\u5F88\u5C11\u3002\u8BF7\u5728\u201C{rules}\u201D\u4E2D\u5C06\u201C{memory}\u201D\u8BBE\u4E3A\u4F8B\u5982 4096\uFF08= 4 GB\uFF09\uFF0C\u7136\u540E\u70B9\u51FB\u201C{save}\u201D\u3002", "rules.awake": "\u51FA\u501F\u65F6\u4FDD\u6301\u5524\u9192", "rules.awake.help": "\u5728\u4E3A\u4ED6\u4EBA\u8FD0\u884C\u4EFB\u52A1\u65F6\uFF0C\u8FD9\u53F0\u7535\u8111\u4E0D\u4F1A\u8FDB\u5165\u7761\u7720\uFF08\u5C4F\u5E55\u4ECD\u53EF\u5173\u95ED\uFF09\u3002\u4E4B\u540E\u7167\u5E38\u7761\u7720\u3002\u907F\u514D\u4EFB\u52A1\u88AB\u4E2D\u65AD\u3002", "ask.wait": "\u6700\u591A\u7B49\u5F85\uFF08\u5206\u949F\uFF09", "ask.wait.save": "\u4FDD\u5B58", "ask.wait.saved": "\u5C06\u6700\u591A\u7B49\u5F85 {n} \u5206\u949F\u7684\u56DE\u7B54\u3002", "ask.wait.range": "\u8BF7\u8F93\u5165 1 \u5230 120 \u4E4B\u95F4\u7684\u5206\u949F\u6570\u3002", "tip.wait": "\u7B49\u5F85\u7F51\u7EDC\u4E2D AI \u6A21\u578B\u56DE\u7B54\u7684\u6700\u957F\u65F6\u95F4\u3002\u5728\u4ED6\u4EBA\u5904\u7406\u5668\u4E0A\u8FD0\u884C\u7684\u6A21\u578B\u53EF\u80FD\u9700\u8981\u51E0\u5206\u949F\u3002\u60A8\u7684 AI \u4E5F\u53EF\u4EE5\u4FEE\u6539\u3002", "plan.month": "/\u6708", "plan.free.1": "\u5171\u4EAB\u77E5\u8BC6", "plan.free.2": "\u4F7F\u7528\u51FA\u501F\u6240\u5F97\u79EF\u5206\u8FDB\u884C\u8BA1\u7B97", "plan.free.3": "\u4F59\u989D\u6700\u4F4E\u53EF\u81F3 \u221220 \u79EF\u5206", "plan.base.1": "\u6BCF\u6708 80 \u79EF\u5206", "plan.base.2": "\u6D88\u8D39\u7EA7 GPU \u548C\u4E2D\u578B\u6A21\u578B", "plan.base.3": "\u4F59\u989D\u6700\u4F4E\u53EF\u81F3 \u2212100 \u79EF\u5206", "plan.pro.1": "\u6BCF\u6708 200 \u79EF\u5206", "plan.pro.2": "\u6700\u9AD8\u4F18\u5148\u7EA7\uFF0C\u6240\u6709 GPU \u548C\u5927\u578B\u6A21\u578B", "plan.pro.3": "\u4F59\u989D\u6700\u4F4E\u53EF\u81F3 \u2212500 \u79EF\u5206", "plans.current": "\u4F60\u7684\u5957\u9910", "plans.choose": "\u9009\u62E9 {plan}", "plans.renew": "\u6BCF\u6708\u81EA\u52A8\u7EED\u8BA2\uFF1B\u53EF\u968F\u65F6\u53D6\u6D88\uFF0C\u5957\u9910\u5728\u5DF2\u4ED8\u8D39\u671F\u95F4\u7ED3\u675F\u524D\u4FDD\u6301\u6709\u6548", "plans.recharge.title": "\u79EF\u5206\u5145\u503C", "plans.recharge.1": "{n} \u79EF\u5206\u8BA1\u5165\u4F60\u7684\u4F59\u989D", "plans.recharge.2": "\u4E00\u6B21\u6027\u4ED8\u6B3E\uFF0C\u65E0\u9700\u8BA2\u9605", "plans.recharge.3": "\u79EF\u5206\u4E0D\u4F1A\u8FC7\u671F", "plans.summary": "\u4F60\u6B63\u5728\u8D2D\u4E70", "plans.pay": "\u7EE7\u7EED\u524D\u5F80\u5B89\u5168\u652F\u4ED8", "plans.cancel": "\u53D6\u6D88", "plans.off": "\u652F\u4ED8\u529F\u80FD\u5C1A\u672A\u5F00\u901A\u3002", "account.line": "\u8D26\u6237\uFF1A{email}", "account.via.email": "\u90AE\u7BB1\u548C\u5BC6\u7801", "logout.button": "\u9000\u51FA\u8D26\u6237", "logout.confirm": "\u8981\u5728\u8FD9\u53F0\u7535\u8111\u4E0A\u9000\u51FA {email} \u5417\uFF1F\u5728\u4F60\u91CD\u65B0\u767B\u5F55\u524D\uFF0C\u51FA\u501F\u5C06\u505C\u6B62\u3002\u4E4B\u540E\u4F60\u53EF\u4EE5\u7528\u5176\u4ED6\u8D26\u6237\u767B\u5F55\uFF1B\u6B22\u8FCE\u79EF\u5206\u6BCF\u53F0\u7535\u8111\u53EA\u53D1\u653E\u4E00\u6B21\u3002", "logout.yes": "\u9000\u51FA", "logout.done": "\u4F60\u5DF2\u5728\u8FD9\u53F0\u7535\u8111\u4E0A\u9000\u51FA\u8D26\u6237\u3002\u8981\u91CD\u65B0\u767B\u5F55\uFF08\u540C\u4E00\u8D26\u6237\u6216\u5176\u4ED6\u8D26\u6237\uFF09\uFF0C\u8BF7\u6253\u5F00 BitPull \u5E94\u7528\u6216\u8FD0\u884C\uFF1A", "tip.logout": "\u8BA9\u8FD9\u53F0\u7535\u8111\u9000\u51FA\u8D26\u6237\uFF0C\u4F8B\u5982\u4E3A\u4E86\u7528\u53E6\u4E00\u4E2A\u8D26\u6237\u767B\u5F55\u3002\u4F1A\u5148\u8BF7\u4F60\u786E\u8BA4\u3002", "tip.logout.yes": "\u7ED3\u675F\u8FD9\u53F0\u7535\u8111\u4E0A\u7684\u4F1A\u8BDD\u3002\u5728\u4F60\u91CD\u65B0\u767B\u5F55\u524D\uFF0C\u51FA\u501F\u5C06\u505C\u6B62\u3002", "tip.logout.no": "\u4FDD\u6301\u767B\u5F55\u3002", "tip.plans.choose": "\u4ED8\u6B3E\u524D\u663E\u793A\u5957\u9910\u7684\u540D\u79F0\u3001\u4EF7\u683C\u548C\u5305\u542B\u7684\u5185\u5BB9\u3002", "tip.plans.pay": "\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00 Stripe \u7684\u5B89\u5168\u652F\u4ED8\u9875\u9762\u3002", "tip.plans.cancel": "\u5173\u95ED\u6458\u8981\uFF0C\u4E0D\u8D2D\u4E70\u3002" } };
|
|
42
42
|
}
|
|
43
43
|
});
|
|
44
44
|
|
|
@@ -17639,8 +17639,15 @@ var CoordinatorClient = class {
|
|
|
17639
17639
|
network() {
|
|
17640
17640
|
return this.call("GET", "/public/network");
|
|
17641
17641
|
}
|
|
17642
|
-
checkout(product) {
|
|
17643
|
-
return this.call("POST", "/v1/billing/checkout", { product });
|
|
17642
|
+
checkout(product, lang) {
|
|
17643
|
+
return this.call("POST", "/v1/billing/checkout", { product, lang });
|
|
17644
|
+
}
|
|
17645
|
+
/** Plans with price and what they include (the same the website shows). */
|
|
17646
|
+
plans() {
|
|
17647
|
+
return this.call("GET", "/public/plans");
|
|
17648
|
+
}
|
|
17649
|
+
logout() {
|
|
17650
|
+
return this.call("POST", "/v1/auth/logout", {});
|
|
17644
17651
|
}
|
|
17645
17652
|
};
|
|
17646
17653
|
|
|
@@ -17728,57 +17735,108 @@ async function authorisedFolder(cfg, folder) {
|
|
|
17728
17735
|
// apps/agent/src/control.ts
|
|
17729
17736
|
init_define_BITPULL_UI_I18N();
|
|
17730
17737
|
var import_node_crypto7 = require("node:crypto");
|
|
17731
|
-
var
|
|
17738
|
+
var import_promises16 = require("node:fs/promises");
|
|
17732
17739
|
var import_node_http = require("node:http");
|
|
17733
|
-
var
|
|
17740
|
+
var import_node_path13 = require("node:path");
|
|
17734
17741
|
var import_node_url = require("node:url");
|
|
17735
17742
|
|
|
17743
|
+
// apps/agent/src/devicelogin.ts
|
|
17744
|
+
init_define_BITPULL_UI_I18N();
|
|
17745
|
+
var import_promises5 = require("node:fs/promises");
|
|
17746
|
+
var import_node_os2 = require("node:os");
|
|
17747
|
+
var import_node_path5 = require("node:path");
|
|
17748
|
+
async function logoutComputer(cfg) {
|
|
17749
|
+
if (!cfg.token) return { wasLoggedIn: false };
|
|
17750
|
+
await new CoordinatorClient(cfg.coordinatorUrl, cfg.token).logout().catch(() => void 0);
|
|
17751
|
+
delete cfg.token;
|
|
17752
|
+
await saveConfig(cfg);
|
|
17753
|
+
return { wasLoggedIn: true };
|
|
17754
|
+
}
|
|
17755
|
+
async function startDeviceLogin(cfg, via) {
|
|
17756
|
+
const base = cfg.coordinatorUrl.replace(/\/+$/, "");
|
|
17757
|
+
const res = await fetch(`${base}/public/device/start`, {
|
|
17758
|
+
method: "POST",
|
|
17759
|
+
headers: { "content-type": "application/json" },
|
|
17760
|
+
body: JSON.stringify({ deviceName: `${(0, import_node_os2.hostname)()} (${(0, import_node_os2.platform)()})` }),
|
|
17761
|
+
signal: AbortSignal.timeout(2e4)
|
|
17762
|
+
});
|
|
17763
|
+
const data = await res.json().catch(() => ({}));
|
|
17764
|
+
if (!res.ok || !data.deviceCode) throw new Error(data.error ?? `could not start the login (${res.status})`);
|
|
17765
|
+
if (via && via !== "email") data.verificationUrl = `${data.verificationUrl}&via=${via}`;
|
|
17766
|
+
return data;
|
|
17767
|
+
}
|
|
17768
|
+
async function waitDeviceLogin(cfg, start, signal) {
|
|
17769
|
+
const base = cfg.coordinatorUrl.replace(/\/+$/, "");
|
|
17770
|
+
const end = Date.now() + start.expiresIn * 1e3;
|
|
17771
|
+
while (Date.now() < end && !signal?.aborted) {
|
|
17772
|
+
await new Promise((r2) => setTimeout(r2, start.interval * 1e3));
|
|
17773
|
+
const res = await fetch(`${base}/public/device/token`, {
|
|
17774
|
+
method: "POST",
|
|
17775
|
+
headers: { "content-type": "application/json" },
|
|
17776
|
+
body: JSON.stringify({ deviceCode: start.deviceCode })
|
|
17777
|
+
}).catch(() => null);
|
|
17778
|
+
if (!res) continue;
|
|
17779
|
+
const r = await res.json().catch(() => ({}));
|
|
17780
|
+
if (r.token) return r.token;
|
|
17781
|
+
if (r.status === "denied") throw new Error("The login was denied on the website.");
|
|
17782
|
+
if (r.status === "expired") break;
|
|
17783
|
+
}
|
|
17784
|
+
throw new Error("The code expired. Start the login again.");
|
|
17785
|
+
}
|
|
17786
|
+
async function restartRunningAgent() {
|
|
17787
|
+
try {
|
|
17788
|
+
const { pid } = JSON.parse(await (0, import_promises5.readFile)((0, import_node_path5.join)(bitpullHome(), "agent.json"), "utf8"));
|
|
17789
|
+
if (pid && pid !== process.pid) process.kill(pid);
|
|
17790
|
+
} catch {
|
|
17791
|
+
}
|
|
17792
|
+
}
|
|
17793
|
+
|
|
17736
17794
|
// apps/agent/src/tools.ts
|
|
17737
17795
|
init_define_BITPULL_UI_I18N();
|
|
17738
|
-
var
|
|
17739
|
-
var
|
|
17796
|
+
var import_promises10 = require("node:fs/promises");
|
|
17797
|
+
var import_node_path8 = require("node:path");
|
|
17740
17798
|
|
|
17741
17799
|
// apps/agent/src/aitasks.ts
|
|
17742
17800
|
init_define_BITPULL_UI_I18N();
|
|
17743
17801
|
var import_node_fs2 = require("node:fs");
|
|
17744
|
-
var
|
|
17745
|
-
var
|
|
17802
|
+
var import_promises8 = require("node:fs/promises");
|
|
17803
|
+
var import_node_path7 = require("node:path");
|
|
17746
17804
|
|
|
17747
17805
|
// apps/agent/src/lemonade.ts
|
|
17748
17806
|
init_define_BITPULL_UI_I18N();
|
|
17749
17807
|
var import_node_child_process = require("node:child_process");
|
|
17750
17808
|
var import_node_crypto4 = require("node:crypto");
|
|
17751
17809
|
var import_node_fs = require("node:fs");
|
|
17752
|
-
var
|
|
17753
|
-
var
|
|
17754
|
-
var
|
|
17810
|
+
var import_promises6 = require("node:fs/promises");
|
|
17811
|
+
var import_node_os3 = require("node:os");
|
|
17812
|
+
var import_node_path6 = require("node:path");
|
|
17755
17813
|
var import_node_stream = require("node:stream");
|
|
17756
|
-
var
|
|
17814
|
+
var import_promises7 = require("node:stream/promises");
|
|
17757
17815
|
var LEMONADE_VERSION = "2026.44.1";
|
|
17758
17816
|
var PORT = 13355;
|
|
17759
|
-
function lemonadeAsset(os = (0,
|
|
17817
|
+
function lemonadeAsset(os = (0, import_node_os3.platform)(), cpu = (0, import_node_os3.arch)()) {
|
|
17760
17818
|
const name = os === "darwin" && cpu === "arm64" ? "macos-arm64.tar.gz" : os === "win32" && cpu === "x64" ? "windows-x64.zip" : os === "linux" && cpu === "x64" ? "ubuntu-x64.tar.gz" : null;
|
|
17761
17819
|
if (!name) return null;
|
|
17762
17820
|
const file = `lemonade-embeddable-${LEMONADE_VERSION}-${name}`;
|
|
17763
17821
|
return { url: `https://github.com/lemonade-sdk/lemonade/releases/download/v${LEMONADE_VERSION}/${file}`, file };
|
|
17764
17822
|
}
|
|
17765
|
-
var lemonadeDir = () => (0,
|
|
17823
|
+
var lemonadeDir = () => (0, import_node_path6.join)(bitpullHome(), "runtimes", "lemonade");
|
|
17766
17824
|
async function lemonadeExe() {
|
|
17767
17825
|
const dir = lemonadeDir();
|
|
17768
17826
|
if (!(0, import_node_fs.existsSync)(dir)) return null;
|
|
17769
|
-
const exe = (0,
|
|
17770
|
-
for (const entry of await (0,
|
|
17771
|
-
if (entry.isDirectory() && (0, import_node_fs.existsSync)((0,
|
|
17827
|
+
const exe = (0, import_node_os3.platform)() === "win32" ? "lemond.exe" : "lemond";
|
|
17828
|
+
for (const entry of await (0, import_promises6.readdir)(dir, { withFileTypes: true })) {
|
|
17829
|
+
if (entry.isDirectory() && (0, import_node_fs.existsSync)((0, import_node_path6.join)(dir, entry.name, exe))) return (0, import_node_path6.join)(dir, entry.name, exe);
|
|
17772
17830
|
}
|
|
17773
|
-
return (0, import_node_fs.existsSync)((0,
|
|
17831
|
+
return (0, import_node_fs.existsSync)((0, import_node_path6.join)(dir, exe)) ? (0, import_node_path6.join)(dir, exe) : null;
|
|
17774
17832
|
}
|
|
17775
17833
|
async function installLemonade(onProgress) {
|
|
17776
17834
|
const asset = lemonadeAsset();
|
|
17777
17835
|
if (!asset) throw new Error("Images, speech and music need a Mac with Apple silicon, or Windows/Linux on x64.");
|
|
17778
17836
|
const dir = lemonadeDir();
|
|
17779
|
-
await (0,
|
|
17780
|
-
await (0,
|
|
17781
|
-
const archive = (0,
|
|
17837
|
+
await (0, import_promises6.rm)(dir, { recursive: true, force: true });
|
|
17838
|
+
await (0, import_promises6.mkdir)(dir, { recursive: true });
|
|
17839
|
+
const archive = (0, import_node_path6.join)(dir, asset.file);
|
|
17782
17840
|
const res = await fetch(asset.url, { redirect: "follow" });
|
|
17783
17841
|
if (!res.ok || !res.body) throw new Error(`download failed (${res.status})`);
|
|
17784
17842
|
const total = Number(res.headers.get("content-length") ?? 0);
|
|
@@ -17788,14 +17846,14 @@ async function installLemonade(onProgress) {
|
|
|
17788
17846
|
received += c.length;
|
|
17789
17847
|
if (total) onProgress({ progress: Math.round(received / total * 100), detail: "downloading" });
|
|
17790
17848
|
});
|
|
17791
|
-
await (0,
|
|
17849
|
+
await (0, import_promises7.pipeline)(body, (0, import_node_fs.createWriteStream)(archive));
|
|
17792
17850
|
onProgress({ detail: "unpacking" });
|
|
17793
17851
|
await run("tar", ["-xf", archive, "-C", dir]);
|
|
17794
|
-
await (0,
|
|
17852
|
+
await (0, import_promises6.rm)(archive, { force: true });
|
|
17795
17853
|
const exe = await lemonadeExe();
|
|
17796
17854
|
if (!exe) throw new Error("Lemonade archive did not contain the server");
|
|
17797
|
-
if ((0,
|
|
17798
|
-
if ((0,
|
|
17855
|
+
if ((0, import_node_os3.platform)() !== "win32") await (0, import_promises6.chmod)(exe, 493);
|
|
17856
|
+
if ((0, import_node_os3.platform)() === "darwin") await run("xattr", ["-dr", "com.apple.quarantine", dir]).catch(() => void 0);
|
|
17799
17857
|
}
|
|
17800
17858
|
function run(cmd, args) {
|
|
17801
17859
|
return new Promise((resolve, reject) => {
|
|
@@ -17816,15 +17874,15 @@ var LemonadeServer = class {
|
|
|
17816
17874
|
if (this.running) return true;
|
|
17817
17875
|
const exe = await lemonadeExe();
|
|
17818
17876
|
if (!exe) return false;
|
|
17819
|
-
const pidFile = (0,
|
|
17820
|
-
const stale = Number(await (0,
|
|
17877
|
+
const pidFile = (0, import_node_path6.join)(lemonadeDir(), "lemond.pid");
|
|
17878
|
+
const stale = Number(await (0, import_promises6.readFile)(pidFile, "utf8").catch(() => ""));
|
|
17821
17879
|
if (stale > 0) {
|
|
17822
17880
|
try {
|
|
17823
17881
|
process.kill(stale);
|
|
17824
17882
|
} catch {
|
|
17825
17883
|
}
|
|
17826
17884
|
}
|
|
17827
|
-
const proc = (0, import_node_child_process.spawn)(exe, [(0,
|
|
17885
|
+
const proc = (0, import_node_child_process.spawn)(exe, [(0, import_node_path6.join)(exe, ".."), "--host", "127.0.0.1", "--port", String(PORT)], {
|
|
17828
17886
|
env: { ...process.env, LEMONADE_API_KEY: this.key, LEMONADE_ADMIN_API_KEY: this.key },
|
|
17829
17887
|
stdio: "ignore"
|
|
17830
17888
|
});
|
|
@@ -17833,7 +17891,7 @@ var LemonadeServer = class {
|
|
|
17833
17891
|
if (code) this.lastError = `Lemonade exited with code ${code}`;
|
|
17834
17892
|
});
|
|
17835
17893
|
this.proc = proc;
|
|
17836
|
-
if (proc.pid) await (0,
|
|
17894
|
+
if (proc.pid) await (0, import_promises6.writeFile)(pidFile, String(proc.pid)).catch(() => void 0);
|
|
17837
17895
|
for (let i = 0; i < 40; i++) {
|
|
17838
17896
|
if (await this.healthy()) return true;
|
|
17839
17897
|
if (!this.running) return false;
|
|
@@ -18062,12 +18120,12 @@ ${reasoning}` : ""),
|
|
|
18062
18120
|
return { ok: false, usage: { seconds: seconds() }, error: signal.aborted ? "stopped_by_owner" : err.message };
|
|
18063
18121
|
}
|
|
18064
18122
|
}
|
|
18065
|
-
var usageFile = () => (0,
|
|
18123
|
+
var usageFile = () => (0, import_node_path7.join)(bitpullHome(), "ai-usage.json");
|
|
18066
18124
|
var MONTH_MS = 31 * 24 * 36e5;
|
|
18067
18125
|
async function readUsage() {
|
|
18068
18126
|
if (!(0, import_node_fs2.existsSync)(usageFile())) return [];
|
|
18069
18127
|
try {
|
|
18070
|
-
return JSON.parse(await (0,
|
|
18128
|
+
return JSON.parse(await (0, import_promises8.readFile)(usageFile(), "utf8"));
|
|
18071
18129
|
} catch {
|
|
18072
18130
|
return [];
|
|
18073
18131
|
}
|
|
@@ -18075,7 +18133,7 @@ async function readUsage() {
|
|
|
18075
18133
|
async function recordAiUsage(tokens, now = Date.now()) {
|
|
18076
18134
|
const entries = (await readUsage()).filter((e) => now - e.t < MONTH_MS);
|
|
18077
18135
|
entries.push({ t: now, tokens });
|
|
18078
|
-
await (0,
|
|
18136
|
+
await (0, import_promises8.writeFile)(usageFile(), JSON.stringify(entries));
|
|
18079
18137
|
}
|
|
18080
18138
|
async function aiUsageTotals(now = Date.now()) {
|
|
18081
18139
|
const entries = await readUsage();
|
|
@@ -18100,22 +18158,22 @@ async function aiLimitReached(limits, now = Date.now()) {
|
|
|
18100
18158
|
init_define_BITPULL_UI_I18N();
|
|
18101
18159
|
var import_node_child_process2 = require("node:child_process");
|
|
18102
18160
|
var import_node_crypto5 = require("node:crypto");
|
|
18103
|
-
var
|
|
18104
|
-
var
|
|
18161
|
+
var import_promises9 = require("node:fs/promises");
|
|
18162
|
+
var import_node_os4 = require("node:os");
|
|
18105
18163
|
var import_node_util = require("node:util");
|
|
18106
18164
|
var exec = (0, import_node_util.promisify)(import_node_child_process2.execFile);
|
|
18107
18165
|
async function machineId() {
|
|
18108
18166
|
try {
|
|
18109
|
-
if ((0,
|
|
18167
|
+
if ((0, import_node_os4.platform)() === "darwin") {
|
|
18110
18168
|
const { stdout } = await exec("ioreg", ["-rd1", "-c", "IOPlatformExpertDevice"]);
|
|
18111
18169
|
return /"IOPlatformUUID" = "([^"]+)"/.exec(stdout)?.[1] ?? null;
|
|
18112
18170
|
}
|
|
18113
|
-
if ((0,
|
|
18171
|
+
if ((0, import_node_os4.platform)() === "win32") {
|
|
18114
18172
|
const { stdout } = await exec("reg", ["query", "HKLM\\SOFTWARE\\Microsoft\\Cryptography", "/v", "MachineGuid"]);
|
|
18115
18173
|
return /MachineGuid\s+REG_SZ\s+(\S+)/.exec(stdout)?.[1] ?? null;
|
|
18116
18174
|
}
|
|
18117
18175
|
for (const f of ["/etc/machine-id", "/var/lib/dbus/machine-id"]) {
|
|
18118
|
-
const id = (await (0,
|
|
18176
|
+
const id = (await (0, import_promises9.readFile)(f, "utf8").catch(() => "")).trim();
|
|
18119
18177
|
if (id) return id;
|
|
18120
18178
|
}
|
|
18121
18179
|
} catch {
|
|
@@ -18125,7 +18183,7 @@ async function machineId() {
|
|
|
18125
18183
|
var cached = null;
|
|
18126
18184
|
async function deviceHash() {
|
|
18127
18185
|
if (cached) return cached;
|
|
18128
|
-
const id = await machineId() ?? `fallback:${(0,
|
|
18186
|
+
const id = await machineId() ?? `fallback:${(0, import_node_os4.platform)()}:${(0, import_node_os4.hostname)()}`;
|
|
18129
18187
|
cached = (0, import_node_crypto5.createHash)("sha256").update(`bitpull-device-v1:${id}`).digest("hex");
|
|
18130
18188
|
return cached;
|
|
18131
18189
|
}
|
|
@@ -18235,7 +18293,7 @@ async function publishRepo(ctx, folder, manifestInput) {
|
|
|
18235
18293
|
if (secrets.length) {
|
|
18236
18294
|
return { ok: false, errors: ["Credentials found in files that would be published. Remove them or add the files to deny."], secrets };
|
|
18237
18295
|
}
|
|
18238
|
-
await (0,
|
|
18296
|
+
await (0, import_promises10.writeFile)((0, import_node_path8.join)(root, MANIFEST_FILE), JSON.stringify(manifest, null, 2) + "\n");
|
|
18239
18297
|
try {
|
|
18240
18298
|
const release = await buildRelease(ctx, root, manifest);
|
|
18241
18299
|
await heartbeat(ctx);
|
|
@@ -18252,14 +18310,14 @@ async function publishRepo(ctx, folder, manifestInput) {
|
|
|
18252
18310
|
}
|
|
18253
18311
|
}
|
|
18254
18312
|
var sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
18255
|
-
var keyFile = (ctx, jobId) => (0,
|
|
18313
|
+
var keyFile = (ctx, jobId) => (0, import_node_path8.join)(ctx.home ?? bitpullHome(), "jobkeys", jobId.replace(/[^0-9a-f-]/g, ""));
|
|
18256
18314
|
async function saveJobKey(ctx, jobId, key) {
|
|
18257
|
-
await (0,
|
|
18258
|
-
await (0,
|
|
18315
|
+
await (0, import_promises10.mkdir)((0, import_node_path8.join)(ctx.home ?? bitpullHome(), "jobkeys"), { recursive: true, mode: 448 });
|
|
18316
|
+
await (0, import_promises10.writeFile)(keyFile(ctx, jobId), key.toString("base64"), { mode: 384 });
|
|
18259
18317
|
}
|
|
18260
18318
|
async function loadJobKey(ctx, jobId) {
|
|
18261
18319
|
try {
|
|
18262
|
-
return Buffer.from(await (0,
|
|
18320
|
+
return Buffer.from(await (0, import_promises10.readFile)(keyFile(ctx, jobId), "utf8"), "base64");
|
|
18263
18321
|
} catch {
|
|
18264
18322
|
return null;
|
|
18265
18323
|
}
|
|
@@ -18338,9 +18396,9 @@ async function useOpenModel(ctx, input, waitMs = answerWaitMs(ctx, input.waitMin
|
|
|
18338
18396
|
if (!supportsTask(model, task)) throw new ToolError(`Model ${model} cannot do "${task}".`);
|
|
18339
18397
|
let fileData = null;
|
|
18340
18398
|
if (input.file) {
|
|
18341
|
-
const real = await authorisedFolder(ctx.config, input.file) ?? (isInside((0,
|
|
18399
|
+
const real = await authorisedFolder(ctx.config, input.file) ?? (isInside((0, import_node_path8.join)(bitpullHome(), "ai-results"), input.file) ? input.file : null);
|
|
18342
18400
|
if (!real) throw new ToolError("That file is outside the folders authorised in BitPull. Authorise its folder first (bitpull_authorize_folder).");
|
|
18343
|
-
fileData = await (0,
|
|
18401
|
+
fileData = await (0, import_promises10.readFile)(real);
|
|
18344
18402
|
}
|
|
18345
18403
|
const texts = Array.isArray(input.text) ? input.text : input.text !== void 0 ? [input.text] : [];
|
|
18346
18404
|
let units = 0;
|
|
@@ -18393,11 +18451,11 @@ ${texts.join("\n")}` : input.prompt ?? "Describe this image.";
|
|
|
18393
18451
|
if (done.status !== "done") throw new ToolError(`Job ${done.status}${done.error ? `: ${done.error}` : ""} (id ${done.id})`);
|
|
18394
18452
|
const result = done.result;
|
|
18395
18453
|
const files = [];
|
|
18396
|
-
const dir = (0,
|
|
18397
|
-
if (result.images || result.audio) await (0,
|
|
18454
|
+
const dir = (0, import_node_path8.join)(bitpullHome(), "ai-results");
|
|
18455
|
+
if (result.images || result.audio) await (0, import_promises10.mkdir)(dir, { recursive: true });
|
|
18398
18456
|
for (const [i, b64] of (result.images ?? (result.audio ? [result.audio] : [])).entries()) {
|
|
18399
|
-
const file = (0,
|
|
18400
|
-
await (0,
|
|
18457
|
+
const file = (0, import_node_path8.join)(dir, `${task}-${Date.now()}-${i}.${OUT_EXT[result.format ?? "png"] ?? "bin"}`);
|
|
18458
|
+
await (0, import_promises10.writeFile)(file, Buffer.from(b64, "base64"));
|
|
18401
18459
|
files.push(file);
|
|
18402
18460
|
}
|
|
18403
18461
|
const { images: _i, audio: _a, ...rest } = result;
|
|
@@ -18430,9 +18488,9 @@ async function askOpenModel(ctx, input, waitMs = answerWaitMs(ctx, input.waitMin
|
|
|
18430
18488
|
// apps/agent/src/sandbox.ts
|
|
18431
18489
|
init_define_BITPULL_UI_I18N();
|
|
18432
18490
|
var import_node_child_process3 = require("node:child_process");
|
|
18433
|
-
var
|
|
18434
|
-
var
|
|
18435
|
-
var
|
|
18491
|
+
var import_promises11 = require("node:fs/promises");
|
|
18492
|
+
var import_node_os5 = require("node:os");
|
|
18493
|
+
var import_node_path9 = require("node:path");
|
|
18436
18494
|
var import_node_util2 = require("node:util");
|
|
18437
18495
|
var exec2 = (0, import_node_util2.promisify)(import_node_child_process3.execFile);
|
|
18438
18496
|
var PROBE_IMAGE = "busybox:1.36";
|
|
@@ -18556,7 +18614,7 @@ async function ok(cmd, args, timeout = 5e3) {
|
|
|
18556
18614
|
}
|
|
18557
18615
|
async function availableRuntimes() {
|
|
18558
18616
|
const out = [];
|
|
18559
|
-
if ((0,
|
|
18617
|
+
if ((0, import_node_os5.platform)() === "darwin" && await ok("container", ["system", "status"]) !== null) out.push({ runtime: "apple", isolation: "vm", cli: "container" });
|
|
18560
18618
|
const info = await ok("docker", ["info", "--format", "{{json .Runtimes}}"]);
|
|
18561
18619
|
if (info !== null) {
|
|
18562
18620
|
if (/kata/.test(info)) out.push({ runtime: "kata", isolation: "vm", cli: "docker" });
|
|
@@ -18600,9 +18658,9 @@ async function ensureImage(sb, image, timeoutMs = 6e5) {
|
|
|
18600
18658
|
const message = String(err.stderr || err.message);
|
|
18601
18659
|
if (!AUTH_FAILURE.test(message)) return { ok: false, error: `cannot download image ${image}: ${message.trim().split("\n").pop()?.slice(0, 300)}` };
|
|
18602
18660
|
}
|
|
18603
|
-
const empty = await (0,
|
|
18661
|
+
const empty = await (0, import_promises11.mkdtemp)((0, import_node_path9.join)((0, import_node_os5.tmpdir)(), "bitpull-docker-anon-"));
|
|
18604
18662
|
try {
|
|
18605
|
-
await (0,
|
|
18663
|
+
await (0, import_promises11.writeFile)((0, import_node_path9.join)(empty, "config.json"), "{}");
|
|
18606
18664
|
await exec2("docker", ["--config", empty, "pull", "--quiet", image], { timeout: timeoutMs, windowsHide: true });
|
|
18607
18665
|
return { ok: true };
|
|
18608
18666
|
} catch (err) {
|
|
@@ -18610,7 +18668,7 @@ async function ensureImage(sb, image, timeoutMs = 6e5) {
|
|
|
18610
18668
|
if (AUTH_FAILURE.test(message)) return { ok: false, error: DOCKER_LOGIN_BROKEN };
|
|
18611
18669
|
return { ok: false, error: `cannot download image ${image}: ${message.trim().split("\n").pop()?.slice(0, 300)}` };
|
|
18612
18670
|
} finally {
|
|
18613
|
-
await (0,
|
|
18671
|
+
await (0, import_promises11.rm)(empty, { recursive: true, force: true });
|
|
18614
18672
|
}
|
|
18615
18673
|
}
|
|
18616
18674
|
var cached2 = null;
|
|
@@ -18640,36 +18698,36 @@ function resetSandboxCache() {
|
|
|
18640
18698
|
init_define_BITPULL_UI_I18N();
|
|
18641
18699
|
var import_node_child_process4 = require("node:child_process");
|
|
18642
18700
|
var import_node_fs3 = require("node:fs");
|
|
18643
|
-
var
|
|
18644
|
-
var
|
|
18645
|
-
var
|
|
18701
|
+
var import_promises12 = require("node:fs/promises");
|
|
18702
|
+
var import_node_os6 = require("node:os");
|
|
18703
|
+
var import_node_path10 = require("node:path");
|
|
18646
18704
|
var import_node_util3 = require("node:util");
|
|
18647
18705
|
var exec3 = (0, import_node_util3.promisify)(import_node_child_process4.execFile);
|
|
18648
18706
|
function mcpLaunch() {
|
|
18649
18707
|
if (/bitpull-agent(\.exe)?$/i.test(process.execPath)) return { command: process.execPath, args: ["mcp"] };
|
|
18650
18708
|
if (/bitpull\.cjs$/i.test(process.argv[1] ?? "")) return { command: "npx", args: ["-y", "bitpull@latest", "mcp"] };
|
|
18651
|
-
return { command: "npx", args: ["tsx", (0,
|
|
18709
|
+
return { command: "npx", args: ["tsx", (0, import_node_path10.join)(process.cwd(), "apps/agent/src/cli.ts"), "mcp"] };
|
|
18652
18710
|
}
|
|
18653
|
-
function knownTools(os = (0,
|
|
18654
|
-
const appData = process.env.APPDATA ?? (0,
|
|
18655
|
-
const claudeDesktopDir = os === "darwin" ? (0,
|
|
18711
|
+
function knownTools(os = (0, import_node_os6.platform)(), home = (0, import_node_os6.homedir)()) {
|
|
18712
|
+
const appData = process.env.APPDATA ?? (0, import_node_path10.join)(home, "AppData", "Roaming");
|
|
18713
|
+
const claudeDesktopDir = os === "darwin" ? (0, import_node_path10.join)(home, "Library", "Application Support", "Claude") : os === "win32" ? (0, import_node_path10.join)(appData, "Claude") : null;
|
|
18656
18714
|
const tools = [
|
|
18657
18715
|
{ id: "claude-code", name: "Claude Code", kind: "cli", cli: "claude", args: (l) => ["mcp", "add", "-s", "user", "bitpull", "--", l.command, ...l.args] },
|
|
18658
18716
|
{ id: "codex", name: "OpenAI Codex CLI", kind: "cli", cli: "codex", args: (l) => ["mcp", "add", "bitpull", "--", l.command, ...l.args] },
|
|
18659
|
-
{ id: "cursor", name: "Cursor", kind: "json", file: (0,
|
|
18660
|
-
{ id: "windsurf", name: "Windsurf", kind: "json", file: (0,
|
|
18661
|
-
{ id: "gemini", name: "Gemini CLI", kind: "json", file: (0,
|
|
18717
|
+
{ id: "cursor", name: "Cursor", kind: "json", file: (0, import_node_path10.join)(home, ".cursor", "mcp.json"), key: "mcpServers", marker: (0, import_node_path10.join)(home, ".cursor") },
|
|
18718
|
+
{ id: "windsurf", name: "Windsurf", kind: "json", file: (0, import_node_path10.join)(home, ".codeium", "windsurf", "mcp_config.json"), key: "mcpServers", marker: (0, import_node_path10.join)(home, ".codeium", "windsurf") },
|
|
18719
|
+
{ id: "gemini", name: "Gemini CLI", kind: "json", file: (0, import_node_path10.join)(home, ".gemini", "settings.json"), key: "mcpServers", marker: (0, import_node_path10.join)(home, ".gemini") },
|
|
18662
18720
|
{ id: "vscode", name: "VS Code (Copilot)", kind: "cli", cli: "code", args: (l) => ["--add-mcp", JSON.stringify({ name: "bitpull", type: "stdio", command: l.command, args: l.args })] }
|
|
18663
18721
|
];
|
|
18664
18722
|
if (claudeDesktopDir) {
|
|
18665
|
-
tools.push({ id: "claude-desktop", name: "Claude Desktop", kind: "json", file: (0,
|
|
18723
|
+
tools.push({ id: "claude-desktop", name: "Claude Desktop", kind: "json", file: (0, import_node_path10.join)(claudeDesktopDir, "claude_desktop_config.json"), key: "mcpServers", marker: claudeDesktopDir });
|
|
18666
18724
|
}
|
|
18667
18725
|
return tools;
|
|
18668
18726
|
}
|
|
18669
18727
|
var quote = (s) => /[\s"'$`\\]/.test(s) ? `"${s.replace(/(["\\$`])/g, "\\$1")}"` : s;
|
|
18670
18728
|
async function onPath(cli) {
|
|
18671
18729
|
try {
|
|
18672
|
-
await exec3((0,
|
|
18730
|
+
await exec3((0, import_node_os6.platform)() === "win32" ? "where" : "which", [cli], { timeout: 4e3 });
|
|
18673
18731
|
return true;
|
|
18674
18732
|
} catch {
|
|
18675
18733
|
return false;
|
|
@@ -18677,7 +18735,7 @@ async function onPath(cli) {
|
|
|
18677
18735
|
}
|
|
18678
18736
|
async function readJson(file) {
|
|
18679
18737
|
if (!(0, import_node_fs3.existsSync)(file)) return null;
|
|
18680
|
-
const text2 = await (0,
|
|
18738
|
+
const text2 = await (0, import_promises12.readFile)(file, "utf8");
|
|
18681
18739
|
if (!text2.trim()) return {};
|
|
18682
18740
|
try {
|
|
18683
18741
|
return JSON.parse(text2);
|
|
@@ -18728,41 +18786,41 @@ async function connectTool(id) {
|
|
|
18728
18786
|
if (cfg === "invalid") throw new IntegrationError("config_invalid");
|
|
18729
18787
|
const next = { ...cfg ?? {} };
|
|
18730
18788
|
next[tool.key] = { ...next[tool.key] ?? {}, bitpull: { command: launch.command, args: launch.args } };
|
|
18731
|
-
await (0,
|
|
18732
|
-
if (cfg) await (0,
|
|
18733
|
-
await (0,
|
|
18789
|
+
await (0, import_promises12.mkdir)((0, import_node_path10.dirname)(tool.file), { recursive: true });
|
|
18790
|
+
if (cfg) await (0, import_promises12.copyFile)(tool.file, `${tool.file}.bitpull-backup`);
|
|
18791
|
+
await (0, import_promises12.writeFile)(tool.file, JSON.stringify(next, null, 2) + "\n");
|
|
18734
18792
|
return { restart: true };
|
|
18735
18793
|
}
|
|
18736
18794
|
|
|
18737
18795
|
// apps/agent/src/doctor.ts
|
|
18738
18796
|
init_define_BITPULL_UI_I18N();
|
|
18739
|
-
var
|
|
18797
|
+
var import_node_os10 = require("node:os");
|
|
18740
18798
|
|
|
18741
18799
|
// apps/agent/src/setup.ts
|
|
18742
18800
|
init_define_BITPULL_UI_I18N();
|
|
18743
18801
|
var import_node_child_process7 = require("node:child_process");
|
|
18744
18802
|
var import_node_fs4 = require("node:fs");
|
|
18745
|
-
var
|
|
18746
|
-
var
|
|
18747
|
-
var
|
|
18803
|
+
var import_promises14 = require("node:fs/promises");
|
|
18804
|
+
var import_node_os9 = require("node:os");
|
|
18805
|
+
var import_node_path12 = require("node:path");
|
|
18748
18806
|
var import_node_stream2 = require("node:stream");
|
|
18749
|
-
var
|
|
18807
|
+
var import_promises15 = require("node:stream/promises");
|
|
18750
18808
|
var import_node_util5 = require("node:util");
|
|
18751
18809
|
|
|
18752
18810
|
// apps/agent/src/worker.ts
|
|
18753
18811
|
init_define_BITPULL_UI_I18N();
|
|
18754
18812
|
var import_node_child_process6 = require("node:child_process");
|
|
18755
18813
|
var import_node_crypto6 = require("node:crypto");
|
|
18756
|
-
var
|
|
18757
|
-
var
|
|
18758
|
-
var
|
|
18814
|
+
var import_promises13 = require("node:fs/promises");
|
|
18815
|
+
var import_node_os8 = require("node:os");
|
|
18816
|
+
var import_node_path11 = require("node:path");
|
|
18759
18817
|
var import_node_util4 = require("node:util");
|
|
18760
18818
|
|
|
18761
18819
|
// apps/agent/src/awake.ts
|
|
18762
18820
|
init_define_BITPULL_UI_I18N();
|
|
18763
18821
|
var import_node_child_process5 = require("node:child_process");
|
|
18764
|
-
var
|
|
18765
|
-
function sleepGuardCommand(os = (0,
|
|
18822
|
+
var import_node_os7 = require("node:os");
|
|
18823
|
+
function sleepGuardCommand(os = (0, import_node_os7.platform)()) {
|
|
18766
18824
|
if (os === "darwin") return ["caffeinate", ["-i"]];
|
|
18767
18825
|
if (os === "win32") {
|
|
18768
18826
|
const script = [
|
|
@@ -18805,7 +18863,7 @@ var MAX_STREAM_BYTES = 1e6;
|
|
|
18805
18863
|
var MAX_OUTPUT_BYTES = 5e6;
|
|
18806
18864
|
var KEY_WAIT_MS = 12e4;
|
|
18807
18865
|
async function idleSeconds() {
|
|
18808
|
-
if ((0,
|
|
18866
|
+
if ((0, import_node_os8.platform)() !== "darwin") return null;
|
|
18809
18867
|
try {
|
|
18810
18868
|
const { stdout } = await exec4("ioreg", ["-c", "IOHIDSystem"]);
|
|
18811
18869
|
const m = /"HIDIdleTime" = (\d+)/.exec(stdout);
|
|
@@ -18816,11 +18874,11 @@ async function idleSeconds() {
|
|
|
18816
18874
|
}
|
|
18817
18875
|
async function onAcPower() {
|
|
18818
18876
|
try {
|
|
18819
|
-
if ((0,
|
|
18820
|
-
if ((0,
|
|
18877
|
+
if ((0, import_node_os8.platform)() === "darwin") return (await exec4("pmset", ["-g", "batt"])).stdout.includes("AC Power");
|
|
18878
|
+
if ((0, import_node_os8.platform)() === "linux") {
|
|
18821
18879
|
const dir = "/sys/class/power_supply";
|
|
18822
|
-
for (const e of await (0,
|
|
18823
|
-
if (/^(AC|ADP)/.test(e)) return (await (0,
|
|
18880
|
+
for (const e of await (0, import_promises13.readdir)(dir)) {
|
|
18881
|
+
if (/^(AC|ADP)/.test(e)) return (await (0, import_promises13.readFile)((0, import_node_path11.join)(dir, e, "online"), "utf8")).trim() === "1";
|
|
18824
18882
|
}
|
|
18825
18883
|
}
|
|
18826
18884
|
} catch {
|
|
@@ -18857,8 +18915,8 @@ async function detectCapacity(rules, ollamaUrl, sandbox) {
|
|
|
18857
18915
|
const serving = rules.serveModels && !await aiLimitReached(rules.aiLimits);
|
|
18858
18916
|
const installed = serving ? [...await ollamaModels(ollamaUrl), ...await lemonade.models()].filter(isShareable) : [];
|
|
18859
18917
|
return {
|
|
18860
|
-
cpus: Math.min(rules.maxCpus, (0,
|
|
18861
|
-
memoryMb: Math.min(rules.maxMemoryMb, Math.floor((0,
|
|
18918
|
+
cpus: Math.min(rules.maxCpus, (0, import_node_os8.cpus)().length),
|
|
18919
|
+
memoryMb: Math.min(rules.maxMemoryMb, Math.floor((0, import_node_os8.totalmem)() / 1024 / 1024 / 2)),
|
|
18862
18920
|
gpu: rules.gpu,
|
|
18863
18921
|
models: rules.models.length ? installed.filter((m) => rules.models.includes(m)) : installed,
|
|
18864
18922
|
containers: rules.containers && !!sandbox,
|
|
@@ -18880,14 +18938,14 @@ async function collectOutputs(dir) {
|
|
|
18880
18938
|
const out = {};
|
|
18881
18939
|
let total = 0;
|
|
18882
18940
|
async function walk(d, rel) {
|
|
18883
|
-
for (const e of await (0,
|
|
18941
|
+
for (const e of await (0, import_promises13.readdir)(d, { withFileTypes: true }).catch(() => [])) {
|
|
18884
18942
|
const p = rel ? `${rel}/${e.name}` : e.name;
|
|
18885
|
-
if (e.isDirectory()) await walk((0,
|
|
18943
|
+
if (e.isDirectory()) await walk((0, import_node_path11.join)(d, e.name), p);
|
|
18886
18944
|
else if (e.isFile()) {
|
|
18887
|
-
const s = await (0,
|
|
18945
|
+
const s = await (0, import_promises13.stat)((0, import_node_path11.join)(d, e.name));
|
|
18888
18946
|
if (total + s.size > MAX_OUTPUT_BYTES) continue;
|
|
18889
18947
|
total += s.size;
|
|
18890
|
-
out[p] = (await (0,
|
|
18948
|
+
out[p] = (await (0, import_promises13.readFile)((0, import_node_path11.join)(d, e.name))).toString("base64");
|
|
18891
18949
|
}
|
|
18892
18950
|
}
|
|
18893
18951
|
}
|
|
@@ -18952,7 +19010,7 @@ async function runDockerJob(spec, sandbox, signal) {
|
|
|
18952
19010
|
});
|
|
18953
19011
|
const seconds = (Date.now() - started) / 1e3;
|
|
18954
19012
|
if (signal.aborted) return { ok: false, usage: { seconds }, error: "stopped_by_owner" };
|
|
18955
|
-
outDir = await (0,
|
|
19013
|
+
outDir = await (0, import_promises13.mkdtemp)((0, import_node_path11.join)((0, import_node_os8.tmpdir)(), "bitpull-out-"));
|
|
18956
19014
|
await docker(["cp", `${name}:/work/out/.`, outDir]).catch(() => void 0);
|
|
18957
19015
|
return {
|
|
18958
19016
|
ok: true,
|
|
@@ -18964,23 +19022,23 @@ async function runDockerJob(spec, sandbox, signal) {
|
|
|
18964
19022
|
} finally {
|
|
18965
19023
|
await docker(["rm", "-f", name], 6e4).catch(() => void 0);
|
|
18966
19024
|
await docker(["volume", "rm", "-f", volume], 6e4).catch(() => void 0);
|
|
18967
|
-
if (outDir) await (0,
|
|
19025
|
+
if (outDir) await (0, import_promises13.rm)(outDir, { recursive: true, force: true });
|
|
18968
19026
|
}
|
|
18969
19027
|
}
|
|
18970
19028
|
async function runFolderJob(spec, sandbox, signal) {
|
|
18971
|
-
const workdir = await (0,
|
|
19029
|
+
const workdir = await (0, import_promises13.mkdtemp)((0, import_node_path11.join)((0, import_node_os8.tmpdir)(), "bitpull-job-"));
|
|
18972
19030
|
const name = `bitpull-${(0, import_node_crypto6.randomBytes)(6).toString("hex")}`;
|
|
18973
19031
|
let started = Date.now();
|
|
18974
19032
|
try {
|
|
18975
19033
|
for (const [path, b64] of Object.entries(spec.inputs ?? {})) {
|
|
18976
19034
|
const rel = normalizeRepoPath(path);
|
|
18977
19035
|
if (!rel || rel.startsWith("out/")) return { ok: false, usage: {}, error: `bad input path ${path}` };
|
|
18978
|
-
await (0,
|
|
18979
|
-
await (0,
|
|
19036
|
+
await (0, import_promises13.mkdir)((0, import_node_path11.dirname)((0, import_node_path11.join)(workdir, rel)), { recursive: true });
|
|
19037
|
+
await (0, import_promises13.writeFile)((0, import_node_path11.join)(workdir, rel), Buffer.from(b64, "base64"));
|
|
18980
19038
|
}
|
|
18981
|
-
await (0,
|
|
18982
|
-
await (0,
|
|
18983
|
-
await (0,
|
|
19039
|
+
await (0, import_promises13.mkdir)((0, import_node_path11.join)(workdir, "out"), { recursive: true });
|
|
19040
|
+
await (0, import_promises13.chmod)(workdir, 511);
|
|
19041
|
+
await (0, import_promises13.chmod)((0, import_node_path11.join)(workdir, "out"), 511);
|
|
18984
19042
|
const pulled = await ensureImage(sandbox, spec.image);
|
|
18985
19043
|
if (!pulled.ok) return { ok: false, usage: {}, error: `sandbox_error: ${pulled.error}` };
|
|
18986
19044
|
started = Date.now();
|
|
@@ -19004,11 +19062,11 @@ async function runFolderJob(spec, sandbox, signal) {
|
|
|
19004
19062
|
if (exitCode === 125) return { ok: false, usage: { seconds }, error: `sandbox_error: ${stderr.text().slice(0, 500)}` };
|
|
19005
19063
|
return {
|
|
19006
19064
|
ok: true,
|
|
19007
|
-
result: { exitCode, stdout: stdout.text(), stderr: stderr.text(), outputs: await collectOutputs((0,
|
|
19065
|
+
result: { exitCode, stdout: stdout.text(), stderr: stderr.text(), outputs: await collectOutputs((0, import_node_path11.join)(workdir, "out")) },
|
|
19008
19066
|
usage: { seconds }
|
|
19009
19067
|
};
|
|
19010
19068
|
} finally {
|
|
19011
|
-
await (0,
|
|
19069
|
+
await (0, import_promises13.rm)(workdir, { recursive: true, force: true });
|
|
19012
19070
|
}
|
|
19013
19071
|
}
|
|
19014
19072
|
async function waitForKey(ctx, jobId, signal, waitMs = KEY_WAIT_MS) {
|
|
@@ -19098,11 +19156,11 @@ function startWorker(ctx, opts = {}) {
|
|
|
19098
19156
|
var exec5 = (0, import_node_util5.promisify)(import_node_child_process7.execFile);
|
|
19099
19157
|
function windowsCandidates() {
|
|
19100
19158
|
const pf = [process.env.ProgramW6432, process.env.ProgramFiles, process.env["ProgramFiles(x86)"], "C:\\Program Files"].filter(Boolean);
|
|
19101
|
-
const local = process.env.LOCALAPPDATA ?? (0,
|
|
19159
|
+
const local = process.env.LOCALAPPDATA ?? (0, import_node_path12.join)((0, import_node_os9.homedir)(), "AppData", "Local");
|
|
19102
19160
|
return {
|
|
19103
|
-
dockerBin: [...pf.map((p) => (0,
|
|
19104
|
-
dockerApp: [...pf.map((p) => (0,
|
|
19105
|
-
ollama: [(0,
|
|
19161
|
+
dockerBin: [...pf.map((p) => (0, import_node_path12.join)(p, "Docker", "Docker", "resources", "bin")), (0, import_node_path12.join)(local, "Programs", "Docker", "Docker", "resources", "bin"), (0, import_node_path12.join)(local, "Docker", "Docker", "resources", "bin")],
|
|
19162
|
+
dockerApp: [...pf.map((p) => (0, import_node_path12.join)(p, "Docker", "Docker", "Docker Desktop.exe")), (0, import_node_path12.join)(local, "Programs", "Docker", "Docker", "Docker Desktop.exe"), (0, import_node_path12.join)(local, "Docker", "Docker", "Docker Desktop.exe")],
|
|
19163
|
+
ollama: [(0, import_node_path12.join)(local, "Programs", "Ollama"), ...pf.map((p) => (0, import_node_path12.join)(p, "Ollama"))]
|
|
19106
19164
|
};
|
|
19107
19165
|
}
|
|
19108
19166
|
async function windowsRegistryPath() {
|
|
@@ -19118,22 +19176,22 @@ async function windowsRegistryPath() {
|
|
|
19118
19176
|
return [...await read("HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"), ...await read("HKCU\\Environment")];
|
|
19119
19177
|
}
|
|
19120
19178
|
function extendPath(more = []) {
|
|
19121
|
-
const home = (0,
|
|
19122
|
-
const extra = (0,
|
|
19179
|
+
const home = (0, import_node_os9.homedir)();
|
|
19180
|
+
const extra = (0, import_node_os9.platform)() === "win32" ? [...windowsCandidates().dockerBin, ...windowsCandidates().ollama] : [
|
|
19123
19181
|
"/usr/local/bin",
|
|
19124
19182
|
"/opt/homebrew/bin",
|
|
19125
19183
|
"/Applications/Docker.app/Contents/Resources/bin",
|
|
19126
|
-
(0,
|
|
19127
|
-
(0,
|
|
19184
|
+
(0, import_node_path12.join)(home, ".orbstack", "bin"),
|
|
19185
|
+
(0, import_node_path12.join)(home, ".docker", "bin"),
|
|
19128
19186
|
"/usr/local/sbin",
|
|
19129
19187
|
"/usr/bin",
|
|
19130
19188
|
"/bin"
|
|
19131
19189
|
];
|
|
19132
|
-
const current = (process.env.PATH ?? "").split(
|
|
19133
|
-
process.env.PATH = [...current, ...[...more, ...extra].filter((p) => p && !current.includes(p))].join(
|
|
19190
|
+
const current = (process.env.PATH ?? "").split(import_node_path12.delimiter);
|
|
19191
|
+
process.env.PATH = [...current, ...[...more, ...extra].filter((p) => p && !current.includes(p))].join(import_node_path12.delimiter);
|
|
19134
19192
|
}
|
|
19135
19193
|
async function refreshPath() {
|
|
19136
|
-
extendPath((0,
|
|
19194
|
+
extendPath((0, import_node_os9.platform)() === "win32" ? await windowsRegistryPath() : []);
|
|
19137
19195
|
}
|
|
19138
19196
|
function sandboxProblem() {
|
|
19139
19197
|
const sb = lastSandboxCheck();
|
|
@@ -19153,7 +19211,7 @@ async function has(cmd, args = ["--version"], label = cmd) {
|
|
|
19153
19211
|
return false;
|
|
19154
19212
|
}
|
|
19155
19213
|
}
|
|
19156
|
-
function installersFor(os = (0,
|
|
19214
|
+
function installersFor(os = (0, import_node_os9.platform)(), cpu = (0, import_node_os9.arch)()) {
|
|
19157
19215
|
const mac = cpu === "arm64" ? "arm64" : "amd64";
|
|
19158
19216
|
if (os === "darwin") {
|
|
19159
19217
|
return {
|
|
@@ -19183,18 +19241,18 @@ function recommendedModel(ramGb) {
|
|
|
19183
19241
|
var tasks = /* @__PURE__ */ new Map();
|
|
19184
19242
|
var listTasks = () => [...tasks.values()];
|
|
19185
19243
|
async function setupStatus(ollamaUrl) {
|
|
19186
|
-
const os = (0,
|
|
19187
|
-
const ramGb = Math.round((0,
|
|
19244
|
+
const os = (0, import_node_os9.platform)();
|
|
19245
|
+
const ramGb = Math.round((0, import_node_os9.totalmem)() / 1024 ** 3);
|
|
19188
19246
|
await refreshPath();
|
|
19189
19247
|
const dockerCli = await has("docker", ["--version"], "docker");
|
|
19190
19248
|
const dockerApp = os === "darwin" && (0, import_node_fs4.existsSync)("/Applications/Docker.app") || os === "win32" && windowsCandidates().dockerApp.some((p) => (0, import_node_fs4.existsSync)(p));
|
|
19191
19249
|
const dockerInstalled = dockerCli || dockerApp;
|
|
19192
19250
|
const dockerRunning = dockerCli && await has("docker", ["info", "--format", "{{.ServerVersion}}"], "docker-engine");
|
|
19193
19251
|
const ollamaRunning = await fetch(new URL("/api/version", ollamaUrl), { signal: AbortSignal.timeout(2e3) }).then((r) => r.ok).catch(() => false);
|
|
19194
|
-
const ollamaInstalled = ollamaRunning || await has("ollama") || os === "darwin" && (0, import_node_fs4.existsSync)("/Applications/Ollama.app") || os === "win32" && windowsCandidates().ollama.some((d) => (0, import_node_fs4.existsSync)((0,
|
|
19252
|
+
const ollamaInstalled = ollamaRunning || await has("ollama") || os === "darwin" && (0, import_node_fs4.existsSync)("/Applications/Ollama.app") || os === "win32" && windowsCandidates().ollama.some((d) => (0, import_node_fs4.existsSync)((0, import_node_path12.join)(d, "ollama.exe")));
|
|
19195
19253
|
return {
|
|
19196
19254
|
os,
|
|
19197
|
-
arch: (0,
|
|
19255
|
+
arch: (0, import_node_os9.arch)(),
|
|
19198
19256
|
ramGb,
|
|
19199
19257
|
docker: {
|
|
19200
19258
|
installed: dockerInstalled,
|
|
@@ -19221,7 +19279,7 @@ function openInBrowser(url) {
|
|
|
19221
19279
|
openFile(url);
|
|
19222
19280
|
}
|
|
19223
19281
|
function openFile(path) {
|
|
19224
|
-
const [cmd, args] = (0,
|
|
19282
|
+
const [cmd, args] = (0, import_node_os9.platform)() === "darwin" ? ["open", [path]] : (0, import_node_os9.platform)() === "win32" ? ["cmd", ["/c", "start", "", path]] : ["xdg-open", [path]];
|
|
19225
19283
|
(0, import_node_child_process7.spawn)(cmd, args, { stdio: "ignore", detached: true }).unref();
|
|
19226
19284
|
}
|
|
19227
19285
|
function downloadInstaller(inst) {
|
|
@@ -19230,9 +19288,9 @@ function downloadInstaller(inst) {
|
|
|
19230
19288
|
tasks.set(task.id, task);
|
|
19231
19289
|
void (async () => {
|
|
19232
19290
|
try {
|
|
19233
|
-
const dir = (0,
|
|
19234
|
-
await (0,
|
|
19235
|
-
const dest = (0,
|
|
19291
|
+
const dir = (0, import_node_path12.join)((0, import_node_os9.homedir)(), "Downloads");
|
|
19292
|
+
await (0, import_promises14.mkdir)(dir, { recursive: true });
|
|
19293
|
+
const dest = (0, import_node_path12.join)(dir, inst.fileName);
|
|
19236
19294
|
const res = await fetch(inst.url, { redirect: "follow" });
|
|
19237
19295
|
if (!res.ok || !res.body) throw new Error(`download failed (${res.status})`);
|
|
19238
19296
|
const total = Number(res.headers.get("content-length") ?? 0);
|
|
@@ -19242,7 +19300,7 @@ function downloadInstaller(inst) {
|
|
|
19242
19300
|
received += c.length;
|
|
19243
19301
|
if (total) task.progress = Math.round(received / total * 100);
|
|
19244
19302
|
});
|
|
19245
|
-
await (0,
|
|
19303
|
+
await (0, import_promises15.pipeline)(body, (0, import_node_fs4.createWriteStream)(dest));
|
|
19246
19304
|
Object.assign(task, { state: "done", progress: 100, detail: dest });
|
|
19247
19305
|
openFile(dest);
|
|
19248
19306
|
} catch (err) {
|
|
@@ -19252,16 +19310,16 @@ function downloadInstaller(inst) {
|
|
|
19252
19310
|
return task;
|
|
19253
19311
|
}
|
|
19254
19312
|
function startApp(id) {
|
|
19255
|
-
if ((0,
|
|
19256
|
-
else if ((0,
|
|
19313
|
+
if ((0, import_node_os9.platform)() === "darwin") (0, import_node_child_process7.spawn)("open", ["-a", id === "docker" ? "Docker" : "Ollama"], { stdio: "ignore", detached: true }).unref();
|
|
19314
|
+
else if ((0, import_node_os9.platform)() === "win32") {
|
|
19257
19315
|
const c = windowsCandidates();
|
|
19258
|
-
const exe = id === "docker" ? c.dockerApp.find((p) => (0, import_node_fs4.existsSync)(p)) ?? c.dockerApp[0] : (0,
|
|
19316
|
+
const exe = id === "docker" ? c.dockerApp.find((p) => (0, import_node_fs4.existsSync)(p)) ?? c.dockerApp[0] : (0, import_node_path12.join)(c.ollama.find((d) => (0, import_node_fs4.existsSync)((0, import_node_path12.join)(d, "ollama app.exe"))) ?? c.ollama[0], "ollama app.exe");
|
|
19259
19317
|
(0, import_node_child_process7.spawn)("cmd", ["/c", "start", "", exe], { stdio: "ignore", detached: true }).unref();
|
|
19260
19318
|
} else if (id === "ollama") (0, import_node_child_process7.spawn)("ollama", ["serve"], { stdio: "ignore", detached: true }).unref();
|
|
19261
19319
|
else throw new Error("On Linux start Docker with: sudo systemctl start docker");
|
|
19262
19320
|
}
|
|
19263
19321
|
function currentPlatform() {
|
|
19264
|
-
return `${(0,
|
|
19322
|
+
return `${(0, import_node_os9.platform)()}-${(0, import_node_os9.arch)()}`;
|
|
19265
19323
|
}
|
|
19266
19324
|
function installLemonadeTask() {
|
|
19267
19325
|
const task = { id: "download-lemonade", label: "Installing the image, speech and music engine", state: "running", progress: 0 };
|
|
@@ -19310,10 +19368,10 @@ function pullModel(ollamaUrl, name) {
|
|
|
19310
19368
|
|
|
19311
19369
|
// apps/agent/src/doctor.ts
|
|
19312
19370
|
async function doctor(cfg) {
|
|
19313
|
-
const os = (0,
|
|
19371
|
+
const os = (0, import_node_os10.platform)();
|
|
19314
19372
|
const st = await setupStatus(cfg.ollamaUrl);
|
|
19315
19373
|
const tools = await toolStatus().catch(() => []);
|
|
19316
|
-
const reqs = requirementsFor(os, (0,
|
|
19374
|
+
const reqs = requirementsFor(os, (0, import_node_os10.arch)() === "arm64" ? "arm64" : "x64");
|
|
19317
19375
|
const items = reqs.map((r) => {
|
|
19318
19376
|
const item = (status, problem = null) => ({ ...r, status, problem });
|
|
19319
19377
|
switch (r.id) {
|
|
@@ -19337,7 +19395,7 @@ async function doctor(cfg) {
|
|
|
19337
19395
|
});
|
|
19338
19396
|
const missingRequired = items.filter((i) => i.level === "required" && i.status !== "ok");
|
|
19339
19397
|
return {
|
|
19340
|
-
computer: { os, arch: (0,
|
|
19398
|
+
computer: { os, arch: (0, import_node_os10.arch)(), ramGb: st.ramGb },
|
|
19341
19399
|
ready: missingRequired.length === 0,
|
|
19342
19400
|
lending: { enabled: cfg.lending.enabled, paused: cfg.lending.paused },
|
|
19343
19401
|
items,
|
|
@@ -19353,7 +19411,7 @@ async function doctor(cfg) {
|
|
|
19353
19411
|
}
|
|
19354
19412
|
|
|
19355
19413
|
// apps/agent/src/control.ts
|
|
19356
|
-
var APP_VERSION = true ? "0.1.
|
|
19414
|
+
var APP_VERSION = true ? "0.1.16" : "dev";
|
|
19357
19415
|
var UPDATE_MANIFEST = "https://github.com/SamuealPK/bitpull-releases/releases/latest/download/latest.json";
|
|
19358
19416
|
var inDesktopApp = () => /bitpull-agent(\.exe)?$/i.test(process.execPath);
|
|
19359
19417
|
function newerVersion(a, b) {
|
|
@@ -19370,11 +19428,11 @@ async function dashboardStrings(lang) {
|
|
|
19370
19428
|
const d = define_BITPULL_UI_I18N_default[lang];
|
|
19371
19429
|
return d ? JSON.stringify(d) : null;
|
|
19372
19430
|
}
|
|
19373
|
-
return (0,
|
|
19431
|
+
return (0, import_promises16.readFile)((0, import_node_path13.join)((0, import_node_path13.dirname)((0, import_node_url.fileURLToPath)(__bitpull_import_meta_url)), "..", "ui", "i18n", `${lang}.json`), "utf8").catch(() => null);
|
|
19374
19432
|
}
|
|
19375
19433
|
async function dashboardHtml() {
|
|
19376
|
-
if (true) return '<!doctype html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<meta name="viewport" content="width=device-width, initial-scale=1">\n<title>BitPull</title>\n<style>\n :root { --bg:#fafaf7; --surface:#fff; --text:#1d1d1b; --muted:#6b6b66; --line:#e4e2dc; --accent:#2f5bd3; --accent-ink:#fff; --good:#1f7a4d; --warn:#9a6700; --bad:#b3261e; }\n @media (prefers-color-scheme: dark) { :root { --bg:#151514; --surface:#1e1e1c; --text:#ecebe6; --muted:#a2a19b; --line:#33322f; --accent:#7c9cf2; --accent-ink:#10131c; --good:#5cc28f; --warn:#e3b341; --bad:#f2867c; } }\n * { box-sizing: border-box; }\n body { margin:0; background:var(--bg); color:var(--text); font:15px/1.5 system-ui,-apple-system,"Segoe UI","Noto Sans",sans-serif; }\n header { display:flex; flex-wrap:wrap; gap:12px; justify-content:space-between; align-items:center; padding:16px; border-bottom:1px solid var(--line); background:var(--surface); }\n header h1 { font-size:18px; margin:0; }\n .head-right { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }\n .pills { display:flex; flex-wrap:wrap; gap:8px; }\n .pill { border:1px solid var(--line); border-radius:999px; padding:3px 10px; font-size:13px; color:var(--muted); }\n .pill.good { color:var(--good); border-color:currentColor; } .pill.warn { color:var(--warn); border-color:currentColor; } .pill.bad { color:var(--bad); border-color:currentColor; }\n main { max-width:1100px; margin:0 auto; padding:16px; display:grid; gap:16px; grid-template-columns:repeat(auto-fit,minmax(320px,1fr)); }\n section { background:var(--surface); border:1px solid var(--line); border-radius:12px; padding:16px; min-width:0; }\n section h2 { font-size:16px; margin:0 0 4px; } section p.hint { margin:0 0 12px; color:var(--muted); font-size:13px; }\n .stat { font-size:28px; font-weight:700; }\n label { display:flex; justify-content:space-between; align-items:center; gap:8px; padding:6px 0 2px; }\n .field { border-bottom:1px solid var(--line); padding-bottom:6px; }\n .field p.help { margin:0; color:var(--muted); font-size:12.5px; line-height:1.45; }\n .check-row { display:flex; flex-wrap:wrap; justify-content:space-between; gap:10px; align-items:flex-start; padding:10px 0; border-bottom:1px solid var(--line); }\n .check-row .status { font-size:13px; color:var(--muted); }\n .ok { color:var(--good); font-weight:600; } .missing { color:var(--warn); font-weight:600; }\n progress { width:100%; height:8px; }\n input[type=number], input[type=text], select { width:110px; padding:6px 8px; border:1px solid var(--line); border-radius:6px; background:var(--bg); color:var(--text); font:inherit; }\n select#lang { width:auto; }\n input.wide { width:100%; }\n button { background:var(--accent); color:var(--accent-ink); border:0; border-radius:8px; padding:8px 12px; font:inherit; font-weight:600; cursor:pointer; }\n button.secondary { background:transparent; color:var(--text); border:1px solid var(--line); }\n button:disabled { opacity:.6; cursor:progress; }\n button.danger { background:var(--bad); color:#fff; }\n .row { display:flex; gap:8px; align-items:center; margin-top:10px; flex-wrap:wrap; }\n ul.list { list-style:none; padding:0; margin:8px 0 0; }\n ul.list li { display:flex; justify-content:space-between; gap:8px; align-items:center; padding:8px 0; border-bottom:1px solid var(--line); font-size:14px; }\n ul.list li span.path { overflow-wrap:anywhere; }\n #ai-limits { overflow-x:auto; } table.limits { border-collapse:collapse; } table.limits td, table.limits th { padding:4px 8px; text-align:start; }\n code { font:13px ui-monospace,Menlo,monospace; overflow-wrap:anywhere; direction:ltr; unicode-bidi:embed; }\n textarea { width:100%; min-height:70px; padding:8px; border:1px solid var(--line); border-radius:8px; background:var(--bg); color:var(--text); font:inherit; }\n pre { white-space:pre-wrap; background:var(--bg); border:1px solid var(--line); border-radius:8px; padding:10px; margin:8px 0 0; max-height:260px; overflow:auto; font-size:13px; }\n .msg { min-height:1.4em; font-size:13px; margin-top:6px; } .msg.error { color:var(--bad); } .msg.ok { color:var(--good); }\n .full { grid-column:1/-1; }\n .live { display:flex; flex-wrap:wrap; gap:4px 14px; align-items:center; padding:8px 16px; font-size:13px; color:var(--muted); border-bottom:1px solid var(--line); background:var(--surface); }\n .live strong { color:var(--text); } .live .dot { width:8px; height:8px; border-radius:50%; background:var(--good); }\n #locked { max-width:520px; margin:80px auto; padding:0 16px; text-align:center; }\n [hidden] { display:none !important; }\n #tip { position:fixed; z-index:50; max-width:320px; padding:8px 10px; border-radius:8px; background:var(--text); color:var(--bg); font-size:13px; line-height:1.45; box-shadow:0 4px 16px rgba(0,0,0,.18); pointer-events:none; }\n</style>\n</head>\n<body>\n<div id="locked" hidden>\n <h1>BitPull</h1>\n <p data-i18n="locked.text"></p>\n</div>\n<div id="app" hidden>\n<header>\n <h1 data-i18n="app.title"></h1>\n <div class="head-right">\n <div class="pills" id="pills"></div>\n <select id="lang" aria-label="Language" data-tip="tip.lang"></select>\n </div>\n</header>\n<div class="live" id="live" hidden></div>\n<main>\n <section>\n <h2 data-i18n="credits.title"></h2>\n <div class="stat" id="balance">\u2013</div>\n <p class="hint" id="plan"></p>\n <div class="row">\n <button data-buy="base" class="secondary" data-i18n="buy.base" data-tip="tip.buy.base"></button>\n <button data-buy="pro" class="secondary" data-i18n="buy.pro" data-tip="tip.buy.pro"></button>\n <button data-buy="recharge" class="secondary" data-i18n="buy.recharge" data-tip="tip.buy.recharge"></button>\n </div>\n <div class="msg" id="buy-msg"></div>\n </section>\n\n <section>\n <h2 data-i18n="lend.title"></h2>\n <p class="hint" data-i18n="lend.hint"></p>\n <div class="stat" id="worker-state">\u2013</div>\n <p class="hint" id="worker-detail"></p>\n <p class="status" id="worker-visible"></p>\n <div class="row"><button id="pause" class="danger"></button></div>\n <div class="msg" id="pause-msg"></div>\n </section>\n\n <section class="full">\n <h2 data-i18n="setup.title"></h2>\n <p class="hint" data-i18n="setup.hint"></p>\n <div id="setup"><p class="hint" data-i18n="setup.checking"></p></div>\n <div class="msg" id="setup-msg"></div>\n </section>\n\n <section class="full">\n <h2 data-i18n="models.title"></h2>\n <p class="hint" data-i18n="models.hint"></p>\n <div id="ai-models"><p class="hint" data-i18n="setup.checking"></p></div>\n <h3 data-i18n="limits.title"></h3>\n <p class="hint" data-i18n="limits.hint"></p>\n <div id="ai-limits"></div>\n <div class="row"><button id="save-limits" data-i18n="limits.save" data-tip="tip.limits.save"></button></div>\n <div class="msg" id="models-msg"></div>\n </section>\n\n <section>\n <h2 data-i18n="rules.title"></h2>\n <form id="rules">\n <div class="field"><label><span data-i18n="rules.enabled"></span> <input type="checkbox" name="enabled"></label><p class="help" data-i18n="rules.enabled.help"></p></div>\n <div class="field"><label><span data-i18n="rules.cpus"></span> <input type="number" name="maxCpus" min="0.25" step="0.25"></label><p class="help" data-i18n="rules.cpus.help"></p></div>\n <div class="field"><label><span data-i18n="rules.memory"></span> <input type="number" name="maxMemoryMb" min="256" step="256"></label><p class="help" data-i18n="rules.memory.help"></p></div>\n <div class="field"><label><span data-i18n="rules.gpu"></span> <select name="gpu"><option value="none" data-i18n="rules.gpu.none"></option><option value="consumer" data-i18n="rules.gpu.consumer"></option><option value="high" data-i18n="rules.gpu.high"></option><option value="datacenter" data-i18n="rules.gpu.datacenter"></option></select></label><p class="help" data-i18n="rules.gpu.help"></p></div>\n <div class="field"><label><span data-i18n="rules.containers"></span> <input type="checkbox" name="containers"></label><p class="help" data-i18n="rules.containers.help"></p></div>\n <div class="field"><label><span data-i18n="rules.models"></span> <input type="checkbox" name="serveModels"></label><p class="help" data-i18n="rules.models.help"></p></div>\n <div class="field"><label><span data-i18n="rules.idle"></span> <input type="number" name="idleMinutes" min="0"></label><p class="help" data-i18n="rules.idle.help"></p></div>\n <div class="field"><label><span data-i18n="rules.ac"></span> <input type="checkbox" name="onlyOnAc"></label><p class="help" data-i18n="rules.ac.help"></p></div>\n <div class="field"><label><span data-i18n="rules.awake"></span> <input type="checkbox" name="keepAwake"></label><p class="help" data-i18n="rules.awake.help"></p></div>\n <div class="field"><label><span data-i18n="rules.hours"></span> <span><input type="number" name="hourFrom" min="0" max="23" style="width:56px"> <input type="number" name="hourTo" min="0" max="24" style="width:56px"></span></label><p class="help" data-i18n="rules.hours.help"></p></div>\n <div class="field"><label><span data-i18n="rules.cache"></span> <input type="number" name="cacheMax" min="0"></label><p class="help" data-i18n="rules.cache.help"></p></div>\n <div class="row"><button type="submit" data-i18n="rules.save" data-tip="tip.rules.save"></button></div>\n <div class="msg" id="rules-msg"></div>\n </form>\n </section>\n\n <section>\n <h2 data-i18n="folders.title"></h2>\n <p class="hint" data-i18n="folders.hint"></p>\n <div class="row"><input class="wide" type="text" id="folder-path" data-i18n-placeholder="folders.placeholder"><button id="folder-add" data-i18n="folders.add" data-tip="tip.folder.add"></button></div>\n <ul class="list" id="folders"></ul>\n <div class="msg" id="folder-msg"></div>\n </section>\n\n <section>\n <h2 data-i18n="repos.title"></h2>\n <p class="hint" data-i18n="repos.hint"></p>\n <ul class="list" id="repos"></ul>\n <div class="msg" id="repos-msg"></div>\n </section>\n\n <section>\n <h2 data-i18n="ask.title"></h2>\n <p class="hint" id="models-hint"></p>\n <textarea id="prompt" data-i18n-placeholder="ask.placeholder"></textarea>\n <div class="row">\n <select id="tier" data-tip="tip.tier"><option value="small" data-i18n="ask.small"></option><option value="medium" data-i18n="ask.medium"></option><option value="large" data-i18n="ask.large"></option></select>\n <button id="ask" data-i18n="ask.button" data-tip="tip.ask"></button>\n <label data-tip="tip.wait"><span data-i18n="ask.wait"></span> <input type="number" id="wait-minutes" min="1" max="120" step="1" style="width:70px"></label>\n <button class="secondary" id="save-wait" data-i18n="ask.wait.save" data-tip="tip.wait"></button>\n </div>\n <div class="msg" id="wait-msg"></div>\n <pre id="answer" hidden></pre>\n </section>\n\n <section class="full">\n <h2 data-i18n="tools.title"></h2>\n <p class="hint" data-i18n="tools.hint"></p>\n <div id="tools"></div>\n <div class="msg" id="tools-msg"></div>\n <p class="hint" style="margin-top:12px"><span data-i18n="tools.openai"></span> <code id="oai-url"></code> \xB7 <span data-i18n="tools.key"></span> <code id="oai-key">\u2022\u2022\u2022\u2022\u2022\u2022</code> <button class="secondary" id="show-key" data-i18n="tools.show" data-tip="tip.show_key"></button></p>\n </section>\n\n <section class="full">\n <h2 data-i18n="update.title"></h2>\n <p class="hint" id="update-info"></p>\n <div class="row"><button id="update-btn" data-i18n="update.button" data-tip="tip.update"></button></div>\n <div class="msg" id="update-msg"></div>\n </section>\n\n <section class="full">\n <h2 data-i18n="jobs.title"></h2>\n <ul class="list" id="jobs"></ul>\n </section>\n</main>\n</div>\n<script>\nconst LANGS = { en: "English", zh: "\u4E2D\u6587", hi: "\u0939\u093F\u0928\u094D\u0926\u0940", es: "Espa\xF1ol", ar: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", fr: "Fran\xE7ais", bn: "\u09AC\u09BE\u0982\u09B2\u09BE", pt: "Portugu\xEAs", ru: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", id: "Bahasa Indonesia", de: "Deutsch", it: "Italiano" };\nconst $ = (id) => document.getElementById(id);\nconst esc = (s) => String(s ?? "").replace(/[&<>"\']/g, (c) => ({ "&":"&","<":"<",">":">",\'"\':""","\'":"'" })[c]);\n\nconst params = new URLSearchParams(location.hash.slice(1));\nlet token = params.get("token");\nconst langFromApp = params.get("lang");\ntry { if (token) sessionStorage.setItem("bp_token", token); else token = sessionStorage.getItem("bp_token"); } catch {}\nif (location.hash) history.replaceState(null, "", "/");\n\n// ---- languages ------------------------------------------------------------------------\nlet lang = "en", dict = {}, fallback = {};\nconst t = (key, vars = {}) => String(dict[key] ?? fallback[key] ?? key).replace(/\\{(\\w+)\\}/g, (_, k) => (vars[k] ?? `{${k}}`));\nconst fmt = (n) => Number(n).toLocaleString(lang, { maximumFractionDigits: 2 });\n\nasync function loadLang(l, save) {\n lang = LANGS[l] ? l : "en";\n if (!Object.keys(fallback).length) fallback = await (await fetch("/i18n/en.json")).json();\n dict = lang === "en" ? fallback : await fetch(`/i18n/${lang}.json`).then((r) => (r.ok ? r.json() : fallback)).catch(() => fallback);\n document.documentElement.lang = lang;\n document.documentElement.dir = lang === "ar" ? "rtl" : "ltr";\n document.querySelectorAll("[data-i18n]").forEach((e) => (e.textContent = t(e.dataset.i18n)));\n document.querySelectorAll("[data-i18n-placeholder]").forEach((e) => (e.placeholder = t(e.dataset.i18nPlaceholder)));\n $("lang").value = lang;\n if (save) api("/api/language", { language: lang }).catch(() => {});\n if (state) render();\n refreshSetup();\n if (update) refreshUpdate();\n if (tools.length) refreshTools();\n}\n$("lang").innerHTML = Object.entries(LANGS).map(([k, v]) => `<option value="${k}">${v}</option>`).join("");\n$("lang").addEventListener("change", (e) => loadLang(e.target.value, true));\n\nasync function api(path, body) {\n const res = await fetch(path, { method: body ? "POST" : "GET", headers: { "content-type": "application/json", "x-bitpull-token": token || "" }, body: body ? JSON.stringify(body) : undefined });\n const data = await res.json().catch(() => ({}));\n if (!res.ok) throw new Error(data.error || res.status);\n return data;\n}\n\n// ---- status -----------------------------------------------------------------------------\nlet state = null;\n/** The user changed the lending rules and has not saved them yet. */\nlet rulesDirty = false;\nasync function refresh() {\n try { state = await api("/api/status"); } catch (e) { if (String(e.message) === "unauthorized") { $("app").hidden = true; $("locked").hidden = false; } return; }\n $("app").hidden = false; $("locked").hidden = true;\n render();\n}\n\nfunction render() {\n const s = state, n = s.node;\n const pills = [\n `<span class="pill ${n.online ? "good" : "bad"}">${esc(t(n.online ? "pill.online" : "pill.offline"))}</span>`,\n `<span class="pill ${n.relay === "disconnected" ? "warn" : "good"}">${esc(t(n.relay === "direct" ? "pill.direct" : n.relay === "connected" ? "pill.relay_on" : "pill.relay_off"))}</span>`,\n `<span class="pill">${esc(t("pill.cached", { n: n.cached }))}</span>`,\n ];\n if (s.me) pills.unshift(`<span class="pill">${esc(s.me.email)}</span>`);\n $("pills").innerHTML = pills.join("");\n const net = s.network;\n if (net) {\n $("live").hidden = false;\n $("live").innerHTML = `<span class="dot"></span><strong>${esc(t("net.title"))}</strong>` +\n [["net.online", net.computersOnline], ["net.lending", net.computersLending], ["net.cpu", net.cpus], ["net.ram", net.memoryGb], ["net.gpu", net.gpus.total]]\n .map(([k, v]) => `<span>${esc(t(k, { n: fmt(v) }))}</span>`).join("") +\n `<span title="${esc(net.models.join(", "))}">${esc(t("net.models", { n: fmt(net.models.length) }))}</span><span>${esc(t("net.jobs", { n: fmt(net.jobsRunning) }))}</span>`;\n }\n if (s.me) {\n $("balance").textContent = fmt(s.me.balance);\n $("plan").textContent = t("credits.plan", { plan: t(`plan.${s.me.plan}`), n: s.me.threshold });\n }\n const w = n.worker;\n $("worker-state").textContent = t(`lend.state.${w.state}`);\n $("worker-detail").textContent = w.currentJob\n ? t("lend.running", { kind: t(w.currentJob.kind === "inference" ? "jobs.model" : "jobs.container"), time: new Date(w.currentJob.since).toLocaleTimeString(lang) })\n : t("lend.detail", { reason: w.reason && !w.reason.startsWith("error") ? t(`lend.reason.${w.reason}`) : (w.reason || ""), n: w.completed, cpus: s.capacity.cpus, ram: fmt(s.capacity.memoryMb / 1024) }) +\n (s.capacity.containers ? t("lend.detail.sandbox", { name: w.sandbox || "" }) : "") + (s.capacity.models.length ? t("lend.detail.models", { n: s.capacity.models.length }) : "");\n // What the network actually sees of this computer, and why nothing can run when that is the case.\n const seen = s.me && (s.me.nodes || []).find((x) => x.id === s.nodeId);\n const usable = s.capacity.containers || s.capacity.models.length > 0;\n const tried = (s.sandbox && s.sandbox.tried || []).join(" \xB7 ");\n // Known problems in the person\'s language; anything else as reported by the system.\n const sbProblem = /Docker Hub login is no longer valid/.test(tried) ? t("lend.docker_login") : tried;\n $("worker-visible").className = "status " + (seen && seen.online && seen.capacity && usable ? "ok" : "missing");\n // Lending switched off: say so plainly, with what to do; Pause/Resume does not turn it on.\n $("pause").hidden = !s.lending.enabled;\n if (!s.lending.enabled) {\n $("worker-visible").className = "status missing";\n $("worker-visible").textContent = t("lend.off_hint", { enabled: t("rules.enabled"), rules: t("rules.title"), save: t("rules.save") });\n } else if (s.lendingNow.ok && s.capacity.memoryMb < 1024 && usable) {\n $("worker-visible").className = "status missing";\n $("worker-visible").textContent = t("lend.low_memory", { mb: s.capacity.memoryMb, rules: t("rules.title"), memory: t("rules.memory"), save: t("rules.save") });\n } else $("worker-visible").textContent = s.lending.paused || !s.lendingNow.ok ? ""\n : !usable ? t("lend.unusable", { reason: s.lending.containers ? (sbProblem || t("lend.unusable.docker")) : t("lend.unusable.off") })\n : seen && seen.online && seen.capacity ? t("lend.visible", { cpus: seen.capacity.cpus, ram: fmt(seen.capacity.memoryMb / 1024) })\n : t("lend.invisible");\n $("pause").textContent = t(s.lending.paused ? "lend.resume" : "lend.pause");\n $("pause").dataset.tip = s.lending.paused ? "tip.resume" : "tip.pause";\n $("pause").className = s.lending.paused ? "" : "danger";\n\n // Never overwrite changes the user has not saved yet (on macOS a clicked checkbox does not take focus).\n if (!rulesDirty && (!document.activeElement || !$("rules").contains(document.activeElement))) {\n const f = $("rules").elements, l = s.lending;\n for (const k of ["enabled", "containers", "serveModels", "onlyOnAc"]) f[k].checked = !!l[k];\n f.keepAwake.checked = l.keepAwake !== false;\n for (const k of ["maxCpus", "maxMemoryMb", "idleMinutes"]) f[k].value = l[k];\n f.gpu.value = l.gpu; f.cacheMax.value = s.cacheMax;\n f.hourFrom.value = l.hours ? l.hours[0] : ""; f.hourTo.value = l.hours ? l.hours[1] : "";\n }\n $("folders").innerHTML = s.folders.map((p) => `<li><span class="path">${esc(p)}</span><span><button class="secondary" data-draft="${esc(p)}" data-tip="tip.folder.draft">${esc(t("folders.draft"))}</button> <button data-publish="${esc(p)}" data-tip="tip.folder.publish">${esc(t("folders.publish"))}</button> <button class="secondary" data-unfolder="${esc(p)}" data-tip="tip.folder.remove">${esc(t("folders.remove"))}</button></span></li>`).join("") || `<li class="hint">${esc(t("folders.none"))}</li>`;\n $("repos").innerHTML = s.repos.map((r) => `<li><span><strong>${esc(r.name)}</strong><br><span class="path hint">${esc(r.path)}</span></span><button class="secondary" data-unpublish="${esc(r.id)}" data-tip="tip.repo.withdraw">${esc(t("repos.withdraw"))}</button></li>`).join("") || `<li class="hint">${esc(t("repos.none"))}</li>`;\n $("jobs").innerHTML = s.jobs.map((j) => `<li><span>${esc(t(j.kind === "inference" ? "jobs.model" : "jobs.container"))} \xB7 ${new Date(j.createdAt).toLocaleString(lang)}</span><span>${esc(t(`jobs.status.${j.status}`))}${j.cost != null ? ` \xB7 ${esc(t("jobs.cost", { n: fmt(j.cost) }))}` : ""}</span></li>`).join("") || `<li class="hint">${esc(t("jobs.none"))}</li>`;\n $("oai-url").textContent = s.openaiBaseUrl;\n if (document.activeElement !== $("wait-minutes") && !$("wait-minutes").dataset.dirty) $("wait-minutes").value = s.answerWaitMinutes ?? 10;\n $("models-hint").textContent = t("ask.offers", { models: s.capacity.models.join(", ") || t("ask.offers_none") });\n}\n\n// ---- every button answers at once, and says clearly what went wrong ----------------------\nfunction explain(err) {\n const m = String((err && err.message) || err);\n if (/Failed to fetch|Load failed|NetworkError/.test(m)) return t("err.agent_down");\n if (/fetch failed|ECONNREFUSED|ENOTFOUND|ETIMEDOUT|coordinator unreachable|timeout/i.test(m)) return t("err.server");\n if (/unauthorized/.test(m)) return t("err.session");\n if (/billing_not_configured/.test(m)) return t("err.billing");\n if (/not found on disk|ENOENT/.test(m)) return t("err.no_folder");\n if (/not a folder/.test(m)) return t("err.not_folder");\n if (/insufficient_credits/.test(m)) return `${t("err.credits")} ${m.replace(/^insufficient_credits:\\s*/, "")}`;\n if (/device_required/.test(m)) return t("err.device");\n if (/No open model is online/.test(m)) return t("err.no_model");\n if (/invalid_request|invalid JSON/.test(m)) return t("err.invalid");\n return m.replace(/^Error:\\s*/, "");\n}\n\n/** Runs a button\'s action: disables it at once, shows "Working\u2026", then the result next to it. */\nasync function act(btn, msgEl, fn, okText) {\n if (btn.disabled) return;\n const label = btn.textContent;\n btn.disabled = true;\n btn.textContent = t("working");\n if (msgEl) { msgEl.className = "msg"; msgEl.textContent = ""; }\n try {\n const r = await fn();\n const text = typeof okText === "function" ? okText(r) : okText;\n if (msgEl && text) { msgEl.className = "msg ok"; msgEl.textContent = text; }\n return r;\n } catch (err) {\n if (msgEl) { msgEl.className = "msg error"; msgEl.textContent = explain(err); }\n } finally {\n btn.disabled = false;\n btn.textContent = label;\n }\n}\n\nfor (const ev of ["input", "change"]) $("rules").addEventListener(ev, () => { rulesDirty = true; });\n\n$("rules").addEventListener("submit", (e) => {\n e.preventDefault();\n const f = e.target.elements;\n if ((f.hourFrom.value === "") !== (f.hourTo.value === "")) { $("rules-msg").className = "msg error"; $("rules-msg").textContent = t("rules.hours_both"); return; }\n const hours = f.hourFrom.value !== "" ? [Number(f.hourFrom.value), Number(f.hourTo.value)] : null;\n act(e.submitter || e.target.querySelector("button"), $("rules-msg"), async () => {\n await api("/api/settings", { cacheMax: Number(f.cacheMax.value), lending: { enabled: f.enabled.checked, maxCpus: Number(f.maxCpus.value), maxMemoryMb: Number(f.maxMemoryMb.value),\n gpu: f.gpu.value, containers: f.containers.checked, serveModels: f.serveModels.checked, idleMinutes: Number(f.idleMinutes.value), onlyOnAc: f.onlyOnAc.checked, keepAwake: f.keepAwake.checked, hours } });\n rulesDirty = false;\n refresh();\n }, t("rules.saved"));\n});\n\n$("pause").addEventListener("click", () => {\n const pausing = !state.lending.paused;\n act($("pause"), $("pause-msg"), async () => { await api("/api/pause", { paused: pausing }); await refresh(); }, t(pausing ? "lend.paused_ok" : "lend.resumed_ok"));\n});\n\n$("folder-add").addEventListener("click", () => {\n const path = $("folder-path").value.trim();\n if (!path) { $("folder-msg").className = "msg error"; $("folder-msg").textContent = t("folders.need_path"); return; }\n act($("folder-add"), $("folder-msg"), async () => { await api("/api/folders", { path }); $("folder-path").value = ""; await refresh(); }, t("folders.added"));\n});\n\ndocument.addEventListener("click", (e) => {\n const b = e.target.closest("button");\n if (!b || b.closest("#setup")) return;\n const msg = $("folder-msg");\n if (b.dataset.unfolder) act(b, msg, async () => { await api("/api/folders/remove", { path: b.dataset.unfolder }); await refresh(); }, t("folders.removed"));\n if (b.dataset.draft) act(b, msg, () => api("/api/draft", { folder: b.dataset.draft }), (r) => t("folders.drafted", { n: r.draft.modules.length }));\n if (b.dataset.publish) act(b, msg, async () => {\n const r = await api("/api/publish", { folder: b.dataset.publish });\n if (!r.ok) throw new Error(r.errors.join(" ") + (r.secrets ? " " + t("folders.secrets_in", { where: r.secrets.map((x) => t("folders.line", { file: x.file, line: x.line })).join(", ") }) : ""));\n await refresh();\n return r;\n }, (r) => t("folders.published", { name: r.repo.name, n: r.files }));\n if (b.dataset.unpublish) act(b, $("repos-msg"), async () => { await api("/api/repos/remove", { id: b.dataset.unpublish }); await refresh(); }, t("repos.withdrawn"));\n if (b.dataset.buy) act(b, $("buy-msg"), async () => { const { url } = await api("/api/checkout", { product: b.dataset.buy }); await api("/api/open", { url }); }, t("buy.ok"));\n});\n\n$("ask").addEventListener("click", () => {\n const prompt = $("prompt").value.trim();\n const out = $("answer");\n out.hidden = false;\n if (!prompt) { out.textContent = t("ask.empty"); return; }\n out.textContent = t("ask.waiting");\n act($("ask"), null, async () => {\n try { const r = await api("/api/ask", { prompt, tier: $("tier").value }); out.textContent = `${r.content}\\n\\n\u2014 ${r.model} \xB7 ${t("ask.credits", { n: fmt(r.cost) })}`; refresh(); }\n catch (err) { out.textContent = explain(err); }\n });\n});\n$("show-key").addEventListener("click", () => { $("oai-key").textContent = token; });\n$("wait-minutes").addEventListener("input", () => { $("wait-minutes").dataset.dirty = "1"; });\n$("save-wait").addEventListener("click", () => {\n const n = Math.round(Number($("wait-minutes").value));\n if (!(n >= 1 && n <= 120)) { $("wait-msg").className = "msg error"; $("wait-msg").textContent = t("ask.wait.range"); return; }\n act($("save-wait"), $("wait-msg"), async () => { await api("/api/settings", { answerWaitMinutes: n }); delete $("wait-minutes").dataset.dirty; }, t("ask.wait.saved", { n }));\n});\n\n// ---- "Set up this computer" -------------------------------------------------------------\nasync function refreshSetup() {\n if (!token) return;\n let st;\n try { st = await api("/api/setup"); } catch { return; }\n const task = (id) => st.tasks.find((x) => x.id === id);\n const progress = (x) => x ? (x.state === "running" ? `<progress max="100" value="${x.progress || 0}"></progress><div class="status">${esc(x.label)} ${x.progress ? x.progress + "%" : ""}</div>`\n : x.state === "failed" ? `<div class="status missing">${esc(x.detail || "")}</div>`\n : `<div class="status ok">${esc(x.detail && /[\\\\/]/.test(x.detail) ? t("setup.opened", { file: x.detail.split(/[\\\\/]/).pop() }) : t("setup.done"))}</div>`) : "";\n const NAMES = { docker: "Docker", ollama: "Ollama", "apple-container": "Apple Container", nvidia: "NVIDIA" };\n const install = (id, label) => {\n const inst = st.installers[id];\n if (!inst) return "";\n const vars = esc(JSON.stringify({ name: NAMES[id] || id }));\n if (inst.kind === "download") return `<button data-download="${id}" data-tip="tip.setup.download" data-tip-vars="${vars}">${esc(label)}</button>`;\n if (inst.kind === "page") return `<button class="secondary" data-open="${esc(inst.url)}" data-tip="tip.setup.open" data-tip-vars="${vars}">${esc(label)}</button>`;\n return `<div class="status">${esc(t("setup.terminal"))} <code>${esc(inst.command)}</code></div>`;\n };\n const row = (title, ok, okText, missingText, action, help) =>\n `<div class="check-row"><div style="flex:1 1 280px"><strong>${esc(title)}</strong><div class="status">${esc(help)}</div></div><div style="text-align:end;min-width:220px">${ok ? `<span class="ok">\u2713 ${esc(okText)}</span>` : `<span class="missing">${esc(missingText)}</span><div>${action}</div>`}</div></div>`;\n const rows = [];\n rows.push(row("Docker", st.docker.running, t("setup.status.running"), t(st.docker.installed ? "setup.status.stopped" : "setup.status.missing"),\n st.docker.installed ? `<button data-start="docker" data-tip="tip.setup.start" data-tip-vars="${esc(JSON.stringify({ name: "Docker" }))}">${esc(t("setup.docker.start"))}</button>` : install("docker", t("setup.docker.download")) + progress(task("download-docker")),\n t("setup.docker.help") + (st.docker.problem ? ` \u2014 ${/Docker Hub login is no longer valid/.test(st.docker.problem) ? t("lend.docker_login") : st.docker.problem}` : "")));\n if (st.os === "darwin" && st.arch === "arm64")\n rows.push(row(t("setup.apple.title"), st.appleContainer.installed, t("setup.status.installed"), t("setup.status.missing"), install("apple-container", t("setup.apple.get")), t("setup.apple.help")));\n rows.push(row("Ollama", st.ollama.running, t("setup.status.running"), t(st.ollama.installed ? "setup.status.stopped" : "setup.status.missing"),\n st.ollama.installed ? `<button data-start="ollama" data-tip="tip.setup.start" data-tip-vars="${esc(JSON.stringify({ name: "Ollama" }))}">${esc(t("setup.ollama.start"))}</button>` : install("ollama", t("setup.ollama.download")) + progress(task("download-ollama")),\n t("setup.ollama.help")));\n const rec = st.recommendedModel;\n rows.push(row(t("setup.model.title"), st.ollama.models.length > 0, st.ollama.models.join(", "), t("setup.model.none"),\n st.ollama.running ? `<button data-pull="${esc(rec.name)}" data-tip="tip.setup.pull" data-tip-vars="${esc(JSON.stringify({ model: rec.name, size: rec.sizeGb }))}">${esc(t("setup.model.download", { model: rec.name, size: rec.sizeGb }))}</button>${progress(task("model-" + rec.name))}` : `<div class="status">${esc(t("setup.model.need_ollama"))}</div>`,\n t("setup.model.help", { ram: st.ramGb, model: rec.name })));\n if (st.nvidia !== null)\n rows.push(row(t("setup.nvidia.title"), st.nvidia, t("setup.status.found"), t("setup.status.not_found"), install("nvidia", t("setup.nvidia.get")), t("setup.nvidia.help")));\n $("setup").innerHTML = rows.join("") + `<div class="row"><button class="secondary" id="recheck" data-tip="tip.setup.recheck">${esc(t("setup.recheck"))}</button></div>`;\n renderModels(st, task, progress);\n if (st.tasks.some((x) => x.state === "running")) setTimeout(refreshSetup, 1500);\n}\n\ndocument.addEventListener("click", (e) => {\n const b = e.target.closest("button");\n if (!b || !b.closest("#setup")) return;\n const m = $("setup-msg");\n if (b.dataset.download) act(b, m, () => api("/api/setup/download", { id: b.dataset.download }), t("setup.ok.download"));\n if (b.dataset.start) act(b, m, () => api("/api/setup/start", { id: b.dataset.start }), t("setup.ok.start"));\n if (b.dataset.pull) act(b, m, () => api("/api/setup/pull", { model: b.dataset.pull }), t("setup.ok.pull"));\n if (b.dataset.open) act(b, m, () => api("/api/open", { url: b.dataset.open }), t("setup.ok.page"));\n if (b.id === "recheck") act(b, m, () => api("/api/setup/recheck", {}), t("setup.ok.recheck"));\n setTimeout(refreshSetup, 1000);\n});\n\n// ---- open AI models to share, and the lender\'s limits ------------------------------------\nconst TASK_ORDER = ["chat", "vision", "ocr", "translate", "embed", "rerank", "image", "upscale", "stt", "tts", "music"];\nfunction renderModels(st, task, progress) {\n const lem = st.lemonade;\n const engine = !lem.supported\n ? `<span class="missing">${esc(t("models.engine.unsupported"))}</span>`\n : lem.running ? `<span class="ok">\u2713 ${esc(t("setup.status.running"))}</span>`\n : `<button data-lemonade="1" data-tip="tip.models.engine">${esc(t(lem.installed ? "models.engine.repair" : "models.engine.install"))}</button>${progress(task("download-lemonade"))}${lem.error ? `<div class="status missing">${esc(lem.error)}</div>` : ""}`;\n const installed = (m) => m.runtime === "ollama"\n ? st.ollama.models.some((x) => x === m.id || x === m.id + ":latest")\n : lem.models.includes(m.id);\n const ready = (m) => m.runtime === "ollama" ? st.ollama.running : lem.running;\n const html = [`<div class="check-row"><div style="flex:1 1 280px"><strong>${esc(t("models.engine.title"))}</strong><div class="status">${esc(t("models.engine.help"))}</div></div><div style="text-align:end;min-width:220px">${engine}</div></div>`];\n for (const tk of TASK_ORDER) {\n const list = st.openModels.filter((m) => m.tasks[0] === tk);\n if (!list.length) continue;\n html.push(`<h3 style="margin:14px 0 4px">${esc(t("task." + tk))}</h3>`);\n for (const m of list) {\n const tip = esc(JSON.stringify({ model: m.name, size: m.sizeGb }));\n let action;\n if (installed(m)) action = `<span class="ok">\u2713 ${esc(t("models.shared"))}</span>`;\n else if (!m.available) action = `<span class="status">${esc(t("models.not_here"))}</span>`;\n else if (!ready(m)) action = `<span class="status">${esc(t(m.runtime === "ollama" ? "setup.model.need_ollama" : "models.need_engine"))}</span>`;\n else action = `<button class="${m.fits ? "" : "secondary"}" data-pull-model="${esc(m.id)}" data-tip="tip.models.download" data-tip-vars="${tip}">${esc(t("models.download", { size: m.sizeGb }))}</button>${m.fits ? "" : `<div class="status missing">${esc(t("models.needs_ram", { ram: m.minRamGb }))}</div>`}${progress(task("model-" + m.id))}`;\n html.push(`<div class="check-row"><div style="flex:1 1 280px"><strong>${esc(m.name)}</strong>${m.recommended ? ` <span class="pill">${esc(t("models.recommended"))}</span>` : ""}<div class="status">${esc(m.sizeGb)} GB \xB7 ${esc(t("models.license"))}: ${esc(m.license)}</div></div><div style="text-align:end;min-width:220px">${action}</div></div>`);\n }\n }\n $("ai-models").innerHTML = html.join("");\n // Limits: keep what the user is typing; render only once per load.\n if (!$("ai-limits").dataset.ready) {\n const lim = st.aiLimits, u = st.aiUsage;\n const cell = (p, k) => `<input type="number" min="0" step="1" data-limit="${p}.${k}" value="${lim[p][k] ?? ""}" placeholder="${esc(t("limits.none"))}" style="width:120px">`;\n $("ai-limits").innerHTML = `<table class="limits"><tr><th></th><th>${esc(t("limits.requests"))}</th><th>${esc(t("limits.tokens"))}</th><th>${esc(t("limits.used"))}</th></tr>` +\n ["day", "week", "month"].map((p) => `<tr><td>${esc(t("limits." + p))}</td><td>${cell(p, "requests")}</td><td>${cell(p, "tokens")}</td><td class="status">${esc(t("limits.usage", { requests: u[p].requests, tokens: fmt(u[p].tokens) }))}</td></tr>`).join("") + `</table>`;\n $("ai-limits").dataset.ready = "1";\n }\n}\n\ndocument.addEventListener("click", (e) => {\n const b = e.target.closest("button");\n if (!b || !b.closest("#ai-models")) return;\n const m = $("models-msg");\n if (b.dataset.lemonade) act(b, m, () => api("/api/setup/download", { id: "lemonade" }), t("models.ok.engine"));\n if (b.dataset.pullModel) act(b, m, () => api("/api/setup/pull", { model: b.dataset.pullModel }), t("setup.ok.pull"));\n setTimeout(refreshSetup, 1000);\n});\n\n$("save-limits").addEventListener("click", () => {\n const aiLimits = { day: {}, week: {}, month: {} };\n for (const input of document.querySelectorAll("[data-limit]")) {\n const [p, k] = input.dataset.limit.split(".");\n aiLimits[p][k] = input.value === "" ? null : Math.max(0, Math.floor(Number(input.value)));\n }\n act($("save-limits"), $("models-msg"), () => api("/api/settings", { lending: { aiLimits } }), t("limits.saved"));\n});\n\n// ---- connect AI tools -------------------------------------------------------------------\nlet tools = [];\nasync function refreshTools() {\n try { tools = (await api("/api/integrations")).tools; } catch { return; }\n $("tools").innerHTML = tools.map((x, i) => {\n const vars = esc(JSON.stringify({ name: x.name }));\n const status = x.connected ? `<span class="ok">\u2713 ${esc(t("tools.connected"))}</span>` : x.installed ? `<span class="status">${esc(t("tools.installed"))}</span>` : `<span class="status">${esc(t("tools.not_found"))}</span>`;\n const connect = x.installed && !x.connected ? `<button data-connect="${esc(x.id)}" data-tip="tip.tools.connect" data-tip-vars="${vars}">${esc(t("tools.connect"))}</button>` : "";\n const copy = `<button class="secondary" data-copy="${i}" data-tip="tip.tools.copy" data-tip-vars="${vars}">${esc(t("tools.copy"))}</button>`;\n const problem = x.problem === "config_invalid" ? `<div class="status missing">${esc(t("tools.config_invalid", { name: x.name }))}</div>` : "";\n return `<div class="check-row"><div style="flex:1 1 280px"><strong>${esc(x.name)}</strong> ${status}${problem}</div><div class="row" style="margin:0">${connect}${copy}</div></div>`;\n }).join("");\n}\n\nasync function copyText(text) {\n try { await navigator.clipboard.writeText(text); return true; } catch {}\n const ta = document.createElement("textarea");\n ta.value = text; document.body.appendChild(ta); ta.select();\n let ok = false;\n try { ok = document.execCommand("copy"); } catch {}\n ta.remove();\n return ok;\n}\n\ndocument.addEventListener("click", (e) => {\n const b = e.target.closest("button");\n if (!b || !b.closest("#tools")) return;\n const m = $("tools-msg");\n if (b.dataset.connect) {\n const tool = tools.find((x) => x.id === b.dataset.connect);\n act(b, m, async () => {\n try { await api("/api/integrations/connect", { id: b.dataset.connect }); }\n catch (err) { if (/config_invalid/.test(err.message)) throw new Error(t("tools.config_invalid", { name: tool.name })); throw err; }\n await refreshTools();\n }, t("tools.done", { name: tool.name }));\n }\n if (b.dataset.copy !== undefined) {\n const tool = tools[Number(b.dataset.copy)];\n act(b, m, async () => {\n if (!(await copyText(tool.manual))) throw new Error(`${t("tools.manual")} ${tool.manual}`);\n }, `${t("tools.copied")} ${tool.where ? `${t("tools.manual")} ${tool.where}` : ""}`);\n }\n});\n\n// ---- app updates ------------------------------------------------------------------------\nlet update = null;\nasync function refreshUpdate() {\n try { update = await api("/api/update"); } catch { return; }\n const u = update;\n $("update-info").textContent = `${t("update.current", { v: u.current })}${u.latest ? " \xB7 " + t("update.latest", { v: u.latest }) : ""}`;\n const btn = $("update-btn");\n if (!btn.disabled) btn.textContent = u.available ? t("update.install", { v: u.latest }) : t("update.button");\n const st = u.status;\n const fresh = st && Date.now() / 1000 - Number(st.at || 0) < 600;\n const m = $("update-msg");\n if (!u.inApp) { m.className = "msg"; m.textContent = t("update.not_in_app"); return; }\n if (fresh && st.state) {\n m.className = st.state === "error" ? "msg error" : st.state === "up_to_date" ? "msg ok" : "msg";\n m.textContent = t(`update.state.${st.state}`, { v: st.version || u.latest || "", msg: st.message || "" });\n if (["requested", "checking", "installing", "restarting"].includes(st.state)) setTimeout(refreshUpdate, 1500);\n } else if (u.available) { m.className = "msg"; m.textContent = t("update.available", { v: u.latest }); }\n}\n$("update-btn").addEventListener("click", () => {\n act($("update-btn"), null, async () => {\n try { await api("/api/update", {}); }\n catch (err) { $("update-msg").className = "msg error"; $("update-msg").textContent = /updates_only_in_app/.test(err.message) ? t("update.not_in_app") : explain(err); return; }\n setTimeout(refreshUpdate, 500);\n });\n});\n\n// ---- explanations on hover: after a short pause over a button, say what it does ----------\nconst tipBox = document.createElement("div");\ntipBox.id = "tip";\ntipBox.setAttribute("role", "tooltip");\ntipBox.hidden = true;\ndocument.body.appendChild(tipBox);\nlet tipTimer = null;\nconst TIP_DELAY_MS = 800;\nfunction showTip(el) {\n let vars = {};\n try { vars = JSON.parse(el.dataset.tipVars || "{}"); } catch {}\n tipBox.textContent = t(el.dataset.tip, vars);\n tipBox.hidden = false;\n const r = el.getBoundingClientRect(), w = tipBox.offsetWidth, h = tipBox.offsetHeight;\n const left = Math.min(Math.max(8, r.left + r.width / 2 - w / 2), window.innerWidth - w - 8);\n const top = r.bottom + 8 + h > window.innerHeight ? r.top - h - 8 : r.bottom + 8;\n tipBox.style.left = `${left}px`;\n tipBox.style.top = `${Math.max(8, top)}px`;\n}\nfunction hideTip() { clearTimeout(tipTimer); tipBox.hidden = true; }\nconst scheduleTip = (e) => {\n const el = e.target.closest && e.target.closest("[data-tip]");\n if (!el) return;\n clearTimeout(tipTimer);\n tipTimer = setTimeout(() => showTip(el), TIP_DELAY_MS);\n};\ndocument.addEventListener("mouseover", scheduleTip);\ndocument.addEventListener("focusin", scheduleTip);\ndocument.addEventListener("mouseout", (e) => { if (e.target.closest && e.target.closest("[data-tip]")) hideTip(); });\ndocument.addEventListener("focusout", hideTip);\ndocument.addEventListener("mousedown", hideTip);\ndocument.addEventListener("keydown", (e) => { if (e.key === "Escape") hideTip(); });\nwindow.addEventListener("scroll", hideTip, { passive: true });\n\n// ---- start --------------------------------------------------------------------------------\n(async () => {\n if (!token) { await loadLang(langFromApp || "en"); $("locked").hidden = false; return; }\n let saved = null;\n try { saved = (await api("/api/language")).language; } catch {}\n const browser = (navigator.languages || [navigator.language]).map((l) => l.slice(0, 2)).find((l) => LANGS[l]);\n await loadLang(langFromApp || saved || browser || "en", !!langFromApp && langFromApp !== saved);\n refresh();\n refreshUpdate();\n refreshTools();\n setInterval(refresh, 5000);\n setInterval(refreshSetup, 20000);\n setInterval(refreshUpdate, 60000);\n})();\n</script>\n</body>\n</html>\n';
|
|
19377
|
-
return (0,
|
|
19434
|
+
if (true) return '<!doctype html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<meta name="viewport" content="width=device-width, initial-scale=1">\n<title>BitPull</title>\n<style>\n :root { --bg:#fafaf7; --surface:#fff; --text:#1d1d1b; --muted:#6b6b66; --line:#e4e2dc; --accent:#2f5bd3; --accent-ink:#fff; --good:#1f7a4d; --warn:#9a6700; --bad:#b3261e; }\n @media (prefers-color-scheme: dark) { :root { --bg:#151514; --surface:#1e1e1c; --text:#ecebe6; --muted:#a2a19b; --line:#33322f; --accent:#7c9cf2; --accent-ink:#10131c; --good:#5cc28f; --warn:#e3b341; --bad:#f2867c; } }\n * { box-sizing: border-box; }\n body { margin:0; background:var(--bg); color:var(--text); font:15px/1.5 system-ui,-apple-system,"Segoe UI","Noto Sans",sans-serif; }\n header { display:flex; flex-wrap:wrap; gap:12px; justify-content:space-between; align-items:center; padding:16px; border-bottom:1px solid var(--line); background:var(--surface); }\n header h1 { font-size:18px; margin:0; }\n .head-right { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }\n .pills { display:flex; flex-wrap:wrap; gap:8px; }\n .pill { border:1px solid var(--line); border-radius:999px; padding:3px 10px; font-size:13px; color:var(--muted); }\n .pill.good { color:var(--good); border-color:currentColor; } .pill.warn { color:var(--warn); border-color:currentColor; } .pill.bad { color:var(--bad); border-color:currentColor; }\n main { max-width:1100px; margin:0 auto; padding:16px; display:grid; gap:16px; grid-template-columns:repeat(auto-fit,minmax(320px,1fr)); }\n section { background:var(--surface); border:1px solid var(--line); border-radius:12px; padding:16px; min-width:0; }\n section h2 { font-size:16px; margin:0 0 4px; } section p.hint { margin:0 0 12px; color:var(--muted); font-size:13px; }\n .stat { font-size:28px; font-weight:700; }\n label { display:flex; justify-content:space-between; align-items:center; gap:8px; padding:6px 0 2px; }\n .field { border-bottom:1px solid var(--line); padding-bottom:6px; }\n .field p.help { margin:0; color:var(--muted); font-size:12.5px; line-height:1.45; }\n .check-row { display:flex; flex-wrap:wrap; justify-content:space-between; gap:10px; align-items:flex-start; padding:10px 0; border-bottom:1px solid var(--line); }\n .check-row .status { font-size:13px; color:var(--muted); }\n .ok { color:var(--good); font-weight:600; } .missing { color:var(--warn); font-weight:600; }\n progress { width:100%; height:8px; }\n input[type=number], input[type=text], select { width:110px; padding:6px 8px; border:1px solid var(--line); border-radius:6px; background:var(--bg); color:var(--text); font:inherit; }\n select#lang { width:auto; }\n input.wide { width:100%; }\n button { background:var(--accent); color:var(--accent-ink); border:0; border-radius:8px; padding:8px 12px; font:inherit; font-weight:600; cursor:pointer; }\n button.secondary { background:transparent; color:var(--text); border:1px solid var(--line); }\n button:disabled { opacity:.6; cursor:progress; }\n button.danger { background:var(--bad); color:#fff; }\n .row { display:flex; gap:8px; align-items:center; margin-top:10px; flex-wrap:wrap; }\n ul.list { list-style:none; padding:0; margin:8px 0 0; }\n ul.list li { display:flex; justify-content:space-between; gap:8px; align-items:center; padding:8px 0; border-bottom:1px solid var(--line); font-size:14px; }\n ul.list li span.path { overflow-wrap:anywhere; }\n #ai-limits { overflow-x:auto; } table.limits { border-collapse:collapse; } table.limits td, table.limits th { padding:4px 8px; text-align:start; }\n code { font:13px ui-monospace,Menlo,monospace; overflow-wrap:anywhere; direction:ltr; unicode-bidi:embed; }\n textarea { width:100%; min-height:70px; padding:8px; border:1px solid var(--line); border-radius:8px; background:var(--bg); color:var(--text); font:inherit; }\n pre { white-space:pre-wrap; background:var(--bg); border:1px solid var(--line); border-radius:8px; padding:10px; margin:8px 0 0; max-height:260px; overflow:auto; font-size:13px; }\n .msg { min-height:1.4em; font-size:13px; margin-top:6px; } .msg.error { color:var(--bad); } .msg.ok { color:var(--good); }\n .full { grid-column:1/-1; }\n .live { display:flex; flex-wrap:wrap; gap:4px 14px; align-items:center; padding:8px 16px; font-size:13px; color:var(--muted); border-bottom:1px solid var(--line); background:var(--surface); }\n .live strong { color:var(--text); } .live .dot { width:8px; height:8px; border-radius:50%; background:var(--good); }\n .plans { display:grid; gap:10px; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); margin-top:10px; }\n .plan { border:1px solid var(--line); border-radius:10px; padding:10px; font-size:13px; display:flex; flex-direction:column; }\n .plan.current { border-color:var(--accent); }\n .plan h3 { font-size:14px; margin:0; } .plan .price { font-size:18px; font-weight:700; margin:4px 0; }\n .plan ul { padding-inline-start:16px; margin:4px 0 8px; color:var(--muted); flex:1; } .plan button { width:100%; }\n .badge { font-size:11px; padding:1px 7px; border-radius:99px; background:var(--accent); color:var(--accent-ink); margin-inline-start:6px; }\n .summary { border:1px solid var(--accent); border-radius:10px; padding:10px 12px; margin-top:10px; font-size:13px; }\n .summary h3 { margin:2px 0; font-size:15px; } .summary ul { padding-inline-start:16px; margin:4px 0; }\n .account-row { display:flex; flex-wrap:wrap; justify-content:space-between; gap:8px; align-items:center; margin-top:12px; padding-top:10px; border-top:1px solid var(--line); font-size:13px; color:var(--muted); }\n #locked { max-width:520px; margin:80px auto; padding:0 16px; text-align:center; }\n [hidden] { display:none !important; }\n #tip { position:fixed; z-index:50; max-width:320px; padding:8px 10px; border-radius:8px; background:var(--text); color:var(--bg); font-size:13px; line-height:1.45; box-shadow:0 4px 16px rgba(0,0,0,.18); pointer-events:none; }\n</style>\n</head>\n<body>\n<div id="locked" hidden>\n <h1>BitPull</h1>\n <p data-i18n="locked.text"></p>\n</div>\n<div id="loggedout" hidden>\n <h1>BitPull</h1>\n <p data-i18n="logout.done"></p>\n <p><code>bitpull login --device</code></p>\n</div>\n<div id="app" hidden>\n<header>\n <h1 data-i18n="app.title"></h1>\n <div class="head-right">\n <div class="pills" id="pills"></div>\n <select id="lang" aria-label="Language" data-tip="tip.lang"></select>\n </div>\n</header>\n<div class="live" id="live" hidden></div>\n<main>\n <section>\n <h2 data-i18n="credits.title"></h2>\n <div class="stat" id="balance">\u2013</div>\n <p class="hint" id="plan"></p>\n <div class="plans" id="plan-cards"></div>\n <div class="summary" id="buy-summary" hidden></div>\n <div class="msg" id="buy-msg"></div>\n <div class="account-row">\n <span id="account-line"></span>\n <button class="secondary" id="logout" data-i18n="logout.button" data-tip="tip.logout"></button>\n </div>\n <div class="summary" id="logout-confirm" hidden>\n <p id="logout-text"></p>\n <div class="row">\n <button class="danger" id="logout-yes" data-i18n="logout.yes" data-tip="tip.logout.yes"></button>\n <button class="secondary" id="logout-no" data-i18n="plans.cancel" data-tip="tip.logout.no"></button>\n </div>\n </div>\n </section>\n\n <section>\n <h2 data-i18n="lend.title"></h2>\n <p class="hint" data-i18n="lend.hint"></p>\n <div class="stat" id="worker-state">\u2013</div>\n <p class="hint" id="worker-detail"></p>\n <p class="status" id="worker-visible"></p>\n <div class="row"><button id="pause" class="danger"></button></div>\n <div class="msg" id="pause-msg"></div>\n </section>\n\n <section class="full">\n <h2 data-i18n="setup.title"></h2>\n <p class="hint" data-i18n="setup.hint"></p>\n <div id="setup"><p class="hint" data-i18n="setup.checking"></p></div>\n <div class="msg" id="setup-msg"></div>\n </section>\n\n <section class="full">\n <h2 data-i18n="models.title"></h2>\n <p class="hint" data-i18n="models.hint"></p>\n <div id="ai-models"><p class="hint" data-i18n="setup.checking"></p></div>\n <h3 data-i18n="limits.title"></h3>\n <p class="hint" data-i18n="limits.hint"></p>\n <div id="ai-limits"></div>\n <div class="row"><button id="save-limits" data-i18n="limits.save" data-tip="tip.limits.save"></button></div>\n <div class="msg" id="models-msg"></div>\n </section>\n\n <section>\n <h2 data-i18n="rules.title"></h2>\n <form id="rules">\n <div class="field"><label><span data-i18n="rules.enabled"></span> <input type="checkbox" name="enabled"></label><p class="help" data-i18n="rules.enabled.help"></p></div>\n <div class="field"><label><span data-i18n="rules.cpus"></span> <input type="number" name="maxCpus" min="0.25" step="0.25"></label><p class="help" data-i18n="rules.cpus.help"></p></div>\n <div class="field"><label><span data-i18n="rules.memory"></span> <input type="number" name="maxMemoryMb" min="256" step="256"></label><p class="help" data-i18n="rules.memory.help"></p></div>\n <div class="field"><label><span data-i18n="rules.gpu"></span> <select name="gpu"><option value="none" data-i18n="rules.gpu.none"></option><option value="consumer" data-i18n="rules.gpu.consumer"></option><option value="high" data-i18n="rules.gpu.high"></option><option value="datacenter" data-i18n="rules.gpu.datacenter"></option></select></label><p class="help" data-i18n="rules.gpu.help"></p></div>\n <div class="field"><label><span data-i18n="rules.containers"></span> <input type="checkbox" name="containers"></label><p class="help" data-i18n="rules.containers.help"></p></div>\n <div class="field"><label><span data-i18n="rules.models"></span> <input type="checkbox" name="serveModels"></label><p class="help" data-i18n="rules.models.help"></p></div>\n <div class="field"><label><span data-i18n="rules.idle"></span> <input type="number" name="idleMinutes" min="0"></label><p class="help" data-i18n="rules.idle.help"></p></div>\n <div class="field"><label><span data-i18n="rules.ac"></span> <input type="checkbox" name="onlyOnAc"></label><p class="help" data-i18n="rules.ac.help"></p></div>\n <div class="field"><label><span data-i18n="rules.awake"></span> <input type="checkbox" name="keepAwake"></label><p class="help" data-i18n="rules.awake.help"></p></div>\n <div class="field"><label><span data-i18n="rules.hours"></span> <span><input type="number" name="hourFrom" min="0" max="23" style="width:56px"> <input type="number" name="hourTo" min="0" max="24" style="width:56px"></span></label><p class="help" data-i18n="rules.hours.help"></p></div>\n <div class="field"><label><span data-i18n="rules.cache"></span> <input type="number" name="cacheMax" min="0"></label><p class="help" data-i18n="rules.cache.help"></p></div>\n <div class="row"><button type="submit" data-i18n="rules.save" data-tip="tip.rules.save"></button></div>\n <div class="msg" id="rules-msg"></div>\n </form>\n </section>\n\n <section>\n <h2 data-i18n="folders.title"></h2>\n <p class="hint" data-i18n="folders.hint"></p>\n <div class="row"><input class="wide" type="text" id="folder-path" data-i18n-placeholder="folders.placeholder"><button id="folder-add" data-i18n="folders.add" data-tip="tip.folder.add"></button></div>\n <ul class="list" id="folders"></ul>\n <div class="msg" id="folder-msg"></div>\n </section>\n\n <section>\n <h2 data-i18n="repos.title"></h2>\n <p class="hint" data-i18n="repos.hint"></p>\n <ul class="list" id="repos"></ul>\n <div class="msg" id="repos-msg"></div>\n </section>\n\n <section>\n <h2 data-i18n="ask.title"></h2>\n <p class="hint" id="models-hint"></p>\n <textarea id="prompt" data-i18n-placeholder="ask.placeholder"></textarea>\n <div class="row">\n <select id="tier" data-tip="tip.tier"><option value="small" data-i18n="ask.small"></option><option value="medium" data-i18n="ask.medium"></option><option value="large" data-i18n="ask.large"></option></select>\n <button id="ask" data-i18n="ask.button" data-tip="tip.ask"></button>\n <label data-tip="tip.wait"><span data-i18n="ask.wait"></span> <input type="number" id="wait-minutes" min="1" max="120" step="1" style="width:70px"></label>\n <button class="secondary" id="save-wait" data-i18n="ask.wait.save" data-tip="tip.wait"></button>\n </div>\n <div class="msg" id="wait-msg"></div>\n <pre id="answer" hidden></pre>\n </section>\n\n <section class="full">\n <h2 data-i18n="tools.title"></h2>\n <p class="hint" data-i18n="tools.hint"></p>\n <div id="tools"></div>\n <div class="msg" id="tools-msg"></div>\n <p class="hint" style="margin-top:12px"><span data-i18n="tools.openai"></span> <code id="oai-url"></code> \xB7 <span data-i18n="tools.key"></span> <code id="oai-key">\u2022\u2022\u2022\u2022\u2022\u2022</code> <button class="secondary" id="show-key" data-i18n="tools.show" data-tip="tip.show_key"></button></p>\n </section>\n\n <section class="full">\n <h2 data-i18n="update.title"></h2>\n <p class="hint" id="update-info"></p>\n <div class="row"><button id="update-btn" data-i18n="update.button" data-tip="tip.update"></button></div>\n <div class="msg" id="update-msg"></div>\n </section>\n\n <section class="full">\n <h2 data-i18n="jobs.title"></h2>\n <ul class="list" id="jobs"></ul>\n </section>\n</main>\n</div>\n<script>\nconst LANGS = { en: "English", zh: "\u4E2D\u6587", hi: "\u0939\u093F\u0928\u094D\u0926\u0940", es: "Espa\xF1ol", ar: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", fr: "Fran\xE7ais", bn: "\u09AC\u09BE\u0982\u09B2\u09BE", pt: "Portugu\xEAs", ru: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", id: "Bahasa Indonesia", de: "Deutsch", it: "Italiano" };\nconst $ = (id) => document.getElementById(id);\nconst esc = (s) => String(s ?? "").replace(/[&<>"\']/g, (c) => ({ "&":"&","<":"<",">":">",\'"\':""","\'":"'" })[c]);\n\nconst params = new URLSearchParams(location.hash.slice(1));\nlet token = params.get("token");\nconst langFromApp = params.get("lang");\n// The app\'s own login page, to go back to after logging out (only the app\'s own addresses).\nlet backTo = params.get("back");\ntry { if (token) sessionStorage.setItem("bp_token", token); else token = sessionStorage.getItem("bp_token"); } catch {}\ntry { if (backTo) sessionStorage.setItem("bp_back", backTo); else backTo = sessionStorage.getItem("bp_back"); } catch {}\nif (!/^(tauri:\\/\\/localhost|https?:\\/\\/tauri\\.localhost)$/.test(backTo || "")) backTo = null;\nif (location.hash) history.replaceState(null, "", "/");\n\n// ---- languages ------------------------------------------------------------------------\nlet lang = "en", dict = {}, fallback = {};\nconst t = (key, vars = {}) => String(dict[key] ?? fallback[key] ?? key).replace(/\\{(\\w+)\\}/g, (_, k) => (vars[k] ?? `{${k}}`));\nconst fmt = (n) => Number(n).toLocaleString(lang, { maximumFractionDigits: 2 });\n\nasync function loadLang(l, save) {\n lang = LANGS[l] ? l : "en";\n if (!Object.keys(fallback).length) fallback = await (await fetch("/i18n/en.json")).json();\n dict = lang === "en" ? fallback : await fetch(`/i18n/${lang}.json`).then((r) => (r.ok ? r.json() : fallback)).catch(() => fallback);\n document.documentElement.lang = lang;\n document.documentElement.dir = lang === "ar" ? "rtl" : "ltr";\n document.querySelectorAll("[data-i18n]").forEach((e) => (e.textContent = t(e.dataset.i18n)));\n document.querySelectorAll("[data-i18n-placeholder]").forEach((e) => (e.placeholder = t(e.dataset.i18nPlaceholder)));\n $("lang").value = lang;\n if (save) api("/api/language", { language: lang }).catch(() => {});\n if (state) render();\n refreshSetup();\n if (update) refreshUpdate();\n if (tools.length) refreshTools();\n}\n$("lang").innerHTML = Object.entries(LANGS).map(([k, v]) => `<option value="${k}">${v}</option>`).join("");\n$("lang").addEventListener("change", (e) => loadLang(e.target.value, true));\n\nasync function api(path, body) {\n const res = await fetch(path, { method: body ? "POST" : "GET", headers: { "content-type": "application/json", "x-bitpull-token": token || "" }, body: body ? JSON.stringify(body) : undefined });\n const data = await res.json().catch(() => ({}));\n if (!res.ok) throw new Error(data.error || res.status);\n return data;\n}\n\n// ---- status -----------------------------------------------------------------------------\nlet state = null;\n/** The user changed the lending rules and has not saved them yet. */\nlet rulesDirty = false;\nasync function refresh() {\n try { state = await api("/api/status"); } catch (e) { if (String(e.message) === "unauthorized") { $("app").hidden = true; $("locked").hidden = false; } return; }\n $("app").hidden = false; $("locked").hidden = true;\n render();\n}\n\nfunction render() {\n const s = state, n = s.node;\n const pills = [\n `<span class="pill ${n.online ? "good" : "bad"}">${esc(t(n.online ? "pill.online" : "pill.offline"))}</span>`,\n `<span class="pill ${n.relay === "disconnected" ? "warn" : "good"}">${esc(t(n.relay === "direct" ? "pill.direct" : n.relay === "connected" ? "pill.relay_on" : "pill.relay_off"))}</span>`,\n `<span class="pill">${esc(t("pill.cached", { n: n.cached }))}</span>`,\n ];\n if (s.me) pills.unshift(`<span class="pill">${esc(s.me.email)}</span>`);\n $("pills").innerHTML = pills.join("");\n const net = s.network;\n if (net) {\n $("live").hidden = false;\n $("live").innerHTML = `<span class="dot"></span><strong>${esc(t("net.title"))}</strong>` +\n [["net.online", net.computersOnline], ["net.lending", net.computersLending], ["net.cpu", net.cpus], ["net.ram", net.memoryGb], ["net.gpu", net.gpus.total]]\n .map(([k, v]) => `<span>${esc(t(k, { n: fmt(v) }))}</span>`).join("") +\n `<span title="${esc(net.models.join(", "))}">${esc(t("net.models", { n: fmt(net.models.length) }))}</span><span>${esc(t("net.jobs", { n: fmt(net.jobsRunning) }))}</span>`;\n }\n if (s.me) {\n $("balance").textContent = fmt(s.me.balance);\n $("plan").textContent = t("credits.plan", { plan: t(`plan.${s.me.plan}`), n: s.me.threshold });\n const via = (s.me.logins || []).map((m) => (m === "password" ? t("account.via.email") : m === "github" ? "GitHub" : "Google")).join(", ");\n $("account-line").textContent = t("account.line", { email: s.me.email }) + (via ? ` \xB7 ${via}` : "");\n renderPlans(s.me.plan);\n }\n const w = n.worker;\n $("worker-state").textContent = t(`lend.state.${w.state}`);\n $("worker-detail").textContent = w.currentJob\n ? t("lend.running", { kind: t(w.currentJob.kind === "inference" ? "jobs.model" : "jobs.container"), time: new Date(w.currentJob.since).toLocaleTimeString(lang) })\n : t("lend.detail", { reason: w.reason && !w.reason.startsWith("error") ? t(`lend.reason.${w.reason}`) : (w.reason || ""), n: w.completed, cpus: s.capacity.cpus, ram: fmt(s.capacity.memoryMb / 1024) }) +\n (s.capacity.containers ? t("lend.detail.sandbox", { name: w.sandbox || "" }) : "") + (s.capacity.models.length ? t("lend.detail.models", { n: s.capacity.models.length }) : "");\n // What the network actually sees of this computer, and why nothing can run when that is the case.\n const seen = s.me && (s.me.nodes || []).find((x) => x.id === s.nodeId);\n const usable = s.capacity.containers || s.capacity.models.length > 0;\n const tried = (s.sandbox && s.sandbox.tried || []).join(" \xB7 ");\n // Known problems in the person\'s language; anything else as reported by the system.\n const sbProblem = /Docker Hub login is no longer valid/.test(tried) ? t("lend.docker_login") : tried;\n $("worker-visible").className = "status " + (seen && seen.online && seen.capacity && usable ? "ok" : "missing");\n // Lending switched off: say so plainly, with what to do; Pause/Resume does not turn it on.\n $("pause").hidden = !s.lending.enabled;\n if (!s.lending.enabled) {\n $("worker-visible").className = "status missing";\n $("worker-visible").textContent = t("lend.off_hint", { enabled: t("rules.enabled"), rules: t("rules.title"), save: t("rules.save") });\n } else if (s.lendingNow.ok && s.capacity.memoryMb < 1024 && usable) {\n $("worker-visible").className = "status missing";\n $("worker-visible").textContent = t("lend.low_memory", { mb: s.capacity.memoryMb, rules: t("rules.title"), memory: t("rules.memory"), save: t("rules.save") });\n } else $("worker-visible").textContent = s.lending.paused || !s.lendingNow.ok ? ""\n : !usable ? t("lend.unusable", { reason: s.lending.containers ? (sbProblem || t("lend.unusable.docker")) : t("lend.unusable.off") })\n : seen && seen.online && seen.capacity ? t("lend.visible", { cpus: seen.capacity.cpus, ram: fmt(seen.capacity.memoryMb / 1024) })\n : t("lend.invisible");\n $("pause").textContent = t(s.lending.paused ? "lend.resume" : "lend.pause");\n $("pause").dataset.tip = s.lending.paused ? "tip.resume" : "tip.pause";\n $("pause").className = s.lending.paused ? "" : "danger";\n\n // Never overwrite changes the user has not saved yet (on macOS a clicked checkbox does not take focus).\n if (!rulesDirty && (!document.activeElement || !$("rules").contains(document.activeElement))) {\n const f = $("rules").elements, l = s.lending;\n for (const k of ["enabled", "containers", "serveModels", "onlyOnAc"]) f[k].checked = !!l[k];\n f.keepAwake.checked = l.keepAwake !== false;\n for (const k of ["maxCpus", "maxMemoryMb", "idleMinutes"]) f[k].value = l[k];\n f.gpu.value = l.gpu; f.cacheMax.value = s.cacheMax;\n f.hourFrom.value = l.hours ? l.hours[0] : ""; f.hourTo.value = l.hours ? l.hours[1] : "";\n }\n $("folders").innerHTML = s.folders.map((p) => `<li><span class="path">${esc(p)}</span><span><button class="secondary" data-draft="${esc(p)}" data-tip="tip.folder.draft">${esc(t("folders.draft"))}</button> <button data-publish="${esc(p)}" data-tip="tip.folder.publish">${esc(t("folders.publish"))}</button> <button class="secondary" data-unfolder="${esc(p)}" data-tip="tip.folder.remove">${esc(t("folders.remove"))}</button></span></li>`).join("") || `<li class="hint">${esc(t("folders.none"))}</li>`;\n $("repos").innerHTML = s.repos.map((r) => `<li><span><strong>${esc(r.name)}</strong><br><span class="path hint">${esc(r.path)}</span></span><button class="secondary" data-unpublish="${esc(r.id)}" data-tip="tip.repo.withdraw">${esc(t("repos.withdraw"))}</button></li>`).join("") || `<li class="hint">${esc(t("repos.none"))}</li>`;\n $("jobs").innerHTML = s.jobs.map((j) => `<li><span>${esc(t(j.kind === "inference" ? "jobs.model" : "jobs.container"))} \xB7 ${new Date(j.createdAt).toLocaleString(lang)}</span><span>${esc(t(`jobs.status.${j.status}`))}${j.cost != null ? ` \xB7 ${esc(t("jobs.cost", { n: fmt(j.cost) }))}` : ""}</span></li>`).join("") || `<li class="hint">${esc(t("jobs.none"))}</li>`;\n $("oai-url").textContent = s.openaiBaseUrl;\n if (document.activeElement !== $("wait-minutes") && !$("wait-minutes").dataset.dirty) $("wait-minutes").value = s.answerWaitMinutes ?? 10;\n $("models-hint").textContent = t("ask.offers", { models: s.capacity.models.join(", ") || t("ask.offers_none") });\n}\n\n// ---- every button answers at once, and says clearly what went wrong ----------------------\nfunction explain(err) {\n const m = String((err && err.message) || err);\n if (/Failed to fetch|Load failed|NetworkError/.test(m)) return t("err.agent_down");\n if (/fetch failed|ECONNREFUSED|ENOTFOUND|ETIMEDOUT|coordinator unreachable|timeout/i.test(m)) return t("err.server");\n if (/unauthorized/.test(m)) return t("err.session");\n if (/billing_not_configured/.test(m)) return t("err.billing");\n if (/not found on disk|ENOENT/.test(m)) return t("err.no_folder");\n if (/not a folder/.test(m)) return t("err.not_folder");\n if (/insufficient_credits/.test(m)) return `${t("err.credits")} ${m.replace(/^insufficient_credits:\\s*/, "")}`;\n if (/device_required/.test(m)) return t("err.device");\n if (/No open model is online/.test(m)) return t("err.no_model");\n if (/invalid_request|invalid JSON/.test(m)) return t("err.invalid");\n return m.replace(/^Error:\\s*/, "");\n}\n\n/** Runs a button\'s action: disables it at once, shows "Working\u2026", then the result next to it. */\nasync function act(btn, msgEl, fn, okText) {\n if (btn.disabled) return;\n const label = btn.textContent;\n btn.disabled = true;\n btn.textContent = t("working");\n if (msgEl) { msgEl.className = "msg"; msgEl.textContent = ""; }\n try {\n const r = await fn();\n const text = typeof okText === "function" ? okText(r) : okText;\n if (msgEl && text) { msgEl.className = "msg ok"; msgEl.textContent = text; }\n return r;\n } catch (err) {\n if (msgEl) { msgEl.className = "msg error"; msgEl.textContent = explain(err); }\n } finally {\n btn.disabled = false;\n btn.textContent = label;\n }\n}\n\nfor (const ev of ["input", "change"]) $("rules").addEventListener(ev, () => { rulesDirty = true; });\n\n$("rules").addEventListener("submit", (e) => {\n e.preventDefault();\n const f = e.target.elements;\n if ((f.hourFrom.value === "") !== (f.hourTo.value === "")) { $("rules-msg").className = "msg error"; $("rules-msg").textContent = t("rules.hours_both"); return; }\n const hours = f.hourFrom.value !== "" ? [Number(f.hourFrom.value), Number(f.hourTo.value)] : null;\n act(e.submitter || e.target.querySelector("button"), $("rules-msg"), async () => {\n await api("/api/settings", { cacheMax: Number(f.cacheMax.value), lending: { enabled: f.enabled.checked, maxCpus: Number(f.maxCpus.value), maxMemoryMb: Number(f.maxMemoryMb.value),\n gpu: f.gpu.value, containers: f.containers.checked, serveModels: f.serveModels.checked, idleMinutes: Number(f.idleMinutes.value), onlyOnAc: f.onlyOnAc.checked, keepAwake: f.keepAwake.checked, hours } });\n rulesDirty = false;\n refresh();\n }, t("rules.saved"));\n});\n\n$("pause").addEventListener("click", () => {\n const pausing = !state.lending.paused;\n act($("pause"), $("pause-msg"), async () => { await api("/api/pause", { paused: pausing }); await refresh(); }, t(pausing ? "lend.paused_ok" : "lend.resumed_ok"));\n});\n\n$("folder-add").addEventListener("click", () => {\n const path = $("folder-path").value.trim();\n if (!path) { $("folder-msg").className = "msg error"; $("folder-msg").textContent = t("folders.need_path"); return; }\n act($("folder-add"), $("folder-msg"), async () => { await api("/api/folders", { path }); $("folder-path").value = ""; await refresh(); }, t("folders.added"));\n});\n\ndocument.addEventListener("click", (e) => {\n const b = e.target.closest("button");\n if (!b || b.closest("#setup")) return;\n const msg = $("folder-msg");\n if (b.dataset.unfolder) act(b, msg, async () => { await api("/api/folders/remove", { path: b.dataset.unfolder }); await refresh(); }, t("folders.removed"));\n if (b.dataset.draft) act(b, msg, () => api("/api/draft", { folder: b.dataset.draft }), (r) => t("folders.drafted", { n: r.draft.modules.length }));\n if (b.dataset.publish) act(b, msg, async () => {\n const r = await api("/api/publish", { folder: b.dataset.publish });\n if (!r.ok) throw new Error(r.errors.join(" ") + (r.secrets ? " " + t("folders.secrets_in", { where: r.secrets.map((x) => t("folders.line", { file: x.file, line: x.line })).join(", ") }) : ""));\n await refresh();\n return r;\n }, (r) => t("folders.published", { name: r.repo.name, n: r.files }));\n if (b.dataset.unpublish) act(b, $("repos-msg"), async () => { await api("/api/repos/remove", { id: b.dataset.unpublish }); await refresh(); }, t("repos.withdrawn"));\n if (b.dataset.buy) showSummary(b.dataset.buy);\n if (b.dataset.pay) act(b, $("buy-msg"), async () => { const { url } = await api("/api/checkout", { product: b.dataset.pay, lang }); await api("/api/open", { url }); $("buy-summary").hidden = true; }, t("buy.ok"));\n if (b.id === "buy-cancel") $("buy-summary").hidden = true;\n});\n\n// ---- plans: name, price and what each includes; a summary before the payment page ------------\nlet plansInfo = null, currentPlan = null;\nconst euro = (n) => Number(n).toLocaleString(lang, { style: "currency", currency: "EUR" });\nconst planLines = (id) => (id === "recharge" ? [t("plans.recharge.1", { n: plansInfo.recharge.credits }), t("plans.recharge.2"), t("plans.recharge.3")] : [1, 2, 3].map((i) => t(`plan.${id}.${i}`)));\nconst planName = (id) => (id === "recharge" ? t("plans.recharge.title") : t(`plan.${id}`));\nasync function renderPlans(current) {\n currentPlan = current;\n if (!plansInfo) plansInfo = await api("/api/plans").catch(() => null);\n if (!plansInfo) return;\n const items = [...plansInfo.plans.map((p) => ({ id: p.id, price: euro(p.priceEurMonth), per: p.id === "free" ? "" : t("plan.month") })), { id: "recharge", price: euro(plansInfo.recharge.priceEur), per: "" }];\n const html = items.map((p) => `<div class="plan${p.id === current ? " current" : ""}"><h3>${esc(planName(p.id))}${p.id === current ? `<span class="badge">${esc(t("plans.current"))}</span>` : ""}</h3>` +\n `<div class="price">${esc(p.price)}<span class="hint">${esc(p.per)}</span></div><ul>${planLines(p.id).map((l) => `<li>${esc(l)}</li>`).join("")}</ul>` +\n (p.id === "free" || p.id === current ? "" : `<button class="secondary" data-buy="${p.id}" data-tip="tip.plans.choose">${esc(t("plans.choose", { plan: planName(p.id) }))}</button>`) + `</div>`).join("");\n if ($("plan-cards").innerHTML !== html) $("plan-cards").innerHTML = html;\n if (!plansInfo.payments && !$("buy-msg").textContent) $("buy-msg").textContent = t("plans.off");\n}\nfunction showSummary(id) {\n if (!plansInfo) return;\n const p = plansInfo.plans.find((x) => x.id === id);\n const price = id === "recharge" ? euro(plansInfo.recharge.priceEur) : `${euro(p.priceEurMonth)}${t("plan.month")}`;\n const lines = id === "recharge" ? planLines(id) : [...planLines(id), t("plans.renew")];\n $("buy-summary").innerHTML = `<div class="hint">${esc(t("plans.summary"))}</div><h3>${esc(id === "recharge" ? planName(id) : `BitPull ${planName(id)}`)} \xB7 ${esc(price)}</h3>` +\n `<ul>${lines.map((l) => `<li>${esc(l)}</li>`).join("")}</ul><div class="row"><button data-pay="${id}" data-tip="tip.plans.pay"${plansInfo.payments ? "" : " disabled"}>${esc(t("plans.pay"))}</button>` +\n `<button class="secondary" id="buy-cancel" data-tip="tip.plans.cancel">${esc(t("plans.cancel"))}</button></div>`;\n $("buy-summary").hidden = false;\n}\n\n// ---- log out (e.g. to log in with another account) ----------------------------------------\n$("logout").addEventListener("click", () => {\n $("logout-text").textContent = t("logout.confirm", { email: state && state.me ? state.me.email : "" });\n $("logout-confirm").hidden = false;\n});\n$("logout-no").addEventListener("click", () => ($("logout-confirm").hidden = true));\n$("logout-yes").addEventListener("click", () => act($("logout-yes"), $("buy-msg"), async () => {\n await api("/api/logout", {});\n try { sessionStorage.removeItem("bp_token"); } catch {}\n // In the app: back to its login page. Elsewhere: how to log in again.\n if (backTo) { location.replace(`${backTo}/index.html?loggedout=1`); return; }\n $("app").hidden = true; $("loggedout").hidden = false;\n}));\n\n$("ask").addEventListener("click", () => {\n const prompt = $("prompt").value.trim();\n const out = $("answer");\n out.hidden = false;\n if (!prompt) { out.textContent = t("ask.empty"); return; }\n out.textContent = t("ask.waiting");\n act($("ask"), null, async () => {\n try { const r = await api("/api/ask", { prompt, tier: $("tier").value }); out.textContent = `${r.content}\\n\\n\u2014 ${r.model} \xB7 ${t("ask.credits", { n: fmt(r.cost) })}`; refresh(); }\n catch (err) { out.textContent = explain(err); }\n });\n});\n$("show-key").addEventListener("click", () => { $("oai-key").textContent = token; });\n$("wait-minutes").addEventListener("input", () => { $("wait-minutes").dataset.dirty = "1"; });\n$("save-wait").addEventListener("click", () => {\n const n = Math.round(Number($("wait-minutes").value));\n if (!(n >= 1 && n <= 120)) { $("wait-msg").className = "msg error"; $("wait-msg").textContent = t("ask.wait.range"); return; }\n act($("save-wait"), $("wait-msg"), async () => { await api("/api/settings", { answerWaitMinutes: n }); delete $("wait-minutes").dataset.dirty; }, t("ask.wait.saved", { n }));\n});\n\n// ---- "Set up this computer" -------------------------------------------------------------\nasync function refreshSetup() {\n if (!token) return;\n let st;\n try { st = await api("/api/setup"); } catch { return; }\n const task = (id) => st.tasks.find((x) => x.id === id);\n const progress = (x) => x ? (x.state === "running" ? `<progress max="100" value="${x.progress || 0}"></progress><div class="status">${esc(x.label)} ${x.progress ? x.progress + "%" : ""}</div>`\n : x.state === "failed" ? `<div class="status missing">${esc(x.detail || "")}</div>`\n : `<div class="status ok">${esc(x.detail && /[\\\\/]/.test(x.detail) ? t("setup.opened", { file: x.detail.split(/[\\\\/]/).pop() }) : t("setup.done"))}</div>`) : "";\n const NAMES = { docker: "Docker", ollama: "Ollama", "apple-container": "Apple Container", nvidia: "NVIDIA" };\n const install = (id, label) => {\n const inst = st.installers[id];\n if (!inst) return "";\n const vars = esc(JSON.stringify({ name: NAMES[id] || id }));\n if (inst.kind === "download") return `<button data-download="${id}" data-tip="tip.setup.download" data-tip-vars="${vars}">${esc(label)}</button>`;\n if (inst.kind === "page") return `<button class="secondary" data-open="${esc(inst.url)}" data-tip="tip.setup.open" data-tip-vars="${vars}">${esc(label)}</button>`;\n return `<div class="status">${esc(t("setup.terminal"))} <code>${esc(inst.command)}</code></div>`;\n };\n const row = (title, ok, okText, missingText, action, help) =>\n `<div class="check-row"><div style="flex:1 1 280px"><strong>${esc(title)}</strong><div class="status">${esc(help)}</div></div><div style="text-align:end;min-width:220px">${ok ? `<span class="ok">\u2713 ${esc(okText)}</span>` : `<span class="missing">${esc(missingText)}</span><div>${action}</div>`}</div></div>`;\n const rows = [];\n rows.push(row("Docker", st.docker.running, t("setup.status.running"), t(st.docker.installed ? "setup.status.stopped" : "setup.status.missing"),\n st.docker.installed ? `<button data-start="docker" data-tip="tip.setup.start" data-tip-vars="${esc(JSON.stringify({ name: "Docker" }))}">${esc(t("setup.docker.start"))}</button>` : install("docker", t("setup.docker.download")) + progress(task("download-docker")),\n t("setup.docker.help") + (st.docker.problem ? ` \u2014 ${/Docker Hub login is no longer valid/.test(st.docker.problem) ? t("lend.docker_login") : st.docker.problem}` : "")));\n if (st.os === "darwin" && st.arch === "arm64")\n rows.push(row(t("setup.apple.title"), st.appleContainer.installed, t("setup.status.installed"), t("setup.status.missing"), install("apple-container", t("setup.apple.get")), t("setup.apple.help")));\n rows.push(row("Ollama", st.ollama.running, t("setup.status.running"), t(st.ollama.installed ? "setup.status.stopped" : "setup.status.missing"),\n st.ollama.installed ? `<button data-start="ollama" data-tip="tip.setup.start" data-tip-vars="${esc(JSON.stringify({ name: "Ollama" }))}">${esc(t("setup.ollama.start"))}</button>` : install("ollama", t("setup.ollama.download")) + progress(task("download-ollama")),\n t("setup.ollama.help")));\n const rec = st.recommendedModel;\n rows.push(row(t("setup.model.title"), st.ollama.models.length > 0, st.ollama.models.join(", "), t("setup.model.none"),\n st.ollama.running ? `<button data-pull="${esc(rec.name)}" data-tip="tip.setup.pull" data-tip-vars="${esc(JSON.stringify({ model: rec.name, size: rec.sizeGb }))}">${esc(t("setup.model.download", { model: rec.name, size: rec.sizeGb }))}</button>${progress(task("model-" + rec.name))}` : `<div class="status">${esc(t("setup.model.need_ollama"))}</div>`,\n t("setup.model.help", { ram: st.ramGb, model: rec.name })));\n if (st.nvidia !== null)\n rows.push(row(t("setup.nvidia.title"), st.nvidia, t("setup.status.found"), t("setup.status.not_found"), install("nvidia", t("setup.nvidia.get")), t("setup.nvidia.help")));\n $("setup").innerHTML = rows.join("") + `<div class="row"><button class="secondary" id="recheck" data-tip="tip.setup.recheck">${esc(t("setup.recheck"))}</button></div>`;\n renderModels(st, task, progress);\n if (st.tasks.some((x) => x.state === "running")) setTimeout(refreshSetup, 1500);\n}\n\ndocument.addEventListener("click", (e) => {\n const b = e.target.closest("button");\n if (!b || !b.closest("#setup")) return;\n const m = $("setup-msg");\n if (b.dataset.download) act(b, m, () => api("/api/setup/download", { id: b.dataset.download }), t("setup.ok.download"));\n if (b.dataset.start) act(b, m, () => api("/api/setup/start", { id: b.dataset.start }), t("setup.ok.start"));\n if (b.dataset.pull) act(b, m, () => api("/api/setup/pull", { model: b.dataset.pull }), t("setup.ok.pull"));\n if (b.dataset.open) act(b, m, () => api("/api/open", { url: b.dataset.open }), t("setup.ok.page"));\n if (b.id === "recheck") act(b, m, () => api("/api/setup/recheck", {}), t("setup.ok.recheck"));\n setTimeout(refreshSetup, 1000);\n});\n\n// ---- open AI models to share, and the lender\'s limits ------------------------------------\nconst TASK_ORDER = ["chat", "vision", "ocr", "translate", "embed", "rerank", "image", "upscale", "stt", "tts", "music"];\nfunction renderModels(st, task, progress) {\n const lem = st.lemonade;\n const engine = !lem.supported\n ? `<span class="missing">${esc(t("models.engine.unsupported"))}</span>`\n : lem.running ? `<span class="ok">\u2713 ${esc(t("setup.status.running"))}</span>`\n : `<button data-lemonade="1" data-tip="tip.models.engine">${esc(t(lem.installed ? "models.engine.repair" : "models.engine.install"))}</button>${progress(task("download-lemonade"))}${lem.error ? `<div class="status missing">${esc(lem.error)}</div>` : ""}`;\n const installed = (m) => m.runtime === "ollama"\n ? st.ollama.models.some((x) => x === m.id || x === m.id + ":latest")\n : lem.models.includes(m.id);\n const ready = (m) => m.runtime === "ollama" ? st.ollama.running : lem.running;\n const html = [`<div class="check-row"><div style="flex:1 1 280px"><strong>${esc(t("models.engine.title"))}</strong><div class="status">${esc(t("models.engine.help"))}</div></div><div style="text-align:end;min-width:220px">${engine}</div></div>`];\n for (const tk of TASK_ORDER) {\n const list = st.openModels.filter((m) => m.tasks[0] === tk);\n if (!list.length) continue;\n html.push(`<h3 style="margin:14px 0 4px">${esc(t("task." + tk))}</h3>`);\n for (const m of list) {\n const tip = esc(JSON.stringify({ model: m.name, size: m.sizeGb }));\n let action;\n if (installed(m)) action = `<span class="ok">\u2713 ${esc(t("models.shared"))}</span>`;\n else if (!m.available) action = `<span class="status">${esc(t("models.not_here"))}</span>`;\n else if (!ready(m)) action = `<span class="status">${esc(t(m.runtime === "ollama" ? "setup.model.need_ollama" : "models.need_engine"))}</span>`;\n else action = `<button class="${m.fits ? "" : "secondary"}" data-pull-model="${esc(m.id)}" data-tip="tip.models.download" data-tip-vars="${tip}">${esc(t("models.download", { size: m.sizeGb }))}</button>${m.fits ? "" : `<div class="status missing">${esc(t("models.needs_ram", { ram: m.minRamGb }))}</div>`}${progress(task("model-" + m.id))}`;\n html.push(`<div class="check-row"><div style="flex:1 1 280px"><strong>${esc(m.name)}</strong>${m.recommended ? ` <span class="pill">${esc(t("models.recommended"))}</span>` : ""}<div class="status">${esc(m.sizeGb)} GB \xB7 ${esc(t("models.license"))}: ${esc(m.license)}</div></div><div style="text-align:end;min-width:220px">${action}</div></div>`);\n }\n }\n $("ai-models").innerHTML = html.join("");\n // Limits: keep what the user is typing; render only once per load.\n if (!$("ai-limits").dataset.ready) {\n const lim = st.aiLimits, u = st.aiUsage;\n const cell = (p, k) => `<input type="number" min="0" step="1" data-limit="${p}.${k}" value="${lim[p][k] ?? ""}" placeholder="${esc(t("limits.none"))}" style="width:120px">`;\n $("ai-limits").innerHTML = `<table class="limits"><tr><th></th><th>${esc(t("limits.requests"))}</th><th>${esc(t("limits.tokens"))}</th><th>${esc(t("limits.used"))}</th></tr>` +\n ["day", "week", "month"].map((p) => `<tr><td>${esc(t("limits." + p))}</td><td>${cell(p, "requests")}</td><td>${cell(p, "tokens")}</td><td class="status">${esc(t("limits.usage", { requests: u[p].requests, tokens: fmt(u[p].tokens) }))}</td></tr>`).join("") + `</table>`;\n $("ai-limits").dataset.ready = "1";\n }\n}\n\ndocument.addEventListener("click", (e) => {\n const b = e.target.closest("button");\n if (!b || !b.closest("#ai-models")) return;\n const m = $("models-msg");\n if (b.dataset.lemonade) act(b, m, () => api("/api/setup/download", { id: "lemonade" }), t("models.ok.engine"));\n if (b.dataset.pullModel) act(b, m, () => api("/api/setup/pull", { model: b.dataset.pullModel }), t("setup.ok.pull"));\n setTimeout(refreshSetup, 1000);\n});\n\n$("save-limits").addEventListener("click", () => {\n const aiLimits = { day: {}, week: {}, month: {} };\n for (const input of document.querySelectorAll("[data-limit]")) {\n const [p, k] = input.dataset.limit.split(".");\n aiLimits[p][k] = input.value === "" ? null : Math.max(0, Math.floor(Number(input.value)));\n }\n act($("save-limits"), $("models-msg"), () => api("/api/settings", { lending: { aiLimits } }), t("limits.saved"));\n});\n\n// ---- connect AI tools -------------------------------------------------------------------\nlet tools = [];\nasync function refreshTools() {\n try { tools = (await api("/api/integrations")).tools; } catch { return; }\n $("tools").innerHTML = tools.map((x, i) => {\n const vars = esc(JSON.stringify({ name: x.name }));\n const status = x.connected ? `<span class="ok">\u2713 ${esc(t("tools.connected"))}</span>` : x.installed ? `<span class="status">${esc(t("tools.installed"))}</span>` : `<span class="status">${esc(t("tools.not_found"))}</span>`;\n const connect = x.installed && !x.connected ? `<button data-connect="${esc(x.id)}" data-tip="tip.tools.connect" data-tip-vars="${vars}">${esc(t("tools.connect"))}</button>` : "";\n const copy = `<button class="secondary" data-copy="${i}" data-tip="tip.tools.copy" data-tip-vars="${vars}">${esc(t("tools.copy"))}</button>`;\n const problem = x.problem === "config_invalid" ? `<div class="status missing">${esc(t("tools.config_invalid", { name: x.name }))}</div>` : "";\n return `<div class="check-row"><div style="flex:1 1 280px"><strong>${esc(x.name)}</strong> ${status}${problem}</div><div class="row" style="margin:0">${connect}${copy}</div></div>`;\n }).join("");\n}\n\nasync function copyText(text) {\n try { await navigator.clipboard.writeText(text); return true; } catch {}\n const ta = document.createElement("textarea");\n ta.value = text; document.body.appendChild(ta); ta.select();\n let ok = false;\n try { ok = document.execCommand("copy"); } catch {}\n ta.remove();\n return ok;\n}\n\ndocument.addEventListener("click", (e) => {\n const b = e.target.closest("button");\n if (!b || !b.closest("#tools")) return;\n const m = $("tools-msg");\n if (b.dataset.connect) {\n const tool = tools.find((x) => x.id === b.dataset.connect);\n act(b, m, async () => {\n try { await api("/api/integrations/connect", { id: b.dataset.connect }); }\n catch (err) { if (/config_invalid/.test(err.message)) throw new Error(t("tools.config_invalid", { name: tool.name })); throw err; }\n await refreshTools();\n }, t("tools.done", { name: tool.name }));\n }\n if (b.dataset.copy !== undefined) {\n const tool = tools[Number(b.dataset.copy)];\n act(b, m, async () => {\n if (!(await copyText(tool.manual))) throw new Error(`${t("tools.manual")} ${tool.manual}`);\n }, `${t("tools.copied")} ${tool.where ? `${t("tools.manual")} ${tool.where}` : ""}`);\n }\n});\n\n// ---- app updates ------------------------------------------------------------------------\nlet update = null;\nasync function refreshUpdate() {\n try { update = await api("/api/update"); } catch { return; }\n const u = update;\n $("update-info").textContent = `${t("update.current", { v: u.current })}${u.latest ? " \xB7 " + t("update.latest", { v: u.latest }) : ""}`;\n const btn = $("update-btn");\n if (!btn.disabled) btn.textContent = u.available ? t("update.install", { v: u.latest }) : t("update.button");\n const st = u.status;\n const fresh = st && Date.now() / 1000 - Number(st.at || 0) < 600;\n const m = $("update-msg");\n if (!u.inApp) { m.className = "msg"; m.textContent = t("update.not_in_app"); return; }\n if (fresh && st.state) {\n m.className = st.state === "error" ? "msg error" : st.state === "up_to_date" ? "msg ok" : "msg";\n m.textContent = t(`update.state.${st.state}`, { v: st.version || u.latest || "", msg: st.message || "" });\n if (["requested", "checking", "installing", "restarting"].includes(st.state)) setTimeout(refreshUpdate, 1500);\n } else if (u.available) { m.className = "msg"; m.textContent = t("update.available", { v: u.latest }); }\n}\n$("update-btn").addEventListener("click", () => {\n act($("update-btn"), null, async () => {\n try { await api("/api/update", {}); }\n catch (err) { $("update-msg").className = "msg error"; $("update-msg").textContent = /updates_only_in_app/.test(err.message) ? t("update.not_in_app") : explain(err); return; }\n setTimeout(refreshUpdate, 500);\n });\n});\n\n// ---- explanations on hover: after a short pause over a button, say what it does ----------\nconst tipBox = document.createElement("div");\ntipBox.id = "tip";\ntipBox.setAttribute("role", "tooltip");\ntipBox.hidden = true;\ndocument.body.appendChild(tipBox);\nlet tipTimer = null;\nconst TIP_DELAY_MS = 800;\nfunction showTip(el) {\n let vars = {};\n try { vars = JSON.parse(el.dataset.tipVars || "{}"); } catch {}\n tipBox.textContent = t(el.dataset.tip, vars);\n tipBox.hidden = false;\n const r = el.getBoundingClientRect(), w = tipBox.offsetWidth, h = tipBox.offsetHeight;\n const left = Math.min(Math.max(8, r.left + r.width / 2 - w / 2), window.innerWidth - w - 8);\n const top = r.bottom + 8 + h > window.innerHeight ? r.top - h - 8 : r.bottom + 8;\n tipBox.style.left = `${left}px`;\n tipBox.style.top = `${Math.max(8, top)}px`;\n}\nfunction hideTip() { clearTimeout(tipTimer); tipBox.hidden = true; }\nconst scheduleTip = (e) => {\n const el = e.target.closest && e.target.closest("[data-tip]");\n if (!el) return;\n clearTimeout(tipTimer);\n tipTimer = setTimeout(() => showTip(el), TIP_DELAY_MS);\n};\ndocument.addEventListener("mouseover", scheduleTip);\ndocument.addEventListener("focusin", scheduleTip);\ndocument.addEventListener("mouseout", (e) => { if (e.target.closest && e.target.closest("[data-tip]")) hideTip(); });\ndocument.addEventListener("focusout", hideTip);\ndocument.addEventListener("mousedown", hideTip);\ndocument.addEventListener("keydown", (e) => { if (e.key === "Escape") hideTip(); });\nwindow.addEventListener("scroll", hideTip, { passive: true });\n\n// ---- start --------------------------------------------------------------------------------\n(async () => {\n if (!token) { await loadLang(langFromApp || "en"); $("locked").hidden = false; return; }\n let saved = null;\n try { saved = (await api("/api/language")).language; } catch {}\n const browser = (navigator.languages || [navigator.language]).map((l) => l.slice(0, 2)).find((l) => LANGS[l]);\n await loadLang(langFromApp || saved || browser || "en", !!langFromApp && langFromApp !== saved);\n refresh();\n refreshUpdate();\n refreshTools();\n setInterval(refresh, 5000);\n setInterval(refreshSetup, 20000);\n setInterval(refreshUpdate, 60000);\n})();\n</script>\n</body>\n</html>\n';
|
|
19435
|
+
return (0, import_promises16.readFile)((0, import_node_path13.join)((0, import_node_path13.dirname)((0, import_node_url.fileURLToPath)(__bitpull_import_meta_url)), "..", "ui", "index.html"), "utf8");
|
|
19378
19436
|
}
|
|
19379
19437
|
var AiLimit = external_exports.object({ requests: external_exports.number().int().min(0).max(1e7).nullable(), tokens: external_exports.number().int().min(0).max(1e11).nullable() });
|
|
19380
19438
|
var Settings = external_exports.object({
|
|
@@ -19426,7 +19484,7 @@ function send(res, status, body, type = "application/json") {
|
|
|
19426
19484
|
res.writeHead(status, { "content-type": type, "x-content-type-options": "nosniff", "cache-control": "no-store" });
|
|
19427
19485
|
res.end(typeof body === "string" ? body : JSON.stringify(body));
|
|
19428
19486
|
}
|
|
19429
|
-
function startControlServer(ctx, node, port = ctx.config.controlPort) {
|
|
19487
|
+
function startControlServer(ctx, node, port = ctx.config.controlPort, hooks = {}) {
|
|
19430
19488
|
let boundPort = port;
|
|
19431
19489
|
const allowedHost = (h) => h === `127.0.0.1:${boundPort}` || h === `localhost:${boundPort}`;
|
|
19432
19490
|
const routes = {
|
|
@@ -19454,12 +19512,12 @@ function startControlServer(ctx, node, port = ctx.config.controlPort) {
|
|
|
19454
19512
|
jobs: jobs.jobs.slice(0, 10),
|
|
19455
19513
|
openaiBaseUrl: `http://127.0.0.1:${boundPort}/v1`,
|
|
19456
19514
|
// The installed app runs the agent as one executable; in development it is the TypeScript CLI.
|
|
19457
|
-
mcpCommand: /bitpull-agent(\.exe)?$/i.test(process.execPath) ? `claude mcp add bitpull -- "${process.execPath}" mcp` : `claude mcp add bitpull -- npx tsx ${(0,
|
|
19515
|
+
mcpCommand: /bitpull-agent(\.exe)?$/i.test(process.execPath) ? `claude mcp add bitpull -- "${process.execPath}" mcp` : `claude mcp add bitpull -- npx tsx ${(0, import_node_path13.join)(process.cwd(), "apps/agent/src/cli.ts")} mcp`
|
|
19458
19516
|
};
|
|
19459
19517
|
},
|
|
19460
19518
|
"POST /api/folders": async (b) => {
|
|
19461
|
-
const real = await (0,
|
|
19462
|
-
if (!(await (0,
|
|
19519
|
+
const real = await (0, import_promises16.realpath)(String(b.path ?? ""));
|
|
19520
|
+
if (!(await (0, import_promises16.stat)(real)).isDirectory()) throw new ToolError("not a folder");
|
|
19463
19521
|
if (!ctx.config.folders.includes(real)) ctx.config.folders.push(real);
|
|
19464
19522
|
await ctx.save();
|
|
19465
19523
|
return { folders: ctx.config.folders };
|
|
@@ -19485,7 +19543,7 @@ function startControlServer(ctx, node, port = ctx.config.controlPort) {
|
|
|
19485
19543
|
"POST /api/draft": async (b) => ({ draft: await prepareDraft(ctx, String(b.folder ?? "")) }),
|
|
19486
19544
|
"POST /api/publish": async (b) => {
|
|
19487
19545
|
const folder = String(b.folder ?? "");
|
|
19488
|
-
const manifest = b.manifest ?? JSON.parse(await (0,
|
|
19546
|
+
const manifest = b.manifest ?? JSON.parse(await (0, import_promises16.readFile)((0, import_node_path13.join)(await (0, import_promises16.realpath)(folder), MANIFEST_FILE), "utf8"));
|
|
19489
19547
|
return publishRepo(ctx, folder, manifest);
|
|
19490
19548
|
},
|
|
19491
19549
|
"POST /api/repos/remove": async (b) => {
|
|
@@ -19494,11 +19552,18 @@ function startControlServer(ctx, node, port = ctx.config.controlPort) {
|
|
|
19494
19552
|
await ctx.save();
|
|
19495
19553
|
return { ok: true };
|
|
19496
19554
|
},
|
|
19497
|
-
"POST /api/checkout": async (b) => ctx.client.checkout(b.product),
|
|
19555
|
+
"POST /api/checkout": async (b) => ctx.client.checkout(b.product, typeof b.lang === "string" ? b.lang : void 0),
|
|
19556
|
+
"GET /api/plans": async () => ctx.client.plans(),
|
|
19557
|
+
/** Logs this computer out; the agent then stops and the app shows its login page. */
|
|
19558
|
+
"POST /api/logout": async () => {
|
|
19559
|
+
const r = await logoutComputer(ctx.config);
|
|
19560
|
+
hooks.onLogout?.();
|
|
19561
|
+
return { ok: true, ...r };
|
|
19562
|
+
},
|
|
19498
19563
|
/** Current and latest app version, and the progress of an update started from here. */
|
|
19499
19564
|
"GET /api/update": async () => {
|
|
19500
19565
|
const home = ctx.home ?? bitpullHome();
|
|
19501
|
-
const status = await (0,
|
|
19566
|
+
const status = await (0, import_promises16.readFile)((0, import_node_path13.join)(home, "update-status.json"), "utf8").then((x) => JSON.parse(x)).catch(() => null);
|
|
19502
19567
|
const latest = await fetch(UPDATE_MANIFEST, { signal: AbortSignal.timeout(8e3) }).then((r) => r.ok ? r.json() : null).then((m) => m?.version ?? null).catch(() => null);
|
|
19503
19568
|
const shown = latest && APP_VERSION !== "dev" && newerVersion(APP_VERSION, latest) ? APP_VERSION : latest;
|
|
19504
19569
|
return { current: APP_VERSION, latest: shown, available: !!latest && APP_VERSION !== "dev" && newerVersion(latest, APP_VERSION), inApp: inDesktopApp(), status };
|
|
@@ -19507,8 +19572,8 @@ function startControlServer(ctx, node, port = ctx.config.controlPort) {
|
|
|
19507
19572
|
"POST /api/update": async () => {
|
|
19508
19573
|
if (!inDesktopApp()) throw new ToolError("updates_only_in_app");
|
|
19509
19574
|
const home = ctx.home ?? bitpullHome();
|
|
19510
|
-
await (0,
|
|
19511
|
-
await (0,
|
|
19575
|
+
await (0, import_promises16.writeFile)((0, import_node_path13.join)(home, "update-status.json"), JSON.stringify({ state: "requested", at: Math.floor(Date.now() / 1e3) }));
|
|
19576
|
+
await (0, import_promises16.writeFile)((0, import_node_path13.join)(home, "update-request"), String(Date.now()));
|
|
19512
19577
|
return { ok: true };
|
|
19513
19578
|
},
|
|
19514
19579
|
/** AI tools on this computer that can use BitPull, and whether they already do. */
|
|
@@ -20382,7 +20447,7 @@ var cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]
|
|
|
20382
20447
|
var cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;
|
|
20383
20448
|
var base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;
|
|
20384
20449
|
var base64url = /^[A-Za-z0-9_-]*$/;
|
|
20385
|
-
var
|
|
20450
|
+
var hostname3 = /^([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+$/;
|
|
20386
20451
|
var e164 = /^\+(?:[0-9]){6,14}[0-9]$/;
|
|
20387
20452
|
var dateSource = `(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;
|
|
20388
20453
|
var date = /* @__PURE__ */ new RegExp(`^${dateSource}$`);
|
|
@@ -20996,7 +21061,7 @@ var $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => {
|
|
|
20996
21061
|
code: "invalid_format",
|
|
20997
21062
|
format: "url",
|
|
20998
21063
|
note: "Invalid hostname",
|
|
20999
|
-
pattern:
|
|
21064
|
+
pattern: hostname3.source,
|
|
21000
21065
|
input: payload.value,
|
|
21001
21066
|
inst,
|
|
21002
21067
|
continue: !def.abort
|
|
@@ -30015,51 +30080,6 @@ var StdioServerTransport = class {
|
|
|
30015
30080
|
// apps/agent/src/mcp.ts
|
|
30016
30081
|
var import_promises17 = require("node:fs/promises");
|
|
30017
30082
|
var import_node_path14 = require("node:path");
|
|
30018
|
-
|
|
30019
|
-
// apps/agent/src/devicelogin.ts
|
|
30020
|
-
init_define_BITPULL_UI_I18N();
|
|
30021
|
-
var import_promises16 = require("node:fs/promises");
|
|
30022
|
-
var import_node_os10 = require("node:os");
|
|
30023
|
-
var import_node_path13 = require("node:path");
|
|
30024
|
-
async function startDeviceLogin(cfg) {
|
|
30025
|
-
const base = cfg.coordinatorUrl.replace(/\/+$/, "");
|
|
30026
|
-
const res = await fetch(`${base}/public/device/start`, {
|
|
30027
|
-
method: "POST",
|
|
30028
|
-
headers: { "content-type": "application/json" },
|
|
30029
|
-
body: JSON.stringify({ deviceName: `${(0, import_node_os10.hostname)()} (${(0, import_node_os10.platform)()})` }),
|
|
30030
|
-
signal: AbortSignal.timeout(2e4)
|
|
30031
|
-
});
|
|
30032
|
-
const data = await res.json().catch(() => ({}));
|
|
30033
|
-
if (!res.ok || !data.deviceCode) throw new Error(data.error ?? `could not start the login (${res.status})`);
|
|
30034
|
-
return data;
|
|
30035
|
-
}
|
|
30036
|
-
async function waitDeviceLogin(cfg, start, signal) {
|
|
30037
|
-
const base = cfg.coordinatorUrl.replace(/\/+$/, "");
|
|
30038
|
-
const end = Date.now() + start.expiresIn * 1e3;
|
|
30039
|
-
while (Date.now() < end && !signal?.aborted) {
|
|
30040
|
-
await new Promise((r2) => setTimeout(r2, start.interval * 1e3));
|
|
30041
|
-
const res = await fetch(`${base}/public/device/token`, {
|
|
30042
|
-
method: "POST",
|
|
30043
|
-
headers: { "content-type": "application/json" },
|
|
30044
|
-
body: JSON.stringify({ deviceCode: start.deviceCode })
|
|
30045
|
-
}).catch(() => null);
|
|
30046
|
-
if (!res) continue;
|
|
30047
|
-
const r = await res.json().catch(() => ({}));
|
|
30048
|
-
if (r.token) return r.token;
|
|
30049
|
-
if (r.status === "denied") throw new Error("The login was denied on the website.");
|
|
30050
|
-
if (r.status === "expired") break;
|
|
30051
|
-
}
|
|
30052
|
-
throw new Error("The code expired. Start the login again.");
|
|
30053
|
-
}
|
|
30054
|
-
async function restartRunningAgent() {
|
|
30055
|
-
try {
|
|
30056
|
-
const { pid } = JSON.parse(await (0, import_promises16.readFile)((0, import_node_path13.join)(bitpullHome(), "agent.json"), "utf8"));
|
|
30057
|
-
if (pid && pid !== process.pid) process.kill(pid);
|
|
30058
|
-
} catch {
|
|
30059
|
-
}
|
|
30060
|
-
}
|
|
30061
|
-
|
|
30062
|
-
// apps/agent/src/mcp.ts
|
|
30063
30083
|
var text = (value) => ({
|
|
30064
30084
|
content: [{ type: "text", text: typeof value === "string" ? value : JSON.stringify(value, null, 2) }]
|
|
30065
30085
|
});
|
|
@@ -30325,6 +30345,20 @@ function createMcpServer(ctx) {
|
|
|
30325
30345
|
};
|
|
30326
30346
|
})
|
|
30327
30347
|
);
|
|
30348
|
+
server.registerTool(
|
|
30349
|
+
"bitpull_logout",
|
|
30350
|
+
{
|
|
30351
|
+
description: "Log this computer out of its BitPull account, e.g. before logging in with another account (then use bitpull_login). Only when the person asks. Lending on this computer stops until someone logs in again. Welcome credits are given once per computer, not again after switching accounts.",
|
|
30352
|
+
inputSchema: {},
|
|
30353
|
+
annotations: { destructiveHint: true }
|
|
30354
|
+
},
|
|
30355
|
+
() => run2(async () => {
|
|
30356
|
+
const { wasLoggedIn } = await logoutComputer(ctx.config);
|
|
30357
|
+
ctx.client = new CoordinatorClient(ctx.config.coordinatorUrl);
|
|
30358
|
+
await restartRunningAgent();
|
|
30359
|
+
return { loggedOut: true, wasLoggedIn };
|
|
30360
|
+
})
|
|
30361
|
+
);
|
|
30328
30362
|
server.registerTool(
|
|
30329
30363
|
"list_open_models",
|
|
30330
30364
|
{
|
|
@@ -30723,7 +30757,9 @@ var HELP = `BitPull agent
|
|
|
30723
30757
|
Account
|
|
30724
30758
|
bitpull login --device log in by approving a code on the website (no password typed here)
|
|
30725
30759
|
bitpull register <email> create an account
|
|
30760
|
+
bitpull login --device --via github|google the same, going straight to GitHub or Google
|
|
30726
30761
|
bitpull login <email> log in with email and password
|
|
30762
|
+
bitpull logout log this computer out (to log in again with another account)
|
|
30727
30763
|
bitpull balance credits, plan and recent movements
|
|
30728
30764
|
|
|
30729
30765
|
Shared knowledge
|
|
@@ -30785,7 +30821,7 @@ function openBrowser(url) {
|
|
|
30785
30821
|
const args = (0, import_node_os11.platform)() === "win32" ? ["/c", "start", "", url] : [url];
|
|
30786
30822
|
(0, import_node_child_process8.spawn)(cmd, args, { stdio: "ignore", detached: true }).unref();
|
|
30787
30823
|
}
|
|
30788
|
-
var agentVersion = () => true ? "0.1.
|
|
30824
|
+
var agentVersion = () => true ? "0.1.16" : "dev";
|
|
30789
30825
|
var dashboardUrl = (cfg) => `http://127.0.0.1:${cfg.controlPort}/#token=${cfg.controlToken}`;
|
|
30790
30826
|
var AppNotRunning = class extends Error {
|
|
30791
30827
|
};
|
|
@@ -30876,8 +30912,8 @@ async function waitTask(id) {
|
|
|
30876
30912
|
await new Promise((r) => setTimeout(r, 1e3));
|
|
30877
30913
|
}
|
|
30878
30914
|
}
|
|
30879
|
-
async function deviceLogin(cfg) {
|
|
30880
|
-
const start = await startDeviceLogin(cfg);
|
|
30915
|
+
async function deviceLogin(cfg, via) {
|
|
30916
|
+
const start = await startDeviceLogin(cfg, via === "github" || via === "google" ? via : void 0);
|
|
30881
30917
|
console.log(`To log in, open this link and approve the code ${start.userCode}:
|
|
30882
30918
|
${start.verificationUrl}`);
|
|
30883
30919
|
console.log("(If an AI assistant is running this: show the link to the person; only they can approve it.)");
|
|
@@ -31043,7 +31079,7 @@ Official guide: ${req.docs}
|
|
|
31043
31079
|
}
|
|
31044
31080
|
case "register":
|
|
31045
31081
|
case "login": {
|
|
31046
|
-
if (cmd === "login" && (!arg || arg === "--device")) return deviceLogin(cfg);
|
|
31082
|
+
if (cmd === "login" && (!arg || arg === "--device")) return deviceLogin(cfg, rest[0] === "--via" ? rest[1] : void 0);
|
|
31047
31083
|
if (!arg) throw new Error(`Usage: bitpull ${cmd} <email>`);
|
|
31048
31084
|
const pw = await askPassword();
|
|
31049
31085
|
const { token } = cmd === "register" ? await ctx.client.register(arg, pw) : await ctx.client.login(arg, pw);
|
|
@@ -31052,6 +31088,12 @@ Official guide: ${req.docs}
|
|
|
31052
31088
|
console.log(cmd === "register" ? "Account created, logged in. You received 10 welcome credits." : "Logged in.");
|
|
31053
31089
|
return;
|
|
31054
31090
|
}
|
|
31091
|
+
case "logout": {
|
|
31092
|
+
const { wasLoggedIn } = await logoutComputer(cfg);
|
|
31093
|
+
await restartRunningAgent();
|
|
31094
|
+
console.log(wasLoggedIn ? "Logged out. Lending on this computer stops until you log in again (bitpull login --device)." : "This computer was not logged in.");
|
|
31095
|
+
return;
|
|
31096
|
+
}
|
|
31055
31097
|
case "balance": {
|
|
31056
31098
|
requireLogin(cfg);
|
|
31057
31099
|
const me = await ctx.client.me();
|
|
@@ -31119,7 +31161,7 @@ ${DRAFT_INSTRUCTIONS.replace(/call publish_repo.*/, 'run "bitpull publish <folde
|
|
|
31119
31161
|
case "serve": {
|
|
31120
31162
|
requireLogin(cfg);
|
|
31121
31163
|
const node = await startNode(ctx, bitpullHome());
|
|
31122
|
-
const control2 = await startControlServer(ctx, node);
|
|
31164
|
+
const control2 = await startControlServer(ctx, node, void 0, { onLogout: () => setTimeout(() => void stop(), 300) });
|
|
31123
31165
|
await (0, import_promises21.writeFile)((0, import_node_path18.join)(bitpullHome(), "agent.json"), JSON.stringify({ pid: process.pid, version: agentVersion() }));
|
|
31124
31166
|
console.log(`BitPull is running. Dashboard: ${dashboardUrl(cfg)}`);
|
|
31125
31167
|
console.log('Connecting to the network in the background (see the dashboard or "bitpull status").');
|